From 378cb9885961f412e71fce37e94dda86a45ebe6e Mon Sep 17 00:00:00 2001 From: Kizarm Date: Sun, 26 Nov 2023 16:41:25 +0100 Subject: [PATCH] test html --- index.html | 46 +++++++++++++++++++ index.js | 126 ++++++++++++++++++++++++++++++++++++++++++++++++++++ module.wasm | Bin 0 -> 80181 bytes test.txt | 7 +++ 4 files changed, 179 insertions(+) create mode 100644 index.html create mode 100644 index.js create mode 100755 module.wasm create mode 100644 test.txt diff --git a/index.html b/index.html new file mode 100644 index 0000000..237e5bd --- /dev/null +++ b/index.html @@ -0,0 +1,46 @@ + + + + + CALC + + + + +
+
+
+ + + +
+
+
+

Kalkulátor s grafickým výstupem.

+

Když jsem přepisoval z nudy syntax highlighter pro C++ z pythonu do C++, zjistil jsem, že regulární výrazy + jsou kupodivu v tom pythonu efektivnější. V tomto ohledu je STL knihovna asi dost naprd. Ale vzpomněl jsem si + na prastarý pár flex a bison, který umí nejen regulární výrazy, ale jde s tím parsovat dost jednoduše gramatika. + Mělo by to jít i v C++, ale příklady na webu byly dost zamotané a bylo nutné použít STL, kterou jsem pro tento + účel neměl k dispozici. Vyřešilo se to jednoduše - vygenerovaný C-čkový kód se přeloží jako C++, přičemž je + nutné povypínat něktetré warningy. +

+

Je to tedy jednoduchý kalkulátor, jde napsat výraz s normální notací (+-*/^), obsahující čísla (i desetinná), + který to normálně vyhodnotí. Postupně přibyly proměnné (jen písmenkové řetězce), které mohou mít i rozsah ve + kterém se pak výraz zobrazí jako funkce. Komentáře jsou ve složených závorkách. Vložené matematické funkce + jsou sin(), cos(), exp(), log() (přirozené).Na konci výrazu musí být ENTER. +

+

Jsou v tom chyby, celé je to vlasně hloupost, celé by to šlo napsat v javascriptu mnohem jednodušeji, + ale v podstatě to funguje a jde si podle toho udělat představu, jak daná funkce vypadá. Zdrojáky v licenci + MIT přikládám. Pro kompilaci je použit jen clang a jím kompilovaná C-čková knihovna + newlib. +

+
+ + diff --git a/index.js b/index.js new file mode 100644 index 0000000..ead361f --- /dev/null +++ b/index.js @@ -0,0 +1,126 @@ +var gWASM; // globální proměnná + elementy stránky +const Outs = document.getElementById('stdout'); +const Btnt = document.getElementById('buttonTest'); +const Canvas = document.getElementById('canvas'); +// async/await z příkladu na webu +window.onload = async function() { + Btnt.disabled = true; + Outs.value = 'Compiling ...¨\n'; // presets + // Build WebAssembly instance - WebAssembly.instantiateStreaming problem + const memory = new WebAssembly.Memory({ initial: 4 }); + const importObject = { + env: { memory }, // nutné pro práci a pamětí + imports: { // importované funkce do wasm + printout : (ptr, len) => { + // pohled do paměti - ptr je vlastně číslo + const view = new Uint8Array (memory.buffer, ptr, len); + const utf8decoder = new TextDecoder(); + Outs.value += utf8decoder.decode(view); // to String + }, + memoryGrow : (len) => { + console.log ('Growing the memory by ' + len.toString() + '. 64K blocks'); + memory.grow (len); // patrně to jde volat přímo z C/C++ kódu, ale tohle funguje + }, + drawPoints : (px, py, len, pj, jl) => { + const xview = new Float32Array (memory.buffer, px, len); + const yview = new Float32Array (memory.buffer, py, len); + const view = new Uint8Array (memory.buffer, pj, jl); + const utf8decoder = new TextDecoder(); + const obj = JSON.parse (utf8decoder.decode(view)); + // console.log (obj); + if (!obj) obj = '{"name":"nothing"}'; + polyLine (xview, yview, len, obj); + }, + }, + }; + const response = await fetch('./module.wasm'); + const bytes = await response.arrayBuffer(); + const module = await WebAssembly.instantiate(bytes, importObject); + gWASM = { + asm : module.instance.exports, + mem : memory, + }; + gWASM.asm.init(memory.buffer.byteLength); + Btnt.onclick = () => { + Outs.value = ''; + const expression = document.getElementById('input').value; + // console.log(expression); + stringToModule (expression, gWASM.asm.compute); + }; + Outs.value = 'Module compiled - [insert formula and] press button Submit\n'; + Btnt.disabled = false; + // console.log (gWASM); + window.addEventListener('resize', resizeCanvas, false); + resizeCanvas(); + getFile ('test.txt'); + Splash (); +}; +function stringToModule (str, mfunc) { + const utf8EncodeText = new TextEncoder(); + const bytes = utf8EncodeText.encode(str); + // alokovat pamet v modulu je nutne, aby bylo kam kopirovat + const cArrayPointer = gWASM.asm.cAlloc(bytes.length); + if (!cArrayPointer) return; + const cArray = new Uint8Array(gWASM.mem.buffer, cArrayPointer, bytes.length); + cArray.set(bytes); // naplnit dekodovanym stringem + mfunc (cArrayPointer, cArray.length); +} +function resizeCanvas () { + const width = canvas.clientWidth; + const height = canvas.clientHeight; + canvas.width = width; + canvas.height = height; + // console.log (width, height); + gWASM.asm.resizeCanvas (width, height); +} +function drawLine (ctx, line, x, y) { + ctx.beginPath(); + ctx.moveTo(line.b[0], line.b[1]); + ctx.lineTo(line.e[0], line.e[1]); + ctx.lineWidth = line.w; + ctx.strokeStyle = line.color; + if (line.lbl) { + //console.log (line.lbl); + ctx.fillStyle = line.color; + ctx.fillText (line.lbl, line.b[0] + x, line.b[1] - y); + } + ctx.stroke(); +} +function polyLine (ax, ay, len, obj) { + // console.log (ax, ay); + const ctx = canvas.getContext("2d"); + ctx.clearRect(0, 0, canvas.width, canvas.height); + ctx.font = '16px serif'; + ctx.textAlign = 'left'; + if (obj.name === "axes") { + drawLine (ctx, obj.x, 0, 0); + drawLine (ctx, obj.y, 0, 0); + const ndotsx = obj.xdots.length; + for (let n=0; naM-^ny)d(YmPbQm~%!~TzhpKMN#}q@s`V@=<;M~DY`ti|M8*AlS7C2 z8|zPHiJy2$8Teb(H=k?i^3UzH68f17k%WKUk&zldBMlXaYmMpV z%t*7=tko)0v(-5&jw;pont0o`T0LHhiA-0 zCztKpF8|s^7j|Oa$GeidzDa^3)2<{MYx$z~u81#IS(47^zV4LLiJGu{nJQ}ZD{^s> z?C<5#1<|>Q3fFt(Q@8&#=bu_*t>V~QXukV;)gNv6){Tmfz1@K8{*lsK6a5!1?ta-` zJtK~nPUmSkD!Pk#e1<)`*r_*y@H48QIIKn}^G0RdS|r^!=^<*pEFi2nJK!h2utUCL zc^SmCd3fz|98!{9NyQ~#jkhFDsg3SWsTvp4ja%1sW8Jquj^lKxh%&>Nbtp@dJ)%HB zd)EPIrHGyu@gh7?yD0J`K4@*5^C`QMda`Fg+ls2F>`17)EY(ia78w*LpGdgZKb#%mySm&-I)} zZx;7agvVRMBT3y|$%^<*Y(?%}$;l6dY-dIE{}$zJt*2=kXqu|YcF7T-Kk5FNfXfn> z7TsRRm9%~_iAMlxM{@XAlo}^{(mgKDjdY1iz;B+4LyMc^URH5w7Aw7oFX<$FEcLRg zs}##iy}TyGj!2qlECsh9swyt1W@$TaxtfU#65~dogXN?4ThbzS)%|(AmjWZ>K)4)5 zWEY-yByUQcC3v!teq)(#bmYZr?FGp0cfiqepuSk}xrC1v03H(T)hupDtyU1)oBtb4 zsh_2kBxPlA>hJn$-;^Y^rT7NbZUoAVct#+J@mbN|iyq<@A;m?{?|?rc0P^H1HOE;+ zeNT(!TgcesbylJM3r? z;{DKL8McjjPmaM$Pj9Nl@$$_@9eVw)tVWxM5nIcZr&)5r^8fsmwXesn7FrZmPFMy5 z3c@Bp+7fAd86+tV|Cdmj1hD3k*3+V7k1?+>SE8-^DWOXAik=d;O-P>{k0Rox+N<$ralatOV9D1OaIsfz9yU(6%VkrcaOSMpBJ^x~Me>(NEU{oP(s5oG?c z-pi8WV{w-9{aDh=EAU}dERVs5*$6UO=YIqA)m#HTA)-8%UpL~?9!&0P&xSqI;?19o zE(5>t?Ebu29R6hF?C&M>(4=uyG13d#uPMdXq;$=VEaojxnzy@$g{Ztq>5*Phzq&~G z_gvMr`SeLy8zheSUP!@=bWxHXwG=Winyy6$1xqsjRK+`n7a)Ec-eA|V*a8| z^@876{`rsHv~u#Jk!!pw@7!{CfgmNKp5YegZ@5^@DkeT5CKeAC@zeYl|K6Cpd~aWZ z=$IC=1nT>QhK!(@Li%_56_S3xPq%lZtLk#F1x@q>z0rwV-J8`}rCIG=w(px#r+Ys3;qEy+l;SW)#oShOj< zr_mbZ_2?zq1RxpPjDYDQluS2Tbm9DsV(dmo$D>BG)rOnXigTmY+Q=9qIvp8ii-4lM zC7>Bt1Y1425R?b#B#fmd!%uSHzXvEK1kxtO6)vH;!R3yKUAXn|D?zoC2OQ>SO9DB1k_I!1n$3_+YUD8iGKn$^Ptw-SCxcnx zd_fsKPXeSJ-t@>O5|}8Ac=?oyRPvUa?B&zoAIiZ9#nQE|+w0|sjuEjhSY1X9X}O0J zucl{K*FsE?sP;gj;E}wmcN6Pnsyz^=tmS#A1bEDKFYL^^i6K#G6;HgVGYha1r#_e_ zWOFSy<)(T4>`sHHiN$OtL9}-yJJ3cmGUL1L$reu-HR`CO&>y)AEVhOLBZ}lWDmSk%*izXjRENxo);wE|k@0t>NjeeeB>bVN3=S>VV z8kq*oWzk&RNMRKP_k~KUOO(&)qcL^6YkcbA_&LF$iP_IEv<@ak6bg2?lwrSmUpZ`C z#Pq)3nV+}Ll=TB5n50lP-7lDp(yAAUp?1BbS)UDXMpT;Zwq^P3@MeF35!w+10h~dj zzo14v533=OHQ4#((C8&o30>Ffj7p#U$+}+tq_j+}RlH80)mHI(eO6kzVp;tZKfNyF&9{q@-fB!;kp+sCaDvg)TM3v2Ci&89 zBAI6~GegCgNd{etHzr1@;y43d)O!-P7pe;TwufB(Y%GgcxlSPRmdfO71j*^9hU zM9)$E{pkbqo9O#f8_ds5>#i=961n<(Rwsq&Lxn+=7mdYi3@|SE=r{iI?(e*9`Fs~_ z<(O{VLzg@-W123-Zmc*_zRD*SWqE7Zt%xI0FIj^OKQ4$TpWQ+E`+kp3MR77aGd(pq zG2R^;?X+9XMtvkwg+Infr*dt_M6S5L$20Q-RmH#Yn}p9OpFI!gBiGjWeME?6dU~6Z zRK4i_0of~7l>WOeSu_A+cg=QxQO{fZnaqZ!vnh%=Z-pYQP0I+~GPs=p^b?WxtYE&R z4|ApXx0^zo&05#2`VF1Q<{XZvUNP5u@cwQ&FQtph)$O@C`{KX>C53}-@lKBeQXeTA z+??Cez2niNVyN6^=$H{YjA$A~`$#s9$Tf;kNJz%R6Fdw3Jm_ML;!-rmIG7mv6#}yMm0-pifFhIWIlC_;$d}*#S508LtqVV2fH^b7xx5=Z?79 z+wv`U=CikjMvfO(3f$RuWK)tzFtvPrhFLNtH_vpjqz4&g>3+;=%}e6Fu6yx38q}CA zn?#BGCr0xO9ht#m$sWhhg`h6H=A*Zs`L0Xf`=V^FeEdwdg-lI16EZek_Ywe@q#HRHwPpv0ucGhj}{#S8QHqRS;62>F`%{CC# z#Z?w?l&;4SCR@PKlv*%&vN=6k{X$4+H^Xe*nHrQCvb)m*mTebW`QJ9wwhdzoC6i=N zfNDu-0B&;I`$=x=k=0+%PkWZK{wK3-%6^~rp?vGhiuhVEzcqV;=agBuWl(bN$m)@P zQJ-gR({1#oX{J`4l-MQ%r znU3SV;%jSh@pYww&l7R4`%8vhF*pSOa_r<7PmhzCQF|OWij{D!#o{eUv&8b0FAjPoR{8X z5Nf;{v{FKN&u}4SUI`Eyo1K@weUq}E4h^o9Wo*<&6*u$>Cv%*cmdC;0sD&c(2=}!=VIi^~Uwi*sS^NFeZc55(|7`b4 zu>@Ul+Z-(0eVZtUSAjPrDi2%F`e^@7=+xn|Q#SHJ=Vi)>WQGtuc$qUnFi8<3eh5+A zgfu0Vm)BK_$Y1lw>b(BJ+2ceM_|c=sx_!L6lFiygY6D_NnM-z6SBc=ePz%Ed?wYUK zjr!5lO@+^9_?!%%Gyb!^T{18~jM*Opu|aw+H?o#3m3Tc~!dv3?-+C07W>ZZ;t)LJ< z<_k{kc!|sV*Hr{AFL|hn_MBQ#DPYISiiR+F%Xo=FbYjnKN9{LlbdsWaY7&7*UZaTI zOh_<2q!cL^hK-gy!5D{(O5P@QEgLf_La~?4BMh@BX8vC}kC-r*R`!AS33w46*SdFg z#hX_%2<|2WszxLd7+fSbR3dll&}_C|q`@QQ>Z6q?Nz8!PC~sbCvIhTk@r~QygwjY%+(C-lvFe>|IQxjls^jf3t8aDCL1pi@5m>99NSC)AA zHq4S9DuG+?VcIZf^iYY;z}9PMF5c~T>bC}+x<=+O>}gAkng-b-vOG2oP2~FkGkD|s9VOQw zSKpsvN7UuJ`O2RhUae-0;@cm+Yne$UZXBy1pURq=8UQ#NNNNl>wg#HFtk9_XQ`A{L zH3Lp4AmzoHh2mU@G^!75b;q6lf~Is zPwnFDi*OcFf$-V@ny&P)a9aN2RC@t{70pXAI>4B@42!&60ym+U62hCsCvJP+m!fB* za>&Lyvj3iSfjp!!YbchOPUFG2tOFWVsCiY7#$&V+-YtfLMYQqLNr%PgT^!ocWg6o;Ql{lI@@ z$Hg=* zQ3u6I>R7Pg0+3Q2t^qKJyV$B{EUu!t7>0?i^;Ei`&D`B*rqecER*A+U6Td~xnQ^D= zGjf~&?Wi8L2AgL&g^=JFJeDjH36I7giD!^p&_N%D!m}d$VyX>n_{L!?JXj+1+_R|| zCmTkM^|)PJqcY;7kacn>D{B^(l@iUX@CbT~spz`)BAP0nm%o1sw>8;l+V~$RM1-zU z91vMuLEn)9%fL7h+&gI}|IT<5Su>3y>r9Xtf?K98w1|R-L@KP9+h5EbPzO;K)|o~S z6$n*FUzzem)JgUWSPk?__zt-v6I3j zx|hs5-Ua^k(xMIq+%O_vMjKW`=2ywAHTA7kj492kA`PNJ8KF8Cc08(cloL#FW+ruF zwI{+PlJiAVR=IQgTz8+MDCkKat7M)cBZP|4T8L4j&=}`Cj-Cx-gcPb&QqqF_EE*sy zmT@{@5U~~7JbI=}Dh^Rk%M8k3)Pt)aCPacsWh{V5*bMrsI(m)3Mu0QK)S)!Q0jCWx zXA;rqO91VQQ!x48c1NuLn(nyM7eOtUEM8EJ1+0Gqfoe70pbhh4YeG`e)U7YEVMPye$3p^pI%CXyc(>0=Wrt zOC$m+@xi(WT96Pr;(I?@+;~Xr+Q56i7mH~{x}!837ziL6>iA)MMmD5QePb%{!}v+o z)PC_5rW>Msv-o)b>0DF*3E9j-WIxxWbb`6X5_zD}emclpVy`&WcQ5q#nw!Y-S0M}O zVqm=Cp_VARf>Hb{FrEfbW+zyt1Wti|-|cNhcd3InXTjR}`D!f0`w8E+xrw_UJ~h>5G2L2AR8uE}PZar2^-qo3yk727RpL){q^2TfBX|$KSig zd)@aKs*v`YPcGu_d+inS)hc#L0o^s8k1iSsGJSpfcs@yJjwU&y#cQvZ&^L;kt{3Od zlg-flh3mj`5xe>Q88nkgl@X!!=hu;Ge|Dzcm|54K>IO!z(Q@>{&X@&?WoKG{9rL5- zLA7b-pva3yGO!v}G4MX!`P{3S3LsP#Q&oawE zzZv%VG!_^7YTjXcLV?Le4E`S0NZ#OG19dvdpg4`8q2M9@>xr(LateTqy7}&}m4GOC z*_}R|+;yi1;GtJN03o@TehXD}T_aRc=9vbR^?4XaL!PFzHk@UF+8#q1pMTw8fNM!? zk*KxRwx&HA#DYy=g29N`z1K1e5g@zKshK{wn@^KzTGj~0SG0|3JKT`R&bhQxqjyxR z;4D7ixJx=Xt2_)4J^LA>-Y|`W!oV_B<$g*jRWzyZ3P;B$0YqlP&M0BJ zRJHR`wdbIrykeOzrVhedT7Y$v6a*;BX%erhkFJee)L}I3tKXAr(M_c)uA3$nM6|X~ zURheAWofdqHS062$^Am_=bzh=r^HZqrocMWP4A^!Oz1KyLF3|pneBc+7|rH@#b6&O z*GZHepu0JB;@2vGI<j>LG`g!Mlq^b-yI{q-_Iv=Qv~OG%b4P9|#iL(fheDn)S@k7-vChZEfr(RP~%p zoh>01F5H;D#bbi?fjjf9L6oCCFSpgtQnGg&9yHDj-fTe;l;4hO0fHv(My!ZkVeAqK zN0XRoexO_TMIHG>!nYG^Ya=(kfKe{gaD2Bb+djT~wf}r#_m%Vc-0j&G^>^T6p9dlJrtPCyFaAga7sl8}{dZ zg*lWN8F()tG~T}t(DS+5eTRpMs@|S+3h7y{)~Zt3OEVW|j9b7`MJ7?uqdb;~cCT4RB z=X~+q=S0!*-7h0mmT#HGe`JrQGG)i;8w#~Y$)0A7SL3-LJ{vk+O$U^~cy z*!V1p<+0)x+at|c)`EC#%z~pQqN^o~LVr^;e+Nq;B zI&8t{kBNx*(6^GvOK60338e%@vi=pr)~_HGu>?HjjJST_C6I=(bd#JKejgbwjYgYc zRPlO37o!g!Qe{5Gae%f5!7N7KAP=UCM=hDHI;L}~l}V~5rl*o%kk3dUZ}&ztsB_XD zP0iP+N)sn>pZ|69XeLn9pkU37%C+-Eb5){MnOSk~|my@*wZq%B$`^n4f!OQW<=O!aaX93j;G++e25x;%?{cpK*jjzo=ISg6bhUH4LZ z4sKVT6{E;lFPAm=&E-YMQ)F+L%Hi*b-052FJw2>f0GEu%c};tHoda^;L&{XcHTS#u zeFW!dH-(~|Lmdqs+#)5I3nT}yq^&v4x3F&hFO4~x=Ivtaumt%hpN;Rg`ynL-lLOTw zXSC8TQ#4fdfUGc30A0cBX?qX)`ALXqe5&l9v|yB_z@WNJagXcRx}!O_U3xS;MfBW^c|LYy?LXpAZn%dBdutHi0!U?gJ{pqsMQ+&Q$Ri%v-wxhmZiWc@)F0 zqe5fLmdsI?$v(cSsUop~!igZQePOm}Op0}h?SPGs3kff#@jfLaYVxDl3b}*;2Nv=U z??||0SW1zKYg`-7^-PNIosd3R@qnQL$=ip95n@pMe66W@OT+${AvrX4*%XZ^U~3KT zutq5aE}C-k$;9=3W$b8m(wNSu<^h^4*yb1+GP}hOvu;wbrpZVoiHmI8?1jtB!opINlafaLL<*<0~Fyn z#jiA3qaN6wgOoYi-{lb5MuvzD=M{MF+yyJ zp-M?lP0-df7M#uAcX%u{VzLWb-tfq!Js0zb`V}3QDtBrlN7QQ4rS4~?s9Qg5JKuw( zheczu=CR*uZ`+7*oJMS#C!n5~Ywef)U`(m7+ukka6(15q^b4AH3Iwr1`Kp{P(rupM zDdN(#VS0`ah5pzeB{5jue7kMRcH5ljn`6;l2&a9pJnnmX+~zsmkz8JgQFbMl!*l`e zlzN$B-7f$|Y<6z5?`P4)ugXw&mBRG`gh^{P23Zt*kml(qDV1Csz=?A(vc?6o;poB3 zF!L?FN>TUE1%u&V_4rzRr4f~SH5@||EhVU_^=~r-BW``)Lo{Zak&Bu}P}ia9}-s{ zTW?!S_rgA{a~|r9h@Z3Am)M6_yBL1*JcCjgK3O6uIY|c^gi{E_Otu-AF2(*Zf~_tY z)KDH*QGloJADY;mOZUCHjs5P-j5H$T6%(u^;;$3GLx7LE>Q&#P){iHg9&%{2vMK>` z`2VuJI-l2kX}#dvP$kCFm4zt$ytJ>YPwZwtJp5O4$q`q%Q<5Wy0vxS3rfIyCvcWyb zJm?S*nOoBwI_@&(;hP$8t4aY!FSzv096;SAC_!&-(NNp825V>CM_m!AQ ze~d$_-2&DA4A^fHsJ?^9Ka3t#c74XWS1lAgLz~y@y?eWNk;1w|)q8fO)b7k{8)~V& zgZ=CMT1L=OZlw4jxo%20&e%g0WRU`>o|oe7aaB?2&hBTdeoybJ(L~jtvb@|DZ-j5miladk;Wowu4bs&@jmDSGOG^{BC@n4Z?3HzK%gu+p zA}6)WYmWQ4Dk%k6DqL*V{ffY)svAs244OiPNeQEZnJ6>%s9^$*J+ruK>(4O&bhb~) zNsJ)FoD|=NZP2GOUZRp~V8%RhNw08(u$$Y`t z4b>vOI%csF8HBQvLYRpc*-*k2 zdBPmkSSNJv#9DYbx#W_0KT>_OTG81T)kE=igAY{aBp5I ze)IEhy}81S11LCMMJ{ShocUcDYMf$AFP^7E@;AHq?tSy1yjt4h_z0?G{@QupdfhKj_V z1GM9JgIC+5QzPH~{clz8kiop7)jJMEx19flb8lEFv0_R}{LUb0#w;*!w8`4huhR;K zQ$OE|r5j&G3lF?@=gTji{st~kHC~)38(Y~-E$Nh*z;0Nn>AiV%;o$i{e$Lm<`^qy` zIS)mO3XTiiutUY1E03^q$|H0!z}-O zYVOaQkA|wRiPdXp6PM$_@Uj8VFEnNw;ujl)3K)I^e=o`ISm<-lgJg@KGk9(N<&X*< zoH*sld!MaJ1fEY6^(vNwMM`u;-G3O?NXa@$I8rJq^jG&A%Ex>#Pl|*pR6l)9*i;*9 zsu*jzn?Ln_g>Xp!B~#sRs{HNL$Z+0&?=$Ny=>n4k{_3C9)gtmhl)d_A z=Rzp7Ngx|0ij+WnUtTe_RxQ;U z`r__<1fMv{^zO`01{2Go^*Gaf7GAJMcmX?gi|Aq|bEf<*(iErWpOwZ5Qk-PuziV4V zX!+z)9|T`=`B2Z*QHxRyo+ki|C^!wp+IL)2ySG)O=X`CZ{c5bg$wg%Emfs*fT*xyu zQoOHD)MVa1n0H(o(bX9SiR&=QSY#?{3&G^-q?Wr@{H*03Ifx&0WWTHV-1xqP3XM`5Mps}t)J1KI((Sv>IY)%dV(wZ0}A zZr)%?%F;?YadaiO=gV#U%SW-F7XI`mHQ8yhGV&3l zXSxqB{3os}ZoHl(@HKUSbKu~5=C4S}o8L1^Kke~bfBj@d*~EShBKq#ZT}BDqEQ}8| znG_?%ijIhqNr6YGX@gsOUw?GV$Ek9;pJVJuK2f4@w;OZgD|hCTz&_kLp(mdTx$1jX zSiwnGSQMVH4#o!ngH4e8Xnq1;>hiL)vGQm>y?TTk#|^)`dv)REpZlGkz3g?rCxaj^w*R-w_y4{gpZml&zwpIIf`zqTdG+Uh z{p!!@ZTds{`EwpO5M!0ID#q2qDE%o3Qa`rhrhsB49~~x~I(5A9-@m#W;K0k_5-;ka zo4|DVpXt*+Z|T(Z5AnaBI{uVret307Ev~rgz3VH33tabz8;2L*1XnTBK>RT-W+3+M zh>KSpkzSw$KvHVCFQ2(PtMv&`J{(0hIVMfI))u1NjOld~=$k8O5fc`q``bUkVQMx6 zjQ5Si)xi_OE!!>d?Ju0a0u-Z1YytupgM5Q0uc~P1qy~^;`K=!<4QJkc`8U3ef3Ixs zC4YDFH&1)jFUPA3{U={KwO0HxG_CYg2T!JSU~mPGN_W^`W$MLb8Z(K$X^5ISNElJ? zprWlcxaxzpyhLPb!FIm%~SYAoFIoc*kIfxQ@#6-$X^&myu8o!#XW=m5(YlOb?m2Om<)!6 zFgsH%xWop7A!j5&f^37Ox?6s}A!~A-6KA+M5qm?GT`7~6nL90bi2&GBjOESRTf;J5 zSAyM?$*{StIiEwdQK5b|RQe-yYdAX=`MT=7g`Rqh$Ryd=;ggu=r9dwELsLsSl@tFG zW%vv5U4I84z{3@TL1_)N583=KrAwtoiXt6Fu^z(s6f^`IpYOMl5wTd>#p(E3GQ;Z*QH3lhF|+)yv{^57xIl@MlFV&|(9*XtDJ|(m4=7 zehIRLV0>*zD?Z3eUcD`Bp{enXuP^Bp`Z(HuJFg`Mz$CA2Pig%qhtX15tX}E8+D=de zak9rCu#HqbU|_hUTYAblXBIrUSPKkzg|v}Lpk{XZsNO8LUP86z*VcQuLUplVk*8La zC$WyDg`&*r9EYaxQ3AX5Ql|bauR$*WgLQCG6>;kloZW?^Fe{zuBGt%yo+UIuPt95F z2)V79pH%)dm+n`5x2t8$!nM>%FF;PK^^=;;BzqDH?ns`KCqkHV6q$F<<}~;mc}0S; zMTfQUmdmH@*F$g_m}AD~Prz1y2c2Gu+h(d)R^oAm>#Q!6neRNoy_>XMqNB80e;v~y zs%G80;$kg}nxR2|K!%zcL9wKJU2+wxI8@#}h#KWja#fF{?tUltNNO?cmH?e9TDsFl zXV?e70Hc%igr@8qO>8~J=@*uGV}F1vNm{4qFYi{gvK!l8NgcS4D`!YofWE8>`eVPooRL{GteTXojWgadi}pDj z3jM(6`nriOo&%ZC-icHIW@U+d+kg5Zg6M!M|B{|DUH1PFGh%>JE#R`Dfm0Z#i zk9w6KLJ?Gb;-h-Cu|FIdy@6e-US^O?z!ba4hnR9=Sx^q*c{Pi;@;_9U)1bPJ8`RE~ zV|nbxO58@ri0w>nB#hll@^n6j+At3ZJR_~$99Nt^YDkQc=&~}30jooy!Xx5R^g|j@R0y8;4*825behqYm9)&PMlfP@F=U>>%>c3kR_q$q?a zAI&NNro#q-rNd&tQ(~BfMgeX=xal`X0>r$^GzK9mdM_Xa8O(ez>jV@7BH$ze8pamm z54KQfw~vKG`9Ora1flEdtv^lTCb|>aQnU&K1sz&Pl}Mk3HA)ncV!+T!`$-rqm^(&= z5Y93JCCeEeo#J$9qC_ZR4B$)f4M3{4b}mhcT?>oQwy3Y-Ud|H>K7j#DrKgauMup-A z@Ldz}#8YA#`pU}&%z`sQLoanCg(E^GV_?WQPdrP@q6tNFZD3LWSZV{BeQO;=-;+30 znY_JfOwABj!lVT`&_Wi<2xbFwBCE7P{4kO^()!0Fu9E1=o1sCrefbK9~l|RHu^Sqw#$e=-$#>q~dT4d0q9I35>4CrR(h_mrNmAOI_QUKtO zkrt#%jO(H_bx4Rs4Xx$#T}D8riVYLy;kCGP(Xw#@osCTby}*4@#`#a6()2I!tyK3lVB^v`nuJ{i#SKT zKU6st|44#!=|TB9d`1kT;)k#b_xn0nZ+w@Qm6M~bzm4H9-a0_1XK0BaPq{EFMb65i z58cWm*8L+7VbPR>6O1pKew0@Rq!4ce3jKj~><~Z&90aK~K6s9b>E8Z*sBzX%pxpWr z){xhCQE>oPp{A-gjATDbn-n`~Ew3H4!`A_$Y*0t!>)igYf4gS`%)E7gj;WKjlh+GLRpma@p5j=%IqzA#C1 zk}7JGRHkaS8yFhm=L zHW@K(+!s8bd!%rLnV{g2k7SP(88p|CIkV-v<8%~O%I0MagAb)t_c=Yc3&Dmi8B z@T`*|A%^6RuPi*m=^NoK|a(F^SAp5Q`!e7tjL#!nv7xThHnC`nU1;&CoQ8 zTF>=U$@2J~WRI^VD1K=N%9l4n_*5?H@WaA}R7}Y(4Rt@Pn!_PTKVa2UMG4;~ko=^F zcQdV?&AtrQiX!k~|oA9<4&6PL9w0U-M_v4l(Wcq9=t8;+c7?pDz)g3WkI_VP-tihRyVwcJuBM--oU2g&sjclFOh)yn<`*j+9CP@ zCV!2NN+_?Z(PR}!G(ccwOi@*sck;nYLBX_BFzw)jzASgoCE&vnWJ1X_@%I!Ydn`2W zgP=Je5r(m=J*4;;RgyiyhTy#v0Ni9J>B7#@;9Po>Fb{-yO1W0PNu7+72({Uo$B1*7@)G9~pCR1SO-0%qlZ(51lf8JG z4vGv%_K3Q;Ag1{EN6pscL5NjA)`(@4Mqz9fQAvP56ulFR%C_6XV$rfFAae5{OWkRb zCuJxg7}TSM0s`BPWDsOohKAB$8Dh!c&otL}rS%HhQHiHYIE=N<=2*)rV7*a2+m)Qp zoPsuUVs(8^ghY-9I)AhbSAS zzgkq~{SNM_syVB%j}qp}80`S6rg?=@?r$@s}I6)SUQ9|cCEVwu9cZLo#Zx`unn z))_rggfMot$R_0$a6Fcf?4>3WP;zWO)SZl;>A6RUh>K5$Zq zH^D22s~Ztg;wDLe#d)P}6HB^*S_;JNQ_Bb9QVL{v^uZ%=pMciLYR1-7UdLW~_Q9V;)o*n6H-V^M52Y zKLt~`UVI3CjRVUOPnXzQqlLjqEYV(u@oEkyQnVvXcPGL!n<;S@L$(jo#P zl-OT0dI78A6`Sv6X>pmK0in}0^^*|efnM<%4-@x*tPa-iFj`JK$ox6(-J91IqRZd* z0>$*M5+}QB=hw&o?tzy)V--uB)jS`!=L00tYi-$^wnQmyRQ3^x3!`6r;`C2^{Byfm z!WD|k@Wd4O%N|8hSh=*BMpWcQHk5V+9={FiVr!whL@46<5aC)kCW#^x6`e?Ej%rW( zPUK4QGdh`zca`D+3(bj16iI3x`Ib- z#;ujl$^lokRnI)J+L-(vQH|90zPin>H!n_`OXT^R>v{*7L!=55deDYK+t=Jg0j@bo zIk{t~H5M8`0ZR=QpjnM$qZt`T0P}E0E5)h-=EMd_KL-W&G7#=nw zXeGG-mW8zpMJc{X;$K+?S3c+TU2zETs&W2l(DJ#xL+3Q@G;P&BC3i{{yz648T50(n)?uCnKN zC&w$giND36y?IoeDVGI8vY3HezmTLO1rmSJMT8zFA<>7ozR9DSizy?U8Tj^nn@(I} zDzAJR8kC~t^r$$)r{F;vq~OL9VO8#D1`Oc%2RzgVu#6n{^ ziM~doTKS0k0zijpRrIr2O@pu222}F>q6NGpoA!Y`IQA`yRp>zz)O>TLv(7V2Eg&6u zXoP-$!8)NL)q`4(weO5CjFwtGHBzJnd{cw!&<(eCe~dG}N!RlYV~gjT+A!bft?^B| zfp3&xe3KT#e3K6G4SFN+O#lYosfNDElu=B6kfJJt3+%&NF%ND=$;F|)98u+J78xu? zsmV$q1(Q-X{zg-3EZt*Y;Z_8eGHyhUzE(@`NjbF7JGdG=6M7!H*3`BZSC#d_r>O#fVxgZl_+}Df zUMrK3pfl{FttGntPQN~n79@(1(Ih1!^H?&n{QTZ*Dj78?xwj3Mo0J$vysFtCcAID_ zbKIY*qpH$%#H-6FZ?GB)9@IfPrJ!ol|6ovKi%d^rPBW7v|Cr&>KZ{v`V%)D0-3MVH zI!iVlv0C8=y9C)zj`ZPmDfQ!)f_*M{ke z{G7BgPcB>BsmMmx;J&D4^VIi5-gT=r=scBSh4f<1@64NO-k=`9Pi>H65%!0;^Gr9i ztaJT7X1Z#sF(2R`LWq%kOhX79$0%k>-Lp2AzC^`-#kHZpOE!IW3-?Jz~(+iA)CoFT>#zoO(O{@x2{XEZ{RO8MY*0O*o0>qr9Uvpuqf3( z6_=uArLYQ0DKaxec2VnN726ytLYKdOW}DcV+E&|gSMx$3kX>xtsGY8QI$s_PrlLIV z(28_TZW?(YfEBqVJHxHB1q8CZ0Q&}oXC=3x>=2966@rnc@bD#hNu^DxOIB2+*ly~x zm?2dq!BnI=sI4oPsF@@3b1-y}1dJ7H)LX*dAukIb%W#ppX%Tgi3M{R)lhp&m^wVnU z&jrz-)v-_H5G5hH}w z6OjrOme@ekNa73=NwM8dyLCim+_=2_T6v;mXb8b#J7Gd9(!+rPxb`)h?NfV+dme{s zG{1!K@PZPds^jdw*ORJ`McilrsA2QBZ|rQDk+ux8uFGbHuL&+t%txx-fDU>T(F@O+pi62i(Z0tcQpsSQ8Qdu2P6Ra`~tQ2!+fG~tngEC)n{ zflsgz6oqp2h(Q@>EJVt^Ibd9RR>S~fL%&!SXk~4v4V-~+h2hLAYcLqBJ|WWvV|rv6 z{16)+gEP6W|ID$0olng;Sv_5tiV6ltpL^c%Au4#X&@j!jei^JpSOxt)FbFA>`euz^ z&;>NV-ZY9%wGy@KAF#`r4wr8q3@hT;ikepWHqBP#R3MvU3|@O%F*RFp=&jj`%%S`o zV<^FF#i+Cul|Y9Ea|~F_Y(>eqevw4mI%pWQITv^;O)AYUQf1E?7>SMRs_FPg^jZY5vWmHBPq+E`Mh+ zwVAr1sGsT zhd@;P7q!8Koz%kJ(R$p$qb+6aO3vW%uz%~QfW&RBn_>lhM#XWCK1e`1Bb8c_B`M<- zdyx;KnCvwIjy_8eX+j!_u`0|=tQMp8g>V?@a?Cmx2Ylm@lFDXGP^e0^_yQWn$1PDS zU9xd4ZPnr!&r55I&<#{CfRoIfyzIO=U?aJIwf3hr=E!mwMFFMV-%*EJXNk#D?~ipj%kv{#!#5rV+Pd>(C$p!WZ#E=&}c%VhtoOl=1m zPH&$HaKpc@Hu{oi=gxSi{U~0by0ca{uFuBKos;_9Ik$7?HhZu?quufG z@m6=|&i2lUshQ5s*_~Tnr9Yv0^PLZjS5xDLT9v!oz#@eyCzb*1k~l@#SdK6;l@O1TyQb&alt*} zT!}DV=%NXBmLwd+(aK}~J4C=?)dVos530_eh(6hN(D{RxAE z$uBnrYukag9N^jLS5hzQ;8M3KM56qvgRpdnmPZAL+6{f%s^++tCNPeVse4*PG@;}s zEn@D8{Bt#}fMgL@hkp>RN~M|}sJUXK=e=M^5X)r5qGUP? z-F5sn7C2LZC01|EACRiVz6Q9`wwITHu)Y6IluU86{(|X`Y5UY10Il7ymje#9Rmyel z<4^=xJ;2U|*jD6Cn-}3E(a3dfcO8|}0iayN$*IU&i?k3a-9Aom{Ze$%e8I`Vh1h4Z z_zS+easHW$VU{;vj4ndNXz>o#kSoPq_V=CWhOe4R)S0<3{N8*XuvA|96W#Mp?TRFd zeoiah?3yF(OG@*y*+0=W;y`gu*M-3)L%Na$yi)v*u&I*a5AtY7#~mcVx>P1aZ0#fQ zrE1TObMtrHf_<%N;2nQ{N0I$fK1$-@Y+`dX_ysZ#c*jnxgr3$D1{P^k@sw*nJ+|E) z{tIfgWFuV`?3uav6zoXZ;%g7XmhggNS5ep!5l*ce@FW^khXhxOdrrhpk2u8-jmlLF z5**Lk#Szgr8{@JgB*JsD)`;y1x7d&%Spk1mD>@iAwWV?ss~Zn70TYfxvBurRyq%xs z=0d;;r}6(CwUb@?A=UMFp@)CSYxVFS_&gPPeoR!e579#%+Q`G}PB#P6g;c?WV?p%Rgv}@D2bm)YI$?}ASk!%vy zlICC&=Gpu5S)DAysnuK#!@JZR*E+HfZ7qQnI3sRW+&sctF`k=5i9s@=GcN7m5X|PN zaE=;s1VnFNg)AQAW}vh8DR&Kp&V2-vDF0a^#79up>xzt#V{C5^vGKXJ>4|(b+|2Ja zq|W)zlDInWnhH3|n}Cl#jGCta+_`dt83l(2i2<8Qiq7tlkF|Ray(S!EZjpoZ#989o zn!dJ>{4%&9hf|leol7BS;fwf8R5Mo zAD@3(^z*V{?CM4?2)M(n7t;%nWPF~{Pj>|rHO}^|>V{bAkd~V4!RDl0op1A)r3;(^ z2%ADTX*MI@IK#|k*><-LzTd8KtzUSXbs7h7Hcp*2?mpMJ!ExguOKpID8>La9C?_+o z4XwW*pvSF}x5n%)8TUgTK}J~X9CXPgMDrZwDk#lLT+By-OO*2ZZwB0;of+3Bq%635 zNUKsanDpHL!%Z=EM((T*ge7Ff&1jwwQ9w49gBjcmIhZKU;%L>SPIk(oz5u3>hx}V^ z5g!+tP{RFaA_WhM8q!&bH3SoeW;?l=bK`D{a3Dk1#!eWsNU2AhAh_M6nSru=ysukb zIc%YH8*NG;Lm*{~N;3?rFyjOr^s1ZIHTWx;bEwAwjQ`vpR5{DW?Tcml5hp2?n(WQD zbIR|0wvFCT6*n^=ZJ{gEZkyKggc`G&y2bqx4_U~yVqEy--W8e6!Ct1lb@sAEx^FLY z_~#?Dm+4zgx0V?eu*ey``YkYmt!u##P_oD=^9buV!7(IAOthFtO15qQcyBxRvCesY6?^MrAylO0(ntyU+~w-N25Iu4_^;eRdpwr0nu| zuwyW)xZOq^>1I8v%nk90o86pG#P$-z2bp~04@W^D9a4rS#zO|QY`>EIixVZ6JS_V^ z8d!Cy8x+)o9#ZYp(;u2~x*7_N2nL~sRki^qdq%u0Eb z+RGDBw=Clk;c~GJ+MdJU8H(t?VURhijWgeM%9$y~S=nv^>yBd_{>db>Nv7{(ZDSuh z#wimTA2GT)1z58lGaULv8}~yF6G*X6$)+2IoQYu>pYSrSrBrWdKUm|~VdENdy#0Ya zJJf<3U(b;PEkYR^avr{ZMt7olRVn7)Ft@iJQQcixA`izLSUCL7aBQLN)iX2?Cr-Q0*|gqwY13L zJ={y*pg5#n;h9}l$&0+WLf8F+Hd!jezP=P?@-~ zOXetbXsO}g6fN66h?3MOL>DymB9o1)|EsHL;c&nir;Ir=j?m23?b3oeC6k?i3X5q7 z5dpblM_SzGoWlYrtA2=&2Bcg^NZm~HV456gq+@J7p;SLUQsPvb{?X0D2EYvX>fzPA z2CavfhsmqBNry|EZPsU-`1feK|{&r>uNAThe0%(8s!meNL6aF%;OS zz}72!1iY?>2Nu-D2{Dd-9}QD**b=>B)025aNecUXSYcL=*lDH@+W?|XDAy4bZmX}V zqM{W!wWSZG@-hasGZuBfN#B>%NgF3kA7#e8*T zl#sB2--FO443t2&1bCb+yLj|V&nbu;d_e@4*vf4P*tt6npjP_6z((dJx4yY1^-u>vj)CG%T{XqTwd#8Wa2Q1P=HtfgE@AQ?N%Vr z!P%0koe0KT6-ra8R8Sr~$+ms|P^nz1zDi$LnG4vZ>nuH0TcQLXB>XO&*~n7yeIP0=*D*ubeuUMJxD>B}8_}|S zc>_<=5vEHluylhRA0_6q@SU8ki7*Rj({(#_0^8^$Yf$X>!-L!A4OKQ(m|zZokzwl(uWhwFb}zK!6(n6xM|tv>jxWK5uC7#$Kk( zh!8naobl|SeK;jY%#px0@SjCgQj!)r?SdE`X_d34qG3q2^#Ksb3e;LLIx&g{u> zW*GLlH{i_j7|!g;aOQLOab^h{NfroGmmNt4!m9j6UrpHkK}e!rkW9|WLydtR>-a;k z&;S4W&r(NS5<83oduJ0RHeu=L4wFlCf@CT2(XS{3$y}*j29lEwB!~TzrdBnYKdAJ; z0;y*KFGi3JX|gy2BOIKd@K59jPLRn-1167JBZ2kxF~|)kpg)xxP9Ok7VxvraFtRWj zqG7x^@)V?pCp8kJn*q~v0%J`WIuQ)(pTvlOSqp>TC_E-Rk*%*8?WmghAS=T99c+cdEG`974$e8SEQ6eO zI81<0HX5s{2ia*-EO+;^H`Z^-ZhhvQM->|f?QI${6iO-hf#O&cI>gLIFz^wPTdRR# zv)~ezC|qv+J0>(SMfq10&-OQ(K6IGCeJ`Hvd+}`Fi)ULVUJawN96A0q#jB0zB zc(%J9_jtCu%6PWB;*IfacYQCO?R)WTxQ7&N^SyYse+BVu(o&B(o-Gu9sCYJI`CdF* z{Fvg|yiIBA+Zfc3cRbtiRV-RfFup7CZ2i7H)H=$#Rg^~;WajICT;kb=n))urvkkTK z;PGrH{&%6-sqt)&u4|8WS?}> z4|aJhkv3@4p-6(^c(y>q$2FdK!wG=tMP2UrAHCZ_UPtek4?w^bH%fT z&OM5FHeUj?KZDkw%19kUYWS980ZcXF54sB8NkWLJ-wn4NVz{CQlPV*z_AjYjwg+v~>_yv=)_%)Q+`o>IAljIo4W7SA>(P8xL_ZwS_4W zcd_}Q*IHxM(b%G{0uKA3Pj;8Ht#qzC)4D-~nKE+aCwXty$qd9bI&%!h#&yip{aL#Ja0)rF?B5D+4B6a~YDM6R)4fJAC{k6(}Hs=Su%?{Al! zV~gUg;VZ23)=}8ZvSk*WNhieA#sVD6<1hT__y@%|REjr$QaOs>m$#z$nEpDB8|T(n z*Sedla5>Oiqy@vMV*YTlU*oJu=P@fli0;J;QTWk5E!O{4o9)u-mo2^?Hf>3zi(VtD zYecvAy+`=Ung(C1e_XT2mYrMNpf{2yenxJ(K}Q)E+lH*4MKmW-aEL@AGFoFyZGvLO3@jfx-JVis~_m!XnM;Hhp0QwLKH;f z-i2@fczOQy=+V&GlSfw;u6Wj~ue|&9pXLVT_kHa0H|}`D|Gk?lio3Uk9LI|*C0yNi z5O6~DpP;^;8@i~NXmkXi+eh1#cpmEazH~1qyc9EpVZnCe;Ao;q_ZNqM3H0bz=_~yq z5=_+CWvyVrNrhormm$j1we)*Yow7w>)|qu2eZqMd4VPqF z1mRM~d(}}dYL{3*Bh0#hnkC#V1&s>4utQO#NU4C`dJDYeI8Hl<6J{eJTu_E+_2J$4 z#5VrXXVc;MTF&|Qi4Z^=iutG<%<8Cb9i}n1cR&??iZ(CJeZ(-qc$dusH6n5T(QB9f z495sGE1)I{`;%apPj@S&x~Lg-`6h(sL)Y(w>X5 zBZ0%u*h6PP6P&xvZOyg|L$mC~pU5~mhVZ3(S3|~ad%`W@$jb3UhmL0RG{|m!_+&dz zWph)<5HmObGC{J<&a$Ys8)ByI)HZ)RVi)t>Z5O3(Ddi`7f`PBy;@bs@E`sC`Nqf18 z%<4qGAhS{uAXY~s$VXVc_lOQ~QrN9va!+vctNDEB!SUTI1{M?}SWLlnCD2@PKYzr~ zR1x2v6~O{fo-Hp4l%sm$Q8m19hE$^ME4~I^7_4P2hDrt1_S~`HFdI49t?aza(5-@;X2a79vF39FB z+!vCl3VY@!&|X$t5gamIR`W_aXS0ozIm^-^V`@3SR==#i^R)ae!bobJr$H*{_O z9j4MZqZIj})#?#5-XKFF>WlY*lk4>46>UZ4>30!9EI0XV`3_|Myd!1zQ)j1NsSL`y~z39fUPu(CR0?nxz zG@ox@gXJkml{z6v}o49E- zKObDsHl;Be=xsy@A29f|{u3*gERvBpI#otMp~eOB`(r0~*n-emUqGEsNoe|g3R1J% zQMB(va-)1Zm%hATPe9j{ls3KHgR!HF+Ism|uzJQ^(;Fv1U0uwpWKFWBHxc1CUmY*Z zYG}Hd@`XmxnV}wXhMtaPQI}BnZZhP9p3|;#q4tuWw7^d6(;j83-LDA*R7{>och=ojsgaHFc}*wPVRi9UjJ4g&CNgj5q8r0SUeC4* z(vDHN4ljjqU3+}sX#Md7#JKb`kgb#lc>!k}F1A&2J&Q#d-;^P_Sv%b`02Ic@4EJ3$ zv%~glNc(kvT^-RS*owYyLIuMEF}A>Cdzt8#EPHZz4(|jG?^r0Q$bYu6T0mIqg6Kzb zbtH9jx>zJB&eN`qHu-)Ktt|Xs#(_98Vr3JQr`rfYo z(?QwgAUw5a_2nos49N|!0jW4gh%z%#a~(FdU2FD|+SL9fR~4PiqiGSj@~H zxU{S0C*m}c*Is43$<0!JCMH(n;9XAWGJBDEur~VnySW8!?(e#G$yKQOye(&y-IbkO z)eA|BF5K0vS+%Y;X17y|En}9O*{Qv?9YB;mfLc;{+SGl|G^weuvhj2VQl?^;s$TiwP2jTlh>M)?L z=f=}?Ry0rUTUJ$qdP};!;fKATORfnhw zrK0=aya8?fXGZDgnn;JVB8Uh_e8wEapfvSW4)vGn#;SUz@r@tK1vN*heKA73jY7uHn)~E)VM;3)NC~{@`O- z4fqJ?NIFmkajVBp#{mmeN*17vn5yNZs`Uzp*!_D|XS-y1OKXEyLId=di!3VMV2-xb zyV5A#*E{TMjbS&0XvjM&?xF1e8}-g&WbrpA7#{GA1!ry51kcV0XR~<)o=*-+3OI7j z5N1Nnr5NnY)1WQ&iVK20zmNv4fW~I@jJqcUz5&UMOT?xb-NI}n-eafNvnRtM-6S#o`)~Mo+dhdeeI(OXiyo`Q7OubUCm$S3Z9-k7A zK0W^V@OIm-UCyM0#uZyanC_G>#$0At?0!nE+(;WUQlS zyb6haXLdMZymD4_YaQpXv2r}@Di&j$sF%Y+(%LD;g6Lt3d4jJ-rg|W$_P>kl@Lv(P z?n#nlDLoV}N7pbw*=WOzGkS+@zX~%>L!`MTx$?~N{QMh!=EFQ5p8oijmH1nF zd)*5^GIP~Oe)K4h&v~(aetGxGs-2*n6z~1gCmyhK_*p(!1z+*%5myO796!3c(uZed ztn?e4*d1PedbbC0$?kkVYG3Z+RDTZV8LC7#|M9h7{gEU7#=TD^TsNm}-PU!x#jw0| zj@y{VB*%$7)?v@CEm1Hs;K{Z747s?of5{)W6lQ>4y!)Gn(06{dCDc`1CVMSZgrsvT zA!gay7!HMnI}Sv*od1P$Z*bB7*?(Tu%F@D1{_f;&p7yF=j_sR^=sVO*{Y;8$aMq4; z#U0@4rrFM8EnCP4yen`{71ax2Qj_^K^ZCr!*C)aQJ*W z574b&oU7`J$aJZ4Xrk0$_j9jKGNi&lb85=~s#U0DQ26#oMKsW@8|hMc0(DU#YDq^~ z(Ft zH*#d~_Pmsd8r9ndcCq~BA$PQJ?KSC>->~J*53MiRe_NJBiL0D}u=}Avc*gpQ0$|Tr zQAOoOH>=7(Aa@^xr>`#=KzMq;WQm)Pe&MG)Za_m?t~RW#MK>L#uA4sgJ6E6mpTB^c zKe8WueEG-*tuXQq!*tLJxUeu@?#=6E_YgvuyIx}N8LR$kURtXar)j>e`+T_@<~QzI z#@mmww`rG9-ZdHYR2ao#GkTvbGmMa!pK&5_lV;aeR7&3_p=B2ZyE^t#*- zC}kJjuCFZi@Ch&a^S1-aZ6QjUm~1YxlJ+c`daeab>vXI5%5^f8r}i(}ZIGTmx?MCg z2KV-F(X~?#u;hbReiOajK^6jqI=W4$bFas(k1+ra_&c(nYYODioSBIPNkXmn2HY+b{#*V(OD`dBGZtiuxV(w}NdSzj9kF#}5 zC%QxR_y4k}&OHGYH@3+9Y(yWEGdfg4%Eq?4OmUvplr?2Z}vgs$8 z;h6^3!P&)YFm0e|=t=}o^xMfHaj%q2)l>uaICew_6k{NW`{;umUXt#ynmA(@?LAb7 zz;Fp!N3%{UP$uNd@#R3BmMmOH3l1w84?;p&x!GvAE;%W$!1aO;GH>BzEI2z%i%&_h z%zbw4eN6TJBXbw7t1ld9uJ>4Gs$?BOM4MZvmn&FAVoRs99_LmLN_5KEkQ7{O{V2O| z%`@TPQ-#)6!O+nx%}sg~a)dK%5juX&M^@1$8;W58tSjb59Y=FTumcz!1trY7n0yH# zBSJ=1{jjS!JVdV5{YP4iau`3fb8Po&_oUv1@9x;HnZRCL+PFA11!qa+}2*E%3TY|U0)c!DQ3xpgIj2| zm4t*cC9KDHzrq|462@(U58?1lgN07HD3PFcrm(89rw}is9z4j|#lveK z(Gk>(`Z=aECCkpTC=#egvR}c(*a(x_;rVtTq!tTe4#*RjUY3Wsw5p>;N`3*)Zgd|E zRMqS~@QWLz@3V$TJDOauauzvxO=$fzAH3?=#9@1kf3MV%_2@X4MQrdPh z>uAJ2B{MwS<^GcW#j#(83pE09fpytwsgS<-k4YR6MpFQSUW&s#tOD=?I|_t7uYbm* zc*Y#sMEXJV5Y&LjlX)*_q9aM_K>Gi$y=xDS>N@Xd->V0D3xtHwWkImZQwZ_U8o{n4 zWN-lEH^z1@tKGZOqJ44iuC!|cR*aLOiPPXmYwRJdklUJ$-3dZ#Vj9#tjFM0^B8oAW_VqsF5)w4p4;6?HAzDzClvY~kME)B-K zm+#VGv9p5mMPJP@aiM>~U>p^HMNV=?;aM|m^eyPMR8Gtt*g#{#KXT5E*?+>iV-A%l z)SN~4S}@wO;Yz9JTqdI%h>`NQkqX8{`Z#OS<=(v9UV6dz_)umj_s&A}t(fuN2y|fp ziUvme*e9SJ`_e7B%fM+wXAH_Nik@}~H>4?2 zOuh8)#9emKqr;8s!Vx1P(SfuhO?V;S;3)PVt+t0*kfHi|!sr^3)T;1+la!V&T0_^WS~h<>RMKW)o%$^t$2F zE&@+SuM23E$c%h~C5$r34(b#}7lwXl&5in89G@S+)(;!WoSx2ay>Wb-_pQ@y!<`=< zT=2aQPH&@mf!!CLyyd<6muOz#jlj<^MKGV{1^(tdU0(EU45d)oX?p^4gMWY=?%cp9 z3|@pEiH5-vB$L~;bqYg!WP13}uw*(U*$lsHhldVPXOR^>XtNq4QoJK{s`Q~bT{D9* z_}E%~kW5-*RG;fMj*f|uG_Pimd82#H*rR-i&bY$J-vznQG=ar`4d(KYhJ_bB@vo(v zX}rTU2L5oNt!dcA`TjpN;y!8&i+1oY0D0vlYo}zQ&66Wz7LC8a3FCTE*hls8E>8vP zxD=hAZUf1E3tWEVMlAPJ-v#T@M==^??9_$!#UDUyth0Z0cKNy1vu(q=R2kWES>N== z^TQ%Kj24G^gqZS^@D(3I&JmGgLPU1SVMO)Z@DRjAe&E?)$T##TW>+1#mcA7}ow{>7cYKr)@y|9$A;haY|mTFegW{yMK;^Y0ZO{UiLnZF%L- zLtQVCzgr)0Jve8>>!f{v^LrZFAxzTSj&fE_{_p;>XNUi_(OSvWr;6Ev96u;BeEcfu zIV!-ePptY54Rf~b6Y_<16(e75!-lV+LwW`wem%ScS#=&7raVs!EUd?)5TfCKZd&w_ z6;&bsOF3Q{QfV~nMTU0Wj*L0@ye;P2^b&7E(Gr!RKGALzR}20z+=QwoS3+HoI|?WF z%qv;C#TL~S-^76r0GoHfIW76ZfbYx#1Eq*Hgjqh6TG(^{F_E{{mg^4mpYX)5-tB9y9*v7Wj`G9@P6uE?ikD*)cJ-b}x3H?*`h7 z_o4NW_QDpsVaG5X(k^`$sZlgEH$qcfl4${c*rDfKo!G3oeqEh!;%BL#X3s6U=vMa79VN9U%}q-4avTh1bJ3Z1CLuJ#Os9cO~R~@3h3qjGOyLj}p3Po}8xQ(mW5V4aY9vrmtsIfe8sU#!^uh*R@2NN@?w^lQm z+2_ad?*Y1fo4!%Rb~uCO1~Oxq@e>s@QG?E+5s8_EGFuGYBx)WvSxr`($(~cf!2#u@ zpG%bP!Qm)y6gr9=#SX_5M@ea!!%6+TYpL>!Gk6`p!F z2bhO6=7ASCc$o>%GasqUXLU%s2B}U3cje%^l$GE`<6~!q%)xBT0xqufnZzzanQ|fL zK}V?@j|XOw&ZYL`LXY8-^i0@Il7|WXMU%y9!y}Z*G>HK#xVJMaa^YkJcnXmxqQ(4o z3i4Ti+**xR5hV4TBO87QX(vMr^8{m z#v+=gghV**Ls~Q;XfmBLd?xx8H5^S0ut=P2Bk{?}gaeT%B1*ssv4^tpKr9lJVoEHb zX329lEB7cVIj&?EG6A7wHAf=2a@f8dyaV@PH zUS%y62=;-euLvNMOs^oc1}E_V;9EkD0`J` z4W4;y5hE9dUoz{@xv@{jZs7J4ZEt4^i?acCHC#T$Q;X7U#7cAx8$|fcuwz)vy%JSb zT{@+*#9TJXZ^b0jWenw)vHN;inarqb><(u^VNo%?g`#4MrK+^7yt1l#>a;0nkIJiN zHb}Ev%v6>0SXEKNmX$0ouVSXLoaNY93H2Mss*LC?x`m}`j7Kw8$%(EX8>_x@P33s$ zU~GDAMSUgsnLVd*?mW&}m1q8fg^Mnjs&hG+I<2U#WyT6u@fRkRvqaW-JjH_Jnr7W% zWiit;xQr8B&zRfLEH*St3{8`vS*mN6Pvnm=dl5E&LY2~wwM5iprDe=yDRU0 zT!oB&3)-Z{o}Bi!#vX5D&m9ZNDyOI?K)lug{Q)%+=#DB9g_YuoloZgkNKae|EtKw5 z)P$5qom|MmZjYo#tSVaMPNgFd?+<8RDbv;nk6HW{vQ3Fl8WBa}kyIoQg(ui$VyI;( z;6f=ALnd@>cHA~=*cP%~k_$Dp;_|uz8AWp~l$a~y^1?Qlh$d86&u(m5u@&~N0hgDO zWv*_QS3(w%y*tQ=u!d3EO%_>Ld}Ra|g>Yp;iIhgMFhuCe8Ya%%m$BiBc1OV-)vzb-Ot}o!+Wb-w$=V?**OiIM3O@75(|dmT5U0wkuM(By zA#*$Enf~=Fi4H$l8w2&7KG-x2x_{Cm{2grQF;1K zZ|;fx?C}oPcHj2*x4zTiyZ7l#{g10Vx14+T&G&1+(Ru$Ho9xF&2RlE#=ADPK&7J2GcGk&doJeAD8#r=LFdK-VXqt^Kv-+EtsH>zh7XKXCUpT>;g-9tN9mun@+UCJ@?2huENEFMNDD3Z#uK%71MCnq2J$?FGK zFMI6p8?!&%(AxIc$DLo4{&n+@9=i9q^QX5pb|jt%x$V8>8{%O-%;v!6iJXrMPS-VE zq&95sLSkXI*}s{^kzUi%=4CC*SFBvs>TmDpT-Pe>kb4?-%w; zy!#Q*6rSwwO0Q`mbGqJ#y)V4HFX~LKfz{xFuJfxww_o>*%vEIGTQ}MY>XRDpTt#Nr z-S4dcW%d6ZSx#YpJFCF=t+y%=&vf6NI~t&O`JVZr5oV9i+qDpOOMJIqy%hG%zJq-& za9i&C)el#~z13Iulox(h`?j5IgTJ-DjeC6X>-R;=+Tp+5ckgfq!gTtcXjzAF>wK^L zybEEk_I}cRc=8ex`uWxE+8|5&yzFQnKh5GPnO@!I-gn04*vQc_SD=Y z^Y4+_oA7=cU={4_{(!yFOz7)9PUNU;jP!+rG1`;Ypb}@Av_0vfRve zecr`JAMaz*v&Y$rj~`+0{cSz_X5c>Ntowj{=V65nRmtoJzFszXa*WN>HZi+>Df^e3 ztJyyv*4VChx3j)`N9c73rO(SUeSY?NV{TT^=X6h}ME!Q^dEIQ(cjtvYTKN;lJ3jnk zBb5h3`7FoY74A(Px@FS~%s=8TdZJ8fGa24k3)P}_6h60fl*Mxc>&%hM8D7}PzFk<5s*L$ZhP{LLLnnA(8qO2-9;{PM4&GK2uOCT?Syae(R z$V(tEfxHCr639y+FM+%S@)F2PATNQu1o9HdOCT?Syae(R$V(tEfxHCr639y+FM+%S z@)F2PATNRcZxVQZik0@#n~qM|!wU5?16Qkw0h5z&#KpNHb74pg3~WhYTdrm)m*s(g z7L$X4XjBfS5~^mMmd#%FOp?tWgQrB$?!e(D(m3jHoQj|IlKGh}cd$30O2I^2OU?H< z8{jzk7?dn)T^ly8o4*hngHxV@`S3uSk&UBFFzQFL=nzy&fj1+7r*JA9qlrLhk`K41 z$RV~D7h9D~BsB%B^YdLvRq2l;(wZKV+f!l><6KxgQCg7ACIhObxIJZd$R?P~mRrNB zqEy(mlp0DWEA8O{HIh=QtT-kXthVED8qQcuwZTsyG|d@|DghN%H6@S{x$rE{_e{6z zyPRw7B*#RsZpqE!aK*-mmhyThnkGtVp%hA_aRkFNW9>vQzdL{t(4d}r*9|EpnT*7H zyk0}+)+5jPnd#KxI-d=-h99pNL2@4Hy-1d5qGy&x$s}EtU_zU1(IW9VmSkd}v8G!N zMfxKlCFfsoKex79j-{iiNHUte*lpf4xJBY=?P3S_)NVN$z0}@Qnw}KEGoRiK-rj;@ zS?*Obp-7J$PRAEIU>gs{l8YR&91Em^y^9?iWvw?7PAzfB?ff+~6~GC61wx^vHdzie zcQ=DXn!A@3$})1aoE%%AH<(}Ul;tRoV+F+;iiE=}?a&~ZRS21mCR;(en?qj2+#6}? zj-<4!5GD}M%8B@DyUN41m9$6V0X6IOD*b_|+q0(JFz?YdZqM3Ft$b5%ni$AmDvWzL zb$i+`w&*D9pieCjM*-6l>YTnVgQAa9Jc+p1yJy_s_N=QO_q@l@x;z-y~SP*!g) zz^kXYW%U-kMlFo;)GMo79Ws5?vU+QQ92R!lpbbV78f-7B%EDN5gVvf>N|$cie1?jqSZ+aRmKB5sRHCMv5Thpct06dBnL zXiAC_3iJA=SM712-ihHDYi}WZ2<9Usf>@wWK?NwQJBnp(JnlXewP=DDwdfRC4kv?A zI;R!RhGG=I#=mG;jXUH}DiM&?gnef^p(?Q?G7M=CKsGxI<$<7@O2oQlRV6uzFj@)p z-FlU3g&>3{N8h0Uf!>H|4Q{S@E$&lS;;DHXk%E8_~-X5?e1xXbL%7Tij jnTnweqC_j9McrAG4SA3ElrC*rjAv0xx;q_DrI-F6HnMd) literal 0 HcmV?d00001 diff --git a/test.txt b/test.txt new file mode 100644 index 0000000..ebc7b0b --- /dev/null +++ b/test.txt @@ -0,0 +1,7 @@ +{vlnový balík} +max=10 +x=-max,max,1000 +a=1/4 +omega=2*pi +phi=omega/4 +1.e-8 * sin (omega*x - phi) * exp (-(x*a)^2)