From 0f97ae3dc3a865c098dd9e5cbd642bf5cd941f1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Omelette=20=E8=9B=8B=E5=8D=B7?= Date: Wed, 10 Jan 2024 01:57:06 -0500 Subject: [PATCH] Release 1.0.0 --- .vscode/settings.json | 3 + CHANGELOG.md | 20 +- README.md | 101 +++-- docs/img/demo1.png | Bin 0 -> 45793 bytes docs/img/demo2-1.png | Bin 0 -> 30413 bytes docs/img/demo2-2.png | Bin 0 -> 86782 bytes docs/img/icon.png | Bin 0 -> 1751 bytes package.json | 139 +++++-- src/extension.ts | 82 +++- src/hooks/dcs-fiddle-server.lua | 642 ++++++++++++++++++++++++++++++++ 10 files changed, 898 insertions(+), 89 deletions(-) create mode 100644 docs/img/demo1.png create mode 100644 docs/img/demo2-1.png create mode 100644 docs/img/demo2-2.png create mode 100644 docs/img/icon.png create mode 100644 src/hooks/dcs-fiddle-server.lua diff --git a/.vscode/settings.json b/.vscode/settings.json index 791742c..34bb6a0 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -10,5 +10,8 @@ "typescript.tsc.autoDetect": "off", "cSpell.words": [ "reimplementation" + ], + "Lua.diagnostics.globals": [ + "net" ] } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 79f901f..2a73c2d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,4 +6,22 @@ Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how ## [Unreleased] -- Initial release \ No newline at end of file +### Added + +- Run current lua file on any DCS server according to address. +- Run current lua file in either mission or GUI scripting environment. +- Get mission theatre command for quick testing. +- Settings to change server address, port, web auth credentials, https. +- Display return in output window. + +## [1.0.0] - 2024-01-09 + +### Added +- Run currently selected code via right click menu. +- Commands and buttons to quickly switch between local and remote DCS server +- Commands and buttons to quickly switch between mission and GUI environment. +- Warning for remote DCS server address not set. + +### Changed +- Consolidate run code commands to different targets into one, execute based on current setting. +- Improve output to show current runner target. \ No newline at end of file diff --git a/README.md b/README.md index 362e7a2..7e995c0 100644 --- a/README.md +++ b/README.md @@ -1,71 +1,70 @@ -# dcs-lua-runner README +# DCS Lua Runner -This is the README for your extension "dcs-lua-runner". After writing up a brief description, we recommend including the following sections. +A VS Code extension to run lua code in DCS World (local or remote server). A reimplementation of the [DCS Fiddle](https://github.com/JonathanTurnock/dcsfiddle) web lua console. + +Allows for quick development and debugging of running scripted missions directly from the comfort of VS Code. + +![Demo1](docs/img/demo1.png) + +![Demo2-1](docs/img/demo2-1.png) +![Demo2-2](docs/img/demo2-2.png) ## Features -Describe specific features of your extension including screenshots of your extension in action. Image paths are relative to this README file. - -For example if there is an image subfolder under your extension project workspace: - -\!\[feature X\]\(images/feature-x.png\) - -> Tip: Many popular extensions utilize animations. This is an excellent way to show off your extension! We recommend short, focused animations that are easy to follow. +- Send Lua code to run on local DCS or remote DCS server. +- Run in mission or GUI scripting environment. +- Right click and run only selected part of code. +- Display return value from DCS. +- Fully compatible with existing DCS Fiddle hooks script. +- Optional basic web auth for better public server security (see requirements). ## Requirements -If you have any requirements or dependencies, add a section describing those and how to install and configure them. +### DCS Hooks Installation +Install DCS Fiddle script the same way as the original web version, and de-sanitize mission scripting. +[**Original instruction here**](https://dcsfiddle.pages.dev/docs.) + +All credits of this scripts and its API implementations go to the original authors [JonathanTurnock](https://github.com/JonathanTurnock) and [john681611](https://github.com/john681611). + +### Important +If you want to run code on a remote DCS server, you need to expose its Fiddle port (12080 by default). This however, creates a security risk, as everyone can now inject lua code into your server. + +It is recommended to install this [modified Fiddle script](src/hooks/dcs-fiddle-server.lua). It allows you configure a basic authentication at the beginning of the file. + +For even better security, put the Fiddle port behind a reverse proxy with HTTPS. ## Extension Settings -Include if your extension adds any VS Code settings through the `contributes.configuration` extension point. - -For example: - This extension contributes the following settings: -* `myExtension.enable`: Enable/disable this extension. -* `myExtension.thing`: Set to `blah` to do something. +- `dcsLuaRunner.serverAddress`: Remote DCS server address. It can be an IP address or a domain. + +- `dcsLuaRunner.serverPort`: Port of the remote DCS Fiddle. Default is `12080`. + +- `dcsLuaRunner.useHttps`: Specifies whether the server is behind a HTTPS reverse proxy. +If this is set to `true`, you should also change the `dcsLuaRunner.serverPort` to `443`. +Default is `false`. + +- `dcsLuaRunner.webAuthUsername`: Specifies the username for authentication. +**Requires the modified DCS Fiddle script.** + +- `dcsLuaRunner.webAuthPassword`: Specifies the password for authentication. +**Requires the modified DCS Fiddle script.** + +- `dcsLuaRunner.runCodeLocally`: Whether to send code to `127.0.0.1:12080` or to the remote server set in `dcsLuaRunner.serverAddress` and `dcsLuaRunner.serverPort`. +This setting can be quickly changed with the buttons on the upper-right of a lua file. + +- `dcsLuaRunner.runInMissionEnv`: Specifies whether to execute in mission or GUI Scripting Environment. +This setting can be quickly changed with the buttons on the upper-right of a lua file. ## Known Issues -Calling out known issues can help limit users opening duplicate issues against your extension. +The return value is displayed on in the output window, which unfortunately does not support syntax highlight. Possibilities to display return in other ways are being looked into. ## Release Notes -Users appreciate release notes as you update your extension. +See [**changelog**](CHANGELOG.md). -### 1.0.0 -Initial release of ... - -### 1.0.1 - -Fixed issue #. - -### 1.1.0 - -Added features X, Y, and Z. - ---- - -## Following extension guidelines - -Ensure that you've read through the extensions guidelines and follow the best practices for creating your extension. - -* [Extension Guidelines](https://code.visualstudio.com/api/references/extension-guidelines) - -## Working with Markdown - -You can author your README using Visual Studio Code. Here are some useful editor keyboard shortcuts: - -* Split the editor (`Cmd+\` on macOS or `Ctrl+\` on Windows and Linux). -* Toggle preview (`Shift+Cmd+V` on macOS or `Shift+Ctrl+V` on Windows and Linux). -* Press `Ctrl+Space` (Windows, Linux, macOS) to see a list of Markdown snippets. - -## For more information - -* [Visual Studio Code's Markdown Support](http://code.visualstudio.com/docs/languages/markdown) -* [Markdown Syntax Reference](https://help.github.com/articles/markdown-basics/) - -**Enjoy!** +## Credits +[**DCS Fiddle**](https://github.com/JonathanTurnock/dcsfiddle) by [JonathanTurnock](https://github.com/JonathanTurnock) and [john681611](https://github.com/john681611). \ No newline at end of file diff --git a/docs/img/demo1.png b/docs/img/demo1.png new file mode 100644 index 0000000000000000000000000000000000000000..79eefe12cb68a9a4c786f621b3205092a50064b6 GIT binary patch literal 45793 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

Kx9M}^oE4k7h zc;tlVI3PP3W9mN$_A0xiSL@1D$!hFNwtU`TA*a?an#sI+hqFaW?oT*0TZ2!F#Nij) z^;Bs_{jv<-_uPk7^=$H>@5CCsBPs(IZqv+_7^neu-Xp?6CdcZ!NS`yZQGs3kq(LK5 zE%K_nil3|WPjJR>cI^1P2Fy@OPJvi-d=EKIWtYVywk9wzoQz3PL22H(wB>VaXjQZY zsms>K;MX&|-u0NTylW^8@wi@$`1$)l`)gW+E2H&LWi?H_I$K-QMMwQl1QtNgOX z(Il$+>{O3OiL74cje=Ow`cmH2n4c0W*EOquH;le6%VF9VSpDM4k0fEx=+{>{YeBtK zpJ4bKI(yc@@NaUY!>S$AX@(- zZla98oG*$N^BU^<+H~wJoN`2uJ^_XIoqLBSRXGO~c^{vF>0>IsGvDBJRAV7m`n@8G zSr!Rsk#fQYq{_*U^T%hup?D$pCf|u?Us1NIDzkOr@{Eg1cf3uJ6b9zpWaGkOxA(-a z|6Z!)d3VgaZe5O^V6FEUemH+Iih?y6_F|_dKa=g-aw)y_bn>jkR+c=hv1s0_4JnLU zwL88Hv>CHm9Ls%0#>yqnR=;7Jn*kC8=u^YLC|?swuvDw87_J5ybr5TM%~ET5@dG%i zaDA1m>Gnl))0U|I02BsPz9Yp~liB8ZMjb3Sic6G^{I9e%IdUVZ z#$!j%k~Qq^;6|#Zdu`+9-<#=u^dDwy;=Eg;5RXDcBchTc8uqc_5NM0DE_c*gqKhnMEATqTY zW_9oHjYa}`Q%RhE4wERL+bStWNc(YVU(NiYj||3R)efdW79Ead%F&OdqDjg)6Khiw zd}{i2LoP{4Z?WSOxDeFP7*LaR<=dKuh^Gcl2V7=Ht|A~?p?$Y5qi7f26nHD~JoLg- zef)QF(OLgo9g=29=OSAbHD2#aVQD{3`e0sR1FIHu)vW|NWioMhih%sfJ%RwGV8cSU zR(~F2O^uAqfv)cf%QjzUuo#zty zed?IaTj#B4O(*;+PtWbjp`nG8L|Nzk>(UOU<&T>2f3b;s!HBEqoBHr1FQgwa-P4u> z`*%fpNfubP@z=Eb|6yp=S}F;s%3a-1VeE%1mN&Sw|4sJt@3^eYoLras7cu{z{Nv0l z-m8NO(XOb;b%5){L`LEwuC|4aSI1Ct()~3~|C<8+dy@b2I{J6W7R&sfbEyCQ32H5s z-TxG|@(2oMNPu+5k?ZQZdXfK$BkjW+fB)dZ^B;P%X{f^0JN|Dg`2XLPX$a551~n){ U?>4Q9UIQQXhuY8@CF{ul0djp-dH?_b literal 0 HcmV?d00001 diff --git a/docs/img/demo2-1.png b/docs/img/demo2-1.png new file mode 100644 index 0000000000000000000000000000000000000000..f3e7fdd542f2c97cf7a444281d503a192a4c3a5a GIT binary patch literal 30413 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 literal 0 HcmV?d00001 diff --git a/docs/img/demo2-2.png b/docs/img/demo2-2.png new file mode 100644 index 0000000000000000000000000000000000000000..b7b4889ebe0fa1e5e2f84a8a463504504cf5983c GIT binary patch literal 86782 zcma%>Ra6vS^zZ4A4q@o-t{J*R8UzKT8M?buBnE~?YUu86Nr9n}l16G6T4@16|G)pb z>%QEl`*33K@7m|(#5()4HbhTHjo=maD-;wI0`)h_Z&6UteEypo;b8sOdytM`|2Lre zyj4>~X`G`y`Om;`P|#LDL1{_Bd$z{>&&Kt9WAa}F;mH3s)Nzk$+y9&pCqrXj19vA+ zZ989UTWeqI|9mJYA>OCwE^TW=Yc!=0IjiJ_(QzzmPakP?VQB=sy!E1PbH* zKZ=O(|ED4*BKUt}{-4$US1}K3aVx<=LHS3luB>1fXkpfmU2Ol(?{9ylFh07-atQ$= zCpV);hm8PdwWHQKbr}g8e6$+Ew$}W6H2yUY^Q)|CR)M_vIr>(oBQ)4nXNoLlgz*g7n;6Hpze7K znC{^oqPqjV2(lVkTH`xtq35+*`KI@EFr4tIYQXO}PYsirZucz_A*;~Q%rdkS5lJaa zEULJh9EJV2i>ZU=A4S^Y~>F?jM`lh^)-0trDydpcs{-CE4JFnCvom^*z#1y@;??=B_o6n~8#9xJ!ON$=Ji&0n?x5WG4 z_dON}c?~3h&LQr1@iLV1;{tuhFq2I`A6lTqYawiWz46=(z^Dh!&~Mr!(Iz+84LueC z`HN_mlR%ear8M zQ$IDsqP)?ENMo!SKs44W~{gJE`wgwEfo^z+Pt&sq0Qg*YGp_2glgkko;3ZaX|$uI z<3hEHOLKu>**Q$#__7r=fx^c_NM2@q)JyL{U~I(-CWTPlEz0M z>RR4??9QXS=5Wqa|Ir#vb*i0<~RP8vNPSRvsu=neI7^`rg#Iyy9=(e>KO>Pmg^3b$de-mb;Bo-;@( zCiL`IumI-#@uVgdO}Du1HpwgjPZ+uYbMl|~C}|308Zai{ z0iiMgqD6Xb76|!03$IHbe+yJtwcOmTcTlVyNmK_K!)2bVsxCAgU#1DzlX{@5W;gP3 zh=7c}HF**icCeNA#N9Bx4_g1(x^(*$xrr21d9xu5lE}15(IHj1yv$~Qjk9%!fI%Tq zEmzRGOXrjzSF^1!`Kpz$%Pg*H2ZQXGW2}LvgAygoSTM{2F93*z( zJ3piCXptqe0^6Jv+xRs(fS+U#~LO>>o97D%3p9!^pGVQa=Gc6Br3T?2L+n=>e}|vP^*4gy5CQuep4Hto{?49q#qlQe<$F;xL;HGdhYyQMD#*qc-|wLw6A<$p z{hEJNzo{0<4$9e98XVvRt@U$aQ@37I`di&OZapQfJ7UKCHqEce}FFL_r`kTT*^$cZN-BQ3Aw3>t*w65=_#7%qFD#d_xM8-@j_Tn6R45DHY%d_ z?W{aUgFnW5Z&*{m?Y~sYK4+{kl*q6^Cva3vkC~IDgyB6TGS& zvQ1kJ-akZ?5WX(-y;Y_SNC*RvpRV&RiG{4aBeSV6YuO?6&RU=uiQv^-}5~cwig{|*w-1?W8>vu z5;WIOUFaiD&;rA??>U!4F3?4RtV!yB1pCe3uBe}>60ua|uGdk&($H__C#&$I0l#lD zFCp@`842zYNo!XmCKuU8dB7Oe=Z~LjrW1RGhUinj76nc>btf{v7I5WfH0jF-Xpjok z-|W3E7nBBW&LIM?Tg74lZLU3xDd+>nuV1DT&^=rO^4qshKaK2R8kz2MaM&Ky^+F54 zpXhq5sD0eLpfwI;=rz9vFqiBfYXbFs-kdLCo$a#yRy>$ddG{I)4~?qyxa2SggM7yg zR3J*@Zw%r@sAwn!i@w;JLD9pO$SBs+`IUHYRL^=2DxqvHpRa+&rzv5a zzi7h#C<`)FJD|YElMD(`ye5jc9lWg`sx8yqwDrPrTTo@~ya9W2xEF%SO7;Y|yS0`@ zj%!qTp>zS?wum=Bvx`4zj1ZUyGS~j@9~SCN_Itp$0PfoVnNKMZNw(wU^O!kkdn9zC zKj7{3kLOBEZl}9MNEV+lwtqSK74`{0JaaQza`BtX3DD8RL4G~IE8?&$!~*z?sC6mw zpKP+Qm^4rBvEV?-p|li((Z0d|zSDD@@g+yeNoPhgS<)j7gMHvEs&7HZ^zUd$9$9i# z=sh^)r-@mld=^>gJZW}tdNNr)++939V2TFwK~Rp zPj!6V4r49*HNVz9M(O%Z72liGBrm@)Q>lmxRxHsXY$fQGweMnnn(}${l%r?B5GwcUE=%gCkD!Y^cZwQ5p*2I{RYG?K(AZiIr|?G@vn2xrxwCHF+G z+IkMh@zP}hOKYi_$KeNYMQKsClB#clus0{2i}0sB*>Sab^Li$7PfjU5{IN|WygFpE z*nk#}hJ6(hTwCtT+?T`>QZTVW)%1pn+wJEJk?vmfIo3NFWD(@~8&{ntS>i`mk#Tq# z$_mB61D!H%2~%?B%fU*5v<4a657!?$`SwVbjEOmB-8QSwKzvuo2a-lG4Cwn(PWP`q z5qsN6GO3PIqvbond-yv#h@7+u`SL>38j?=YtHg$?MvVA4>_26W0~} zDV)IH%FUF3{`E`xH?MMm=^EyZ(!YeN(B5<9WEd=r943)1{ z8grZ5XK}eO=KZy!eH|HHDSMxUTYzK1!A<(PJu%%r zNrL>`MxDinQ_)x|Z0|W+90re8XIRkg12-A5v}j{~^7}^9ma#`45CdeeWrmug(eEfG zD5pbJ){R3ENdlx^kifgurRks>{Jfy`Fgk5UHcjahw7q?mgx%fv*~F-WPQnep(4Phm zX+!UNA|*UDFObr53K+*Eda$42xnqHCQTdN6+t?WIXCJuY+^Q)d#H?g zXAENS>j~Sh@sr(>^wrsEu1iLCi)*wc9r!!_VVJe}DXq1F#i#SVxC}GLRW#uO`Rld| zxl)S9Jwu0jSpjr5D6Q(kmljqZM-=2J^wJ;r9XFh6gq{k)$1Adwlpoeb;rLIt@8}F* zwZUKxjnYYNy`RSYc;u*gSbDnk(28hS;ART1HkpLiCG&;qH%xl`5s*ufIBjL}?mF*S zz=n3r&o4R2Z6+?RVgNJR1$#HBKJ5|s!)M4|Zqg@zLenuyHS-PPrr}SZ#3=HM zn^Ow91;y?3EVB1gsUA*uk#aED{NZ>f;^Wl;hpb~!JEE(l*ga02c{Xx5L%dEvRHO_{ zei&W_x5$w^sxp|d$iYZvu&LRkB{tk_*JMBVIDo)Ue4m2pdOanZGW)S&ttI2{+Tp_0 zq&X;X64T6(amCKjo=9X->>d zA)4z@t-5D7GFQs`V$tHNY)5t|y=f7~L8(6*fFGpYazR6&?FHTD^_5Q7JfkA>+FLj> z%WT*FQvq?1mT0v&sRG+>?S03{rDeD&Ey9VF@Yi}|pb@cr?PJ@rQQW;F< za<-w+{~C3{pJ{9v-2=!!kQ5$~I_cDRGOa3h_QkK{L~{wW|J6*xu$={rB}Nl^gdNk_ zE$h;CeLKw($bY?op%5&0u{YjVo=)paS7F#C@fr3mS2*h$2WtR@9vMh(KtxaHM99!e z2$FEgS`%%(f0MnAp`y=-7-`a?BRVztgP9h9FnQPjc+>Z~oxnM5!`^+B&YFZp!GE=A zWN|KbdLmEEJtY>_JFS?iTEk|m*i8%LX#|u@I2aD6?~3AkP`h^gjBl2me&P-T?y1q5 zY!t0^z2{rXCRQ5+na>!+JoKQcJ>)!n6!y{_FY{=z7Mp87RtseH2;!sF2f?lE^&d9c z0Z0<1M#JL#t4ysv{OG9AG~V8d9R0urnDbB`-SCIOslX2rqa*S*u4TnRdk`ksIU$m*6r{qKAxU zS}LLgiu^rv)-dIXF63`kPbwa;SW;q6YA}mZjQ0 z82fX)Ic<%uu%ydCyht!hS^xbP6hKCe5naZ&JlL8I%>h#NLoP4-Msko(pQrvXcZj{$ zwfQ^FzoX${hN{w#o?S?k^7#_yxS{n1mB*PUUfY}$%>&gUBGp^a(H$-Z(EBeVL0x@Z zct4w5)FSL~ClN)iM<}!V#$ED0ooj3fYim*k|I6X@xY^a1H}A8}TS!yp6D0#1Gj|AF z!WWFY^1+Q3izqna-*_kRl`Et4UX1%p|HAarQ;^|4%?onie53ecgN04O#j-2`a2rDr zM$O#{&UsBM5U)9~rMpDyVyl}4aBCGT-&-0#$@cF@WzDzY!1 zOG;%YuKgRkJ_WaVb&MCSqXcGf&}5CkBsLZi{624$XermflUN5e%}t3+si4L4bV+Gk&UJfSJ!kG?&F?kcdB zr9n=Wo}lubAPrgANS|6sP+Yxs^D32y_ZZ0h)+?#J;1*)#_22XA5edmQ7Iq(A#g@=zrnA zcPA?I9pMHv)lQPirnwl~7^Pv0*ePaa*9Um22bed$LO*|f;$k+JsCyavK59(-Je?FJ zyMdJXTg?y*WVLaQlhw#r=$@!Ew4ri&4YiawCdh}IP)+%d5X#_eC*D_Ow;rnA~&b?m;A z495O5%O|6$;`E@B0_r1AY_sm|(Fyrv+Z@~5)dt7mSrgxa2g$IqWPf)%QcAbZ)ZaB| z@6Lf>Ua!ffdDBrI3P(M8G17PMF!E?9j=&aqWK^TpKE=rRqDPgmOZyCCmnh$@Wblt zAgoXkvX_TM>LkD_w@|LVWv8mVU-ZoWwb>^r5pOisQ0Fd;WSQ+&i32QMNp}DUC(4%D zhY)~V%kW9c>M_Uxnv`d=Go&Ef<5cnsX;=q!pPfu%>Tu0lE};`HCsGa?d;8--Lo>OA z1XFOCrn0+l1GwUHhs$WMD- zUK16&haa_HiOE6(IY756VJk^k{$JLalWh*w^RJR1iy`?^TJ~Q;MM?j(OqMMPyU4W9 z;V$$$GmAlQ=@#q%b((9ml2lG~;QSL&JlP!z_afDN()v9r6_r&V&Q1HMp#(2#T#)+) z;L3Oy!O$Ea)fnOMW_psx{*ziRFV!1DHmM0B>++j%`{bs_t`?WHz(y_DdMmD&eeSm! zo__`)4dH=X+H)=mpajv?gjT!?UoEhgk>6=IKSS{K3A zzw(-YRSB6bVty(IoRvthlS!|S>Ri-E8-5;se{fM1AJh`Cz_74U%#R`R8|vIB!i~w@ z>5Tn=Tcm-hLB|#r#cX2x-b`MCt0HLBX){uJ4k2c&%$@P+4FWIo)vnJ}4y z_|U?wAg@Td&Yq#g_;1vtbRUyO@Z=HHQsB59NFw00eIFpP;21|(B#ZeiW-Cyf9d6#A zK>Ta{3d2@aHqcsXeD!fR8vHi-&vfb=s!eT1g@k5q-rPm*8&ycs3GM?&ANY< z-Rk#lz{6Hkpg@95p^sfc9bWUFvrX|&YA1!bZ4y2YO{NgcVQ=nN8ClF7M{6>u4l=CX zeq77%*Q>%}nWP!qOEK@K`lcvvKqD3Yyw>yr*VDW%XXcdnq#YmIwDf$7Gw8oLFUxZp zxvx5+vX~SHZ7I;8PFo3hU>LEV?kCZVK@=mKKeJqd*!HK5bw#u` zs$6SF^}{c&adbN0876fJMcMz<7iEsS%3G;r^;rVr`6pxxp^k{Nsu@$Tudi{r{|9M2 z@P!1$_mAvs6pJsjNub3ihk1(ws)FG37I}Ag4^7amW6E$d-lMA^=BGlJ=!0sRsW??5 z+fR`mYgxJ&s^NzrsiZY7O72tn*|^lw?kHo+zN>hGhKC*{!M4)P>vE8Nva!FI>_K1T z4zj63bBN_?IE0aXK?PneKk7rk|E%!i@%?%l^aH@vqG*$1ny+yfE2kv7sl4Q^MN#e- zu&7lxbe2&Te?_)=;-uqY&a!5&U2>)m{$}2Ocx+K8f3g<__~t2VCDfS)5-?J051QeO zihwT;2ssi`kH1I+1&IU(ofcR3S-E^HvsQd#l$cz%iYiuoKkaA$yVKM=;ZNYbf6N)( z^@iIAic~+HGuuT#(TDTNcmj5x-1Aet(&bM^-FHNYEu^=gc1reJpX2ybo)_@KT|HYe zR0l=fd?*0QB6SX86|I*!^{2n0;!~)yCjfQ#l$k)u2Ay5AEy?bC&a zhEHp)(g6N#d`hCuIonSw|3=7np~;Ne(f{^`>3VUPSog=;if7 z^;oxl)n4WVGgAud`OL$gf|}!$`}xYNcsi3XQ+s1#x(n>8?){rnJiHEsKA0MhT84of z?)ODCzV5bhKSPi@QVebhM65^TPWi9AG6$|i4Zc_BWbvh{DLf{Yf+_(B|pG0Gn%7% z;z*bEI2#C{87JS#(51@g95)8kP3&1BUxTAL!|T*&Iu^?WEcX2PZf3i2b_1R3K5k6r zYNwK_Q**&-sRl>NpuO`u3`fj7gFoB%I>HGo#wU}V2L6ojJeCcjQ|lwjr@0$nCUC(6 z-9Ndg46archE}rJn8DH*6aNv}TJ_%adz%zlPka74_NQC6^FD~WO4trIO)~VpqtQhRQ%x{QCz2%E?{!g6|j0r0~DukCs1p& z{Bh0%=7ziuTRy0|?wlndw{M(OmK?*vX6YS%9ozW)_TwXw`Ja92Frn|gRjVp~MD*iK z>zXnV{+jGe?OyLw!!K|<-At-C>3u-qUqGlkAs$DS_YUi1!jmHkd-dKwHysA-+tJ+S z^z)`JkHChTNXR`?YUseGF~;KA;0y8WOX2uLFG-xZ`M($65zfV8CmlfIfXtcvm@#@n z8z-v0I7cBIY88Mb3P`x_eoJ&a5yPhtovBQb6N|1M;6K(Nq;M0j6aS)O8QXe&0nt^eM!bqu% zh?(%v&3)4{Hk6Qf!A>l0@{s9+63CV&aUG|XlxB@PSkZ}ZzUJbvMy9DF;LRAk@J71W zP6TX)NP$Z7E;u|3I}I%jO!%376dB{YDs`4r&AzR)8)@V*k#1R%>2x8($i;!UFnFqR9DY|5) z3|Rov=iQ_?B<6;nR!^$PNl-)&i#q+emu4_!ro0KGX}nc|do4PjnbF$d+~YY*m!}@fxncvbAF1MlNKaH=4wO&2zm}v)Qh98d0I})R(oVmiqRRH{YK3$Yl=d>4YI= z{GQ0*%|;odQ79(a0HXT?nWodN$`AHp>I7&dLLK*cJ#&LC(R;We%JprEEQq#;Sb~3H z1Ub}_xC{^3(arkhBrc!~P3`=t@BFyJSx8btX z2zOSOix2XU&0D(Oxeoa&)uNUbg#qM&(Q2@AMvCE$%#>%B_S3~)z|VF;-JC<08&*fm zrw&cRh`UNV>B^cVNHOgb`lxjK=sz%F97~Ov$`41D@F$jD4 zWVR?DqK{u@p#DSL2V4qX%dGP5+!M389zUAQA|M>o1!n{n_knZQfu?Xuz-=tV4d4aG z&=7X)judu@Wc`CVUkEIxgQJjX=H8;}TFTlh=T68Fhh@uY=M5#6xO*-O2vKrUV!q?% zX_9V^jeExli)H1h!h0n{eZZXcCG;KRT7;ysY=rXJJeCnJDByXN%Phdmr5pefGmY}qqyU5_KUa;3p(UvEO@+j|31mJi0O?A z(=fke&*fAU8Y@Dg=MhVU8B@XhA3lglFqO5qni_nQIGsusfB30bkQl8|JWde?^a9&% zzLs*8x=-#}+>qxBVzGCv7&nmCPS~xPVd#cv<&)|9T z_`!<(J*L%hp1^rnaK*o;=iVI}j6}Qlos+D#u}Q4WJdp9*x7AAWyBvKx7zp1MqVJ1( z!@G~lF{(ei1Eeuz3cdlJ_!zjBnjCrdb)=PNvPRJVRud4$IcW&*7Mjk#1obB6>VCR5 zeVde)&n7|E%4;*y1>ouAqZ$VIsfci}L^taEyeF~oCJkrZFI~wYiXt(WV%}Isjxo|S zg;H?wD|!nun28@fQSME)S%{)i-K?Z=B!%(gki1qi*)Qckq5=Mfrz?q=ka?p{U`{}& zG$p$Z0FrD~wY;{+_DQ<>7=|eDZC^lLfb4uKSw&9qdB?SE({7T>I#7fCFl{E4|(4`PKuC+TQS!zDZr1- zv2VXP{r)f?+*Zl0@hr82txch!OeUowOc)-g{$kbh9&?&@!NR9$78$7)dgEE|(#RFm zTdv`z0ui`r2bmPC_j?9wSZ5Q>1&T+l4F^u4utec_C&^;lR z9Kq28W}n!4bMaYm5Vh_I7UAs$i}PtX4m}8;MD0_+#sf?;*zq?&Jee*;`#;WdlN=sO zQf;ci$lhE$cNFEY)NN3ZCAq40)i?L>F8UcB%uXJj_rUC+HI!Ctt!u4E)cL_$YpJOpgxM30djP>D*IIh6 zF3H~dpG7>d#OHEv-@j8)p$gKX&zON~Ws^Y{6#%U!yYm^gZ|<+aSUIBnp=d4+8pjyj zax3lU#ncmK_4v>$qd1?@$atoge{n(kxd- z%SuNg@YT&4(Cc;1fEM*DkT;8UJ@zVT;izfYTyWBNpdIPA5)g(nVQaHthZH!9VNWc% zHTU7k9?BxnMz?b4v=#Z`I8K<|2Cnfm1kXQlmq<8#2PZVwvT7jGypuSPc4|eu-fZAe zmN865Or{cKJxtZX=-q&75BiNG>dD;DMfUA5A`W*U} z0dN)5M;As1Mr~l!6nn4wD^*>3Ol?qCtpx<6Mps#S@3Gm?PbF8LewH~&76ef${GnV_ zE?DI&ok;>@$c@9Qday9=i~kX(BOb>W=FF>m{gpN)gO;7)v$zwCbjWOt?KqnGUXXC| z2vGneq_WAp1mNX@CB3@jBF3GLg?Cz*&Jx4Sjze4b*OZH@ZobJ1G-Gl3=!6u5SvqoZ zBow!vmD=E%F6L_Ii&(!tRsGsPoD})!gccP$v8zt;@VUH)<4gD=r1UoMvv0U9J+lQo zB@==&-5HS*I{S-1<^1-T3Ce_q+rz!_Ja$Kca>G;7BWSjCS)oOMdb0-~M>+}4ltB0A z7WE<XvC)2m@IAUtc}6YQbAf_7~;K0vTUI2@8QAW1+Q;wi=WEWUGIM(;B;?Xkd2 zc~)&NeLMN8(waRtl({{5=$MYjI*bQ6`JiursisNE z?C6f@HHtPk1#M6Udr9RETfSA8MWhR^aW-lQ%eBbpX4#xMvecTAiu|jwBO)O^u!r6W zaEF#e8cQ}#aTD{p#id5Ta=l39HLdf2<5|PPI=-ZdGnnWnzED%THhhn~DR1Y&wPvJ? z)&K?sKTZ}ljSh<7l@#4L76}h)Q(powf&|XU{md4jq1VMh`%ya;VqQs@epRr(ldvH*N0LcpL#}ssNt1hN2<8bYv&f1N)d&hJ^mrWvzRhtS*mSA&(u9Gs zX{`i5e{og=Q3~RTGV^tWQaZW5D>`e8ZopJWiN@us2zO3wee5O=MbEj@Ry()CE!bm`VJAIt` zUsqtJNn+F*q87kVQ8E_75aBFh1ET`5L$(m-B3SDhT2YM1N8x~$WFuMribmRljFcDY z#TwuS6+=+7$kaow)JqufeDc%1jV=s;uxaSOjk7Fp51(bqQ@qD~E1~m_eQ+6-s?x07 zMu0lspzs;6*HgcocQR(8(M12`Mr&FbM*`&)w)z6OnP1^$p3fL>Xu{r+*uc2Z(HfoZ zqb(CMZ#HeU6RDois!O^i?{C&yXaX#Ew!6^{uI($ZfEBC21&?EjTRn5SPZBL60gW3? zk}Y)Hu|j=?aJGWX{6>99ol7d~&TTZaWsGONSqkS1LF+)|9t<6v%(ZWz|AHpP0JAb2 zAj&sWCFEVcRHdOADJ5(URcUyvj_8RJ^uMU`6S7GOHf0NQa~SAzqb4eM#W$_p_UB8AjU%xNPU!4JnzER^fk0q9jHd+o-$)gSi!EV-^^a z^e7~-If2s$`JUlzR|&r$u9#720kzcI5(4$7A%MGI~o7Yj5qc+Rd(Zg`A=Ac(@;pHa+r zB7O(Bwr}blrTo1$Ln9k&Fp}+U$L1XiomSm+DU!_trHhHfj67#i50ZZ^1;qPI7c0Se z&(i0p@E^YK`7wqkIGAC}(132G{1c8-SJe+Ntl{A|5u?_PJ|AR1H?kGZS#JQ={O0@3 z(-c11;FcPxu#DNY_qq|N9SG!70;em&lSh46f7#)^Kb$xrI^Dy~} z8^o)I%LVW{(MQlyl@D&`)6A;-ha>@QQ@FIE=(Xrnf_nwaSUOo&jGE)^o?J8**bM9! zSydd27kf$r9F;$oF_o|i!jJf#bx^Qa_TdET?r{-0#*w~6S(72AuhCxL5?3b zi9Y&buMw2^V{*Kqd)877^;RrzH`00%mH+9ww@`t9rDwJfj*#0|nQ0ShZyMVzvES;8 zH#T}7E_Fa2Y}=WNfCCR=Ds4MEOGVD7s2PdQHZ-);dr;m`^o|-9HJg0NmtUZ)i)9Y1 z0#-bJR#6GRXkY#4f8N4ee=*@yOMjqb#)jm2Ct0JJ!um{=ZJmPO zi)TpiRereyMj8w70Y&>aFAnc z^!y4f?z?i~Opt~T=+V7Ddbp-f*b2p!Hay=pFjjbe^J) zG;h23VQ`6M5h16&30Sp?J^>sUNoQj<^?c6um!Ddr@wj7I18asLY!Qxs@I{pz!!eAg z9_$4Dk%mv7OMYVhm!9cfA}IV`v;N*BjA?z3h5c^AzRZ4P6xRa`La!pum`yLUj-Ea1 zF*!+zytuRZYVF#>Ht4w*NCnP2oyw5O&0MtwI~W^uEn5bfZH{K@hWiQ6y!zdjfl$#| z>QJH|Pg?TB`T+c-@45#oQzfx@A{%Vv5U`~bcVVHkaU?n++0GZSP@5rAgA7PJ%|5OA zhirSzW{o^wJYrDD)^Z#W_^)U_+-ysS1-L@BfoIK<*`69VH-?K<_A~u|*`&t_@*dm; zC*#Dwelr7wYz!|1X6EMx+;U)Lxki$TTp0MyeXMi=0di(>K8krn2*&=lfiE~Kt@+fZZ!6Uo3{gNEC0rg5)El8)m$-pjlH zYj5%qC>oMb4HuI|TD5wVsGPlbrRBO4 z@-gsfc^BNo5c}WB_>wwR?GXw29-)dGmdthql|z~Wz1AA=?jZ-_dcU)0q|*~KuMsR( zv_k>k^JZ zT%^2`_99G(TwO;2pd3;;Hi$eZoGZdVYKp+5TFpd6-Uct>pPvtL-)r z4VDHq`P2BCo(fh$(3G_RI+b{{$Z*uu$I|=^ei+Y#AdpPR-&-7&fU~&2r1@f8i1Rv| z702dhH7Uvp7-RU? z+GC$2JTMIeT12#0$ytEtZzsP^|K1Y&lh-VrPrO&W^FTn)y_;uhP8rqpfKWC5EQ3@? z_DI%dx2nF-<(FJJJaU!l7k6yy(WxQ88mr4>lj{-Db=~;+m(cP(rc|7Cl@PREsB;eQLb-`s~J+ zY$&CtL=?m1Ch1$=>3CQJxA2A#;lfjm43Mvb4mX?o@h&yb(fuWlF45u5GJMxrL=vaU z!$SN3({GjHK*R{fD#Tu3$+rq)JL*cd^H%McncMD3=Ax{aA$$5-rcS6RzF3bLM+^7oVNd+GNq8dI>Cw4m7x3bribZLPp(QAbX^hLQ0%DnslRv{2u$0^0hrmC_rh7y$ z8@q=)H66#}$pj}m5wZrk-QEeW%+g&J9F&EGXNeE9GiH#t|OCZ7Y3_V@`Y6 zfTuDjia&`t{J?fOUnO3a@;gh{X19vlC$3cX?CE2Dr%mW0aR_jpQ;h4rYljMaP*l_z za6h3kM;NrhzP;j*!WHcuoJRN3lksZs)pEn3Hw{A@E#2OMFSH$xp2MonL*gRgrSo=k z1X7%f^=e;M&VsHT`b5_a@RTDMe?VMBWck!;JFu z`HSqCP%y2R1?cuE1+Bn`b&Qy7vIx~YVhus@HhXHK zo(?`Rx5Xx!FJj+ef8N`~!`!ItcHRMHY$otG$?NyDrgsU`yEBPlIh8V#`Yn62`DLS6 zVK*lYRwimQVQw9k5#Px^_t_P)x=4nTlv%=F92Wt+RDT_zmYktbJHBc4QSQ zk1o&ECwQ_BQc*8RRD6>V%oF)}%tYy9FQM3Un(t;zsUp}jGD3TaC(hTUV|8H|vjPYQ zmep{Fa71HXPI2Af2U52Swd<@b=qPh1Po4HuaJeW@L1k1H@pe^NXqHPOuoacK=&vie zv68QZF7LAt9BOI<9qh@C{6gfswy*;hCe+KnuaB^|MtN=@cBW0n(@HX~{Gi9BX7SL4 zD8-hR`#Q^L{dT}~mc(^@vs*)v*M;pfGzF$PzAgLktU_?GB7s8WKW6bIDdnpD+gtou zPc6IM<0=NeqOF#ZE9hSS-(##hz1eRhDdJPc!7PA~-Q2$m;qHMHjMhIEfZ3~m;>r&V zG7ajFTcXZyn`TD4*h%n z5G+vcQsWW}UKN&Oht+$rN%%%2*(h)7#4V;~USa}1K2(@{VRs_2YPFP+CvDr; z5(TkJ)I$)aX4k0VQuH<|c+uYFU1~BxGw8a-qO%uXMn_rJiIsNK|ia z>G51Fj{0VcwPiTV=zY+wOq{6S+c8R|>R}UQZ+V=ib{(iiyd62V{L_-oma3VZD9v*1 z90`LI^#har-Xu%)rVrajv zdcksBHJFso_0AfNRy^OTJ-aHW`%qp(d5ibzL-Xyr5*L<&&T8#CSaAk&mJ^=|322 zkcrRQhj0)%@YUEjrs1ERXS{nc)4#+3AH10sS14^&r?MFfarFZp`^B&&*nCHDnp1iN z9zt-2v7Z#%$r;13ng002x|4OCpKSI<{MDtQVocXi?GG#RvSeJeKl1{1>b=QQJu>mz zy8N8@)5Fcnx;l(iY$8rQK zM}7EajG*K}kWR_!rcxaGGA`QT<|jter>*9vH?G+O$ldnEAM+=+s!I&c>;$!$YGA04 zzjkG;5>$bpqie%HL1yb+Mi$-?nZ|LTq3d1ZuAql~j-NL@uGu~fjxF+aEaEdU>YGZ( zT3iq8*Z<^%-oTR}ji(L0vG5gMI$h{!bLL{_DucF6Wcg5-zj92UckI(b8-916By9pm5_Dl^6)W96BaQ1V+N{?Sdt$soJB zm6KnE1UKG;JB_&-GkG#*jGffTP}c^H6;qmibEq>HVwLE#hnO*4Jcv$e+2ewIvPc+B81?>IH#*ZHfT+`XHaL=o)$HdY*;3%2&UhJfqh3ZB1cAbM^hodeFfu$omZ5Kddh=^6ViSGFLOg8Cg<4;@5Y1pqq@_F7)(J*78Y-Q% zYOl&|8&m3SzjCgnoOI>pH;lwmzj@0%bFe*>lNMfe>jQjad|D4Q>*=*%W8A8`Z{Rfs zXJowS%MGLB6;Mre?39HmeH13EarS90_GbRluP6QW2KC!dTl|qzrd9q+M%?FZjJ2Ts zH|@m1w%8{#eA?;wK+i7*NuNFR(rYPI$bM`ngo@N}o@MQmq#@ZMX*+ewT>l;GaV^Z( z6#`E_>$kXy1w(t>P&Sr-XgFi+98QkIlOQXjo`D%3LL^0O2xS|S#j$~JR zVc?{ZvDRSsALgrlsfV%ih%@V=bIcC;sWuk6GZ9-N*=q-JO$;ID3A{NFI;@!2n^zl( z64!B)Ba=5&ftv1udNTk>5|{c|>{V>i#atOjQf5(+j!2B7p1_MIkM_vZqexBqh?X?; z=wqA{QvG(@uaOKyk_ov?3)?1Nf(2a%VhjB`>h9JBmw|6N>*@gCeuJ9@OMDgU8yNf~ zkkF<(2_2DFpY1l-eTnJhwG}oEPGZUxPF{|rbhu3jZNW|h-!C0#_AHu-JGk*jvIDA( z)RFJSTc420_sl$Ggu!Hl-V5`9H6G&Gm>+pL=17G5*|HJ0wT5M3zw(@kFQ|j$T{7CHeo1!<2 zlWuTbpukXG?NG)$%;5`A7t+Pk-r!NEXnvoh>5J_6I`p~dn%n-CRoc-h9z3$b=6GsO zE;cdVacqtG$dGtuJQ5q|Vzj}*=&Iln2ClSJ2HCdxjUCaME`sbLCZFSO?7T=x%Rz_p zApX!|qcqLETp;1dLYPeuGaR^#ui)uZmp4usT==Tel({Znl?*=*?+q4S~S~7e&ru%V}NqWcMppGZk^9% zq@ja#!DY!<>oUGYS{()g=q`4+i z%90!iRo|dG?yjeD(5IgKdoFb)reI~fXks&s_>#FutM%JUexbMjX}yN&q?*V{8J+LE zrd;u`2);RB>5~(nV#BE9D;dNu5(p=Eq$3>pd3}T66OUNr08?6I^UQcSav7(LkDB}_ z&3qP<(|KYn(uS@tqR2CSWUbFKBoFl!eO^1-x!@?7Hp+c+>{H*Y8IE&$H40pC@(U5E ztI{`4$KL^Q%=Oh=gq+-wmMGz+Nn)&2#mgS$^NT26B*Dp8K@&E*wL3oXhC^8cwcA*F z{c!!zP6Zr$&bXp%WLjQrHr-4HbLchpzWXt6;w2@F@H_GF#W@kPvM#}|y~Z~=X`Z+~ zw9WZ$ob#fUMt`1GFHn}BTq~%UyV(SRr_F282Ti>2#cr??*Zxkc@yU_-r9t-VuiimJ zE(@u~W(>gYAP7jI4)KBl+@xZo>g$4}!la>+Z&A4HEZiixzkkHIGnptBK zd}BeW4fgNy3J&B|}@S4CmEHyad=m=5k z3FDw)jI8h&7&YlsYf@ew)1l#eAvLjWcYk-Zj&vB1;EL03WunU`5AquTTW{A#z?3!c zFy&v3$xB^4vGhrG{bbCSz2G|V13qx_#Utvx<-!e5duB2U;t2x+Qb#r97PJjgCLBEY z7vBeF5)h@iINn{>WHWBDW%%epJviZ0xMQnNnXC%aX&SiT1YR6!ZeG+i-MNcoOnpUB zJi|YlLTOMhXvVWKJcb3aYZyY=_R6bpH@k0Q%Yp@t#x+Ls@}5>0MUX#K{b-v96mRYC zwD^TD#3-W&ENmKAXmqN> zxsu=h%7wDyGsQXV;u?b3*BbJ7$A&4=?9=A_M~e}M*fV&no7=sPSRF`tqa9n3)2>EL zXE3a1@@%jz_>tsD*VHFO>xoWjfokq#I#uJ}q@hXLzzGOP7U|e5gR#>_X|$17pGVIX zh3#r;YzdjSkzbRJVOaBp-Zo5$H=8T;wK)N%(ql3Kb-dKrxfz|74G%jl>azJZ^*3=q zCdYV(=DHE0ouk*HFN#V_k{44)Y)rG(Bfs|c9P~&&Sdlf3OujaMYw0+3T&)C!SC4Rh zgAtlMO&wAYa=nR;=ChO|*ki5p#$?iwJU3o}XdC(h%^{xTp(0f3b~`Lyi^Wi{Pv<6G zZ4UV61A$Rj;>a<@RLluyc0P+kbHXty{m$u-s1J%q^K~h7=Rmd%1FI|X6KZ}Fa~$#r zEqXKWQLz?eG7%+Y^ z2%H9opPX5|LDXRRGZ#XE9}7SP#-c*SSM5LB@#MnaD zHbl*?tclTBc134?46=H>qjEu|U!e@_2#9*}YPl@X(bcs02SjV}<>7$POJlmw>W)%* zk6^Yxg8B|kU*HYDNi%GQNn0EWWxc>zT1-Bto`g|`Zr<{*Li9t+5~O$tAMg06Z+>4% ziyg!KYn%p+e1CVR^|UXX7TrqOcLLyxXJ0^F0K&+R`iQCZ!IP)28YD|-66N%+#Ji$_ z9|#184~e6^kg||adN>yHWZ4O=c{^7m#Ou)FOMJGk$8UDbQz~uMsnc=li>NWyE>GlP zOlk@!Cq-hPKI&o&8>|O=$f+SV=ZGb-E4I;S+iX)4GXP4pAI7|O=%;jfdmJJspSq1R zH2c+U9D1xn=srvAm#)8-LUowc)>yXW@Ci^qF&Ru8oinXv2=~HNsN#n!|`@?)nk~Ti{8*n9+}w;_0t-fwfbv)YIg!*M8~x5RTb7C9fC76628P27B;Cm8{cV`5)_ z&rp7K4Gfiw8`;40n>j~cED<9-cqDCJR-MR-*4L@F+Ea+QW0ETCI4RF7a&l40Cs$!q zrm-^bCVkyLdS7Ge!Kc|GOvsb}iGQR}&4jTg%7 z_0*@}L=H{rM#$bgbU?m8od{6#@zys6bkh){uOr&h@sg=Ov7zea(m06elSTVs%lBKM zhlz9EvfZEjmUNn+0Ocbijd8K*s~3F=fk-fw6X>qL{tml!3<}<~BkhDt;Txkiecaka z4lWiM2>TO>IrYRR9$E+P|G>Ka&Rgro8*Yj{9$8q0Q~L|*wFi0>hJ8*QeDIU%fCKigJBLqhdc)4iPalbg$<9Qz=~z(7M*}i*P8L|UKJB8R z{&uhdQ#VFhnBE9xAyfvM7yVv{TTEpsmG!V4{Yn$Z;7RU&v65&IB`sRGaXs|G2i1cg z{LtEK&pqn=-<=me`&-7iQ$~N=mOIhdC~)IiW)mZo{^_ZZ@-0hgu7q97y3ArT5`SLC zv+WBG`jWrR2~004nq_a>VD9tMCU|=hMn;{$MH;@wYm6y=odca|-4Yl)V+6)@0e;fK z2iE}yKB#WHZB^ZP^U5GaX1vL-{1Xm&B6HXuoquDeIC`Hjgh;Ost+e-RD?swq(vrr>1utRQ#`sSd;R`|n`gU5+0Zqd#n2 zk=8eUw#QfvUfmnYa*CFEj)}Kvtsf4BM?7O89hOlSU{Cvl7Fmy8V=3VdExg7?+uFYA z!lT}NN+Lb6NsYd)P1lvgQeD)NQ$g~bdTx!6wu^6bR))8jGy3GzyXeEFmK4)9 z!ciF%`mN=lED%ZU7G^UDB{2|)BAYs^u`6sgk_*ApS!|e|R0azpZK)$0I!O8|w(=dD zh;taD_HkGdTJX#PJ2_ROK*pJ$=AxwSEZ64#q)q`lqZS|65k41^NDM=g9PqU3RX_j!@wLe!f3uQB+Kwy~W75U$_4TO3US8k)!iQ>y zXV;V58UV8b}4+)Pei3X}S2)I{vGEB;6Q!V&upP!OQsm{G>0|^5x6wvnQTXZ+kaB4cw96?N4M| zCIpVu^5$hoD*BCA2YPgN+#JY=YNWL>ACrs=q=zxvV)HHPhbMfjmTk64;Mbw^UI#uk{IQUBCpG-q zsHSej1+%5I%-D&mZSCt&3XLOUuK=e{6X|N4UUcQ^%#)1#5I19^RkivYKHocc!WaF0 zC}Vf-uHvVdQ{GoS`KeE-10JwPop;e?b;4JVhqwC_O4Oq#1ggU~+CMw#3$;CY@VT#( z2k$bs^%tJui?)dM({FvgR&2X@9sAwW>d3dg2U)BIVD_W101pMUZ1){7{V;UDZ&fFL z?jv>YUAD>Gl;_Sn@2cx=xUGJ0<~jB0PkpBDylXYA*iX)we;Y4eT-*S8X-)ZO6k#Bomis;i@^IjcZG{dPr`Lzi=HFlrfi4HHJWYmrx*C0bm z{@O;Q?Fyi*vt=>_=Fr6A#GBAzi9KogsnTH5=jf#;6y9dP%A?Sr2^tjb4`Hq%srmZx`yN;d0k43ayB+VO*uh~=6fB6OjkxjX2O zeZjO3y0I28mf5DGuX}?ApS3Vkcr7+^*5il9unUPDgWhv2R&*Pg_^mt^`MvrWjC^BK zz@M?FZa&%{+v2k|Y=YOrVjX#zCt|#u3lrUHa&gq-C-vY;vrXO7c&?j`2VRa?N1L)5 zEG6@-;~9$b(go*7nPly-*><{l`H(DYk*pYyxkhE{16~9H4vfwG_B(N7IN3KdLFgRC}VqhNv)FV!rP{nTR^3fvLGWP;>WAovPv_S{;$cwud_c;l3t zZpyjwqFO?I>EexQlO>#sHmQ2|xa`V0=i)!sC71p=-1!w} zYmSU1D6vrc#1euxH)k#;y(m`w&A|uNvk!e}J)07tNM*61&*UhBJDL|A+?EZQbVUd9gM1(#h_=U?=v`rT!JR5={#Fgf51 zEG4#RUKU(|(xOc;!)=wxcJG{L&Q7LO?~0Nhq?U7j*l?!((IN7hu85 z0_vE9_Vgz`te*eGgX)=w62I_+Y0T1+y>)2W-@ov=wfWLbxQMT=*S`0Q^|Jpwn%?0f z?`;9`)JJioYd>`B(?+jHLvC%eDw9F&(eaplvP|8{m!9-DruHQE0(wD`otN}Xwa7~B zvF?kNaY(@-9(3A?wUj|`P-63hht>1Qt!EOSKsPe_yWgUH3o$kt?hDE7^Dg;wU2q9` zz@eY99f88$>RF{S3Xfsdc?kLmx9JJVD|JyKVHB}-R7`+_69WXpil(9i78{>=+9;+Ds2y+(%(m~!+lszo1?Uo z7hTU&%2{7qhq03+hjFk>Oyo_xp~Rj6L!5)pg~*OsTfj^UIoDrf5WFz>*1C+Q>{1*P zkZ3|p+;pCDqZb>@gzJyVpWMln3&M`?XiRGjWJSK>E* z#1z)UF2#U8ba&G?WEB>B7~LA>wMiMW*y0#7egIWZWF&ZKQ>rj#v(o-|h7HTbH!u^P zetPk@Ke>oK(PMtmtr5_(@uJ$Rp=j>Rqe6>P=9(h58Wn?4tacL`w&WV4zZ|_Tr^?Y| zYLBGI7?da1U_>@lU;uI3>D_q~5$CS2%S#cn`chYH_;gt`0_EmN( zV|PqM#zG!**71q|(%pxFK1Mq~`K1j@``g%V6GMObHuFA##pliM{p7dUsWzQ9VO13E z(0hXhZCub@fIaTK{zAy|Cc1H2m`(s_dO-j8PCdK6{EeT~v0wXs-T!`j);3%$R^EJD zJ>|u3sAIqW-TKlA|5sOEeO0~a*@x9qE*8JJ;EFo)m%pkfKJnn%ZigM}nk%p5qT$Y- zbO8Lf7hGIF{@HKp{0q*hRd?Q*j~h``_t<&OHrZ!fH6ToiA<`DVt-LFpK_HFN9N=Ur4kI{lY*{<-Jmqq9Ed)~>tmS`T~p zqvO+}MH}TK*meF5Ft_I6=)_5^b&+zHop-H=AM~i&W6%54Mhl6+D2@)-FCZr-rqi{cG_;sy860X>yyWR zwXV79s=DR&TWhBscOoB_BjJ;px#&718-nZqdVSK*j|=wQ_keojL659$wq0J={^gol zvvy53Z072Uop-9`TVg8+3+B$RCqCtnTCiYI{q@>wv7w0HZuRg-KdNq8c|+ZP`>MF; z~Fl~<}6b8*!3RCtNZME z-&#bT-gv_ewRWvKs(y3+#dXSQXV5|2D?j={&PkweHwma4Le|##rHdAkZ-QjE!H>%Hn>(qMoi~g-X_L;BNS5EqA zt>0)#op$ae$r$jF((etlJ%uttO5|*rBzwlQ9pW zFA(}~TT;3?V+Xn6m?lO7N8faenDNS{kq&JQ2a3J8$eVseN8R^qD8ny|{6Y^V8~lvg zIEJK{R9f@Y&$~a;=@&-esn1fmX+s|iZA(w5OK1Ej%cKEc-{d!j8eF5jE)1^dg_B16s?G9D^~rWOE_rg6{uo0Esvx{ci>z%)F!V3@ zMN52*y%8X`#tA}N_E7}G5+FxI!}w8p$l_mg(zb)coK%NvjojJGL>E#4=LqNqpOR;( zw_T&vbsD`9Yuy`knO*WWj*QdhQ0gWt_Jb5lR8angZ$hW6W5Bg4AG5kGV?&!^xyO?~ zjtu~d=UYQlG7 z*E`<*p(McPKK}lC_`bW-+x8lS8*aM24tVUdMi31qJt%arPW|R*Yp3nE(!|)CfHB+; zI^-oaZ{EE6%BSB`E3jpns5jnxYd!m)-d2}f{JYxyUiYf+eewO6Jiq?#l}FXD&OEC= z@XjOau*W{IuKnwc_3)>?s7^ldnA(|(VQ{0P6XbzUelZ)3>)M_%nN5T<{Frr{E$WyP zepGLN?}vOoR-ZZgef9ADcSjFQh8fxo*m2M^VCWL zm| zUHR8~%+p^|XME=i*tB_l|McJ1etYd!+bmmB-#_i#dfC6dv9{lChx+O#-^EyOF??BH zcdlMtuYJ$w>$~6nR@?dm;;<_n3-FHZhaZMk%_`q-DgSMU3;qw6Q%{9Nt4!?4*+Cp?bFL!R=IdiR@NQ;*pH zz998N?|Bnry5HlTMSX7ljM#6#_2zZVH%_T{zUzZw*@w;L7ys+^wRq8j;GK2BA8JQp zwgY2y?6=RTBj5f`*yd)_e8MN*$)?J2(Srh;v3=D$>f-Y+F#2%mE2EVJ={fnmX_E#Am*&W5OK&!pGm2xvC$Je#XDnU)b25f9h9QL*~_azrVVk`uxM=0qpqb zXv>Pfz+QOTH)_HBx%EHCpIjgK;Q#bR9i7P)7x3h6B$|#;%Qvk*I;9Sui&e&LDwH)rzI)Nchsm;dWbCpKrTug^5vtAA7aKi?%^Ks+Fe-M6 zZ+xk@)e8GAqjq*Iq)oQ9yfoiiCZ)Xj7>9m&rGXK44&^;!hd3_$p-g%?2ed4SKd&si zyt3&@Y&vlEdL0WcZ&`jOUV9zjj9KeQgI_!`Yx5{P1;`a#Yr}&dI>o5uS;cegyI~#y)vD439@6 zo4;)bMevgo`bpr-XGLd^G>5Oere9*1)o(2zEv9B=(jNGZM=+kWq82e+KK;RRj*MEpIB7nOB0=} zuk(=I>cGEmd*VKMrPny7wc#KCaUxIU+~`rrA!H0phr)>##tQ!B0Fy0GMX- zOiDR_4M1mh-f2Z0wC}y^_SI|Z-Jkqc9r@qK*9rf3cHMZ(Z9RZFv8OSYH0;8|uv;{!0DgoIlhSn=Ps1KKkaG zKYydT zjB_up(|&tN-F4?3NcC^jWC6ink4!$_4F~NVcUe)7IN(0D>aNxG?oWNQj{L8$)Ynfw z6RbOu1oFtA47LPu=bd)SMsC%ech$R(`DVTOLtl-|%A4-UaB9n!KmOi4ak=!Gzt)@o z>$v*)IhWQJOPACaKk}wLT{NB<2V(T72kucTSKgM7{T$fcRxGb4JmE>io(;@-f2ix( zkUMra5$7|0b1^Zzxb9eWd*VDThT@%h&SiDYbvHU%b?a?+hWE@1E{z{OJ~Q?B2j9Oo z;^Kb+n}l0e-ND$-t>ce&Be#rkytR(~-_z^jEB;y=FI-d~eBD3PcH8bC{5aOvL-yOf z{=laH@++^iSoU9Q}gy49IVbQ=Wa!C3VA%w?dy= zH#1(RGwx^n=8{^m%Nj<2)NzqFPu z-L$^=p*Pn21@qZZ!6z$kV@89~zQnK5oszls(a(Q9wn%&2qYtWk@39wg@((#xo%GYQ zVI-?E|2u~#S^u8Wr#aKw&v&o`fhDEXgjCgGbx6aez-BHPVx@i3vHdL3YO=bvvx_o&XRn*FiWu z#c$i>Lf^!XE-ZyI^g@rlVN`2cvvqS{M5VnzS&NP#5Oyy)u^ofbzEMUK3fzQO57n$Z(pF~LcR z-O#3u9Pc@dd4D#fjF!TeSaxnEx5VQvF3*0Pd*p36!A)LBPM|%|C%(Sf!J*#Hh(X}6 z=7SDns$_C9y3mWF%sbkNJ$>d~j=`g}YrWT9yX2Ec|MJiz2lnd=%Cu8z&mrYGsRlp1 z9K*c1ZV*E>2F5SsJ{-HqY2Ud1OCJVyRy69gA@l*8y;%eGT9ynLZHoTSR;?``np*d* zAq|p4p|cJfVT>|PcZOy{IGei{O@1;sLK;Bmkf)1X@;kdq4jOHk2L@|gOUc@U0@h`J zzP1i|*5UQk=N?hF+;*D)weS7!1&`@N*wO3Dk6iU&(`8#Ax4zb{SyyNM`Zx9U6TVij zedF8eu}}ZU&`r$5z=@conNzQR(@}NNAFqKnr~Z7^b@jZ%|Fxd~;@8xQU3SS+6@&S_ zSH7W+J?_|g-pgK7tBJ>!OE;-UKk`u;U2l2k2kMVkUtc>c-=a?ZPgRgSv~FfN3aQ7 zg^P3QfPL;o*G&D#k?*JrF26eYa)tg8qv!tPYwH#^#`>QxqynT}?|9Gq>+IiM8egwl zc~d>-Wv{I_zUdvA-x+y+RwDP{L;j(j^qiL^c6&Tv@7i(uw)NlM_NjXF+uu`9d%+QP z=bF1};lc&=(tmhv+eyr{_#!refBX0UT(3CtgR#@pI^m=<>qSSru0C_(4~fg%+HqUr zqi31qMqT@i_grH0fZCBwuC~AWsH5x6N1^Y9FRwe+tf__b=hVwy^a6v9jQL7+`nx~y zXSvahEGBd6Ki>R~I{yz>!ByEbKmQ+J!`QzD+t(x}=IO6~b6$OoJpGS1yqz(9v51-1 z(;_#0T(jG5_pF_lZ%sFLz3bEUnl~O*Pk-^hVM?qZhVWtk{q}x9tsq`rj9&ClZ>leU z@yq1xYirHAwT$hOdi0|oFNE2zi~Xd`3TMXve==tJm*t_Zy!`U^724*@me$tGwhF&; ze`4(E;RMS#7=Y1sPX5#D-dWeLWJ3#Wn=R1)z&-0DZ+>Z=eB!5S$&#h9p$#$j1As2G zPm#9KNO&yw8)NCY2v8TJ?VGq-GVk(AkBsqe-CnenpZz{=_%m{i2agnax}P>h zei=tPIT398#G^A@p>fh4YHjIO&CMS;wHHcq3jO3mE@GlmB(_u%9;Lar(I+L3sF&nQBtVebOP?ZO zoqhggR5WQ_-Ehktu*|7tix1BZP+`qq~F?R7sHbDs9~Pt~Pof2)3f#y4vrJhI$>FE%q& z)??e@ulKhIs}?Spo2OK7eCxX!k$z*)|Km|yCw9lcB+K|h?hS7b;!w$=N(XVj=)&LC z4L9AIFQlLNiMQ47es*I0^xMbQ^PkJ6!XvZIF+d0~FaE#(-37$!wtUq1^^d)^&Oh~Q z$b7zD@O(BtsM&k(y`n}NfA)=!*5$wWc3pD%H*3KHzeQQK=kE6yW7A{#s|zkG+$2wC z^7K;bW=l4q?1`3-etgX)n)W!UjJMt1`Pj|TK#|LT{>&0x>ky816ZeVkJ}@37(K8|+g zgMJ9u(kAnE58joVQ>T9Y==#Ii->gec`+7d=^w@ik-83V4*dKQwtRC#2 zaaBOSM_h}&>uZOd?|}{QV%Uwh-cmQ+esjkSrX5x+4}@c`-^pox#%OsiyW)@a&_iEX z|9sS^>qkF7FY{CWownbyUiX?KvQTC&XoGc-dL2QtfdF&Eg^|NPV+sHCy&rj0)*n%F zQer{u6(M*Lw(cCHVMhpo%2J{Yv0zqCA=@1Z{jr%1wz^0BazjN^sUD-AkFlS&{5_wh zQ=kp+frUqw*s3BL9fzq849;F>1KXz%abMfVk+^uks|>Z+Z%#F}@#sjLltm`%dgyo4 z9bU&)xyeRUDx-4C@bS*zt1p{2iIbEn;#ZS0I*vo6vW*CKo{|_d;|Fs#vq5OPd*dTs zQ31MOH$KK%57ZZ*=+@p;Mt^Xr zhh(29LMH~`Xo`4Zr;pRBfB%g_-^IuV%Qy>SUK>sXMY3k#bJ zw>HSweIE8DRuaP3efb~A@_3?Go%)kzcoXez8y9h=K8|ce>CZe6m(#9TFW#WZqqWxh za?wxr(m%$o?U=ja<6DlAnw&;c-83RE0!P-TG;`!hG=`{8vNp@#W1TNp2F^e^nQpt|ju@v{e{|5NV#ysb7pUlkrff7nUq=>ClFb zPd_D4M)^6lX3bso_-7q~Pd}{-FT1L4yYtT4arx%;mVbF>?Yv8W|15FNA3>ys%w5Vn z^W}BicTTI{U3PWdw(8DWvCWpm;hDA5F1zFl`fWVEo%y@^;Tiaak0<~9-1^b!=hbh{ z{R4Q(6j)~Jw%dDig`9RvMpC)0*2SnE1CGRNm$vgXwF z*Y#5z$5ZTeWA`Vkzv*l#$~-nFnQUvECZckHdDrd!GJ^L_4klE5xa}4Fg=L4tu zbweGUMM`sGYySdB%gtTLT!5zbd}IU0oONq6=Ehxr=J~NDJoaz0@gg`O8V6{(ql*qS zjmfIaUF7Lw{+97MiSfDg&&2nxeE03hfBHM}bjR@fYw)qjFSioD)vNJ~wtecf^d@Wm z{4rmNp=Qs_^#A!)&yN_}AN`#1C1-zfy5oF7{p!36buG3C->!;g1uP4R;sfF+yzKe@ z=@_$ePMvbvX?4;0=j8@PnS&p`Z}LKgy=lTmPk_d-=ZWu0-}&D<{9lf&2S4crb=6fX zqw^j+ZkOoC82Eyyaru!p*}*$!F2Frm8{c+wwwxdy@TBHVRQPRmpZ;iAWHXN4PReS5 zO}i}Vi{E+L&@ok8Y=$Qp3Qpoj3?k=gK2q`J(ceQugww-9ytXUck+hANNet;Y{l3gUH>&yoO&H~KMBI&0)3v8D44F2ozsJn6v(h}hVT#Y`6WaK<&4$DA z4_(^;_tkmN5gba+m=GLojFy(SBmAsE(HXX;(eAm>Wpf#KacJ`+TaSxBZLfXJ?J@k8 zMSL2rCBhjq+s48t&nnK?N>nDN@08GIpOVqem_?WT0gDbQ8*B}uJXl6wGS?DWalEdE zKLKld;p>XKITrm(|XGlnCv&7hPfEwq594i%*?bP&I?oe{JI8puQ|H z;lLkxWsR-q#@1hyx!?YG?-o_+7TOXME?sK?gA zMGMgdrgO)|h}T_f{o8DFYVjg+tCi&m=v}MsV0_+Jhd$?sdcdQf&4%vInuqM(_uEI7 zUa&Z3vL{_%7hP~+^lHyj4}G$x)Gqh9XKk@;ljiq@%-LuCB7OSviO+wX4b&SL*Vore zUiJEV|0h0IXP)&lx|$9V`pkd7qaL~ceS>L!UwYA{ z$;Y!UxHNw4hySm9<>BA}1k)yq7u8$d@S6NhIY;ty|MP*`cfSK!{E0hpa$%b1KVe7D zO)GDrG(YClTi*2Q`pN$uQ^)-GJ8{}P08ZPYrAv7eRXTf7hDMon!nMKJLvxJNM$mTF zA7U?W7FZTgx%y&i9VoEn&qV`TFLUr%io?sifx(}&dV%-kJqFv|Z5z0oG9+cv&MY7G z?nwSSPpE~Gx6V^}@-Dv}+8fzEn%;HS!|+DlDA-Sfx!f_bv~TcIMz=I1!$0G10*XN! zhF+)O9rhWmzQ92R&sTcr&lA)jO>%MzmVtzptq8d4af8&{5+mb#oTsD^-(brZ1lTwD zI5sb|oF7``E6yVvJU69TZ=eTC6zrubik6F!v8SE&I7fnL z1kHfrD+o^5hVQ*r+rbZ~IpPY4(bW2M~zF&?}tA3S-)nd_s7 zR6X*SBVaH~ePEJ&=q^%#>%Pp!&2WlBCv#LIXp77dCmjF-qXE#HHZ0(b;i)Rvj!l!- zeka6;Z)51NiQ)xTT(Io#V6@_1d=YmrFx;0Ha_I=htaxU08>`;Fb9j z`z||dQ%An`RSXo0Fw&G)2glX#}K-yWZS z_~rV_F(0Y-zw6EQ>5smvHr-@V>^<*-b2UHM#b&#LugfpHyw1C*ef#|T{-Zwjp?B2(yzlM#TVg*r?nAY7v!w}f4oWS| zg@BlMs#1~{+HG!Jbm>*0-kbRSn)vgQ1DZr-UVAo{b^xEM+>vLXicu zLsC~=(WWpRp2ES@qGT?2K^{XiOJ^ zz8Gj1z2Q~L$=ckPU4D68aPgm0|IdGVM)aM0{72Y?%&FV%xV=96+0P?ab@89BLtoVs zAF)rJ@{P~d|GfR>`Tkrcnz=e+b$)(nWQN#mSHJqfm+Qyh_)KlT!;1QqdHQL`=RfOn zN57|*Y~qbX)dd&)4qvo6k>g~hV)s>7UsV_S{X6E<8xH@Q`sT4m*Ef%OCpTe?JfSnR zM)}e!F0XUciR5QL_}b*`(H}ahe(=>#*7rY8-fq_47tGxAl~}oWcLu3@*A>g_tdl-d zCw}71^~eX^58m~4?e(|T3;y}diIj2s=hwcqZn)_-)Xb?@KJQ6&!Ou>ppa0+sb>1l_ z)C->WaB#fISYHp=Yek*-u{YLlPx)${{=c8CU;gMzwe8lMC)fQGB@UZ9cXY$N?bfyJ zmgF9GX-(D+0JK0$zhABcu~|FgTH+w3=ZiJob)Xl8tS{*|$C7-Lubmej&Y}K@G}4^? z?nP3&!bPPoF7jZ99ifNBfl^7KLohikdqA{+cjSg$qU55VJeTG{IYgug5%&gG;t_b2 zdXa3tybWB(WFCF;L=2|PDULve)JD0sc#)qjK=vBpjsk6d+{~JTj)6Cd(j1L!@RV?D ztTQ&!GM6HYPBF#Mme_#i5l}US%~6OPjo?_o4^QyI(WS^4MCm5G^6|6#g023<6D&6^ zifCgnmD84<>8@j9Pa7a}(VAxvCVPCj5OGS63@`QO0<5sN)vESQJM_;(c}}0EWmu?t z*^Eechave4a+pW#I$zNVUTlRYn;318TVd!~Csd1%Za9QUC@AIBesL_6iN7)p40&y4 zQ%zl?45RCnT&X60U?U)Hn8usY=r|hJSwA?mNrc!kc#|K~xY)06K1~Y0x#+3Rw%msy zX1e^XcVK91{IyLJA+j@y;*SOmPWoi*m6Q^Guo_YY^V-;kJt1CFp=zsml%ear{^5` z(@r7|9n24(@8lOCvdCB_A|tV)9E(Yp-bS@5shoU=8-l2$)XM_ zebH*1X~8hJ+ki=1hAR4H$cB_dJ}2O9exK*o+v|WmcB`j9=D<2=-+Si!RYxCpa$R=m zA6pKL$u3I=;}f6yT>avl%j&i}SLZi6w_56-;Fw#_ed)jDw_6u)w6GrkkiEHZKcIHo zajW|E1((;&H{V$Q^3O-GLEE-&xqVd~@wzwVY0Del_t{wbyu%KvU3T3CeKYl`Paace zo_lHCvFff`x^$D;a*NGkMjplMs}~*<-J~#9#@>Tbxt$HfE&8A&VT zD>vR~K^^?i`{CRDYZrX`)dg3e?^e+|J+Q@Jf^j@DP9*#^8rj?t(~p1VQ+4KVFT=mp zwQSjv{8^DK7K)33k7MZBgf&+127`TK+Mi7#{8>PtBT>)%$A7C|o%@HHyKsK(ci)|B zi)D-J%4=5E-@g3F#727P9{yJJt%7N$UibF*)n9KUP5^Jae2epk-J=eB>;d)AeRi+A)~sPnf54btma+5(rSrAp zq0X1S=BT>vh8y#XAA9Y#eSPzXzo@IPyD`2_3!jVIbN=zwb^32E&L8J}!a?_AeD|)M zci6gqbKzy^^}B}pJ8=64U0@JDNk(TKc>X=UE3Uq-j{DYW^_XY=V_kRcwLLdEZ@lT2 zdi=AGsME-ybu1`8iQ8t`W_8!<)phDw7t~tv&A6X*%5Uqh*WXf`ELv3CZo5To44;2L z@t6}&sZ&q=QFwA_4uy-VmHZ|odbG!OLIHQy6%MmQnj=11@hAOV&L{8Zdtm1B`ys<&j>5u>q2KLLu*w>qyvg+3!Ah`l32~re7Or3D-8F%vhw~3slAsS@?{%eBtdt(&yH}(GkmX@MP_2 ze;l7^)}A(<7FK0E=s_-S*}-A8n;nU1lPUUiBa=%66*U-P$JQ|TiMzIk#-VSykf&j1 z+nQ0q9~sGDDPu;{3M25@8ule0`wA(!gv_Ern>Vq$yWnAcsKE}to>q+jgtOKmE zve55uvwB0~|6mTtTIjnz`IFRC7Wdj9q;rQuT}*rPu$%PuZw0XsuNk;JSSZ6n=PpZ((=#m&jX)<9D+< z>S02ACVa+&9^&odK99cEZ@gfop2eyM#zy+437Qz26Y*7aiN-i=O$$$?G8XzB;W740 z7B8-Cwp(7evXQvqh8xlqy>MDlK8v9?(-vdH-8UMC)ABj8ZRZBN1hg)blVdUZw%c~w zx(R*P-*7!sQ`Tt5&T-yybXLEIhidHvMRWc~5=GCL7mQ+iY8_ z{kK`yT}!^k;~cROUJ+s!`Irk2rGJ9w#_O-oN9WE^x9ZN@>-y^% ze>Pa%1Gb6=e)CgPUKed!k;y@iQSj-9@iL~+loV~jLN;pKZJ$4$eC@S=CC|LgidFE* zxV|>oba8F9#qwHVw`zD zD?>$W%Gd?+loQF1$b`%f5|PtLt)eY~V|r?;4bxmobJRt0)1agm!w`cnX3uBISq=l) zIq0E^eriWstcZ(8CpdXRV*HV4%leeZo9c|{@U7ni*tYYN;T-np#q_t%gzwE5wb7pV zwAXRZdT$?{USJv_oX|GN#pTEdhXsN04U0$o?RS*rS1?`DW2bAecA*=cJvOb)V=}XC z=)*qaAtktpA2Kkz*=b#JwNN&Mvls)AW2(hRTGnMXZg%!>O{0l=c*D?TSa|FF(3hUG z@x%U!FQpf0);Q%GqGc`Z%UYVQfvK(d1b{K>wLu=rgmvVi7RxJHUB2S0o6C_`9KmSr zku&gSe5E?#9AH~du1>ai&SFJX?31qTULUN<-`90)geh?z?aujuX;HZKoAIOkF1V8P{I(;G@X34Sk|3>y1cq zGe_GI#~lxYt$y(#$tGt*w{7|=Jz1|}uMb1OJ~!q0?+?mQkF4E5Z+*Z&j3C7mE2u-S z-=~&${B1dTgtVM}#HhmgLC_F&3-A9$6!wBvGFO+TlyUY$4wXZ$d<%Rbrern>yJvf=9?B z?U5MBKL)YGID!c|A4$X7$%GBv!@JtYZ=WFVE4}IyCwI}BtgX|e1xS7m{Xqs|c;rnm z?{>5v-{j?p|82W^<<_P=iO~M$3eETi(_`prui75D^3i|_hThl?A>oUNZ}f#{=%vGP zid-|<$@%}<7T@VID$>;2i*?(PLmrCQ=^Nze54U>NC5RoyZ}@4Rg-=1x_SHDf#)wia zu~5CqZRo~DdejYj20eE~vgt#(?3WRlJhh~R9REU>hjsw(PU{j_%Dgp?=!as@3r^&$}+Zbq&`G^BZCp3t_;9BpO6@jyH_JEqcY zr$6H@U%a*@x$)Jho%T%efR;OVTaY$vh7{@kS(!#dmN)IA@JJ1sHpIVF!r2TQHd{_ zjALY?I{+zdE9Vm#KSpXBB=Q~|@+;IiHEUjCI4~pOywQuKSLoSzz@=Q*2CV`38MZn6 zl~p z-@b)E^GN{?WuRp(p>BtByw}R!*f?kAVQ{dO6PiM~@X&Hx?Dt4$@5a~H5BZvIeycBe zKI!$a&yqLyANg(3(DkOljblc{K1hyD)=Y3Fe&Zv%{Y^n4@$A?c7xl(BWao}w&QqwP zZ~Qx^J*N}R=+yry{(+)lytAA@Xl+JB%OGKU`oWoQpp$=%4ox1au9bj_sdTR`ZWghf zetS9(S}wXH*YcC)A&kQCW-f4y0!Hod|Js5zY&HfNk6~*xjF|Ve)~_*WI|3OuHO*sl zw~qcfwfsSB=BD*D*D?(P$B$SQf!o|qX}mCsJT}e7Z>dH|ONK@K*&GO9+U;gH;1Af z%OZk&{4wO(=RdB7KxFa=W)ujzoZ8bU^x)cm;X`IPUqa;Rxtt>pU^v#1LV?=2~ zKJ`Y{I8zV3?GL^T=8o8ov!w8NG^T=vQq4Kw6%(nBQ*r>*VMFw*)3KEcelH4cdbnz( zE@t?ཀ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 literal 0 HcmV?d00001 diff --git a/docs/img/icon.png b/docs/img/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..5dc6012de1775247d8c84890406fc22272f513e5 GIT binary patch literal 1751 zcmb7_dpy&P9>;&1HJid%yyR5olIB5;I5{!aMu@RoN6{qLkX(vGcBxP<6OzWms5H0D zc#d2f$2{yQ*SUnAXA7m{$t5K8%#Qv%f1dB_`}w|K-_PswdVT-=-Y2;^Dl2I#0RW)v z>}2n;N7@g;6!zwZ^x^g%K=B@qc+ix{gu1uDW1als0boD!hd==E$g z|6h#=YNiwo=Kkv)we~HJ-ix`_MamWl#{V3Yto-qxjpg-ixm;c*cpqCK=Kb~&71cf< zRJYi>qMP91<_RE3)bgPfxkSLjF)^_e)L!;~if8%yGyv?AI@_Q1N-ABtcr9fSb%1;3 zV&a)48KYSy7p!f#f$5`0OWO_KdN%7^L^B2unAA$?^JWHbZX~hu^!v6K>mM2<)f>ZG zwudF&CbOxXPa-9^15=oD%qKf9>$%;DK62UB3%3=%alNVSZ@ne6Tckhb%@Ma%o~x^ax?nOq9FQ(Wc}#HbV?TQ7FH@S zn%tsH?yBIk(Mk-fk>=ubzrcot0*$F!udJPjLXEnDT6Akh)Ack%clElTuCqeb}p3sUAYN?)^ybDD6M#ztL&r_?A!5wG&EK#ea zT0_o_BZ5f91nK+PVvE;AOfYR>-O`>m0SrUT=^gjB@Wey3kPvNqD|C9%h0vg&;r>HN zPBkhQ)}vA}AKWbK(Xw5%jw|Uj^lE~zHV){hob+1tI|G}@#Gy)Ritz>4dzf|qB(H9l6Vz+N~}%5nQ4MLG}WX{Z(ECuJu5|eU<%foWj3DUV7e9AcNg#4T%8kGG8>8=AQwJ8If_K<#eHyxfKx>I2I3B( zjWzg{fr$L@9;=O@-CbAe3km?=*DsWj4XJrg$IP-?{G#nc@OTRxqJv9d1b~H*e0cQqF&yzeM2CC~w=9IE82Z5TJd?T= zec;3ES3WD0K-h|1(+5{TQwD$yiT2^ZCY=bDCd2CKsg#F6VQvND{G=uvP@NBVzW>8X zI{bd0wTbVHJ`F3aPNgt`hU61}Dc`2#(3n_Stu;H3k^>YH?alc3D|Y}+MB^_CscSA^ z;d0@Ft~Z0n$}gPIqeWg8k3kugcgRKwL61|v%f@!o#v4e^oZf#{hW+b-)D zcLF|c=C-Ojfrl=2Z3VOd{=GMjWRNvlMXu~oWF989{-$wVaLh*#pNw@!p%^s$)lZ;h zg}wkh&eL#-w3U8TYD;#)anX9&0r3+GsdF(lq7bJpmxN!B1ZyO-H~)c>y%LE%z-OT1 zC}dIG$nw#@99QnlB~?xr)7EGR&Le^ls1!j}vyzNlZ;%>FcVQ{JZ2k@Mw2_e93bOS?Y=-Un&l-AYQY+c8}7 zn93XNl2z6~+U`AfLW`_r&B1tfajwR9z-C2H!U*`v9eL7ruf0;)NoK6_#&_IwK5==b zg*791sbN0qM+HqctGz3qa*_Vss6}z$=gYY6(NE!=SG~JCH&m9tHh+fh&ZSwE+r}vm fVgtFiLgr-(p}C&lkm{+vKmL!igPT1UPhtEQWWP7& literal 0 HcmV?d00001 diff --git a/package.json b/package.json index f45efd8..4f8e47d 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,18 @@ { "name": "dcs-lua-runner", "displayName": "DCS Lua Runner", - "description": "Run lua code in DCS World Mission Scripting Environment (local or remote server). A reimplementation of the DCS Fiddle lua console in VS Code.", - "version": "0.0.1", + "description": "Quickly run lua code in DCS World (local or remote server). A reimplementation of the DCS Fiddle lua console in VS Code.", + "version": "1.0.0", + "icon": "docs/img/icon.png", + "repository": { + "type": "git", + "url": "https://github.com/omltcat/dcs-lua-runner"}, "engines": { "vscode": "^1.85.0" }, "categories": [ - "Other" + "Programming Languages", + "Debuggers" ], "activationEvents": [], "main": "./out/extension.js", @@ -17,13 +22,13 @@ "properties": { "dcsLuaRunner.serverAddress": { "type": "string", - "default": "127.0.0.1", - "description": "DCS server address." + "default": "", + "description": "Remote DCS server address (IP or domain)." }, "dcsLuaRunner.serverPort": { "type": "number", "default": 12080, - "description": "DCS Fiddle port." + "description": "Remote DCS Fiddle port." }, "dcsLuaRunner.useHttps": { "type": "boolean", @@ -33,46 +38,138 @@ "dcsLuaRunner.webAuthUsername": { "type": "string", "default": "username", - "description": "The username for authentication." + "description": "The username for authentication. Requires the modified DCS Fiddle script." }, "dcsLuaRunner.webAuthPassword": { "type": "string", "default": "password", - "description": "The password for authentication." + "description": "The password for authentication. Requires the modified DCS Fiddle script." + }, + "dcsLuaRunner.runCodeLocally": { + "type": "boolean", + "default": true, + "description": "Send code to 127.0.0.1:12080 or remote server set below." + }, + "dcsLuaRunner.runInMissionEnv": { + "type": "boolean", + "default": true, + "description": "Execute in mission or GUI Scripting Environment." } } }, "menus": { - "editor/title/run": [ + "editor/title": [ { - "command": "dcs-lua-runner.run-file-mission", - "group": "navigation@0", + "command": "dcs-lua-runner.run-file", + "group": "navigation@3", "when": "editorLangId == lua" }, { - "command": "dcs-lua-runner.run-file-hooks", - "group": "navigation@1", - "when": "editorLangId == lua" + "command": "dcs-lua-runner.set-local-button", + "when": "editorLangId == lua && config.dcsLuaRunner.runCodeLocally == false", + "group": "navigation@0" + }, + { + "command": "dcs-lua-runner.set-remote-button", + "when": "editorLangId == lua && config.dcsLuaRunner.runCodeLocally == true", + "group": "navigation@0" + }, + { + "command": "dcs-lua-runner.set-missionEnv-button", + "when": "editorLangId == lua && config.dcsLuaRunner.runInMissionEnv == false", + "group": "navigation@1" + }, + { + "command": "dcs-lua-runner.set-guiEnv-button", + "when": "editorLangId == lua && config.dcsLuaRunner.runInMissionEnv == true", + "group": "navigation@1" } - ] + ], + "editor/context": [ + { + "command": "dcs-lua-runner.run-selected", + "group": "navigation", + "when": "editorLangId == lua && editorHasSelection" + } + ], + "commandPalette": [ + { + "command": "dcs-lua-runner.run-file", + "when": "editorLangId == lua" + }, + { + "command": "dcs-lua-runner.run-selected", + "when": "editorLangId == lua && editorHasSelection" + }, + { + "command": "dcs-lua-runner.set-local-button", + "when": "false" + }, + { + "command": "dcs-lua-runner.set-remote-button", + "when": "false" + }, + { + "command": "dcs-lua-runner.set-missionEnv-button", + "when": "false" + }, + { + "command": "dcs-lua-runner.set-guiEnv-button", + "when": "false" + } + ] }, "commands": [ + { + "command": "dcs-lua-runner.open-settings", + "title": "DCS Lua: Open Runner Settings" + }, { "command": "dcs-lua-runner.get-theatre", "group": "navigation@0", "title": "DCS Lua: Get Mission Theatre" }, { - "command": "dcs-lua-runner.run-file-mission", + "command": "dcs-lua-runner.run-file", "group": "navigation@1", - "title": "DCS Lua: Run Current File in Mission Environment", + "title": "DCS Lua: Run Current File", "icon": "$(run)" }, { - "command": "dcs-lua-runner.run-file-hooks", - "group": "navigation@2", - "title": "DCS Lua: Run Current File in Hooks Environment", - "icon": "$(debug-coverage)" + "command": "dcs-lua-runner.run-selected", + "title": "DCS Lua: Run Selected Code" + }, + { + "command": "dcs-lua-runner.set-local", + "title": "DCS Lua: Set Run Code on Local Machine" + }, + { + "command": "dcs-lua-runner.set-local-button", + "title": "DCS: Remote" + }, + { + "command": "dcs-lua-runner.set-remote", + "title": "DCS Lua: Set Run Code on Remote Server" + }, + { + "command": "dcs-lua-runner.set-remote-button", + "title": "DCS: Local" + }, + { + "command": "dcs-lua-runner.set-missionEnv", + "title": "DCS Lua: Set Run Code in Mission Environment" + }, + { + "command": "dcs-lua-runner.set-missionEnv-button", + "title": "Env: GUI" + }, + { + "command": "dcs-lua-runner.set-guiEnv", + "title": "DCS Lua: Set Run Code in GUI Environment" + }, + { + "command": "dcs-lua-runner.set-guiEnv-button", + "title": "Env: Mission" } ] }, diff --git a/src/extension.ts b/src/extension.ts index 3b37f0e..19269c2 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -3,16 +3,18 @@ import axios from 'axios'; import * as fs from 'fs'; import * as path from 'path'; -async function runLua(lua: string, outputChannel: vscode.OutputChannel, filename: string = 'none', portOffset: boolean = false) { +async function runLua(lua: string, outputChannel: vscode.OutputChannel, filename: string = 'none') { const lua_base64 = Buffer.from(lua).toString('base64'); const config = vscode.workspace.getConfiguration('dcsLuaRunner'); - const serverAddress = config.get('serverAddress') as string; - const serverPort = config.get('serverPort') as number + (portOffset ? 1 : 0); - const useHttps = config.get('useHttps') as boolean; + const runCodeLocally = config.get('runCodeLocally') as boolean; + const runInMissionEnv = config.get('runInMissionEnv') as boolean; + const serverAddress = runCodeLocally ? '127.0.0.1' : config.get('serverAddress') as string; + const serverPort = runCodeLocally ? 12080 : config.get('serverPort') as number + (runInMissionEnv ? 0 : 1); + const useHttps = runCodeLocally ? false : config.get('useHttps') as boolean; const authUsername = config.get('webAuthUsername') as string; const authPassword = config.get('webAuthPassword') as string; const protocol = useHttps ? 'https' : 'http'; - const prefix = portOffset ? 'Hooks' : 'Mission'; + const envName = runInMissionEnv ? 'Mission' : 'GUI'; try { const response = await axios.get(`${protocol}://${serverAddress}:${serverPort}/${lua_base64}?env=default`, { auth: { @@ -24,14 +26,14 @@ async function runLua(lua: string, outputChannel: vscode.OutputChannel, filename outputChannel.show(true); if (response.data.hasOwnProperty('result')) { - outputChannel.appendLine(`[DCS] ${new Date().toLocaleString()} (${filename} > ${prefix}):\n${JSON.stringify(response.data.result, null, 2)}`); + outputChannel.appendLine(`[DCS] ${new Date().toLocaleString()} (${envName}@${serverAddress}:${serverPort} <- ${filename}):\n${JSON.stringify(response.data.result, null, 2)}`); } else { - outputChannel.appendLine(`[DCS] ${new Date().toLocaleString()} (${filename} > ${prefix}):\nResult not found in response.`); + outputChannel.appendLine(`[DCS] ${new Date().toLocaleString()} (${envName}@${serverAddress}:${serverPort} <- ${filename}):\n`); } } catch (error: any) { if (error.response && error.response.status === 500) { vscode.window.showErrorMessage('Internal server error occurred.'); - outputChannel.appendLine(`[DCS] ${new Date().toLocaleString()} (${filename} > ${prefix}):\n${JSON.stringify(error.response.data.error, null, 2)}`); + outputChannel.appendLine(`[DCS] ${new Date().toLocaleString()} (${envName}@${serverAddress}:${serverPort} <- ${filename}):\n${JSON.stringify(error.response.data.error, null, 2)}`); } else { vscode.window.showErrorMessage(`Error: ${error}`); } @@ -56,14 +58,18 @@ function getCurrentFileLua() { } export function activate(context: vscode.ExtensionContext) { - let outputChannel = vscode.window.createOutputChannel("DCS Return"); + let outputChannel = vscode.window.createOutputChannel("DCS Lua Runner"); + + context.subscriptions.push(vscode.commands.registerCommand('dcs-lua-runner.open-settings', () => { + vscode.commands.executeCommand('workbench.action.openSettings', 'dcsLuaRunner'); + })); context.subscriptions.push(vscode.commands.registerCommand('dcs-lua-runner.get-theatre', async () => { const lua = 'return env.mission.theatre'; await runLua(lua, outputChannel, 'env.mission.theatre'); })); - context.subscriptions.push(vscode.commands.registerCommand('dcs-lua-runner.run-file-mission', async () => { + context.subscriptions.push(vscode.commands.registerCommand('dcs-lua-runner.run-file', async () => { const currentFileLua = getCurrentFileLua(); if (currentFileLua) { const { lua, filename } = currentFileLua; @@ -71,13 +77,57 @@ export function activate(context: vscode.ExtensionContext) { } })); - context.subscriptions.push(vscode.commands.registerCommand('dcs-lua-runner.run-file-hooks', async () => { - const currentFileLua = getCurrentFileLua(); - if (currentFileLua) { - const { lua, filename } = currentFileLua; - await runLua(lua, outputChannel, filename, true); + context.subscriptions.push(vscode.commands.registerCommand('dcs-lua-runner.run-selected', async () => { + const editor = vscode.window.activeTextEditor; + if (editor && editor.selection) { + const document = editor.document; + const selection = editor.selection; + const lua = document.getText(selection); + const start = selection.start.line + 1; + const end = selection.end.line + 1; + const lineNumbers = start === end ? start : `${start}-${end}`; + const filename = path.basename(document.uri.fsPath) + ':' + lineNumbers; + await runLua(lua, outputChannel, filename); } - })); + })); + + const displayRunTarget = () => { + const config = vscode.workspace.getConfiguration('dcsLuaRunner'); + const runCodeLocally = config.get('runCodeLocally') as boolean; + const runInMissionEnv = config.get('runInMissionEnv') as boolean; + const runTarget = runCodeLocally ? 'local machine' : 'remote server'; + const runEnv = runInMissionEnv ? 'mission' : 'GUI'; + const serverAddress = runCodeLocally ? '127.0.0.1' : config.get('serverAddress') as string; + const serverPort = runCodeLocally ? 12080 : config.get('serverPort') as number + (runInMissionEnv ? 0 : 1); + outputChannel.show(true); + outputChannel.appendLine(`[DCS] Settings: Run code in ${runEnv} environment on ${runTarget} (${serverAddress}:${serverPort}).`); + }; + + const updateSetting = async (setting: string, targetState: boolean) => { + const config = vscode.workspace.getConfiguration('dcsLuaRunner'); + if (setting === 'runCodeLocally' && targetState === false && config.get('serverAddress') === '') { + vscode.window.showErrorMessage('Remote DCS server address not set.', 'Open Settings').then((choice) => { + if (choice === 'Open Settings') { + vscode.commands.executeCommand('workbench.action.openSettings', 'dcsLuaRunner'); + } + }); + await config.update(setting, true, vscode.ConfigurationTarget.Global); + return; + } else { + await config.update(setting, targetState, vscode.ConfigurationTarget.Global); + displayRunTarget(); + } + }; + + context.subscriptions.push(vscode.commands.registerCommand('dcs-lua-runner.set-local', () => updateSetting('runCodeLocally', true))); + context.subscriptions.push(vscode.commands.registerCommand('dcs-lua-runner.set-local-button', () => updateSetting('runCodeLocally', true))); + context.subscriptions.push(vscode.commands.registerCommand('dcs-lua-runner.set-remote', () => updateSetting('runCodeLocally', false))); + context.subscriptions.push(vscode.commands.registerCommand('dcs-lua-runner.set-remote-button', () => updateSetting('runCodeLocally', false))); + + context.subscriptions.push(vscode.commands.registerCommand('dcs-lua-runner.set-missionEnv', () => updateSetting('runInMissionEnv', true))); + context.subscriptions.push(vscode.commands.registerCommand('dcs-lua-runner.set-missionEnv-button', () => updateSetting('runInMissionEnv', true))); + context.subscriptions.push(vscode.commands.registerCommand('dcs-lua-runner.set-guiEnv', () => updateSetting('runInMissionEnv', false))); + context.subscriptions.push(vscode.commands.registerCommand('dcs-lua-runner.set-guiEnv-button', () => updateSetting('runInMissionEnv', false))); // Update the 'luaFileActive' context when the active editor changes vscode.window.onDidChangeActiveTextEditor(editor => { diff --git a/src/hooks/dcs-fiddle-server.lua b/src/hooks/dcs-fiddle-server.lua new file mode 100644 index 0000000..ec47ac7 --- /dev/null +++ b/src/hooks/dcs-fiddle-server.lua @@ -0,0 +1,642 @@ +FIDDLE = {} + +-- Configs: +FIDDLE.PORT = 12080 -- keep this at 12080 if you also want to use the DCS Fiddle website. +FIDDLE.AUTH = true -- set to true to enable basic auth, recommended for public servers. +FIDDLE.USERNAME = 'username' +FIDDLE.PASSWORD = 'password' +FIDDLE.BIND_IP = '0.0.0.0' -- for remote access +FIDDLE.BYPASS_LOCAL = true -- allow requests to 127.0.0.1:12080 without auth, so DCS Fiddle website can still work. (Not a very secure implementation. Use at your own risk if your 12080 port is public) + +--[[ + base64 -- v1.5.3 public domain Lua base64 encoder/decoder + no warranty implied; use at your own risk + Needs bit32.extract function. If not present it's implemented using BitOp + or Lua 5.3 native bit operators. For Lua 5.1 fallbacks to pure Lua + implementation inspired by Rici Lake's post: + http://ricilake.blogspot.co.uk/2007/10/iterating-bits-in-lua.html + author: Ilya Kolbin (iskolbin@gmail.com) + url: github.com/iskolbin/lbase64 + COMPATIBILITY + Lua 5.1+, LuaJIT + LICENSE + See end of file for license information. +--]] + +local base64 = {} + +local extract = _G.bit32 and _G.bit32.extract -- Lua 5.2/Lua 5.3 in compatibility mode +if not extract then + if _G.bit then + -- LuaJIT + local shl, shr, band = _G.bit.lshift, _G.bit.rshift, _G.bit.band + extract = function(v, from, width) + return band(shr(v, from), shl(1, width) - 1) + end + elseif _G._VERSION == "Lua 5.1" then + extract = function(v, from, width) + local w = 0 + local flag = 2 ^ from + for i = 0, width - 1 do + local flag2 = flag + flag + if v % flag2 >= flag then + w = w + 2 ^ i + end + flag = flag2 + end + return w + end + else + -- Lua 5.3+ + extract = load [[return function( v, from, width ) + return ( v >> from ) & ((1 << width) - 1) + end]]() + end +end + +function base64.makeencoder(s62, s63, spad) + local encoder = {} + for b64code, char in pairs { [0] = 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', + 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', + 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', + 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', + '3', '4', '5', '6', '7', '8', '9', s62 or '+', s63 or '/', spad or '=' } do + encoder[b64code] = char:byte() + end + return encoder +end + +function base64.makedecoder(s62, s63, spad) + local decoder = {} + for b64code, charcode in pairs(base64.makeencoder(s62, s63, spad)) do + decoder[charcode] = b64code + end + return decoder +end + +local DEFAULT_ENCODER = base64.makeencoder() +local DEFAULT_DECODER = base64.makedecoder() + +local char, concat = string.char, table.concat + +function base64.encode(str, encoder, usecaching) + encoder = encoder or DEFAULT_ENCODER + local t, k, n = {}, 1, #str + local lastn = n % 3 + local cache = {} + for i = 1, n - lastn, 3 do + local a, b, c = str:byte(i, i + 2) + local v = a * 0x10000 + b * 0x100 + c + local s + if usecaching then + s = cache[v] + if not s then + s = char(encoder[extract(v, 18, 6)], encoder[extract(v, 12, 6)], encoder[extract(v, 6, 6)], encoder[extract(v, 0, 6)]) + cache[v] = s + end + else + s = char(encoder[extract(v, 18, 6)], encoder[extract(v, 12, 6)], encoder[extract(v, 6, 6)], encoder[extract(v, 0, 6)]) + end + t[k] = s + k = k + 1 + end + if lastn == 2 then + local a, b = str:byte(n - 1, n) + local v = a * 0x10000 + b * 0x100 + t[k] = char(encoder[extract(v, 18, 6)], encoder[extract(v, 12, 6)], encoder[extract(v, 6, 6)], encoder[64]) + elseif lastn == 1 then + local v = str:byte(n) * 0x10000 + t[k] = char(encoder[extract(v, 18, 6)], encoder[extract(v, 12, 6)], encoder[64], encoder[64]) + end + return concat(t) +end + +function base64.decode(b64, decoder, usecaching) + decoder = decoder or DEFAULT_DECODER + local pattern = '[^%w%+%/%=]' + if decoder then + local s62, s63 + for charcode, b64code in pairs(decoder) do + if b64code == 62 then + s62 = charcode + elseif b64code == 63 then + s63 = charcode + end + end + pattern = ('[^%%w%%%s%%%s%%=]'):format(char(s62), char(s63)) + end + b64 = b64:gsub(pattern, '') + local cache = usecaching and {} + local t, k = {}, 1 + local n = #b64 + local padding = b64:sub(-2) == '==' and 2 or b64:sub(-1) == '=' and 1 or 0 + for i = 1, padding > 0 and n - 4 or n, 4 do + local a, b, c, d = b64:byte(i, i + 3) + local s + if usecaching then + local v0 = a * 0x1000000 + b * 0x10000 + c * 0x100 + d + s = cache[v0] + if not s then + local v = decoder[a] * 0x40000 + decoder[b] * 0x1000 + decoder[c] * 0x40 + decoder[d] + s = char(extract(v, 16, 8), extract(v, 8, 8), extract(v, 0, 8)) + cache[v0] = s + end + else + local v = decoder[a] * 0x40000 + decoder[b] * 0x1000 + decoder[c] * 0x40 + decoder[d] + s = char(extract(v, 16, 8), extract(v, 8, 8), extract(v, 0, 8)) + end + t[k] = s + k = k + 1 + end + if padding == 1 then + local a, b, c = b64:byte(n - 3, n - 1) + local v = decoder[a] * 0x40000 + decoder[b] * 0x1000 + decoder[c] * 0x40 + t[k] = char(extract(v, 16, 8), extract(v, 8, 8)) + elseif padding == 2 then + local a, b = b64:byte(n - 3, n - 2) + local v = decoder[a] * 0x40000 + decoder[b] * 0x1000 + t[k] = char(extract(v, 16, 8)) + end + return concat(t) +end + +--[[ +------------------------------------------------------------------------------ +This software is available under 2 licenses -- choose whichever you prefer. +------------------------------------------------------------------------------ +ALTERNATIVE A - MIT License +Copyright (c) 2018 Ilya Kolbin +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +------------------------------------------------------------------------------ +ALTERNATIVE B - Public Domain (www.unlicense.org) +This is free and unencumbered software released into the public domain. +Anyone is free to copy, modify, publish, use, compile, sell, or distribute this +software, either in source code form or as a compiled binary, for any purpose, +commercial or non-commercial, and by any means. +In jurisdictions that recognize copyright laws, the author or authors of this +software dedicate any and all copyright interest in the software to the public +domain. We make this dedication for the benefit of the public at large and to +the detriment of our heirs and successors. We intend this dedication to be an +overt act of relinquishment in perpetuity of all present and future rights to +this software under copyright law. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +------------------------------------------------------------------------------ +--]] + +local function dumpt(t) + if type(t) == 'table' then + local s = '{ ' + for k, v in pairs(t) do + if type(k) ~= 'number' then + k = '"' .. k .. '"' + end + s = s .. '[' .. k .. '] = ' .. dumpt(v) .. ',' + end + return s .. '} ' + else + return tostring(t) + end +end + + +------------------------------------------------------------------------------------------------------------------------ +--- Logger +------------------------------------------------------------------------------------------------------------------------ + +local __debug = function(message) + local message = '[dcs-fiddle-server] - ' .. message + if (log and log.debug) then + log.debug(message) + else + print('DEBUG - ' .. message) + end +end + +local __info = function(message) + local message = '[dcs-fiddle-server] - ' .. message + if (log and log.info) then + log.info(message) + else + print('INFO - ' .. message) + end +end + +local __error = function(message) + local message = '[dcs-fiddle-server] - ' .. message + if (log and log.error) then + log.error(message) + else + print('ERROR - ' .. message) + end +end + +------------------------------------------------------------------------------------------------------------------------ +--- DCS Instruction Handler +------------------------------------------------------------------------------------------------------------------------ + +local IS_DCS = false + +------------------------------------------------------------------------------------------------------------------------ +--- Takes a LUA string, executes it and returns the result as a JSON string +---@param env string Environment to run the lua string within +--- +local function handle_request(luastring, env) + __info("[handle_request] - Handling request to execute string in " .. env) + + if (env ~= "default") then + __info("[handle_request] - Executing string via dostring_in") + local str, err = net.dostring_in(env, luastring) + if (err) then + __error(string.format("Error while executing string in %s\n%s", env, str)) + end + return str + else + __info("[handle_request] - Loading LUA String...") + local loaded = assert(loadstring(luastring)) + + __info("[handle_request] - Executing LUA String...") + local result = loaded() + + __info("[handle_request] - Processing result...") + return result + end +end + +------------------------------------------------------------------------------------------------------------------------ +--- Url +--- https://developer.mozilla.org/en-US/docs/Learn/Common_questions/What_is_a_URL +------------------------------------------------------------------------------------------------------------------------ + +------------------------------------------------------------------------------------------------------------------------ +--- Parses the given url and returns a URL table +--- +--- `{ parameters={sort="asc", size=20}, path="/employees" }` +--- +--- @param original_url string - The Original Request URL i.e. `/employees?sort=asc&size=20` +--- @return string, table Returns the path part alongside a table of parsed parameters +--- +local function parse_url(original_url) + local resource_path, parameters = original_url:match('(.+)?(.*)') + if (parameters) then + local params = {} + for parameter in string.gmatch(parameters, "[^&]+") do + local name, value = parameter:match('(.+)=(.+)') + params[name] = value + end + + return resource_path, params + end + return original_url +end + +------------------------------------------------------------------------------------------------------------------------ +--- HTTP Receiver +------------------------------------------------------------------------------------------------------------------------ + +------------------------------------------------------------------------------------------------------------------------ +--- Reads HTTP Message from the given connection +--- +--- @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Messages +--- @see https://lunarmodules.github.io/luasocket/tcp.html#accept +--- @param client socket.client LUA Socket Lib Client +--- @return table, number Request table containing method, original_url, protocol, path, parameters, body, headers. Optionally returns a second item representing an error_code from the match_headers failing +local function receive_http(client) + local request = {} + __debug("receiving start-line") + local received, err = client:receive("*l") + + if (err) then + __error("Failed to get start-line due to " .. err) + return + end + + __debug("parsing start-line") + local method, original_url, protocol = string.match(received, "(%S+) (%S+) (%S+)") + request.method = method + request.original_url = original_url + request.protocol = protocol + + __debug("parsing url") + local path, parameters = parse_url(original_url) + request.path = path + request.parameters = parameters + + request.authOK = false + if FIDDLE.AUTH then + __debug("parsing headers for auth") + local headers = {} + while true do + local line = client:receive() + if not line or line == "" then break end + local name, value = line:match("^([^:]+):%s*(.*)$") + headers[name] = value + end + local auth_header = headers["Authorization"] + local host_header = headers['X-Forwarded-Host'] or headers["Host"] + if FIDDLE.BYPASS_LOCAL and (host_header == '127.0.0.1:12080' or host_header == '127.0.0.1:12081') then + request.authOK = true + elseif auth_header then + local encoded_username_password = auth_header:match("^Basic%s+(.*)$") + if encoded_username_password then + local decoded_username_password = base64.decode(encoded_username_password) + local username, password = decoded_username_password:match("^(.*):(.*)$") + -- __info(decoded_username_password) + if username == FIDDLE.USERNAME and password == FIDDLE.PASSWORD then + -- __info("Auth Passed") + request.authOK = true + end + end + end + else + request.authOK = true + end + + __debug("request completed") + return request +end + +------------------------------------------------------------------------------------------------------------------------ +--- HTTP Sender +------------------------------------------------------------------------------------------------------------------------ + +local EMPTY_LINE = "" +local CRLF = "\r\n" + +local status_text = { + [100] = "Continue", + [101] = "Switching protocols", + [102] = "Processing", + [103] = "Early Hints", + [200] = "OK", + [201] = "Created", + [202] = "Accepted", + [203] = "Non-Authoritative Information", + [204] = "No Content", + [205] = "Reset Content", + [206] = "Partial Content", + [207] = "Multi-Status", + [208] = "Already Reported", + [226] = "IM Used", + [300] = "Multiple Choices", + [301] = "Moved Permanently", + [302] = "Found (Previously \"Moved Temporarily\")", + [303] = "See Other", + [304] = "Not Modified", + [305] = "Use Proxy", + [306] = "Switch Proxy", + [307] = "Temporary Redirect", + [308] = "Permanent Redirect", + [400] = "Bad Request", + [401] = "Unauthorized", + [402] = "Payment Required", + [403] = "Forbidden", + [404] = "Not Found", + [405] = "Method Not Allowed", + [406] = "Not Acceptable", + [407] = "Proxy Authentication Required", + [408] = "Request Timeout", + [409] = "Conflict", + [410] = "Gone", + [411] = "Length Required", + [412] = "Precondition Failed", + [413] = "Payload Too Large", + [414] = "URI Too Long", + [415] = "Unsupported Media Type", + [416] = "Range Not Satisfiable", + [417] = "Expectation Failed", + [418] = "I'm a Teapot", + [421] = "Misdirected Request", + [422] = "Unprocessable Entity", + [423] = "Locked", + [424] = "Failed Dependency", + [425] = "Too Early", + [426] = "Upgrade Required", + [428] = "Precondition Required", + [429] = "Too Many Requests", + [431] = "Request Header Fields Too Large", + [451] = "Unavailable For Legal Reasons", + [500] = "Internal Server Error", + [501] = "Not Implemented", + [502] = "Bad Gateway", + [503] = "Service Unavailable", + [504] = "Gateway Timeout", + [505] = "HTTP Version Not Supported", + [506] = "Variant Also Negotiates", + [507] = "Insufficient Storage", + [508] = "Loop Detected", + [510] = "Not Extended", + [511] = "Network Authentication Required" +} + +------------------------------------------------------------------------------------------------------------------------ +--- Writes HTTP Message to the given connection using the given response object +--- +--- @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Messages +--- @param client client @see https://lunarmodules.github.io/luasocket/tcp.html +--- @param response table response table containing 'status' and 'body' +local function send_http(client, response) + local start_line = table.concat({ "HTTP/1.1", response.status, status_text[response.status] }, " ") + + local headers = { "Server: DCS Fiddle Server HTTP/1.1" } + + for name, value in pairs(response.headers) do + table.insert(headers, name .. ": " .. value) + end + + local response_string + if (response.body) then + response_string = table.concat({ start_line, table.concat(headers, CRLF), EMPTY_LINE, response.body }, CRLF) + else + response_string = table.concat({ start_line, table.concat(headers, CRLF), EMPTY_LINE, EMPTY_LINE }, CRLF) + end + + __info("Sending HTTP Response") + --__debug(">> " .. response_string) + local index, err = client:send(response_string) + if (err) then + __error("Failed to fully send due to: " .. err) + else + __info("Successfully sent response") + end +end + +------------------------------------------------------------------------------------------------------------------------ +--- HTTP Server +------------------------------------------------------------------------------------------------------------------------ +if (not require or not package) then + if (env and env.error) then + env.error("DCS Fiddle failed to inject into the mission scripting environment as require or package was not found.\n\nPlease follow the installation docs to de-sanitize the mission scripting environment\nhttps://dcsfiddle.pages.dev/docs", true) + return + end +end + +package.path = package.path .. ";.\\LuaSocket\\?.lua" +package.cpath = package.cpath .. ";.\\LuaSocket\\?.dll" + +local socket = require("socket") + +local clients = {} +local tcp_server + +local server_config = { cors = "*" } + +local client_id_seq = 1 + +local OK = 200 + +local BAD_REQUEST = 400 + +local INTERNAL_SERVER_ERROR = 500 +local METHOD_NOT_ALLOWED = 405 +local UNAUTHORIZED = 401 + +----------------------------------------------------------------------------------------------------------------------- +--- Gets and returns a client id incrementing the sequence +local function get_client_id() + local id = client_id_seq + client_id_seq = client_id_seq + 1 + return id +end + +local function handle_client_connection(client) + -- Dictionary of Headers that need to match, failure to match fails the read operation and returns the error code + local response = { status = INTERNAL_SERVER_ERROR, headers = { ["Content-Type"] = "application/json"} } + + local request = receive_http(client) + + if (request) then + if (request.method ~= "GET") then + response.status = METHOD_NOT_ALLOWED + elseif not request.authOK then + __info("Request Unauthorized") + response.status = UNAUTHORIZED + else + __info("Handling Request") + local success, res = pcall(base64.decode, string.sub(request.path, 2)) + if (not success) then + __error("Failed to read input due to " .. res) + response.status = BAD_REQUEST + else + local env = request.parameters and request.parameters.env + __info("Processing Command " .. res) + local success, res = pcall(handle_request, res, env) + if (not success) then + __error("Failed to handle request due to \n" .. res) + response.body = net.lua2json({error=tostring(res)}) + response.status = INTERNAL_SERVER_ERROR + else + __info("Handled request") + response.body = net.lua2json({result=res}) + response.status = OK + end + end + end + end + + if (server_config.cors) then + response.headers["Access-Control-Allow-Origin"] = server_config.cors + end + + send_http(client, response) + + __info("Connection Completed") + client:close() +end + + +local function create_server(address, port) + tcp_server = socket.bind(address, port) + tcp_server:settimeout(0) -- Make non blocking + + if not tcp_server then + __error("Could not bind socket.") + end + + local ip, port = tcp_server:getsockname() + + __info("HTTP Server running on " .. ip .. ":" .. port) + + --- Returns function which when called will perform 1 server loop + --- Note this impl only allows 1 request to be handled at a time + return function() + local client = tcp_server:accept() + if (client) then + local success, res = pcall(handle_client_connection, client) + res = res or 'No res' + if (not success) then + __error("Failed to run client handler " .. res) + -- else + -- clients[id].receive_patten = res + end + end + end +end + +------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------------------------------------ +--------------------------------------------------- MAIN --------------------------------------------------------------- + +__info("Checking the DCS environment...") + +local isMission = not DCS +local port = FIDDLE.PORT or 12080 +local bind_ip = FIDDLE.BIND_IP or '127.0.0.1' + +if (isMission) then + __info("Starting fiddle server in the mission scripting environment...") + local loop = create_server(bind_ip, port) + + timer.scheduleFunction(function(arg, time) + local success, err = pcall(loop) + if not success then + __info("loop() error: " .. tostring(err)) + end + return timer.getTime() + .1 + end, nil, timer.getTime() + .1) + + __info("DCS Fiddle server running") + env.info("DCS Fiddle successfully initialized.\n\nHappy Hacking!!", false) + trigger.action.outText("DCS Fiddle successfully initialized.", 5) +elseif (not isMission) then + __info("Starting fiddle server in the Hooks environment...") + + local fiddleFile = lfs.writedir() .. 'Scripts\\Hooks\\dcs-fiddle-server.lua' + + local loop = create_server(bind_ip, port+1) + + local callbacks = {} + + function callbacks.onSimulationStart() + __info("Bootstrapping DCS Fiddle inside the mission using file " .. fiddleFile) + net.dostring_in("mission", string.format([[a_do_script("dofile('%s')")]], fiddleFile:gsub("\\","/"))) + end + + function callbacks.onSimulationFrame() + loop() + end + + DCS.setUserCallbacks(callbacks) + + __info("DCS Fiddle server running") +else + __info("Failed to start DCS fiddle, unknown environment") +end