From d5c852d329ac2fd5b0ef8cd2d672054e5c348336 Mon Sep 17 00:00:00 2001 From: Valeriy Koval Date: Wed, 15 Jul 2015 19:34:10 +0300 Subject: [PATCH] Project generator for CLion IDE // Resolve #132 --- docs/_static/ide-platformio-clion.png | Bin 0 -> 58127 bytes docs/ide.rst | 1 + docs/ide/clion.rst | 47 ++++ platformio/ide/projectgenerator.py | 25 +- platformio/ide/tpls/clion/.idea/clion.iml.tpl | 8 + .../ide/tpls/clion/.idea/modules.xml.tpl | 9 + .../ide/tpls/clion/.idea/platformio.iml.tpl | 8 + .../ide/tpls/clion/.idea/workspace.xml.tpl | 266 ++++++++++++++++++ platformio/ide/tpls/clion/CMakeLists.txt.tpl | 31 ++ 9 files changed, 388 insertions(+), 7 deletions(-) create mode 100644 docs/_static/ide-platformio-clion.png create mode 100644 docs/ide/clion.rst create mode 100644 platformio/ide/tpls/clion/.idea/clion.iml.tpl create mode 100644 platformio/ide/tpls/clion/.idea/modules.xml.tpl create mode 100644 platformio/ide/tpls/clion/.idea/platformio.iml.tpl create mode 100644 platformio/ide/tpls/clion/.idea/workspace.xml.tpl create mode 100644 platformio/ide/tpls/clion/CMakeLists.txt.tpl diff --git a/docs/_static/ide-platformio-clion.png b/docs/_static/ide-platformio-clion.png new file mode 100644 index 0000000000000000000000000000000000000000..11f0754f7edfe20eaa046d6293189982bb0e389f GIT binary patch literal 58127 zcmbTd2UJsA*EXsi5hW_3APNWq0wNGp1f)w7=}1RH5Tr=&giw!kMM1i>M0)QK0t6yW z>Am;Rdv5`f+>M_1{m*~z827vX-DAKYVVAk)nsYwSGuPT5)l}rJQP5GGJ9qAy{3{vt zbLYsM&z<{g@$v=Wn{(wFQo!%?PU><}=L$L*mVpl!%_Ws3&z&m{1DzU?0iUnfztVF$ zckX(_+0Xf3c3CFp&dsFB%SdXvLDvW#Um4^OiyzDP!c1H<^y0Kfg_8OQOXElGxt8E< zecw`rNu4MAey;ZK3%cjdr@ZhTcz`gW3S&8cK`VfL`$3QOjHE!dN5+%;FAj=&`uY;h zx~SI|R9xE-Bc_Uixi!Bmb#kkV_42i?dPm}4x*jerFK$pF7#SI<5OMp>c}JdW?*cAU z`pBBx<|ZVB>lxxxc}YAhe~yDsKHGDV6W>MH>d9n&AC1sn{W;#Kji}4CH>iFe9`bhK zShXq*7RZY~r>wEn$P%TNRX*CE|8quh?A~oWDEmOk`~q} zC76)4$7^+wBGBik-KLLXvwghE-iLbws@QMmKxz;zcfHc-vHLqG#s?OKBDwDWTfo`}bg?gb$+xV*fic!TI7? zA6qWc-g3Kb3L=M1ExET+Xk^fA6?*E{*T&BgrrBtE1^F&^_?V3c-dsNxgYTEZ`Hx zLPK}co$8;db`Y;!0CEqvO5=lY(S-1wr%488i*9UNpxnq6H-GHln1|`Mw}_)$+3PmU>oh(kW94M;ub= zK*B_(aYUVHxTBEA7KD-Yrguef2X90@st*vXJuF@PrOG6_eW1vJWo2|H^zIEvoX+tQ z_q)9Jc}aU=-g|9GucK1zsa4?>mYEc1RLqV15e4-3LB`4^PuI~En%&bRSqpS`uXQTe z`#$6w7G~TK*jcP-y@(&5S=I~$ZQtwMutV+%B($xKxJOA7+=kT5Y+?Es_KBO|=O8!3 z!?gt&Jg*c1xz(51fRjQ&7(*e#dW0yz^=)KVXq8IdZe1@=6G{JMZ!~3Phqd2p|1fKJ zm$H_aggkA+5@&gd_`)t;!lK>jpbz1v9bsOC-uoboR6ayORXn7{%c9ZVrhJ%=IV_pX zU&HJ@D_qzYdHV@9DI0c$HlEk_uhpP6&2`6#eofwtb^Ty6^Vg0gaeO-k-`;TOD%q_> z*CY>&n6(YyGtzRY?az* zrtTlcU(A71lCuoz?M^8(7QRViyQX*@9&#Gv%tr>RzVt4I>gsiy}Ux!Y;4%F5(;qluM=&p^f!cHZ&!kCdKZrw)w{H zjI=IjdF-t8VS1IJ3pqm_WSc|LBX7_*vc7s**g}0d=>J+ZMDf;zbg{rn4!HYwI4vS9 z5YQ)Db=t1%csV9a-;8yQ(6EL1Lfl=Ib}-E+)ov{HO1NWT=2vHZcRh*%D3L)+ewuE@ zV(Iz>g)9fXggkSS`SR(mh9!YnqrvpJ1se22k6gGvGZNZfiC>SLNZGgXI5ww3J6nne zU>%k%0t*9q910S2?Ug^NK%&Q{*bgo5u)0629PKevt<(4tz1kh8+j5a&k)h;1{(e*uvA*3KVKW?=n{+^g)L>${!I+kUO8*w@6G|tK?fNiMm zZp}{Kdh%Ljns92=m!-WJFWu7ASCn{W;a-uDajjOdj{3|vyCp(vwK7G4e9uRYA&8}! zx3c;lAGJo7qCdtboH#3k`dZ5H_KV!;qe-9pMCpZW;g+u3R1V_%zYz(@LR^#1)adRG zy~ocf>R;E9Vk8gjxXas>OwupX&J+Z`<#V*5Lps^?-p9gyCc22*Q*QY;s62*!W3io9 z5OWc=k=hF?&<>9Im3`ZT=wfxOl=9^ox)@^8P@!e|>wQPVZ<^HR|5K6a;qIm;gh%Eq9!bD!mEfIxW%`a_2^_c zwPo3yX=b_wCEC)c%{aIe#J$W>kzyroklR@`Vl-|1XyR5&r|5=J2k`)&`SpF&;-MSs z69c_l=+z?rOgB5(_L)z*b;U5U{+7$5kt;f?>2bi&b;d5G||TpLhME&QyE5rgj^G_4|$Ri`Zn zw1$S*{QxcreDu%_s$v};HzPW4PGsS@XVXaU>coZlecN1|)Bz1v#O7B{C4X1Sp2-*4 z`4Lm~9O&G$Olm%TyXzgadn>-^Rdv|&3N!D(j?@uFTo*H+7%aG?Eh5PzBhu3}*J56~ z`Ct}defoe;^^Q=KtFD006#8uVPJ5r2a|**eYEAic*ph?z^)=id>OVtS9K3#27F%E~ zuE$64uMZe!{Wb!od&sGCFEFrRgIU7d{Ao{4X9)3Dq|h8CKZmx!hod&GRvOnw=B-KE z(dLV%0?aJn;7JyrWamsxDsb=+aS16}bJ%}Ct7_}By&rCuG+bgn(_;Qp&{m?z$OL&B zwH{8Z@)?WwDx_gC-pql{j_Q2TGUSZS&NH0Vu4%QCg%egVqt}B#m5B5=_Bo-yi^g(` z_$IfplMeUpj0i#F0H4fiwi;E{E!D7k1f!$*U1SL+jG+r}o`}j=;`ZYbro=7g5h_urpwpLc zGU2yBC@vZ{Ok2=RGo==H-rDDNAu@6hLwq zyH{$GDoInAKI>UrXEwWdUyp^~U1Kqs+ zkn7pv07~SmMo1NV(^QZ z{e#jm;un4Ke&0u^c-ZcJQt6n(jK3~n{VA50Lt0>qV8n3vl%IJlBUBtz9{yFO#V7tF zzE7!)VA7@Xdh4?Am@Ef^Q&3t$Y(O+1m@$f`Ygc#RhH_%2)g^-sM8@#XhNRNRkQ)h3 zMX|yj*LXS@Z&1;``lA&-QP4J?(Vg0@REaU4mDbR|`t%PlRr~m%mxk`Ua;aYL)Dv8J{^cQCPfYaN;oJj>G^en!~c!&gT2chnqWja|UNU&kfvbnq6oEIHeagO2O+-g5fgKm5_!<%_C}P!1SM!_; zhFm)RD^!v`p=FXN*AKokX81$FL|d)h$I5L_R_Lb?1`pQ_c6}{%iywst-1WRNDV=k z!S8YwHlt4NgeFfC8*Asj$#1P&-K__rwf^YQjG-UtP3kq?O0QgBS(u9w>2BdUS^RsG2Js@IbSHpJ?L+3K2!^iVE5RGWmtK1(_aXz25!N&jL0#c99S8rH^N!wT`&~ zxzzEN8ILDa1lS`fub1s1FiQt`?n!K`!y-BJcT_1-RBe*F8IZW|7&($yowX3J~4eQk0Qn6E)SQO#iB%LIrB6tD7gQw*)cJ_6R+hl`)PzRqIjpK5+G}CI`>6Xwd%0! zm8H$Dciy?>Y`j28Wpz8>OdWb4O6ra5mD9(TzIbDbT$y|b?|5Nm!}M-v^(&az;X4IB zY2$q>Tmv!MnpuipClEhvT*TaTYF$|7K&z@0M#p_#|J_b;cp@}}lNu3DYksjq$j#Usr(0x8mO}VxT>OC?*R=<$NmU|@G^uwhWe6ayo&K& z{L(~;T=HC6e;+!UTy~`z%W8b|vDoL4mEeQsPD$7fn^cQ_n%9LyH8ag285b@ zuQ@(Boe6rpvJ9|3&jnl4LZfusu9xOKX}5JOsiWD`2njSg?!s{&$qJ;ulOOt)9X z3tS$!xC-^H+xnA$jv-vMRDL%+mv z=_m!PS&Q6z6@8H@U?$R1CA(=qf1?j+vrzmvGw+gu;v0DA$AhXk1Nb*<$_~7U&izt@ z<#&;2 zvP{7F!dW|;a=Smuhh2vTbSfWr%nZcIMxK{)C+Y;V9>?~-Rb95V6s5eRDh9=nx z#5vq9RKdufoPBs47w4zL{9e8MP9gC^ywXE|oxbQl4Z~Gd7;c9K&SZi|G`7#F=m43tiVm<%r;O20p6SaG!LA9&R$Z$@$gj`;Jn>yLc(TC~L-Md<^mLgH z=l6!^*1{LsHx>_uZAzKhT&sIy#BUcH5Bw;Y=&E%+MZ;@b0@oChbvm4G*9VY}Mx79a zn^S88ae^-H&)hZ%Q+uuXlbTJH2{!X4GPl^~KttDU+)jGap)It=oz#Cy^6@NBu1~Fo z_vp_?a#*S(X>AL}Y zd%Nc|p{HMOvyUN83fkKtLQ5O*s2F{Xv2k%S&L`2aOz3#(%7Bs9SjyomCYPSt#vL~+ zsq3Jt3MJxZtWWRi=I32lvpM*EbkhxgIP=Ih|*tJ(=Dck({INKGVe<0`t*3 zVqIY)@da%3-6NgpmDzJ~`@nC*#tQ|fGb6mI3c4(L+4~i`u z7vPj`DG}Az8>+10P5OJ)nX+psz{m>pGpsW7ff_-d%;6o_wdIqq3u{-H(adDd^#Cv`vxC!FPG$eIE`G_ z6Dc*{>O$x{IJm7gAHXKza-`FOp)?yq5%1Ib0Fb`4ougthLj(o1(q*uotgxFeLuE0} zx7=rc`sXji5jklK#-vx=EAmXg^h<@wQ!IMFLZWKN(0cr+f7B(+&cm{>g({SZSUX~0 zF`*r2&pfdaXrDayPdpVm25s?qyn>Pbhaq^Us_XO_;*oj(4GOZ2c8TZN%O8Bg9-j zodRJRrQLdjjl4Qk^ebn3^hw|D%7f};98_exO4Jh`igcUE*QN%G?zP0wAlDU6oA}zq zCz#m|iNx-S%wr}fQ}x4>1y~Rx-r0l13rk3pikdurIjDpbCro;5wx||*b09=uM8HS6 zgU_(>{Z)={zc2{HHWGDg4VvvGv8#yjfSJjn>5QvpW79G1<5i}ko#XLzP%1Y~0ny_l z*0z`__>dSB?oqm~|Aa-=Sq!xQy&lmD0P+8 zId_@sn7lo(dL7m34>~CX5^MVQF@0nUnNk6CAxp`yoIgfTlP2*Oms`AX&mX7(8*dV~ zdhCcj+W6($tvCBm?mokU#XJu3PCfUwIcgp<7ml^oB48C0QkfZfhI_B!0Z0Q?`2KFk zdVXKW&9MZL^Lm*}h(0NNT$#cuN3;uBP0pi@k(jjkkq;#xmO_L&D^2+hAUm`~Hf@W(^F#GyhG5mPO+B>$~7@9Om6*Ali0?fiIVoET;oOW(}e` zfgE;m{5I-Y^rKRJeycyGM|*(&=>+x!yP=PO{}@fQIgV0x9VoSDHz>%>{BH1poF~4W z*Op*I`Y|0=aLN~XpF!f(%fs+XHDMG-Ij(KyEac#FFCLrH!u!&d^&@5fDIfOr2g8Km zK>1sQVSb-01|k2X`fK+^Vvx_`N=db?Eqe1Haz_J|-pCN4m37FM^(MAe(Os_GyN~{n zcr&Bpe&_+uR3Ws>PLFe}L`|J5W1efG-mHU1SVK(?sh$g4%+fL3WLKob?bJr2^7~|j z<6Z|Pww5^ByQ|&XsL5N&ibxAegXo}3bl5ev?XYWkzH(aCiEW;--QR;72ZZDM# zP${r zcPzQyufDEIX?g*Lk^Nm0C(sV7^o2ew^hoccP36X-lyni=UKeixx@K#%a{JE?H9Ga4 z#~$%J-52?iQut(lQ@$wiUhGOi3(?NAjJP2&{!qeHU!k2@FSu28GvVHDYt>#j4WYoC zziS=t-8OJ{q~=(aBv2TYkg8py*~wkmCspq4YSsD_kj5IW`p}UvX(++diROG-5(k@w zlo408%hLd1k;k0Ur4XB?CLf0`)B_&7PKAmR!ZR-N<1TIc)wF6HuJHrE)szp(W9K=v z#@zsa78Is|jrTXkY*S4GN9$cGW!W+O7SJDYy7 zw9^VBL|rTg;>&F-0gl2jT7IHeG4ArAfeiLRI0Pp}THy~9C(dnVQIbwT(+6f&Wlo*k z*xdSnh?dit!6~Twtm;sKhq3+oyRJ32k-5u-_lQ5N(POr`Ycmp+d#NeM6DdlC)>KM_D{AX zRImpnwYoPv<6Rqxc`)Dk0;Sc9O@fFJVZA3kl@8RXV(&whdV?0nnr3>y^8h_#y-tfv)z>CJ82lrvC>6opHY z>Vg6Oa;!u7slsPPPPeGX_Y(Acdg&wrs^J}dtQ|0mc%eGRORiZ|>?tR!Brj4<~jrRP=hPE~k)1-%< z_JxF#h=`yQR3b)bcLQ3Tkj=EA;r^}iG-X3l=UXM*Qn4yY6EzlBUlTj9!=tZfmsUfw zw-&do!FHkLAY{d>f3Cm(VBX8ZbRcuA_1m%>rFo%rF5oglQcrv}X{)D^Ny5ErU|&%X z?_!ME+{*cxUk>xebRO;N`(bxe=f9*XGC>P#6(kl^U;h+A+b%V(78*7`@jBka@2=3_ z{j?JRbc&4k=;A#k5m5H~m(3{75GKkW0HQnt!7|(`%$xOySSgr(b3)sd?$LmLxSn@z zsyoi+k=y2Ctm@10rzOgJ6klY6#&Kr#oG;8$r?XmR%xsly1P(7~@oSDP&zh3ECq-^TOKB~?EO{G%#z7h6k6~sbJdBo%KMIHxxNu; zrwel#3omkfDx&YxCTAf90FLZ^czBH6-ge*a)L-3@Kplr`c?Y<`knXqy^C5v+iLHG~ z9YOEs-EOe?AJH6}Z~?q;*oaG0&If~Pq?q@NKi)sox_KkS<1j8t^6~-*bQjznzA7ks ze8%n2&pe}RIHQ;Nt-E$wf+e!*bEnF+5xnL@e ziPK?r2_M+TguOrq9en1l5*2a+*O`PY7298a4rdB^SRrcoExzU#LqbCoa#{_{CPh!X>B2LC45m18cvh>Pi(84`(KE7D&zCBXM z{7jg5FZ$J1tLCrK@3rXuF=4DL zVeg6SIW6tk`$B)FP7gLzU=Wt4i~pLJQY?56QsKR-p$ey5WjP3-JzR(+a{%<+N-j6~ zplHz?GoTUI{Gu8m$YM&%dLZ2P5o_;G`cv zriJ0oCo#Fa?GW8+%coA3UjG0kI7+8~tip~dVA5oDFjG5Uuc2ZzlLz3y$ zYvP~hTeWtiAio1v)=m?>)%+5bQ2C9zS7?nN{89UKbTr^S9>b5p zPK%?-*K&sn4k@a;o9%JrWDJZ`n*)%je_aQ0s}QSs*B6tCsRx%e*yEBmF$O`NAO6^B z^+@vC#(T2kfq)9cFtJp?PojR#*@G0n0?-J5k&ds)=qBdAN>1 z>Q?4L$MoKAE=~u_<2^39Q1^hr0jnVt5gLomt%Gqh0TS zburQ*N`IW0m(1f2n(8u&Whn3m4TrSyHnc=$b|OS7;BDF?%NzEXP47gk>dF9N&5s{8~#EFx7~BO|G4?fRa)&}`IPCR z%^x4^Y#AzHyWg~OmhB}6DuCw5;`ZSb39&#pJv~`?WHVx-bJ(l6#jssc@ z)~hCx>ls#d9IcI|P&KKNKAVT$o2N}7&}5f^c*$FAZm*IV zb{_ruRyM?eb{zP-z0X>Q?iTnAmtU@+-e4C3+V})j#2kiL6*r+Me0i8z?a5AjdPcX* zUu`EFF00j513NL#KEuW|!otK$J2pZ$Mr*z1?(!dt=@?}U|aPmubFK;*+dRcW}?hxE1VipV&12X+qXC{Qn|wJn60eWgNv>n zvZNneL1E3R`ZJ6jCw1gZ82CY=&U=Gm%l!ZlZCX$WEia?!Uc|$*$>t*0_K1ELg}OB2 zJ->xB;Rw;6qPq(|U263yc9_+$8WO8r&#qyYd+vR7V%9L>s$Y4&ZY8?Q5P?@iwQ2li zWm2v(USkC`h_T!fL6=SvZLsm-{|WCCoG*_B4@7N@10{x$RtQC+w}^N@`s0{YDHkih z%0lLT878sfzGby&4D6K6L$wkAS6EzXu+4kz%}W)coV{G|3Q;@t!aIevtL2B2B7~m_ z(Bvl;c|vYWY#I;g<->ncZ@7quGLL0Eey=Vs2mwY{{BEU_tU@Y099O@!V6MtUdL=+y zI>zz|)qf(MFU8qb=a2vWmY}%ViK!mriTX0POJz2@SG~}8iz#U`Dp!EdX`QSuQ%JK{ zO-l`#@Jc+?NIc|qS_}2ThF7wv-i<52Hx?ELqHcjb<=!d2p`aCDQ2S8-m4bG%!r{lk ztrk>OVe(zU2g-9x+xOIWhKai!5!T&bqgYWkrfB;O2rh{%>0|;nCC1OcPD2-oep3Qx^YVs>LQuhN2Rwljgie}X_HP8u@fwpFf#O>{@M>)51&52uv5A=1zT$UOt^jNL<^*K zE%HSjh)%R3OmsQpN@|z&7_tAB>rmu>a=HyC#aO-du;eMEyZV@mzE7&6zE_SiQ8g4X zJZT=b5^+n!1a@+zeErgmU>ktS9L%*umduF*oa(fUUi~3p1>43LcIp}J!N%0)y=(4k z13LRUkB{eH-X#F$5^{&~mJCg+qOXla*T=A%MKi7e6LN*N(Lh81D8R)_U-cFmH)_FBU)>| zMppPZ>(lKw%R*VpGFz=&0OWY91?Ws2HA};|Vkc{6!cPYCRW|N_jY#?OHo1)7u(~LP zSDvDkzV(HA-_@$xX;gsrKWhbaqf+R{65>&l(e|F?Ef)@ocz7lZhpRW^ddzF;!OkiT z0kW*P3uk<9u)6?6d&6oeCi5lZRM`mEniMc~@rr-e<@uxR&pY7m>6W5=_P^^42iycV z{<8?d59FL~VDKySjsM(74S?^@(e}(Q{{!Q%arK+04O6l*43vQmVq8Agv6ttKZ z7pPXVPh)XBX}?zpsAT_K`G-~c0f1|q=MVa=B<}#vr+Qa28!EyGU$Q;pPBJoGcn~dd z)~X9$TkBJ*LrzsaBC>&=ttDqnq^Yo-aOXIC4);q&kF{bG&`P6JAczHj!I)AWefIsi z=o{evNV4m+zV6q=PP7@&qG!7Xh_(3|g8P9w$=8^~+;D^;xfAWr2saX8Gd*!QdM~fd zaH=>(=&SxN0PhTLqL$aa!kC1a3@V$OTbAmxijQ4u3h1EE_pZN4&y+PaWE_94Bi=S>u>u0{= zm3-J^wPeviR*10~P*CN~SJX}}DJ#|UTN>1?YqZX57ZXWTl6N}%I@!4=0CVp{2r7aD z%-gRjy60LmNaZ z=N1F^EA)Mk<1WI!WmJ{yMq!u$EGa%I?~dY{{ZrEp>HP@`r!>KJI3JPWotdtyQEoiU zt^CBbhDelxywIsX+t`0D%irE;8<&0sk)dLR^F1Oko!*zHRu?}a9s(ObQTM=m`FDg| ztQMR)<_RU%DiXJGX;+U~Z*~Y*MT-l=o2Vxf8H(>!RoPu$9P+jliXFfF6+ShbZ&A_l z^WzXNrqC`-N3mnCk7D84x>D|5R(4)k>kWCrtO$%>V)?sxVUOqogC|^ur{zN|ylQ$&|_C{7u z7D%j$@7`NGT0a~KHyB}Jl6O7x#rJAvh_0ubg>PndpCh`+VmIc2<}0}IZjpX+^FcjX zBsaR}g*c>}o=-mGt2dP&XJVz}3z`iqi@t|+?$esDrEMM~DlzaD$0r8!IjPl9JMeB| zlhHxs<>eh+I}R(^a`$#_&WVK#{Zfi@LZ;ZWRX01mU&`#9dpV}=2Nix!or#*gSYk$C z8YCk&uOM>L*B~yw&LY9lfQ9f4nKPbiQI#M6;tlgc$u9%lzI>s3E&(9-Hhx}DB|kBb zA<-6%UJbKd}{oCp3@=vIK*jN*bVH2rXwH8@a>6 zqok8ynLG?3k5`=?qW~m4L`{&|WHp!Zbkeb{|EOij1udQ<2cyKNQg@CNGK|{V`d2Af zj#?~&eINB}@JFu~2*_9xjJ0qcsY-aC8^sveCnP71`=rTl_6hn{>~ z<8tUjZK&?RV+Qa=cP^p2Q_&h>sv*(GGoHc{INvHo<{F#2?mKj>dS@}SM01(;HWM^{ z+G3^b7C1PQJ=1oo)@!FfO$Tb6fRhqo3Q?1kc1Cx53Jx1Iv&jL0e>>ULl=J=6_s+pR zihUHexs0a0XN`Wrl8pfqFc}kEauwym!tqX3Qneuz(cfi5+bN_uGSzA8KQugI0oZC8 zkIe7H2o)^z`A}@U?%Dxa(Z%<*cyqIKC-h;qo?JUfL>7%b$etFZr)|``LOYik!r4Q* z$4TeKI@@Uj@_iJ?KyUeMyi4KC_o+q zMD~X6=2RahAg|kNFFQm&QG^T})UR^%-bo*EQgkX9?WA6)dO8Z^v;UzA=6&pp<#``m z_e%mzSWb}hLinxc+wMC&VJ#_Q&$yD)K~`3mu-&g8Q>KhT>=Y^G$>Kf>suo7BSb@8K zI!6UKGHyVcr%-1jI#)x6tDk95yd|ofB+w8buy@n{W=)_|{+kI|EHgIS~% znGNXAJCP7Yc|sE>_w5Ih^6isB6Uju&#tT!Z`+y1##(Oe*jQJj)N|*fg+mtIfDKTcq zH_DFu%}Mf$_JanEIH}lSIQo8-g>Q9-4e0EokiY5!+@%1#F78x7-;Y;f_M!cKG53Yb zv@2HtkpC&HkMn(1a&~T!E;A&H0|3`MT>r%eHC5nErYG9}E#}DxK<%F)@Yw}we=PXj znK=9W{U-3RUV2lf_A^RIik^Fwa5(B4?o``7*2tc;Q)zI+u1lkZV7Oyx3H}9xo-c+lE`l_V>`;5(dHY%NfTX?3a29OC;H(w-Youv_yqI%?a zA98l>(jCC$l5;rUtriX>#`V-6R@V4!`fq^P6s-5!8+kTT(_!qHeMJ1K!i*d}J;$Rs z2$uyQui{Or&*1IvSAZ8=>it21`b=KWs!oIoRk}MH0-P3kMa$Qh1t&$FEG^w<->D8u zl@`0NAG7{q2U-=R(d}DSK@o+HU%w2gDl0_d@>w%vR_x%GV|&YXAtl9*Z#$OlusvA! zZUzIPB6rKl+yq^JX17HtafipqzaJlpeUqXG1CAMK z{Jq2D4baC!aGRjtKKGparo*!d%vUwg@5A`KT`cH%S6FKX>iDTRTex=jB*ywx5@41R z4v^}i$Bh}~tAZGB%igG01oOks@*J#Vu*CTIm<3l}FbwsKjAmty0S> zqVc@LlaX{_)7aQerOF$$;ET4Nk8!@W`5!!PpE-9l=#Lp&vrHs6Qk@?(>3iu-F!v_Y z*K2tA!8lz1y+CK8ScS2c;~vnEv`N;y(UmdqG-;{cgs-hCN8R2%?(lG`T zEd|ymIprYFT#eB8mps3BS%dBcfFh3-?>Tjx4f;Og*-Sph)t?pYWjh}aS*&4lGf<-1 ze}2-+webX&-30jU8^|J`>)Lq1PNEy+P@?5Fz>;yzNrGg{X!4f>;^ju!cd$Uvapbj* z=ieJdX#10Hj8~owr2G6?gq^Psuo{{i+ZvvoOm-Z*PRkAzu@&e{!WKCV*^UhJ9n{yw z{;b7cZ8g$xbDkLhd>Lo+?lHv8v#+Q>>cgO&XFDS>w?6}^gF}9T zuh5#{k)9L2?D&I=(G<_xIt2MIflglj+(%uxxd#)>nUl0hcxo_2dPII^ORzuS)U%|) z1u<>7ne}sh{!>i(aP>5& ztDE4nJG@{6Jnw(T^Z#|n-*s!04QO06A4N6H%^kfmWEDaUJ9K$jKNMOWCkto&^0QmF zq_8-8F*s1k*s=FBTbP{s8;`)B>>Ul^YZYzQ`?ut`dOrIE!=GM^TO@a2wC{R_n#Vy+ zI4++{dVy9`b!UY<_i@WzbQ%+Mcew%70))L}&EL@jyGOxmIX;%Rz?Tmi4PO3Cpsj;2 zjy$GS5YUVi3Vpk#J8i@i>efHw2@pSdi&P})ig^4s*(pyf}5M4tMC`k zzeSvt+8R1=@Ej<3*E-f8bjj|E&6G6X=5U+(8;bpuH+Puss@tWV+L}AgXD=$PeC0L8uQ|;&6}~VVtFMeom3w?K z7$J!3hO7ofgaoVPC+AoSPB7=yn|Upfk~FAolZR*pJba~2E)B&Q>t5xzb(bHs{+H%f z9!P*!h!r-Z$tR5-JEwN*Y}zS3^wWHlptv=ejzf?+*`^PcjpBAT>`1 zn=C)%E9~W(a~AWauD3#HGI(cpmts#Wl*qEHr>NWae(7S1?@bSiortP{y0z5Bju;$~GcGJ;Sd#-xKuf|7v-;eRo-|w$h5Xq~h8+m%o7o>}P{K@H6>92XWw8qPmiWRPFuod=*Z&cDTqD7tJ4_-(8XQ zqL_T(2h7fOwpjJqCN9R_huN`bb5v(F&>OYZl2bo86j^s=2}<}70k>MKT+F0STl$Q# zQ9Lue)a1U%z|BwbW2lgmmixoD*Klw%5kbDIgM02@Q_?;naz_L%Cak^*Fi)ctfY~7H z+Ag09p+5s?MVznB642^>J_O#duS3J; zlL|>nm=2xC-Lu^Pe04)t>NV1L9p!(-3Fl`mrgSKR+cQ&3upOFc;SvKtbuAz~C)sv9 z@a9qlPhI_eXh+0{HBH5bmbPQy4GzDz)%^a8aiQ-YyVUcWsw9(qcg*Rmq24c#-!5G2 z@KLtqI+t|?$o4ca&bNBIAC)=fw%eYaz5FFi%!q>O$mkdYNXc=Xt*5FM?@+7>AX~DUZ1MnG^BsL2B9v!-l*CF57s(VAzAVoqehmqFO}HHSzk{Jz2x4e z${7sn_xg;H>$|~yb!LG3ZnH|cf64+XKmWS`3%GE4aBb)J=q@g1g9s$mdj2HNN)p*T z(j~gXMz)k|SkWk4c$SrQ!BRIZEW46)OW<5l(OIiO_-wV|->`f(%ng84^XFG;=oA&I z&1>axzAiNFSapS8%f&i(yoJ6@7%D$5a<|As4Xol!#?**8Lwj!@F8676zT=P(M_}qh z?KZC4e7!OU>bSxt5+8xToRk<2TQ(^+Zr$~|#1zUhlR1aT7N_%G`@}f&)(Mt#&^Vj< zK%^>0_!;7*f!PIAg`+j4+5J*3!f@$h!W@U;v-JCTJ__-8SxN^)O8kcpY0cRd6d}!m zyu!*OedW{(zDw6VF>r;NG)x=fs;myDgz7-@>91Jtgp73|x0kL82iW@>m3qJiCjAaX zI0>y79vRr2XB~9ODSr)puIS-e8FaaNwhq`Fcq;0#f#H;Cyi*M{(Epy4;-%&b0cY`) z5=|cCq)Pfs=j_bS{VjY}o>%UGzkLDrrDEX=c_S|y?*PCw`m&}{e_w^a-(Sz?>9EJ` zszujxhpv|p_;dVcfZ6{9GF)j@VZCygcyuC zFcey-Cujo92hgxO!y%xL0Whi^0Eo^_g2}uJ+6JkDR=Pd=mbEm*WAovM+PGYrK|lFcynRJ?k@x66Y4yMG$%b=~_dG_yAh;f%0>w1BR9h#)|)TL~TRB zhdLJte2Xfevk8DEXhy-xno$j84(r`N&zLi+D+&9ytt(N?-0zaiXJDD>zZ0>0@BgOH zftP$*Kk(Zjgse~#_PA(PIiSZHmOy)B_FvP{a={JK$jAyf>;sTYze%9MP4Jza5HY>LFKl+K91earJm2YI0}`UbV!@MX zDVlx!k>aMhefF=Wc$mjZqO-Hj(=#%|aw3YE`4Jm+nDe$~Y~N6~?bza&YA%Z;_DAJ@ zRVs(acPy9@bJRK>-35Dpzg}owTWKpSF22#l7nW2hdHi_3?w8okXJ5*oswnqBGnwrB z0SkDuYJPs6$-ii86_S5Fe6{sthp{7t<6FNqqIwq;fmA<@2AKDI8UQN*n-@1oltBHm7RVIC$_*!qmnDN;CzO=_sUxeW&Mb;6u zj#A3Rpm=D3Z(_udDDm?r#_J-|T3HDk{0UDVJ9e>LCj(JrEw zhaDTK(KxEgDvs$e0&Jb_KSF<$00Vyu&}d=yV;I_8do=e#JzjdyOrGt_$wqBlwmCFEF5|CfqO%gY?;#n;x5Jm zb#gK?VI}>5U+n5XFiZG_eBIL!zFC@;Q76Lcr++6A{&o7@+%@x+Vet+`{w$()OyMzq zWRiA)D8TF$&mi!PKgi>{@(j^C2UEL5hXf4cavMTsB6sw}zM1AQBB740< zAWR}PC5W{<(|S(|{hh)|RW>9$ZtVsjEPf%d#``3|DCm-XQ?pveZ^VVaUSP+i6!`U z49W^rCTlN$I8!xVoF^{VD#6*hQOhQjsed)X)fPpQw8YmXV4c12#{-3jpf#@%y##uTRyU_)SMV&)_jvY zqnLYJc7^C=K9)jOm2)1s%KrN8rN+y6;_B1R1Nli~r)QRYPA5(lWWxf_iU+#NTk08M z>|Jp_|GZVS?=@}jK0^|va!p6N8wTyq>0D)0(sF5ho(J`~y3sQ)ww9zfl*K2;7gxNj z)LqurW}{EgM8$}Njz8=L?(|TVG-sWWGqkdwQjOdvWyA037NbbG1SM#Ib#TR*mbaj+ zygyum!w32$QcfYeDNG@&N%G*^?1A&=sInG&iH&7~VzLh1?*^E&9}-y%r)YM%M4TX= zC;xha{_aQ}r-Ibe4m<0ULB8ED<|KtD&c{;g6MrcG)Ae)LK|dfChiZ2}_|oYQm0KpF z$moWA8UdHlSdRMauDtogCQ88Atl}{Qe&r9ttq8sss!L4jB+X78`o$@MChdbo3?PXk zLRc9#UwrwdV~}F9KAvMR4$jla(j zzt)o;mOq?c2IWZI-go-J<<)5W>fLYQs-Ie{Cz_z4^nuv;lLeJfOi0Ho0N7Z}Bys!s zZ6E^+cL|DT?_!o>w5$%AV0&3D0hA{{DF1CuvlW^#D-GLKJ6+r+oHO9p0SqKhB&{vmi}>={r;H;t!+rP-9m} zF!fd)cXN24`5L8G(X8nRf^=cMj4J$HfUSyftfVLhT9xr$+%*7cDpEEaq7{@l0Kwu% zC}h-0dO2t6{3T@)RFH|pRd>h9{ig@>Cui-=TIFk&0==yc))5NSc_H`3uNp=?%D|2& z3Qaj-Qv6y^f(LSr1SPVMuR!HNR>$vhFN#Tl^=n8ZEzb8(>EaH%KpG@NS--8#FyF%= zfPM+Xu|&kgz0NXas%iHv{QNQsUd`ct`#Q)k;4sx_WB(gOeP(ctRnapBQi8&wxD+$wTa zN>sSR+AHOu#>B4&F@pykhK%k2#6DB^6BL#_1r+QlVBftr1U;D;K+?e>ZFo`PaC}rh z$9I;$3$)`|6%lpmKTL}>i6_^x|CBzqdMI)D{6OtSO7h;$#+vj}s^=N9 zNwq)1oK<6ZVRc~VOIYneV{zbKz4-RVzQRG8r=ZhefwrYocO$Map>^nI)ptB6esw~9 zRJo<4Bdo7)F(#~1aWg{5B-?4W1D&h;MDp?<;kpm6;hox%>G}SH-mL6>C%whN-4Ul< z{5?{saUJK*?>q6|ccLZ`bIE;9bx;Elr~ARjqOLXC!Zj>H5uZsPU#t3aB46vE6MK2d z1FOgo;scjG^Mld4NXfvhjeR}dz2Ly%&JPK`l=el#(RrV@COFGMWx60_!z8}KB{OQx zZ#SW~9y5wBn`HEd0<@Wr)D3TEcfZ?m*;)>)^czl5=aJkF-0lkmNb$k?$H+`$q4XMu zk#Csu`%Dr>N#C2tb6zs4C>B`{`LgU?hVHLEHfo-IG0uD*TXsfAVI#_9Mf`mNJ=)82 zC}0|CuPnWghNY$Sq0rj2iZh8KWW}HE51eRrG~Q2cALvj>qW^O!$|H5l`#QmP1yV~N zr4a}F2P;K72b(+1$@_UjdoVy#mn;}`4cBYWp*+}Drrce2L)UI7xtPe^Ext_4M~yaM zoMS9S96aONA3RrEQOW)0;wdkO;EOU@FZ*hWM7A#8;y*j7@aL9m!V7)o%bWsMq_+kG zH>tu`(bWgR(mP?Km>u55nw^6h3zP|$evyw&ik|+vO4qcZEK=6{OI^FD!Q)w3Qf>l> z;OjcKoDBG;e9!I*1zM(F%ziJfu^!Pmi*95~v14e;{v(Ak9gj;+?Vso5-P;?pbc*FY*a!|DGQPBFabwGqCr7AuOYqbF<$Dd5$FX$BjTi~2 zEFCeG_ZP1gx-Sn>#t^Avt{#`E$&$2Ct`-ACMdCl@#HtSZsFS&N#~@{|2`h3SaM>+Lp%RwoZ8C{o?LB)l7~r&s9laZ zSmiX?n&UiZ58r1~9@?tXdl|4o??7uvU+E3b;>v%Dj68g)B|R@-r*mk3W~9J>Z36r^ z++9<-XlFvZ)2HVdIG-n8yWUA_vNI!KJC>&ExhlOJfy)v7$0w(MB?0#L6MY8QZ*%g3 z(}U})Y6YxJO|Slxye(${NAO1RGBkz%`OhDm8BG9lX<;}mt^u5}W&WI|AKY|}gmLuU zUu2PvC=3bJ^Y#wSSmW9LK*swKlgl^7?%U1RPd@=v0Xe;ijILoN<> z?sQB$IeETGj{FSwTSx`RqySE zgN*bYgnE0HJA|iY+`<1BuZ#wP+0<1sdm8plheBZOwxKYU>jk@sHg%ENA`XM)W~~ zW(~~cp0i2piu({LYn6I#)#zBfP=#^%h6C&ZUlnn$RQjyF_J&Z8!RbrXB6H$ZMuXVG zf@ZF@d15?l3#J60z1vexaO@$Ax>F>H0^4rY>?AkhY5Rd65Ai<=I7{gr{X)hQ5wj?=@^j z=7TES`5OUPaT&w2lVXOiTf85wwKZXVda7csf(2%D@`P@RI{D6U)Z5K-^-f2M(CXq_`YZ83a0B!M*J6_B$>hEK*Ln1o< zd-$SN9nBl$#SS7sTvpb?2+1agyy31glv_d3eMuIBLW$8Ph zVupp~+!vG`jj!B&l-GR2zT@QdStJFaahGWxff$7~v*9h*$0b=JZ^UmTM?N~`Xoi!b zSO%QTA2dN>RUY5J00@huM$i$04tcktS70Pv?f!}TL9Hgz{z+&!T@;;#dH2F3Sm#1^ zH%@KG{uictUb0QZ)D%uxy5WLp(NwoCFx!!rOt`NNeeC zhE)xC>LhuCDtPa)XSnwYouQKVO!*7n1ZiNc{^Vq-JqP{qDi$D{0CInBph{y{E7Nt* z7EV;+Gw-7{rJFNQMvcrrLsiI@6emtqBX#K+0Y^Qa*{A|q9Fh@~2pO+~W@OpFUNm$r zCRn=-A?L|p4`wg8(Y3PEiEyjn%=M05MR%EawG^sCCgZl|6W#`iYg%!5v!Kb6#5VrH$geE*r4 z(3E;DPiri-!#OjKDKTpK_AAJY^Ob!Mw=XsL`)^B~m~=ejum0%iF}KUFXoP|jT+%(M zf}?vH7~=asJ)AcrwvZxxr7DP9%X_%B#PK9%C7_V^eisfgz)E6VZbe{3);IZQ4zvsw z`qSL{(Bg!z0rXz_2SD}je&U~IIsbRa@86jklvfQm6Yb)j2bTI4gAlq3a4vD9J%q0R zo^p+^1;ru>V_(DjU%YlsbNc+~yMRDSwjpL{QRlV$+7nPk??6Ivr5DuE$BmPgX3T%( zRG3ry!*dr!jMN>>t}A>A^j`HYC@OVX!;CCTIjO)+VQZ~qReusZ+`hvgar?!!!czVt zS^dwPkALv}g}^nZ7ok$S0_8E~K8ptYE;C(?XcQTU9KWRu zR_`KK<;Vr}NOEM?WKQZ_6>z=3_-x!9S8EBvz`(kxgaXy>YkM~BH?%8)IR|GtDj(y>Cx(Vs)mrQ_^qzs#`S&9q7D%> zOsIA>O>c9j;5Ejg-@3mN<`ufkqL@;i6>^_7p7-9Z)7-YBU(VW?UA=MDH9jqwL%1{z<06VF^csL=WcM=nm~_Visnx_S4mtmu4-eEgbg@2ypal5nbOEVur%@ZAvX1=m=f8T~N+taUnC0g!n(!L(la$Graj8~-U)atDMF;`)sM(Fe_U(qGL{ zwO9|VAwMD7l{s?>05qGqw&|R#6N^qC}6%Q3G*onB@~N8 zxi_8UMc0HeW`D&Lkoy!(AiKXaVN|s&H1>lIse8MaNK!hi!DRf6fZTB_sBE2w7?W>w4+wW#y%l!T)?PmVc&hBt zXheyrF1>J4p@%Pa7hn$VCtP}cu2kG>Bb(f(KAKmjO0#`);!%}|_Iu~*?$zZs!`jI> z@8+&|d^#gN8e5lAb(Tl!LPmV=V^c^1nR|I}a?`uaW}2pj>F4wa2q}|=c?Pw`i#;eE zS0T(yGfevN-~i@O<)xeuolmMWG53wl>(xp+qzt>+@WlJ89^s0RgHZ5WRzdpFkG9+b z5fLd?bpDd^ji*jc*F}FdsXS-7vBf$?BEYFb&6CqB+MMKvmbgi!-}jOwdq@I}jp3Et z7+%rh$*PF7yfOVzn?y>EXd#m`!74(H?iwP4YMdaguSYFt($R{g^c%gkt7;^Sf}E!( zw3*?gqQW5&=C(BnTNGSLeZ;_96QTE&1iGYfr%iRJSyCre5 z=VPT7P8aZ9Yd%+v<(70t5v<0?uj4fvIowk4Ib$U4Oc=Y%4r#+EbDr{#MLFhW6CLA| zKEj)v<~w{XDxxR~HBPxRHitjxNk zEe)J`pM2&lfv9<+%|n`aH_flqHY`lVClp1|eowSovc09hd@RqG9yGMRaJMoUsjMeE z5#1p=v#7x5rL0QoyEdTsZ7ws-#{?6vUT7IHe6y^*EPLA6Bh4cDX1Bml_GdbmAB4dx zTu8foD>6FC@b~s-lB*DPL7v~dgMxFd0=Hlg?&Pb-KJFetUeHQc3;ghch+82VLbQpavt9j$IVS3gI54t5RV+{6B+mlUD_0kTSh{y0;T?ylqL}k46 z91ZH0IOjB?7a$oNm;ZP@OZ%~RLBDDGDc6eo^@uWLf=m$S9dQTWgsnWI#~Y^#iC6sZ z2I-+ViJFQ}6;veO^jeiDD`NCoSm<0=6Ac&7nMXf{WVJ+23k&ib`xqqm+Y&euQgw9m zzZSpr#bZcsYwLt30h!;^#eBt%A8kU{^TzA(;*0kPpPuV@=fas}YDVXuFoV`Ap5?w> zEfj;~EV0XOO!&%Wm$CRn)GOM=!qaVo25s}&Ay`D+pf{;V3`=x**2-ymLMZ%GRr31i zg=(pvQ=#}I>4|L05M}YLAhbP=GO_5zE%@7Td03dIv{QlxkeMw{xZ@mU$qtg`u#VbznzQk9RwD-huVHJS4iyi{AB^(x@= zn56moEZuxJPsW;ZO-m~mU!8oMSG_1*uit@4-t%6aML5D_b5zeU&dz2Imu z{Dyv&9kjA$%XX#Hc%CT8o(NJ%5*+b;69ZvczOG_jv|naFrN zQlUN3DuRUmnlFra3k6vpnD@)b7?-Bpd0c+0d`s39Fq1vO31+rUoQb}G^kemm&n8aDMt<(qu~Z~$cFfP zOpJ4o{}u4&zZ{hRUm1Xy6To7A)|V&}P{uNIvu3J-5GFVaqyU=k+mIzIgZ23Fdt2Qx zbs!G-@k%Q2JQbJQZ9A;tcIq?ieVGe1{$|s4>}!H6>xL&tlTiS!$3JpcY=+j0Wq5D- zCQLcMzp=2l*NjmSE+){=z1*2p$FQv$(C%k1VPt?!#8)U^bWcpz)FagK9AkEA=!mY@ zyl_J(ibUI?v!TXeL52OI%-zVG!Cc;UyV7h1_GivyxHNoH>j~AVu>k z{PyI@3A+TXvRiSLrFGh|u_&oy$J~g2^F?7PfI7}qNC%^t`n=K1>K@O{NxHdq8eM2^R`Q+Ii_=@VT6{f& zo0FQ(N-}d5{qwPOqY{I!`-%U{8+C7WN(3qdWi|r-3M`e1t zpoUJ17EPK_CZ~0^XZy6clCPfP5|;f`b~ODhhe;lnvx7{|3tLjbY;=M0Srzdy`yy}S zL3UhfMT?_Ot+XPIdN!C)fU374obCoKw^vZF{>5jkysD8*lOty+af5^kwTA&?fjDs_ zA&iDgu`D5`X34{ZmuoM(#u@y`X;M!7`ZC$^0tZ`qxJdJ0Ucpywg_V*WCe{$3|W-&7KN}!ubTC3W@x>ZX# zcn7R9U~ZR-06HI^*U1U6^%LQ*(&isMvpr3(0rGE_zipEk==|9qc2UmtDU%(Ae`2XU zKIP*XYt1_^4FD%L6}QhE%7eETX-YY-I9-hWYLcz!Iv9>jHVR;1yv7pjU|pErv+o}D z(T4Js^sC|MZ}=R6?;Oa3C82&PL9|8@$2-(Gtpo*yh4Xzcv<{s%B^*mpMzWtz%WJr% zC{&=hC6}b2&c1ufwH!J;K3F>C>Z4wej0^o}0}U?8(pIQNWI3>5t5~JKU6#5~Ze8 zSa{~GyI8ECzyTVos1NhwON zomb~uA$UWn-85CEUYvS0n#kfCg5BFHgDTCI2EiR=H_LIpQ9wF#`1(yM(Odfi5Vpm} zZ_zn*aDj8$c8G)+Vu6U&{JS?LfPQHQ(Q#Ke22CS1TqIR16qX2dw=NJ^E+a#k_xWd> zQ%zO1cuG~x_GM!l0Re^*hoK!B=q4L@YAj2I=Z#>fxku6rPPdDpCd31Ol(AkejR z@H#O4K{r16hQH{8#nm>RZSjMX3Qi`HVisl8;sw3)7vy;Ye*CcNmUpqj-EY(a`)yTA zSDYEQ!r7F4M`Q`aOkTsB({TCMF4?nZGg^BD<}*%W99cs1qqxAAuJitRIttjE*&B_+ zU%<3%ep!9A)3|^i{NhVnl{8GFYTfd&{9R;~WE#JhdS5P+p~frZIB3NK`uz25ZuUeN zS1QLxPt^fSF4@xZnw?)|CK{BsXx>#Mch#OzN}F-?yFn74;BtqM`vt69ss_&1+xpya zmuVl1cZdW{aUW?)_DB#3S!B3qj{&Jl(GoJ1ho<_gD)}m-Rkx^ESrs_T%bBA$859Wt zTg+W0l@KvM0E6USiO-&4?`?^ftAwpOH7F2l!P8Ft{lOqnzU#)%vfMrpzBIig(y=}) zX|hnGEZjlGIYq29rL9o~a^iS|WtQt2bgu1>kOTKkL6T0;$=I6F@D^cbz8Y_1ne)^( zRlB%A6etm1i$bZfzYhq(1tF$LT)N;8c1yxkFo23Nf37$DW#SbENMfo}?7ZNHm(Vx0 zu1HMA@aN;PAYxjz#5bb^xp)Kc<%c}DT9iW+%$1HO$CrEoMpwO~Ma!QP*(F8!$}d;; zfbnUaGZOJV^&-zTC{Hh8ZisyzlfOyuRxX}z$7w<_18a{?)K@0BD=ygZA^EKfKMS*v zoHkRu_XTZ&kmHbeUN@Cmc&n|GD_>O#$&k@<_Z8K%5q|r~t>v5SYR^`wB>PfjY!hV@ zX?p+yz>LkK)J`c9NbZO}r`3LTSN7}X4%ucC4!Qelzxob~x@21sM3SKdRFN>6U3Of7 zUC#LCja|lvHzoZuMhfXwBsWPgfdeThu8?r3f=d> z;WQNqKTejuAcE1COIGJ&M}4sDm2N*8>u&;kbnIxO%;0=irKH*>c`1US#ZT_0>O!ev za(J*_PpOk8xn7DJ7?t`+PL8y#3DQbQTTM(8A3G*=Br}7QJSG19viro&`k=SL%kc2T zWlP~#1?+puPd~pr@26!{shayD{PIn9454Vx0L3NHKUfOpjb%^Bel8ySywjepH`}x- zhGd@o6q}RX%kbx~t7tO#_IogG9Z{J>K>TDU zm%e|6kWQ)FO{+Lp$^vz{8jbgaFx2=CJL6x&nC^WWf8TOeO-f74<8F1b0~o|2*{aV{ z!fdclsy%1;GCRRmyBoVLow$$34S%FIr!SA=%Ez@v4@ciHdlKL&IDRW9C>~;jM{t@9 zPJH0x3^sO##(5j7ibv$Wb%Kga1R1m&WlSfMUj2T%Ks{JmqYc5qAG-SFQHV^?N{L)g z`}4(iNoG&S)1J!<=4l*dUXuNAH=Zo|{%=x6rwhDMV+-e!B7LU^w3@Ws!4d? zwu_Qxq&D#@CrsPax)0$xhhkMp#@73ISy!%|-A1FcI&|FwrmPwPFM4u^sb^I%({X^<4b^Tv&JkxT|fkdZlHp(UA;i zl;I^--#@nY>xGlVJJ_rN{Ewq3jWK|M%GKECU4Q6l9Rtw<3(ssra)ke0Mx(0myR0II zL<-}9c1>5I?IyeRXq;dA?cgh~EdWyX$ZUDGXI9>*TUDf7cV73dPuhZBn9Wq1t$!3r zkHFR5#~h6oS8|<)bHwz0t;g>rkPszT=L+B%fZu zC!V-LO+4;I9`SkUYsz4a?aBoN!g&3=be{*K+sjhcsyym^gp%V(}-66Sa%hNz}2A2o=c(eqLfatU}eUh5~!e~97 z97=P*$R+P{F#%P_R6L_0Xgo;Avop$`>XDHs}-m;MA}>cG|~)vLDqN zjzJ{&*`+(O%vu!`wJP$o-Il8I5ZX(RDT*i)8f3Wc+}(p@j~7!j6F5`If_`+#)1U9b zP+Zlb=3vaduP)MAWLzaDpDKC`H?|X>VM?UV7#KX?IKG98A0J*iI`rlfg6M`vj<-SJ zfgGD)EN0J!w|a$MV)hFNBkADcy+FnviX8>hKqBTOAsB-RqdK5CTk7&9p?6ah2FePD z1(j+;aWNwZP=4X>KzPC5k3Dn*?VEqbf&cCKq%vF&j|g7eYq)TQuRqJ{52>SGTe9gN zthS4J^XX`n)^VDeihm?^lOwYGj?n8h&U+R=EBhtS{2sM95!Ev({E=AlLtJeYP|5yz zF|63HxO=;n84oAZ$F3I~fxs0sI;q=?G|Ng&Xky`q3cv)VQ%s zf9~gF7mprGQje!6qEVP*G4fAmHES4pNGK{i^IN$7D@_IdkK)At>xTRfBHjNtalyZ@ z01o;4($X{Dqk(hvTncwploI8cd!1;f&1`LR>(wYDFTrgyzNCEYfOTG5@0 zPxyXzL%BZxTSRB8p%CV=BDEiS;z(Jl(k4_UX>QKg&Ea=$SF=ww(_&vP1S&O>ZhL=q z2cq;B$e|8z0qs>Zk=6dTg)#T%1!4#MTN+s{Zboan5-Kn0My?OuE%&a`m=6zs?MweS zQs|BxESaHHhj}O8t44h%xkA*0UAL34X^?2X=4<{AH9h?X8@)G(i-^?TS~E;O|MEq- zdlFNT_`v>P;q3$)eNy&<(DmYqh2H4LY$?W8(*+WScRr#Z9?7^<7V=e{sj4SyR>sso z@GYak%sP)*SQQ8RHRiBY0{1J<4VT&BMjLY%IcfF@% zOE2(KYod+Lh}ykp8i>g-?#$q%vB}pH`V5_(QiC$NIp`?NupW$WM>~jL)KV`MJnu5; zxD<=Djc($3BBIVtpvEp8!K2dLK;yxR)%0HQsIpkz@;+@tL>w>WKAUkjV0l5%t=ULy zYwk%dsSdAp`>2{qLy9j!TcV(vM}{J@0)n}C9_Bl#r&*JV3W3z{sfr z*NvR{E)BPZ;(!PNFYGfvM?h^o6a&>2@gdNq^~ zvey4DtI&mUT<6UCTaifH_(Y7{q@yz%Z_jP}gG$9LHPJ0{0=2h(smr0A!u;@ThWRgF zw7V_KaT|-h-F{2%Vtn5uHe^mLJ!NW2R|GiU$U1N&IRq;}j$;;u{uYQ+$=bswlQ?mK^au?oLs*9eb{n zM2g#$o}CZqna`$i*SBPgTOv!7*ahYAZ`(;*rAA8OiFJ;(5jf*Agp7Bip)vfNudfdE+uj|9b10{}wOt zPeH=x{{Rx!)hRpLt0K5NSVNOrP9{A0$0Z{UXyd zP%O=39)0FTNsyqm1gceKCAwwsRk7ZW-Ng?|S2?E|Zb+o4d*xj1Gr!<~jK|j(y;*>Lw^sO22kF(F= z)or29ZF!sOQ9KevNMVnjOJlk^QrFV6c`K!ta=Y<^X&NB~AvIm){^!-EMmUEdJm6|C zduC@dfcZgc2Vj4{M=MTsDuz8L{HEX+4>nIu_(%}L1ZW4cqA@#E(Q+5gClyICamnKx z&-h`D$|}>*7gwBR1{0kZSBD2vW}e8zl&pVvGOl%gn^dvn0*?iA@MZZc933VfO$pu0 zT4-{j!f!fH;({qIQ0V+KU;-684A>RCf{e7<=++E^(^0$@H7)#mqw;wOG;%IL%+C{L zk}f#?a7#=c8K7kjoU5jw(EZ|IzcfV}`7cp)jd8qpf=s3^1WKP6I_xYH_7^@y$MeK7 zLBow#PGoGbX&9OE<`j7Kkv{@0eBPiaC^_`+6j`7^E_cGpxBsg;>jqc#=BMDYf&0T# z4m+qPUz+TG1cqu}sM!4c)$b~9>^?L{3aJZc;2D;LfUNGqA}DwZJmA`omWsmQB*7Mt zyMOXjKp`aH(ki@;aRC2(3^Zz^BoEvl9D07(YtcyMFbX`@NCrAr5r9^NxHh~0Q)iaH zM!f) z(^C3dNK3mH4X?Q&+I1>rxI=K7!Q}jPE%s|$r(0OwgswvO(~!W?_r}kJc?KIkUlv5E zUvrh|SZzxHDS;f89tkg8(A?s1^f0P=ycIgQ5A`lM@MaO$_&V7cOZvEgct4|t0&CZ2 zE3c&rLU3_*#i59DK*OkdA(;%+Fb9L7lzZ(1F6F z@mcW_W{1RU&=M28(d`Imp09958o{xPIlOmAvE7p~-+g6#3d2T< zoMo~e>}6b9$hq{Hw!21e@wRBCc*)dYH4e+)>a6ly*upM+>f7Oy9fv_Y7!p}u&!y&6 z5KRnmm2|U;*VteM`QzT#NiIfewaEuCpR38 z6r7TtR7ECz^Eu!{W!RczB0(zJukCLJc0`g3Pq3sbF!363(Iofad;e6;Yq<+M8x1O|%LJ``mqt$16eA@(O-J|0qC{pNww^4HPZ$qRBfq4)xbHTyKz1fs8Mp)B zFkrZX!|PN>;K65Fo}P{7LElr9_$Mo*OjoIZTkT;0Av@Mc`+FPSqhN=J zw-#JKmj5?L9bYlSL#vfyL~SD&xksZp0#ske8+PIJOH7TATZ6sGrS$r4OJlf)&Hb|G z7zIll!KXl?sPMx|!u%n{A95rN1w$3iQ$Fs_XSK2)%bPcskgMB!xms?bzJ!Pfcq1bx zovNKJw1qFJ8~1JPR_a0!j9~J|4*A=M5ybjEI4~#kIMY+fGBQd>O#?D0Fp2;VV0$cM z7N8JxLbrOtx%RYP_i|!QrjsnD~1tGFM>?csq&IJ72L9y1gDOtbyvhFnK* zh)274JD&Hp%?V$Dpw=qyw5cY%4_m5)!E6OHrHH{on#z4BZR;rZgsk7ovs@I~@Cfvc z!-?Ym_6R&Lon>^fEGAE;LLdt-NR9L4x^*s(tUFnQ9&|1PP=8@>AoMa?R1{Z=DF-+Mzr@DOmKH#y{A|CNOH)66u&Q2he(+SiCiKQ6I@bVUUb`}` zQ+oSa^GvJjhRiK;1N0~q4~g~Q+GzU>+K3g21`&xN+7T!Ai6JiAj{fz3$A=e!f8%+Q zR6Ot$_K29=I97|UT{W~^ckR-N6HYd?)t;#zT*Kco+gUm(&XKx32)`?9qSx7YqMxQs zfXI(2)x}LGQmtoD_*C4~ezXg^Q~pP07$ZFooQ?DHhae(tXPFE>`mmpVQ2Mt$1b&dQ zSW{>5g_Ul@!U=ILfpV#E0;&xB6{*@OZma;OH)343o>nIvKK9aZ)k%y``{e=&w~q)f zO=Ys*Ipk;Y4L?`Udt1s>a`tcyKN+B#^SCg~=jil=>x=T;S0~cLv8yp_AcB-i<>_vc z#|bECr?dNnCuT&p(0eO03?#lIX&A*LF1{HLy5)c9AdGR1iVpMKxb>KIF4g2Fp&Ga@ z<4>3h+NGag%{Aa29DHQKZ*mUwursGBs`SY2kcAJwFs|Gz*uQfl#~YPN-S0mXN51j= zJdqXuTbUwuf(ZsI3E%+Dt34}jriB^-9<#XsIvvis8pzYyi7(ZAa#Y(U!&Gx6K)Eqw*Rx@N}n z0lVK#V!EH24NuMIDTFq9r1OjUIbfl7ak`c}hTay~&l^%3-=9zH(5yOOowx{COZPk(`HS2$haMO7(Pv&LCVTNA-yWN!&R#9?}^Tio}se1Z@dhB z;s_tcYz~)-xf$I&=XekjTL&$Zrj+^VRgN-YAP96`^(jzMaQ(iD9Gp}0QaT&!-XQCg00UV<|b+l84 zaE8~?d~c=qo#$uPcn5gzl}y--Ms##QQC2MWD|y|WlgtBE=c?hzVeTD~>bLt58Lj)G zs4w51!nzyjUsr=W$6^Wb;$u7mZ~Wvl{eT|2Z{k0-q@sSu<8-~mF05hrEFf0bNH}{Q zW*iDrfBzQXkvK0tXb2RRx!}B?|H&{_`W1iZ9#Dy6ZbwOpKZ=w7TM(DOCkAkA6qTau zhxC)59pVm2Ki~xHm^C~BdGRHAy154K<94MNBnXc^q&u>Buu#ZW)%g=!INA{ITybpm zFZ;x2cx9XBv4Ps*PPWYcHD8><{KXxf1#eky{~SGa@RH(Zf(SwKJM_nuaNuotf3Lv5SKwb+0npP_ zqHy;C?)EJ3`IHK1_gc+0L5EjtJ$Z5g+y!}O@6)gAwZM--Ncr>A^XkD!-B{JnTe`@| za94AI8^gfo-mhyh!5`PFoouS>)a>7ifVRaypP%eD*7d>sD_dxpM6Kfr9XU@!2=4yr zWsY(VQ09O586Dl|v5Rs-taVX4;kq#gHBn+B!F6mez}FDp-gCgbSXjW_gz5Pw!(o+T z0s<=-_HyU`cy&ulsrUfLI0JCe$+Um6%bN2@v>Te9&d)v$v&2Tv^>YBAyJBeB9RKa0 z(8Ie(^OU5)4QpV|AI*!}94lvT)ABSF?cUapO^l4ol8%j3&q`5MqSTN?Sg__L`|rdG zG&2pdPC$RHfzfECYO@jCx%CtwFTE&Zf&=dI!3o`%fa=I|;D!jPifs&Ac~f>^yfiU?WzdLRCC8UY>Y%#UtWQpP@Y0~hbtt6LC5vyc z$tgnteMP$D=zW3)j?VBQOqSjn z{!n|>wC3)xuYjHj|Jz3#t!sn*G*_#1%ME?_WaO4@!k#$3uar>av|mVtL=WzGWj5IrY3g)9U5I4rT`Um3OJEteTU3_74HKi=6%W>?(Ar zx|Hw2?p8U*XLj^+7%#0TH)>Y4+ zRCY!FWL2Ky*%r_1r+lqT4fy*F@y;%+4iK_X8%zJ%nL%vJQnFJm*{1B*cBiCQU{^$i zKx0Qdk9M8#y>ULomfK5Latr_-wH-ihl#p^ zE(n@$TwZxO{%N1CC(rJ1YC^JYz}k7Ep1JlWQ9f@2v|HFObU8U@?!2R~j`R(0h# zo5gH5*415G#;?Zt~c62ZUL_3+ZYpTiQr3NrLgz3IPx@Q-uGw;`!xNA77MiP>#Cl9&#GR+xGBZLAQ*2GLqH01@Rz-aj zJNYL^?G^52#m{LYoXe@cA}HEMH8qnPwF=oV)eM%7xehKxEGO}7LLfeES$xU6(LvCW zuy>R1NOQ*43BAH!`P1m2ShPw-b%~Izcv_=ITe|``8d6^6yN`W&@loQwItLsk?r&WA zDj%wCwjPwXo>j9F{hic;1Aj6eT#D|ai8kG)Se{G{yw>Ps*T#of{(8FI#7r_LK4e-! zIO^N<6>uX!v1Ok+8H*4?=l+r)^X;gyi*NY-3AbDqo2(kD_w)$Bvb2zULAIEx#0;&U zzwD!eF55OyR2J+HI_$YhJleeKIxFKbIRR!fx_ndTJa3eyf75Z5 zG*nF4R`o3pO1|3`Q$-uR>JTD)tDsG)mz|+jQzSSm(o;TYMsVi> z0dlh1e}C$!Am@0BUfI(Mnk+tP4d>)s+Z=V7+*>a!z9M1oWnN_Zc8wK4jJ;O`Y*MZ6 zdjua4oOvWA*Dat9l2PNCN=t&At=&;pPfV`Bi-mGNR4ZtC)-W`mmHD#Pj7Y7p|He?1 z#(7$e60C|T*`ct!05q1J+*WVZc<=W%#@AWJv1=yV>v6+1-&AZfK=VRQEH=!j;H9tj zT6|4Hc}Yk1JY!D`%Qf$IS50OS$Fl-)7HlPtBc!7E1uYqjL_{r&?@*B?Wk)O9XliZ~ zO5Ji+Le@p%t2qg)4^-*4CE8{kyfP}La+NevlBXKrq^FVel6UE78jzB=6`x1WE0slk z>D^GC_tu}Y7?4^ySpkDsCR>URWe@8*f2h}=yAv`TBLc-{tkx=$vkOmNfw!-0yX6rq z2=t~`TLvs!8l%)Wmxvy4!h1%zJh5Jc zx$pIOYnoU6Z5C>BbPCqpDmDl^ec3O5npcP*)26Zs&1%UTqa&_)$TKJ4|AGhZzFK96 znzhh6r|6t&k$ns|`PFB=v+Xz43yD>9$Lj zke^PsSr3wn*0@?ZY`nEJg;zg4+GrkaADX;!+MTIMg^c|J54;og|t_aA|lPEP2Rk-I`!R2n|QQ%$gG9d{9s}{9=}5oc1a+C0dJW z7Bae8Q05(Ckv+K)FM0Rnw4v~`roqgpUz0z9oBTT{Zt`NOPn)T7>!GU?3Dp5^COvPN z<96eGFv=)~1!XHnZ*LChwtr3uUwgPzLUjwpK>Cc({q4x^=rc&E!HVe_a>uA!Dk*JM zeQLsqD@6B9n5gISVa1*vl|>27hfSB-a*-3TBzya$Q0$;XIeI9P;J;J3UrU zOs!svZYhPY6A0vo%c#EeB&d=m~1Qn%4z&h-0$}Aa>62{v>LcFGQ0!eS}8`RnFT&QliseXEqzlchv zOy^_;*Ytc>Rsfw-@k}cOw8jw7+4_S9TaI*-E+IDrdjV|9aNuTV`c6Jno8# zfP{BJi@qNIkJFlH?-1+8Oh~dXm6V)HsO^9oD|TQ7ttz*{(fa|nK$PUbGdAd-p|USp zDq@u~$swYuJifMFWPAHncD2s_3vuhq z1OgG1UIK(7B}8hZm(T(Po^Q}|?zz9Rp6C6o_gU{hFMnh$zSH*X*|Ya&_RQ?Dwp0&Y z3bki$%>zf>@F79(fQQwt8O!>uJUMei_MW9}U3ce?b6-FPraD)sh1CbFe5+UG99m&J z_w(^w=1~D=qP+-I*8STjl?Z3Q&^LeD{O@+mddts?E{tH7pQ%aXRqy`T7XzyFlK9Vf zAPsmglJM$BU=KiFdNB268t_0ZaP{;WH2UPS-p?qiKymV0rc@0ygh&^#f(EolyAcBL z_1=z-j+~xsFCK>$R-12X3W!{Iy&y%n!f$j2^P2eNikimtdbrY zziP2n+*`YV*-&gHwU!rg^kK_=T}}!F&ygO2EJ}>v8C|uoUUVsh{>|YK*Q}pn4ptEx zXuVh0ydWPDu;lIUrfY6^hj!+5QutM_Ir$v^lnq<`BvI`Rk4GO8^UK|pw9BGdvyGmm zd*v4yv5ST&E!;)keY4Z2TZ$xD@zBxrnTm(O8b6$4R=osNEw3-V;AjvnPLqCb>=WSj zv^{bdiL02OugQjrTu|??eo%ac#bRQ_7nCy`;pP9N#*-`M_6xHuX>|4gT4Va#)JPLD zmvcHsF30BP*5Z~{qNqm3@E|Ec{x1T^kd&4`mXj$ zi03$j*aY|t&ve+TvR%thJL`~p<7E+g?nX@?d*l+bm|P`gYg)CCazi%y{k+VepQz`T zw3H`#A05!tq=GY@#vc~570+O3((bwv$?C5A0&%)y%0bTq``GfNJ&nxu(yy`S2MXRR zm#HyZPs2=~AGy<+?FZniLuJe-qnV~uU%)Q~kZT~=#&bZj%eESh`j@&6G(9&Hk#!2|;QV~^QVe(bg?p6E zvnlNlskH%a0?`&C$MaIX9*lRXmjtVwNz=E?FmFs2k^A;8cAKk!ZC9b#0aeQ3jRRy5VS9O!h+`_xvH6I+N ziqHx~&l{kGeGg_eIUWv!AiAiYgh`7E!>Bjwqj~CwnA;|l8c#=tRb-m@` z*+FYdIV)_*9^u!D!%6vZn{H^Tk5g&XyG9?Y7AU>K4u089b7|u=UioP8a{-7(vCHxoIjZz) z3#Y2O(&PlNxxF==u(*$YA)fL0N7Y(A8x?~psC4Dp?(g+5-{K5M=be9^%uW@gNv7^# zkuZ~?%ri%67c?FP_jPo3$<35*u85|yKB=+>UNY4ELSW<3XTYdDzpu5XhC5e1(x#ri zUqo=^xzGbxd;M5%xWeen(xk1}u~=^E4ID9N@3(sYYYI5!qrr?n%=dBSbGAmv^D^rX z1=kbrVWp04&5HbK@uzsO?%I41dM1gvjSf6g%vA15=S7dN^_mlw_i;C`YMQU-dxyY; zYif#Cx=*G`X@{C;nE#sRIV;Hw)#a`)BjkC)9;CpV9BMq7tkVCaE4l5P2E$8p$>_$f zLeQ(9nj-CW9IfRYOev;iuJP^Lyh!pA6mh_q}o9??BQbUH#Y3R)1L9^CZ+-8pRxt;cAb-D(mb!)LfQk<5z zkO%ldot@vBx#cX0xha0+z0)e7mp09@N0eTgv{cqTjk+T;7T{AqFdb_&KQRRVHj}B# z%y%ToiOHjvEMmJY;^O`oL*^?-UDBH_h%K{e^9-~g^I-3hBOCRA3IEfe9%DL1ZVnM>I#SQd zYc983TCZ@s|2CIe({1q6D!@$xTmTrh4k? zkK)8U`2TtN;j{Nyp_lXM5!qoiwa-4Z@W=X|eZ~KiH#8;)D9duUq^%@?q;@wK6#xvv z7vbDeB$Rl7 z9bI=p>k_4}5tl=JMYFf~kNceU&9l3r^Y>nM0_vfXYohhCD^!uotq3lKwzIuHgM+@U@@7@jNschl8IZ@W%XxGoKNUIS5BX?89nnt z4qT6%jo@#J`?l#r^U~w|A3M&OSQH=N7zAQ z;JY^z>BkTPY^ds)sw;ow{(g>GF%A#2q<+{7T4UdD6M4%H;+((c+R+h&1j0cBu>M6u z_J@szsj{Cs=8kpZ%5;}8w#11z;|mw%a`|y78EC7dgxML`8Bu5d%|>k_h)n6<|5)Sv z7G(vLs^S%8MOANR?;9Q+(y4o@!e5gLW^`OSBSZUfHXf*>Hq5LcaRiQiVii)T;DZYZ z%d$=#W7z8R{XCulcm<1}09E;LiaH0(qfLF6eA+pDm&VpNT?o;CtZm-=mH@q0I0>4f z=K3OV-d-I_aaaj=gJ1q6=dccd9A_Qi@qy8xS$qAMpxNhYKAjnsb%)W208-w|{N&wR z-TitCm+BpQg1yChTfBn$H2R@C%byYwaJ1$n7()W|qymIe?G$D7VYE`6`(G?JX0jO2 z9I(LWRG@}YuMHRn@E8%$0`qVEIxt?Yz?HSN=@W8O-7{K{z+O1_FF&p_0qNbTOr~;E zaHqVyoJlo=^(AAmKbLvyCxF6Bz@3hXE^_Kv-6E*!jHsj`5x~WCO2Z3imZTywzavGk~_CB~P0=lvG{8P8WvK>atgFX}Go~ zOy8%?gudHL#8sCkp6=4so%|wen{U6Ib&SNC@7W}|oQoBUvN*v@67SNbsfB12Ghd4v zjE`wpjubu%f^Whswm<3yl?k1P3MsFx>caQKiE+4MLud>81SRH^QS&SgXCHjYkR5#= z!j?-i5QlI|e8~#dUosUG^nc^Exfk}#;ltuXNT;lb9a5IM)BkoFyZ&}k_D0Ujr8|5Z zy60ZcX_out7C?N%g>O813tejw2=h|J0Fdan>q2`=*xMfC86(R(qq8Jk$br+bW-4L3 zBUDG(d`9^__S8W(Zz)k)V{Hxh%2TheF+}m6vZ$K%QZY|PM;$W1VoG2-$H!imJ6{Ui z2t?k6C0pKLb0%J3SmWvS>+bv6Y8}Bb!Z+z@WsrO_(BQX?g6x%=$rFtsfjmaSqEjdu zdl@C>D&Ws`)t*am^%zgNxFIWI^Qr^KR3ymB}IKlTU}3nnOAnI zt(-LKAmD#`wzc)?V_@{mQ7L!eXVnd$Ey;eg*v;WSdOI4LAOMMKzd)(gby4l zzT0>A<+{r6dD!Uizmv8dp6A$`>vv7nlqbSIdwB|p7F^Rr6OH27Ni>7d3sSrwgS(by z(0jZI_lU&Qv?ySe@Lpp|-2)cR@@{j6cwjH^sAy!KAl_{=E9ZjT?I-+pS}0&6^c=P8 z#jPy2iZ7FU?pN*Fs7RFC2Bm^{_vNhRC0$`zNN220?1mlDKv(3WO)uMH?T1Al0wXfs z8tY1;xU{M09tD|%lR#6?y05NfVS7-}%YD3$u~bhFOE_~rjWE0UhDGKfJx+zL*uce%il!P-B`a~mPw+#`2n0)NPTwFyyjBSaUsBR2l4_aB>f^61r z)gF{$C~&H36n@f$odTa%Wk2WvGw6iirQ%7-_m$EpL}ps=%fs%B+AwPlG=^>`Zw0T) zKz7J(@VP+5b~s|QP2xacKVtGJeRgZ#GuY~%hm>Gj4@oS*u8eId?R4`m%Q9Bn_UefT zRLFh~l7!cnd4X!iA;4tg6x__4&y+iB0 z^Fz#l)_$`9NV|PFir<-ZjE+t;6q*X!gFwC@ki8&{qnMq(2A(K$Bd4UsJWcnpt_gNf zgw)pd)7SA7^E;t_p752F>fivL{50OT#UCDwUG*kjaIC%S)X8;o;p?09k-Gj1Spy(I zZr%HsjmqrAvS6-gLmf}NYq`so7-hkJWie_#y@;R*wT5I$vCXmiXueBq3W~l<(JCJm zsvoPt>Jct&8Me`6jO42`EAd($VjED=t8OOMW$mJb>dfG(Onib|l(r4QO^Df72^DI$j(eVpFvvBv z4eOlk@tmK!y7e}8CSiJg8})I%S7IxyqWtDeo#UCo9n0V}Lk0Ur-1O$`(9n=!>w94r zGG1;&dL~%gOuBia{hhW*d(%L3szL5JMl?fMR}pe=z^KC1WY~}>3n@~v7`}(hnKhJ_ zCO|x`4VM8YS6Wd3Aq9ZspH4DWjw~L#GD$edLeLipZk(yF*?I~cZk8H(WCT5buSuKh zlgYm19-A_wSl%T)kC%}|hx#cK&#dXu_hef>T1zzM=W0ObLpu#Jx*X8i%C<8fZMrva zrr5XJCbWZ(b$S>sn_lNNf9)}o%g7U375A;_H>yy*nT1#CJ(m+u&m%Y^?D*!mt##_A z9x|_x3oYP`0tj=@X3A732*kt4LTrEY-Crdi%n_9KCfI9E>)s9hK9Kg$~tW!rb}+3Sca5%tW(M#-J}TS^0D6aMNPq zWUq^Z58UP<^mr#*fp+D~{6)xrmgO7gLd3I}dg3?c%wCyj*xg@Ik0R``FCR=2 zqF%UuG3eoAOX1KOEuU!cIg=DyD_`icM%-L?Ojze%(R#zO+JS^b6Y3Oq_nxHe+$>g1 z0I8EybZlVO@g!FZcq-%k>^eP0RrLDQq*p6?qbcDQ&6rmAurjQ`wIH!n)npt0s^?tD zMwhO@%T11eEW9SePZ}JKsCMsNHUtm9UAIFy08iklMIh z{ywv(9{DpO0|I<^{6MY{)D# zHYw5(+IN5flw^{N4b6Q>(v2xD+I_LJ%O@~b+zZ_rdEq4jbdqU1K8LfgBWPeZ!nToz z-u}ob0ZlEh*RC4|-lNMCx9O+7Xur7oa53&3)K#a$xh&!C9ac1+w=6)T$A6Y~+ifBX zDKngf1olF&vUzGL#_z@%q+ltBYW17^PZ`sk(r;KwaQ&gAwGTB-Vq?fmEKAPkAG-F3 zCf}a=myxz_45`c=k^e81_M1RGsI2T?k}j!xjBn1;>9dRU`d`MU7A7Vp7N!OY>8skF z0dNlwxI6^wI}royxCAotm7V8Z)6x# zl!E7i7pp%lsTBF&9kQHHlimwx4B-w(oU1BwLisXbaRgu<8gHEi=^M&IzK5~-3g^IV zu(0+05-{FEJ>5~zI3_7iQjFg7;kMxyYd=*JOQ=r4oGG+Kq$ ztY6zmdwm}kdJp5F%(Gx$n>{|8-(G;y4%aG2qqA(6N-l-=35wM0xV(0#%Ez|>y_5vZ zVdQ&kG^veV|4BYI;?j8ap@Sz*BfVY+kwdDveX$T*An!{ z2Xv+1lW-R836oUM4w^$Z9f)L1o@4b#kXijx0$Qi$rF@H?cEdtH5739tgQ^pa)sUQ7 zQf}nU*~;~fQ9@Fe0n%;NCR`e}vdA zi_bUNwnzrbw=7m#dRSfr{8Z0^fAXlL>z}DMvf<`E7c>no3C<+w_0p#O+Vm!|UgoGe z)pWk)5_9`xfdTirJrJ*q0RVn2zz%(|sS*DxVc65NBce z9XVFp(finqyd!`#pLEQ$(@0#p0CbRvXqlqt>1`Qx^`aU+9Qek@gvGMYCvIcYl~W*) zXZbbpa04qQH2wr(5W{9+S3QtBFk_)UP>9rnUEn z*=~i-k&%2nYGaSp;9?8OThhHzLsZJ!d(E)lFUMb+;b>nCh(#v|Fp8pN(Dy%El)dV< zncOJzwYUuzD*rBnxrU~GtS&Xuz+OX|jje@OM!=vaH$09GM9}-X1n-1pPp3 zjd@o@8|z-AzaN%ZcFBI;kgMC4i;lRlYwWfV5IfJ!HvO69R@Z2S#c9EVGtGNX0*4aK zZySnUP1Ld)3+~+wx~qLUqrJ7{MIy`j8ij)tDzc6PxIAC-(9 z`w?^2@En@EEFsZs$xXxblWIGU#YbYk|A%|#!bLuukJmwuH-&uzVJ>rZ} z14G{SvFH~*Z>mev%1qNr7=KUiL_NEwj=LoZhNe6PcJX={keqMC~pv zG3HHuSv#hdPc?9TYK4r*ympaAF7BJy^g!y+))4g?7s_*=zO2&a53hoct0`&iMh?w;yLQ$=dmfr5 zAK)hk&Q0U~6OaIe`S-zr9Nr+Tk$&d>jZSZZ(!D{zE;H4O9`wD`&b$3!Zv}>Q!``=~ z#u=px%mvCR=3pMK=>FrP=zlbm0nu+*B++Q35!#D%oi0&P(JmcVatbfyDw+xcQPH#) zlU~B+VT>wYA`+w1wHag!AQHa~CT0UnmAmkn?)*L$9ip!{GG?qimR_IXqkBu-tOam@ zU8>49GVrAq?=S)AiX(HmcuCcRF9$_?@%wj}Oc+w2Gt$P#6|m90BEp}G0+)Q!|FF@s z6ILmViG`qxxDo7UOD)aVG!%*&X5}$2;KDiS-7+u45uszTb!jo^b(b=pIjJQ6pvPe? zS$teBDxymOUF+=`!#+V5zkNWZ)*=-ynL}Uq1Fy`=Bgx z@WS=Y$Rh5%H8K6Xf_!nmQ!0-r!u36m4~(z2snSVQ$T{zVg9@p>tfXLUtUHc%01X1p zeK&?Ml*Is+e9A8X>R$bH9yG^`8ys4bZ{*$>&Cp2QlDr{$mZWLu;Dhm4ED;Ft_I_{t zc(|mqrSr}_DLj`NKrMGLIs{~{*?-vHC0zVV^@IQnJ@u&8fV^#94z@%RiF8xDjtkJ- zFc?%Ja;H@IXPeoll)gp5f8jsR89{qG;^f5TtKh7WVE}#1R%SOfGv5D(B{e@))Xi0Q zFoo%8!aiWinz|nJu^_6J)qjWOIbX~GZ8nNkN5dIdUQ^}>4i;;B4~XwRi_=LJCEGIE zQbeT0;^-M5g5jiVsE82ce)7Je_1N4f(t9xZAjo=a-IXY5YEM;_OxR!!Th^g9&%lZa zb%R(8mi$dc-QB(6ms}2*xwi&o7`%(Hkzmf%o>T zT31w33NIozT>$f(2Z3(&OAZEPT28ha2T!y(X42P{rsJEh(k9cZL}ApM8+n=YqdTu; zzR-I-XYbbT%$Q*<^MTnV>%-LSlOm$dwlQc^|9vk-f!>cP(bM~KHIZ3QThIO8S4m3J zNp8O1O!Jx#Q;RSz@2ZsLFLX9vT!-|}?j~I$7h_L_r-CJlu)}GU7sLl{K_1@+C0^4E zcR>YrnpO7$eT6<^A`%s0(X$L-^)Ael)8^lCZNx(NY<0vC@}gTgunBQ#*81danJgi;-otM;xvAF8%64DUX<`uB2l}ig%=BzP8Yo zCm-n>=`y*AE_)8-it1{m=k#8z2~Z2grWLFg6x(ijYlC73<>J|Lk)$h$ECo?C+m49Y zIkm)O^%Ty@>%5Xg*T|8fNdWsk`-M3_d7>w7KRDAB_yC&Z*%$Lsdak4DvCNWALwFT7 z+Af{ zrC(aB&DaZbi%tKoH3ecX%eaYHZUdl6#wE#ovZaaX+z@$c_aXFp8#8{@rCg?Fy?hpw za;Z!)p42J(A@*yvjh;MoIEnUk=}y*A`ONq|Q|MQ?tZtvv+ZRFJ2A*b0BU0!13|oU< z|80(U4SgrLbt*q!nBa3d!Xu7ra88ksW-c=@r;W7dhR*b**jva?v7qD|J<`&emb-wc z0iP_Hs*+vPgOAbr;-+UePRTZ{rG4%LnssfYr@)6TlLf zj=|)?X!*p#aCDdTdm5?du(!+&0cLMq%dCwBf$kR^T0;z0jN!F&?Eor&@V;*U8Swqc zr9`H|C_T?~=sw#m1d9E|5o_K)(Euq_-27@yV=lSfC76T%f3968X3m31N#L>rFtn`m| z9j7`;$F%}4X29jv5@wWf2F;jgb3Z4<`Pw+X?ffXdXEnFm zQ1K!))Ij6O5`JjJv18A<=?XLwW5sJm2NL+a+NCD@j%>48B!=O)8; zhd$H5SWm$|p3tB%Fm2qW=q)rr43_~yRwisN#cZ5Tlh zq|=hT124)6JJ55nC0@w=t&rCa8mrFoX&8A)1qye$@CF(ARIX+2ohr>eI3fdCYRn3d z!_U-tT;|ZPLEmd_UJ1lPsnOao$(70W@u=m2MS7DUvL&lA*86$N304EmG>*a9(VRB1 z_)DIz(z-OrM$JYR`tl3Qs@Iiho}Si^eUSl%gr}$4T8uRswLC24`A;HIDb;TKLupAo zo$Tt?K7|%rc0(I28UA0%(E)$kb(00A!90|y68)5M(aL8|HUEnO>R6a9#=fG{czONZ z%WA9`Sjx#@sG@6Uw1mEL+by%`BXv#ijHbvFU(s~rXaS5YM>NMI!pg;OcaU|`k#7)L zw{#qIIwof(dy>rj`(&>d2bM1cOm!=c*78{%oCG3z_@xUA1!XUq(T66li@uDBOt|lv zt}3lzH(-Yh6ik>$8nmzZzbr!*m^(gYHartIA+L2}L-}D%1$`Xx@#xEqTyIfWVEVL4 zn;>XS^ozFHy=n-*?Bh>Yx^~DH9DG?G$i1*q4M=(_8J@K;>p*` z&r&URhxcU8>Z24r>-NO8T9SQyJM@Oz>*8Uwuv^O(Q2bhL{T(t<8~g+nNMcjllN8^q!f=xRe3hq;B`vArQ1?e)*j%kM13F zu)wDym#+VR z_(}5wuS1{_-0)vJR11%we$0baPrg;|O+7z#`#9fA<`2&^J?NkRe5t(cq4G1~<*C6p zs&7~jWtf>eKe7V(M`^P3ZNa)~5t9_~HR$VF*of59gF_7W`${zMrAuex&)=dv7uQy4(M z{gt<(sb;m zGK`uzro`;v>uYnV`B;TEUkhVba73rl*ZnQGL^Y*{bq)(-I=-%&m>P2a2$Hev&5o@c zgQV<^VT+wa%XfRBR9An-ZAotP^bZyT;kJRk&fW|6gN-bt^Imgv)jn!dkap(8C>XgB z3d20_%iT43JXf-DyMr1 zkzghVCL_o)M(@O@3;6XbmpbjK`!3a`L)D1<-KZ<+b;(zFly|2FjtiKYvyY^I2ll7; z)7{b<3Eq>zZ-mWe_exMKuu<&x(uD%DXV%rM)pNaP8THCJ)*I@&V{He4K^?HwT^v=^(aq ziVv14`-KNvHFEH^&yb4`c$y5*h~1o-IPcMC6Suwb{MF=vh``7yezptaDX~qyFF~jg znOI$zw%hl$1N+k(9<$NBJeM|-iY=iBM{6Z>-CWprj!80SjfcCJThUw-aTGUYp5s-t zEWe2#Z1W$i_Ip6#kDsjeAd57oQg*5+!Q&yzh=W~l5G~aMI=pO90CH#NKUoKNuxg&U zSOeA$9@wwB6~MO{CG66;)U{DQ?dPQlM;B7uv=26B=e3q{w>tlBjxU#b5J04Sl%FDn z@+T(Xf)yXQLMt)tPCFg!Mx=OH;v}3}Z7RdIyR$QZsoSu2LtJH>peXpli{Xw3AHt6> zGs4u{SCNe&_VD$5!YYEO8MM$Eh1y$ao=f=N4G7UM;VeUdzY*B<%Y@gr$qW@XP5T9l zDJj%`A_+bMCJwz9nT!#C1Qp27*@cPqTMOt zfvF01>ZwHtN7V3>YrSHU=}khE@tYC@5%aEcb$g?}}l-tIJ2_a*eS2Ji%3$@=T0WrV;8+r*oPqqW6i^l~)3E-r${Kt{Uj?wbDDDT^w9X#J2 zONMlc*9u`MuxS^Q2(g2hhH4m3M$ika*G0gqVqip0C?-zl*BamFmXiY$4V_ZQmZp#D zNDP=(;}T?RgNP|a?)$!#D*B=Hd6ylX2WHy>_TE($L;1NQPhp;MUH%_t`ag2D%O{r4 zgr8&Dji*+@`Q6$trMLJznqypl&n(3u!b4L7tJ+zP=R4I|ae)+bsZF`dJ%11fA zc+ob*W2McP8c)^w3U%frc$rczE!A<1NHy~8#x^-GPbin~gqzq__J0

@LFjhUYaS zYF&~OOTF%xj4{_>gh<`?jC7 zJD>7cy6STG_D86Tif9E&^{nN^hvg}c9J0Pw$EeFJayNb6bxW}gtZrk(I2TqdiqgBz zYua)wC)jtdjiR($d9YzBfZSO`1+HO~O##NQv!To*XS52wI6a0YS(H?KS#y2NnK;>{ zvSD7J+gchJ?P@)iRi?t|YFD;f6{w(!S7*h$P9HpJd)jF=@UBj&^Tn50l2sKXIL>Z1 z$kHoHon#gq-8uMp-?fZlJYqV$XebjYBUok2gJ!J@@UEV}&pqr`d1#vjdTYNJ%HJYC zTwfdWHc8DICBz33aI0lga+$c_hbp#~+~>H^xuy<7khYWk>+MH%XC~=I4ibS<`vWnX zHB9dI5vuR%vXeT;?4l+8819;XuK}wtdL``_FLv&zFDfj(#Be6Iw`yLz5}AM1X9*v< zz7Vu?eY)!bVLDg*&PIaMPO+|qg(uEMG<{y#G=kP%UCA~3WDajV)mv8KW*FafW71jP zw~4Z(w`I&z^@k!FQHpX4o;QV=S(Y9Y--|nO`_dEytH(BH@B0OOu##N7N3@`v?%}Im z+`bWx{aa&5MV%JmxXiKk)XIy3%}Xk35vS!I@QPY9j+RgWUOozzrWo8dnChY!54Z}wD<^jH4)5=8p@Lm^(rDKc z6!OvLX|DMb+gvZ?vRo<&q`6Ot`~bc@dVY7L5S&;&(=N|n_U!0v>i+zbR*C!lk)GTcFkT!DPO`>bS(DY znJ)0(D_bjkRN0=o>x?Nt3sXg#8C~8O*M);f6Lrz+ciwO}ue!k>`+hxL(|&CCEJ%45 zZQ-|%2r9g@51iW*K{4vVcQAW5M!!uotUGEqZ=@FV`DzgtU*Jsf@$FHoFy{!oyl-C; zKf>~@f}4w#E6(d8xknRohIH*AMUB7B$RScjiT-e_7Kt3*dH-;(o8IuXHpZuVPI$9d zrMG^q!6n$m0zTlVRYRU>I+NdN4DWHGnWy~fW}aT{F(3HFkru+_v}U&HYi;?StI`61 zQkd?t@je)+HK>-HOM?Yq0XpMWjXoEdj_nO#YF9el)MjW6EQts8xY^wN9hVT$avVXj zC)uOMgQ8H{b5sW5>=D)>6E8{oJXavR*t8w;bzaA>A6v%}38N84(lN`M ziCw9}oKn()14D)Z*nR@U?ya7W-<()6ZV4KR;Ut+$rIYH#ho4Mct7kv26tG07`+3?N!JNgK8h|Tvc8zUAG5Kyx-qtp)cS3qM~RT z5ILcQg0F+XNcbiJQOSimpn>Zqr)ql^o6dvU1pTGKL2!^xgek(nYySOG)g)MGpt*)i zCbnoS+_afg<8KVxXw7k_^Ljxe2EIsc?;&oRh7Zk^bSNWeDQc-E!$^bO?<`qLJldcK zbx{`bEnfJW#rPB>c_(>~6{pi4mnh&FwyaJKx7CleJH-oL7U>)EFk;WaxqmWoYxYP? zXRZ43co0N_k}YzPyt6L?8L3#{F!j~;UzxKLvT7SA?Cxc`!OL!5`%()fi8PP!)G;E; z83&W$8^L{^cvjOWf;avk{p-^=t1gaVl9PMR3%@O)Lq@JM|E&6UA{aMF?@XJcHSxGi?u|aAaBb3sw~u_@a!hID>G@F2Bx3%2k5FcfR5y z4zVxp78ylMh03E}%sHWDJUM3L=$Tbx((R0cK6CTewtG7T-S~@h9-4hlBR#k!={Lf) zS##G3=N~9nx#t{selaotw)7MnagIUXg?WQ#cu@xv6a=nfG;yKF7tf)y7Rv8w?d5&`VI#1XD!D)o&@b4JK#N4Hk3Zn>UMbXM&qu|oub=Mp8qd!Ul8~J literal 0 HcmV?d00001 diff --git a/docs/ide.rst b/docs/ide.rst index 48053b78..6e5623fe 100644 --- a/docs/ide.rst +++ b/docs/ide.rst @@ -7,6 +7,7 @@ IDE Integration :maxdepth: 2 ide/arduino + ide/clion ide/eclipse ide/energia ide/qtcreator diff --git a/docs/ide/clion.rst b/docs/ide/clion.rst new file mode 100644 index 00000000..2beb1c31 --- /dev/null +++ b/docs/ide/clion.rst @@ -0,0 +1,47 @@ +.. _ide_clion: + +CLion +===== + +The `CLion `_ is a cross-platform C/C++ IDE +for Linux, OS X, and Windows integrated with the CMake build system. The +initial version will support the GCC and Clang compilers and GDB debugger. +Clion includes such features as a smart editor, code quality assurance, +automated refactorings, project manager, integrated version control systems. + +This software can be used with: + +* all available :ref:`platforms` +* all available :ref:`frameworks` + +Refer to the `CDT Documentation `_ +page for more detailed information. + +.. contents:: + +Integration +----------- + +Project Generator +^^^^^^^^^^^^^^^^^ + +Since PlatformIO 2.0 you can generate CLion compatible project using +:option:`platformio init --ide` command. Please choose board type using +:ref:`cmd_boards` command and run: + +.. code-block:: shell + + platformio init --ide clion --board %TYPE% + +Then import this project from start menu or via ``File > Import Project>`` and specify root directory where is located. + +:ref:`projectconf` + +.. warning:: + CLion is still in the development stage, so some of the features probably will not work with PlatformIO + +Screenshot +---------- + +.. image:: ../_static/ide-platformio-clion.png + :target: http://docs.platformio.org/en/latest/_static/ide-platformio-clion.png diff --git a/platformio/ide/projectgenerator.py b/platformio/ide/projectgenerator.py index 2d6dbcc6..1720e467 100644 --- a/platformio/ide/projectgenerator.py +++ b/platformio/ide/projectgenerator.py @@ -2,8 +2,7 @@ # See LICENSE for details. import json -from glob import glob -from os import listdir, walk +from os import listdir, makedirs, walk from os.path import abspath, basename, expanduser, isdir, join, relpath import bottle @@ -76,14 +75,26 @@ class ProjectGenerator(object): return result def get_tpls(self): + tpls = [] tpls_dir = join(util.get_source_dir(), "ide", "tpls", self.ide) - return glob(join(tpls_dir, ".*.tpl")) + glob(join(tpls_dir, "*.tpl")) + for root, _, files in walk(tpls_dir): + for f in files: + if f.endswith(".tpl"): + tpls.append(( + root.replace(tpls_dir, ""), join(root, f))) + return tpls def generate(self): - for tpl_path in self.get_tpls(): - file_name = basename(tpl_path)[:-4] - with open(join(self.project_dir, file_name), "w") as f: - f.write(self._render_tpl(tpl_path).encode("utf8")) + for _relpath, _path in self.get_tpls(): + tpl_dir = self.project_dir + if _relpath: + tpl_dir = join(self.project_dir, _relpath)[1:] + if not isdir(tpl_dir): + makedirs(tpl_dir) + + file_name = basename(_path)[:-4] + with open(join(tpl_dir, file_name), "w") as f: + f.write(self._render_tpl(_path).encode("utf8")) def _render_tpl(self, tpl_path): content = "" diff --git a/platformio/ide/tpls/clion/.idea/clion.iml.tpl b/platformio/ide/tpls/clion/.idea/clion.iml.tpl new file mode 100644 index 00000000..bc2cd874 --- /dev/null +++ b/platformio/ide/tpls/clion/.idea/clion.iml.tpl @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/platformio/ide/tpls/clion/.idea/modules.xml.tpl b/platformio/ide/tpls/clion/.idea/modules.xml.tpl new file mode 100644 index 00000000..9ce81f04 --- /dev/null +++ b/platformio/ide/tpls/clion/.idea/modules.xml.tpl @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/platformio/ide/tpls/clion/.idea/platformio.iml.tpl b/platformio/ide/tpls/clion/.idea/platformio.iml.tpl new file mode 100644 index 00000000..bc2cd874 --- /dev/null +++ b/platformio/ide/tpls/clion/.idea/platformio.iml.tpl @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/platformio/ide/tpls/clion/.idea/workspace.xml.tpl b/platformio/ide/tpls/clion/.idea/workspace.xml.tpl new file mode 100644 index 00000000..04b41db6 --- /dev/null +++ b/platformio/ide/tpls/clion/.idea/workspace.xml.tpl @@ -0,0 +1,266 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + % for file in srcfiles: + + + + + + + + + + + % end + + + + + true + + + + + + + + + + + + + + + + + C/C++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1435919971910 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/platformio/ide/tpls/clion/CMakeLists.txt.tpl b/platformio/ide/tpls/clion/CMakeLists.txt.tpl new file mode 100644 index 00000000..9707347f --- /dev/null +++ b/platformio/ide/tpls/clion/CMakeLists.txt.tpl @@ -0,0 +1,31 @@ +cmake_minimum_required(VERSION 3.2) +project({{project_name}}) +% for include in includes: +% if include.startswith(user_home_dir): +include_directories("$ENV{HOME}{{include.replace(user_home_dir, '').replace("\\", "/")}}") +% else: +include_directories("{{include}}") +% end +% end + +% for define in defines: +add_definitions(-D{{define}}) +% end + +add_custom_target( + PLATFORMIO_BUILD ALL + COMMAND platformio -f run + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} +) + +add_custom_target( + PLATFORMIO_UPLOAD ALL + COMMAND platformio -f run --target upload + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} +) + +add_custom_target( + PLATFORMIO_CLEAN ALL + COMMAND platformio -f run --target clean + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} +) \ No newline at end of file