From 63d184e274885e2f95ed91591c3528668b28eba3 Mon Sep 17 00:00:00 2001 From: oligamiq Date: Tue, 10 Sep 2024 00:26:40 +0900 Subject: [PATCH 01/12] implement usable across multiple workers WASI --- .vscode/settings.json | 3 + examples/wasi_workers/echo_and_rewrite.wasm | Bin 0 -> 114722 bytes examples/wasi_workers/index.html | 43 + examples/wasi_workers/main.rs | 52 + examples/wasi_workers/worker.js | 20 + examples/wasi_workers/worker1.js | 19 + examples/wasi_workers/worker2.js | 18 + examples/wasi_workers/worker3.js | 18 + examples/wasi_workers_rustc/rustc.html | 149 ++ examples/wasi_workers_rustc/worker.js | 59 + .../wasi_workers_single/echo_and_rewrite.wasm | Bin 0 -> 110847 bytes examples/wasi_workers_single/index.html | 40 + package-lock.json | 1269 ++++++++++------ src/fs_mem.ts | 4 +- src/index.ts | 3 +- src/wasi.ts | 8 +- src/wasi_farm/animals.ts | 907 +++++++++++ src/wasi_farm/farm.ts | 104 ++ src/wasi_farm/index.ts | 4 + src/wasi_farm/park.ts | 539 +++++++ src/wasi_farm/polyfill.js | 143 ++ src/wasi_farm/ref.ts | 99 ++ src/wasi_farm/sender.ts | 4 + .../shared_array_buffer/allocator.ts | 214 +++ .../shared_array_buffer/fd_close_sender.ts | 63 + src/wasi_farm/shared_array_buffer/park.ts | 890 +++++++++++ src/wasi_farm/shared_array_buffer/ref.ts | 1321 +++++++++++++++++ src/wasi_farm/shared_array_buffer/sender.ts | 211 +++ src/wasi_farm/shared_array_buffer/util.ts | 36 + 29 files changed, 5753 insertions(+), 487 deletions(-) create mode 100644 .vscode/settings.json create mode 100755 examples/wasi_workers/echo_and_rewrite.wasm create mode 100644 examples/wasi_workers/index.html create mode 100644 examples/wasi_workers/main.rs create mode 100644 examples/wasi_workers/worker.js create mode 100644 examples/wasi_workers/worker1.js create mode 100644 examples/wasi_workers/worker2.js create mode 100644 examples/wasi_workers/worker3.js create mode 100644 examples/wasi_workers_rustc/rustc.html create mode 100644 examples/wasi_workers_rustc/worker.js create mode 100755 examples/wasi_workers_single/echo_and_rewrite.wasm create mode 100644 examples/wasi_workers_single/index.html create mode 100644 src/wasi_farm/animals.ts create mode 100644 src/wasi_farm/farm.ts create mode 100644 src/wasi_farm/index.ts create mode 100644 src/wasi_farm/park.ts create mode 100644 src/wasi_farm/polyfill.js create mode 100644 src/wasi_farm/ref.ts create mode 100644 src/wasi_farm/sender.ts create mode 100644 src/wasi_farm/shared_array_buffer/allocator.ts create mode 100644 src/wasi_farm/shared_array_buffer/fd_close_sender.ts create mode 100644 src/wasi_farm/shared_array_buffer/park.ts create mode 100644 src/wasi_farm/shared_array_buffer/ref.ts create mode 100644 src/wasi_farm/shared_array_buffer/sender.ts create mode 100644 src/wasi_farm/shared_array_buffer/util.ts diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..ce072c8 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "editor.tabSize": 2 +} diff --git a/examples/wasi_workers/echo_and_rewrite.wasm b/examples/wasi_workers/echo_and_rewrite.wasm new file mode 100755 index 0000000000000000000000000000000000000000..1f4e413001a3b84eecb9226f9e458bda115bee7a GIT binary patch literal 114722 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 PBDryUW6WmYkWKgt4-eY` literal 0 HcmV?d00001 diff --git a/examples/wasi_workers/index.html b/examples/wasi_workers/index.html new file mode 100644 index 0000000..f59f8d3 --- /dev/null +++ b/examples/wasi_workers/index.html @@ -0,0 +1,43 @@ + + + + + +

+ #### +

+ + + + diff --git a/examples/wasi_workers/main.rs b/examples/wasi_workers/main.rs new file mode 100644 index 0000000..41a744c --- /dev/null +++ b/examples/wasi_workers/main.rs @@ -0,0 +1,52 @@ +fn main() { + // ファイル名を受けとる + let args: Vec = std::env::args().collect(); + let filename = &args[1]; + + println!("reading file: {}", filename); + + // ファイルを読み込む + let file = std::fs::read_to_string(filename).expect("ファイルが読み込めませんでした"); + + // ファイルの内容を表示 + println!("{}", file); + + // ファイルの内容を書き換え + // 二つ目の引数の文字列を二つ目の文字列に書き換える + let replaced = file.replace(&args[2], &args[3]); + + // 書き換えた内容を表示 + println!("{}", replaced); + + println!("random replace start"); + + let start = std::env::args().nth(4).unwrap().parse::().unwrap(); + let end = std::env::args().nth(5).unwrap().parse::().unwrap(); + + // 新しいfileを作る + let new_file = format!("{}-{}~{}.txt", filename, start, end); + std::fs::write(&new_file, "$$$$$$$$$").expect("ファイルが書き込めませんでした"); + + let loop_n = std::env::args().nth(6).unwrap_or("100".to_string()).parse::().unwrap(); + + // loop { + for _ in 0..loop_n { + // ファイルを読み込む + let file = std::fs::read_to_string(filename).expect("ファイルが読み込めませんでした"); + + // ランダムな数値を生成 + let random = rand::random::() % (end - start) + start; + + // 生成した数値をkファイルの内容に書き換える + let replaced = format!("{}, {}", file, random); + + // 書き換えた内容を表示 + println!("{}", replaced); + + // ファイルを書き換える + std::fs::write(filename, &replaced).expect("ファイルが書き込めませんでした"); + + // 1秒待つ + // std::thread::sleep(std::time::Duration::from_secs(1)); + } +} diff --git a/examples/wasi_workers/worker.js b/examples/wasi_workers/worker.js new file mode 100644 index 0000000..b443ab3 --- /dev/null +++ b/examples/wasi_workers/worker.js @@ -0,0 +1,20 @@ + +import { File, OpenFile, ConsoleStdout, PreopenDirectory, WASIFarm } from "../../dist/index.js"; + +let wasi_farm; +(async () => { + wasi_farm = new WASIFarm( + undefined, + ConsoleStdout.lineBuffered(msg => console.log(`[WASI stdout on worker] ${msg}`)), + undefined, + [ + new PreopenDirectory("hello2", [ + ["hello2.txt", new File(new TextEncoder().encode("Hello, world!!!!!"))], + ]), + ], + { debug: true }, + ); + console.log("WASI farm created"); + let wasi_ref = await wasi_farm.get_ref(); + self.postMessage({ wasi_ref }); +})(); diff --git a/examples/wasi_workers/worker1.js b/examples/wasi_workers/worker1.js new file mode 100644 index 0000000..7c1c9e2 --- /dev/null +++ b/examples/wasi_workers/worker1.js @@ -0,0 +1,19 @@ +import { WASIFarmAnimal } from "../../dist/wasi_farm/animals.js"; + +self.onmessage = async function (e) { + const { wasi_ref, wasi_ref2 } = e.data; + + const wasi = new WASIFarmAnimal( + [wasi_ref, wasi_ref2], + ["echo_and_rewrite", "hello2/hello2.txt", "world", "new_world", "0", "100", "100"], // args + [""], // env + // options + ); + let wasm = await fetch("./echo_and_rewrite.wasm"); + let buff = await wasm.arrayBuffer(); + let { instance } = await WebAssembly.instantiate(buff, { + "wasi_snapshot_preview1": wasi.wasiImport, + }); + wasi.start(instance); +} + diff --git a/examples/wasi_workers/worker2.js b/examples/wasi_workers/worker2.js new file mode 100644 index 0000000..8064cb3 --- /dev/null +++ b/examples/wasi_workers/worker2.js @@ -0,0 +1,18 @@ +import { WASIFarmAnimal } from "../../dist/wasi_farm/animals.js"; + +self.onmessage = async function (e) { + const { wasi_ref, wasi_ref2 } = e.data; + + const wasi = new WASIFarmAnimal( + [wasi_ref, wasi_ref2], + ["echo_and_rewrite", "hello.txt", "world", "new_world", "100", "200"], // args + [""], // env + // options + ); + let wasm = await fetch("./echo_and_rewrite.wasm"); + let buff = await wasm.arrayBuffer(); + let { instance } = await WebAssembly.instantiate(buff, { + "wasi_snapshot_preview1": wasi.wasiImport, + }); + wasi.start(instance); +} diff --git a/examples/wasi_workers/worker3.js b/examples/wasi_workers/worker3.js new file mode 100644 index 0000000..400608c --- /dev/null +++ b/examples/wasi_workers/worker3.js @@ -0,0 +1,18 @@ +import { WASIFarmAnimal } from "../../dist/wasi_farm/animals.js"; + +self.onmessage = async function (e) { + const { wasi_ref, wasi_ref2 } = e.data; + + const wasi = new WASIFarmAnimal( + [wasi_ref2, wasi_ref], + ["echo_and_rewrite", "hello.txt", "world", "new_world", "200", "300"], // args + [""], // env + // options + ); + let wasm = await fetch("./echo_and_rewrite.wasm"); + let buff = await wasm.arrayBuffer(); + let { instance } = await WebAssembly.instantiate(buff, { + "wasi_snapshot_preview1": wasi.wasiImport, + }); + wasi.start(instance); +} diff --git a/examples/wasi_workers_rustc/rustc.html b/examples/wasi_workers_rustc/rustc.html new file mode 100644 index 0000000..a3b081c --- /dev/null +++ b/examples/wasi_workers_rustc/rustc.html @@ -0,0 +1,149 @@ + + + + + + + + + + + + +
+
+

+ Note: the failure to invoke the linker at the end is expected. + WASI doesn't have a way to invoke external processes and rustc doesn't have a builtin linker. + This demo highlights how far `rustc` can get on this polyfill before failing due to other reasons. +

+ + + diff --git a/examples/wasi_workers_rustc/worker.js b/examples/wasi_workers_rustc/worker.js new file mode 100644 index 0000000..a251f88 --- /dev/null +++ b/examples/wasi_workers_rustc/worker.js @@ -0,0 +1,59 @@ +import { strace, WASIFarmAnimal } from "../../dist/index.js"; + +console.log("worker.js"); + +onmessage = async function (e) { + let wasm = await WebAssembly.compileStreaming(fetch("../wasm-rustc/bin/rustc.wasm")); + + console.log("worker.js onmessage", e.data); + + const { wasi_ref } = e.data; + + let args = ["rustc", "/hello.rs", "--sysroot", "/sysroot", "--target", "x86_64-unknown-linux-gnu", "-Cpanic=abort", "-Ccodegen-units=1"]; + let env = ["RUSTC_LOG=info"]; + + console.log("wasi_ref", wasi_ref); + + const w = new WASIFarmAnimal( + wasi_ref, + args, + env, + { + debug: true + } + ); + + let next_thread_id = 1; + + let inst = await WebAssembly.instantiate(wasm, { + "env": { memory: new WebAssembly.Memory({ initial: 256, maximum: 16384, shared: true }) }, + "wasi": { + "thread-spawn": function(start_arg) { + console.log("thread-spawn", start_arg); + + let thread_id = next_thread_id++; + inst.exports.wasi_thread_start(thread_id, start_arg); + return thread_id; + } + }, + "wasi_snapshot_preview1": strace(w.wasiImport, ["fd_prestat_get"]), + }); + + postMessage({ + "term": "\x1B[93mExecuting\x1B[0m", + }); + console.log(inst.exports); + try { w.start(inst); } catch(e) { + postMessage({ + term: "Exception: " + e.message, + }); + // /*term.writeln("backtrace:"); term.writeln(e.stack);*/ + } + postMessage({ + "term": "\x1B[92mDone\x1B[0m", + }); + + console.log(fds); + console.log(fds[5].dir); + console.log(fds[5].dir.contents.get("hello.hello.65c991d23c885d45-cgu.0.rcgu.o").data); +} diff --git a/examples/wasi_workers_single/echo_and_rewrite.wasm b/examples/wasi_workers_single/echo_and_rewrite.wasm new file mode 100755 index 0000000000000000000000000000000000000000..d03ed2dc4501e443ac3821a4c1d43d68a29ce1f0 GIT binary patch literal 110847 zcmdqK54>IFS?9afyY}8^pR>@}cUm3v;)vH4v7(|=oq9{n z{r;ZkU2Cs>&Pkxvdq3VGBzygN|2*&W|9#%)eOGez_3ucNBuPJ%o^n-^T$LV9t_p__ zr-!-XpX~5q9_U|gc%EF<;#xQ3`aOK(jds(voA@%hD&f69stc-Qa@ClXQ!^dE;(aeZ z(+{^*5iT=pJUpFEo%ZglufOif>)(0x-s`V@*MTed?!V^Xb=SQ6$Rbph(F zZ-3YI*Cg2qdR#*ZQ2)H+Kc!LbZP)F;@|{<|&>f=0*p?tj-?ue|2abqA6(`&c*{ zk|aw*Ha^iwL(=PXLTjv(^g<_eI;~C!6T$v#@uKlxo9E-YPwl@>nkAIxKRs%v6DdEF zt)!E-T4~zpOpLe2Gg{((lC{zff7|U|NYd6sZ-O?|X{(h{k|LcjuK#(Kb|xmKvaFrb zT&Eo}-ajiYC-Ecm+{wq8(cN*VbStnYL(qd8^UCJBA=KH?QupoF%AaC*M;>VwA$(3^vWySbib~%CLB)7rKMv@?{HEk zy|I4QdB-*Hc-Q`a8T<$HF$KYjK8bVqvGm(r)wxBROwrr$Pu z-uV~qe#3Wu$0b+XlD_uRa&FI&bpGNuz9)UnN7MiLRXfjpI!zfX^b?+-r^?hF%u`@5~9AgK4| zG(8;V!ra+6EiEl2jkNzyBl z{IhzH^w#o_7VV9+f>!Qaa^(axCtj@^IbV0^x~?cR$_1#Z)Mxn<6Q~Z0Pc1;DHr@ zT?=nik6|N2lf3~e$O9#MPq#CXI6WMRd@NZU1Rof~nOvZ!zf@1cHeChq<3zYbeX1Aw zoTmixxRWuY6c}XsX$@M7<>Wj2ZK}Z!7f&UbT4*uSfkE7gT$q(<{$uK+2a`-L^o88R z3xoDl((9=qaCZ?D;tCX%lW#9uUR*>E<+MQjD^(Y8(`C9aXqAVH)+T<$buIX-egFLA zjf2j;{T9rU6&oayg*d>M3IjURW8!D7 zk0ntuVSfl$$?EAnumD!Y_gEw%ox=l*MfNSK#EHWshj_e_pir$YhI*iA!dQxR;k9ln%)}r?#v2a zJhK9rBNZ?MFhdg&oCrOSRzel9Gi8AP`N`feWhg&K+=y)SJKjA6M+E@k7L1G3=%AZF z<3pMW_oahzbV+|g1wN7X;hdRp4+>bnN7MeKeh>7g^s~3WM$B#amoV#=iedW)sf?fDrx#7NtTF;27$%FruV?reQl4Kt)#kT9C0t~}KzUTmk$*%!hujx{ zID9>D>`rbdGKi7&1AjL-Y%*Hb10=dL9h_bs7C&%vdy3yM0SM|j6yth!TRNCt?4O~_ zrL?~he#{Q_H&w(dHW_>`Pm7MEv=6Or&@bbV zDW3*{;*9?3!WISrA4T=fgjJvkY4NLeW;=KjEz1gJ zj-R1w&tp*#h^3T*I76~e58e!Wx_xTxJhAza>u7FYWqueXur~~lI)5Og_x>gWVR-+TJv$2qN#qd7OE`hGn#(_`dRW&kyg+9Fa9hBCI+jST)AA0u6IAQX*6fim zDCX0DsTVWhv0x5AWG?2HZoFY9Z^3NHe?$$6iFNa%y1||7o0Miq@+|FBM-Htt1(cR1 z%F1v+voRy<2J5+{DV7`(6@wNOv*(Y8a_D(b@r%jc+3+R?80mHF<{Hz%Jb~h@otb#2 zwZa4Vf~>yz0e>cT;2O+U)}5EjtovJbW)Fy@CuEFGD|%@77&GC4w6E%zdeL;Vye)HC znMBNl2c^+v!t?(ooCOeW{-3zHcC@x7SCuVfkhfHslLZ3mnef_?QbTWM89S+HWF_}p zsk}8D0P6DSEnuzO=HQi&35VrldY0c>TPh3+qOrGp(%z~p!;59_7%3}5X2wtBh-R^} z^r5_J&qlO^Y+_O-vU^h)fvNrm6cNQusDp&s9KQ8ZjL|0R8r!m7c9}nwa|?UnFQ}?! z)))-D0d)M})Uu1i(6y^-Zd$BU-TrA}P*W~Zt6Wv4{nPa5G-()T1hr%2iW6qA_W;z; zjG4>Nq!>qjAGC_66=zo9#D{rtYJXkSIMP^1gDagl%5<@4n~X6f>8}SK2EbH&VSp}L zIY3;UYJdS1$6tmO7$AS`YS{o!U2TA;YJjIU2N+I1z|-PbsEC8LVt~O1h}rHG?MkI? z=$|50UIzX=*R-+peKKx)vdKXu8lrrtS-Z^mbGtaNGV&Lvp_;ho&56W&mX@SyG1W{G zO6KNE#x3y6m-MC&^~!u9&O6fH*O=)XKJ&)250_v0jhlYI(+}m({K0L%Nnow~%SUed zaE5CA(zBm?Uxztpr{9U!WAR-#mK~3EC*u2Fd_NiAPsR6Z;`_DneIDPhi|^OVU6>x6 zg7d>gJ~$Q6;1ryRQ~T5Wp24rVb=|=x91cn(gEMh4HucXc&g>Wb_W2#?#mwOB{uW&n zgKz1-xH!B2lHyzD(;Ege{jJ=*l$&tF;9L9WaI=k@?1sV1`rEM=+p&-XMF%f{QC*M6dx5%rO2KVa0 zdBs|5uGnF9U!jJ*bXN_(d|}{?Qkn;^C|>Dpo@=Ggv(opLV`_LCV$gRu*4x{4MIQ*( zsf@uVP|qvQ@FKHTWTSz)vp9o-y8yL+>%f{2WUs_IxYFP=NN84eA;34e^nHudsqf z5=RE;eua?XSfT|U%nBJmQoPbipF2dIji6=@NA#|WIlS%JVQD~qMRDFj1sk`oEOu%H zXT%Xe&5Dr#@&a6rTb$}e zd_?EO5uHjw4e88V2iAmezpI#B71=xd@&O#Y+SGxeO(uiPAinWiZy}E(6BM z!5g68RlKxVQ*3fL*4W#rViOQd2~>kmcz#uJiWhP2J=H+HusDT+bAY<()`2x4P|IS? z!hrwhtub$Mlfk@3lUmv>oO3T!4_*xrUsb?v-a4guaA7g$jhC^Zx-?+dO7^rTtFqjl=Uj4X;fO8O@=Fb||H4W! z6rkPNpq>%m5FZKXvTY=BWEfk6495~J@L;!)0VIXXwQ*yO@dk4^qUVZ{ws(&pdbW6# z^SPsWXK|tU{FFEXs9CWcK)x1c-UR1r5Et2iURuF_F|W=nwlY0>k#k1Z-j5Y8f+xn* z%2q21@VkoByoirzYaG#O6x5JjbnC#H5boy+Vqf0Uiy|?`thorD4aG}?{ap+tqKVQx z*v(+9%{c?c$iW++pDSKcOca|PjtP59BmxM=1**X(JeS1=FXG&Lnt^&rv4Mh@0_x^l z2iAl@-J{7o|G&-}^CmYN%oEJ6)o$UOdx?7RYJgZ4u$#9|X&zisTSt*7Bv==t0XT&$eM*_NR8%Z1)#?~Oiu|x|zm=`jDq;R=5ZmcohU=Bz0rNv0w z^CO7fU6czIY>eQ-;u7)shByMKS+N~Jz8+@Y4CiVPZ?H-)so;MjuU^DVxNyE`+1qwe zz!7cWeDSS=7h6$)pDU)lkdNraaYWM;)sTu?ncd380r!`(hBxrGibxDRb2aD)wxM`w zV4q_s5lxil!90VpHZL`Bj2yfH`b&#YoaImidzTew(SJtETW%c~e8Tgd;&dn0fJpwv1{Gg7#w4wIRz-!G=+6EB8bkrJ{UOJ+-D$8x@ zTryoaVy{rkTMV%dHA4Z~OB&QOiW=f00bRC@B#sPYYmnhsq6HqjPRIa~!sXhyvBr3V zIULb%(zH#?;cdTe1kv-w9_MpM^CiXQ;`7tv2%u)gb^;P+J`3K}ARL@675p^XFQOZT z+lbrljxru}e|t1Lm|1*#_g3&YaPM7AQAQIfD5>wQ(dgu5NZ+4l~{dG%HG{)*yd_j3KLu0hH)BEc+THas04 z1DXv_>cROcGdXB+|Ag)@(0zB%=KgWrzgqXL!5H^n(EV$4&*}~LkLmtgOw=qP1}*);xXub3(ODL9xc(O~{A{>em#>8vXTx2(ya@HHusoL+qxomU9lG3Q zO&{WFcQKXpUW5{W@Zz2`KZmlrQHRXH2JqFXxO0BwARIvc*IXFE}Zv*96Ko>zQpEd8Kv zLv-?)WT=a8|+W zHZZ*1?p(LehI4ukk~eg?bz>dK*wIWtm|2+jmGZKvucoUjy~>N=vE7FWDF%WXWs(1s zVjN)(&L_Os9b^Ou1EGXIkw!ubT0bNxfMD}8!+QT+79MHk_gH8oBQ$b%^9e8_`(#zj z6p4B)xEtGIUux=*@U2*fcqLW!M-dsp7c+;xi=x!Ly)glty zqp-ye4=L~BF7=2q=$_d6efovvKA~UoFz(TB8%?L*4r)%nB$wQ!-!2MHzvE~(ep$EB0z=7|A6I@+ zpGytfZUW5dG4*O$fj7LCh>!p=Nb6OJ#`BTo2Cb$zhxA@U^fAoU9SxGHBtI(r)sOlW z_Q5!f(-i>FnI89EYwU@X^zEtXkTPdkRzQ}8)@Ok%|2yH*GMUo+r*0lzf1j>61>0fQHDsp*-@QV;%v8>&RmP1wqugQ?%ofsHk72@#2rZHN6V`C*qO& zRO*C0@_e;V&SC#4oB+Q{jw_G6_t;WWw)49Lfsg{2A{EPtmei4!q?jEa+c!wcwU?uq zj{momTE~xP`wo(Vpu9F1l$Af;AALVfX$4T(ihBCR+v^7#cmO>&Lnv7H>G!GADQ-3| zl#lBszeW9T^w+nkUda+ViH_x08?Ut_ZSByU+IheVijgUJR5!65t(-Iq{*VU^G|BkD}c*GR+9sD~nKPbY-z?P(X)5gIEwrEC#??I!eHvZ;3_{}vR?d5V07 z^HbQ03dtqsr%7+X+xfrv`TKwNw{HEy-~I`D2D3Z=)tf*3iy!>UU;UMzJ1o6pn(4v! z-TlZNKlj1UyxL3r!N)%Rk%xctshfY*G*e7D2DZCJgcqvRkEn1I*q>-z|D-jt1;`{r zmCp0jJZyMV?JZLj$EB@e>YY^|YL9oVhE(xk>}6Ym7~9~MKH2}q*}7;^7`OlpRx=QAKccio1Z$P?-kZBlN-&_pzN`1#cB z$;bVCwNI|BZ)qs&5dmWOlOnm1o$Ujbv&C<|2NlfkQcFo>a-S~T$J_n8lQniXd9Zv^ zcjyw{bq?0Ar^<{qd2%{<&g(Me&eiL%NLA;UwGi{@>|xc(TDx0+uzYsaPHGsc@>3)u z+p@iw5TW~==-5x2{Fn9~VIRhjOF%=m#T0#Go_3=?dO< z$U&vJWx%l154=TtQR#(h$ciL;5QN}g~zvnL=v&9 zB2nHvcrM14k%)H$f#N&uwWue<*(iy~85>o!z;sFPYvWlL3e}SUbYjc7y&_HX*SKdu zC%J)pSQft}zMlYTS^hDpbB2tE?L6Pc!4m9*0}-Ci?Y(rS{TOR_R|>j%BEOA0Z) zksnkL2;6kBQb?t<`;*c%0J)(*!S)s}FoARV+y{@jR-X??`jb7{wd|;|Vw~+Pza_cc zNb$`JnlggRNf){|lWrOZ$`B`eEJ7*URN0H2%csU;Qlj=cX#8Z+MnEa8=dj z`Mry#;814sJ)R#Wm_dt2HZ(GRgM+TGV(Zz%3lt{8P@;%-cB~+ z?P!AuHL#n-N59i%D^~QVme7Fd&|u5uo02I|2=RfZ=&m#|PxD))JxX@1>`u0uUMX?Aw~NEr z8^o2wLu_ITEKKHg1I%zjey6JPn)K~rXE@gze?*NdWLer({-1@bjq29!#YR?L4ya@i zm;%mF$;K9AJXU(_iCP%%v%q!_?Xhjs0Me$!@`8o@>545km*e8f=|Q%MIC$oz*`Mc0 z;keePA2&Q1D=Vr9%B*dnj1`x9C&2SV@w{MeYmTF2Y)gms`;TE#TD38#eKsfq z5wRqIX_ElkTqz*{8U4W9YMy4;sUpV9CIP&Q8!HhGjkKNwH0No(ccV8956$`E{|Ehk zLi^yeYR@J?_SCtBv31Mo{I6WU!~tu_HXP^^Y-{>3CeGkO+_~L?w@o~4>dH*c-42?v z#U#zLKOq&>Z{sSq=MP^Yr-KVJm^<~$!5A})_7#J`whJp=jP-HAVWS>}S)M$mCNw9p z*c}kEc^Rl-WEPh_pqZARQ7lVAom5^AF;LBj?)U*7)?SaCmbjdje?Brj?Mix6lx;*u z(z|3BY6DG4_1rr|mv~P4op;6#6Ynrlhj;5?)#12!8<=c;q~K=${?Gp1!ykC$lRx^u zdKB{Uul>T8p8fpopTALI%3e!?7~0iWNU zw54^m7F%AlO(JTJF-kAF6R2)wR{6EYW2CHdxm8-7+*j2*m;Mk=RMm$~H{Ix+qh?#t{}u$U(c0aw5%k?xk!z%>qW@NoI`Z z{wR%3+Q}$GUgJy)Y_xbK@){jAc&+BN)R>IK3^ANVY>Tl`mP5k*fD7Zi5tdu^AcU)j zCZaiKg+r9UB_(#u7Fx#3U$RQycUCA>s z!PEs^m|6Kp_W22=N~~!mA)S!zEW>VpWHD%omAh$}RXqzq7r(z` zA-~Oifo;i4w8MNHJt$*sW_XazCvUFiHa5xlMy4MOk*NpfK_NDTR(!-GP)5%(YLiMD zLi1730*P9~shwjngaCO`!z9ci(4UFfA!(mmIsNtk4K;yz%yxQNCI*@lJ*~2cIeV?g z!3BXI^DyYv-e{CF;aL?j<|MFcH|l0d7_tB<-OPmNtREUbDfM3 zeoRvrO6X6~6>{Nx@l3bQ9IO5L{y35_UOD^Ya`q9%I1?E3ie52(#h_C=`@Q~nA(Ftk zh4O}k7*i}$0TJej=^ZYKirDi4UBRSt-7OlBjY{h@wf=KG#z{lFlMM_P$K#7CsEBG6 zhAcV+B3Z>*F&m(kY)QL(OgyS^YFpFj0)}jpXCcPdSweQhKeYXn+AiALl1Ynr=8x$< z|5N>&^xhwap-pIzMH+Ahi2@F|MPSe{n#ob}_)=Vt2E#D4Ce>Q9G|9-~8kS;I5vaVvHKxPjl)ku9g)U8d=eD#3B>XXZQi~ z&HUVP)X+4IETS(8o^U+WU3ysSi>$^vGo1XGEQ=D}f)cRsC2aTxH2>slvNQ=k@3zx8 zKoOKSPqVyFQ>#AXG{0CzA0d^4nDjoJrL~>J9H)+FafBaERxY)wzSJML2&?B=+FagT z2<9uiu;oz3vDC_cNwCV)iMeLNLtmzUtkuJs2w024h(Vy76DYnUH2Ir$FOxL@I{5;Y zVTY2fy;I>HubUr^K#CoqSgTH2)=A42t$;0mT#)D}D^~we>Md4&3~xH@D`l>1=F;6% zqmryAXGYl}Y=ibiQ|2XUXn;flCesEuXlsCE;xfWs0+C;M2XyLOH=&~PkgTnEG#(Xc zr#W6t)WsREC(|o` zga*xTx*2Rx8Ns*{2hp$Y%JN4HOR0#%e}~|j4E;zZNg5FtbkIfS9XsYmR2`^Po=L?S z;7!XgL$Laq$w1NECD+z35s0nX9Uq4?NJ;U;C7%~bqOIzm0}BJxd`=TepbcKm<9eAL zz*ccG@Mt(_6Unz#%Plv+k_A@E_{wAfW2q{U;6ySmZ`5!k;Q_Npvq&z~A}FW`e{UEO zt6F{8xc*ew)_4T4luqy_BiP-3TD?N&MB21Xt5rQ4^0flhB#)^Cn_#B>vE}4p*}o0MYObC*Ddc`84N8Iot#vXiX9$}B0t_~z zMh|Psj0DH4@rp7p zZ8{X3jCFjJIYff4V8u1vXU|SLEZLpXc~Ew6;l#b1z>xG=MwZ(~ z1NBtT8O0ASoYbI3$=;%lR^ydk>pFYV4lhJsdgOtmc&2~KC?_)#t|+^G!9(6czmsW< z9kJ)skjpHj(O<)Qx}hMLE?7I-Ysx`tLuOlhkp{B1V0qA0RDUh)azrCCj)4--8+HHK zgq=szWG=AK+0qjJq!!|-DK48TZ&)bS`qd$p8+6sfqhO3+MB~w^g}|OsP-`71W65Mz z$t2!Wt(alQcJ&-^%q<(kF$)JOV@|7Efn~y=G%s27ZqiQTVFIZI5+e-|L#v=QXi!kK z@0?k%Bm!6ISSbC#7R}xagHV|_QoLZSvKAU>C6GJ}pl0&zaiUzub{V9A49 zky;$UEFpG{X3{3Bph@Qkf*+9>qs4!REPW^OYw#<%mFC2ck^94rqoQRqhjxCmEQ#e; zX_+MjGFeA{qH}?lgMJ)N%TbSZ4(2336d}t%x-R17E5*J&bLUt zs3c7bcKu`LifT83`m>I13d5j+Ol500cv^Nt*;-~O?Y=UUEi;t{-1OUie;>cA=qqw^I3T$#`OIPY&Q@d^vdb zV=C{ulW*&XX*&ws%|-djijI{_$C7^6c>)Gd0(zo5S~~u2 zya~HnVt@O1dHlkC%ET$g`&|ukoMal+CI>?&tq~QlrjS(RZ>&FAw0K5!rUr}DE|don zUkMLw;*gq!!6x{*)m2_y>4AZT>qk+o;cD8T4SVPC%PFTRKj$a{@RLFe9ksWo=h6qW zuU&+`ipxl18nbMXan0BzC}WIj=rlY@8?N z1EFYE;!lAQ;ct8;{y=+$KhRfUf#HlT3K3+ALZxMhcz$d;8BA^*Hxd|u&>t6D^~x(b zy_X*go%X=%06291AQZz;yM64*PJ4y6c3tH#m)d~X7(2$)*4`;*p)gvB1ad*@|C1<0 z<1dcWwM0B^UK@w6s3-QK3PRh*#*j&e%3%)9U(Uv)e-6_SCPf?--{n1=YYi7-Wp(7N zEXq{r8RYdd-;bQ8ePPC8QpA=81EnSh;~-!KcHujnfT;sm#KAe&`~?df&alYYe-d@@ z)a6WI_?&aNC%~9)*nqJ~k4Ui7FUY%i69TXE4U_qs9>q0>>Dwi8zeNTj>HQi<#N(vZ zyEUIBW>;R7>6nTV z!%r8ZnZ)c;l&1y38@dg1vJ;QV&S_-V!aNN6T1D!J9OzKP4h&q4GAUFlD9I4YM`zmE=Xi5g{s%U2}wDI-MSb1K7G*A4CHAZJU?kmGr`5;ma0-IR2)*1 zRV{Xf#af|J%lSgR)inZm$8M2!0e5o6PD}VZW><#@ppedKd6AKB$$}W^Y;~$58k=#p z?U9RE?baRy1(Mi?X+K@K5iWW;KjY`8FXLyIGn2{e2s0_Pw96R@$+^J!puIKQMOHd~ zbYE%dmUaGSH(gSDmBd~kdYRw~;gZ;0lGtWqyyVs_rio=Rv4pCY8ZT0%6|H=7*&V=;d2yWQR(UU`jSnLZ`EDE;N}U5^qmV5Q7|K=P>Vtp z1xa&;?i6fF^ZB?<<&5T=)QFQMg8W2PZTnUEn~6dU@#g4%gkKl7CCCuYaqmbwj1Ld8 z#^Y=`Wh*)MU-@f^WI;}k(j&3W^wu$ztm%q5ba*ECB_Lnf(_I`0)2;H6Jr5VW*>b3Y zPYoKV3#GuuHPP`t_>m5s^n_SMT^lzhJt5YPrs_|bNmg7CG{yqGhZqO#(%qW*E@C#{ z>f_3I<*E6le>i@8?Jc}2-gBfsrFY^7!>rn1|NAXEAv01bVNNx51We15sN)BduqUGS z-=#%*k7vVa0MUbGQy}ojY+Z|d?4qI-ycBZ+K&J_L`73wB;AQZ=oc6GM+#aa}QNBlX z<2xk#@&M#Rwe0Eqk?x!?Q zhYT?$=Bj5IJ26yg2A|QO3Vr(~SbDFu*2;gxr)Jih#KxicK|Respnv-|ZPDO044W2} z@3YErAFBgY4aKr^8bhhUPRcuMNzC@1Rxpc%j#(|uXdUbUYr0dTX4qc&v)-%schnk- zE4nm-MRko*B)vORX{tKdBEh$~yGJz$U5Fk`*yXTLQ#zY}+(HhkHL8Hrlrl4(zW9u` z-b&}BE?ThE{cz=cCVsR1$&=NB2YZ$4>(7N@(#TQNR)gWxQVE5-eine{d)@rM$WY5K z6^u-?#6uoiaYq3Th0aSRvs%dIAYyI3QN&3%N2*OXsXI8Jx-mALYOm>zqr^kk$|Hye zJ>!;|i77(KcV~82w=p%p3od$2iA?1uKE=P)+*~8%%mFbV zv+yJOeN^u`_L*xfYuu)147B`$)vL}-0MIHp^1+74$_Z$oP(%hJtH`W4D@tvWyD+gm zOmoFhJ|ZsCN=umM?BjEJ@&QSk$jNo9+Q?Yiw{+rD-`=QA*S-&ahqN=SE13)BOtlRd zs>zB~@~GvBDvYOzAJS;@1TF-~ZN8U4fUxsefc$U+kZA)1^b}|u?f$;w0pNCyWtTTk zAN+Lvz#-FY_(YJIJBL6IkZLpwSD@JTj3Vqvq@MV@)UI*X8hdHA&>e2UcC zO`43Fc5&TpPXQjfG|AEgHdMldJ!){|5_UPVqr{CuEV#x(Vm@2^FMa)IX$e>FSuNS} z0C%skT)U*6s0>wYO;?vOS;3z^t!i?LDusc>63`lc!N=-yj)&NElApL%k0^*qbsh*T z`pidZrCNLYau}WFfP>U=AoQU@ojGM%j|sd%SdrU-r944uxy-1%WY(o@SzD%D-%F60 zm!*xbs@x6>muV$YQ=clgg9+-RVkbNb{Sn7-7OrieVF?6Pz+mP4(CF@j4`Z0R1F>T3 zdDIZm8|?(H^P07U$5cUDv&w3g?1|sADg!w)XcZ1BpA)jm7njFACZtt)2!>!Om_VdQ zhPxt2ff9vFR!?7eBn)}2xzsE9OY-M5N{M^D^vea3V5`4?sA*f=nDEbF{a5oi^LkRS z5LbVpwxloBc$k6PN$v!@v{D0#%tf`sU%=RK#TQ+iiQ~Va72{8(!xh8kVs1aso#)Yu zdBq$w?RugFPWB|2CHah4xlh019lI&vfQRfURb(6O2CkyMF&9p)h#&*(9hiKGXP^;H zSNuvY(jOVWGUVEMdn-oWxK{>E3)JY9Ka?=TtTh!8p1|J=@WxZ zGa(O|+ZcO4&{*IeO0jxV&y5}pg6Hc=xMApy1sk;pF8^4-B18pxP!64ijBHg$arPp~ zZ<6g73rzMCAG2~2ut=I=Rhyelx3mJpg2$yGFgVPfgk7Ri%W@KU*Q(!{X{u)2jf@;) zBOn_^7AmD8q(T667+omqZw2wt2~NB+Rq|9rt~qtew@bWmwetQGi2Lf99ln|9pMhk9 zqe`}6^-8v7Tj7asP)@0`Bl=vuzfTc@7zKF@2PlnZhOKlaV&$WX9UGCv7x|L-Nb@_f zt{YQjALd`Hq{}R)FYl#nEEH(A4yg<}>VIA3iZsU90H4&gDkvjj;zhHcH7j@yYn;Q+ zeGUN4xJQ+i_I(TUox}<{DB@De4c!~@y`IjgIr$a7DQjk-d`N9oM)oZx{%&N%`O(}g zDp+DTmK@$Wf;y|CTR>)d5QMU=~p-Q(=7oR;c&4i>i`CMV5g=3%_P; z+a{$TIl%=tDYeWYFvb#%tsi5J8<|7Z9`y28HchL=Nr4Q&Jq|r)?c=P5x!k+J|8lsN{a>P#h>)ORuWe zlQguZm4=WY;bA68%BQ~k=|5o+B8Ba6-%wJ}vI^>zDS^~rA2QSd0h|y=h`hII$%K;3 zP2{1jY$otBBd#E|x-GE*agZR?+_c;8OfgX;6*^!GzG-$uXZ~de%CDyT4k{Ei@+kvF zw4yYDt`I37@Q#$Tqv?p|hWR}{59YQqMmW7BS;g$L&o+c|XfzyIwcLTNG_jN`DFBp4g{@OwTIT=X#dT zw1rc#=~lT#!`ZQr|Cz=DqrlsGn15B6al-VG8}dSM@HEP5+Fd53^aJ(gL3fzkQLUE+ z#?HFf^6-MWH4*8gx7Y##2TN3H7;3>kj75P4Y!^<5=P_u{JGWuZ-9+M_Lw+CupkaLI zp#t!R;hX>gOk9q|4L>NQht@Euup7EVK*nev$`}{>Jck7=(BSi&q}sm;jGE^NRnXdQh%}5BStzyfa;an_cYPe%l<`=GV&BQPF zf*>;Vf{`>I7j|IIN*k}3tMINdSK+Sqf|wrFj70C1FenyTjp*U!BdQ{o#$YCIoUbmQ zwJ{vVQGQVsD{ph(P^gE36={#ds%cnSByYftp=S^%TrzXR_tRfK^Oxigih$BRVgaVV zd(NplFA#vaivr zo7TGbNQO;lBE&ezdE=-+w2Ly=inNb%=ZNLTse+vT#S97Pnyr*y6vrcAlgKp{lKJ7G zf~*pm|2oVyH z%7~-3CC8*D`iXmycH{AyOpK;sS=2f!kBBlhomFU*p$T}60Z2yd7NCGD?2&^aKgN8- zO!K`h#w@+>^t}o))(q{Qr)YW*EQn~=jF_RZ8d9bbs%^=GD#2}{vnTAvYsP~>K&oE_ zUxEHNBR)dvoeGK5;za?jseu-SGGs)=klC;9rLVR77M@WKEE5DTmw&%do%DWZDHJW@S^?*#)|*<92g z1Q}M<&s)*quAKNm9fY4fq+)gS-BwHt2ax-&eHj+11D{K3Jq(G|nbQV{S_3|$Q9n}G zR$3eY&MQZoMrkj>x=1m*kDW@uhwEPSz!7k^)@EpxDNs{*Sw8{LE{iafIvjGt@3ZVW z6vn0#yHnkxsbm2C)Y_P2i?tHJO5Zk^HZXqvZ}Kg=-MEBUV`Gg9 zqwQyL+DcBP|CrN$yNO^;Tk4pi1}K?!cC?L>xLYlAip1`u7#27xeU!3(to8DTz8dfR ztP(a{_<~-2xV<0f42AYdW_|4_wXmt?Xl<8D^7A;LUHH=ipN)=qPAodatCmZtDzzL=20Qz z!c0OZDi}VDTp;IeAx8lKrDgeGHjEC24SL@O{LGw$B*+c+3$nA=2zIH^Yb{V6RO$Ap z8f5&9M&x?6zoE9F2n?bo^WPA60DMhJTd=S(xQ#UPgZ#3LM-@o=?fk%_BJ$Bs0E`nE zBPq6dA*2OdsG1*j^ODC<)Au!0N5jatUzh)T6?R_~6v>i2>3yTrXm6GW?xcLmE!O=9std`bGb|G+TiY89N>{xk79%JI); zEh+Ox3Lgr+y@l3k9s^a7^P~i4Ajzua1~G@YcUmY_5&R}?$00DYJ$}~K^Ag8rDvhhEZ5i;K^Vl6suq8+(wLqnlAE#B$_O&W& zOOeYl(r78OJ>8Q3l!&Jxvq@b;cF8q=lLg<4l{)5me2fTPD}X4v2FF(Ed+tubpeqv2 zZO&0XbQFr1snt9Qy+7Qf%jC&emYhjt_lOSp?~5`??`0UO0y2y5@03j8ko~yx#HNO9 z~|>U)%bKta~`GrBK^_e2jRMD=^IH$c_*CTaL{);=Tg*CklBQSmZ-$=3 z=)_P+hMzPA%#YZ3q>7CBL75O`hkGz7@aC0*qH9VF5%q#vHw9v+!+nFTk4~w_o78sL zVLct=k7#JSlU*imq}U^0_~wjcg8Pxb085QegNwHGuyw$6So{6~8BL zEuLBOV)5>ds?rg=P;grs%<2;8tKQ!3Z)20O?w$TNmSs-{jR%5}phie35Bcw6xpp6) z2SWihM^s*_8A^*7Nty09J{Rd8)WA4w#8Du1`FOlU_ZeN8Nm=U)L<-7XQix&!g!~yD zAQ|S=%A=}-%chJU(leihGx<)&o=tDjL|`_PI+U|e)m4U3a5_5&FrLSN8MyUdjQPf#F<{hIoN=)jn}+m5j6~?0e7UN6yVAB4BDL633@2HsSo0bt!V*=cBlJ2TH=EJIYm+}u!=l0F3fv2YHy8(#O@%5 z#4+2dK#w|&91=+t%CDz$nSZu~**OSpIY;cLYnGEb?6YObiYv`L*bIJ>56&NERVOJw zdsyK_u{aRy-RA^x#Be}21nA>WLFA<%MRXP}%^14*_?T*ql`j^W4}SNcwWu%DaFZTb zEMKF%cCannRjL)5j^MX#O-qsc(h-afE0kwYEH5L-#1Lx;4rrw#P!=T}IU*3jpArKGJ8--+;Eki*bwg67iC+tr%-S{Y?x2pdEn1 zKL95_FfIjw8Yr|QMn!Wnen``}ScdEFD9g}`vkd$`$pJ;GFvNcJ?xt=5C zoS`CziDlRcg^Fa)LYS*z8$d6!Orz4vQ$)YyLm9FfP2uO3U9qMWc;PxjN{`32W<$T* z@@TEijRD%?rAl(StmHW=NLbn7G9{1vjcLaOJ37@EcbL7(I0!?g|7iu4VHH#|0uW4N zSbN^0S#A@8nQ)(sig{7b?*R}%sy%>{+JB5$%Mu!VZ3IZz6vtOBp$HIiz|}rfghUO| z*g+bWV5rA?M0a)ujYDfj9Miy8kU^`EfF#640=W;31{A1UUNd&-NTlo~l{$<5cBAcS?OP9*Om*0Pmnfis^5aa0gwkjRFsQSJpcEZP>R|cY zQACy_hS*r-ZAv)em8<}BL@gQH5B+G{4v*m>hPP|M`JhH7VCtM3LoCBJ+hhJ9Lj!DH z*&XQdKdR^+vGN#)Tmrg{OP~i>~+;W^?A;LMMgXP*ci2tkF8 zdfp(*N#attQ^VZJz{YiFgC=1Ngp6ZD_{64ObGJG}S3FDMEqM6CQHkpcL79%oXhB?a zZY4~>D$n9ZCJLe+fRo{(!tg@vRx8@=ZrsqbHX2Cu9(@X6!~#^1U!AyL-7b>aua}oR;l!E|PVx5K#Lr0%nQ&Y%BtdZBT(`hplU}>$`7$z^q z_A_vw@auWKk~AkM)cb-gU+s$^{cwh{FD3`Z=l9pF6c8(k22%}qO3AK^4<56i)2-~0Qn{kV=fM2 zIZ*_pRN?^7iJw5EMAUvJ&7D4>IE;lk1Y)cf2ok~NFCY*E94dhr8xe>x7YKDv7sC!U zX!WZOBd>ESUUz7m*R6(%f+id@X+}HYKFk%GSsF9aj?$i1XGZ3}@PaYpL=`NlS+QrV z*b^%zVnr`(q4sf|+aXq@?Z}EYpB5`p3|18P!Sn8qh%YNvwATh%WJRdkWJLzEk`#(NejQkcLZA2vFhc|)oysDGZ~skj$i9$bRBt#x^|RwN%srpzs|DJjkg zF`}wJS8M2U+NQBemj`q?@d0#s;-M~_FAsGAy4B{$TG!>t5as>U!84>nNqC2#l9W1G z03ZaV4%5_1-SQe(htoU3#E&WUU`m}H@o|X3S!7JBVNl$Zx_$1-yd2UU=tD{!f=H>W zC-OEd_GNZn3n@ajx~B_RI(8`at$xMXT3^%5K}y{q1sYfCRzpRFC@dm6#Zwm_ko(hn zURvLJ# zLlh}48X3mz^aTa`S@}TC=`>>LVwV)y2eEP;X}*c54cVo>+16}F18S#{BTrCo#;F=A z1ROb22nIZ}mE{VdHKGv4Od$|^Cw)u`fdNy;6ap~@R|s@rgXM+rLf(Lip%8=<={gX> zJ1GQSBh1xnkLkvN)Y`n_n7F ztwk@x&=rfhX`+V}rpbG7v^RQyQ%%cRHZn^G&bZLZnbg*PPROLZ{YNku#PW)roI3Vr|sa@mzhM4Y98E&X1O zhjbD@@NO6JKFbybR-1+gH&NJ5H&K{7t4s!~nAiaIDKNIf*UC`q>L0ESvFU6%+iAxt$ERhj1)>jMv8Li zglME77R#IRs@OfxP%Ka?eYD%W3B96mm-f?P}g5xy0XP!E?6!$+Kwj?-v z(CaM*JECq5*~g!PJ8iE&>Iz+D~L zx^0O(Qt3IGWFEUdR;1Y%S|%$ffOjZnun01W^BE}VVn7gf1~05#vLSV7aZy5fX#dSuUjw7a*3&#DS>!N{Vwli$aK(pw7^Gqv!lriz~au#V8SD3KDC}5!qsPU8~9&T59+={xep-=vHaMk4XcBR=>bT~J1{JN%Xm>`JJ%t#n$r zGww4v`@DpiDw%6>*aAhMb+Wim(XmXIJjPF7d)X!}XyLbJi=rk5-dch$e34N!V?n{4 zCu(6b&4Gw+I&7qHD!DX6w?c7y_1^I1F>cEW@x*-(8**g|C8<)c=J)61j|fn__qr+d zhYgUq)MweFYr_DRxi%0!HV;0D7QQ6Oe_13A;5UCrSN3H?FfLrgB&YIlug6{fS-nqs zXHZ(g^RPCi+V?Q?pVOOO?^rsrT|e1EI=0$Y>yXO2%zr^;&3~bdNx84(G0Ri%kIzyT zy@|2Wm?_cqE!rNdf@||n8~zs%~ZQNB}uF``E-*UCL?=pPG4RjV}U#Ir?Ez_xd^ZkHT)PYi+M=5xpF{(s2N(FL<{k*HYyy!r6#HWfmDgMh!6N3J|e1HkKNCgG}>Xcolz2 zz79iM+pE4exatm~I5iTK-}Cx$F){{ z7%k#9B!dS4Q^%$xCddHpIp+e|>7aCzdH`go9oE;XKr>OZ1AI0XD~u>sCmY4(TsG=T zE0Bkxyh&4vF-$Yg;|W4F`wWNTeHKIW-!yJY!K0;c>)_5lYq6?BUwn(pf`W#1zM{b~ z_4pn@$`@v6P49GR&GNAgQ%Do)H^x22d;yJU>A2&B7Li%m?ke;Yz0R3_1>5OIQH>ESo}bAd}N3iD#(7l8_qI6I9IEAtaw*TAPgZtn-Q%KVoy~Itp zrfPT4mZVq%z^Zm67~ns|wpmDJmjmL~`^&MY6c}_U`Nk07;lY_xpntffLFpegfIn=_ z(Tx~bzMhr{nWv+wR1!^xB$PLLNhDPz@vT;t(^x@&UtKz(@h1Mr}8&4p|i1zfuS$4%1 zZI)AQmW!=aq)=_sLEI$J4{+(Kb<~c1Y{lMA?_|-TRq`<;ZuLVuKShKMFQO%B1AcqLc3Q5aC)FuGS|`Q>7Cm_q=?T7s z75@V+3K@9sVgSk=Wg_~TEK5>pH41h4Sc)}Lb{4j#;ESwrk3Q!Ic%2_)DkufHUWpQI z{iNj@R6x62voMpgBZ<3A36O%Uy|6W*2_+0NFuvoVCc0`u!m!Sp;3qAotcj_GnM6&j zr3rZ&MnWU04t!|4-Jq>FK((5rvkvdpq`fn-p0+1b=OLAk!TgMAK=h5CE~@ z0oBq5VxKc+tSgD0JY&rI+>lN}vm*SMpNb)@ibRqJ(ORwWV*{}jX|>@PLFM&6JKmJ{ zzT^SHRhDVW1(KRAmgk%kld<%1WNdsJ1awG>a6|#pGInrX1 z;E&Iw$1K=c!9o|P6V`%Ep$sxF?kWr7>dTXe@~BGj(t@!nt$~h~9;y{DjYg?Uqhywq zHr2uob*UCRe~H0L(I~H2!?MAtzR|+=tr_5Gf2mp~rH)yZb(k_=i9;i5rYTMM!pr`< zZ=ftoYUGpwZiGM*uC+cO(Flkl2llot0Fa{|;0Sn=5w+^IIQ^J8HVEJI7SIU6{5@adgx(Ue& zwJI!9lj#E7AF(O~M{QDna+B>L$aKVYTewEm8m`AMHNv%Yd^oV!Z-XxQDxxFum#_lR zl{uy{PU{5GBW0}?4m9AZKI=$YOW=wHAw~SS$~|Dt)doA=OV6gYjBIZ=E1Z|g;J~E% z$$%NVgLQSJ>%i?W2e-6Kfi0*l&6RuBXqDYhJN3}YF&) zm5G{NaV(0BYg^LZooM1fKb_qP)Ya9Po#ih@$gSx^5Jb$$37qt9%j}3H{*F%)A8W^|dCGQp` zTBOyojAf4XO*bFuzTG#TLw|O3lsD`n@HUWO*^Gm7R+|xvoc5!{nnUq*C=b*H&rmm3 zLTPT4-{3#F|4dSCZ(Z%}_0_fY)!VA3#H#zs>HPyDbnt`P&F;5TL-QMDoWPLzGNd%= z17!AN`A>YU((fd$Fp#7Q21?7boPmcu0R73(o(ZNDz2vJ}K%XE-xCU_a#)jV>KRZHrY&GO1z$N@EgS2i?nH-9{X=ml+i**$^hvVSoq_t@NW-8hb~C zlsfSXVPDYG-nXUt;zS82f5jp?%qPnyEQpgb<+iI?f5nWJ){^qkD!JIwBK_1)aBHo|O+_kd+S+Og*$H zg?t1lwf_y)fKs*lM;TjZT1~n|b}Q?a5C}ACC#ZW(jBl~`-qeYRWcZp)9Em(Djaa^P zqFRnAu{5nJOM!J^8Xb^@fYQ_GLK*YU@Ph=cbu6sVacn{zM?9K35kjq*#ol@lS3dO1 zkQElQ)AOK!*uxcFwR9l$TAg36I%)Yy)hXNYBrJRM)ApzrA6-H-XA>5q6sG|uTkMj~ zn4Yq~r)0@slAotl$Cd&cUm-g3Fb}IEYoAP+j|>}1y`c&~_{f4UMBARciM~un2Y6L% z2QF~J@&8yk!}l!sYgdVV!M$09=8P2Xn}byIj)VhztPN$VFpE9a3HJo=@d~)uu#o?; zI;A#(KpMPMEmxEJC$9jqCz5A3@=(-*jF?OxN^g@IfQj?}>LZ|JS{*_73uz@*!A=Pc zbNZtIyqsXavQ5ccGJ+z7cUlm;I_yw$AB)y&G7@q-4=_%S>+;I&sLG=;=-dvxMDEnS zRJ_3)SCBPDP>8_{G(*v2h}m+M<&8FhiM$puuRlQn4`emz00kMcxgi>-NjfvHtZ^S0 zP(~m_FfcBx+tsS1!}Ei^Ee8-{i*&GllXUQcIlfLhxpWQEX|>!*#}&SFlXQAwq|Q zGDLZU@HD}5j;S9KtxPSBQ+*6Tx$Cxu6Tb~&+gd|uN1LF4GpH&ZVl8S3jOt9FbRL{( z1!SK2iajC^#2!(L*{eMw1=}9M7tGx35xaxz5ggenb@E0i*%xh(m_)S7jy>wcM?hzX znP@Ut3Vk8}sL&w9vkeCyKsfIx)#EaFihW_8|$nGBe6`s{!r=;y#XebsV*jk6AP92B| zL^h)_`eQly(cH4ixr|!q;iXhlM1v4JS1yrRor;J^nMfs0E-z$Klh!BBdG#SBtbBX zewZq0WTHHp?aMSaJD#e*J7yiD0@G^37h7I5i>2mJ=>M0i8DvooYSpkGmmhssFR6}2 z(i+8oG3wDoeP7bv(jkwWN+ejL(T{yFS`M^vjj3`AurUt@+b*xcw2WN`;x%q6xRqeL zHKZZLQjQGTpwgPITolr4C>Lqr+8XA4m{}Udth-;K6;PcCKT@3))Izen0DesVv!VP? zLkUm|&V+moDgU_Hy~~DmcIl*{$&w`+dJi754pHDsqo*J zS)D~fGu5(+`63F}K_oL3lmbwF?_iJ;lucyXqm+ z`Pypksy!P~Nj&y6Y;t}~Uf8R!KsnC5;}~vWwGX!N&Yeb^OfoM}iV$L`4L5L_E(`-g z2t(%Eg}mirn&CG-Nh3EOxs7@WEhagkX#PRTuo*MpVd`Q1n(e}PljoJps{finm1W}gH`5i5-@0|PJ%F{c3D$KB(jI9HYlkk**82y zuK|b5D9?%?;_!kJk~Cyq zrH@S1v?vyowS6Luj|~GY?ttU=#F!VM85BqMjnahLsw|*0fsB!ty6e|E`F0 zgnNnf%@yv8_AH>Y6^hHsLe3f=Fln?vT-mL8(l?HVMG=>U^0;k|xdnG)0un%KFC0q;>pXX_8=L=~I!Kb4o-1wxt$$YScyYkUrM^)#~ zIzlj7Y59bnl*$bQZpxPcxcL8c_a<<1ob{b|S08iFXk_G5vfVQXJhr7#--m32+j7Yk z7M75FfH5BRQ7w%$njUx0*cOB^vJDBhITA=%2qq2??j$532@Bo?2y7A{yWDZW#E`JN z1Wd9ayvyPD`+J_M?wUisNb-K(9lKOrPd&%~d7l6Czn`bZ-(Z%jFEIT4^=K(m_g3*s z=*RHK6V6aD@Tsn<55RbJwrQwA5%3kH5ekWUfHYgV@szZQVsJc-*mY>uqEs7++|qGI ztlgVm#I`fYu|+L9MqUBz*u}IMk(HtG6A`m2WTq9x7p;^OlhoQoCD8A!E75&aI+9)* zx25Ei&{~xy3sRa!xe-|;ZxeLd%q|UXvhh4lC9wzrkY7?DA)f{iaj2^g7(;-Il$i{G zGX}OEa7Nr(4IBt5az_xfcG?4`FVmq2p~jo>rPZ_Sn<;)8hpW*whG-DPF@vd2PBrrRpNsXkeR6*_=Sw?R+C$s0`a!0O~NlZ+C% zGWV!S9$%e|0Z)U$P__?OqPGzPfuR3mnL0obR_4E$pC*rqy+EFSpqoTVBx|B_R=}k> z9@=U2NW3{i;75!v4Jr~WR{1GqHySL}=MLzv&XeVNIev*lPPU~xLgEL$11rc%q#6TT+`Nr1`MVM5^c{RS)1pxCJ&T_JjBWnL+G%5C`5o#tiDL4Mop{ zW^j}JRuW|&#|&=j&EUC=B1jX=Ac7xD*l4pbIhhKe7Hh}w6B@}}s6-HyW> zBey~+qnAU-;g+4FV$kq-9Z9Y#%|F+e)5RrNajKT_lrkkUAuA(fb*z)kUhlj4xdHVOiZs};{g?se#^MAK^w9+;|?|C;r zZ#6%c@8Rdy=j`uge!p$e{Ql5aJ4Y)ovdKTY>S*OdpS;dIJbYJakGd17y!*e?naZ}x z@)vafgj4y%7xm*$W8?3Zh-dP=?5j$es(i`Z-yW^}@Nbmx{;18f;!|DsD^%HMKwZ7ISq3D5ac5*FxUPGS`xmyq%w1;uH-<-1TczzX%06Diw(hV)AD2jL6ix& z{pi^FrxYRj1wbE7^#vkC-~BS3=#*^2j&yqjz~nw6o)w8XNz50z`@|53Ns|ZZA)@W zC1VVMF(!Z=`Qa$-Ypy0(Sji#ATE2$ykd6WcHM3{TPXR)h<7gg7VPcuFIaLtWB^rYR z8jZlLnd~3_&48=fIp<~9m1rG_4rS$b)_dqKYUeKyroaiWfTdU9CyI?^KbPs%;sNbs zvXE0x@okd{_M;d_01uc}K!#LyQJCt?6+EUC7;>`eRbWHIi z{8UN+V`ya&@Oh2f-M)M4nzZxqmGT zpi*C8J>;BvP@ILN1n~s@2QY63hOr1=%kBO-5Q?G7p<63&#{qA=)1 z&bPGI#6kCSxJG4OC^%HP9G{>3OXiosh*iy*2JfN4gcFHGh?Sr+oCYG?Q9ebWg4YIB zJj~{5y+|<+l0=6pua%+K;tCR)87ou`#tA|g?x+S(M}iaTM5cX2ocG@D9ZlGodXSN& zKiz2qZoinVn^sp83$or%Ia`W329agSe*fLc!Mm-~-AC3wX44v^HLu2A3`)st?W2?o zwZ?~vB&V4dT@V^67Z{}_68P$=Qsy;QLuB|LW6?zKL#h&D5?h6L5f;2J9T>|t%hVhP zCH}9^yl}BuPzf1z`zJGHCf{^UrtoN%lcNT;SF(Ae&yZ+nC zk3LOhnBdkek3m}Gdn81@jc3~jTp+Lj4QTH-pi$ryaBN}VO-EoYJ0qN(lN`7(ieAG( zmX%kjY$2K>F;Ur!1f~dKUZc2f)g8L!RF-D;OZPlEkz0nEVW9{G|f|!=Ydt`QfSf!1nPvSnd{7}bZQ1`&$7vsZ# z#*D`h^{o4=zH$4{0$}*}5Hf5&YVxZi5vWR-13j;<=`(=+Hf&L&c9=wsAnN=VAK|Y|DWL$2zh_y zyFp67OoyhCE!3o4e5@Hvw1w!+-0rjJ`rKr{zRTVqrHihU`f!y+*sG~PPjR zP7W$SH)>e2DK%`RugTHm@Uh7;D;P)UFJw>RVP$AHYStJy)YZtwPzn%@H~6Bl9ws() zMdMNNvq2IQ(X0=YBkFsOx&6osTlb19$pOYdhl7W`*GNe;IdDwc`NSA4 z@?h*#-BF(ylgMQKI>|AaiH8w1!G$C{Kv(i8IS_pPsDJnnHg=0X=x0Kom}-|D0t-W_(){aWFf_k)BuU3ID3ZvIf!j&sJwCz$&+A9CR@9esj z2ng%WLZh)l5@(?KLQZkx`H*km2=|};CCS-y58Q<1Nd@NY&q!PLV4GvrruM)9U0Q;uO+a)hB zbv&$^H*E~Z=*CdrI{djlb7;CiGHaAY-=|8Lkji!&S95WN&z_o^g(}G2j?843pvY>M zxQ{>)gSe)DinXLZWCuS6MIJpGv0Eq1=Z0enAcepvHHblxkzz>d6LWQ|>}?Y!1rp2> zKo^`G2|`AoyP+7AkxD2AWdtf7WSejxTtm>?$stiV$dyQus+t%vwRS5cr>dM7!2n25 z$e_tBP0V!COk}W>@g?i|tjQ4(I=c9)lC}eiAv+yt z%)|%^ih@!`6gcQS$K!C$*!D=0`N91w%D*#`v=xo$cGe_hxCfQh3y-O1j$x8ws`l*E zkxD8#w349F2Z*P!aOli6^oy0<2>OW7VOo`HGA?U8^RrH`Cx$hb^wk_HW~N%8PdX-c zCjzVKGZSoLhEYQCR-oeB*d3iDWT5W$oxU+U8Zw{X_qxKj)HUK^+8lJnjM5N%E<7j^ z41epuYb;@o;guY(Bu0n9Q{g&3B&TSG*M#esjKg-bj?wGTg6w9U|Iz0Rm@SqJ1u+pv zwWkz@gh^j(gcYjqEScCwZ9g}L9|<_j7xNg|J=t&Jvg3yfhG@25faj9M|9K8Z^HYfubLE#l2heK?OI3{w;B+BY$6Qh12CPv)AP&-DQC@^|6h`?v!vY@Y`*Y|VE zEVgS#MuBs%p#z?LO!992uSj_K63IW{kQVd+>a8H8=u3i zDxn5-K*&n&zRFKzTOvjR<`f~4#I~n+Y#(%k6s&v=A$d*#tm0t$D`uR@#MdhQGAjZ44h-*!Xwevkr6HoECVLfK@F|?( zMf42z$=C~7LjIKD^C%6eVR^C!*RasxJPTK^A^-ZZio-JZjG8r+z-&=oq?1O5|HbKP z{CLiWdji_28UmSNgF7RrBog*UB!^489Y!rMa3f%i-zENIG`B&{ayCyGj)w8EL1(y) zOgileJ2H0rTOgN0-XoHQeYsQ}?#iWWJB`2(%9u=nT)JK+9kbo_Ou(OR9WHAo9%ZQWEn1%TZ3Os#Arqg92;2e)M7%n zbw)j#i8KWxRL=eslw&^Cee1+HMIaCq;dw@4)p(_EF*(|{xkvTj7im*w1N6qvY@)qK z$v(2UUS?jLwg@eGIC3kmDM&ClUT68XXbB2F{u7ze45%@5K+IGkI{YL`3J>-%;}I}v z#N3G%oq#KM8|OaBm{^ zS|^SY&14whqNb?Kgp`J_Xzmm>%ChgypCJ(@lvIH*%#Q^rTKU2XkThG+Z^S8FrYjkb zW`^|{o))tos7Djx!@+^8hL*j{c9YFDFe+qDYuf#U)7u&uiqSx&j9zX?F(T&$hI8q& z3Vcmr1r=arf&ikBm6OpBmP74?9b=MAbSC?c@o7ez zu5F5bs_}rYHszrj$%e;5ForV5pO!@^ETBLnKuJ~u0#)E4!X~s9;Z}m!I-*@ zquelgM20^b*A5zFFS7arWX9zfCjzN7BSQ=e-ZuLmN&3Vutx0OP!;0G<#U3eYK&>07 z41plY7;^xOxaL7wI;7e_j*&h?_Txj6A* zb*>k#&Go{yxp26zZt=v5Tp-CEZEYSww$clxL1@Nc;-iNi7_x3pk%=3Y*T*)%L499_ zg4hcJbm3bod~?O%MtlXvpuYvF5P*SI0TQ4FDg;DWF>^YD16|0X3Yw87&d?!qF0xTD zq-bfTjHOkR6jP`Ox>T(46GL@^jR&IZuhQPF@qZHEiimE?r5E6nzV0ymo{`ufK3fx` zV4SlOoh~I4ZjKT+Tr4?m2x}=TGJ1(KVqZc=38;;sGElqr>~v8tKtUf7!E3OL zOhhwSIm3~hfso-C%a0Z?YcDyBxX~xu53_)q+n{U=mI|^%~`3FM7ff-oUY3)1`Yxk=cPVjQj4%!OgtkeR6O!LHCNWXEe0{q@$}_ z0#iXxrVj2bUmr}?xd9U@8@(LB)&&zX5CRj!w?<$!nEflkw1QX<%>Ks$GdZNWMW=-S zaa}Vxym@j|$EvX>E6HyOTm&2p?;((Zc%N%VL1hE7Ml(5TkClZ)Ag0CP{*Xyj3S*zJ zvY83gj)~Q?JK+ip_oAUP0hrM-DY471KzG+}12p%ec!pobGunIar_=qZx5=@)`I{Jn z=Mv7vNQz7YCp{Qq;Q^i9&P|Qlp`ptBVwBMYYC=WFMohUur3`cC?oe_ROyulcKxDS0 zqYAk+iwU!S2PcI!lXwjGvE&%DW2%SnFQ$CosM(d)fi`p8D#kTZ0A-!oHHYa=4had- z&{Y`1YZ{|n@}rxH>KiMg+7=80V4$d2fPwnR`oQi}J;0Kyh!!PWV3=aJLj|+Yik>;J*D9vJ7b#m7$zTkxWH5;K7oQ-jLo++=wq6=QgJE+9LA!%jBZ< z^xe;iUI$^(Yg1UAmA^E3e3~v=Re8Xqyv!GXS>Aq1kVnS4pRA}^Yx`B754ZI=^1N*@ z-UqK3=*9TR9Ut9l-0@&)NYm)O{}G1z!J zBR-pz=8_!S9?=;I6G}wM+(5mK)h;(kp^UUAHc%>hbix`%ltz&#MXafX6E{T(w3eh@ zDl>ZLip()(=6z4eR4$avh{WLJQC^+AGpuAHN+*3Klb;t$w7w{$WR50@ag&5*ziS4M zvBU_3?&+5ZGo%v%Cz2!+hHgQ|(XMi7HYAg-jI3F>5ljJ{YmFF>b+__)g5ThLgpUI? zzmSH(U?!HcERvHOi?RJ?$Tz;rNKQt7pd0eQm~<0Y+w0d&la6}!e1*cvu<9J$8M(=} zg4Gg6KOz5-nN)larlG0mbrTel;IUue!WqIiHfRJQ>I|xe-sA2;nj436^PLr$B}_MD z7Ui8dhZup(1}m!?P*qXjW^w}6SK!zLU-dQcNqHrYQGLND>>b8>fJgrrj%^GP&;Xp| zlvPlPJQSmq&zlt(D6ZYl)2%a+W`0OFLE^UfQ02qn;u@gt)KUG~sYAd)Wn%;|V$#u_ zksbURD8{a4EFeKw+FOp>r&X~eKJ(&IZdf(vxDiNwgmF(6qldU@-ShLgyg*FcPi;dPf-fn1&l!Nvs=)Y@{>PLxT4zlHd~rL#^YL$rW>BwMPOm zE&WNxhTp4ij?g%!N4{Y!g21oHM2w+{8^$T!%4b4I_eO~9Q+TbR32d7&6RX)?{U0=T zO<3%xw6(<1%7Yp#^>NQ;Mitiu3L&B{4mFXB_=v)1SLI`QA`0}`=vF5d`imMJaAmDQ zZWEdsCv$>K9A}^q*sDed6?s2kLSP55Cei)%LtqEUMEt7q*kAoJp@bt`5gV1GPfGnj zB^2Rm^sWID;Ytyys8N*aQ}*1bPEfx`&0D@Ad>ST$noKfr`y_L+yb zhHJC)1hpI0gg(iu#nI%j0?kAOOdxu;V)ur}czV>m;j~5m3V?U_hO;0@@-aLz{I$Vw zgsr%5!heUdXG1JmiI}@q{|Ajbsc{of+ak;I#K8wEoFArDN75tm*zM)03Qidl0+^6Z z1!+PDAiLJSq8H@-nepyfd8n`QQ@R+$aZ>?Bkb}Aq|BuN2h+iVuLYNXrAq$6XrY7q~PvC2_F^aGm& zl!#i{&$mY^54um_k3`tznOt2ah>=dyX-~y4HXD-xRiRHd5S=Vy$Bld#KukWtgy<{- zk7`$oEAn9iG5JDSFoCSdg8d_ug}O0yFjzz$Vj>qBX*6`R-3yHZ1~@X3&WFa$9ivw; z^GO4l8j{ds&MH|c;^2IhfFl*n3OL4^=iAc|VJi-dR}-$+FpPC%9ZnlZ))D*b=CVRg zUr)%Pb;XmgiO5H)t#pMn-;V4vQxaA)Qx|UxQlW zREaARMI`e?FTN7pN5Q}fVLU=nJ=vJdL;U($SG-IRKdU^?CG~GYsas9zeo|i=N==&7 ztEn#$@Ha&s<74tSdJ9$%v5#G80IXn9f%(4w)&-Mb(Nlp52q7?6H*LXuw5FkgU_Ii0 z*A|Wk%mVPL-Z&8sdMW@InGgUPk#673XpRJ9VshD-)<*+K`?J2Hu8#-0NqjswIuKxm zxjkTi7=?R-bm+J~&MODUw#j7_K4O7q5^pcePvc;03%_ij3C7t;Vm1dabR-^jiVhJK3E#M& z=UazA?3^MhT)mFb&4`8r8FmdLTyfyae=sNfZZsA}5ADXY_X6rG7x??1BUjw>*~m?d z6?PxyTj}&9RvBcuillSIJMWZfc`~8fFTVI)2!oo9%C{o(7;~M)%GVW(chvt@hu8pg zd4Sh*C}PUEItwN-8E_+4Jn~<@yyFJUI*AFEqy!c_rB^%@xdD(8?=t2o9~yBN*_+;l zg^nGU0RVlcZpYTv$7wfIX1nB9f|+S0)JDcKotD5&Gku6LM7SD;Q4z)Phoo`=(vp8D zjhrQ^qg$bT%h)`IfA>^4A~uXbb?Ti1VPPqzS5>%K1x^QBDv)_I`d7W^?{+xX$dRmEphj@Ov#U-_MCTUWC86e>vQv{>9Dw z?PxD`7VA4|jeNFR&DNU5Y9?1LrW(aUHeJeOQ`uUhnD_F{dOlq(SDQQLW^3(g`^1iV ztL^RRwCg)Mi|ri?)x|}xJwM&<0NHqCA2okE5s7T#9)6w(J%5z<;pe>oxs~^-@_2RD z)b%0i8YWHfpUu_ws*TzC!^!6CoVPPM6!}ZukCFa0?hbcd`U{?e^5djEoh$sD;<;U& zZ?ujl+up)lweBT5i`Dkx5b0Z-@yO}iwTE`03Jk z{~NVGQ$JGWf56C2rwtf~mliv;uXgV9VfcG~gL;vM*QvK>7Zzt*^HUclXFJJ;x6t%A9_1A5;TkXT%qQ$qJ zOatwKY$T~=O;TrRVWHKgaj)H;Z|zJrX6@v)y~U;We6pHcXmyyz+q~p$)wv~aY2LeI z!K;%$N%B%v-8ksg4;X~r)mk`l#R+C=XL5Gm!6fNR?b*c>$!5EH+`GNiK9+1&XXlpM z-hsurtGszzXlL?9Cb@NcC)qjCS@e!4n@jU`Rol&c<$=nzSMD^AG<$q$ZgF;D4xE}j zu9kM~zn;Eymb~QL>@jcd!~sA1>^w-cWNTW{(Hp&5a##Dr!eT2~*}q5Qury!24Zy0k zId4~WZcZy*ne?`9GEOsK7TOy$2pu054Xf!SMB#=zZlr^qggt;t=jI&r2RzTwLhv+_9t4sta9rbW!E0^FVsEv)$`#x1HJU;|WN`Ux0s4 z;rHykC~$RdrcM#_wnwK#hePCmiTyN57!-BzsB_kT*{;CA%1U4j4J>vax2#blou@& zjG|x2Xc2@HLzm9=pOr@!&NA~}v|D{la%tTOe$lZcSMWUPr#%3SPv!SkuBUP7x7yQR z&~Me<_Plv5P)jc(k*R*WmVa*kSoh}UcC_Z}p15Nqayj)roBLBCELU(3{sLI0{Dk27 zLY|*23@oA+3>uDln+I2IH2~ogw7-`+-vRT|nCLHP>mvKueZH9I>ld3PGvUyk*~ZM$ z!pvgJAjr&|H-Bww-a82IK=`6N=Fc0jyg0aTBQ=;4&FwUo=2vqVq-$O^_t{nHIiB-e z;&b8re5)=};wp1>78{o1EZXsXkoHB7k8|nXtS(mPlI^8=(W#_?Tm)EraOcjBw>SfF zY%}%A&Jn{gTl1{XnwP9Ic#t_wTynu{`$fR^K`Y;gMYNj83{(?T=T~Lf$B`#y6rok{*rl+jvNzx7AgBlnZm z>-+66H}%*{)|Q%0ug!>PRLS=h@=b6*lPkc_0I1p4jvzZS?Yw7dX?Kpy9tYOrwEv7G z2oC-Yk4Ge1jdK_M*g!>Elc0=vs%E*_TAFWwBgf%?VweqYe%5Qyn|Y|c653u9bXl1K z>K$oy7MU={0I3BmnfDeAcMc_mDyi0te4qyXRIgEOG}>OLgNP@QC3sSnE+-8tg|*Mu z+O105_2JIxRY3M2Y0>W-ZjfQCJ1FF-Kxut@a7HY3Qk&YzD$R zzOZ;g6>c}HNMgD#OtjjplvcZX*h?Pw8na8sL+|EVt%W2R5I;;K8nLOornPV(GCIpC=#*+<^~^WsyxDn+HnZ~!ODw#qWF6LAkSvT41z<%lEn19u zq1SHBx4LkdMFKZICPZGE*Dp$tJ!G|p0bsG!O3q1|V=h`tZI)VX zsdK`+1G#IlTZKt$Fg6;~dK<#9z2V(9OJ>tK`VSQn%v5%~I)B0>cLMO$j^5JB(s5C% zIp&LnPs6SG!@YSkQb2oYfmKcy0+})-Eqe2eK+|-JfzZ$6-f^b2#rkPm@`&6AB{|$` zqcJpW(mrvn9-p|B-+`E+b*1Yvu47DLnBG5wG=#$r(|!%F3>zV-t3N$c5BvrE=W>4U zf<(blB!VQTS{>Vd^1|-={gW}P6Ml-j+6}E|e$KW;X&&UA=;QDCbTW9}2HlaI;nR)< zuwzkDCIr;zLz_0(au;wHoe9dl002b;Xn;WrwP;ytCERM(Ez?MGPM zB81Q*uRV7{MOV_;NaQ25bpve%?M?Mt+G^L$aYkR&FDcVshtDy*e*y0i{@KchFVfq}BSZORQ?tg+=d>Vi1z=pZ@o zFmHFvw`MHgk`Vkx@@^%s=F1;@!{<$YU!3|hdG!8mT#_Gx=dbcx=~`+KOL%{>b(`02 z&b4kAsqBe*rrn@trsnRu85IVO$&KTY^Qdc*x!ulP=Kz~kujMF8ES6;_A+*e{y?$@9 zh6)ymTt|7yRf0!$PkwbrxGz9~p(mAU)v>=46=4}#TlDE$; z9!VZr$)PW6F3rsy61G5?>1C~jWYVp7ddRMCC_Nprh{K{czyATyOydxrZo2FD5_YXXK@Rdq?Tkcs1Q6LiOug4qZ)A>nbkwQF*WC+QaoMu4}liXx(vXX!WM zS5-&U11slS^V^Zo#9G&_B@%gDC%<>VeAv)VIqmVsoOPjDzVwQ1bQ=)v4w+gjW$ zd1!xE9=g(qL%X`-&;ctAg%c2lu0|NTz9$P^Yh|HON-uxKNpPx) z@S+kJ68w6ugkW7^q@Vo=KNTzWxJKx?QKHTjTJ0)#WgzG5>GXbg6UpI9#yJ2V--n{G zyDQ=Je(gm}IVdT`Z(47zHX_O%E28X?gyR3c60zhui6#4%7H^asdlN#*K`SZkW?j?Z zL0=H*weTE?Ag(WgDEYcpYp>)FWO5^aT!HxEcEu0nP|B6Q@Uct6hu68%NFN=_J{xgk zFA`SA2TBFBek;DPu@_lGO(1FPk(I&97uWaXi|f1AD7V$5C;OVuHbTWd2^H6e#R=99 zczXtT^IKe^6+IMdf~726tZ>^AXhc(+03w~p80w&J;C5^2@R20TqkbeQ%8rQ>Ze_Da zB5yxq+~_M`LdZ-z zDG;%ip>vYwG~NYyCBKLs?vs)zLswNlq|MQZ+h$u!9ivN1m=fT!(7 zCGFa!EO9G0z(9mJ>YFJq-FMyf+P>YeJpH5LW5^`xvh;@{U!k1zZjFm% z74<{EbxBszv-%?XFI`KtMYebS)+O7I-YKu_CxSsXdC4)#tGR^Kn);Nccgn9i#rrf5 zo4J&xHiZMKS8eFG^69tge=fS#5v~(lujG0Q*L%4>#`SrwzvcR0T#*rIAlI2(+qf!R z`?+r6x|QoqT%Y6m4%Z`G!=uOxT<393bGcl%aLsX@;CeOJuW)^c>tkG><@y%a|HBnW zraXu10eX1PoUUMe^pfh*$MrF;&u~4+^sqeoaW%MZ z<@yD#lU$R|z~I)=si~*m+Z%rbebV$4PkVrm3k7r%ffNrY44_5>r#~nyIO$ zPfeY*wSR1UYHI5g&(1LSsf}kxrq0-MzB9c8^U}eky0~U!5B8hGSXd;6VP(ZC!s3iv z*^+a~vag7>VHnjF9}wD`WNUQ32xJ#Zw77U8(qm)3S|8chRg&k)#e)^lD1%uSvSf%B zE3c~>ci;H@JR=r+0*&pdZt6x) z?Tmy-bYRMt&8C+N<36qigeHhn$j(hct3gZijTj~o)=()Q*6aPMBVE?mGXO+-oEpLf zYi9}=C$AkEx~?j|GP5z0L?jAWe*m@wYZ{4&ulFn+5zEVsB_pzD$3A~PgDLP8Ye~em zSa%Bi@w4;Wo1r}`j2e;aygRV!XqKeNN5o2fZOm^d7^*-Wj|8l8rCuI6c;a{sw_4rm z_%dLa$v3J)pu9(5tybd~8#B!sgO0VF2=Y~I5Lg50CUQk}4VP4jI`U&9kRMH^U?2?c znWlwqy|!h9=%}c8N4SM9as{>v-!{~$qvS;pbXZ+l2(T#WSZ4X`_qktEYNA#GjIXzB z&=RqUle9bVFsXc3x#b05_+|rPIRXGe8D>tch&>qB7H6BYRNF?zxQ*NrU3wh6e1E=I1zQwJ5W>S+%^{=+ zryA+mV!gHPMU2GTHM&KfE#Ko2tcD6ZKpv;@UDbtZZFUY}2e%-i7?$AK`YgBt8(j6b z6uma`CFk$re-uBd2^hfb6iGjrLM6XGl9=#)SAbM%+2eEHO{w((5 z_+Lie6FZUE8l88J$0p8F)e4fa~AKCKZC_xOL*Z12`l* z{USyI$vVNG;5f+j1bh&^%4Oc6myb}lWUu2?mf?Qk^mHnn$>#EfVyRrM)f-;(iWW0* z`?LLN2=ErAlT@#PrLgi;s|QR{{$_p)uHdfU`U_y(XF?2C`$>|A0v4>e3n3@(JNmuH)i6zcy?+SUEfd{{2KY~nJ^h4mv|r;2*lHjalwMs7&9 zXAd7)#6)D=MMFvIZ7vc&W7Fx+KU0UsJGK>Bn)^B2C4;Uks1klr-UVeYC9lfv^~(fh zWl#;q;tt-)zN5bYpKs>(3%G9KO6u=L$!+{Iv~B3c$rn#e4Q=ZN7&VVC?wDVaTjr0b zNAhlyOK_&{ND+LJ%A~TXTq>U`q>8Chs+>-x)9Fk)o6e>4=|Z}gE~U$vR3@FtWU`rD zCZ8!}ikVWTOl(s+o5^OgxokdL$QHAuY&n<8rE{5FHkZrgbA?~<^DmSZhQ0Vp&dgnWzX8ZjXCPlhe@O&T7(pkHu zJIET|4lI84BU;hlqMX+JU0kwZ2G5E^(){A?M&v|oZOiK|Bn+_7zL5fHsuW^^jEAv4 zZh5-J{b}yPf16Wo1zW=*(uEJfdt2VVGc6%pELxPNka>tKQ${+_uX2~(;{1R72M9ms zU-xkLb$^7m$C#gS{e@cW&F9M4x({Dq*XNB8ap{8LXVjza^RxP_ZXLY8W7YEs|9M3_ zb6AB=7&Z{uGG*<-cT?w6xo*A#TPSH-!@;{3^ZR11$n&SCr(aMbSZqFd>17yZ8_6mC zxDYE1p+lfUIIefitm>2kLn)v$ux+Tz{vn=Z8Y7{Ik+ zoP3|pmE;jEdYEe)S2qtHc=^V581ItAVLPTr$gg-7t=9rq@GP5v8OJ^%Qk{4-(cd2( z7#NHWvGZvxKJILco|bsZ#!b%Y(KDlGk8VkvJ8-_U)j1kJ7X4uCccLFf8u{z!7e>A~ z_@(HVqhE6#Onfu?5Ap9rzn6SC{-fysiT&6ax!{s#T)XeJZ+qKsyy%s0_|hgT;GZ_wN3oOPN8}z3Jv#4%NNpvCbVYe#tBDd(Q_ybpPi+ z@WJ`k$KG(uzgW#771Tv7L!?`r{-0`}Y*H zquKuHfuWO6KXA>(0~eif&eOMSI&<(^8n|-w?Eay?s|PL^TpGUO85i|kk{IfHPM?z) zk0q90Sv&9QfuZGh-ZJS95A}^cWoO?|VO#vntzb?J35_28Q~|{X-`UXZK$c+j4`mAv1c{TbfJ5%b$3~-umd>sqr&j`<^?my7!On zEcag&zq#+}L%T72Jmt<0J>R<~Uhdy`xlrOwKN`6EOBW5k;~!3DH#q0^jl~B}zUt-i zV~Nq&VE_2*4_!65cdTE~%zdo@!7d<() zE#4TpVQBdSrE^EO#RvPNV|~lNe%Dvx8)Kuf+v78RBXMWLNW4VnrUoXjJ$c>8xxi8w z7$fUo|MFivZRqa4h!aaB`ud{%eFOc28;7ON8&YG`zcC_m;PQ=Chw0-FV^7OWZv- zKL6%hW*XkBU-#P-`Q&H5@vUz^Ji5_E30=PXcR%{EkALyY5C7nId|s8zxaU@L?#ti!^~mLKdUNWv=l{1aeD;xR_ucgT{(%kS7wq`n_vc&1%bt0K zd(Z0*9$xzNXFmVeU-{}k{OplPa%S?*Z^ZAsa$s}3Z{x}LjV-@7asJ@R&9SowocNA- zF5Vw=`uqAf4(;D?TL1O^vG|su!Pr2oKNf`{jl|iH+2@R%p18JubN`L~(Y`ZB_Q!X{ zwnLvb_H7v189(=FGs)xeqfcA@bmGnr#m?!w^QW=r^`9|#)}S!%Xx~uZIepLTzc{gb zXdA~`IkEKcw)i=H!?ES}@oGo<*|FvO1}=?lh+W!W8n`%d=OY`>8rZRMdu(FE#D?Wp z#qWI6*~6#*@*5L75|@B#XALfYY;tjA`Ag@V98WBNWB8xm7Ap>(ym`~|M+TPvA~AH< zC9$Et(!lP4k-o*@^I|u}pEtOC*I8SJ&KTSqUw%d3d+!@LGoHRTe)4NiXKzbl`JLk@ z|E1qaUew3iSI3t>7TX-#FuI0x`y_luhB#60r|z(__I_x!_-ybj8CG&jB!-L?Pexvs zI23uoQ{Emq?abu)BgsSOe}CKCFTN<1+}3*MgWIC-KD7P3A0L{I{47~`+arexKXtxY zaE2y|TSvcHeD7GbyyL8U%c(8ZtN;1Dd-q{kRob#eF_80M-AcM0hdIsEz+|)hb^v8yx=kZl5hn;VO&J@*CD_eSlpB+s&Z;GCC+NksNfwPCFV=4L;jb7mFV&tRj${KKXI9Y0q zMicb=qUeD0Jq??Kz%y>#-p=1SzmkZ==w*B=7I%J&`XkZ(vE9Sz_=}vvh70NEP%KTI z{mx~vtqEt~8Ej(A4MM1$8NMXpFbYxUtxjy6kRF+io{3N&izfyKqW$N^-x!M&kLMsTzTz!TTsG9m z1yA?tM_My@S7+Kbf^U1VmdX`V=w+Ul&3O6zG)}(b&ON{GygwS*H*?dqIXV5(S+=pv z1VNK*WKiNvXTG{X6zJlN@!om2r_(948zQ{PxtJ~xx&6bP#Mzc{%d*xiFl+L=b>z-(( z`DSBA7H5>TMIY2uqmXIT%Be;wTc`rF8^7iW)>@=ejQI^lu~f*`t6nbaWtp8+q2VT; z@F-H53E`u*f|o*D&zHSyp`Q0r8Mp7*PY|>+o0pEv$o5WkDKA^D)iD})Y;VbC8gBpg znHfyeCiHS_%x?D#?^M+E7E3cec{`?K+pHK;$A~RZB zBNsn*G3>bY8A3-FM>o!BaE{N&>NTS{(au;OW-Al7SDU8y_inTVR5kOnbOSG zrDAQX`A1#D!_M!95*k~XidwB!t~N5ovWF9>S@PWJxw+epPnWbQ4HFASpK>Ns&hhW~ zRelp$d?w{?;14a#Xmi_)QBG%A*=>FY0avt;FJ!9OdOcmJr5her7)z|O zZauJj>vda~GO4ZAj=4!nn4ZQMH9hTb4cdCubz8F}2yY7MoY#~&D3xy1s#*86j;d0b zY-^!Y3O3UecF!wVAeS-&r7*VMAlznrkJAc4UNI1VbHQ8qFJ% zXR&RqznRp5>g_jp^*sb5x7DwTpe}+QUi&sLlWw$Fm*%&jqSoF{hcYrs<;q1b?F{k~5rK(pdFmuJ+se5qxOC4$}gByTqIx;;i8}>9^ zP||gRK0GVoJRNpK%{1H4YXWK7)6)le-p%74o^0V=Tlbg>sHEJ@2!M@x9SdPI<&`n- zdG(BYhM`Gj`W6=3xlE(oT9}!gpJ7KBQwAU)^fVjcrl(Di$n>ZKJy*{a3#n>7SIcDGvxjG9^ls+1)@I`1?5x zI)`AWrkc$LyteEWQ(0E(qrk9b#3vjExy~K)pKyRGhVs1N8Gfec^Un$AwwtGB>^f>E zZ=f?Gexgk2jE&7xWNCG-Ao@IeER)(>ec=f|;;W0{=~Oo=$YcD{$Q{i_rdDbe3h8>& zb0=~u2B}~xPN)0^7&w)}fSsz98l|k4tEci+cT#jRmw9aR=GB%CYb<@@2KqGE9$ZM5 zO4U@OTyUS7S4Bcpn5W`8nU-|cx*cY$mx1<+%v~DMrdnnSf^E!EPgR5_J) zpRSc*fD9MQo4`mx2U4cIYARPRH}lz4&AlMCUj8CH?lw$~l*kqez9yEcxKj!I=NyQ&qTe!W&tQ)%Du2g8-;S15Y$?C5J^2v2x&l~422FaHVyPCIS-4b zkb!xX@M4v-wSs%m^VNo(<r;Tj0+Q>5Id3XEG z!JG<}vv`s6mI^D{z`z)5 zy#%``=NqYViJkcFju6x6ZU|k)Z%#3ftJZJ2SuZx4g=Q{YE@hf!&rO9;p{J=H|?tg|>9>6BY~k`)!w%~~^8%4Q4Yve(Gf-SU&H2&XL^txziGngs?b>+XD# z71g{NI$jyqZKIlPq?+y}PqLy$rdnh6(&2RvN|$OG2Hw5w zNmu1ntDs}HR%2Z?aeTYa`1vT+W6;58-m-?uTK4n!sO*vy;Sfb(6ue9$UxIO#s`+%o zy*v}HKX2mX(1kWiXmS-RU3LYp zF#ig%22)TVmTg(2cN)z#OSKw-1z9AsTs>2FuXt=gGlhJ;R4449+$=#hQ|_)q09r^J z>eU65AJQ!jn*C;biM0yD)y=gUD#THsg3xDc=~|;+t`%!V#J(#Z2UOKevEY>&)l4Q; zs1};8dlOKtRO+6rCRr@yGpQ;)PN#{pXcpbwU9m|_*-ocFu2z}OXHml>a+HdxS~lmo zS3OpVLaCW6B9?*pNR9cXd-Y?LsFu@Sy_T2Ql*?4BC3nwbm8jL3v~ryWGSzY}U2vb3 zWsD@;hlJn^;X_rT(`JseTF00Sp<}94%U7Z3#az1NUh}ZgZ-iS}G|NmXzecqbG8)Zd zdU~aB$QGlJ%(6-l)7yMCQ!Pm1%_CmBd!Nz8rJRDW(uGRfSLSzFb41yUL5J;m!e3O3 zY5`m=TR%_G#OT!&ZWJgf@(4D$g8Q5ohI?5mt!Z>6T{;z+^(QNA)LAO2&EV3iDS6F8jw7jv zo+=mXY4^YtLEAYUr;(H4EM1f(Z5NMS>Rpm*AJTFlfC#jbmFRkDWK!ZL>l6&R>$&Aq-$OTwyW zNR@=T)e!Q_g+i^IDWe?qg1& zYH*j%r0RKTZq-H;8)^o-$8)>tbck-PQQo0(Ub;$*S}mLM8ikVkyvJ1x7Tm0*isfcg zRvoYA-lXN0@7WyKacfA=I)b`k$m^L_i)dYqRH0dJW;6Ai`}`YK0wEB(-{IpnLkt{m|>Oa=k&E)y5`>Uf}a!06*3IdRYZcxA>X6GVVa$JV$>R=X$qp0 z0V(q}FOzocP>l|9wD7dwdzPvt1 zI0ag)QEAs0S?e0|f;E#`(rWmE&w;xqkEPu6u|NwkopLA?g)*sB2HKQM z*Yh-tqS_QuQ>&TT);dC1wpnAn!RJ_gr2-`C@Z}*WvuvLPk{@T0_Wsz0z%A-pd(O|gMkwV=Z z0G7^mjx)eBCLUgf<{UfFXSC&hrp|oN7^K2xYmBRT4Dsa*HV9;RblaRew>790V2xvz zwuu%-2g5m;fs3NLy2n=lY23F4$ZQj73Ev}A)F_}DxVXt~y0)0@sRh)E83Xt6S}e2P z4vrDvq#v9TOnDU#-1M~k9{MHDnq!Nu*kThWKt78Hp*ICE{KbS$KD`OrrF79V^Yrd!q&=l;;wPEm+|J+(mD6mE`rat(&a$L zHfH0+7XDWmTQf*wIPx-0qWMvKif&s*a)aPa&@;$vSw%iDLvhMwljXpAs^T2T)!fcS zy;6Cj?RE2JVL?T&>Xl({jd~;JE{blg=}mV@6dUY`YIwd&K!>9MW+Roy^jyQr2XjTr zaF?zR8k}vFf+LB_{4kBT)1@nxnufy|AJ&aVJj4|9jt6|Z`%bBHlHngy1 zS+eSa!Pmg`;AK+faw9`DN3NQ#rrbLM8X~G?x?|k|65<#Jlscv#og9#h&;|EIAoa-u z)1_J&7G1`amV|FtbfHO07+x`+!E)10_k|&bvKnevdv(^X#8Zec*?KWuPS+torE;p| zdG3p3+7aRyYG0N(Yt9?7GObbgk=Bi~bCoNomLfbMn{70z>3X(VD!9KO$=dai+K z8ZN7&Amc&W{l$M9w^yl(l2xjg*Ce94$u%vm1V)eQjjlY z*-=t=PdZ^7G()mtI5Le!E>$Xc={&JQ^=8$*)46yx+y!EcEQ!pNF|OiT$QQ&QN=5fB zN7~)Lv*`+#Anwe1JylDmi|m?l@BWWy6>^7Rpp20&Q)e?w(|xHUXMwQSS7PKh=*4KT zI8PX#U@ni6+o+cE%}fpAR&-zHh>7R(J^rXDp6TiR{0qGdBd-gx z=ITxNmz)cIc%-ap8+qP{H6pMm2?Rl5m#C+3E#=%_cAoSi#^{4g#reu?4f2RWabIq_ z6XqmOMkXOXi=%kGR1M<`qFdE{g%e(gJ?aNPOpDcGg3!^2j~R+nM2tiIC}9Gtrtp`# zuk0>?l_56)%|XH~Hqv-!v|`v-<-W?1S`l=x7o(HTUJ(T3i0b8oRZ%FW(!_}=SR`FV zIdfm_yo3t;zz{=^pyyapg3@?UgP*EsdfL>~4b|zsJQZfFQ3CL(A}H4~&>%!@h|g=f zxOj~KE}kWnLtdkcF4B&m@{v~yqUJl7wJkp7J;Y>i3iF{dSy@^F+RTxatb zq8OxmoJ;(wtpbL-(lzz^iAoj{ZebtAW64OcT=^8=X9PB@%=se;$YW>fC3II;)`6GG)ym`xwE-z5YQ z$VdtQK%v}#c>QX(-=R9w*1l$r|0>PS*MYkuzECFQvf6~95b%>PXY1~poQd9+P641 zILt;L7#d(kQ_&}-aLL_k=d~2prpquW0a+Wn8<^Kpk{JBUq z>v$?X{?9gYC2Y=bb?*8PgCS&0B)B+NZq%d+6skl_zRfwIk$3{Dh3#Yn7d4_RP@ke;6B)N-|h_cvfk^2A|ecCtq$$e z`IV>Q9ji2^rfgg6@Xg>&D=X?bt{TN0R+lG6Ba^FDy$sgK-*f^^ z)DrWO0k_pUuBC~Z%hCIpjMu1n6^dvcM3UsNkEYA+drsZcP}q2>TF>N(+sF~J zQYK8(eXn6>>oo>T>BWcF*siV6SOUZ`N0-y?``-mAHU=D$&%Nq|E|;TbJO2*Ms;){0p57DIiLN*&X^ATzhj2I+?edDje%*coAw7z!o-CCp_7>5EW5>zIA@zMY>vUG5tq#&7;TIX_N2r=a?TCC>qQp^ z@Bdg>W8&NW0*Yq;6X&c|iQW1BsI$R;6-1{0XXo@@3jGKB%>IFoIRr?Wn#mcY2T|r9 zcgFpf-B|MborICO|H}%9bvPW6%5!Ei%;5d0(+7z4+Z%u8Y_WBiZZEVJmgYE=MonpT zbw1%-&>cDZO$)Cby!6=WK;+>(bAk2Ylg^o;ioz{^YVDh9ts_|e+=+K;?PH%dz%X>5 zaT1NC8DeAXnP$bL>z7)A+p@Xs&J zectKQ@8b)9tp(m$T&ORc_-{6C;lzJ8KN?F5U+^3KqBA%%GgrqFIN$k_GeAjWn zPt$~9&j-UE)OwXb(p;`ohm|!Hc>jQN07{X!=FX79_NZo-Rb&^h9Xv8$BbA4RYD!B@PjEz6G0zYjNagtBh zGiAbR3Iro$+;2LM?WSQQYqcs;b~z6tD`wokbN=n3LU3f_Cd|}J3NTHl^6o>99GbQt z_TO~L?}ZuMZeOrv5q(iDbEXE7ci8j4<-9CPQBL3s!|Z z*Ax_9$0p&`GIEBv-*$c~q458{kvN4&h?Pyj$;EOJJsp3T`}fX|?Eu(#s{eaXVO{eT z#%eED%PZifjG3bB{)4l?^cQ>HcBpTdu=(WA1h?2zpQd+N!aO~V{T$OTJ7%u+Zr`Km zXtdIFwxcaIywV;x6I@nhHv!@^mP+V0&iL;*S9X_emWuPH-lAV^x@`C35bXh%nb;~U*b&iPcrjbS)^=uZYHkBqM;eQ!h)OtnIMOl*(U9>lfjcwJsBy*1U z;b5pddlYgFOx#WPyUwi|W}n<(LHEbiHXp=9g$LepAKqh^(wSv^Dov(J{jlSVgwn!{ zU4`wN=;&IFeGK>(bJbF#nXQ)He{}wR-TvQm{=I`Az8}IA+!=@U$ufv=zgnN#Yi!ufCfQTfW$0X?kHD))8kU$?R zqncbZO1m^Ad5RQQ^XIN1Bx<1T>orrs5TM}j4#{xFHizIt=34Lfbbj}Q#_2hc)>jPe>?Jr zuL9Y(o5SLB#VoQ#5konfsgO+mr6<+(tYY@p4DHcEIW2nz)`X&*W%zA=Xe6dCNZK!< z@O?jgXWeLC-)<`2#q1fJU%9WLoG%e)SxB)xGD8qs!Tnd~=Aau|=}&l5#>(o~Y@7Iz z^Yn1_)`hD{Bw{Z|TtQ7Ign8Mj`~NuF%TlzQ!Y)vDYEDlhJRfGe%>muSK=w55&>CI4 zoB5duxP6gHtqNcpECD2tIy`ER9r;PE#zcac7N>1 z!D*(o6(WQ|lN3KIBN?e2H+rGSPE*9e&~*?3E>sy2#f@jF$rZ6@vh)Y%`@TJ#UnNN2()YOouGF9sdq zOBSj^&igbcqaNeSQho#|LCBav@c3o&`Fh%GxIeRo1Wi&7Zeuk&scfhU zN+Ywv(Q`yK6BAuXHQ1G$ckhhK24$;&50(6A-;OQM=RQi5B6PZeucAql_%srkI>}4 ztT&)52zbU4a7(;fZMqsTkVX!Je1mY(6gDd2lignmwc9dhJg#jQQoydZI?_2YP|X@X z!*vST4>^W_MLld}*(psBH5=nR_vO(iy%B^h!Z@DF4bY@n#5w4`A}Th&g2MY+_j@7mHC3wI&oB%ps!huc$xAT zCF`)sR1@@ZUlUbuR>4M~`t(Fq2dhJ}T_f08vPP>jt*j2DU`c}9)l98G2pqe1IN1Pv zbzd8u{WoiARd8wv-H}C_k|nd`A%fo%y)2lxQ?K=c-PkW!39pfaivJMFnz+>0^(KC0 z`IMm**Ddk!qAsb(V60&U%dMX!rlRh?{#2AERJzwVyDzKY4xvKX8x^G?z=*8i_YcXtbd2d4xxW8=FpVK!&w66E}ZDozE0 zVepBS@P)l8YV7#|VeVD5BDhzPvBV&Itj%;5)1CX~QxB8n>EIz0ofeBV^t(m|C96yz zD4`m^b}G>EQW|l<7G-BI%pk)}2S88}+t%}iMw8r8ScA1Y}fNQWS(5$D2=4fcjtCF{EXDSEZ)u_9Tm z)v`N*AI~u#IN-8uz$YHoE7vpFLEmaY3ig?;(6&RA;mTD~BI~AEWQQInL~!;&y6(QM z#~5&px6{5hV=O=c3nH?rL>LA-gopbFvFJC##FA2vTfo4%LnH@#XB%}qN#MoX?d1Bh zu*ALf$=2$A6m#{g$8jcvPUZnD=iVFbildgX7VKfP>72de5W$&YYyeg8lF(VUsO53X z)vNA1qUm6ISCmC8JuY*&kSUkum)zg%wWo0_`r36meQ>dT&{wDZ&_Fib zc};l`o5Y8L*6w}LP=KGEEUK8Eo-+rb`jY+Q8;5#|tvO5&$ezh#Fm-<`x+B$53K96~oHX*z=o8tCdHn*R+iUpy3ULd!DW?>(GhdPn zV$Zvx3j64izI54Fc@+<75OszSbb{uxP0p&x!o`RKB7VkwcaLDL72)%NrcE>W^GY1N zgr34t3+`_}q5iBduY~)PVpkdX!~WlT8asN-VDAUYRAxBp@s*3ZXbD&$9 zJ;V93``#xcL#;o?E4Kcl01-mYu_V$hN<>M&FDlPPm(T@3JwZKurJz>kI1a2=)j|Um zwFvd-&qgEo@GzLvkInFXB5f6L&cABkb<^h9!@y@Y&3Q5AV@`zSb-cli90E7pZYhhC zFgYXlJA*jy8cTH)gXn;EA1v{~$7pO_Ch@3a`O_&&vZi2-!$gv9u*rbK zx}oqn_OYfAo9h=QjZQ@sxZZ-GWNN!fhx&?Ke_Fx^7d5b!pIF9 zFdHfKu<2D5KH5oKJX~9vJGR|+{o*0>wR2;dx_ARyn51cLKRnl}aYpyW8{pD>a)KD% S?b@%^xp<%hjoXfH`~L# + + + + +

+ #### +

+ + + + diff --git a/package-lock.json b/package-lock.json index 6891208..67a7fd4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,20 +19,12 @@ "typescript": "^4.9.5" } }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", "dev": true, + "license": "MIT", "dependencies": { "eslint-visitor-keys": "^3.3.0" }, @@ -44,19 +36,21 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.9.1.tgz", - "integrity": "sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", + "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", "dev": true, + "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", - "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -75,34 +69,86 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/@eslint/js": { - "version": "8.50.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.50.0.tgz", - "integrity": "sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", "dev": true, + "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.11", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", - "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "deprecated": "Use @eslint/config-array instead", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", "minimatch": "^3.0.5" }, "engines": { "node": ">=10.10.0" } }, + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=12.22" }, @@ -112,16 +158,19 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@mole-inc/bin-wrapper": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/@mole-inc/bin-wrapper/-/bin-wrapper-8.0.1.tgz", "integrity": "sha512-sTGoeZnjI8N4KS+sW2AN95gDBErhAguvkw/tWdCjeM8bvxpz5lqrnd0vOJABA1A+Ic3zED7PYoLP/RANLgVotA==", "dev": true, + "license": "MIT", "dependencies": { "bin-check": "^4.1.0", "bin-version-check": "^5.0.0", @@ -141,6 +190,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -154,6 +204,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } @@ -163,6 +214,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -176,6 +228,7 @@ "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -184,14 +237,16 @@ } }, "node_modules/@swc/cli": { - "version": "0.1.62", - "resolved": "https://registry.npmjs.org/@swc/cli/-/cli-0.1.62.tgz", - "integrity": "sha512-kOFLjKY3XH1DWLfXL1/B5MizeNorHR8wHKEi92S/Zi9Md/AK17KSqR8MgyRJ6C1fhKHvbBCl8wboyKAFXStkYw==", + "version": "0.1.65", + "resolved": "https://registry.npmjs.org/@swc/cli/-/cli-0.1.65.tgz", + "integrity": "sha512-4NcgsvJVHhA7trDnMmkGLLvWMHu2kSy+qHx6QwRhhJhdiYdNUrhdp+ERxen73sYtaeEOYeLJcWrQ60nzKi6rpg==", "dev": true, + "license": "MIT", "dependencies": { "@mole-inc/bin-wrapper": "^8.0.1", "commander": "^7.1.0", "fast-glob": "^3.2.5", + "minimatch": "^9.0.3", "semver": "^7.3.8", "slash": "3.0.0", "source-map": "^0.7.3" @@ -215,11 +270,16 @@ } }, "node_modules/@swc/core": { - "version": "1.3.37", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.37.tgz", - "integrity": "sha512-VOFlEQ1pReOM73N9A7R8rt561GU8Rxsq833jiimWDUB2sXEN3V6n6wFTgYmZuMz2T4/R0cQA1nV48KkaT4gkFw==", + "version": "1.7.25", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.7.25.tgz", + "integrity": "sha512-EWTWdb0GD+Z9CByvW5j5b9d1cFr9P6hy7TkGgAwnhKxGwzGu8BHTG3ou28KY6P57yZXDVKB0exWmSNRIv6LYCg==", "dev": true, "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3", + "@swc/types": "^0.1.12" + }, "engines": { "node": ">=10" }, @@ -228,26 +288,35 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-darwin-arm64": "1.3.37", - "@swc/core-darwin-x64": "1.3.37", - "@swc/core-linux-arm-gnueabihf": "1.3.37", - "@swc/core-linux-arm64-gnu": "1.3.37", - "@swc/core-linux-arm64-musl": "1.3.37", - "@swc/core-linux-x64-gnu": "1.3.37", - "@swc/core-linux-x64-musl": "1.3.37", - "@swc/core-win32-arm64-msvc": "1.3.37", - "@swc/core-win32-ia32-msvc": "1.3.37", - "@swc/core-win32-x64-msvc": "1.3.37" + "@swc/core-darwin-arm64": "1.7.25", + "@swc/core-darwin-x64": "1.7.25", + "@swc/core-linux-arm-gnueabihf": "1.7.25", + "@swc/core-linux-arm64-gnu": "1.7.25", + "@swc/core-linux-arm64-musl": "1.7.25", + "@swc/core-linux-x64-gnu": "1.7.25", + "@swc/core-linux-x64-musl": "1.7.25", + "@swc/core-win32-arm64-msvc": "1.7.25", + "@swc/core-win32-ia32-msvc": "1.7.25", + "@swc/core-win32-x64-msvc": "1.7.25" + }, + "peerDependencies": { + "@swc/helpers": "*" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } } }, "node_modules/@swc/core-darwin-arm64": { - "version": "1.3.37", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.37.tgz", - "integrity": "sha512-iIyVqqioUpVeT/hbBVfkrsjfCyL4idNH+LVKGmoTAWaTTSB0+UNhNuA7Wh2CqIHWh1Mv7IlumitWPcqsVDdoEw==", + "version": "1.7.25", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.7.25.tgz", + "integrity": "sha512-cbLNV4vsqSbll7kehJ58hZ9lt+nLlUPF+fmSRVsb4Qasnr0IRDtpT+3Rc87bDNXfkc15Ii80xdp7sU2MVgHn7A==", "cpu": [ "arm64" ], "dev": true, + "license": "Apache-2.0 AND MIT", "optional": true, "os": [ "darwin" @@ -257,13 +326,14 @@ } }, "node_modules/@swc/core-darwin-x64": { - "version": "1.3.37", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.37.tgz", - "integrity": "sha512-dao5nXPWKxtaxqak4ZkRyBoApNIelW/glantQhPhj0FjMjuIQc+v03ldJ8XDByWOG+6xuVUTheANCtEccxoQBw==", + "version": "1.7.25", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.7.25.tgz", + "integrity": "sha512-kZswLBI8KWWV8VuGIJZd8GM7eWFY5srmlomiWw7j/OtRyRgr8qfX3EmxBAYYZqTEvWdooSc/y3I61lHn/a1tRg==", "cpu": [ "x64" ], "dev": true, + "license": "Apache-2.0 AND MIT", "optional": true, "os": [ "darwin" @@ -273,13 +343,14 @@ } }, "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.3.37", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.37.tgz", - "integrity": "sha512-/mVrc8H/f062CUkqKGmBiil2VIYu4mKawHxERfeP1y38X5K/OwjG5s9MgO9TVxy+Ly6vejwj70kRhSa3hVp1Bw==", + "version": "1.7.25", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.7.25.tgz", + "integrity": "sha512-DV/8BHwdtymoelC1KvefOoyXraIDK0rJIBqjPvtzW9YbkN1hepF7au1deiieJ6+A0smP+4fxtYhrnJ5EjPvylA==", "cpu": [ "arm" ], "dev": true, + "license": "Apache-2.0", "optional": true, "os": [ "linux" @@ -289,13 +360,14 @@ } }, "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.3.37", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.37.tgz", - "integrity": "sha512-eRQ3KaZI0j5LidTfOIi/kUVOOMuVmw1HCdt/Z1TAUKoHMLVxY8xcJ3pEE3/+ednI60EmHpwpJRs6LelXyL6uzQ==", + "version": "1.7.25", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.7.25.tgz", + "integrity": "sha512-lIx8BeKzpulL2PbLyMUln5Hk164M/PHXquHt6y86sD7Spza6zbCme+/Zr17PRiElqrP8byKC09UZj0K6hONDqQ==", "cpu": [ "arm64" ], "dev": true, + "license": "Apache-2.0 AND MIT", "optional": true, "os": [ "linux" @@ -305,13 +377,14 @@ } }, "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.3.37", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.37.tgz", - "integrity": "sha512-w2BRLODyxNQY2rfHZMZ5ir6QrrnGBPlnIslTrgKmVbn1OjZoxUCtuqhrYnCmybaAc4DOkeH02TqynEFXrm+EMw==", + "version": "1.7.25", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.7.25.tgz", + "integrity": "sha512-+/I7AzzY4066bvKLTyAZXLL0dPpWhRUh0ja4cZNZ+0Gpn8FmtWDwZKCriIWkDlD1gSuXm8+iOaaLGhEwIquOpQ==", "cpu": [ "arm64" ], "dev": true, + "license": "Apache-2.0 AND MIT", "optional": true, "os": [ "linux" @@ -321,13 +394,14 @@ } }, "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.3.37", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.37.tgz", - "integrity": "sha512-CfoH8EsZJZ9kunjMUjBNYD5fFuO86zw+K/o4wEw72Yg6ZEiqPmeIlCKU8tpTv4sK+CbhUXrmVzMB5tqsb2jALQ==", + "version": "1.7.25", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.7.25.tgz", + "integrity": "sha512-BPtnKyiBVMZyN6ml7oHGX9wuSLHN06nT1x1TM9wcSKSx6y+BEKb8jSmzrKzM7K5LnfOiy4+ARCb4HrMkXIQjUg==", "cpu": [ "x64" ], "dev": true, + "license": "Apache-2.0 AND MIT", "optional": true, "os": [ "linux" @@ -337,13 +411,14 @@ } }, "node_modules/@swc/core-linux-x64-musl": { - "version": "1.3.37", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.37.tgz", - "integrity": "sha512-9YPrHYNdoG7PK11gV51GfL45biI2dic+YTqHUDKyykemsD7Ot1zUFX7Ty//pdvpKcKSff6SrHbfFACD5ziNirA==", + "version": "1.7.25", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.7.25.tgz", + "integrity": "sha512-ZlZztuvy2hvfoYg5gYHYuc2mssgzGq1kKanF9kPdICsTmze6t7AvkSfmlTN7/YGuO//yDDJR1GR0EuXwOAJqPw==", "cpu": [ "x64" ], "dev": true, + "license": "Apache-2.0 AND MIT", "optional": true, "os": [ "linux" @@ -353,13 +428,14 @@ } }, "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.3.37", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.37.tgz", - "integrity": "sha512-h17Ek8/wCDje6BrXOvCXBM80oBRmTSMMdLyt87whTl5xqYlWYYs9oQIzZndNRTlNpTgjGO8Ns2eo4kwVxIkBIA==", + "version": "1.7.25", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.7.25.tgz", + "integrity": "sha512-k3QsHJ+53BVhRUeC7NJOMxdMGexBIhFmL8Ex39vqWVvDZgnOepMFu9/G1pm04xBHSqcb0lioDj5WirAoy4VusQ==", "cpu": [ "arm64" ], "dev": true, + "license": "Apache-2.0 AND MIT", "optional": true, "os": [ "win32" @@ -369,13 +445,14 @@ } }, "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.3.37", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.37.tgz", - "integrity": "sha512-1BR175E1olGy/zdt94cgdb6ps/lBNissAOaxyBk8taFpcjy3zpdP30yAoH0GIsC6isnZ5JfArbOJNRXXO5tE0Q==", + "version": "1.7.25", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.7.25.tgz", + "integrity": "sha512-3PW8LDgS7eIdjeGLNYhO1XLXyZJZ+aLjf79am8+HqfzVkmz+uIK39FcFxeF6A/LUsuQBMa3Geg++rS38kviMEA==", "cpu": [ "ia32" ], "dev": true, + "license": "Apache-2.0 AND MIT", "optional": true, "os": [ "win32" @@ -385,13 +462,14 @@ } }, "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.3.37", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.37.tgz", - "integrity": "sha512-1siDQ7dccQ1pesJmgAL3BUBbRPtfbNInOWnZOkiie/DfFqGQ117QKnCVyjUvwFKfTQx1+3UUTDmMSlRd00SlXg==", + "version": "1.7.25", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.7.25.tgz", + "integrity": "sha512-iYpJNfIzPwahwPgddb9PHYichdFoS/2NR4Gaemv9s6nzTguS4vx/YT1oFGwuGMP0RyOdmAN2rEfPh7sJktqWfA==", "cpu": [ "x64" ], "dev": true, + "license": "Apache-2.0 AND MIT", "optional": true, "os": [ "win32" @@ -400,11 +478,29 @@ "node": ">=10" } }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@swc/types": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.12.tgz", + "integrity": "sha512-wBJA+SdtkbFhHjTMYH+dEH1y4VpfGdAc2Kw/LK09i9bXd/K6j6PkDcFCEzb6iVfZMkPRrl/q0e3toqTAJdkIVA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3" + } + }, "node_modules/@szmarczak/http-timer": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", "dev": true, + "license": "MIT", "dependencies": { "defer-to-connect": "^2.0.0" }, @@ -416,13 +512,15 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/cacheable-request": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", "dev": true, + "license": "MIT", "dependencies": { "@types/http-cache-semantics": "*", "@types/keyv": "^3.1.4", @@ -431,58 +529,68 @@ } }, "node_modules/@types/http-cache-semantics": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", - "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", - "dev": true + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", + "dev": true, + "license": "MIT" }, "node_modules/@types/json-schema": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.13.tgz", - "integrity": "sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==", - "dev": true + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" }, "node_modules/@types/keyv": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/node": { - "version": "18.14.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.6.tgz", - "integrity": "sha512-93+VvleD3mXwlLI/xASjw0FzKcwzl3OdTCzm1LaRfqgS21gfFtK3zDXM5Op9TeeMsJVOaJ2VRDpT9q4Y3d0AvA==", - "dev": true + "version": "22.5.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.4.tgz", + "integrity": "sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.2" + } }, "node_modules/@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", + "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==", - "dev": true + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "dev": true, + "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.7.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.4.tgz", - "integrity": "sha512-DAbgDXwtX+pDkAHwiGhqP3zWUGpW49B7eqmgpPtg+BKJXwdct79ut9+ifqOFPJGClGKSHXn2PTBatCnldJRUoA==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", + "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.7.4", - "@typescript-eslint/type-utils": "6.7.4", - "@typescript-eslint/utils": "6.7.4", - "@typescript-eslint/visitor-keys": "6.7.4", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/type-utils": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -508,15 +616,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "6.7.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.7.4.tgz", - "integrity": "sha512-I5zVZFY+cw4IMZUeNCU7Sh2PO5O57F7Lr0uyhgCJmhN/BuTlnc55KxPonR4+EM3GBdfiCyGZye6DgMjtubQkmA==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", + "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "6.7.4", - "@typescript-eslint/types": "6.7.4", - "@typescript-eslint/typescript-estree": "6.7.4", - "@typescript-eslint/visitor-keys": "6.7.4", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4" }, "engines": { @@ -536,13 +645,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.7.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.4.tgz", - "integrity": "sha512-SdGqSLUPTXAXi7c3Ob7peAGVnmMoGzZ361VswK2Mqf8UOYcODiYvs8rs5ILqEdfvX1lE7wEZbLyELCW+Yrql1A==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", + "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.7.4", - "@typescript-eslint/visitor-keys": "6.7.4" + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -553,13 +663,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.7.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.7.4.tgz", - "integrity": "sha512-n+g3zi1QzpcAdHFP9KQF+rEFxMb2KxtnJGID3teA/nxKHOVi3ylKovaqEzGBbVY2pBttU6z85gp0D00ufLzViQ==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", + "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "6.7.4", - "@typescript-eslint/utils": "6.7.4", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/utils": "6.21.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -580,10 +691,11 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "6.7.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.4.tgz", - "integrity": "sha512-o9XWK2FLW6eSS/0r/tgjAGsYasLAnOWg7hvZ/dGYSSNjCh+49k5ocPN8OmG5aZcSJ8pclSOyVKP2x03Sj+RrCA==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", "dev": true, + "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -593,16 +705,18 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.7.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.4.tgz", - "integrity": "sha512-ty8b5qHKatlNYd9vmpHooQz3Vki3gG+3PchmtsA4TgrZBKWHNjWfkQid7K7xQogBqqc7/BhGazxMD5vr6Ha+iQ==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", + "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "6.7.4", - "@typescript-eslint/visitor-keys": "6.7.4", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", + "minimatch": "9.0.3", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" }, @@ -619,18 +733,35 @@ } } }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@typescript-eslint/utils": { - "version": "6.7.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.7.4.tgz", - "integrity": "sha512-PRQAs+HUn85Qdk+khAxsVV+oULy3VkbH3hQ8hxLRJXWBEd7iI+GbQxH5SEUSH7kbEoTp6oT1bOwyga24ELALTA==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", + "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.7.4", - "@typescript-eslint/types": "6.7.4", - "@typescript-eslint/typescript-estree": "6.7.4", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", "semver": "^7.5.4" }, "engines": { @@ -645,12 +776,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.7.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.4.tgz", - "integrity": "sha512-pOW37DUhlTZbvph50x5zZCkFn3xzwkGtNoJHzIM3svpiSkJzwOYr/kVBaXmf+RAQiUDs1AHEZVNPg6UJCJpwRA==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", + "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.7.4", + "@typescript-eslint/types": "6.21.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -661,11 +793,19 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true, + "license": "ISC" + }, "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -678,6 +818,7 @@ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, + "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -687,6 +828,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -703,6 +845,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -712,6 +855,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -740,19 +884,22 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "dev": true, + "license": "Python-2.0" }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -761,13 +908,15 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/bin-check": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-4.1.0.tgz", "integrity": "sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==", "dev": true, + "license": "MIT", "dependencies": { "execa": "^0.7.0", "executable": "^4.1.0" @@ -781,6 +930,7 @@ "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-6.0.0.tgz", "integrity": "sha512-nk5wEsP4RiKjG+vF+uG8lFsEn4d7Y6FVDamzzftSunXOoOcOOkzcWdKVlGgFFwlUQCj63SgnUkLLGF8v7lufhw==", "dev": true, + "license": "MIT", "dependencies": { "execa": "^5.0.0", "find-versions": "^5.0.0" @@ -793,14 +943,15 @@ } }, "node_modules/bin-version-check": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-5.0.0.tgz", - "integrity": "sha512-Q3FMQnS5eZmrBGqmDXLs4dbAn/f+52voP6ykJYmweSA60t6DyH4UTSwZhtbK5UH+LBoWvDljILUQMLRUtsynsA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-5.1.0.tgz", + "integrity": "sha512-bYsvMqJ8yNGILLz1KP9zKLzQ6YpljV3ln1gqhuLkUtyfGi3qXKGuK2p+U4NAvjVFzDFiBBtOpCOSFNuYYEGZ5g==", "dev": true, + "license": "MIT", "dependencies": { "bin-version": "^6.0.0", - "semver": "^7.3.5", - "semver-truncate": "^2.0.0" + "semver": "^7.5.3", + "semver-truncate": "^3.0.0" }, "engines": { "node": ">=12" @@ -809,25 +960,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/bin-version/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/bin-version/node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -851,6 +989,7 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -863,6 +1002,7 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -875,6 +1015,7 @@ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.0.0" }, @@ -882,68 +1023,24 @@ "node": ">=8" } }, - "node_modules/bin-version/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/bin-version/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/bin-version/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/bin-version/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "balanced-match": "^1.0.0" } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -954,15 +1051,17 @@ "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.6.0" } }, "node_modules/cacheable-request": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", - "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", "dev": true, + "license": "MIT", "dependencies": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", @@ -981,6 +1080,7 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, + "license": "MIT", "dependencies": { "pump": "^3.0.0" }, @@ -996,6 +1096,7 @@ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -1005,6 +1106,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -1021,6 +1123,7 @@ "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", "dev": true, + "license": "MIT", "dependencies": { "mimic-response": "^1.0.0" }, @@ -1033,6 +1136,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -1044,13 +1148,15 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/commander": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10" } @@ -1059,13 +1165,15 @@ "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" }, @@ -1074,23 +1182,28 @@ } }, "node_modules/cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, + "license": "MIT", "dependencies": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" } }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -1106,6 +1219,7 @@ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dev": true, + "license": "MIT", "dependencies": { "mimic-response": "^3.1.0" }, @@ -1121,6 +1235,7 @@ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -1132,13 +1247,15 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/defer-to-connect": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } @@ -1148,6 +1265,7 @@ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, + "license": "MIT", "dependencies": { "path-type": "^4.0.0" }, @@ -1160,6 +1278,7 @@ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, + "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -1172,35 +1291,39 @@ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, + "license": "MIT", "dependencies": { "once": "^1.4.0" } }, "node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/eslint": { - "version": "8.50.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.50.0.tgz", - "integrity": "sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.50.0", - "@humanwhocodes/config-array": "^0.11.11", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -1247,6 +1370,7 @@ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -1263,6 +1387,7 @@ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -1270,87 +1395,28 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/eslint/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/eslint/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">= 8" + "node": "*" } }, "node_modules/espree": { @@ -1358,6 +1424,7 @@ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", @@ -1371,10 +1438,11 @@ } }, "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -1387,6 +1455,7 @@ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -1399,6 +1468,7 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -1408,6 +1478,7 @@ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } @@ -1417,6 +1488,7 @@ "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", "integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^5.0.1", "get-stream": "^3.0.0", @@ -1430,11 +1502,60 @@ "node": ">=4" } }, + "node_modules/execa/node_modules/cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "node_modules/execa/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, "node_modules/executable": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", "dev": true, + "license": "MIT", "dependencies": { "pify": "^2.2.0" }, @@ -1447,6 +1568,7 @@ "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", "dev": true, + "license": "MIT", "dependencies": { "mime-db": "^1.28.0" }, @@ -1459,6 +1581,7 @@ "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", "dev": true, + "license": "MIT", "dependencies": { "ext-list": "^2.0.0", "sort-keys-length": "^1.0.0" @@ -1471,13 +1594,15 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -1489,23 +1614,39 @@ "node": ">=8.6.0" } }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } @@ -1515,6 +1656,7 @@ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, + "license": "MIT", "dependencies": { "flat-cache": "^3.0.4" }, @@ -1527,6 +1669,7 @@ "resolved": "https://registry.npmjs.org/file-type/-/file-type-17.1.6.tgz", "integrity": "sha512-hlDw5Ev+9e883s0pwUsuuYNu4tD7GgpUnOvykjv1Gya0ZIjuKumthDRua90VUn6/nlRKAjcxLUnHNTIUWwWIiw==", "dev": true, + "license": "MIT", "dependencies": { "readable-web-to-node-stream": "^3.0.2", "strtok3": "^7.0.0-alpha.9", @@ -1544,6 +1687,7 @@ "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-3.0.0.tgz", "integrity": "sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -1556,6 +1700,7 @@ "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-5.1.1.tgz", "integrity": "sha512-M45CbrJLGACfrPOkrTp3j2EcO9OBkKUYME0eiqOCa7i2poaklU0jhlIaMlr8ijLorT0uLAzrn3qXOp5684CkfA==", "dev": true, + "license": "MIT", "dependencies": { "filename-reserved-regex": "^3.0.0", "strip-outer": "^2.0.0", @@ -1569,10 +1714,11 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -1585,6 +1731,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -1601,6 +1748,7 @@ "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-5.1.0.tgz", "integrity": "sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==", "dev": true, + "license": "MIT", "dependencies": { "semver-regex": "^4.0.5" }, @@ -1612,30 +1760,33 @@ } }, "node_modules/flat-cache": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", - "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, + "license": "MIT", "dependencies": { - "flatted": "^3.2.7", + "flatted": "^3.2.9", "keyv": "^4.5.3", "rimraf": "^3.0.2" }, "engines": { - "node": ">=12.0.0" + "node": "^10.12.0 || >=12.0.0" } }, "node_modules/flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", - "dev": true + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true, + "license": "ISC" }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/fsevents": { "version": "2.3.2", @@ -1643,6 +1794,7 @@ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -1656,6 +1808,7 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -1664,7 +1817,9 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -1681,22 +1836,48 @@ } }, "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "license": "ISC", "dependencies": { - "is-glob": "^4.0.1" + "is-glob": "^4.0.3" }, "engines": { - "node": ">= 6" + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, "node_modules/globals": { - "version": "13.22.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz", - "integrity": "sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -1712,6 +1893,7 @@ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, + "license": "MIT", "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -1732,6 +1914,7 @@ "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", "dev": true, + "license": "MIT", "dependencies": { "@sindresorhus/is": "^4.0.0", "@szmarczak/http-timer": "^4.0.5", @@ -1756,13 +1939,15 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -1771,13 +1956,15 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/http2-wrapper": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", "dev": true, + "license": "MIT", "dependencies": { "quick-lru": "^5.1.1", "resolve-alpn": "^1.0.0" @@ -1791,6 +1978,7 @@ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10.17.0" } @@ -1813,13 +2001,15 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "BSD-3-Clause" }, "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } @@ -1829,6 +2019,7 @@ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -1845,6 +2036,7 @@ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.19" } @@ -1853,7 +2045,9 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -1863,13 +2057,15 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -1879,6 +2075,7 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -1891,6 +2088,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -1900,6 +2098,7 @@ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -1909,6 +2108,7 @@ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -1918,6 +2118,7 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -1926,13 +2127,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -1944,25 +2147,29 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/keyv": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", - "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, + "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } @@ -1972,6 +2179,7 @@ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -1985,6 +2193,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -1999,13 +2208,15 @@ "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lowercase-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -2015,6 +2226,7 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, + "license": "ISC", "dependencies": { "pseudomap": "^1.0.2", "yallist": "^2.1.2" @@ -2024,24 +2236,27 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -2049,10 +2264,11 @@ } }, "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "version": "1.53.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.53.0.tgz", + "integrity": "sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -2062,6 +2278,7 @@ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -2071,39 +2288,47 @@ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "*" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/normalize-url": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -2116,6 +2341,7 @@ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^2.0.0" }, @@ -2123,11 +2349,22 @@ "node": ">=4" } }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, + "license": "ISC", "dependencies": { "wrappy": "1" } @@ -2137,6 +2374,7 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -2148,17 +2386,18 @@ } }, "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, + "license": "MIT", "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" }, "engines": { "node": ">= 0.8.0" @@ -2169,6 +2408,7 @@ "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-2.0.0.tgz", "integrity": "sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==", "dev": true, + "license": "MIT", "dependencies": { "arch": "^2.1.0" }, @@ -2181,6 +2421,7 @@ "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -2190,6 +2431,7 @@ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -2199,6 +2441,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -2214,6 +2457,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -2229,6 +2473,7 @@ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -2241,6 +2486,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -2250,17 +2496,19 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/path-type": { @@ -2268,15 +2516,17 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/peek-readable": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.0.0.tgz", - "integrity": "sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.2.0.tgz", + "integrity": "sha512-U94a+eXHzct7vAd19GH3UQ2dH4Satbng0MyYTMaQatL0pvYYL5CTPR25HBhKtecl+4bfu1/i3vC6k0hydO5Vcw==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.16" }, @@ -2290,6 +2540,7 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -2302,38 +2553,41 @@ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/playwright": { - "version": "1.40.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.40.1.tgz", - "integrity": "sha512-2eHI7IioIpQ0bS1Ovg/HszsN/XKNwEG1kbzSDDmADpclKc7CyqkHw7Mg2JCz/bbCxg25QUPcjksoMW7JcIFQmw==", + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.47.0.tgz", + "integrity": "sha512-jOWiRq2pdNAX/mwLiwFYnPHpEZ4rM+fRSQpRHwEwZlP2PUANvL3+aJOF/bvISMhFD30rqMxUB4RJx9aQbfh4Ww==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.40.1" + "playwright-core": "1.47.0" }, "bin": { "playwright": "cli.js" }, "engines": { - "node": ">=16" + "node": ">=18" }, "optionalDependencies": { "fsevents": "2.3.2" } }, "node_modules/playwright-core": { - "version": "1.40.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.40.1.tgz", - "integrity": "sha512-+hkOycxPiV534c4HhpfX6yrlawqVUzITRKwHAmYfmsVreltEl6fAZJ3DPfLMOODw0H3s1Itd6MDCWmP1fl/QvQ==", + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.47.0.tgz", + "integrity": "sha512-1DyHT8OqkcfCkYUD9zzUTfg7EfTd+6a8MkD/NWOvjo0u/SCNd5YmY/lJwFvUZOxJbWNds+ei7ic2+R/cRz/PDg==", "dev": true, + "license": "Apache-2.0", "bin": { "playwright-core": "cli.js" }, "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/prelude-ls": { @@ -2341,15 +2595,17 @@ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8.0" } }, "node_modules/prettier": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", - "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", "dev": true, + "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, @@ -2364,23 +2620,26 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.1.tgz", + "integrity": "sha512-2ynnAmUu45oUSq51AQbeugLkMSKaz8FqVpZ6ykTqzOVkzXe8u/ezkGsYrFJqKZx+D9cVxoDrSbR7CeAwxFa5cQ==", "dev": true, + "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -2403,13 +2662,15 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/quick-lru": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -2418,10 +2679,11 @@ } }, "node_modules/readable-stream": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.1.tgz", - "integrity": "sha512-+rQmrWMYGA90yenhTYsLWAsLsqVC8osOw6PKE1HDYiO0gdPeKe/xDHNzIAIn4C91YQ6oenEhfYqqc1883qHbjQ==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -2436,6 +2698,7 @@ "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", "dev": true, + "license": "MIT", "dependencies": { "readable-stream": "^3.6.0" }, @@ -2451,13 +2714,15 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -2467,6 +2732,7 @@ "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", "dev": true, + "license": "MIT", "dependencies": { "lowercase-keys": "^2.0.0" }, @@ -2479,6 +2745,7 @@ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -2488,7 +2755,9 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -2518,6 +2787,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } @@ -2540,16 +2810,15 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -2562,6 +2831,7 @@ "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-4.0.5.tgz", "integrity": "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -2570,76 +2840,57 @@ } }, "node_modules/semver-truncate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-2.0.0.tgz", - "integrity": "sha512-Rh266MLDYNeML5h90ttdMwfXe1+Nc4LAWd9X1KdJe8pPHP4kFmvLZALtsMNHNdvTyQygbEC0D59sIz47DIaq8w==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-3.0.0.tgz", + "integrity": "sha512-LJWA9kSvMolR51oDE6PN3kALBNaUdkxzAGcexw8gjMA8xr5zUqK0JiR3CgARSqanYF3Z1YHvsErb1KDgh+v7Rg==", "dev": true, + "license": "MIT", "dependencies": { - "semver": "^6.0.0" + "semver": "^7.3.5" }, "engines": { - "node": ">=8" - } - }, - "node_modules/semver-truncate/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" + "node": ">=12" }, - "engines": { - "node": ">=10" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/semver/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "license": "MIT", "dependencies": { - "shebang-regex": "^1.0.0" + "shebang-regex": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -2649,6 +2900,7 @@ "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==", "dev": true, + "license": "MIT", "dependencies": { "is-plain-obj": "^1.0.0" }, @@ -2661,6 +2913,7 @@ "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", "integrity": "sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==", "dev": true, + "license": "MIT", "dependencies": { "sort-keys": "^1.0.0" }, @@ -2673,6 +2926,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">= 8" } @@ -2682,6 +2936,7 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" } @@ -2691,6 +2946,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -2703,6 +2959,7 @@ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -2712,6 +2969,7 @@ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -2721,6 +2979,7 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -2733,6 +2992,7 @@ "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-2.0.0.tgz", "integrity": "sha512-A21Xsm1XzUkK0qK1ZrytDUvqsQWict2Cykhvi0fBQntGG5JSprESasEyV1EZ/4CiR5WB5KjzLTrP/bO37B0wPg==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -2741,16 +3001,17 @@ } }, "node_modules/strtok3": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-7.0.0.tgz", - "integrity": "sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-7.1.1.tgz", + "integrity": "sha512-mKX8HA/cdBqMKUr0MMZAFssCkIGoZeSCMXgnt79yKxNFguMLVFgRe6wB+fsL0NmoHDbeyZXczy7vEPSoo3rkzg==", "dev": true, + "license": "MIT", "dependencies": { "@tokenizer/token": "^0.3.0", - "peek-readable": "^5.0.0" + "peek-readable": "^5.1.3" }, "engines": { - "node": ">=14.16" + "node": ">=16" }, "funding": { "type": "github", @@ -2762,6 +3023,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -2773,13 +3035,15 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -2792,6 +3056,7 @@ "resolved": "https://registry.npmjs.org/token-types/-/token-types-5.0.1.tgz", "integrity": "sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==", "dev": true, + "license": "MIT", "dependencies": { "@tokenizer/token": "^0.3.0", "ieee754": "^1.2.1" @@ -2809,6 +3074,7 @@ "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-2.0.0.tgz", "integrity": "sha512-QUHBFTJGdOwmp0tbOG505xAgOp/YliZP/6UgafFXYZ26WT1bvQmSMJUvkeVSASuJJHbqsFbynTvkd5W8RBTipg==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^5.0.0" }, @@ -2816,13 +3082,27 @@ "node": ">=12" } }, + "node_modules/trim-repeated/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ts-api-utils": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", - "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">=16.13.0" + "node": ">=16" }, "peerDependencies": { "typescript": ">=4.2.0" @@ -2833,6 +3113,7 @@ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -2845,6 +3126,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -2857,6 +3139,7 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -2865,11 +3148,19 @@ "node": ">=4.2.0" } }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true, + "license": "MIT" + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } @@ -2878,37 +3169,55 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, "bin": { - "which": "bin/which" + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/yallist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, diff --git a/src/fs_mem.ts b/src/fs_mem.ts index 6f540ee..261743c 100644 --- a/src/fs_mem.ts +++ b/src/fs_mem.ts @@ -151,10 +151,10 @@ export class OpenDirectory extends Fd { ret: number; dirent: wasi.Dirent | null; } { - if (debug.enabled) { + // if (debug.enabled) { debug.log("readdir_single", cookie); debug.log(cookie, this.dir.contents.keys()); - } + // } if (cookie == 0n) { return { diff --git a/src/index.ts b/src/index.ts index 5f80030..d50418e 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,6 +1,7 @@ import WASI, { WASIProcExit } from "./wasi.js"; export { WASI, WASIProcExit }; - +import { WASIFarm, WASIFarmRef, WASIFarmAnimal } from "./wasi_farm/index.js"; +export { WASIFarm, WASIFarmRef, WASIFarmAnimal }; export { Fd, Inode } from "./fd.js"; export { File, diff --git a/src/wasi.ts b/src/wasi.ts index 4cb409b..b5e2428 100644 --- a/src/wasi.ts +++ b/src/wasi.ts @@ -16,10 +16,10 @@ export class WASIProcExit extends Error { } export default class WASI { - args: Array = []; - env: Array = []; - fds: Array = []; - inst: { exports: { memory: WebAssembly.Memory } }; + private args: Array = []; + private env: Array = []; + private fds: Array = []; + private inst: { exports: { memory: WebAssembly.Memory } }; // eslint-disable-next-line @typescript-eslint/no-explicit-any wasiImport: { [key: string]: (...args: Array) => unknown }; diff --git a/src/wasi_farm/animals.ts b/src/wasi_farm/animals.ts new file mode 100644 index 0000000..c0c06cb --- /dev/null +++ b/src/wasi_farm/animals.ts @@ -0,0 +1,907 @@ +import { debug } from "../debug.js"; +import { Options, WASIProcExit } from "../wasi.js"; +import { WASIFarmRef, WASIFarmRefObject } from "./ref.js"; +import * as wasi from "../wasi_defs.js"; +import { WASIFarmRefUseArrayBuffer, WASIFarmRefUseArrayBufferObject } from "./shared_array_buffer/ref.js"; +import { FdCloseSender } from "./sender.js"; + +export class WASIFarmAnimal { + private args: Array; + private env: Array; + + private wasi_farm_refs: WASIFarmRef[]; + + private id_in_wasi_farm_ref: Array; + + private inst: { exports: { memory: WebAssembly.Memory } }; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + wasiImport: { [key: string]: (...args: Array) => unknown }; + + private can_array_buffer; + + // Each process has a specific fd that it can access. + // If it does not exist in the map, it cannot be accessed. + // child process can access parent process's fd. + // so, it is necessary to manage the fd on global scope. + // [fd, wasi_ref_n] + protected fd_map: Array<[number, number]>; + + protected get_fd_and_wasi_ref(fd: number): [number | undefined, WASIFarmRef | undefined] { + const mapped_fd_and_wasi_ref_n = this.fd_map[fd]; + if (!mapped_fd_and_wasi_ref_n) { + // console.log("fd", fd, "is not found"); + return [undefined, undefined]; + } + const [mapped_fd, wasi_ref_n] = mapped_fd_and_wasi_ref_n; + // console.log("fd", fd, "is found", "mapped_fd", mapped_fd, "wasi_ref_n", wasi_ref_n); + return [mapped_fd, this.wasi_farm_refs[wasi_ref_n]]; + } + + protected get_fd_and_wasi_ref_n(fd: number): [number | undefined, number | undefined] { + const mapped_fd_and_wasi_ref_n = this.fd_map[fd]; + if (!mapped_fd_and_wasi_ref_n) { + // console.log("fd", fd, "is not found"); + return [undefined, undefined]; + } + const [mapped_fd, wasi_ref_n] = mapped_fd_and_wasi_ref_n; + // console.log("fd", fd, "is found", "mapped_fd", mapped_fd, "wasi_ref_n", wasi_ref_n); + return [mapped_fd, wasi_ref_n]; + } + + /// Start a WASI command + start(instance: { + // FIXME v0.3: close opened Fds after execution + exports: { memory: WebAssembly.Memory; _start: () => unknown }; + }) { + this.inst = instance; + try { + instance.exports._start(); + return 0; + } catch (e) { + if (e instanceof WASIProcExit) { + return e.code; + } else { + throw e; + } + } + } + + /// Initialize a WASI reactor + initialize(instance: { + exports: { memory: WebAssembly.Memory; _initialize?: () => unknown }; + }) { + this.inst = instance; + if (instance.exports._initialize) { + instance.exports._initialize(); + } + } + + private mapping_fds( + wasi_farm_refs: Array, + override_fd_maps?: Array, + ) { + this.fd_map = [undefined, undefined, undefined]; + // console.log("wasi_farm_refs", wasi_farm_refs); + for (let i = 0; i < wasi_farm_refs.length; i++) { + // console.log("fd_map", [...this.fd_map]); + + const wasi_farm_ref = wasi_farm_refs[i]; + // console.log("override_fd_map", wasi_farm_ref.default_fds); + const override_fd_map = override_fd_maps ? override_fd_maps[i] : wasi_farm_ref.default_fds; + // console.log("override_fd_map", override_fd_map); + const stdin = wasi_farm_ref.get_stdin(); + const stdout = wasi_farm_ref.get_stdout(); + const stderr = wasi_farm_ref.get_stderr(); + console.log("stdin", stdin, "stdout", stdout, "stderr", stderr); + if (stdin !== undefined) { + if (override_fd_map.includes(stdin)) { + this.fd_map[0] = [stdin, i]; + } + } + if (stdout !== undefined) { + console.log("stdout", stdout, i, "override_fd_map", override_fd_map); + if (override_fd_map.includes(stdout)) { + console.log("stdout defined"); + this.fd_map[1] = [stdout, i]; + } + } + if (stderr !== undefined) { + if (override_fd_map.includes(stderr)) { + this.fd_map[2] = [stderr, i]; + } + } + for (const j of override_fd_map) { + if (j === stdin || j === stdout || j === stderr) { + continue; + } + this.map_new_fd(j, i); + } + wasi_farm_ref.set_park_fds_map(override_fd_map); + + // console.log("fd_map", this.fd_map); + } + if (this.fd_map[0] === undefined) { + throw new Error("stdin is not found"); + } + if (this.fd_map[1] === undefined) { + throw new Error("stdout is not found"); + } + if (this.fd_map[2] === undefined) { + throw new Error("stderr is not found"); + } + } + + private map_new_fd(fd: number, wasi_ref_n: number): number { + let n = -1; + // 0, 1, 2 are reserved for stdin, stdout, stderr + for (let i = 3; i < this.fd_map.length; i++) { + if (this.fd_map[i] === undefined) { + n = i; + break; + } + } + if (n === -1) { + n = this.fd_map.push(undefined) - 1; + } + this.fd_map[n] = [fd, wasi_ref_n]; + return n; + } + + private map_new_fd_and_notify(fd: number, wasi_ref_n: number): number { + const n = this.map_new_fd(fd, wasi_ref_n); + // console.log("animals: fd", fd, "is mapped to", n); + // console.log("wasi_ref_n", wasi_ref_n); + this.wasi_farm_refs[wasi_ref_n].set_park_fds_map([fd]); + return n; + } + + private map_set_fd_and_notify(fd: number, wasi_ref_n: number, index: number) { + if (this.fd_map[index] !== undefined) { + throw new Error("fd is already mapped"); + } + this.fd_map[index] = [fd, wasi_ref_n]; + this.wasi_farm_refs[wasi_ref_n].set_park_fds_map([fd]); + } + + private check_fds() { + const rm_fds: Array<[number, number]> = []; + for (let i = 0; i < this.id_in_wasi_farm_ref.length; i++) { + const id = this.id_in_wasi_farm_ref[i]; + const removed_fds = (this.wasi_farm_refs[i] as FdCloseSender).get(id); + if (removed_fds) { + for (const fd of removed_fds) { + rm_fds.push([fd, i]); + } + } + } + + if (rm_fds.length > 0) { + for (let i = 0; i < this.fd_map.length; i++) { + const fd_and_wasi_ref_n = this.fd_map[i]; + if (fd_and_wasi_ref_n === undefined) { + continue; + } + const [fd, wasi_ref_n] = fd_and_wasi_ref_n; + for (const [rm_fd_fd, rm_fd_wasi_ref_n] of rm_fds) { + if (fd === rm_fd_fd && wasi_ref_n === rm_fd_wasi_ref_n) { + this.fd_map[i] = undefined; + // console.log("fd", i, "is removed"); + break; + } + } + // console.log("fd_and_wasi_ref_n", fd_and_wasi_ref_n); + } + // console.log("rm_fds.length", rm_fds.length); + // console.log("rm_fds", rm_fds); + } + } + + constructor( + wasi_farm_refs: WASIFarmRefObject[] | WASIFarmRefObject, + args: Array, + env: Array, + options: Options = {}, + override_fd_maps?: Array, + ) { + debug.enable(options.debug); + + let wasi_farm_refs_tmp: WASIFarmRefObject[]; + if (Array.isArray(wasi_farm_refs)) { + wasi_farm_refs_tmp = wasi_farm_refs as unknown as Array; + } else { + wasi_farm_refs_tmp = [wasi_farm_refs as unknown as WASIFarmRefObject]; + } + + try { + new SharedArrayBuffer(4); + this.can_array_buffer = true; + } catch (_) { + this.can_array_buffer = false; + } + + this.id_in_wasi_farm_ref = []; + this.wasi_farm_refs = []; + for (let i = 0; i < wasi_farm_refs_tmp.length; i++) { + if (this.can_array_buffer) { + this.wasi_farm_refs.push(WASIFarmRefUseArrayBuffer.init_self(wasi_farm_refs_tmp[i] as WASIFarmRefUseArrayBufferObject)); + } else { + throw new Error("Non SharedArrayBuffer is not supported yet"); + } + this.id_in_wasi_farm_ref.push( + this.wasi_farm_refs[i].set_id(), + ) + } + + // console.log("this.wasi_farm_refs", this.wasi_farm_refs); + + this.mapping_fds(this.wasi_farm_refs, override_fd_maps); + + // console.log("this.fd_map", this.fd_map); + + this.args = args; + this.env = env; + const self = this; + this.wasiImport = { + args_sizes_get(argc: number, argv_buf_size: number): number { + self.check_fds(); + const buffer = new DataView(self.inst.exports.memory.buffer); + buffer.setUint32(argc, self.args.length, true); + let buf_size = 0; + for (const arg of self.args) { + buf_size += arg.length + 1; + } + buffer.setUint32(argv_buf_size, buf_size, true); + // debug.log( + // buffer.getUint32(argc, true), + // buffer.getUint32(argv_buf_size, true), + // ); + debug.log("read args_sizes_get: len", self.args.length); + return 0; + }, + args_get(argv: number, argv_buf: number): number { + self.check_fds(); + const buffer = new DataView(self.inst.exports.memory.buffer); + const buffer8 = new Uint8Array(self.inst.exports.memory.buffer); + const orig_argv_buf = argv_buf; + for (let i = 0; i < self.args.length; i++) { + buffer.setUint32(argv, argv_buf, true); + argv += 4; + const arg = new TextEncoder().encode(self.args[i]); + buffer8.set(arg, argv_buf); + buffer.setUint8(argv_buf + arg.length, 0); + argv_buf += arg.length + 1; + } + // if (debug.enabled) { + debug.log( + "read args_get: args", + new TextDecoder("utf-8").decode( + buffer8.slice(orig_argv_buf, argv_buf), + ), + ); + // } + return 0; + }, + environ_sizes_get(environ_count: number, environ_size: number): number { + self.check_fds(); + const buffer = new DataView(self.inst.exports.memory.buffer); + buffer.setUint32(environ_count, self.env.length, true); + let buf_size = 0; + for (const environ of self.env) { + buf_size += environ.length + 1; + } + buffer.setUint32(environ_size, buf_size, true); + // debug.log( + // buffer.getUint32(environ_count, true), + // buffer.getUint32(environ_size, true), + // ); + debug.log("read environ_sizes_get: len", self.env.length); + return 0; + }, + environ_get(environ: number, environ_buf: number): number { + self.check_fds(); + const buffer = new DataView(self.inst.exports.memory.buffer); + const buffer8 = new Uint8Array(self.inst.exports.memory.buffer); + const orig_environ_buf = environ_buf; + for (let i = 0; i < self.env.length; i++) { + buffer.setUint32(environ, environ_buf, true); + environ += 4; + const e = new TextEncoder().encode(self.env[i]); + buffer8.set(e, environ_buf); + buffer.setUint8(environ_buf + e.length, 0); + environ_buf += e.length + 1; + } + // if (debug.enabled) { + debug.log( + "read environ_get: environ", + new TextDecoder("utf-8").decode( + buffer8.slice(orig_environ_buf, environ_buf), + ), + ); + // } + return 0; + }, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + clock_res_get(id: number, res_ptr: number): number { + self.check_fds(); + let resolutionValue: bigint; + switch (id) { + case wasi.CLOCKID_MONOTONIC: { + // https://developer.mozilla.org/en-US/docs/Web/API/Performance/now + // > Resolution in isolated contexts: 5 microseconds + resolutionValue = 5_000n; // 5 microseconds + break; + } + case wasi.CLOCKID_REALTIME: { + resolutionValue = 1_000_000n; // 1 millisecond? + break; + } + default: + return wasi.ERRNO_NOSYS; + } + const view = new DataView(self.inst.exports.memory.buffer); + view.setBigUint64(res_ptr, resolutionValue, true); + return wasi.ERRNO_SUCCESS; + }, + clock_time_get(id: number, precision: bigint, time: number): number { + self.check_fds(); + const buffer = new DataView(self.inst.exports.memory.buffer); + if (id === wasi.CLOCKID_REALTIME) { + buffer.setBigUint64( + time, + BigInt(new Date().getTime()) * 1_000_000n, + true, + ); + } else if (id == wasi.CLOCKID_MONOTONIC) { + let monotonic_time: bigint; + try { + monotonic_time = BigInt(Math.round(performance.now() * 1000000)); + } catch (e) { + // performance.now() is only available in browsers. + // TODO use the perf_hooks builtin module for NodeJS + monotonic_time = 0n; + } + buffer.setBigUint64(time, monotonic_time, true); + } else { + // TODO + buffer.setBigUint64(time, 0n, true); + } + return 0; + }, + fd_advise( + fd: number, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + offset: bigint, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + len: bigint, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + advice: number, + ) { + self.check_fds(); + const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); + if (mapped_fd === undefined || wasi_farm_ref === undefined) { + return wasi.ERRNO_BADF; + } + return wasi_farm_ref.fd_advise(mapped_fd); + }, + fd_allocate( + fd: number, + offset: bigint, + len: bigint, + ) { + self.check_fds(); + const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); + if (mapped_fd === undefined || wasi_farm_ref === undefined) { + return wasi.ERRNO_BADF; + } + return wasi_farm_ref.fd_allocate(mapped_fd, offset, len); + }, + fd_close(fd: number) { + self.check_fds(); + const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); + if (mapped_fd === undefined || wasi_farm_ref === undefined) { + return wasi.ERRNO_BADF; + } + const ret = wasi_farm_ref.fd_close(mapped_fd); + self.check_fds(); + return ret; + }, + fd_datasync(fd: number) { + self.check_fds(); + const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); + if (mapped_fd === undefined || wasi_farm_ref === undefined) { + return wasi.ERRNO_BADF; + } + return wasi_farm_ref.fd_datasync(mapped_fd); + }, + fd_fdstat_get(fd: number, fdstat_ptr: number) { + self.check_fds(); + const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); + if (mapped_fd === undefined || wasi_farm_ref === undefined) { + return wasi.ERRNO_BADF; + } + const [fdstat, ret] = wasi_farm_ref.fd_fdstat_get(mapped_fd); + if (fdstat) { + fdstat.write_bytes( + new DataView(self.inst.exports.memory.buffer), + fdstat_ptr, + ); + } + return ret; + }, + fd_fdstat_set_flags(fd: number, flags: number) { + self.check_fds(); + const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); + if (mapped_fd === undefined || wasi_farm_ref === undefined) { + return wasi.ERRNO_BADF; + } + return wasi_farm_ref.fd_fdstat_set_flags(mapped_fd, flags); + }, + fd_fdstat_set_rights(fd: number, fs_rights_base: bigint, fs_rights_inheriting: bigint) { + self.check_fds(); + const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); + if (mapped_fd === undefined || wasi_farm_ref === undefined) { + return wasi.ERRNO_BADF; + } + return wasi_farm_ref.fd_fdstat_set_rights(mapped_fd, fs_rights_base, fs_rights_inheriting); + }, + fd_filestat_get(fd: number, filestat_ptr: number) { + self.check_fds(); + const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); + if (mapped_fd === undefined || wasi_farm_ref === undefined) { + return wasi.ERRNO_BADF; + } + const [filestat, ret] = wasi_farm_ref.fd_filestat_get(mapped_fd); + if (filestat) { + filestat.write_bytes( + new DataView(self.inst.exports.memory.buffer), + filestat_ptr, + ); + } + return ret; + }, + fd_filestat_set_size(fd: number, size: bigint) { + self.check_fds(); + const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); + if (mapped_fd === undefined || wasi_farm_ref === undefined) { + return wasi.ERRNO_BADF; + } + return wasi_farm_ref.fd_filestat_set_size(mapped_fd, size); + }, + fd_filestat_set_times(fd: number, atim: bigint, mtim: bigint, fst_flags: number) { + self.check_fds(); + const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); + if (mapped_fd === undefined || wasi_farm_ref === undefined) { + return wasi.ERRNO_BADF; + } + return wasi_farm_ref.fd_filestat_set_times(mapped_fd, atim, mtim, fst_flags); + }, + fd_pread(fd: number, iovs_ptr: number, iovs_len: number, offset: bigint, nread_ptr: number) { + self.check_fds(); + const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); + if (mapped_fd === undefined || wasi_farm_ref === undefined) { + return wasi.ERRNO_BADF; + } + const buffer = new DataView(self.inst.exports.memory.buffer); + const buffer8 = new Uint8Array(self.inst.exports.memory.buffer); + const iovs_view = new Uint32Array(buffer.buffer, iovs_ptr, iovs_len * 2); + const [nerad_and_read_data, ret] = wasi_farm_ref.fd_pread(mapped_fd, iovs_view, offset); + if (nerad_and_read_data) { + const iovecs = wasi.Iovec.read_bytes_array( + buffer, + iovs_ptr, + iovs_len, + ); + const [nread, read_data] = nerad_and_read_data; + buffer.setUint32(nread_ptr, nread, true); + let nreaded = 0; + for (const iovec of iovecs) { + if (nreaded + iovec.buf_len >= read_data.length) { + buffer8.set(read_data, iovec.buf); + break; + } + buffer8.set( + read_data.slice(nreaded, nreaded + iovec.buf_len), + iovec.buf + ); + nreaded += iovec.buf_len; + } + } + return ret; + }, + fd_prestat_get(fd: number, prestat_ptr: number) { + self.check_fds(); + const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); + if (mapped_fd === undefined || wasi_farm_ref === undefined) { + return wasi.ERRNO_BADF; + } + const [prestat, ret] = wasi_farm_ref.fd_prestat_get(mapped_fd); + if (prestat) { + const [tag, name_len] = prestat; + const buffer = new DataView(self.inst.exports.memory.buffer); + buffer.setUint32(prestat_ptr, tag, true); + buffer.setUint32(prestat_ptr + 4, name_len, true); + } + return ret; + }, + fd_prestat_dir_name(fd: number, path_ptr: number, path_len: number) { + self.check_fds(); + const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); + if (mapped_fd === undefined || wasi_farm_ref === undefined) { + return [undefined, wasi.ERRNO_BADF]; + } + // console.log("fd_prestat_dir_name: fd", mapped_fd, "path_len", path_len); + const [path, ret] = wasi_farm_ref.fd_prestat_dir_name(mapped_fd, path_len); + if (path) { + // console.log("fd_prestat_dir_name", new TextDecoder().decode(path)); + // console.log("fd_prestat_dir_name", path); + const buffer8 = new Uint8Array(self.inst.exports.memory.buffer); + buffer8.set(path, path_ptr); + } + return ret; + }, + fd_pwrite(fd: number, iovs_ptr: number, iovs_len: number, offset: bigint, nwritten_ptr: number) { + self.check_fds(); + const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); + if (mapped_fd === undefined || wasi_farm_ref === undefined) { + return wasi.ERRNO_BADF; + } + const buffer = new DataView(self.inst.exports.memory.buffer); + const buffer8 = new Uint8Array(self.inst.exports.memory.buffer); + const iovecs = wasi.Ciovec.read_bytes_array( + buffer, + iovs_ptr, + iovs_len, + ); + const data = new Uint8Array(iovecs.reduce((acc, iovec) => acc + iovec.buf_len, 0)); + let nwritten = 0; + for (const iovec of iovecs) { + data.set(buffer8.slice(iovec.buf, iovec.buf + iovec.buf_len), nwritten); + nwritten += iovec.buf_len; + } + const [written, ret] = wasi_farm_ref.fd_pwrite(mapped_fd, data, offset); + if (written) { + buffer.setUint32(nwritten_ptr, written, true); + } + return ret; + }, + fd_read(fd: number, iovs_ptr: number, iovs_len: number, nread_ptr: number) { + self.check_fds(); + const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); + if (mapped_fd === undefined || wasi_farm_ref === undefined) { + return wasi.ERRNO_BADF; + } + const buffer = new DataView(self.inst.exports.memory.buffer); + const buffer8 = new Uint8Array(self.inst.exports.memory.buffer); + const iovs_view = new Uint32Array(buffer.buffer, iovs_ptr, iovs_len * 2); + + const [nerad_and_read_data, ret] = wasi_farm_ref.fd_read(mapped_fd, iovs_view); + if (nerad_and_read_data) { + const iovecs = wasi.Iovec.read_bytes_array( + buffer, + iovs_ptr, + iovs_len, + ); + const [nread, read_data] = nerad_and_read_data; + + // console.log("fd_read: nread", nread, new TextDecoder().decode(read_data)); + + // fd_read: ref: 14 30 14 + // animals.ts:325 fd_read: nread 14 Hello, world! + + buffer.setUint32(nread_ptr, nread, true); + let nreaded = 0; + for (const iovec of iovecs) { + if (nreaded + iovec.buf_len >= read_data.length) { + buffer8.set(read_data, iovec.buf); + break; + } + buffer8.set( + read_data.slice(nreaded, nreaded + iovec.buf_len), + iovec.buf + ); + nreaded += iovec.buf_len; + } + } + return ret; + }, + fd_readdir(fd: number, buf_ptr: number, buf_len: number, cookie: bigint, buf_used_ptr: number) { + self.check_fds(); + const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); + if (mapped_fd === undefined || wasi_farm_ref === undefined) { + return [undefined, wasi.ERRNO_BADF]; + } + const buffer = new DataView(self.inst.exports.memory.buffer); + const buffer8 = new Uint8Array(self.inst.exports.memory.buffer); + const [nerad_and_read_data, ret] = wasi_farm_ref.fd_readdir(mapped_fd, buf_len, cookie); + if (nerad_and_read_data) { + const [read_data, buf_used] = nerad_and_read_data; + buffer.setUint32(buf_used_ptr, buf_used, true); + buffer8.set(read_data, buf_ptr); + } + return ret; + }, + fd_renumber(fd: number, to: number) { + self.check_fds(); + + const [mapped_fd, wasi_farm_ref_n] = self.get_fd_and_wasi_ref_n(fd); + const [mapped_to, wasi_farm_ref_to] = self.get_fd_and_wasi_ref(to); + + if (mapped_fd === undefined || wasi_farm_ref_n === undefined || mapped_to === undefined || wasi_farm_ref_to === undefined) { + return wasi.ERRNO_BADF; + } + + const ret = wasi_farm_ref_to.fd_close(mapped_to); + self.check_fds(); + + if (ret != wasi.ERRNO_SUCCESS) { + return ret; + } + + self.map_set_fd_and_notify(mapped_fd, wasi_farm_ref_n, to); + + return wasi.ERRNO_SUCCESS; + }, + fd_seek(fd: number, offset: bigint, whence: number, newoffset_ptr: number) { + self.check_fds(); + const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); + if (mapped_fd === undefined || wasi_farm_ref === undefined) { + return [undefined, wasi.ERRNO_BADF]; + } + const [newoffset, ret] = wasi_farm_ref.fd_seek(mapped_fd, offset, whence); + if (newoffset) { + const buffer = new DataView(self.inst.exports.memory.buffer); + + // wasi.ts use BigInt for offset, but API use Uint64 + buffer.setBigUint64(newoffset_ptr, newoffset, true); + } + return ret; + }, + fd_sync(fd: number) { + self.check_fds(); + const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); + if (mapped_fd === undefined || wasi_farm_ref === undefined) { + return wasi.ERRNO_BADF; + } + return wasi_farm_ref.fd_sync(mapped_fd); + }, + fd_tell(fd: number, newoffset_ptr: number) { + self.check_fds(); + const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); + if (mapped_fd === undefined || wasi_farm_ref === undefined) { + return [undefined, wasi.ERRNO_BADF]; + } + const [newoffset, ret] = wasi_farm_ref.fd_tell(mapped_fd); + if (newoffset) { + const buffer = new DataView(self.inst.exports.memory.buffer); + buffer.setBigUint64(newoffset_ptr, newoffset, true); + } + return ret; + }, + fd_write(fd: number, iovs_ptr: number, iovs_len: number, nwritten_ptr: number) { + self.check_fds(); + const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); + if (mapped_fd === undefined || wasi_farm_ref === undefined) { + return wasi.ERRNO_BADF; + } + + // console.log("fd_write", fd, iovs_ptr, iovs_len, nwritten_ptr); + + const buffer = new DataView(self.inst.exports.memory.buffer); + const buffer8 = new Uint8Array(self.inst.exports.memory.buffer); + const iovecs = wasi.Ciovec.read_bytes_array( + buffer, + iovs_ptr, + iovs_len, + ); + // console.log("iovecs", iovecs); + const data = new Uint8Array(iovecs.reduce((acc, iovec) => acc + iovec.buf_len, 0)); + // console.log("data", data); + let nwritten = 0; + for (const iovec of iovecs) { + data.set(buffer8.slice(iovec.buf, iovec.buf + iovec.buf_len), nwritten); + nwritten += iovec.buf_len; + } + + // console.log("fd_write: ", fd, new TextDecoder().decode(data)); + + const [written, ret] = wasi_farm_ref.fd_write(mapped_fd, data); + + // console.log("fd_write end", fd, ret, written); + + if (written) { + buffer.setUint32(nwritten_ptr, written, true); + } + return ret; + }, + path_create_directory(fd: number, path_ptr: number, path_len: number) { + self.check_fds(); + const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); + if (mapped_fd === undefined || wasi_farm_ref === undefined) { + return wasi.ERRNO_BADF; + } + const buffer8 = new Uint8Array(self.inst.exports.memory.buffer); + const path = buffer8.slice(path_ptr, path_ptr + path_len); + return wasi_farm_ref.path_create_directory(mapped_fd, path); + }, + path_filestat_get(fd: number, flags: number, path_ptr: number, path_len: number, filestat_ptr: number) { + self.check_fds(); + const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); + if (mapped_fd === undefined || wasi_farm_ref === undefined) { + return [undefined, wasi.ERRNO_BADF]; + } + const buffer = new DataView(self.inst.exports.memory.buffer); + const buffer8 = new Uint8Array(self.inst.exports.memory.buffer); + const path = buffer8.slice(path_ptr, path_ptr + path_len); + const [filestat, ret] = wasi_farm_ref.path_filestat_get(mapped_fd, flags, path); + if (filestat) { + filestat.write_bytes(buffer, filestat_ptr); + } + return ret; + }, + path_filestat_set_times(fd: number, flags: number, path_ptr: number, path_len: number, atim: bigint, mtim: bigint, fst_flags: number) { + self.check_fds(); + const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); + if (mapped_fd === undefined || wasi_farm_ref === undefined) { + return [undefined, wasi.ERRNO_BADF]; + } + const buffer8 = new Uint8Array(self.inst.exports.memory.buffer); + const path = buffer8.slice(path_ptr, path_ptr + path_len); + return wasi_farm_ref.path_filestat_set_times(mapped_fd, flags, path, atim, mtim, fst_flags); + }, + // TODO! Make it work with different wasi_farm_ref + path_link(old_fd: number, old_flags: number, old_path_ptr: number, old_path_len: number, new_fd: number, new_path_ptr: number, new_path_len: number) { + self.check_fds(); + const [mapped_old_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(old_fd); + const [mapped_new_fd, wasi_farm_ref_new] = self.get_fd_and_wasi_ref(new_fd); + if (mapped_old_fd === undefined || wasi_farm_ref === undefined || mapped_new_fd === undefined || wasi_farm_ref_new === undefined) { + return wasi.ERRNO_BADF; + } + if (wasi_farm_ref !== wasi_farm_ref_new) { + return wasi.ERRNO_BADF; + } + const buffer8 = new Uint8Array(self.inst.exports.memory.buffer); + const old_path = buffer8.slice(old_path_ptr, old_path_ptr + old_path_len); + const new_path = buffer8.slice(new_path_ptr, new_path_ptr + new_path_len); + return wasi_farm_ref.path_link(mapped_old_fd, old_flags, old_path, mapped_new_fd, new_path); + }, + path_open(fd: number, dirflags: number, path_ptr: number, path_len: number, oflags: number, fs_rights_base: bigint, fs_rights_inheriting: bigint, fs_flags: number, opened_fd_ptr: number) { + self.check_fds(); + const [mapped_fd, wasi_farm_ref_n] = self.get_fd_and_wasi_ref_n(fd); + if (mapped_fd === undefined || wasi_farm_ref_n === undefined) { + return wasi.ERRNO_BADF; + } + const wasi_farm_ref = self.wasi_farm_refs[wasi_farm_ref_n]; + const buffer8 = new Uint8Array(self.inst.exports.memory.buffer); + const path = buffer8.slice(path_ptr, path_ptr + path_len); + const [opened_fd, ret] = wasi_farm_ref.path_open(mapped_fd, dirflags, path, oflags, fs_rights_base, fs_rights_inheriting, fs_flags); + if (opened_fd) { + if (self.fd_map.includes([opened_fd, wasi_farm_ref_n])) { + throw new Error("opened_fd already exists"); + } + const mapped_opened_fd = self.map_new_fd_and_notify(opened_fd, wasi_farm_ref_n); + const buffer = new DataView(self.inst.exports.memory.buffer); + buffer.setUint32(opened_fd_ptr, mapped_opened_fd, true); + } + return ret; + }, + path_readlink(fd: number, path_ptr: number, path_len: number, buf_ptr: number, buf_len: number, buf_used_ptr: number) { + self.check_fds(); + const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); + if (mapped_fd === undefined || wasi_farm_ref === undefined) { + return [undefined, wasi.ERRNO_BADF]; + } + const buffer8 = new Uint8Array(self.inst.exports.memory.buffer); + const path = buffer8.slice(path_ptr, path_ptr + path_len); + const [buf, ret] = wasi_farm_ref.path_readlink(mapped_fd, path, buf_len); + if (buf) { + const buffer = new DataView(self.inst.exports.memory.buffer); + buffer.setUint32(buf_used_ptr, buf.length, true); + buffer8.set(buf, buf_ptr); + } + return ret; + }, + path_remove_directory(fd: number, path_ptr: number, path_len: number) { + self.check_fds(); + const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); + if (mapped_fd === undefined || wasi_farm_ref === undefined) { + return wasi.ERRNO_BADF; + } + const buffer8 = new Uint8Array(self.inst.exports.memory.buffer); + const path = buffer8.slice(path_ptr, path_ptr + path_len); + return wasi_farm_ref.path_remove_directory(mapped_fd, path); + }, + // TODO! Make it work with different wasi_farm_ref + path_rename(old_fd: number, old_path_ptr: number, old_path_len: number, new_fd: number, new_path_ptr: number, new_path_len: number) { + self.check_fds(); + const [mapped_old_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(old_fd); + const [mapped_new_fd, wasi_farm_ref_new] = self.get_fd_and_wasi_ref(new_fd); + if (mapped_old_fd === undefined || wasi_farm_ref === undefined || mapped_new_fd === undefined || wasi_farm_ref_new === undefined) { + return wasi.ERRNO_BADF; + } + if (wasi_farm_ref !== wasi_farm_ref_new) { + return wasi.ERRNO_BADF; + } + const buffer8 = new Uint8Array(self.inst.exports.memory.buffer); + const old_path = buffer8.slice(old_path_ptr, old_path_ptr + old_path_len); + const new_path = buffer8.slice(new_path_ptr, new_path_ptr + new_path_len); + return wasi_farm_ref.path_rename(mapped_old_fd, old_path, mapped_new_fd, new_path); + }, + path_symlink(old_path_ptr: number, old_path_len: number, fd: number, new_path_ptr: number, new_path_len: number) { + self.check_fds(); + const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); + if (mapped_fd === undefined || wasi_farm_ref === undefined) { + return wasi.ERRNO_BADF; + } + const buffer8 = new Uint8Array(self.inst.exports.memory.buffer); + const old_path = buffer8.slice(old_path_ptr, old_path_ptr + old_path_len); + const new_path = buffer8.slice(new_path_ptr, new_path_ptr + new_path_len); + return wasi_farm_ref.path_symlink(old_path, mapped_fd, new_path); + }, + path_unlink_file(fd: number, path_ptr: number, path_len: number) { + self.check_fds(); + const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); + if (mapped_fd === undefined || wasi_farm_ref === undefined) { + return wasi.ERRNO_BADF; + } + const buffer8 = new Uint8Array(self.inst.exports.memory.buffer); + const path = buffer8.slice(path_ptr, path_ptr + path_len); + return wasi_farm_ref.path_unlink_file(mapped_fd, path); + }, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + poll_oneoff(in_, out, nsubscriptions) { + self.check_fds(); + throw "async io not supported"; + }, + proc_exit(exit_code: number) { + self.check_fds(); + throw new WASIProcExit(exit_code); + }, + proc_raise(sig: number) { + self.check_fds(); + throw "raised signal " + sig; + }, + sched_yield() { + self.check_fds(); + }, + random_get(buf: number, buf_len: number) { + self.check_fds(); + const buffer8 = new Uint8Array( + self.inst.exports.memory.buffer, + ).subarray(buf, buf + buf_len); + + if ( + "crypto" in globalThis && + !(self.inst.exports.memory.buffer instanceof SharedArrayBuffer) + ) { + for (let i = 0; i < buf_len; i += 65536) { + crypto.getRandomValues(buffer8.subarray(i, i + 65536)); + } + } else { + for (let i = 0; i < buf_len; i++) { + buffer8[i] = (Math.random() * 256) | 0; + } + } + }, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + sock_recv(fd: number, ri_data, ri_flags) { + self.check_fds(); + throw "sockets not supported"; + }, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + sock_send(fd: number, si_data, si_flags) { + self.check_fds(); + throw "sockets not supported"; + }, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + sock_shutdown(fd: number, how) { + self.check_fds(); + throw "sockets not supported"; + }, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + sock_accept(fd: number, flags) { + self.check_fds(); + throw "sockets not supported"; + }, + } + } +} diff --git a/src/wasi_farm/farm.ts b/src/wasi_farm/farm.ts new file mode 100644 index 0000000..cca48fd --- /dev/null +++ b/src/wasi_farm/farm.ts @@ -0,0 +1,104 @@ +import { debug } from "../debug.js"; +import { Fd } from "../fd.js"; +import { Options } from "../wasi.js"; +import { WASIFarmPark } from "./park.js"; +import { WASIFarmRefObject } from "./ref.js"; +import { WASIFarmParkUseArrayBuffer } from "./shared_array_buffer/park.js"; + +export class WASIFarm { + private fds: Array; + private park: WASIFarmPark; + + private can_array_buffer; + + constructor( + stdin?: Fd, + stdout?: Fd, + stderr?: Fd, + fds: Array = [], + options: Options & { + allocator_size?: number; + } = {}, + ) { + debug.enable(options.debug); + + const new_fds = []; + let stdin_ = undefined; + let stdout_ = undefined; + let stderr_ = undefined; + if (stdin) { + new_fds.push(stdin); + stdin_ = new_fds.length - 1; + } + if (stdout) { + new_fds.push(stdout); + stdout_ = new_fds.length - 1; + } + if (stderr) { + new_fds.push(stderr); + stderr_ = new_fds.length - 1; + } + new_fds.push(...fds); + + const default_allow_fds = []; + for (let i = 0; i < new_fds.length; i++) { + default_allow_fds.push(i); + } + + this.fds = new_fds; + + // WebAssembly.Memory can be used to create a SharedArrayBuffer, but it cannot be transferred by postMessage. + // Uncaught (in promise) DataCloneError: + // Failed to execute 'postMessage' on 'Worker': + // SharedArrayBuffer transfer requires self.crossOriginIsolated. + try { + new SharedArrayBuffer(4); + this.can_array_buffer = true; + } catch (_) { + this.can_array_buffer = false; + } + + if (this.can_array_buffer) { + this.park = new WASIFarmParkUseArrayBuffer( + this.fds_ref(), + stdin_, + stdout_, + stderr_, + default_allow_fds, + options?.allocator_size, + ); + } else { + throw new Error("Non SharedArrayBuffer is not supported yet"); + } + + this.park.listen(); + } + + private fds_ref(): Array { + const fds = new Proxy([] as Array, { + get: (_, prop) => { + // console.log("fds", prop); + + if (prop === "push") { + return (fd: Fd) => { + const len = this.fds.push(fd); + return len; + }; + } + return this.fds[prop]; + }, + + set: (_, prop, value) => { + // console.log("fds", prop, value); + this.fds[prop] = value; + return true; + } + }); + + return fds; + } + + get_ref(): WASIFarmRefObject { + return this.park.get_ref(); + } +} diff --git a/src/wasi_farm/index.ts b/src/wasi_farm/index.ts new file mode 100644 index 0000000..9dc3946 --- /dev/null +++ b/src/wasi_farm/index.ts @@ -0,0 +1,4 @@ +import { WASIFarm } from "./farm.js"; +import { WASIFarmRef } from "./ref.js"; +import { WASIFarmAnimal } from "./animals.js"; +export { WASIFarm, WASIFarmRef, WASIFarmAnimal }; diff --git a/src/wasi_farm/park.ts b/src/wasi_farm/park.ts new file mode 100644 index 0000000..94e7600 --- /dev/null +++ b/src/wasi_farm/park.ts @@ -0,0 +1,539 @@ +import { Fd } from "../fd.js"; +import { WASIFarmRefObject } from "./ref.js"; +import * as wasi from "../wasi_defs.js"; +import { debug } from "../debug.js"; + +export abstract class WASIFarmPark { + abstract get_ref(): WASIFarmRefObject; + abstract listen(): void; + abstract notify_set_fd(fd: number): void; + abstract notify_rm_fd(fd: number): void; + abstract can_set_new_fd(fd: number): [boolean, Promise | undefined]; + + protected fds: Array; + protected stdin: number | undefined; + protected stdout: number | undefined; + protected stderr: number | undefined; + protected default_allow_fds: Array; + + constructor( + fds: Array, + stdin: number | undefined, + stdout: number | undefined, + stderr: number | undefined, + default_allow_fds: Array, + ) { + this.fds = fds; + this.stdin = stdin; + this.stdout = stdout; + this.stderr = stderr; + this.default_allow_fds = default_allow_fds; + this.fds_map = new Array(fds.length); + for (let i = 0; i < fds.length; i++) { + this.fds_map[i] = []; + } + // console.log("first fds_map", this.fds_map); + } + + private get_new_fd_lock = new Array<() => Promise>(); + + // fdに対して、現在そのfdにidがアクセス可能かを示す。 + protected fds_map: Array; + + // If the reassigned value is accessed after being closed, + // it will be strange, + // but the programmer should have written it + // so that this does not happen in the first place. + private async get_new_fd(): Promise<[() => Promise, number]> { + const promise = new Promise<[() => Promise, number]>((resolve) => { + const len = this.get_new_fd_lock.push(async () => { + let ret = -1; + for (let i = 0; i < this.fds.length; i++) { + if (this.fds[i] == undefined) { + ret = i; + break; + } + } + if (ret == -1) { + ret = this.fds.length; + // console.log("push_fd", this.fds.length) + this.fds.push(undefined); + this.fds_map.push([]); + // console.log("push_fd", this.fds.length) + } + + const [can, promise] = this.can_set_new_fd(ret); + if (!can) { + await promise; + } + + // If it's assigned, it's resolved. + resolve([async () => { + this.get_new_fd_lock.shift(); + const fn = this.get_new_fd_lock[0]; + if (fn != undefined) { + fn(); + } + // assigned and notify + await this.notify_set_fd(ret); + }, ret]); + }); + if (len == 1) { + this.get_new_fd_lock[0](); + } + }); + return promise; + } + + protected fd_advise(fd: number): number { + if (this.fds[fd] != undefined) { + return wasi.ERRNO_SUCCESS; + } else { + return wasi.ERRNO_BADF; + } + } + + protected fd_allocate(fd: number, offset: bigint, len: bigint): number { + if (this.fds[fd] != undefined) { + return this.fds[fd].fd_allocate(offset, len); + } else { + return wasi.ERRNO_BADF; + } + } + + protected async fd_close(fd: number): Promise { + if (this.fds[fd] != undefined) { + const ret = this.fds[fd].fd_close(); + this.fds[fd] = undefined; + // console.log("fd_close1", fd); + await this.notify_rm_fd(fd); + // console.log("fd_close2", fd); + return ret; + } else { + return wasi.ERRNO_BADF; + } + } + + protected fd_datasync(fd: number): number { + if (this.fds[fd] != undefined) { + return this.fds[fd].fd_sync(); + } else { + return wasi.ERRNO_BADF; + } + } + + protected fd_fdstat_get(fd: number): [wasi.Fdstat | undefined, number] { + if (this.fds[fd] != undefined) { + const { ret, fdstat } = this.fds[fd].fd_fdstat_get(); + if (fdstat != null) { + return [fdstat, ret]; + } + return [undefined, ret]; + } + return [undefined, wasi.ERRNO_BADF]; + } + + protected fd_fdstat_set_flags(fd: number, flags: number): number { + if (this.fds[fd] != undefined) { + return this.fds[fd].fd_fdstat_set_flags(flags); + } else { + return wasi.ERRNO_BADF; + } + } + + protected fd_fdstat_set_rights(fd: number, fs_rights_base: bigint, fs_rights_inheriting: bigint): number { + if (this.fds[fd] != undefined) { + return this.fds[fd].fd_fdstat_set_rights(fs_rights_base, fs_rights_inheriting); + } else { + return wasi.ERRNO_BADF; + } + } + + protected fd_filestat_get(fd: number): [wasi.Filestat | undefined, number] { + if (this.fds[fd] != undefined) { + const { ret, filestat } = this.fds[fd].fd_filestat_get(); + if (filestat != null) { + return [filestat, ret]; + } + return [undefined, ret]; + } + return [undefined, wasi.ERRNO_BADF]; + } + + protected fd_filestat_set_size(fd: number, size: bigint): number { + if (this.fds[fd] != undefined) { + return this.fds[fd].fd_filestat_set_size(size); + } else { + return wasi.ERRNO_BADF; + } + } + + protected fd_filestat_set_times(fd: number, atim: bigint, mtim: bigint, fst_flags: number): number { + if (this.fds[fd] != undefined) { + return this.fds[fd].fd_filestat_set_times(atim, mtim, fst_flags); + } else { + return wasi.ERRNO_BADF; + } + } + + protected fd_pread(fd: number, iovecs: Array, offset: bigint): [[number, Uint8Array] | undefined, number] { + if (this.fds[fd] != undefined) { + let nread = 0; + + let buffer8 = new Uint8Array(0); + for (const iovec of iovecs) { + const { ret, data } = this.fds[fd].fd_pread(iovec.buf_len, offset); + if (ret != wasi.ERRNO_SUCCESS) { + return [[nread, buffer8], ret]; + } + const new_buffer = new Uint8Array(buffer8.byteLength + data.byteLength); + new_buffer.set(buffer8); + new_buffer.set(data, buffer8.byteLength); + buffer8 = new_buffer; + nread += data.byteLength; + if (data.byteLength != iovec.buf_len) { + break; + } + } + return [[nread, buffer8], wasi.ERRNO_SUCCESS]; + } else { + return [undefined, wasi.ERRNO_BADF]; + } + } + + protected fd_prestat_get(fd: number): [wasi.Prestat | undefined, number] { + if (this.fds[fd] != undefined) { + const { ret, prestat } = this.fds[fd].fd_prestat_get(); + if (prestat != null) { + return [prestat, ret]; + } + return [undefined, ret]; + } + return [undefined, wasi.ERRNO_BADF]; + } + + protected fd_prestat_dir_name(fd: number, path_len: number): [Uint8Array | undefined, number] { + if (this.fds[fd] != undefined) { + const { ret, prestat } = this.fds[fd].fd_prestat_get(); + if (prestat) { + const prestat_dir_name = prestat.inner.pr_name; + + // console.log("fd_prestat_dir_name: park: inner: ", prestat_dir_name); + // console.log("fd_prestat_dir_name: park: inner: ", new TextDecoder().decode(prestat_dir_name)); + + // console.log("fd_prestat_dir_name: park: path_len: ", path_len); + + if (prestat_dir_name.length <= path_len) { + // console.log("fd_prestat_dir_name: park: A"); + return [prestat_dir_name, ret]; + } + + // console.log("fd_prestat_dir_name: park: B"); + return [prestat_dir_name.slice(0, path_len), wasi.ERRNO_NAMETOOLONG]; + } + // console.log("fd_prestat_dir_name: park: C"); + return [undefined, ret]; + } + // console.log("fd_prestat_dir_name: park: D"); + return [undefined, wasi.ERRNO_BADF]; + } + + protected fd_pwrite(fd: number, write_data: Uint8Array, offset: bigint): [number | undefined, number] { + if (this.fds[fd] != undefined) { + const { ret, nwritten } = this.fds[fd].fd_pwrite(write_data, offset); + return [nwritten, ret]; + } else { + return [undefined, wasi.ERRNO_BADF]; + } + } + + protected fd_read(fd: number, iovecs: Array): [[number, Uint8Array] | undefined, number] { + if (this.fds[fd] != undefined) { + let nread = 0; + + // console.log("fd_read: park: iovecs: ", iovecs); + + // const sum_len = iovecs.reduce((acc, iovec) => acc + iovec.buf_len, 0); + + // console.warn("fd_read: park: sum_len: ", sum_len); + + let buffer8 = new Uint8Array(0); + for (const iovec of iovecs) { + const { ret, data } = this.fds[fd].fd_read(iovec.buf_len); + // console.log("fd_read: park: data: ", data); + if (ret != wasi.ERRNO_SUCCESS) { + return [[nread, buffer8], ret]; + } + const new_buffer = new Uint8Array(buffer8.byteLength + data.byteLength); + new_buffer.set(buffer8); + new_buffer.set(data, buffer8.byteLength); + buffer8 = new_buffer; + nread += data.byteLength; + if (data.byteLength != iovec.buf_len) { + break; + } + } + + // console.log("fd_read: park: nread: ", nread); + + return [[ + nread, + buffer8, + ], wasi.ERRNO_SUCCESS]; + } else { + return [undefined, wasi.ERRNO_BADF]; + } + } + + protected fd_readdir(fd: number, buf_len: number, cookie: bigint): [[Uint8Array, number] | undefined, number] { + if (this.fds[fd] != undefined) { + const array = new Uint8Array(buf_len); + + let buf_used = 0; + let offset = 0; + + // eslint-disable-next-line no-constant-condition + while (true) { + const { ret, dirent } = this.fds[fd].fd_readdir_single(cookie); + if (ret != wasi.ERRNO_SUCCESS) { + return [[array, buf_used], ret]; + } + if (dirent == null) { + break; + } + if (buf_len - buf_used < dirent.head_length()) { + buf_used = buf_len; + break; + } + + const head_bytes = new ArrayBuffer(dirent.head_length()); + dirent.write_head_bytes(new DataView(head_bytes), 0); + array.set( + new Uint8Array(head_bytes).slice( + 0, + Math.min(head_bytes.byteLength, buf_len - buf_used), + ), + offset, + ); + offset += head_bytes.byteLength; + buf_used += head_bytes.byteLength; + + if (buf_len - buf_used < dirent.name_length()) { + buf_used = buf_len; + break; + } + + dirent.write_name_bytes(array, offset, buf_len - buf_used); + offset += dirent.name_length(); + buf_used += dirent.name_length(); + + cookie = dirent.d_next; + } + + return [[array, buf_used], wasi.ERRNO_SUCCESS]; + } else { + return [undefined, wasi.ERRNO_BADF]; + } + } + + // protected async fd_renumber(fd: number, to: number): Promise { + // if (this.fds[fd] != undefined) { + // const ret = this.fds[to].fd_close(); + // if (ret != wasi.ERRNO_SUCCESS) { + // return ret; + // } + // this.fds[to] = this.fds[fd]; + // this.fds[fd] = undefined; + // await this.notify_rm_fd(fd); + // return wasi.ERRNO_SUCCESS; + // } else { + // return wasi.ERRNO_BADF; + // } + // } + + protected fd_seek(fd: number, offset: bigint, whence: number): [bigint | undefined, number] { + if (this.fds[fd] != undefined) { + const { ret, offset: new_offset } = this.fds[fd].fd_seek(offset, whence); + return [new_offset, ret]; + } else { + return [undefined, wasi.ERRNO_BADF]; + } + } + + protected fd_sync(fd: number): number { + if (this.fds[fd] != undefined) { + return this.fds[fd].fd_sync(); + } else { + return wasi.ERRNO_BADF; + } + } + + protected fd_tell(fd: number): [bigint | undefined, number] { + if (this.fds[fd] != undefined) { + const { ret, offset } = this.fds[fd].fd_tell(); + return [offset, ret]; + } else { + return [undefined, wasi.ERRNO_BADF]; + } + } + + protected fd_write(fd: number, write_data: Uint8Array): [number | undefined, number] { + if (this.fds[fd] != undefined) { + const { ret, nwritten } = this.fds[fd].fd_write(write_data); + return [nwritten, ret]; + } else { + return [undefined, wasi.ERRNO_BADF]; + } + } + + protected path_create_directory(fd: number, path: string): number { + if (this.fds[fd] != undefined) { + return this.fds[fd].path_create_directory(path); + } else { + return wasi.ERRNO_BADF; + } + } + + protected path_filestat_get(fd: number, flags: number, path: string): [wasi.Filestat | undefined, number] { + if (this.fds[fd] != undefined) { + const { ret, filestat } = this.fds[fd].path_filestat_get(flags, path); + if (filestat != null) { + return [filestat, ret]; + } + return [undefined, ret]; + } + return [undefined, wasi.ERRNO_BADF]; + } + + protected path_filestat_set_times(fd: number, flags: number, path: string, atim: bigint, mtim: bigint, fst_flags: number): number { + if (this.fds[fd] != undefined) { + return this.fds[fd].path_filestat_set_times(flags, path, atim, mtim, fst_flags); + } else { + return wasi.ERRNO_BADF; + } + } + + protected path_link(old_fd: number, old_flags: number, old_path: string, new_fd: number, new_path: string): number { + if (this.fds[old_fd] != undefined && this.fds[new_fd] != undefined) { + const { ret, inode_obj } = this.fds[old_fd].path_lookup( + old_path, + old_flags, + ); + if (inode_obj == null) { + return ret; + } + return this.fds[new_fd].path_link(new_path, inode_obj, false); + } else { + return wasi.ERRNO_BADF; + } + } + + protected async path_open( + fd: number, + dirflags: number, + path: string, + oflags: number, + fs_rights_base: bigint, + fs_rights_inheriting: bigint, + fs_flags: number, + ): Promise<[number | undefined, number]> { + if (this.fds[fd] != undefined) { + debug.log("path_open", path); + const { ret, fd_obj } = this.fds[fd].path_open( + dirflags, + path, + oflags, + fs_rights_base, + fs_rights_inheriting, + fs_flags, + ); + // console.log("path_open: park: ", ret, fd_obj); + if (ret != wasi.ERRNO_SUCCESS) { + return [undefined, ret]; + } + + const [resolve, opened_fd] = await this.get_new_fd(); + + // console.log("path_open: park: ", path, "opened_fd" ,opened_fd); + + this.fds[opened_fd] = fd_obj; + + await resolve(); + + // console.log("path_open: park: len: ", len); + + // console.log("path_open: park: ", opened_fd); + + return [opened_fd, wasi.ERRNO_SUCCESS]; + } else { + return [undefined, wasi.ERRNO_BADF]; + } + } + + protected path_readlink(fd: number, path: string, buf_len: number): [Uint8Array | undefined, number] { + if (this.fds[fd] != undefined) { + debug.log("path_readlink", path); + const { ret, data } = this.fds[fd].path_readlink(path); + if (data != null) { + const data_buf = new TextEncoder().encode(data); + if (data_buf.byteLength > buf_len) { + // wasi.ts use ERRNO_BADF. I think it should be ERRNO_OVERFLOW. + return [data_buf.slice(0, buf_len), wasi.ERRNO_OVERFLOW]; + } + return [data_buf, ret]; + } + return [undefined, ret]; + } else { + return [undefined, wasi.ERRNO_BADF]; + } + } + + protected path_remove_directory(fd: number, path: string): number { + if (this.fds[fd] != undefined) { + return this.fds[fd].path_remove_directory(path); + } else { + return wasi.ERRNO_BADF; + } + } + + protected path_rename(old_fd: number, old_path: string, new_fd: number, new_path: string): number { + if (this.fds[old_fd] != undefined && this.fds[new_fd] != undefined) { + // eslint-disable-next-line prefer-const + let { ret, inode_obj } = this.fds[old_fd].path_unlink( + old_path, + ); + if (inode_obj == null) { + return ret; + } + ret = this.fds[new_fd].path_link(new_path, inode_obj, true); + if (ret != wasi.ERRNO_SUCCESS) { + if ( + this.fds[old_fd].path_link(old_path, inode_obj, true) != + wasi.ERRNO_SUCCESS + ) { + throw "path_link should always return success when relinking an inode back to the original place"; + } + } + return ret; + } else { + return wasi.ERRNO_BADF; + } + } + + // eslint-disable-next-line @typescript-eslint/no-unused-vars + protected path_symlink(old_path: string, fd: number, new_path: string): number { + if (this.fds[fd] != undefined) { + return wasi.ERRNO_NOTSUP; + } else { + return wasi.ERRNO_BADF; + } + } + + protected path_unlink_file(fd: number, path: string): number { + if (this.fds[fd] != undefined) { + return this.fds[fd].path_unlink_file(path); + } else { + return wasi.ERRNO_BADF; + } + } +} diff --git a/src/wasi_farm/polyfill.js b/src/wasi_farm/polyfill.js new file mode 100644 index 0000000..c468f91 --- /dev/null +++ b/src/wasi_farm/polyfill.js @@ -0,0 +1,143 @@ +// https://github.com/tc39/proposal-atomics-wait-async/blob/master/polyfill.js + +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * Author: Lars T Hansen, lhansen@mozilla.com + */ + +/* Polyfill for Atomics.waitAsync() for web browsers. + * + * Any kind of agent that is able to create a new Worker can use this polyfill. + * + * Load this file in all agents that will use Atomics.waitAsync. + * + * Agents that don't call Atomics.waitAsync need do nothing special. + * + * Any kind of agent can wake another agent that is sleeping in + * Atomics.waitAsync by just calling Atomics.notify for the location being slept + * on, as normal. + * + * The implementation is not completely faithful to the proposed semantics: in + * the case where an agent first asyncWaits and then waits on the same location: + * when it is woken, the two waits will be woken in order, while in the real + * semantics, the sync wait will be woken first. + * + * In this polyfill Atomics.waitAsync is not very fast. + */ + +/* Implementation: + * + * For every wait we fork off a Worker to perform the wait. Workers are reused + * when possible. The worker communicates with its parent using postMessage. + */ + +(function () { + if (typeof Atomics.waitAsync === "function") + return; + + let helperCode = ` + onmessage = function (ev) { + try { + switch (ev.data[0]) { + case 'wait': { + let [_, ia, index, value, timeout] = ev.data; + let result = Atomics.wait(ia, index, value, timeout) + postMessage(['ok', result]); + break; + } + default: { + throw new Error("Bogus message sent to wait helper: " + ev.data.join(',')); + } + } + } catch (e) { + console.log("Exception in wait helper"); + postMessage(['error', 'Exception']); + } + } + `; + + let helpers = []; + + function allocHelper() { + if (helpers.length > 0) + return helpers.pop(); + let h = new Worker("data:application/javascript," + encodeURIComponent(helperCode)); + return h; + } + + function freeHelper(h) { + helpers.push(h); + } + + // Atomics.waitAsync always returns a promise. Throws standard errors + // for parameter validation. The promise is resolved with a string as from + // Atomics.wait, or, in the case something went completely wrong, it is + // rejected with an error string. + + function waitAsync(ia, index_, value_, timeout_) { + if (typeof ia != "object" || !(ia instanceof Int32Array) || !(ia.buffer instanceof SharedArrayBuffer)) + throw new TypeError("Expected shared memory"); + + // These conversions only approximate the desired semantics but are + // close enough for the polyfill. + + let index = index_|0; + let value = value_|0; + let timeout = timeout_ === undefined ? Infinity : +timeout_; + + // Range checking for the index. + + ia[index]; + + // Optimization, avoid the helper thread in this common case. + + if (Atomics.load(ia, index) != value) + return Promise.resolve("not-equal"); + + // General case, we must wait. + + return new Promise(function (resolve, reject) { + let h = allocHelper(); + h.onmessage = function (ev) { + // Free the helper early so that it can be reused if the resolution + // needs a helper. + freeHelper(h); + switch (ev.data[0]) { + case 'ok': + resolve(ev.data[1]); + break; + case 'error': + // Note, rejection is not in the spec, it is an artifact of the polyfill. + // The helper already printed an error to the console. + reject(ev.data[1]); + break; + } + } + + // It's possible to do better here if the ia is already known to the + // helper. In that case we can communicate the other data through + // shared memory and wake the agent. And it is possible to make ia + // known to the helper by waking it with a special value so that it + // checks its messages, and then posting the ia to the helper. Some + // caching / decay scheme is useful no doubt, to improve performance + // and avoid leaks. + // + // In the event we wake the helper directly, we can micro-wait here + // for a quick result. We'll need to restructure some code to make + // that work out properly, and some synchronization is necessary for + // the helper to know that we've picked up the result and no + // postMessage is necessary. + + h.postMessage(['wait', ia, index, value, timeout]); + }) + } + + Object.defineProperty(Atomics, 'waitAsync', { + value: waitAsync, + configurable: true, + enumerable: false, + writable: true, + }); +})(); diff --git a/src/wasi_farm/ref.ts b/src/wasi_farm/ref.ts new file mode 100644 index 0000000..aa5837c --- /dev/null +++ b/src/wasi_farm/ref.ts @@ -0,0 +1,99 @@ +import { Options } from "../wasi.js"; +import * as wasi from "../wasi_defs.js"; +import { FdCloseSender } from "./sender.js"; + +export type WASIFarmRefObject = { + stdin: number | undefined; + stdout: number | undefined; + stderr: number | undefined; + fd_close_receiver: FdCloseSender; + default_fds: Array; +} + +export abstract class WASIFarmRef { + abstract get_fds_len(): number; + // please implement this method + // abstract init_self(sl: WASIFarmRef): WASIFarmRef; + + protected stdin: number | undefined; + protected stdout: number | undefined; + protected stderr: number | undefined; + + protected id: number; + + fd_close_receiver: FdCloseSender; + + default_fds: Array = []; + + async send(targets: Array, fd: number): Promise { + await this.fd_close_receiver.send(targets, fd); + } + + get(id: number): Array | undefined { + return this.fd_close_receiver.get(id); + } + + abstract set_park_fds_map(fds: Array); + + abstract set_id(): number; + + constructor( + stdin: number | undefined, + stdout: number | undefined, + stderr: number | undefined, + fd_close_receiver: FdCloseSender, + default_fds?: Array, + ) { + this.stdin = stdin; + this.stdout = stdout; + this.stderr = stderr; + this.fd_close_receiver = fd_close_receiver; + if (default_fds !== undefined) { + this.default_fds = default_fds; + } + } + + get_stdin(): number | undefined { + return this.stdin; + } + + get_stdout(): number | undefined { + return this.stdout; + } + + get_stderr(): number | undefined { + return this.stderr; + } + + abstract fd_advise(fd: number | undefined): number; + abstract fd_allocate(fd: number | undefined, offset: bigint, len: bigint): number; + abstract fd_close(fd: number | undefined): number; + abstract fd_datasync(fd: number | undefined): number; + abstract fd_fdstat_get(fd: number | undefined): [wasi.Fdstat | undefined, number]; + abstract fd_fdstat_set_flags(fd: number | undefined, flags: number): number; + abstract fd_fdstat_set_rights(fd: number | undefined, fs_rights_base: bigint, fs_rights_inheriting: bigint): number; + abstract fd_filestat_get(fd: number | undefined): [wasi.Filestat | undefined, number]; + abstract fd_filestat_set_size(fd: number | undefined, size: bigint): number; + abstract fd_filestat_set_times(fd: number | undefined, atim: bigint, mtim: bigint, fst_flags: number): number; + abstract fd_pread(fd: number | undefined, iovs: Uint32Array, offset: bigint): [[number, Uint8Array] | undefined, number]; + abstract fd_prestat_get(fd: number | undefined): [[number, number] | undefined, number]; + abstract fd_prestat_dir_name(fd: number | undefined, path_len: number): [Uint8Array | undefined, number]; + abstract fd_pwrite(fd: number | undefined, iovs: Uint8Array, offset: bigint): [number | undefined, number]; + abstract fd_read(fd: number | undefined, iovs: Uint32Array): [[number, Uint8Array] | undefined, number]; + abstract fd_readdir(fd: number | undefined, limit_buf_len: number, cookie: bigint): [[Uint8Array, number] | undefined, number] + // abstract fd_renumber(fd: number | undefined, to: number): number; + abstract fd_seek(fd: number | undefined, offset: bigint, whence: number): [bigint | undefined, number]; + abstract fd_sync(fd: number | undefined): number; + abstract fd_tell(fd: number | undefined): [bigint, number]; + abstract fd_write(fd: number | undefined, iovs: Uint8Array): [number | undefined, number]; + abstract path_create_directory(fd: number | undefined, path: Uint8Array): number; + abstract path_filestat_get(fd: number | undefined, flags: number, path: Uint8Array): [wasi.Filestat | undefined, number]; + abstract path_filestat_set_times(fd: number | undefined, flags: number, path: Uint8Array, st_atim: bigint, st_mtim: bigint, fst_flags: number): number + abstract path_link(old_fd: number | undefined, old_flags: number, old_path: Uint8Array, new_fd: number | undefined, new_path: Uint8Array): number; + abstract path_open(fd: number | undefined, dirflags: number, path: Uint8Array, oflags: number, fs_rights_base: bigint, fs_rights_inheriting: bigint, fs_flags: number): [number, number]; + abstract path_readlink(fd: number | undefined, path: Uint8Array, buf_len: number): [Uint8Array | undefined, number]; + abstract path_remove_directory(fd: number | undefined, path: Uint8Array): number; + abstract path_rename(old_fd: number | undefined, old_path: Uint8Array, new_fd: number | undefined, new_path: Uint8Array): number; + abstract path_symlink(old_path: Uint8Array, fd: number | undefined, new_path: Uint8Array): number; + abstract path_unlink_file(fd: number | undefined, path: Uint8Array): number; +} diff --git a/src/wasi_farm/sender.ts b/src/wasi_farm/sender.ts new file mode 100644 index 0000000..ed9d30a --- /dev/null +++ b/src/wasi_farm/sender.ts @@ -0,0 +1,4 @@ +export interface FdCloseSender { + send(targets: Array, fd: number): Promise; + get(id: number): Array | undefined; +} diff --git a/src/wasi_farm/shared_array_buffer/allocator.ts b/src/wasi_farm/shared_array_buffer/allocator.ts new file mode 100644 index 0000000..95f6ef4 --- /dev/null +++ b/src/wasi_farm/shared_array_buffer/allocator.ts @@ -0,0 +1,214 @@ +// @ts-ignore +// import { debug } from "../../debug.js"; +import "../polyfill.js"; + +export type AllocatorUseArrayBufferObject = { + share_arrays_memory: SharedArrayBuffer; +} + +export class AllocatorUseArrayBuffer { + // Pass a !Sized type + // The first 4 bytes are for a lock value: i32 + // The next 4 bytes are for the current number of arrays: m: i32 + // The next 4 bytes are for the length of the occupied space in share_arrays_memory: n: i32 + // Once it is no longer busy, it should become empty immediately, so reset only when it is empty. + // Even if it becomes too long, it should be fine due to the browser's virtualization. + // Using an algorithm even simpler than First-Fit + // SharedArrayBuffer.grow is supported by all major browsers except Android WebView, + // which does not support SharedArrayBuffer in the first place, + // but es2024 and the type system does not support it, + // so the size is fixed from the beginning + + // share_arrays_memory: SharedArrayBuffer = new SharedArrayBuffer(12, { + // // 10MB + // maxByteLength: 10 * 1024 * 1024, + // }); + + // Even if 100MB is allocated, due to browser virtualization, + // the memory should not actually be used until it is needed. + share_arrays_memory: SharedArrayBuffer; + + // When adding data, use Atomics.wait to wait until the first 4 bytes become 0. + // After that, use Atomics.compareExchange to set the first 4 bytes to 1. + // Then, use Atomics.add to increment the next 4 bytes by 1. + // If the return value is 0, proceed to *1. + // If the return value is 1, use Atomics.wait to wait until the first 4 bytes become 0. + // *1: Increment the second by 1 using Atomics.add. If the return value is 0, reset it. + // Add the data. Extend if there is not enough space. + // To release, just decrement by 1 using Atomics.sub. + + // Since postMessage makes the class an object, + // it must be able to receive and assign a SharedArrayBuffer. + constructor( + share_arrays_memory: SharedArrayBuffer = new SharedArrayBuffer(10 * 1024 * 1024), + ) { + this.share_arrays_memory = share_arrays_memory; + const view = new Int32Array(this.share_arrays_memory); + Atomics.store(view, 0, 0); + Atomics.store(view, 1, 0); + Atomics.store(view, 2, 12); + } + + // Since postMessage converts classes to objects, + // it must be able to convert objects to classes. + static init_self( + sl: AllocatorUseArrayBufferObject, + ): AllocatorUseArrayBuffer { + return new AllocatorUseArrayBuffer(sl.share_arrays_memory); + } + + // Writes without blocking threads when acquiring locks + async async_write( + data: Uint8Array | Uint32Array, + memory: SharedArrayBuffer, + // ptr, len + // Pass I32Array ret_ptr + ret_ptr: number, + ): Promise { + const view = new Int32Array(this.share_arrays_memory); + // eslint-disable-next-line no-constant-condition + while (true) { + let lock: "not-equal" | "timed-out" | "ok"; + const { value } = Atomics.waitAsync(view, 0, 1); + if (value instanceof Promise) { + lock = await value; + } else { + lock = value; + } + if (lock === "timed-out") { + throw new Error("timed-out lock"); + } + const old = Atomics.compareExchange(view, 0, 0, 1); + if (old !== 0) { + continue; + } + + this.write_inner(data, memory, ret_ptr); + + // release lock + Atomics.store(view, 0, 0); + Atomics.notify(view, 0, 1); + + break; + } + } + + // Blocking threads for writing when acquiring locks + block_write( + data: Uint8Array | Uint32Array, + memory: SharedArrayBuffer, + // ptr, len + ret_ptr: number, + ): [number, number] { + // eslint-disable-next-line no-constant-condition + while (true) { + const view = new Int32Array(this.share_arrays_memory); + const lock = Atomics.wait(view, 0, 1); + if (lock === "timed-out") { + throw new Error("timed-out lock"); + } + const old = Atomics.compareExchange(view, 0, 0, 1); + if (old !== 0) { + continue; + } + + const ret = this.write_inner(data, memory, ret_ptr); + + // release lock + Atomics.store(view, 0, 0); + Atomics.notify(view, 0, 1); + + return ret; + } + } + + // Function to write after acquiring a lock + write_inner( + data: Uint8Array | Uint32Array, + memory: SharedArrayBuffer, + // ptr, len + ret_ptr: number, + ): [number, number] { + // console.log("data", data); + + const view = new Int32Array(this.share_arrays_memory); + const view8 = new Uint8Array(this.share_arrays_memory); + + // Indicates more users using memory + const old_num = Atomics.add(view, 1, 1); + let share_arrays_memory_kept: number; + if (old_num === 0) { + // Reset because there were no users. + // debug.log("reset allocator"); + share_arrays_memory_kept = Atomics.store(view, 2, 12); + } else { + share_arrays_memory_kept = Atomics.load(view, 2); + } + // console.log("num", Atomics.load(view, 1)); + + const memory_len = this.share_arrays_memory.byteLength; + const len = data.byteLength; + const new_memory_len = share_arrays_memory_kept + len; + if (memory_len < new_memory_len) { + // extend memory + // support from es2024 + // this.share_arrays_memory.grow(new_memory_len); + throw new Error("size is bigger than memory. \nTODO! fix memory limit. support big size another way."); + } + + let data8: Uint8Array; + if (data instanceof Uint8Array) { + data8 = data; + } else if (data instanceof Uint32Array) { + // data to uint8 + const tmp = new ArrayBuffer(data.byteLength); + new Uint32Array(tmp).set(data); + data8 = new Uint8Array(tmp); + } + + view8.set(new Uint8Array(data8), share_arrays_memory_kept); + Atomics.store(view, 2, new_memory_len); + + const memory_view = new Int32Array(memory); + Atomics.store(memory_view, ret_ptr, share_arrays_memory_kept); + Atomics.store(memory_view, ret_ptr + 1, len); + + // console.log("allocator: allocate", share_arrays_memory_kept, len); + + return [share_arrays_memory_kept, len]; + } + + // free allocated memory + free( + // eslint-disable-next-line @typescript-eslint/no-unused-vars + pointer: number, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + len: number + ) { + Atomics.sub(new Int32Array(this.share_arrays_memory), 1, 1); + + // console.log("allocator: free", pointer, len); + } + + // get memory from pointer and length + get_memory( + ptr: number, + len: number, + ): ArrayBuffer { + const data = new ArrayBuffer(len); + const view = new Uint8Array(data); + view.set(new Uint8Array(this.share_arrays_memory).slice(ptr, ptr + len)); + return data; + } + + // Write again to the memory before releasing + // Not used because the situation for using it does not exist. + use_defined_memory( + ptr: number, + len: number, + data: ArrayBufferLike, + ) { + const memory = new Uint8Array(this.share_arrays_memory); + memory.set(new Uint8Array(data).slice(0, len), ptr); + } +} diff --git a/src/wasi_farm/shared_array_buffer/fd_close_sender.ts b/src/wasi_farm/shared_array_buffer/fd_close_sender.ts new file mode 100644 index 0000000..2f4ec40 --- /dev/null +++ b/src/wasi_farm/shared_array_buffer/fd_close_sender.ts @@ -0,0 +1,63 @@ +import { FdCloseSender } from "../sender.js"; +import { ToRefSenderUseArrayBuffer, ToRefSenderUseArrayBufferObject } from "./sender.js"; + +export type FdCloseSenderUseArrayBufferObject = { + max_share_arrays_memory?: number; + share_arrays_memory?: SharedArrayBuffer; +} & ToRefSenderUseArrayBufferObject; + +// Object to tell other processes, +// such as child processes, +// that the file descriptor has been closed +export class FdCloseSenderUseArrayBuffer extends ToRefSenderUseArrayBuffer implements FdCloseSender { + // Should be able to change the size of memory as it accumulates more and more on memory + constructor( + max_share_arrays_memory?: number, + share_arrays_memory?: SharedArrayBuffer, + ) { + super(4, max_share_arrays_memory, share_arrays_memory); + } + + // Send the closed file descriptor to the target process + async send( + targets: Array, + fd: number, + ): Promise { + if (targets === undefined || targets.length === 0) { + throw new Error("targets is empty"); + } + // console.log("fd_close_sender send", targets, fd); + + await this.async_send(targets, new Uint32Array([fd])); + } + + // Get the closed file descriptor from the target process + get( + id: number, + ): Array | undefined { + const data = this.get_data(id); + if (data === undefined) { + return undefined; + } + + // console.log("fd_close_sender get", data); + + const array = []; + for (const i of data) { + array.push(i[0]); + } + + return array; + } + + // Initialize the class from object + static init_self( + sl: FdCloseSenderUseArrayBufferObject, + ): FdCloseSender { + const sel = ToRefSenderUseArrayBuffer.init_self_inner(sl); + return new FdCloseSenderUseArrayBuffer( + sel.max_share_arrays_memory, + sel.share_arrays_memory, + ); + } +} diff --git a/src/wasi_farm/shared_array_buffer/park.ts b/src/wasi_farm/shared_array_buffer/park.ts new file mode 100644 index 0000000..b242194 --- /dev/null +++ b/src/wasi_farm/shared_array_buffer/park.ts @@ -0,0 +1,890 @@ +import { Fd } from "../../fd.js"; +import * as wasi from "../../wasi_defs.js"; +import { AllocatorUseArrayBuffer } from "./allocator.js"; +import { WASIFarmPark } from "../park.js"; +import { WASIFarmRefUseArrayBufferObject } from "./ref.js"; +import { FdCloseSender } from "../sender.js"; +import { FdCloseSenderUseArrayBuffer } from "./fd_close_sender.js"; +import { get_func_name_from_number } from "./util.js"; + +export const fd_func_sig_u32_size: number = 18; +export const fd_func_sig_bytes: number = fd_func_sig_u32_size * 4; + +export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { + private allocator: AllocatorUseArrayBuffer; + + // args and env do not change, so copying them is fine. + // Functions that do not depend on fds are skipped. + // Since it is wasm32, the pointer is u32. + // errno is u8. + // https://github.com/WebAssembly/WASI/blob/4feaf733e946c375b610cc5d39ea2e1a68046e62/legacy/preview1/docs.md + // The first item is the function signature, and the second (if it exists) represents data that must be communicated in Park. If they are the same, it is not written. + // From here, direct access to fd begins. + // fd_advise: (fd: u32, offset: u64, len: u64, advice: u8) => errno; + // (fd: u32) => errno; + // fd_allocate: (fd: u32, offset: u64, len: u64) => errno; + // fd_close: (fd: u32) => errno; + // fd_datasync: (fd: u32) => errno; + // fd_fdstat_get: (fd: u32, fdstat_ptr: pointer) => errno; + // (fd: u32) => [wasi.Fdstat(u32 * 6)], errno]; + // fd_fdstat_set_flags: (fd: u32, flags: u16) => errno; + // fd_fdstat_set_rights: (fd: u32, fs_rights_base: u64, fs_rights_inheriting: u64) => errno; + // fd_filestat_get: (fd: u32, filestat_ptr: pointer) => errno; + // (fd: u32) => [wasi.Filestat(u32 * 16)], errno]; + // fd_filestat_set_size: (fd: u32, size: u64) => errno; + // fd_filestat_set_times: (fd: u32, atim: u64, mtim: u64, fst_flags: u16) => errno; + // fd_pread: (fd: u32, iovs_ptr: pointer, iovs_len: u32, offset: u64) => [u32, errno]; + // use share_arrays_memory; + // (fd: u32, iovs_ptr: pointer, iovs_len: u32, offset: u64) => [u32, data_ptr, errno]; + // fd_prestat_get: (fd: u32, prestat_ptr: pointer) => errno; + // (fd: u32) => [wasi.Prestat(u32 * 2)], errno]; + // fd_prestat_dir_name: (fd: u32, path_ptr: pointer, path_len: u32) => errno; + // (fd: u32, path_len: u32) => [path_ptr: pointer, path_len: u32, errno]; + // fd_pwrite: (fd: u32, iovs_ptr: pointer, iovs_len: u32, offset: u64) => [u32, errno]; + // use share_arrays_memory; + // (fd: u32, write_data: pointer, write_data_len: u32, offset: u64) => [u32, errno]; + // fd_read: (fd: u32, iovs_ptr: pointer, iovs_len: u32) => [u32, errno]; + // use share_arrays_memory; + // (fd: u32, iovs_ptr: pointer, iovs_len: u32) => [u32, data_ptr, errno]; + // fd_readdir: (fd: u32, buf_ptr: pointer, buf_len: u32, cookie: u64) => [u32, errno]; + // use share_arrays_memory; + // (fd: u32, buf_len: u32, cookie: u64) => [buf_ptr: pointer, buf_len: u32, buf_used: u32, errno]; + // fd_renumber: (fd: u32, to: u32) => errno; + // fd_seek: (fd: u32, offset: i64, whence: u8) => [u64, errno]; + // fd_sync: (fd: u32) => errno; + // fd_tell: (fd: u32) => [u64, errno]; + // fd_write: (fd: u32, iovs_ptr: pointer, iovs_len: u32) => [u32, errno]; + // use share_arrays_memory; + // (fd: u32, write_data: pointer, write_data_len: u32) => [u32, errno]; + // path_create_directory: (fd: u32, path_ptr: pointer, path_len: u32) => errno; + // path_filestat_get: (fd: u32, flags: u32, path_ptr: pointer, path_len: u32) => [wasi.Filestat(u32 * 16), errno]; + // path_filestat_set_times: (fd: u32, flags: u32, path_ptr: pointer, path_len: u32, atim: u64, mtim: u64, fst_flags: u16) => errno; + // path_link: (old_fd: u32, old_flags: u32, old_path_ptr: pointer, old_path_len: u32, new_fd: u32, new_path_ptr: pointer, new_path_len: u32) => errno; + // path_open: (fd: u32, dirflags: u32, path_ptr: pointer, path_len: u32, oflags: u32, fs_rights_base: u64, fs_rights_inheriting: u64, fdflags: u16) => [u32, errno]; + // note: fdsにpushするが、既存のfdに影響しないので、競合しない。 + // path_readlink: (fd: u32, path_ptr: pointer, path_len: u32, buf_ptr: pointer, buf_len: u32) => [u32, errno]; + // use share_arrays_memory; + // (fd: u32, path_ptr: pointer, path_len: u32, buf_len: u32) => [buf_len: u32, data_ptr: pointer, data_len: u32, errno]; + // path_remove_directory: (fd: u32, path_ptr: pointer, path_len: u32) => errno; + // path_rename: (old_fd: u32, old_path_ptr: pointer, old_path_len: u32, new_fd: u32, new_path_ptr: pointer, new_path_len: u32) => errno; + // path_symlink: (old_path_ptr: pointer, old_path_len: u32, fd: u32, new_path_ptr: pointer, new_path_len: u32) => errno; + // path_unlink_file: (fd: u32, path_ptr: pointer, path_len: u32) => errno; + + // Lock when you want to use fd + // Array<[lock, call_func]> + private lock_fds: SharedArrayBuffer; + + // 1 bytes: fds.length + // 1 bytes: wasi_farm_ref num(id) + // Actually, as long as it is working properly, fds.length is not used + private fds_len_and_num: SharedArrayBuffer; + + // listen promise keep + private listen_fds: Array> = []; + + // The largest size is u32 * 18 + 1 + // Alignment is troublesome, so make it u32 * 18 + 4 + // In other words, one size is 76 bytes + private fd_func_sig: SharedArrayBuffer; + + // listen base handle keep + private listen_base_handle: Promise; + + // listen base lock and call etc + private base_func_util: SharedArrayBuffer; + + // tell other processes that the file descriptor has been closed + private fd_close_receiver: FdCloseSender; + + // this is not send by postMessage, + // so it is not necessary to keep shared_array_buffer + // this class is not used by user, + // to avoid mistakes, all constructors are now required to be passed in. + constructor( + fds: Array, + // stdin fd number + stdin: number | undefined, + // stdout fd number + stdout: number | undefined, + // stderr fd number + stderr: number | undefined, + // wasi_farm_ref default allow fds + default_allow_fds: Array, + allocator_size?: number, + ) { + super( + fds, + stdin, + stdout, + stderr, + default_allow_fds, + ); + + if (allocator_size === undefined) { + this.allocator = new AllocatorUseArrayBuffer(); + } else { + this.allocator = new AllocatorUseArrayBuffer(new SharedArrayBuffer(allocator_size)); + } + const max_fds_len = 128; + this.lock_fds = new SharedArrayBuffer(4 * max_fds_len * 3); + this.fd_func_sig = new SharedArrayBuffer(fd_func_sig_u32_size * 4 * max_fds_len); + this.fds_len_and_num = new SharedArrayBuffer(8); + + const view = new Int32Array(this.fds_len_and_num); + Atomics.store(view, 0, fds.length); + Atomics.store(view, 1, 0); + + this.fd_close_receiver = new FdCloseSenderUseArrayBuffer(); + this.base_func_util = new SharedArrayBuffer(24); + } + + /// Send this return by postMessage. + get_ref(): WASIFarmRefUseArrayBufferObject { + return { + allocator: this.allocator, + lock_fds: this.lock_fds, + fds_len_and_num: this.fds_len_and_num, + fd_func_sig: this.fd_func_sig, + base_func_util: this.base_func_util, + fd_close_receiver: this.fd_close_receiver, + stdin: this.stdin, + stdout: this.stdout, + stderr: this.stderr, + default_fds: this.default_allow_fds, + }; + } + + // abstract methods implementation + // from fd set ex) path_open + // received and listen the fd + // and set fds.length + async notify_set_fd(fd: number) { + if (this.fds[fd] == undefined) { + throw new Error("fd is not defined"); + } + if (fd >= 128) { + throw new Error("fd is too big. expand is not supported yet"); + } + if (this.listen_fds[fd] !== undefined) { + if (this.listen_fds[fd] instanceof Promise) { + console.warn("fd is already set yet"); + await this.listen_fds[fd]; + } + } + this.listen_fds[fd] = this.listen_fd(fd); + + const view = new Int32Array(this.fds_len_and_num); + Atomics.store(view, 0, this.fds.length); + // const len = Atomics.store(view, 0, this.fds.length); + // console.log("notify_set_fd: len: ", len); + } + + // abstract methods implementation + // called by fd close ex) fd_close + async notify_rm_fd(fd: number) { + (async () => { + await this.listen_fds[fd]; + this.listen_fds[fd] = undefined; + })() + + // console.log("notify_rm_fd", fd); + // console.log("fds", this.fds); + // console.log("fds_map", this.fds_map); + + // console.log("notify_rm_fd: fds_map", this.fds_map); + // console.log("notify_rm_fd: fd", fd); + + // console.log("notify_rm_fd: fds_map[fd]", [...this.fds_map[fd]]); + + await this.fd_close_receiver.send(this.fds_map[fd], fd); + + this.fds_map[fd] = []; + } + + // abstract methods implementation + // wait to close old listener + can_set_new_fd(fd: number): [boolean, Promise | undefined] { + if (this.listen_fds[fd] instanceof Promise) { + return [false, this.listen_fds[fd]]; + } else { + return [true, undefined]; + } + } + + // listen all fds and base + // Must be called before was_ref_id is instantiated + listen() { + this.listen_fds = []; + for (let n = 0; n < this.fds.length; n++) { + this.listen_fds.push(this.listen_fd(n)); + } + this.listen_base_handle = this.listen_base(); + } + + // listen base + // ex) set_fds_map + // if close fd and send to other process, + // it need targets wasi_farm_ref id + // so, set fds_map + async listen_base() { + const lock_view = new Int32Array(this.base_func_util); + Atomics.store(lock_view, 0, 0); + Atomics.store(lock_view, 1, 0); + + // eslint-disable-next-line no-constant-condition + while(true) { + try { + let lock: "not-equal" | "timed-out" | "ok"; + + const { value } = Atomics.waitAsync(lock_view, 1, 0); + if ( value instanceof Promise) { + lock = await value; + } else { + lock = value; + } + if (lock === "timed-out") { + throw new Error("timed-out"); + } + + const func_number = Atomics.load(lock_view, 2); + + switcher: switch (func_number) { + // set_fds_map: (fds_ptr: u32, fds_len: u32); + case 0: { + // console.log("set_fds_map"); + const ptr = Atomics.load(lock_view, 3); + const len = Atomics.load(lock_view, 4); + // console.log("set_fds_map", ptr, len); + const data = new Uint32Array(this.allocator.get_memory(ptr, len)); + this.allocator.free(ptr, len); + const wasi_farm_ref_id = Atomics.load(lock_view, 5); + + // console.log("listen_base set_fds_map", data, "from", wasi_farm_ref_id); + + // console.log("listen_base fds_map", this.fds_map); + + for (let i = 0; i < len / 4; i++) { + const fd = data[i]; + if (this.fds_map[fd] === undefined) { + this.fds_map[fd] = []; + console.error("listen_base fd is not defined"); + } + this.fds_map[fd].push(wasi_farm_ref_id); + // console.log("this.fds_map", this.fds_map); + // console.log("this.fds_map[fd]", this.fds_map[fd]); + // console.log("this.fds_map[1]", this.fds_map[1]); + // console.log("fd", fd, "wasi_farm_ref_id", wasi_farm_ref_id); + } + + // console.log("listen_base fds_map", this.fds_map); + + break switcher; + } + } + + const old_call_lock = Atomics.exchange(lock_view, 1, 0); + if (old_call_lock !== 1) { + throw new Error("Lock is already set"); + } + const num = Atomics.notify(lock_view, 1, 1); + if (num !== 1) { + if (num === 0) { + console.warn("notify failed, waiter is late"); + continue; + } + throw new Error("notify failed: " + num); + } + } catch (e) { + console.error("error", e); + Atomics.store(lock_view, 1, 0); + Atomics.notify(lock_view, 1, 1); + } + } + } + + // listen fd + async listen_fd(fd_n: number) { + const lock_view = new Int32Array(this.lock_fds, fd_n * 12); + const bytes_offset = fd_n * fd_func_sig_bytes; + const func_sig_view_u8 = new Uint8Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u16 = new Uint16Array(this.fd_func_sig, bytes_offset); + const func_sig_view_i32 = new Int32Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u32 = new Int32Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u64 = new BigUint64Array(this.fd_func_sig, bytes_offset); + const errno_offset = fd_func_sig_u32_size - 1; + Atomics.store(lock_view, 0, 0); + Atomics.store(lock_view, 1, 0); + Atomics.store(func_sig_view_i32, errno_offset, -1); + + // eslint-disable-next-line no-constant-condition + while (true) { + try { + let lock: "not-equal" | "timed-out" | "ok"; + + const { value } = Atomics.waitAsync(lock_view, 1, 0); + if ( value instanceof Promise) { + // console.log("listen", fd_n, 1); + lock = await value; + } else { + lock = value; + } + if (lock === "timed-out") { + throw new Error("timed-out"); + } + + const func_lock = Atomics.load(lock_view, 1); + + if (func_lock !== 1) { + throw new Error("func_lock is already set: " + func_lock); + } + + // console.log("func_lock", func_lock); + + // console.log("called", fd_n, 1); + + const set_error = (errno: number) => { + // console.log("set_error", errno, "pointer", errno_offset); + Atomics.store(func_sig_view_i32, errno_offset, errno); + } + + const func_number = Atomics.load(func_sig_view_u32, 0); + + // console.log("called: func: ", get_func_name_from_number(func_number), "fd: ", fd_n); + + switcher: switch (func_number) { + // fd_advise: (fd: u32) => errno; + case 7: { + const fd = Atomics.load(func_sig_view_u32, 1); + + const error = this.fd_advise(fd); + + set_error(error); + break switcher; + } + // fd_allocate: (fd: u32, offset: u64, len: u64) => errno; + case 8: { + const fd = Atomics.load(func_sig_view_u32, 1); + const offset = Atomics.load(func_sig_view_u64, 1); + const len = Atomics.load(func_sig_view_u64, 2); + + const error = this.fd_allocate(fd, offset, len); + + set_error(error); + break switcher; + } + // fd_close: (fd: u32) => errno; + case 9: { + const fd = Atomics.load(func_sig_view_u32, 1); + + const error = await this.fd_close(fd); + + // console.log("fd_close", fd, error); + + set_error(error); + break switcher; + } + // fd_datasync: (fd: u32) => errno; + case 10: { + const fd = Atomics.load(func_sig_view_u32, 1); + + const error = this.fd_datasync(fd); + + set_error(error); + break switcher; + } + // fd_fdstat_get: (fd: u32) => [wasi.Fdstat(u32 * 6)], errno]; + case 11: { + const fd = Atomics.load(func_sig_view_u32, 1); + + const [ fdstat, ret ] = this.fd_fdstat_get(fd); + + if (fdstat) { + Atomics.store(func_sig_view_u8, 0, fdstat.fs_filetype); + Atomics.store(func_sig_view_u16, 2, fdstat.fs_flags); + Atomics.store(func_sig_view_u64, 1, fdstat.fs_rights_base); + Atomics.store(func_sig_view_u64, 2, fdstat.fs_rights_inherited); + } + set_error(ret); + break switcher; + } + // fd_fdstat_set_flags: (fd: u32, flags: u16) => errno; + case 12: { + const fd = Atomics.load(func_sig_view_u32, 1); + const flags = Atomics.load(func_sig_view_u16, 4); + + const error = this.fd_fdstat_set_flags(fd, flags); + + set_error(error); + break switcher; + } + // fd_fdstat_set_rights: (fd: u32, fs_rights_base: u64, fs_rights_inheriting: u64) => errno; + case 13: { + const fd = Atomics.load(func_sig_view_u32, 1); + const fs_rights_base = Atomics.load(func_sig_view_u64, 1); + const fs_rights_inheriting = Atomics.load(func_sig_view_u64, 2); + + const error = this.fd_fdstat_set_rights(fd, fs_rights_base, fs_rights_inheriting); + + set_error(error); + break switcher; + } + // fd_filestat_get: (fd: u32) => [wasi.Filestat(u32 * 16)], errno]; + case 14: { + const fd = Atomics.load(func_sig_view_u32, 1); + + const [ filestat, ret ] = this.fd_filestat_get(fd); + + if (filestat) { + Atomics.store(func_sig_view_u64, 0, filestat.dev); + Atomics.store(func_sig_view_u64, 1, filestat.ino); + Atomics.store(func_sig_view_u8, 16, filestat.filetype); + Atomics.store(func_sig_view_u64, 3, filestat.nlink); + Atomics.store(func_sig_view_u64, 4, filestat.size); + Atomics.store(func_sig_view_u64, 5, filestat.atim); + Atomics.store(func_sig_view_u64, 6, filestat.mtim); + Atomics.store(func_sig_view_u64, 7, filestat.ctim); + } + + set_error(ret); + break switcher; + } + // fd_filestat_set_size: (fd: u32, size: u64) => errno; + case 15: { + const fd = Atomics.load(func_sig_view_u32, 1); + const size = Atomics.load(func_sig_view_u64, 1); + + const error = this.fd_filestat_set_size(fd, size); + + set_error(error); + break switcher; + } + // fd_filestat_set_times: (fd: u32, atim: u64, mtim: u64, fst_flags: u16) => errno; + case 16: { + const fd = Atomics.load(func_sig_view_u32, 1); + const atim = Atomics.load(func_sig_view_u64, 1); + const mtim = Atomics.load(func_sig_view_u64, 2); + const fst_flags = Atomics.load(func_sig_view_u16, 12); + + const error = this.fd_filestat_set_times(fd, atim, mtim, fst_flags); + + set_error(error); + break switcher; + } + // fd_pread: (fd: u32, iovs_ptr: pointer, iovs_len: u32, offset: u64) => [u32, data_ptr, errno]; + case 17: { + const fd = Atomics.load(func_sig_view_u32, 1); + const iovs_ptr = Atomics.load(func_sig_view_u32, 2); + const iovs_ptr_len = Atomics.load(func_sig_view_u32, 3); + const offset = Atomics.load(func_sig_view_u64, 2); + const data = new Uint32Array(this.allocator.get_memory(iovs_ptr, iovs_ptr_len)); + this.allocator.free(iovs_ptr, iovs_ptr_len); + + const iovecs = new Array(); + for (let i = 0; i < iovs_ptr_len; i += 8) { + const iovec = new wasi.Iovec(); + iovec.buf = data[i * 2]; + iovec.buf_len = data[i * 2 + 1]; + iovecs.push(iovec); + } + + const [[nread, buffer8], error] = this.fd_pread(fd, iovecs, offset); + + if (nread !== undefined) { + Atomics.store(func_sig_view_u32, 0, nread); + } + if (buffer8) { + await this.allocator.async_write(buffer8, this.fd_func_sig, fd * fd_func_sig_u32_size + 1); + } + set_error(error); + break switcher; + } + // fd_prestat_get: (fd: u32) => [wasi.Prestat(u32 * 2)], errno]; + case 18: { + const fd = Atomics.load(func_sig_view_u32, 1); + + const [ prestat, ret ] = this.fd_prestat_get(fd); + + // console.log("fd_prestat_get", prestat, ret); + + if (prestat) { + Atomics.store(func_sig_view_u32, 0, prestat.tag); + Atomics.store(func_sig_view_u32, 1, prestat.inner.pr_name.byteLength); + } + set_error(ret); + break switcher; + } + // fd_prestat_dir_name: (fd: u32, path_len: u32) => [path_ptr: pointer, path_len: u32, errno]; + case 19: { + const fd = Atomics.load(func_sig_view_u32, 1); + const path_len = Atomics.load(func_sig_view_u32, 2); + + const [ prestat_dir_name, ret ] = this.fd_prestat_dir_name(fd, path_len); + + // console.log("fd_prestat_dir_name: park: ", prestat_dir_name); + + if (prestat_dir_name && (ret === wasi.ERRNO_SUCCESS || ret === wasi.ERRNO_NAMETOOLONG)) { + await this.allocator.async_write(prestat_dir_name, this.fd_func_sig, fd * fd_func_sig_u32_size); + } + set_error(ret); + break switcher; + } + // fd_pwrite: (fd: u32, write_data: pointer, write_data_len: u32, offset: u64) => [u32, errno]; + case 20: { + const fd = Atomics.load(func_sig_view_u32, 1); + const write_data_ptr = Atomics.load(func_sig_view_u32, 2); + const write_data_len = Atomics.load(func_sig_view_u32, 3); + const offset = Atomics.load(func_sig_view_u64, 2); + + const data = new Uint8Array(this.allocator.get_memory(write_data_ptr, write_data_len)); + this.allocator.free(write_data_ptr, write_data_len); + + const [nwritten, error] = this.fd_pwrite(fd, data, offset); + + if (nwritten !== undefined) { + Atomics.store(func_sig_view_u32, 0, nwritten); + } + set_error(error); + break switcher; + } + // fd_read: (fd: u32, iovs_ptr: pointer, iovs_len: u32) => [u32, data_ptr, errno]; + case 21: { + const fd = Atomics.load(func_sig_view_u32, 1); + const iovs_ptr = Atomics.load(func_sig_view_u32, 2); + const iovs_ptr_len = Atomics.load(func_sig_view_u32, 3); + // console.log("fd_read: park: iovs: Uint8Array", this.allocator.get_memory(iovs_ptr, iovs_ptr_len)); + // console.log("ptr_len", iovs_ptr_len); + const iovs = new Uint32Array(this.allocator.get_memory(iovs_ptr, iovs_ptr_len)); + this.allocator.free(iovs_ptr, iovs_ptr_len); + + // console.log("fd_read: park: iovs", iovs); + + const iovecs = new Array(); + for (let i = 0; i < iovs_ptr_len; i += 8) { + const iovec = new wasi.Iovec(); + iovec.buf = iovs[i * 2]; + iovec.buf_len = iovs[i * 2 + 1]; + iovecs.push(iovec); + } + + // console.log("fd_read: park: iovecs", iovecs); + + const [[nread, buffer8], error] = this.fd_read(fd, iovecs); + + // console.log("fd_read: park: buffer8", new TextDecoder().decode(buffer8)); + + if (nread !== undefined) { + Atomics.store(func_sig_view_u32, 0, nread); + } + if (buffer8) { + await this.allocator.async_write(buffer8, this.fd_func_sig, fd * fd_func_sig_u32_size + 1); + } + set_error(error); + break switcher; + } + // fd_readdir: (fd: u32, buf_len: u32, cookie: u64) => [buf_ptr: pointer, buf_len: u32, buf_used: u32, errno]; + case 22: { + const fd = Atomics.load(func_sig_view_u32, 1); + const buf_len = Atomics.load(func_sig_view_u32, 2); + const cookie = Atomics.load(func_sig_view_u64, 2); + + const [[array, buf_used], error] = this.fd_readdir(fd, buf_len, cookie); + + if (array) { + await this.allocator.async_write(array, this.fd_func_sig, fd * fd_func_sig_u32_size); + } + if (buf_used !== undefined) { + Atomics.store(func_sig_view_u32, 2, buf_used); + } + set_error(error); + break switcher; + } + // fd_seek: (fd: u32, offset: i64, whence: u8) => [u64, errno]; + case 24: { + const fd = Atomics.load(func_sig_view_u32, 1); + const offset = Atomics.load(func_sig_view_u64, 1); + const whence = Atomics.load(func_sig_view_u8,16); + + const [new_offset, error] = this.fd_seek(fd, offset, whence); + + if (new_offset !== undefined) { + Atomics.store(func_sig_view_u64, 0, new_offset); + } + set_error(error); + break switcher; + } + // fd_sync: (fd: u32) => errno; + case 25: { + const fd = Atomics.load(func_sig_view_u32, 1); + + const error = this.fd_sync(fd); + + set_error(error); + break switcher; + } + // fd_tell: (fd: u32) => [u64, errno]; + case 26: { + const fd = Atomics.load(func_sig_view_u32, 1); + + const [offset, error] = this.fd_tell(fd); + + if (offset !== undefined) { + Atomics.store(func_sig_view_u64, 0, offset); + } + set_error(error); + break switcher; + } + // fd_write: (fd: u32, write_data: pointer, write_data_len: u32) => [u32, errno]; + case 27: { + const fd = Atomics.load(func_sig_view_u32, 1); + const write_data_ptr = Atomics.load(func_sig_view_u32, 2); + const write_data_len = Atomics.load(func_sig_view_u32, 3); + + const data = new Uint8Array(this.allocator.get_memory(write_data_ptr, write_data_len)); + this.allocator.free(write_data_ptr, write_data_len); + + // console.log("allocator", this.allocator); + + // console.log("fd_write: park: write_data", new TextDecoder().decode(data)); + + const [nwritten, error] = this.fd_write(fd, data); + + // console.log("fd_write: park: error", error); + + if (nwritten !== undefined) { + Atomics.store(func_sig_view_u32, 0, nwritten); + } + set_error(error); + break switcher; + } + // path_create_directory: (fd: u32, path_ptr: pointer, path_len: u32) => errno; + case 28: { + const fd = Atomics.load(func_sig_view_u32, 1); + const path_ptr = Atomics.load(func_sig_view_u32, 2); + const path_len = Atomics.load(func_sig_view_u32, 3); + + const path = new Uint8Array(this.allocator.get_memory(path_ptr, path_len)); + const path_str = new TextDecoder().decode(path); + this.allocator.free(path_ptr, path_len); + + const error = this.path_create_directory(fd, path_str); + + set_error(error); + break switcher; + } + // path_filestat_get: (fd: u32, flags: u32, path_ptr: pointer, path_len: u32) => [wasi.Filestat(u32 * 16), errno]; + case 29: { + const fd = Atomics.load(func_sig_view_u32, 1); + const flags = Atomics.load(func_sig_view_u32, 2); + const path_ptr = Atomics.load(func_sig_view_u32, 3); + const path_len = Atomics.load(func_sig_view_u32, 4); + + const path = new Uint8Array(this.allocator.get_memory(path_ptr, path_len)); + const path_str = new TextDecoder().decode(path); + this.allocator.free(path_ptr, path_len); + + const [filestat, ret] = this.path_filestat_get(fd, flags, path_str); + + if (filestat) { + Atomics.store(func_sig_view_u64, 0, filestat.dev); + Atomics.store(func_sig_view_u64, 1, filestat.ino); + Atomics.store(func_sig_view_u8,16, filestat.filetype); + Atomics.store(func_sig_view_u64, 3, filestat.nlink); + Atomics.store(func_sig_view_u64, 4, filestat.size); + Atomics.store(func_sig_view_u64, 5, filestat.atim); + Atomics.store(func_sig_view_u64, 6, filestat.mtim); + Atomics.store(func_sig_view_u64, 7, filestat.ctim); + } + set_error(ret); + break switcher; + } + // path_filestat_set_times: (fd: u32, flags: u32, path_ptr: pointer, path_len: u32, atim: u64, mtim: u64, fst_flags: u16) => errno; + case 30: { + const fd = Atomics.load(func_sig_view_u32, 1); + const flags = Atomics.load(func_sig_view_u32, 2); + const path_ptr = Atomics.load(func_sig_view_u32, 3); + const path_len = Atomics.load(func_sig_view_u32, 4); + const atim = Atomics.load(func_sig_view_u64, 3); + const mtim = Atomics.load(func_sig_view_u64, 4); + const fst_flags = Atomics.load(func_sig_view_u16, 12); + + const path = new Uint8Array(this.allocator.get_memory(path_ptr, path_len)); + const path_str = new TextDecoder().decode(path); + this.allocator.free(path_ptr, path_len); + + const error = this.path_filestat_set_times(fd, flags, path_str, atim, mtim, fst_flags); + + set_error(error); + break switcher; + } + // path_link: (old_fd: u32, old_flags: u32, old_path_ptr: pointer, old_path_len: u32, new_fd: u32, new_path_ptr: pointer, new_path_len: u32) => errno; + case 31: { + const old_fd = Atomics.load(func_sig_view_u32, 1); + const old_flags = Atomics.load(func_sig_view_u32, 2); + const old_path_ptr = Atomics.load(func_sig_view_u32, 3); + const old_path_len = Atomics.load(func_sig_view_u32, 4); + const new_fd = Atomics.load(func_sig_view_u32, 5); + const new_path_ptr = Atomics.load(func_sig_view_u32, 6); + const new_path_len = Atomics.load(func_sig_view_u32, 7); + + const old_path = new Uint8Array(this.allocator.get_memory(old_path_ptr, old_path_len)); + const old_path_str = new TextDecoder().decode(old_path); + this.allocator.free(old_path_ptr, old_path_len); + const new_path = new Uint8Array(this.allocator.get_memory(new_path_ptr, new_path_len)); + const new_path_str = new TextDecoder().decode(new_path); + this.allocator.free(new_path_ptr, new_path_len); + + const error = this.path_link(old_fd, old_flags, old_path_str, new_fd, new_path_str); + + set_error(error); + break switcher; + } + // path_open: (fd: u32, dirflags: u32, path_ptr: pointer, path_len: u32, oflags: u32, fs_rights_base: u64, fs_rights_inheriting: u64, fdflags: u16) => [u32, errno]; + case 32: { + const fd = Atomics.load(func_sig_view_u32, 1); + const dirflags = Atomics.load(func_sig_view_u32, 2); + const path_ptr = Atomics.load(func_sig_view_u32, 3); + const path_len = Atomics.load(func_sig_view_u32, 4); + const oflags = Atomics.load(func_sig_view_u32, 5); + const fs_rights_base = Atomics.load(func_sig_view_u64, 3); + const fs_rights_inheriting = Atomics.load(func_sig_view_u64, 4); + const fd_flags = Atomics.load(func_sig_view_u16, 20); + + const path = new Uint8Array(this.allocator.get_memory(path_ptr, path_len)); + const path_str = new TextDecoder().decode(path); + this.allocator.free(path_ptr, path_len); + + const [opened_fd, error] = await this.path_open(fd, dirflags, path_str, oflags, fs_rights_base, fs_rights_inheriting, fd_flags); + + // console.log("path_open: opend_fd", opened_fd, error); + + if (opened_fd !== undefined) { + Atomics.store(func_sig_view_u32, 0, opened_fd); + } + set_error(error); + break switcher; + } + // path_readlink: (fd: u32, path_ptr: pointer, path_len: u32, buf_len: u32) => [buf_len: u32, data_ptr: pointer, data_len: u32, errno]; + case 33: { + const fd = Atomics.load(func_sig_view_u32, 1); + const path_ptr = Atomics.load(func_sig_view_u32, 2); + const path_len = Atomics.load(func_sig_view_u32, 3); + const buf_len = Atomics.load(func_sig_view_u32, 4); + + const path = new Uint8Array(this.allocator.get_memory(path_ptr, path_len)); + const path_str = new TextDecoder().decode(path); + this.allocator.free(path_ptr, path_len); + + const [buf, error] = this.path_readlink(fd, path_str, buf_len); + + if (buf) { + await this.allocator.async_write(buf, this.fd_func_sig, fd * fd_func_sig_u32_size + 1); + Atomics.store(func_sig_view_u32, 0, buf.byteLength); + } + set_error(error); + break switcher; + } + // path_remove_directory: (fd: u32, path_ptr: pointer, path_len: u32) => errno; + case 34: { + const fd = Atomics.load(func_sig_view_u32, 1); + const path_ptr = Atomics.load(func_sig_view_u32, 2); + const path_len = Atomics.load(func_sig_view_u32, 3); + + const path = new Uint8Array(this.allocator.get_memory(path_ptr, path_len)); + const path_str = new TextDecoder().decode(path); + this.allocator.free(path_ptr, path_len); + + const error = this.path_remove_directory(fd, path_str); + + set_error(error); + break switcher; + } + // path_rename: (old_fd: u32, old_path_ptr: pointer, old_path_len: u32, new_fd: u32, new_path_ptr: pointer, new_path_len: u32) => errno; + case 35: { + const fd = Atomics.load(func_sig_view_u32, 1); + const old_path_ptr = Atomics.load(func_sig_view_u32, 2); + const old_path_len = Atomics.load(func_sig_view_u32, 3); + const new_fd = Atomics.load(func_sig_view_u32, 4); + const new_path_ptr = Atomics.load(func_sig_view_u32, 5); + const new_path_len = Atomics.load(func_sig_view_u32, 6); + + const old_path = new Uint8Array(this.allocator.get_memory(old_path_ptr, old_path_len)); + const old_path_str = new TextDecoder().decode(old_path); + this.allocator.free(old_path_ptr, old_path_len); + const new_path = new Uint8Array(this.allocator.get_memory(new_path_ptr, new_path_len)); + const new_path_str = new TextDecoder().decode(new_path); + this.allocator.free(new_path_ptr, new_path_len); + + const error = this.path_rename(fd, old_path_str, new_fd, new_path_str); + + set_error(error); + break switcher; + } + // path_symlink: (old_path_ptr: pointer, old_path_len: u32, fd: u32, new_path_ptr: pointer, new_path_len: u32) => errno; + case 36: { + const old_path_ptr = Atomics.load(func_sig_view_u32, 1); + const old_path_len = Atomics.load(func_sig_view_u32, 2); + const fd = Atomics.load(func_sig_view_u32, 3); + const new_path_ptr = Atomics.load(func_sig_view_u32, 4); + const new_path_len = Atomics.load(func_sig_view_u32, 5); + + const old_path = new Uint8Array(this.allocator.get_memory(old_path_ptr, old_path_len)); + const old_path_str = new TextDecoder().decode(old_path); + this.allocator.free(old_path_ptr, old_path_len); + const new_path = new Uint8Array(this.allocator.get_memory(new_path_ptr, new_path_len)); + const new_path_str = new TextDecoder().decode(new_path); + this.allocator.free(new_path_ptr, new_path_len); + + set_error(this.path_symlink(old_path_str, fd, new_path_str)); + break switcher; + } + // path_unlink_file: (fd: u32, path_ptr: pointer, path_len: u32) => errno; + case 37: { + const fd = Atomics.load(func_sig_view_u32, 1); + const path_ptr = Atomics.load(func_sig_view_u32, 2); + const path_len = Atomics.load(func_sig_view_u32, 3); + + const path = new Uint8Array(this.allocator.get_memory(path_ptr, path_len)); + const path_str = new TextDecoder().decode(path); + this.allocator.free(path_ptr, path_len); + + set_error(this.path_unlink_file(fd, path_str)); + break switcher; + } + default: { + throw new Error("Unknown function number: " + func_number); + } + } + + const old_call_lock = Atomics.exchange(lock_view, 1, 0); + if (old_call_lock !== 1) { + throw new Error("Call is already set: " + old_call_lock + "\nfunc: " + get_func_name_from_number(func_number) + "\nfd: " + fd_n); + } + + // console.log("called end: func: ", get_func_name_from_number(func_number), "fd: ", fd_n); + + const n = Atomics.notify(lock_view, 1); + if (n !== 1) { + if (n === 0) { + console.warn("notify number is 0. ref is late?"); + } else { + console.warn("notify number is not 1: " + n); + } + } + + if (this.fds[fd_n] === undefined) { + break; + } + } catch (e) { + console.error(e); + + // sleep 1000ms + await new Promise((resolve) => setTimeout(resolve, 1000)); + + const lock_view = new Int32Array(this.lock_fds); + Atomics.exchange(lock_view, 1, 0); + const func_sig_view = new Int32Array(this.fd_func_sig); + Atomics.exchange(func_sig_view, 16, -1); + } + } + } +} diff --git a/src/wasi_farm/shared_array_buffer/ref.ts b/src/wasi_farm/shared_array_buffer/ref.ts new file mode 100644 index 0000000..7405a7c --- /dev/null +++ b/src/wasi_farm/shared_array_buffer/ref.ts @@ -0,0 +1,1321 @@ +import { WASIFarmRef, WASIFarmRefObject } from "../ref.js"; +import { AllocatorUseArrayBuffer, AllocatorUseArrayBufferObject } from "./allocator.js"; +import { fd_func_sig_bytes, fd_func_sig_u32_size } from "./park.js"; +import * as wasi from "../../wasi_defs.js"; +import { FdCloseSenderUseArrayBuffer, FdCloseSenderUseArrayBufferObject } from "./fd_close_sender.js"; + +export type WASIFarmRefUseArrayBufferObject = { + allocator: AllocatorUseArrayBuffer; + lock_fds: SharedArrayBuffer; + fds_len_and_num: SharedArrayBuffer; + fd_func_sig: SharedArrayBuffer; + base_func_util: SharedArrayBuffer; +} & WASIFarmRefObject; + +// Transmittable objects to communicate with Park +export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { + // For more information on member variables, see . See /park.ts + allocator: AllocatorUseArrayBuffer; + lock_fds: SharedArrayBuffer; + // byte 1: fds_len + // byte 2: all wasi_farm_ref num + fds_len_and_num: SharedArrayBuffer; + fd_func_sig: SharedArrayBuffer; + base_func_util: SharedArrayBuffer; + + constructor( + allocator: AllocatorUseArrayBufferObject, + lock_fds: SharedArrayBuffer, + fds_len_and_num: SharedArrayBuffer, + fd_func_sig: SharedArrayBuffer, + base_func_util: SharedArrayBuffer, + fd_close_receiver: FdCloseSenderUseArrayBufferObject, + stdin: number | undefined, + stdout: number | undefined, + stderr: number | undefined, + default_fds: Array, + ) { + super(stdin, stdout, stderr, FdCloseSenderUseArrayBuffer.init_self(fd_close_receiver), default_fds); + this.allocator = AllocatorUseArrayBuffer.init_self(allocator); + this.lock_fds = lock_fds; + this.fd_func_sig = fd_func_sig; + this.base_func_util = base_func_util; + this.fds_len_and_num = fds_len_and_num; + + // console.log("fds_len_and_num", this.fds_len_and_num); + + // const view = new Int32Array(this.fds_len_and_num); + // Atomics.store(view, 0, 0); + } + + get_fds_len(): number { + const view = new Int32Array(this.fds_len_and_num); + return Atomics.load(view, 0); + } + + static init_self(sl: WASIFarmRefUseArrayBufferObject): WASIFarmRef { + return new WASIFarmRefUseArrayBuffer( + sl.allocator, + sl.lock_fds, + sl.fds_len_and_num, + sl.fd_func_sig, + sl.base_func_util, + sl.fd_close_receiver as unknown as FdCloseSenderUseArrayBufferObject, + sl.stdin, + sl.stdout, + sl.stderr, + sl.default_fds, + ); + } + + // allocate a new id on wasi_farm_ref and return it + set_id(): number { + const view = new Int32Array(this.fds_len_and_num); + const id = Atomics.add(view, 1, 1); + this.id = id; + return id; + } + + // lock base_func + private lock_base_func(): void { + const view = new Int32Array(this.base_func_util); + // eslint-disable-next-line no-constant-condition + while (true) { + const lock = Atomics.wait(view, 0, 1); + if (lock === "timed-out") { + throw new Error("timed-out lock"); + } + const old = Atomics.compareExchange(view, 0, 0, 1); + if (old !== 0) { + continue; + } + break; + } + } + + // call base_func + private call_base_func(): void { + const view = new Int32Array(this.base_func_util); + const old = Atomics.exchange(view, 1, 1); + if (old !== 0) { + console.error("what happened?"); + } + Atomics.notify(view, 1, 1); + } + + // wait base_func + private wait_base_func(): void { + const view = new Int32Array(this.base_func_util); + const lock = Atomics.wait(view, 1, 1); + if (lock === "timed-out") { + throw new Error("timed-out lock"); + } + } + + // release base_func + private release_base_func(): void { + const view = new Int32Array(this.base_func_util); + Atomics.store(view, 0, 0); + Atomics.notify(view, 0, 1); + } + + // set park_fds_map + set_park_fds_map(fds: Array): void { + this.lock_base_func(); + const view = new Int32Array(this.base_func_util); + Atomics.store(view, 2, 0); + const fds_array = new Uint32Array(fds); + // console.log("fds_array", fds_array); + this.allocator.block_write(fds_array, this.base_func_util, 3); + Atomics.store(view, 5, this.id); + this.call_base_func(); + this.wait_base_func(); + this.release_base_func(); + } + + private lock_fd(fd: number) { + // console.log("lock_fd start", fd); + const view = new Int32Array(this.lock_fds, fd * 12); + // eslint-disable-next-line no-constant-condition + while (true) { + const now_value = Atomics.load(view, 0); + if (now_value !== 0) { + const value = Atomics.wait(view, 0, now_value); + if (value === "timed-out") { + console.error("lock_fd timed-out"); + continue; + } + } + const old = Atomics.compareExchange(view, 0, 0, 1); + if (old === 0) { + // console.log("lock_fd success", fd); + return; + } + } + } + + private release_fd(fd: number) { + // console.log("release_fd", fd); + const view = new Int32Array(this.lock_fds, fd * 12); + Atomics.store(view, 0, 0); + Atomics.notify(view, 0, 1); + } + + private lock_double_fd(fd1: number, fd2: number) { + // console.log("lock_double_fd", fd1, fd2); + const view = new Int32Array(this.lock_fds); + // eslint-disable-next-line no-constant-condition + while (true) { + const now_value1 = Atomics.load(view, fd1 * 3); + const value = Atomics.wait(view, fd1 * 3, now_value1); + if (value === "timed-out") { + console.error("lock_double_fd timed-out"); + continue; + } + const old1 = Atomics.exchange(view, fd1 * 3, 2); + if (old1 === 0) { + const now_value2 = Atomics.load(view, fd2 * 3); + if (now_value2 === 2) { + // It's nearly deadlocked. + if (fd1 < fd2) { + // release fd1 + Atomics.store(view, fd1 * 3, 0); + Atomics.notify(view, fd1 * 3, 1); + continue; + } + } + const value = Atomics.wait(view, fd2 * 3, now_value2); + if (value === "timed-out") { + console.error("lock_double_fd timed-out"); + continue; + } + const old2 = Atomics.exchange(view, fd2 * 3, 2); + if (old2 === 0) { + return; + } + Atomics.store(view, fd1 * 3, 0); + Atomics.notify(view, fd1 * 3, 1); + } + } + } + + private release_double_fd(fd1: number, fd2: number) { + // console.log("release_double_fd", fd1, fd2); + const view = new Int32Array(this.lock_fds); + Atomics.store(view, fd1 * 3, 0); + Atomics.notify(view, fd1 * 3, 1); + Atomics.store(view, fd2 * 3, 0); + Atomics.notify(view, fd2 * 3, 1); + } + + private invoke_fd_func(fd: number): boolean { + if (fd === undefined) { + return false; + } + // console.log("invoke_fd_func", fd); + const view = new Int32Array(this.lock_fds, fd * 12 + 4); + const old = Atomics.exchange(view, 0, 1); + if (old === 1) { + console.error("invoke_fd_func already invoked\n" + "fd: " + fd); + return; + } + const n = Atomics.notify(view, 0); + if (n !== 1) { + if (n === 0) { + const len = this.get_fds_len(); + if (len <= fd) { + const lock = Atomics.exchange(view, 0, 0); + if (lock !== 1) { + console.error("what happened?"); + } + Atomics.notify(view, 0, 1); + console.error("what happened?: len", len, "fd", fd); + return true; + } else { + console.warn("invoke_func_loop is late"); + return true; + } + } + console.error("invoke_fd_func notify failed:", n); + return false; + } + return true; + } + + private wait_fd_func(fd: number) { + // console.log("wait_fd_func", fd); + const view = new Int32Array(this.lock_fds, fd * 12 + 4); + const value = Atomics.wait(view, 0, 1); + if (value === "timed-out") { + console.error("wait call park_fd_func timed-out"); + } + } + + private call_fd_func(fd: number): boolean { + if (!this.invoke_fd_func(fd)) { + return false; + } + // console.log("call_fd_func", fd); + this.wait_fd_func(fd); + // console.log("wait_fd_func", fd); + // console.log("call_fd_func released", fd); + return true; + } + + private get_error(fd: number): number { + const func_sig_view_i32 = new Int32Array(this.fd_func_sig, fd * fd_func_sig_bytes); + const errno_offset = fd_func_sig_u32_size - 1; + // console.log("get_error: offset", errno_offset); + return Atomics.load(func_sig_view_i32, errno_offset); + } + + fd_advise( + fd: number, + ): number { + this.lock_fd(fd); + + const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, fd * fd_func_sig_bytes); + + Atomics.store(func_sig_view_u32, 0, 7); + Atomics.store(func_sig_view_u32, 1, fd); + + if (!this.call_fd_func(fd)) { + this.release_fd(fd); + return wasi.ERRNO_BADF; + } + + const error = this.get_error(fd); + + this.release_fd(fd); + + return error; + } + + fd_allocate( + fd: number, + offset: bigint, + len: bigint, + ): number { + this.lock_fd(fd); + + const bytes_offset = fd * fd_func_sig_bytes; + const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u64 = new BigUint64Array(this.fd_func_sig, bytes_offset); + + Atomics.store(func_sig_view_u32, 0, 8); + Atomics.store(func_sig_view_u32, 1, fd); + Atomics.store(func_sig_view_u64, 1, offset); + Atomics.store(func_sig_view_u64, 2, len); + + if (!this.call_fd_func(fd)) { + this.release_fd(fd); + return wasi.ERRNO_BADF; + } + + const error = this.get_error(fd); + + this.release_fd(fd); + + return error; + } + + fd_close( + fd: number, + ): number { + this.lock_fd(fd); + + const bytes_offset = fd * fd_func_sig_bytes; + const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); + + Atomics.store(func_sig_view_u32, 0, 9); + Atomics.store(func_sig_view_u32, 1, fd); + + // console.log("fd_close: ref", fd); + + if (!this.call_fd_func(fd)) { + this.release_fd(fd); + return wasi.ERRNO_BADF; + } + + // console.log("fd_close: ref2", fd); + + const error = this.get_error(fd); + + this.release_fd(fd); + + // console.log("fd_close: ref3", fd); + + return error; + } + + fd_datasync( + fd: number, + ): number { + this.lock_fd(fd); + + const bytes_offset = fd * fd_func_sig_bytes; + const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); + + Atomics.store(func_sig_view_u32, 0, 10); + Atomics.store(func_sig_view_u32, 1, fd); + + if (!this.call_fd_func(fd)) { + this.release_fd(fd); + return wasi.ERRNO_BADF; + } + + const error = this.get_error(fd); + + this.release_fd(fd); + + return error; + } + + fd_fdstat_get( + fd: number, + ): [wasi.Fdstat | undefined, number] { + this.lock_fd(fd); + + const bytes_offset = fd * fd_func_sig_bytes; + const func_sig_view_u8 = new Uint8Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u16 = new Uint16Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u64 = new BigUint64Array(this.fd_func_sig, bytes_offset); + + Atomics.store(func_sig_view_u32, 0, 11); + Atomics.store(func_sig_view_u32, 1, fd); + + if (!this.call_fd_func(fd)) { + this.release_fd(fd); + return [undefined, wasi.ERRNO_BADF]; + } + + const error = this.get_error(fd); + + if (error !== wasi.ERRNO_SUCCESS) { + this.release_fd(fd); + return [undefined, error]; + } + + const fs_filetype = Atomics.load(func_sig_view_u8, 0); + const fs_flags = Atomics.load(func_sig_view_u16, 2); + const fs_rights_base = Atomics.load(func_sig_view_u64, 1); + const fs_rights_inheriting = Atomics.load(func_sig_view_u64, 2); + + this.release_fd(fd); + + const fd_stat = new wasi.Fdstat( + fs_filetype, + fs_flags, + ); + fd_stat.fs_rights_base = fs_rights_base; + fd_stat.fs_rights_inherited = fs_rights_inheriting; + + return [fd_stat, error]; + } + + fd_fdstat_set_flags( + fd: number, + flags: number, + ): number { + this.lock_fd(fd); + + const bytes_offset = fd * fd_func_sig_bytes; + const func_sig_view_u16 = new Uint16Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); + + Atomics.store(func_sig_view_u32, 0, 12); + Atomics.store(func_sig_view_u32, 1, fd); + Atomics.store(func_sig_view_u16, 4, flags); + + if (!this.call_fd_func(fd)) { + this.release_fd(fd); + return wasi.ERRNO_BADF; + } + + const error = this.get_error(fd); + + this.release_fd(fd); + + return error; + } + + fd_fdstat_set_rights( + fd: number, + fs_rights_base: bigint, + fs_rights_inheriting: bigint, + ): number { + this.lock_fd(fd); + + const bytes_offset = fd * fd_func_sig_bytes; + const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u64 = new BigUint64Array(this.fd_func_sig, bytes_offset); + + Atomics.store(func_sig_view_u32, 0, 13); + Atomics.store(func_sig_view_u32, 1, fd); + Atomics.store(func_sig_view_u64, 1, fs_rights_base); + Atomics.store(func_sig_view_u64, 2, fs_rights_inheriting); + + if (!this.call_fd_func(fd)) { + this.release_fd(fd); + return wasi.ERRNO_BADF; + } + + const error = this.get_error(fd); + + this.release_fd(fd); + + return error; + } + + fd_filestat_get( + fd: number, + ): [wasi.Filestat | undefined, number] { + this.lock_fd(fd); + + const bytes_offset = fd * fd_func_sig_bytes; + const func_sig_view_u8 = new Uint8Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u64 = new BigUint64Array(this.fd_func_sig, bytes_offset); + + Atomics.store(func_sig_view_u32, 0, 14); + Atomics.store(func_sig_view_u32, 1, fd); + + if (!this.call_fd_func(fd)) { + this.release_fd(fd); + return [undefined, wasi.ERRNO_BADF]; + } + + const error = this.get_error(fd); + + if (error !== wasi.ERRNO_SUCCESS) { + this.release_fd(fd); + return [undefined, error]; + } + + const fs_dev = Atomics.load(func_sig_view_u64, 0); + const fs_ino = Atomics.load(func_sig_view_u64, 1); + const fs_filetype = Atomics.load(func_sig_view_u8, 16); + const fs_nlink = Atomics.load(func_sig_view_u64, 3); + const fs_size = Atomics.load(func_sig_view_u64, 4); + const fs_atim = Atomics.load(func_sig_view_u64, 5); + const fs_mtim = Atomics.load(func_sig_view_u64, 6); + const fs_ctim = Atomics.load(func_sig_view_u64, 7); + + this.release_fd(fd); + + const file_stat = new wasi.Filestat( + fs_filetype, fs_size + ); + file_stat.dev = fs_dev; + file_stat.ino = fs_ino; + file_stat.nlink = fs_nlink; + file_stat.atim = fs_atim; + file_stat.mtim = fs_mtim; + file_stat.ctim = fs_ctim; + + return [file_stat, error]; + } + + fd_filestat_set_size( + fd: number, + size: bigint, + ): number { + this.lock_fd(fd); + + const bytes_offset = fd * fd_func_sig_bytes; + const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u64 = new BigUint64Array(this.fd_func_sig, bytes_offset); + + Atomics.store(func_sig_view_u32, 0, 15); + Atomics.store(func_sig_view_u32, 1, fd); + Atomics.store(func_sig_view_u64, 1, size); + + if (!this.call_fd_func(fd)) { + this.release_fd(fd); + return wasi.ERRNO_BADF; + } + + const error = this.get_error(fd); + + this.release_fd(fd); + + return error; + } + + fd_filestat_set_times( + fd: number, + st_atim: bigint, + st_mtim: bigint, + fst_flags: number, + ): number { + this.lock_fd(fd); + + const bytes_offset = fd * fd_func_sig_bytes; + const func_sig_view_u16 = new Uint16Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u64 = new BigUint64Array(this.fd_func_sig, bytes_offset); + + Atomics.store(func_sig_view_u32, 0, 16); + Atomics.store(func_sig_view_u32, 1, fd); + Atomics.store(func_sig_view_u64, 1, st_atim); + Atomics.store(func_sig_view_u64, 2, st_mtim); + Atomics.store(func_sig_view_u16, 12, fst_flags); + + if (!this.call_fd_func(fd)) { + this.release_fd(fd); + return wasi.ERRNO_BADF; + } + + const error = this.get_error(fd); + + this.release_fd(fd); + + return error; + } + + fd_pread( + fd: number, + iovs: Uint32Array, + offset: bigint, + ): [[number, Uint8Array] | undefined, number] { + this.lock_fd(fd); + + const bytes_offset = fd * fd_func_sig_bytes; + const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u64 = new BigUint64Array(this.fd_func_sig, bytes_offset); + + Atomics.store(func_sig_view_u32, 0, 17); + Atomics.store(func_sig_view_u32, 1, fd); + const [ptr, len] = this.allocator.block_write(iovs, this.fd_func_sig, fd * fd_func_sig_u32_size + 2); + Atomics.store(func_sig_view_u64, 2, offset); + + if (!this.call_fd_func(fd)) { + this.allocator.free(ptr, len); + this.release_fd(fd); + return [undefined, wasi.ERRNO_BADF]; + } + + const error = this.get_error(fd); + + const nread = Atomics.load(func_sig_view_u32, 0); + const buf_ptr = Atomics.load(func_sig_view_u32, 1); + const buf_len = Atomics.load(func_sig_view_u32, 2); + this.release_fd(fd); + + if (error === wasi.ERRNO_BADF) { + this.allocator.free(buf_ptr, buf_len); + return [undefined, error]; + } + + const buf = new Uint8Array(this.allocator.get_memory(buf_ptr, buf_len)); + + if (nread !== buf_len) { + console.error("pread nread !== buf_len"); + } + + this.allocator.free(buf_ptr, buf_len); + + return [[nread, buf], error]; + } + + fd_prestat_get( + fd: number, + ): [[number, number] | undefined, number] { + this.lock_fd(fd); + + const bytes_offset = fd * fd_func_sig_bytes; + const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); + + Atomics.store(func_sig_view_u32, 0, 18); + Atomics.store(func_sig_view_u32, 1, fd); + + if (!this.call_fd_func(fd)) { + this.release_fd(fd); + return [undefined, wasi.ERRNO_BADF]; + } + + const error = this.get_error(fd); + + if (error !== wasi.ERRNO_SUCCESS) { + this.release_fd(fd); + return [undefined, error]; + } + + const pr_tag = Atomics.load(func_sig_view_u32, 0); + const pr_name_len = Atomics.load(func_sig_view_u32, 1); + + this.release_fd(fd); + + return [[pr_tag, pr_name_len], error]; + } + + fd_prestat_dir_name( + fd: number, + path_len: number, + ): [Uint8Array | undefined, number] { + this.lock_fd(fd); + + const bytes_offset = fd * fd_func_sig_bytes; + const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); + + Atomics.store(func_sig_view_u32, 0, 19); + Atomics.store(func_sig_view_u32, 1, fd); + Atomics.store(func_sig_view_u32, 2, path_len); + + if (!this.call_fd_func(fd)) { + this.release_fd(fd); + return [undefined, wasi.ERRNO_BADF]; + } + + const error = this.get_error(fd); + + const ret_path_ptr = Atomics.load(func_sig_view_u32, 0); + const ret_path_len = Atomics.load(func_sig_view_u32, 1); + + this.release_fd(fd); + if (error !== wasi.ERRNO_SUCCESS && error !== wasi.ERRNO_NAMETOOLONG) { + this.allocator.free(ret_path_ptr, ret_path_len); + return [undefined, error]; + } + + const ret_path = new Uint8Array(this.allocator.get_memory(ret_path_ptr, ret_path_len)); + this.allocator.free(ret_path_ptr, ret_path_len); + + return [ret_path, error]; + } + + fd_pwrite( + fd: number, + write_data: Uint8Array, + offset: bigint, + ): [number | undefined, number] { + this.lock_fd(fd); + + const bytes_offset = fd * fd_func_sig_bytes; + const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u64 = new BigUint64Array(this.fd_func_sig, bytes_offset); + + Atomics.store(func_sig_view_u32, 0, 20); + Atomics.store(func_sig_view_u32, 1, fd); + const [ptr, len] = this.allocator.block_write(write_data, this.fd_func_sig, fd * fd_func_sig_u32_size + 2); + Atomics.store(func_sig_view_u64, 2, offset); + + if (!this.call_fd_func(fd)) { + this.allocator.free(ptr, len); + this.release_fd(fd); + return [undefined, wasi.ERRNO_BADF]; + } + + const error = this.get_error(fd); + + if (error === wasi.ERRNO_BADF) { + this.release_fd(fd); + return [undefined, error]; + } + + const nwritten = Atomics.load(func_sig_view_u32, 0); + + this.release_fd(fd); + + return [nwritten, error]; + } + + fd_read( + fd: number, + iovs: Uint32Array, + ): [[number, Uint8Array] | undefined, number] { + this.lock_fd(fd); + + const bytes_offset = fd * fd_func_sig_bytes; + const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); + + Atomics.store(func_sig_view_u32, 0, 21); + Atomics.store(func_sig_view_u32, 1, fd); + + // console.log("fd_read: ref: iovs", iovs); + // console.log("iovs.buffer", iovs.buffer.slice(0, iovs.byteLength)); + + const [ptr, len] = this.allocator.block_write(iovs, this.fd_func_sig, fd * fd_func_sig_u32_size + 2); + + // console.log("fd_read: ref: iovs", iovs); + + if (!this.call_fd_func(fd)) { + this.allocator.free(ptr, len); + this.release_fd(fd); + return [undefined, wasi.ERRNO_BADF]; + } + + const error = this.get_error(fd); + + const nread = Atomics.load(func_sig_view_u32, 0); + const buf_ptr = Atomics.load(func_sig_view_u32, 1); + const buf_len = Atomics.load(func_sig_view_u32, 2); + this.release_fd(fd); + + // console.log("fd_read: ref: ", nread, buf_ptr, buf_len); + + if (error === wasi.ERRNO_BADF) { + this.allocator.free(buf_ptr, buf_len); + return [undefined, error]; + } + + // fd_read: ref: 14 30 14 + // animals.ts:325 fd_read: nread 14 Hello, world! + // fd_read: ref: 21 52 32 + // ref.ts:655 fd_read: ref: 21 + const buf = new Uint8Array(this.allocator.get_memory(buf_ptr, buf_len)); + // console.log("fd_read: ref: ", nread, new TextDecoder().decode(buf)); + + // console.log("fd_read: nread", nread, new TextDecoder().decode(buf)); + + if (nread !== buf_len) { + console.error("read nread !== buf_len"); + } + + this.allocator.free(buf_ptr, buf_len); + + return [[nread, buf], error]; + } + + fd_readdir( + fd: number, + limit_buf_len: number, + cookie: bigint, + ): [[Uint8Array, number] | undefined, number] { + this.lock_fd(fd); + + const bytes_offset = fd * fd_func_sig_bytes; + const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u64 = new BigUint64Array(this.fd_func_sig, bytes_offset); + + Atomics.store(func_sig_view_u32, 0, 22); + Atomics.store(func_sig_view_u32, 1, fd); + Atomics.store(func_sig_view_u32, 2, limit_buf_len); + Atomics.store(func_sig_view_u64, 2, cookie); + + if (!this.call_fd_func(fd)) { + this.release_fd(fd); + return [undefined, wasi.ERRNO_BADF]; + } + + const error = this.get_error(fd); + + const buf_ptr = Atomics.load(func_sig_view_u32, 0); + const buf_len = Atomics.load(func_sig_view_u32, 1); + const buf_used = Atomics.load(func_sig_view_u32, 2); + this.release_fd(fd); + + if (error === wasi.ERRNO_BADF) { + this.allocator.free(buf_ptr, buf_len); + return [undefined, error]; + } + + const buf = new Uint8Array(this.allocator.get_memory(buf_ptr, buf_len)); + + this.allocator.free(buf_ptr, buf_len); + + return [[buf, buf_used], error]; + } + + // fd_renumber( + // fd: number, + // to: number, + // ): number { + // this.lock_double_fd(fd, to); + + // const bytes_offset = fd * fd_func_sig_bytes; + // const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); + + // // fd + // Atomics.store(func_sig_view_u32, 0, 23); + // Atomics.store(func_sig_view_u32, 1, fd); + // Atomics.store(func_sig_view_u32, 2, to); + + // if (!this.call_fd_func(fd)) { + // this.release_fd(fd); + // return wasi.ERRNO_BADF; + // } + + // const error = this.get_error(fd); + + // this.release_double_fd(fd, to); + + // return error; + // } + + fd_seek( + fd: number, + offset: bigint, + whence: number, + ): [bigint | undefined, number] { + this.lock_fd(fd); + + const bytes_offset = fd * fd_func_sig_bytes; + const func_sig_view_u8 = new Uint8Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u64 = new BigUint64Array(this.fd_func_sig, bytes_offset); + + Atomics.store(func_sig_view_u32, 0, 24); + Atomics.store(func_sig_view_u32, 1, fd); + Atomics.store(func_sig_view_u64, 1, offset); + Atomics.store(func_sig_view_u8, 16, whence); + + if (!this.call_fd_func(fd)) { + this.release_fd(fd); + return [undefined, wasi.ERRNO_BADF]; + } + + const error = this.get_error(fd); + + if (error === wasi.ERRNO_BADF) { + this.release_fd(fd); + return [undefined, error]; + } + + const new_offset = Atomics.load(func_sig_view_u64, 0); + + this.release_fd(fd); + + return [new_offset, error]; + } + + fd_sync( + fd: number, + ): number { + this.lock_fd(fd); + + const bytes_offset = fd * fd_func_sig_bytes; + const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); + + Atomics.store(func_sig_view_u32, 0, 25); + Atomics.store(func_sig_view_u32, 1, fd); + + if (!this.call_fd_func(fd)) { + this.release_fd(fd); + return wasi.ERRNO_BADF; + } + + const error = this.get_error(fd); + + this.release_fd(fd); + + return error; + } + + fd_tell( + fd: number, + ): [bigint | undefined, number] { + this.lock_fd(fd); + + const bytes_offset = fd * fd_func_sig_bytes; + const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u64 = new BigUint64Array(this.fd_func_sig, bytes_offset); + + Atomics.store(func_sig_view_u32, 0, 26); + Atomics.store(func_sig_view_u32, 1, fd); + + if (!this.call_fd_func(fd)) { + this.release_fd(fd); + return [undefined, wasi.ERRNO_BADF]; + } + + const error = this.get_error(fd); + + if (error === wasi.ERRNO_BADF) { + this.release_fd(fd); + return [undefined, error]; + } + + const offset = Atomics.load(func_sig_view_u64, 0); + + this.release_fd(fd); + + return [offset, error]; + } + + fd_write( + fd: number, + write_data: Uint8Array, + ): [number | undefined, number] { + this.lock_fd(fd); + + // console.log("fd_write: ref: write_data", new TextDecoder().decode(write_data)); + + const bytes_offset = fd * fd_func_sig_bytes; + const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); + + Atomics.store(func_sig_view_u32, 0, 27); + Atomics.store(func_sig_view_u32, 1, fd); + const [ptr, len] = this.allocator.block_write(write_data, this.fd_func_sig, fd * fd_func_sig_u32_size +2); + + if (!this.call_fd_func(fd)) { + // console.log("fd_write: ref: error", "wasi.ERRNO_BADF"); + + this.allocator.free(ptr, len); + this.release_fd(fd); + return [undefined, wasi.ERRNO_BADF]; + } + + const error = this.get_error(fd); + + // console.log("fd_write: ref: error", this.get_error(fd)); + + // console.log("fd_write: ref: error", error); + + if (error === wasi.ERRNO_BADF) { + this.release_fd(fd); + return [undefined, error]; + } + + const nwritten = Atomics.load(func_sig_view_u32, 0); + + this.release_fd(fd); + + return [nwritten, error]; + } + + path_create_directory( + fd: number, + path: Uint8Array, + ): number { + this.lock_fd(fd); + + const bytes_offset = fd * fd_func_sig_bytes; + const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); + + Atomics.store(func_sig_view_u32, 0, 28); + Atomics.store(func_sig_view_u32, 1, fd); + const [ptr, len] = this.allocator.block_write(path, this.fd_func_sig, fd * fd_func_sig_u32_size + 2); + + if (!this.call_fd_func(fd)) { + this.allocator.free(ptr, len); + this.release_fd(fd); + return wasi.ERRNO_BADF; + } + + const error = this.get_error(fd); + + this.release_fd(fd); + + return error; + } + + path_filestat_get( + fd: number, + flags: number, + path: Uint8Array, + ): [wasi.Filestat | undefined, number] { + this.lock_fd(fd); + + const bytes_offset = fd * fd_func_sig_bytes; + const func_sig_view_u8 = new Uint8Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u64 = new BigUint64Array(this.fd_func_sig, bytes_offset); + + Atomics.store(func_sig_view_u32, 0, 29); + Atomics.store(func_sig_view_u32, 1, fd); + Atomics.store(func_sig_view_u32, 2, flags); + const [ptr, len] = this.allocator.block_write(path, this.fd_func_sig, fd * fd_func_sig_u32_size + 3); + + if (!this.call_fd_func(fd)) { + this.allocator.free(ptr, len); + this.release_fd(fd); + return [undefined, wasi.ERRNO_BADF]; + } + + const error = this.get_error(fd); + + if (error !== wasi.ERRNO_SUCCESS) { + this.release_fd(fd); + return [undefined, error]; + } + + const fs_dev = Atomics.load(func_sig_view_u64, 0); + const fs_ino = Atomics.load(func_sig_view_u64, 1); + const fs_filetype = Atomics.load(func_sig_view_u8, 16); + const fs_nlink = Atomics.load(func_sig_view_u64, 3); + const fs_size = Atomics.load(func_sig_view_u64, 4); + const fs_atim = Atomics.load(func_sig_view_u64, 5); + const fs_mtim = Atomics.load(func_sig_view_u64, 6); + const fs_ctim = Atomics.load(func_sig_view_u64, 7); + + this.release_fd(fd); + + const file_stat = new wasi.Filestat( + fs_filetype, fs_size + ); + file_stat.dev = fs_dev; + file_stat.ino = fs_ino; + file_stat.nlink = fs_nlink; + file_stat.atim = fs_atim; + file_stat.mtim = fs_mtim; + file_stat.ctim = fs_ctim; + + return [file_stat, error]; + } + + path_filestat_set_times( + fd: number, + flags: number, + path: Uint8Array, + st_atim: bigint, + st_mtim: bigint, + fst_flags: number, + ): number { + this.lock_fd(fd); + + const bytes_offset = fd * fd_func_sig_bytes; + const func_sig_view_u16 = new Uint16Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u64 = new BigUint64Array(this.fd_func_sig, bytes_offset); + + Atomics.store(func_sig_view_u32, 0, 30); + Atomics.store(func_sig_view_u32, 1, fd); + Atomics.store(func_sig_view_u32, 2, flags); + const [ptr, len] = this.allocator.block_write(path, this.fd_func_sig, fd * fd_func_sig_u32_size + 3); + Atomics.store(func_sig_view_u64, 3, st_atim); + Atomics.store(func_sig_view_u64, 4, st_mtim); + Atomics.store(func_sig_view_u16, 12, fst_flags); + + if (!this.call_fd_func(fd)) { + this.allocator.free(ptr, len); + this.release_fd(fd); + return wasi.ERRNO_BADF; + } + + const error = this.get_error(fd); + + this.release_fd(fd); + + return error; + } + + path_link( + old_fd: number, + old_flags: number, + old_path: Uint8Array, + new_fd: number, + new_path: Uint8Array, + ): number { + this.lock_double_fd(old_fd, new_fd); + + const bytes_offset = old_fd * fd_func_sig_bytes; + const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); + + Atomics.store(func_sig_view_u32, 0, 31); + Atomics.store(func_sig_view_u32, 1, old_fd); + Atomics.store(func_sig_view_u32, 2, old_flags); + const [ptr1, len1] = this.allocator.block_write(old_path, this.fd_func_sig, old_fd * fd_func_sig_u32_size + 3); + Atomics.store(func_sig_view_u32, 5, new_fd); + const [ptr2, len2] = this.allocator.block_write(new_path, this.fd_func_sig, old_fd * fd_func_sig_u32_size + 6); + + if (!this.call_fd_func(old_fd)) { + this.allocator.free(ptr1, len1); + this.allocator.free(ptr2, len2); + this.release_double_fd(old_fd, new_fd); + return wasi.ERRNO_BADF; + } + + const error = this.get_error(old_fd); + + this.release_double_fd(old_fd, new_fd); + + return error; + } + + path_open( + fd: number, + dirflags: number, + path: Uint8Array, + oflags: number, + fs_rights_base: bigint, + fs_rights_inheriting: bigint, + fs_flags: number, + ): [number | undefined, number] { + this.lock_fd(fd); + + const bytes_offset = fd * fd_func_sig_bytes; + const func_sig_view_u16 = new Uint16Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u64 = new BigUint64Array(this.fd_func_sig, bytes_offset); + + Atomics.store(func_sig_view_u32, 0, 32); + Atomics.store(func_sig_view_u32, 1, fd); + Atomics.store(func_sig_view_u32, 2, dirflags); + const [ptr, len] = this.allocator.block_write(path, this.fd_func_sig, fd * fd_func_sig_u32_size + 3); + Atomics.store(func_sig_view_u32, 5, oflags); + Atomics.store(func_sig_view_u64, 3, fs_rights_base); + Atomics.store(func_sig_view_u64, 4, fs_rights_inheriting); + Atomics.store(func_sig_view_u16, 20, fs_flags); + + if (!this.call_fd_func(fd)) { + this.allocator.free(ptr, len); + this.release_fd(fd); + return [undefined, wasi.ERRNO_BADF]; + } + + const error = this.get_error(fd); + + if (error === wasi.ERRNO_SUCCESS) { + const new_fd = Atomics.load(func_sig_view_u32, 0); + this.release_fd(fd); + return [new_fd, error]; + } + + this.release_fd(fd); + + return [undefined, error]; + } + + path_readlink( + fd: number, + path: Uint8Array, + buf_len: number, + ): [Uint8Array | undefined, number] { + this.lock_fd(fd); + + const bytes_offset = fd * fd_func_sig_bytes; + const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); + + Atomics.store(func_sig_view_u32, 0, 33); + Atomics.store(func_sig_view_u32, 1, fd); + const [ptr, len] = this.allocator.block_write(path, this.fd_func_sig, fd * fd_func_sig_u32_size + 2); + Atomics.store(func_sig_view_u32, 4, buf_len); + + if (!this.call_fd_func(fd)) { + this.allocator.free(ptr, len); + this.release_fd(fd); + return [undefined, wasi.ERRNO_BADF]; + } + + const error = this.get_error(fd); + + const nread = Atomics.load(func_sig_view_u32, 0); + const ret_path_ptr = Atomics.load(func_sig_view_u32, 1); + const ret_path_len = Atomics.load(func_sig_view_u32, 2); + + this.release_fd(fd); + if (error !== wasi.ERRNO_SUCCESS && error !== wasi.ERRNO_NAMETOOLONG) { + this.allocator.free(ret_path_ptr, ret_path_len); + return [undefined, error]; + } + + const ret_path = new Uint8Array(this.allocator.get_memory(ret_path_ptr, ret_path_len)); + const ret_path_slice = ret_path.slice(0, nread); + + return [ret_path_slice, error]; + } + + path_remove_directory( + fd: number, + path: Uint8Array, + ): number { + this.lock_fd(fd); + + const bytes_offset = fd * fd_func_sig_bytes; + const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); + + Atomics.store(func_sig_view_u32, 0, 34); + Atomics.store(func_sig_view_u32, 1, fd); + const [ptr, len] = this.allocator.block_write(path, this.fd_func_sig, fd * fd_func_sig_u32_size + 2); + + if (!this.call_fd_func(fd)) { + this.allocator.free(ptr, len); + this.release_fd(fd); + return wasi.ERRNO_BADF; + } + + const error = this.get_error(fd); + + this.release_fd(fd); + + return error; + } + + path_rename( + old_fd: number, + old_path: Uint8Array, + new_fd: number, + new_path: Uint8Array, + ): number { + this.lock_double_fd(old_fd, new_fd); + + const bytes_offset = old_fd * fd_func_sig_bytes; + const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); + + Atomics.store(func_sig_view_u32, 0, 35); + Atomics.store(func_sig_view_u32, 1, old_fd); + const [ptr1, len1] = this.allocator.block_write(old_path, this.fd_func_sig, old_fd * fd_func_sig_u32_size + 2); + Atomics.store(func_sig_view_u32, 4, new_fd); + const [ptr2, len2] = this.allocator.block_write(new_path, this.fd_func_sig, old_fd * fd_func_sig_u32_size + 5); + + if (!this.call_fd_func(old_fd)) { + this.allocator.free(ptr1, len1); + this.allocator.free(ptr2, len2); + this.release_double_fd(old_fd, new_fd); + return wasi.ERRNO_BADF; + } + + const error = this.get_error(old_fd); + + this.release_double_fd(old_fd, new_fd); + + return error; + } + + path_symlink( + old_path: Uint8Array, + fd: number, + new_path: Uint8Array, + ): number { + this.lock_fd(fd); + + const bytes_offset = fd * fd_func_sig_bytes; + const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); + + Atomics.store(func_sig_view_u32, 0, 36); + const [ptr1, len1] = this.allocator.block_write(old_path, this.fd_func_sig, fd * fd_func_sig_u32_size + 1); + Atomics.store(func_sig_view_u32, 3, fd); + const [ptr2, len2] = this.allocator.block_write(new_path, this.fd_func_sig, fd * fd_func_sig_u32_size + 4); + + if (!this.call_fd_func(fd)) { + this.allocator.free(ptr1, len1); + this.allocator.free(ptr2, len2); + this.release_fd(fd); + return wasi.ERRNO_BADF; + } + + const error = this.get_error(fd); + + this.release_fd(fd); + + return error; + } + + path_unlink_file( + fd: number, + path: Uint8Array, + ): number { + this.lock_fd(fd); + + const bytes_offset = fd * fd_func_sig_bytes; + const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); + + Atomics.store(func_sig_view_u32, 0, 37); + Atomics.store(func_sig_view_u32, 1, fd); + const [ptr, len] = this.allocator.block_write(path, this.fd_func_sig, fd * fd_func_sig_u32_size + 2); + + if (!this.call_fd_func(fd)) { + this.allocator.free(ptr, len); + this.release_fd(fd); + return wasi.ERRNO_BADF; + } + + const error = this.get_error(fd); + + this.release_fd(fd); + + return error; + } +} diff --git a/src/wasi_farm/shared_array_buffer/sender.ts b/src/wasi_farm/shared_array_buffer/sender.ts new file mode 100644 index 0000000..42b54d1 --- /dev/null +++ b/src/wasi_farm/shared_array_buffer/sender.ts @@ -0,0 +1,211 @@ +export type ToRefSenderUseArrayBufferObject = { + data_size: number; + share_arrays_memory?: SharedArrayBuffer; +} + +// To ref sender abstract class +export abstract class ToRefSenderUseArrayBuffer { + // The structure is similar to an allocator, but the mechanism is different + + // Example of fd management + // This needs to be handled + // 1. Start of path_open + // 2. Removed by fd_close + // 2.1 Sent by ToRefSender + // 3. Reassigned by path_open + // < Closed by ToRefSender + // 3.1 The person who opened it can use it + // < Closed by ToRefSender — this alone will cause a bug + // Structurally, this shouldn't happen in the farm + + // In the end, when receiving from this function, it should be done on the first call of each function + + // The first 4 bytes are for lock value: i32 + // The next 4 bytes are the current number of data: m: i32 + // The next 4 bytes are the length of the area used by share_arrays_memory: n: i32 + // Data header + // 4 bytes: remaining target count + // 4 bytes: target count (n) + // n * 4 bytes: target allocation numbers + // Data + // data_size bytes: data + private share_arrays_memory: SharedArrayBuffer; + + // The size of the data + private data_size: number; + + constructor( + // data is Uint32Array + // and data_size is data.length + data_size: number, + max_share_arrays_memory: number = 100 * 1024, + share_arrays_memory?: SharedArrayBuffer, + ) { + this.data_size = data_size; + if (share_arrays_memory) { + this.share_arrays_memory = share_arrays_memory; + } else { + this.share_arrays_memory = new SharedArrayBuffer(max_share_arrays_memory); + } + const view = new Int32Array(this.share_arrays_memory); + Atomics.store(view, 0, 0); + Atomics.store(view, 1, 0); + Atomics.store(view, 2, 12); + } + + protected static init_self_inner( + sl: ToRefSenderUseArrayBufferObject, + ): { + data_size: number, + max_share_arrays_memory: number, + share_arrays_memory: SharedArrayBuffer, + } { + return { + data_size: sl.data_size, + max_share_arrays_memory: sl.share_arrays_memory.byteLength, + share_arrays_memory: sl.share_arrays_memory, + }; + } + + private async async_lock(): Promise { + const view = new Int32Array(this.share_arrays_memory); + // eslint-disable-next-line no-constant-condition + while (true) { + let lock: "not-equal" | "timed-out" | "ok"; + const { value } = Atomics.waitAsync(view, 0, 1); + if (value instanceof Promise) { + lock = await value; + } else { + lock = value; + } + if (lock === "timed-out") { + throw new Error("timed-out lock"); + } + const old = Atomics.compareExchange(view, 0, 0, 1); + if (old !== 0) { + continue; + } + break; + } + } + + private block_lock(): void { + // eslint-disable-next-line no-constant-condition + while (true) { + const view = new Int32Array(this.share_arrays_memory); + const lock = Atomics.wait(view, 0, 1); + if (lock === "timed-out") { + throw new Error("timed-out lock"); + } + const old = Atomics.compareExchange(view, 0, 0, 1); + if (old !== 0) { + continue; + } + break; + } + } + + private release_lock(): void { + const view = new Int32Array(this.share_arrays_memory); + Atomics.store(view, 0, 0); + Atomics.notify(view, 0, 1); + } + + protected async async_send( + targets: Array, + data: Uint32Array, + ): Promise { + await this.async_lock(); + + const view = new Int32Array(this.share_arrays_memory); + const used_len = Atomics.load(view, 2); + const data_len = data.byteLength; + if (data_len !== this.data_size) { + throw new Error("invalid data size: " + data_len + " !== " + this.data_size); + } + const new_used_len = used_len + data_len + 8 + targets.length * 4; + if (new_used_len > this.share_arrays_memory.byteLength) { + throw new Error("over memory"); + } + + Atomics.store(view, 2, new_used_len); + + const header = new Int32Array(this.share_arrays_memory, used_len); + header[0] = targets.length; + header[1] = targets.length; + header.set(targets, 2); + + const data_view = new Uint32Array(this.share_arrays_memory, used_len + 8 + targets.length * 4); + data_view.set(data); + + // console.log("async_send send", targets, data); + + Atomics.add(view, 1, 1); + + this.release_lock(); + } + + protected get_data( + id: number, + ): Array | undefined { + const view = new Int32Array(this.share_arrays_memory); + const data_num_tmp = Atomics.load(view, 1); + if (data_num_tmp === 0) { + return undefined; + } + + this.block_lock(); + + const data_num = Atomics.load(view, 1); + + const return_data: Array = []; + + let offset = 12; + // console.log("data_num", data_num); + for (let i = 0; i < data_num; i++) { + // console.log("this.share_arrays_memory", this.share_arrays_memory); + const header = new Int32Array(this.share_arrays_memory, offset); + const target_num = header[1]; + const targets = new Int32Array(this.share_arrays_memory, offset + 8, target_num); + const data_len = this.data_size; + if (targets.includes(id)) { + const data = new Uint32Array(this.share_arrays_memory, offset + 8 + target_num * 4, data_len / 4); + + // なぜかわからないが、上では正常に動作せず、以下のようにすると動作する + // return_data.push(new Uint32Array(data)); + return_data.push(new Uint32Array([...data])); + + const target_index = targets.indexOf(id); + Atomics.store(targets, target_index, -1); + const old_left_targets_num = Atomics.sub(header, 0, 1); + if (old_left_targets_num === 1) { + // rm data + Atomics.sub(view, 1, 1); + const used_len = Atomics.load(view, 2); + const new_used_len = used_len - data_len - 8 - target_num * 4; + Atomics.store(view, 2, new_used_len); + const next_data_offset = offset + data_len + 8 + target_num * 4; + const next_tail = new Int32Array(this.share_arrays_memory, next_data_offset); + const now_tail = new Int32Array(this.share_arrays_memory, offset); + now_tail.set(next_tail); + // console.log("new_used_len", new_used_len); + } else { + offset += data_len + 8 + target_num * 4; + } + } else { + offset += data_len + 8 + target_num * 4; + } + // console.log("offset", offset); + } + + if (offset !== Atomics.load(view, 2)) { + throw new Error("invalid offset: " + offset + " !== " + Atomics.load(view, 2)); + } + + this.release_lock(); + + // console.log("get_data get: return_data", return_data); + + return return_data; + } +} diff --git a/src/wasi_farm/shared_array_buffer/util.ts b/src/wasi_farm/shared_array_buffer/util.ts new file mode 100644 index 0000000..bab95f3 --- /dev/null +++ b/src/wasi_farm/shared_array_buffer/util.ts @@ -0,0 +1,36 @@ +export const get_func_name_from_number = (num: number): string => { + switch (num) { + case 7: return "fd_advise"; + case 8: return "fd_allocate"; + case 9: return "fd_close"; + case 10: return "fd_datasync"; + case 11: return "fd_fdstat_get"; + case 12: return "fd_fdstat_set_flags"; + case 13: return "fd_fdstat_set_rights"; + case 14: return "fd_filestat_get"; + case 15: return "fd_filestat_set_size"; + case 16: return "fd_filestat_set_times"; + case 17: return "fd_pread"; + case 18: return "fd_prestat_get"; + case 19: return "fd_prestat_dir_name"; + case 20: return "fd_pwrite"; + case 21: return "fd_read"; + case 22: return "fd_readdir"; + case 23: return "fd_renumber"; + case 24: return "fd_seek"; + case 25: return "fd_sync"; + case 26: return "fd_tell"; + case 27: return "fd_write"; + case 28: return "path_create_directory"; + case 29: return "path_filestat_get"; + case 30: return "path_filestat_set_times"; + case 31: return "path_link"; + case 32: return "path_open"; + case 33: return "path_readlink"; + case 34: return "path_remove_directory"; + case 35: return "path_rename"; + case 36: return "path_symlink"; + case 37: return "path_unlink_file"; + default: return "unknown"; + } +} From b389c7252836bd7f9bcd074ea7fa8df52501c070 Mon Sep 17 00:00:00 2001 From: oligamiq Date: Sun, 22 Sep 2024 00:27:11 +0900 Subject: [PATCH 02/12] feature wasi thread-spawn --- .gitmodules | 4 + bun.lockb | Bin 0 -> 89865 bytes examples/bun.lockb | Bin 0 -> 3008 bytes examples/package-lock.json | 42 +- examples/package.json | 2 + examples/wasi_multi_threads/index.html | 38 + examples/wasi_multi_threads/main.rs | 13 + .../wasi_multi_threads/multi_thread_echo.wasm | Bin 0 -> 91207 bytes examples/wasi_multi_threads/thread_spawn.js | 5 + examples/wasi_multi_threads/worker.js | 32 + .../wasi_multi_threads_channel/channel.wasm | Bin 0 -> 116487 bytes .../wasi_multi_threads_channel/index.html | 28 + examples/wasi_multi_threads_channel/main.rs | 16 + .../thread_spawn.js | 5 + examples/wasi_multi_threads_channel/worker.js | 32 + .../wasi_multi_threads_rustc/depend_files.js | 154 ++++ examples/wasi_multi_threads_rustc/index.html | 75 ++ examples/wasi_multi_threads_rustc/rust_wasm | 1 + examples/wasi_multi_threads_rustc/rustc.js | 48 ++ .../wasi_multi_threads_rustc/thread_spawn.js | 5 + examples/wasi_multi_threads_rustc/tmp_dir.js | 58 ++ .../wasi_multi_threads_rustc/tre_opt.wasm | Bin 0 -> 1043045 bytes examples/wasi_multi_threads_rustc/tree.js | 47 + examples/wasi_multi_threads_rustc/worker.js | 115 +++ examples/wasi_workers/echo_and_rewrite.wasm | Bin .../wasi_workers_single/echo_and_rewrite.wasm | Bin package-lock.json | 804 ++---------------- package.json | 10 +- src/fs_mem.ts | 6 +- src/index.ts | 1 + src/serialize_error.ts | 23 + src/wasi_farm/animals.ts | 574 ++++++++++--- src/wasi_farm/farm.ts | 27 +- src/wasi_farm/index.ts | 5 +- src/wasi_farm/park.ts | 300 ++++--- src/wasi_farm/polyfill.js | 212 ++--- src/wasi_farm/ref.ts | 139 ++- .../shared_array_buffer/allocator.ts | 41 +- .../shared_array_buffer/fd_close_sender.ts | 25 +- src/wasi_farm/shared_array_buffer/index.ts | 13 + src/wasi_farm/shared_array_buffer/park.ts | 319 ++++--- src/wasi_farm/shared_array_buffer/ref.ts | 306 ++++--- src/wasi_farm/shared_array_buffer/sender.ts | 42 +- .../shared_array_buffer/thread_spawn.ts | 410 +++++++++ src/wasi_farm/shared_array_buffer/util.ts | 98 ++- .../worker_background/index.ts | 10 + .../worker_background/minify.js | 46 + .../worker_background/spack.config.cjs | 15 + .../worker_background/worker.ts | 290 +++++++ .../worker_background_ref.ts | 311 +++++++ .../worker_background/worker_blob.ts | 10 + .../worker_background/worker_export.ts | 18 + test/run-testsuite.sh | 0 53 files changed, 3365 insertions(+), 1410 deletions(-) create mode 100644 bun.lockb create mode 100644 examples/bun.lockb create mode 100644 examples/wasi_multi_threads/index.html create mode 100644 examples/wasi_multi_threads/main.rs create mode 100644 examples/wasi_multi_threads/multi_thread_echo.wasm create mode 100644 examples/wasi_multi_threads/thread_spawn.js create mode 100644 examples/wasi_multi_threads/worker.js create mode 100644 examples/wasi_multi_threads_channel/channel.wasm create mode 100644 examples/wasi_multi_threads_channel/index.html create mode 100644 examples/wasi_multi_threads_channel/main.rs create mode 100644 examples/wasi_multi_threads_channel/thread_spawn.js create mode 100644 examples/wasi_multi_threads_channel/worker.js create mode 100644 examples/wasi_multi_threads_rustc/depend_files.js create mode 100644 examples/wasi_multi_threads_rustc/index.html create mode 160000 examples/wasi_multi_threads_rustc/rust_wasm create mode 100644 examples/wasi_multi_threads_rustc/rustc.js create mode 100644 examples/wasi_multi_threads_rustc/thread_spawn.js create mode 100644 examples/wasi_multi_threads_rustc/tmp_dir.js create mode 100644 examples/wasi_multi_threads_rustc/tre_opt.wasm create mode 100644 examples/wasi_multi_threads_rustc/tree.js create mode 100644 examples/wasi_multi_threads_rustc/worker.js mode change 100755 => 100644 examples/wasi_workers/echo_and_rewrite.wasm mode change 100755 => 100644 examples/wasi_workers_single/echo_and_rewrite.wasm create mode 100644 src/serialize_error.ts create mode 100644 src/wasi_farm/shared_array_buffer/index.ts create mode 100644 src/wasi_farm/shared_array_buffer/thread_spawn.ts create mode 100644 src/wasi_farm/shared_array_buffer/worker_background/index.ts create mode 100644 src/wasi_farm/shared_array_buffer/worker_background/minify.js create mode 100644 src/wasi_farm/shared_array_buffer/worker_background/spack.config.cjs create mode 100644 src/wasi_farm/shared_array_buffer/worker_background/worker.ts create mode 100644 src/wasi_farm/shared_array_buffer/worker_background/worker_background_ref.ts create mode 100644 src/wasi_farm/shared_array_buffer/worker_background/worker_blob.ts create mode 100644 src/wasi_farm/shared_array_buffer/worker_background/worker_export.ts mode change 100755 => 100644 test/run-testsuite.sh diff --git a/.gitmodules b/.gitmodules index c9f05a1..2d9d707 100644 --- a/.gitmodules +++ b/.gitmodules @@ -5,3 +5,7 @@ path = test/wasi-testsuite url = https://github.com/WebAssembly/wasi-testsuite branch = prod/testsuite-base +[submodule "examples/wasi_multi_threads_rustc/rust_wasm"] + path = examples/wasi_multi_threads_rustc/rust_wasm + url = https://github.com/oligamiq/rust_wasm + sharrow = true diff --git a/bun.lockb b/bun.lockb new file mode 100644 index 0000000000000000000000000000000000000000..54a53eb6f94104e1f2b38e8878c2a6eefa79a7fe GIT binary patch literal 89865 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ற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 SAI21!-(g~3Px&AC&;J2Hph)fj literal 0 HcmV?d00001 diff --git a/examples/bun.lockb b/examples/bun.lockb new file mode 100644 index 0000000000000000000000000000000000000000..d2ee58d33bf41e5168451d54469ae6874a1c428b GIT binary patch literal 3008 zcmY#Z)GsYA(of3F(@)JSQ%EY!;{sycoc!eMw9K4T-L(9o+{6;yG6OCq1_lNmwan%T zH|I0i{;}^`!?o*HJhy>t-0vf6<2Ll241ZIqZ@>*y1O)65ih%=-Zh-Q$VG6)}DF%iH z10ahZNLQ4k7Ue=!fy6;f5Dml(VnCXik%561NNfJOyr8;?>@`lo$~!D4?{Rc; z@BaxChtaA_t_ghKa8`1H%Ax0fd*mhowNnH@p#TE*K6{y@8sGkK$ z3lpamtO}%_5&+Y$N2Vb#_wNAe_lEkPlrV+aPp0)?Z6Gs17-TOj>_Id$5F@8JkUS?4 z!vJ~u{_+1K#e*=*@XvDlAf5rkgs;{)XMM>1Qeg78*Xfb;Y3J*UahvY?{;Gd=z=P zRAv94TT5fJRWl@!%msxp)c}&Y)JPX_cOjVzOCKOP7GuHEfO``^wHi$Q7^Z(NjzQVR zxbxM@M^D}r*Qu=Y`pF<ccrxMwDbO^QxDRLe@Ubeo^skqgUdDGVc`+PCCDOh-5As z+%hUKfaVTmFbJJbvXe;GKyrjJZh%&LZ=f`nO>t4OUS?i#Nn%cp9<0XI3n@xXwNo%M zP$m zV=>eGoD_240BtZ4H5NQUiT!y&^M1$N2 z6wKgmGeivqSbG3gzcYahgac5E0oDRwVgWT|tblT`wgs%Mz{D75qGxEKXTSh!eZX21 zKp6u)Q=kNf9s!UZ1CR^|P|qG%y9U-yLAd%2G*n + + + + +

+ #### +

+ + + + diff --git a/examples/wasi_multi_threads/main.rs b/examples/wasi_multi_threads/main.rs new file mode 100644 index 0000000..86d14dd --- /dev/null +++ b/examples/wasi_multi_threads/main.rs @@ -0,0 +1,13 @@ +fn main() { + println!("Hello, world!"); + + let _: std::thread::JoinHandle<()> = std::thread::spawn(|| { + for i in 1..1000 { + println!("hi number {} from the spawned thread!", i); + } + }); + + for i in 1..1000 { + println!("hi number {} from the main thread!", i); + } +} diff --git a/examples/wasi_multi_threads/multi_thread_echo.wasm b/examples/wasi_multi_threads/multi_thread_echo.wasm new file mode 100644 index 0000000000000000000000000000000000000000..894878b047f36f52500ae399f98d5c9e85643dbf GIT binary patch literal 91207 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� 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

+ #### +

+ + + + diff --git a/examples/wasi_multi_threads_channel/main.rs b/examples/wasi_multi_threads_channel/main.rs new file mode 100644 index 0000000..216800c --- /dev/null +++ b/examples/wasi_multi_threads_channel/main.rs @@ -0,0 +1,16 @@ +// https://doc.rust-lang.org/book/ch16-02-message-passing.html + +use std::sync::mpsc; +use std::thread; + +fn main() { + let (tx, rx) = mpsc::channel(); + + thread::spawn(move || { + let val = String::from("hi"); + tx.send(val).unwrap(); + }); + + let received = rx.recv().unwrap(); + println!("Got: {received}"); +} diff --git a/examples/wasi_multi_threads_channel/thread_spawn.js b/examples/wasi_multi_threads_channel/thread_spawn.js new file mode 100644 index 0000000..3761fb9 --- /dev/null +++ b/examples/wasi_multi_threads_channel/thread_spawn.js @@ -0,0 +1,5 @@ +import { thread_spawn_on_worker } from "../../dist/wasi_farm/shared_array_buffer/thread_spawn.js"; + +self.onmessage = (event) => { + thread_spawn_on_worker(event.data); +} diff --git a/examples/wasi_multi_threads_channel/worker.js b/examples/wasi_multi_threads_channel/worker.js new file mode 100644 index 0000000..c91ecb4 --- /dev/null +++ b/examples/wasi_multi_threads_channel/worker.js @@ -0,0 +1,32 @@ +import { WASIFarmAnimal } from "../../dist/index.js"; + +self.onmessage = async (e) => { + const { wasi_ref } = e.data; + + const wasm = await WebAssembly.compileStreaming(fetch("./channel.wasm")); + + const wasi = new WASIFarmAnimal( + wasi_ref, + [], // args + [], // env + { + debug: true, + can_thread_spawn: true, + thread_spawn_worker_url: (new URL("./thread_spawn.js", import.meta.url)).href, + // thread_spawn_worker_url: "./thread_spawn.js", + thread_spawn_wasm: wasm, + } + ); + + await wasi.wait_worker_background_worker(); + + let inst = await WebAssembly.instantiate(wasm, { + "env": { + memory: wasi.get_share_memory(), + }, + "wasi": wasi.wasiThreadImport, + "wasi_snapshot_preview1": wasi.wasiImport, + }); + + wasi.start(inst); +} diff --git a/examples/wasi_multi_threads_rustc/depend_files.js b/examples/wasi_multi_threads_rustc/depend_files.js new file mode 100644 index 0000000..b1ea3fe --- /dev/null +++ b/examples/wasi_multi_threads_rustc/depend_files.js @@ -0,0 +1,154 @@ +import { + PreopenDirectory, + WASIFarm, + Directory, + File, +} from "../../dist/index.js"; + +async function load_external_file(path) { + return new File(await (await (await fetch(path)).blob()).arrayBuffer()); +} + +const linux_libs_promise = (async () => { + const dir = new Map(); + for (const file of [ + "libaddr2line-b8754aeb03c02354.rlib", + "libadler-05c3545f6cd12159.rlib", + "liballoc-0dab879bc41cd6bd.rlib", + "libcfg_if-c7fd2cef50341546.rlib", + "libcompiler_builtins-a99947d020d809d6.rlib", + "libcore-4b8e8a815d049db3.rlib", + "libgetopts-bbb75529e85d129d.rlib", + "libgimli-598847d27d7a3cbf.rlib", + "libhashbrown-d2ff91fdf93cacb2.rlib", + "liblibc-dc63949c664c3fce.rlib", + "libmemchr-2d3a423be1a6cb96.rlib", + "libminiz_oxide-b109506a0ccc4c6a.rlib", + "libobject-7b48def7544c748b.rlib", + "libpanic_abort-c93441899b93b849.rlib", + "libpanic_unwind-11d9ba05b60bf694.rlib", + "libproc_macro-1a7f7840bb9983dc.rlib", + "librustc_demangle-59342a335246393d.rlib", + "librustc_std_workspace_alloc-552b185085090ff6.rlib", + "librustc_std_workspace_core-5d8a121daa7eeaa9.rlib", + "librustc_std_workspace_std-97f43841ce452f7d.rlib", + "libstd-bdedb7706a556da2.rlib", + "libstd-bdedb7706a556da2.so", + "libstd_detect-cca21eebc4281add.rlib", + "libsysroot-f654e185be3ffebd.rlib", + "libtest-f06fa3fbc201c558.rlib", + "libunicode_width-19a0dcd589fa0877.rlib", + "libunwind-747b693f90af9445.rlib", + ]) { + dir.set( + file, + await load_external_file( + `./rust_wasm/rustc_llvm/dist/lib/rustlib/x86_64-unknown-linux-gnu/lib/${file}`, + ), + ); + } + return dir; +})(); + +const threads_libs_promise = (async () => { + const dir = new Map(); + for (const file of [ + "libaddr2line-a47658bebc67c3a1.rlib", + "libadler-38ddbcf07afd45fc.rlib", + "liballoc-1fc4f6ca1d836e4c.rlib", + "libcfg_if-fd15f5d506df7899.rlib", + "libcompiler_builtins-3dc6223f56552b05.rlib", + "libcore-0ec7cb16e8553802.rlib", + "libgetopts-6248a91c42a854a0.rlib", + "libgimli-4425159eeeeb18dd.rlib", + "libhashbrown-243f98c4e4e641ea.rlib", + "liblibc-9149392e3841960d.rlib", + "libmemchr-9ac950afd37fa4c7.rlib", + "libminiz_oxide-91aaa0ee7402d39e.rlib", + "libobject-361b96ef5df8a7f9.rlib", + "libpanic_abort-f91052098501e46b.rlib", + "libpanic_unwind-fc376dcf47815f10.rlib", + "libproc_macro-9cab37e4d11f0e52.rlib", + "librustc_demangle-1af142f261139812.rlib", + "librustc_std_workspace_alloc-f0d62212c413dd0e.rlib", + "librustc_std_workspace_core-ea396731d16229a8.rlib", + "librustc_std_workspace_std-7434133be68a4a89.rlib", + "libstd_detect-083332b3c8180bc9.rlib", + "libstd-5ddf10249e9580fe.rlib", + "libsysroot-8b3608099dad3b42.rlib", + "libtest-8ebd431ae5608538.rlib", + "libunicode_width-7e2396fcd7049a8b.rlib", + "libunwind-e7408208cf4a3c79.rlib", + "libwasi-f0b9e157c50fe586.rlib", + ]) { + dir.set( + file, + await load_external_file( + `./rust_wasm/rustc_llvm/dist/lib/rustlib/wasm32-wasip1-threads/lib/${file}`, + ), + ); + } + return dir; +})(); + +const threads_self_contained_promise = (async () => { + const dir = new Map(); + for (const file of ["crt1-command.o", "crt1-reactor.o", "libc.a"]) { + dir.set( + file, + await load_external_file( + `./rust_wasm/rustc_llvm/dist/lib/rustlib/wasm32-wasip1-threads/lib/self-contained/${file}`, + ), + ); + } + return dir; +})(); + +const [linux_libs, threads_libs, threads_self_contained, components] = + await Promise.all([ + linux_libs_promise, + threads_libs_promise, + threads_self_contained_promise, + await load_external_file( + "./rust_wasm/rustc_llvm/dist/lib/rustlib/components", + ), + ]); + +threads_libs.set("self-contained", new Directory(threads_self_contained)); + +const farm = new WASIFarm( + undefined, + undefined, + undefined, + [ + new PreopenDirectory("/sysroot", [ + [ + "lib", + new Directory([ + [ + "rustlib", + new Directory([ + ["components", components], + [ + "wasm32-wasip1-threads", + new Directory([["lib", new Directory(threads_libs)]]), + ], + [ + "x86_64-unknown-linux-gnu", + new Directory([["lib", new Directory(linux_libs)]]), + ], + ]), + ], + ]), + ], + ]), + ], + { + allocator_size: 1024 * 1024 * 1024, + // debug: true, + }, +); + +const ret = await farm.get_ref(); + +postMessage({ wasi_ref: ret }); diff --git a/examples/wasi_multi_threads_rustc/index.html b/examples/wasi_multi_threads_rustc/index.html new file mode 100644 index 0000000..58d58e4 --- /dev/null +++ b/examples/wasi_multi_threads_rustc/index.html @@ -0,0 +1,75 @@ + + + + + +
+ + + + + + + + + + + diff --git a/examples/wasi_multi_threads_rustc/rust_wasm b/examples/wasi_multi_threads_rustc/rust_wasm new file mode 160000 index 0000000..b3114df --- /dev/null +++ b/examples/wasi_multi_threads_rustc/rust_wasm @@ -0,0 +1 @@ +Subproject commit b3114df16241f3f2d332bbf588f0ece0b7ddfe0f diff --git a/examples/wasi_multi_threads_rustc/rustc.js b/examples/wasi_multi_threads_rustc/rustc.js new file mode 100644 index 0000000..1dd1bf8 --- /dev/null +++ b/examples/wasi_multi_threads_rustc/rustc.js @@ -0,0 +1,48 @@ +import { WASIFarmAnimal } from "../../dist/index.js"; + +const { promise, resolve } = Promise.withResolvers(); +import("../node_modules/@oligami/shared-object/dist/index.js").then(resolve); + +let wasi; +let wasm; +let shared; + +onmessage = async function (e) { + const { wasi_refs } = e.data; + + if (wasi_refs) { + wasm = await WebAssembly.compileStreaming( + fetch("./rust_wasm/rustc_llvm/rustc_opt.wasm"), + ); + + wasi = new WASIFarmAnimal( + wasi_refs, + [], // args + ["RUST_MIN_STACK=16777216"], // env + { + // debug: true, + can_thread_spawn: true, + thread_spawn_worker_url: new URL("./thread_spawn.js", import.meta.url) + .href, + // thread_spawn_worker_url: "./thread_spawn.js", + thread_spawn_wasm: wasm, + }, + ); + + await wasi.wait_worker_background_worker(); + + wasi.get_share_memory().grow(200); + + console.log("Waiting for worker background worker..."); + + await promise; + + shared = new SharedObject.SharedObject((...args) => { + wasi.args = ["rustc", ...args]; + wasi.block_start_on_thread(); + console.log("wasi.start done"); + }, "rustc"); + + postMessage({ ready: true }); + } +}; diff --git a/examples/wasi_multi_threads_rustc/thread_spawn.js b/examples/wasi_multi_threads_rustc/thread_spawn.js new file mode 100644 index 0000000..bed9b51 --- /dev/null +++ b/examples/wasi_multi_threads_rustc/thread_spawn.js @@ -0,0 +1,5 @@ +import { thread_spawn_on_worker } from "../../dist/index.js"; + +self.onmessage = async (event) => { + await thread_spawn_on_worker(event.data); +}; diff --git a/examples/wasi_multi_threads_rustc/tmp_dir.js b/examples/wasi_multi_threads_rustc/tmp_dir.js new file mode 100644 index 0000000..4086095 --- /dev/null +++ b/examples/wasi_multi_threads_rustc/tmp_dir.js @@ -0,0 +1,58 @@ +import { + PreopenDirectory, + WASIFarm, + File, + Directory, +} from "../../dist/index.js"; + +const farm = new WASIFarm( + undefined, + undefined, + undefined, + [ + // new PreopenDirectory(".", [ + // ["tmp-tmp", new File(new TextEncoder("utf-8").encode("Hello World!"))], + // ["tmp-dir", new Directory([])], + // ]), + // new PreopenDirectory("tmp-dir", [ + // [ + // "tmp-dir_inner", + // new Directory([ + // [ + // "tmp-dir_inner-file", + // new File(new TextEncoder("utf-8").encode("Hello World!!!!!")), + // ], + // ]), + // ], + // ]), + new PreopenDirectory("/tmp", []), + new PreopenDirectory("/", [ + [ + "hello.rs", + new File( + new TextEncoder("utf-8").encode( + `fn main() { println!("Hello World!"); }`, + ), + ), + ], + ["sysroot", new Directory([])], + ["tmp", new Directory([])], + ]), + new PreopenDirectory("~", [ + [ + "####.rs", + new File( + new TextEncoder("utf-8").encode( + `fn main() { println!("Hello World!"); }`, + ), + ), + ], + ["sysroot", new Directory([])], + ]), + ], + // { debug: true }, +); + +const ret = await farm.get_ref(); + +postMessage({ wasi_ref: ret }); diff --git a/examples/wasi_multi_threads_rustc/tre_opt.wasm b/examples/wasi_multi_threads_rustc/tre_opt.wasm new file mode 100644 index 0000000000000000000000000000000000000000..67f06dfdd82ced1e8723f359f7e6a23f60c87f6d GIT binary patch literal 1043045 zcmeFa3%p)seeb!h?|tvABs*z0vnAQEZW%8X|%EASg@(3Hd@q;12!t!2;xaAZKI7EDPmf&OBSAE+zHH(bOs#>;N&Gx&U-*)xd zTBjwzZ!g2`+qaX4%)BVtNmJNwwKsT+X2~*O zS=8*!*WWPi4bGCSwe{*7u6fIwUl301Yj3#u`mJxd;RQ3zEi=71JOzrM+x(WBuJvlO zv}%wX;IV?kY#5y1mk;1yb;H$fzSfIoDYSXx*0=oJRoC8f{Wi}JAF6-4-im`ze?ET! z|J#l4dtn?aiN7H9f*^=V2)#xag+c7ae&F$@QS-m#enz+ONb#hadWp$-fxYbPUyo%!{$uusm)xyEBK2TSoUKGTQu-2$I8fqj3)&kG7 z3RRNoP@;%ij!{`^{vTwy(^dG(<8&)!j@YZ$*YDGb~vybFCbgFl*4@5KI` zfClh72!l311^j@OzEE2L5DlfGDa}zzKw&i%6{)#A*#KnIL8Ab zHJT3s?4L>oCzM57Rg{AOu;VYZlo+T35D;iMR3`p-OX14SPt6xb$;KbO;Z28R&=AKB z@YJq{b14N{@EUQ4*31Qiaih_oh19A}@}1uR`(YS0co*`Lds;UKq&J|J&|6GH<9T$5 zf0UjqnNQn;AmTsWP?V?c+J9Vp=2btvr!aLiSk%mRc8>?L5-3c^;S*P6w$Y)*J{^l zQ54eBn(zj+Xktjq)n0lu6ooBof^bM@!>|dTr~#hWQPXNsEvyZCUNedZ7Myi<8aD?6 zFKSSrI4bZ4_$2nbYCaeqs>cHZ?RIl;u-RM?)pq}-NCt0 z-M`WQVemuv)AttEnkeaf=gvv5UGIjqH(&eaw`~2tAl0i7B3rk4bJ|y3_2#Ruzu~Hz z-*Wvm-Zjn7#J-pN?dO7XFaK(7!#iu|K2iJ0*IaVJYhL?5=Ktp3TzKK?pSt+!|Mh?0 z6Q6t8WfyOH)BpB!S6y{F-nQZYeAK`38~&I4XZ+j!E#LHi&;OAB9sm3OQ~oLcqy7W_ z$NWF=f4{gs;(ykE*q`)|_NtzYyQ*zcm41Af9*f(|E+(gpC9!f z^B?!W>_6dug+l(s-|{X08~zXcfAmlKf93z3|4;rG{cls|Y5(*7bN<);&-o|F_UplW zf?o;V8tml%Uk%QKcRrxNWH)A1}=?opSY`(s)7 z)AWa&$wRb0kGg(N;j}A@bAMYFr6K>KOP6L`^XT%WS(L}yx-}kl?%bJPng`puA>E1v z6|d{7+8~X|vpQJD9VJDpgCQl-hG78G7^A=%H$!7dk_Lc7a2g3Z`bn%6_Sp658sB^KU=;{+~?#sNSAmCUx@PdE&!QcvI4>p*#KL!Fu}-QBMT`LI;2} z7|Vhw0Pq0-K<)!TK-&cXu6Y9h1o@7e^0RO5M$@_-rm^}Q_WB&UK8NZv?FVMoXORGX z=F-tm(PuqcpTTm~=Wtq|m*pRN&*zq_e}m*HLGa0XdyXC>;bhWFK2>jj7(G;U)u*f0 zpHS!y3{fSz8??!=JZmQ*lQ7z$Uva zXLCM(EWc$-=8xsS2&q_eQ-8ed`|F(s7zx&PeYMayL1GeyDC*&=dVJMm{e)#zNobV- z$O|0&)|O>@?l~%-H@fG`%I7z_=PS$SP44-c^7%&hysdoRDTPNpx0VUJii8QjOu4&A z*=s57w@D%ClSrb$6eC51>SAF3a^H0|mSEd?%S|SO!#6A)#JezdipC5C$ysR7dr{bJ z6cNxvhv|h?E3pJJLBn_!m9S9XjnLZbP}fdRd9DfJIQjs72q|)bC3QoieZI;L9jzrBm)AR3jRY6D z=Z$*qN5XK40*@y2p#ZF1jMSwFF{&`Y?MS9hac(8d)J%3i{;(FSVCwC79 znOB0_bKoX*(#bLIj?DP}(dzw9Nj~!Js#5k8DSNAweMQPWRmxXpEcICNUUF`^3QY@$ zy57UiSy9qx1;wmZBB`DSm#6jI->@aEm2}f%2~i*51$bD3#uAjj(v?5z%Fho3W63$H z_drq2L2FRps3r4+41qh^mIY(^FGyyQd2Jeu=ShX>!$H}|2ZDShbwY|>zHGcC_hH>x zg*2&3?ewKaWoj?u+B4gJsA%H@4rpfRV6{rgw%ebVIpKJF8Z89*WI+ois%U>9s<_)* zP{-XBb=*^=?5|P|7Af~tDGwAWhpUvyBIV&K<pXtWr)DDbH3Z zyMmIBb_Nv*fJAW8Cn3@^8R@yAsGSuFP89Il(}&|LD;!G<;X;@;;|f#}Imf)QBf9#|diy)X(`4-?s3$D-V3ns9@wum;Mi!3e;pIv}97bp) zB}yaNvow%Wq?__z|JXy{sbRX}Y~efp$b~%8D?~QgkJggU^$HQw{b+@Ju~$ez6h8t? zzU&Hdx=fI%Vy_*81}0?Klx8-w90Gb$PIb1tGw2foD!I=Gjf{4E!){# z?=)HwHr525dEezjo4OLYt|ylU^LB*WLH1r5BVZf6;ao*hkUJN?&Ld&H)cxM$xFlij z#d*-a(8FLA2=md+-T83$urp_tkKJ#1(_P&~lmL^t=h0o=VV;q;bGUrP8|x-8i0@t| zySfYESvi5c#I0V*WzSnDi6x9sx4$O1fHo~$6W+)r%1?O^*r+-a<@;VF7g_M_RNlx~ z7AL!E0%ky@AWDZ;2b&!Hsk@d30zX|#J{6Pus3+I#(=kR=6l^C0)-!fEZzlY)G*Pi* z$tzXZ1ZJI~##+9OH?HNhRV}}jnugbee8HQ9hTp>VB&EALtT)O3q=K%a9M!NQyiQmv zD;x>lsQWi%alvv4trW{Cu^U^)E7Q2gXw*aoYI>6Z1hDuWDe6lm>D(&sMyp^&IN`T5 z1M9+j+ky#osRbi}nb)q@BZDEKW7v02@;}>Wvm%IY_9Muu1>$(LeEUXg=*o)`)0FS@ zIXCMF=oF@8>`Vd@FERnf&9-g~W^kCXA)?E<4L59|fEY1EbJa^}frfsXG`yBJ=gI;n zLF~D8MWQ-O=6&5T50LU5`;}DEdhcW7gIT_4Z zjXE+~Ct+Ai?$S5>OYya?6B*a@Wn=t2=Z&ohJXnwWxxYAN^mf`lBqdRku*Y+Dly>24&radnWSbqFzRD8VT3O73c_A*;G# zLs#TUw`%<=FU`a8LBix318F-2P^0HWG%oZyxo;s4B4vOe`TG!DAh#~`1{6HY2dbnw z7kY!1G*~6gyU?3sNpqAWx~-Y`k!uvvFtJ2kY?u6iM|j{0lEb`}JR2_I+Agkhit9XG zp{yKUcCBpC%0@m&W2#m*swQ#gnnaGGNsYYYn$*avCN*A4lLm_>3>4Q+aSf8c4ZF2Y z)Xurkud^i5%HhgHgoT7b2xeZHP!w+$ZgG5g8!MKjoeRo=`|F zvd!xfl~NE56c6O<#w)o2#5bv@!u0nD9rnb9yStI#5bn_OpQ>_7}?u0 zAlqg@B2F)ra7|ld-FENu*0j%C)#q6&ZK;CUauCISksRTR=72V6q_bfQigmPwxjRyZ z(3XSsnhgM0vs=(pZcbbVU}U8>oOcJLz~cB=+D`tUcJTlK#+rs5YU;iNs)5sSoZsU( z$0=5?&?1G_$cM%SZ85k=Ufd&`Kg4i_#GHLBT0i7tW2LpMA=I`Z*17r4?OXEp*6v)& z0>Rx{?seie@8+hBRbDfTRc^PV%q5NXUxoSc!Fh~hEihHR_B7Gvf8^H>Kn{qD3a8MmU}AST7Or;ILS7$^1hP~Yp|ur z32QjJAh^(znFG%+@2S``%(z9fSP8w>2$G$x>7a3AW82m=-r8+i!v;#=^aEt-{cPar zfMS6MxClJJMc@H00uOKzcz}z*LrVl6SbaKpg!on7;56`ndQ#_9;7Ka*D5t>V*qP!w zGxcpQ;w5j~>|iV1L20y67q5+MkJ7oT8Fa&HxzNMxOXCZ@A)dSoz4<)VF7)QPr@1^e z91fa-UE0Zk-fC|l=><|`1i!e6D_smGQHIXMm1QdDV|EJ{q)rgcBnRfPvvD!~d6XU9 zXX9?FY}`#oGlfz8-_ypuu4m$&Y2Z5AQ95QWbAn)AnYr}!N4Ho_dHi_nRWG+tD!6uL z>)|Q(s+_MPh%6UpND^IyVK!_!KOY^>=9^@X@a*L2o$3V5>7E{zFyDwigmI9TPf`gE z#$ThM1ei_ED?4I{Jb{k(a8WSJ4_!Ee5fi6LB_2Mj60x^(i&ZrvHC9`au>L-!~kM1zx4f~{v>y$m^DftQX(lkp|x zv_pTSIj5Z{zgeXvsjl*dK|!SNs6{?$;oIO$xwOK4((7dz_)Sx@Lp9Pnx_JyS6JeE9 zp7#KcNdfLjZ&!Da=hBPEYoCKkjnbB6Is-dH^i2ce=&`5-@fAcMpu-?-i2(WOHVVP% zaSiQz+>I-_@zN%?MIo?v01ywqDsQ|&?FK^mE3sti$sWK2Jh}iClhO%K@XFUQrr(kf z6AAFN#}JSCD;Zo}0$gpFeb4_JpX z2rUFxz^vR2I3+x|CKOA}SrcxenM`X?pk)8s%D_wL0xw3hL|j}?x;|u$XmMl>xi+XF z%2Vn{0#GbG9^NylGz8JHn#6}AYol_oD#FhQ8(uEI28SLr$irY>Lg8V^OUmkehv{n` zhWr5@x!_^Ap;!f+#V3x7glP)y3v)>hjL;hJv5d>XcdApvska_aKP6#!EI&kA@&y@e zlCy9rSm|dWdPA(_3gb2jE)@y?t4N8hlLn_vFakvaM&s<=;4lv_b#m^FHnOE27adcK z)(cZM}%XbZi2FGj%bl8 zL~%~+PVJ;?F5@^778;1_Yp#vtTC_C{t+^zqxm>_QuepUPPes{&av#i5YMhg91YDSZ zGDJjhJs#QsLD2QXbwF6C&tv)u_D!!SLR1ifwbw^F(WX$23IPYrju;7!sZ}l%&(jG# zaXnd$(mz{NcDk=JtBQ$2MYt&{hSD5rimC{zPp|6Kl&U5ojrIzS2of86;EF7!C!}`V z@V?+fIb4R!MX`Zzrr+L<&SqJtR9wRdEhQ|;v#n_nokncdmGKx&wHFrf_lvc9g6@#~d|G5I-JBwlZ z!lk` zp$$hyogNh#VxfSkR5JrAjdl$(l#@7`87iMwx^hQW1V3aoo(XnxQQZ8xkGL z?}{qiitc55I9#TgUtoB72E};RXBemw7J4ggsHDYA_@gXIfkIKpwzRQ(Cl2V5nM00E zRbC+{3@Q>18?m!ekLDBD%1hDM{21*$Uv6@JizM$^~Pv#?QFdPJymZ^Q5Rns zUS|Eu*r|YlWMx^G!`*CknE)xjlBO%_GLD+Ht~1~*qUY0!iiR9f48ItC&cHtqAjJ#B z?bk6p=x9I`VM2pSWCMXpWTcZE8bP{s%f*Nlf5TRx&c1z@&n!T-$#jjfOaFB}Hyg^v z)X++pPq%ErdKrTb(m)g?I&oD^t;LETK*y$l#%6;CId_a@ksu8_MqyhhDUG&_<#o(@ z<^yaoQnL13qRBRDj`W{~Wx4d`ccIUy*em*|cV`Gjqq_Egq8MlK``8lTcD3dj=4~4c z%@6&$43MbLB`|rF`8Ga)4MjKeeeamWW)=t=IYw;q>li0Zb&5~vzt>*I1K&Nmi+oZ3 zh%N*9VJ^ud_4ax8a+T*Xxdo)`y<^gIj+)@$=Lf21&*o{8wEuR#{G6M%Sw4QA8L8(5 z%Xc(2B6td=8`B%&RI7uF(ij&gcs&>C&`Itu;0-or)}+6I;(Y7n2R8L_!x+(7m(M<)npYaW$DhGE8x_oniSmET`2sBvPFytT4~QzQ2#6Ap zv(_*ns>)HkZ6N~)(iX4rRgORYgcoejk8wfcUZEJ>Nq66UwY?-&;wQ$wP5$qiWt2PU zS++D@5sqZ9=23TPJ3DW^f2&@W6Q%Jq^9EsB@t`@34CM)ua%mZsyo?K;)kgPpk-LyH zZLS8&mPLbAe1PpO?-K(r-v`cIgpEsDxMAQT#3fE?OTy(mMe*%Jq3!}ve3bl0=8m*_xChFFUrncg%Q$K?`r=erCx zi=jZAqQadlgXviI;Rgz%HD3m#i8{>)>EQ~}Ne|L~*KA}XCmRXckH1u3?m;+n^5+Bj zUv;M1F;9FxAsx+;3)4BkLm_a++L$}XGcIBBb;e_u3KB{S)loKj+GnA6=6?Q)8y#_7 z6+bgt@$BOwnKeO2^kHA9hWBWGn!ashi(GcOCOk(t)?7N-Ff)U>Nr><=a08DWMN(7oo`ApOb0=r1eu{O`7H*7&i7H0c=YG{ftVt|=RWbh$2IqvS)6G@ zR$DRc3dx}s^7%-YaXP{W-K46^&`$$v_O*R%yglM(3phs1ea0~~T_k5Pd}*5G^$nVE z4+~nW8Y)&DOkh!wouB+d){%InM=CN*Ew*7#B$`t?NPux5B@~eyu-5p?F?1Du+P zXg5ZIZ_F60E2bu_P3cz1Fa@v*O%)k%F3TFAT!Z%3votagQQLp%Df9s_41~ z7}Bs90Io@oY0^EV2`7Y}y>{jRG&4vLR@fLss43pY6##BAz(5%eT$-~hjWz{b*6uUF zWwOudwNPkjNk0pF)J?*}0tq62 z1$Wtb_onBqPbcnWkjrHjPq|EF!7lX~x3Yn*xh}}QnE1E%A4sX>rr%YX1o~VJaCHfh zFHYxL=RplPH-yVJ`P*pJEriJy-=B^eOWk<*rU&sm zI+iSzyn3Tq5c#q$jMlBAnBYewusUpOSP1kbrpG!8%Rz=3PNsKnRPPuFR9R0KmXH#x zdjzsoo#imTWK6n9KAr{HiaG9g7B9La$(Vyfu3+^RO zN&EU_04z!ZGJu{jv)5R=u8w<>3Q`oc9u=CTFxIYLJOIM#A|+$28ud$pnxGN{#Cr}> z$iRZnZn7m`y{X_oy&(8DTlU`5(EYCD>S z7()vyfFr=eIKD$D6LD0!Jph_LnnhAn7=p757=c0N8Sw_}={v(<`JEozcVLqlF%F~U zTcMZeGv9(;*A0q`T&bG9vG?%lV%KkWX7jh23I%GE_hE1B+9m=)x2=HlQ zi>58~qg-i{=IBVm+h|zA{2!}99R~fwfXx>RW!8gNHwXo;=8$0`kpBUnS&3W^BUotp zvcejRoUVg(8#d8vM8-@FYp*+^OQXAjV%EW`>rJ$oX^x?uu8{bO(h(PlU9tZApa1d~ z?%ngJAAQ!_y(UbRVf}ai;;!$%@6jj!@Pv|Nv5&0(`ib{`|Eo{`>4Q%zN!I(w`X7A$ zi?{vP`@Z&v-&c}MD%vrS4g<6+d3c_Yr#E0dMfsoL9s8t7W@pTM>150EXuSIqiXW~` z8$T6z>(}1CD;v>sx;tC3KDjfc?JL6M)@;S@>{aU*+?l>g&%@bDT^hG$tJbG?-kQB? zcXqxqpHKFc>j&;kSMAPL@(nN7Kkx4*n=4`2iV{{8LP0In?=zE!o*xQb(_7 z&j>MCDy<6o<=grfX=NiUy9(AJ3eHM@A|0`%SLxYflz|_vSS&WF5oA3*7l}TEM1Lg+ z<%Lw(aQaGTj(}WEN`bORv>t2ZHkB)Z48O|&X{2Z6`|rVU_>v5V6+qR$eM&p7Ks|Wv zE`w*z{>RNIZ2tjAKWC41W%t5=)a^pL#v?F2T#_|3AjTat2h~VOs=JK5g{inqELo@h z5Byfq1~D`8jk2(1#YGq42*mkuV_K%YBzH+@DjdMOgWQiGQhQ1S>0~;i5F?X*xlTle zT*HD!p_|Pf0H#Ch&Yi0)j7`m(DyrIcvmwKo*JAbsPx?_iBLojid}HUVy+< zyZ~9CcmYaz$6*BP_6Jf9#Jwu~CB#x2i zqx=`C>y9k*eMY4fH937(25n^GhYqcw1pNq4C0av``Ds-(k(yyH7Iz8L#7yFJk@I>D zv7tjOU|$hRb*&|LCd8UMd&&UrZnMpfpT{jFi|O8VBpj| zs>u?E3*=4+hnio96=gUCGKNE*D;(B)IE;itnt7l=-$92yQuY-o_qddv{l;);r2jAm z1BX+he&x+VIbaLZ)_5M>+?|IoZUGW7*mBafG6jiq&6Alu&+PY<982t-xIDN(mb@pN z4{^a!h;wFKQ;>L55n2*nU-}6#(NPTiIqkdw$s`X$WWN&z>_?)&DeGn|rnCN$Kl`A_81O1h#sy*8Ja`@3budbeYx01uh1dx0(*usif#T&o{V(s< z0|dFJc)6?p<#WD!`K+!K`?RiQv0%uGeX@A@mGb3ImM%P6ynMKL`C$J`Y&H85E7^)Y z(EswD;^p1N%RT)sce#g$X~QHvy43;vMt8Z+T{gMPmF{wdyKHoqbtzg$jN~bXdI1+i z=cs!(;x4JXFx)R(ChpR37Z0%8x|g?j4o^OT5REBm?QHVix`aULGetqn!K?)7Jsz9g z{&=%7g&Y;I$h1eqiu_k~;cU1O_4TsnPS% zn%^$=8i;9KY+Fq@>7?HrO6ucjpSo~}PECgz9C@=B*2xg<<7R_h*g5k z4jNMNdP=4BCC;?;TkA)bab*O$1(?<`v84$hlEd( zLE8$wU}@pQa`y&F60)N-wDeczgOrkQe!AK0$?G%#GMwKAf!t#Aa$15}G;q;g29!8H5=Y z>nlD%Q$|Xbm*LHGTCzN-lxSdzkf@5d9P%Ed*3-7657KcwA7NT>K7>1g7)A=!nIJ@= z>U~G%CdQxv0gW#pbPNa`0|Lz;3WILvF>*jy>42aOBmfD)23d?gYcC)>YPmsy>v?*W zXtx9mK7~H$%u02}A{{>RiqeIShU?4)Rc9pIL7{p?VVcg|#Fi5Fm?16wX+tGM1yx$h zeQkrRlm<^=d=TEi9erTJY4_?ztus2VXq-Jk1a8JxSvDp~YcUhZ&Jm|z>4;M!W+rCK zKnleCHW7j&X29?EkRf}+EKE_g5jb34mVsgcXU2R`hB4ohbAyJH%#bqs%s3);zpxYG z!GdXSf?^@fes-eCni&-+)HTB85AJj$FqV*#@OzfP#xlyG-DK{!gdy%&WX5(f`TH%Q z!<}4IF2tLIWS!WKy%V&mkG&M~@R9-ErQwC%1zb$31%$zPa|{pz2^KT_JJ!@ohdk+0 z0D`3;sjQd_2tupW(Tx0%j8q*M?r5GA!?&U9=^j2tDxD3!bf@4Qom2M#*(-r~|o82g|b*YSRP-g&D!}@fQS3-GL>X1{RQEt zQ^CSSP6q_mA_)jsR3%s#Ln>0lau^i|AB_qq9&FPB5kd4^lF1);)AS^RG(}H|n#jZz zjvUMH8!G4LNfWqFbTRKuA8Bsj^p999B@N(@wKX9St6sjjmZ)*lfYG=_wz&s}lUm{z z;}kexXO<>&-vVURR!lK$$c7uwn#QEWH8e1yUgkmqtoCmWow6uYk=cWug}*Jm>a*Hd z?I%I+?Aa-cqW7PewCRZ|8$waREI(k5dCsuEXk?WK#o4Tgeu{$tN{TCZtD?9%mAGb2 zr#R?$3dK=sY7|#DiX(1RQ5?3V81b`4Ps_PGgW}9C5AsjWMsWrgCos@o#*Z@+p6x*N zVuZ&i(lo-e`E;i6puQ=DXOQHlM|h}TLxK`TcwA>7JokwqSxP`3iSVX>G@bCEu8z$? zGYVB4u^>Eize~cC1yDb;Gzd>&x+P{Ipj(WT`}T+_2u~E8-vy)@>;AV!&)Ud>venC| zU@vs0^-_saR`zV9MhYT#EH6k6Cq!!)%u48F3dI{S>9g38vzZkAGd$>A-VP?dYnvnVS zxoerjm9&HB(E-TnIOtyft08K|xNT8hvhQqKr)2C1oHZzO2W+~p(=KP(7YF5Z^ zYJ$UcF9-6_Ot92%Uv1k30cG)>)E$BZf_6HgP%h$e4T4XT7$((A9%r?k@pvFA2u!(v zLism`<&hYEpqCzSr;&rB1MCgF4G}qXK&%5)QeIc>-EmVF3y=Nn2o*A?CtL@hBLQ>z zkb{_1|L6sQZj9*6n4I0!2oLgsR!UNW4QY^gIrfQ>eQl-Z<)7YhnTFy?*9=m%Htp@7 zRM9UA#Tv;RkXkW^pO&&^g$$;K_@UR&ut)a#%q-`sm!az=Q!>Q{qW4uqj_divZ%=w! zU63*D2>t>a^g@t@Re!qZ1#W|yPiMGb=XWSY9Z@&dZ5$ZXSa*~KWWx|ufllTSVL)=(SZk$p_7_wIJ}5#xQ2yCXii*WD2zdY8MyIoadx zf_6S(cXTfU&h7k9q_9TvW9q@<3J{jhI2L_vfr3a_+7Rj)|EePW+W z%*i7VVNd_aq%g0_w$cK0Dj%2>m|}NHp3-w!59*tF z0oL!#+-UTxfy^KQob4F~EzEU;`9C>(fjW0MC`-M-i0Y6Mv^#~s?x3kMcs8Sk6tg&f zXnKaGEkjRo8Ab{Nr)O=PWfuL3RAoL z3ojKoY1VgrcP!{hxgAGoO9r<2wk@wr>mF2A_m(3A#!7C|XBXEeclbGQrTW zs`fx5P*S*$R=9cyTWBcbgG}Hx=R!ZB=fnh;32xdC~I){pYg?VCKiarpe@nC78MYR}QAf{zq zZP>Jb5;WbF3v<`qRugVYM%ZUhSV0is!97UdFG~8x28UwP+9}21s zas~dVjHxqL&PS*Unx`PT8yRQ2aqiA80_&tQ+HHgAsq9_iCI7j!HLNRce@Z&VEOcRZ zI1ApuOb!z#L$px)cR|j}*qW>Bi?GR%H^#MpVGbz}0%mOkYi@YShMBU4$heX+A4?`>y8uEoxV+}X~CT#KCzxwD-OxfVMc za>vewGn88FZ0G?%b~YqiDuA$8q#GR~q6Qc6e8IGJ6R;}bN$mp4!urdh0qt%$g1ay@8oBo!FSbqj5L;jFi{Ausy3HstYvz_pSs4u#NwfU1pM+?`b35v$>w$~P=TJMpe z+?IG!aw>%+4Or})tIz`9a&ZfB0MMw&)qJg5Nv;Vc0XpdBJj&>h@!PZ5#54M9jZpVoIL9r4@=1z)^ zMc-(EkSP?5yg>%q?kLXLh-`gJ<3(})fGkR9gxP$`1JaO~!=JG0>wL}nvuVS&1WMCv zG!34w?Us$wNZ3yqEjlG0w%LCNm_o76-R`s9^|T}@oUkIb??_yZ5r#~nWlTK0jte<9 z6>k{V4%sbFNuz3x26n1%*yBL<(lQLpy&|7zE76KLe-5W!1_~Ro*+%NF)3`O7qWnx) z@fW7lJ|Co%A+}XErnXhN-E`Q3nhv%sPM@_Wb0p zr;(|I4Bb5BGgcmM$g%vE8nvpR3R~gqXv;!2A2`UV0S~f4YV-k zq1koBtsIgt=*_2JDc$@+MG*XW(ITYmUZ537#}_N2qCe=mq(6^?UOJw{xHq@u<(xI= z9;6v8S_{3&6#x4vj#O`Oe$)o%Z8lhxkJ@-SP6r@4ACr%6y_$>nI)9}u8sW7Iv)@eC z?v?qwV-0X~&$jLauUKw37rYbVFKz-yR0?NkRznYP++D`@;22AYCH?v-*7IobU;w;G zlUt;#bdpf5TdXNNzb2VobDP1f-O{pHewYeJZM9`ks8G{*p|jrANPH?=5~GO(CLd{K zsA(yYv$w>tCR`*-#g_KWgb@kyLflIC!dYCL&s+Fo`z{PRZuY_6a|lT<@2wCOq2_I4 z0yC$znCr89C%qBR_8toIPxG+CW8+=OU2BO?akhz6@Y6cugy)mRStoveav0k;c_)@% z{&_xP%gD8o%lnsNhjKlzv>W90IAL~myO&ZI9^W%$4)cBH+C)uNRVj&RZ{?Otz;Spw@u#v?O!8mwM#Uk!bFO;G~zCVHAqW1^?&G$wkQPGh2{=`_|N?Z1J>dQ>GE z>rs_xtT~0oN-G#$_#@ER_e&Z>vl)#Ee+7*_f+RB{d!~=b*t!MkfySISZuZ`;a4KEx zLfKCxtVt%Jz68RWV92eYtRsv@8GZFg>v54*`(H`x|0kq%q9iSpk&%}0SCH1(1!evI zuk^&%@%T*2IuTE$tP{91Qz>hI{RJp13wuKABm`B^)gGxhE`DB_f_=S)JhEh4pX6{vyJCcz$Kj z@e)HAW0^3?R{pSqP2C({AaetQqhki2GdQq030D`TVA5cI5vssl5Nvi16{~z?pD}h> zgwwdn8V@;ZLm-o7;R0=syf*P!r1gA%hV{0jvaFYq)T-qSQ$iJQ=ATTX?Z(WS2I&c-XsSi&9s4 z4-cDJ;v$)aLGmyodi@s3!b{g*OIo`T@a@MWOZG>7n4XpVCV&G9)SOK14*Z=b0-4z#CI)&Wh#m_k{{ znZ7NgTpGx{Su_} zI6sgm=SY4l^M}vlbv0sprOH1#^XQOu;`okyS@vtb}7vtdM*XWB4EXo(f zBo<8FEOYjqC5rem&6X3%R8~8YOlP(I^InM6YL(TLBe6>50z7FN4A)aG&rVe?WxOsb z-4ZPMo?C*pETTx2TY_Bqics~K0RXHqs=?z?a9wu4FAPXD)-l^`#r6fKcCo8D({yN` zJF#<>=V^CA4!PRN1W%|BS41-))@jNBlSdJW%w95tYxsmnSHj*+3V6ABalF?=omfl% zG#I#y2hgc4=o#r!z?hXAGX{(aE|)nf|Pzfgeger z=T%sOlzx7O;YiunV~E_bNWWazcb4+>F-^YzEXS6|`@TC!n%J_R-42l^7VKxs!=x$Z zbh_``NzxQ^>SOa#EQm2nCf&<1v*Z$cmhnp_(G0WD85#TVaF^38gl^_t=ZAn#k24SR z)Z^hvo_YbOBRo}M&HQZy3h(Yxz<)IY+skbsjt(mID4DTr*iyR+brKBNa}K#$oaBL9 z!EOFm;Q3KyhguKlDynA-9^G=?rz^B=-pHTs(<{6YMoXAPHr+zvC?ZCUoc{{FDC8}= zFh7YwktI+bec!p%Li`ry+_hAaW;JQlLT{eatgXEOSk53~qGGQpYN-gA7rcZQRK*4; z%KFF1WYIrhKEIGK`@7~CJ=*O#MixtR@mhut%6P3&CrFww~E;AWZ?H< z0f?qgG8k=bHrG---t*4nNSAVE0(-@zcTdh7x(k)wkV|dxs z8=T8M=h%(3oiKc0;Z(pKP%s-r^Z<8!(M*67(gnDnC!i4s#50I?>m8u$0qwAWR(O>Y z=QxvP&pB0GhU|`x`b4zCMB-2vIXc3vDEowH@5}F32ahi;?Em9SUF3*EUi*tK1oZT9 zR9UDK&_~iK22t>WaUBQ9lV@eN>-L$`qZH49s?O5+sob14OXTUZ9M_!WDuD4zU-P?* zSU|qhWZ+@eN0);m6P7aBOA!SeN||f$imI_f(ZRH^{eTS<{ZcnO`q30+Q!uy2`~uOt zxcdo%nugZgxElWLQYTnxRj)nANEEZuimF9NNt5|PTgx=H>GUgz(JXbMQG%C#p^B=W z(Wky34gKk}Z)nqf!Y(r4pis;60X-9tGX!yR4>CbmS4BsbvR@VV$fL!!(j8OeERzp= z&MxHx=uoVEAYlBQ|JX3D5)mi{eY`FvTE?E=oI@>j8=h?!cQMl_` zkIrSPIxm-Tpv5f1k?s&r9(PeAPmjpMlad6?8=dfl^g9iLNZHA) z&Xc%>6eRmLE`Mt;Zscy+>R>aMuUf)&YRft0y6ldPGhbcoy_{w~$Ys2m!To7xb891x z%ujwo{S^h2laqAAx-6Hn&Rs4tiLX)GNX8<}tx$ zo(hnX2U-i+R!Hn`kV=N$kv*4|VLvAH;bMKucm9X2H(v7U!F zvs$UXSvwnEx|DsK{hOH)4w%@pm<+o7w6=k5TneKy^_oAQRZYowXJ zn0cLz3dVooW-|Y?_L_b*~}1g0x=|Mfi`ohZ^^w4SV)renodiVv3(eB>DEHk z&r~LM8G@U$#X23KKGEBn>$Y_9`se@ohyV2V-}}o?Kkx0*Zp=14=4E}L0e!?1bB>CY zhH8gx7;bgjobs1ex0_VTwl_NBhRIwqv1~A3(->?+1}(AuL%NN)b17(dUW~J`GV7^A zp#=+@Eg7<8mFMLZ0*I*fI%DQGW&|&8Kq@68UJi`|@i?Wd}cDtJ~#zH=~0!>>6nc>)9hh=kn zQVfjK@qzK1_@bZ{;g7jTV3))27T=u3S|X@<@r`jZVUy}vZbi7wdZu~(qJkRV&{)<77K$R%8zTb$_vYM_FBL>Q94VSm{wV)vseQ(D;+xE z@ar<21i+|<`pqd_K zBn~iIG18Y)OX6^R7y=Tq>h6RX1U*J}a~$zv=hx)|97kB%25JQ}dO9i9;E9hRTxT4S z2sP@MntJ{Z+8_lcZWp;5OK2(dp_x~ZWpA#EnvB`4nOF7X3$fTdQC@mV6#jYIksPk! zcEH=5DXIEymi*v^ESkfpnLI@H7y*--;>K}@Z0QA^n`WJM$_d;5YDci9Eq@lhrgfuN z?PQ0}!iOn3Lh`gvv&C%32c%m-ZXq)f3z8+W1;-4Hi#Ha{MB__msx#qO>U)2EB@e%KK^JStY+a44)0!6aREp8i7eVB7YLY+3jp$vxIsjMOk;aC7JOR$ zzS}_#@SFd`But}*)VAQ3G?%0p%ip3cYM@aSVp?+0trba^tY18lEnWY-cUw=4ZtpHj zm)wg#FO>k&40mjegvh`jOPgD=rfrY7Bwe=KgfL=vmhBO{i}}bg?vek_9f2%`K#H8ocPQ z#}Jau(R_84sQl^Dd-LbLE!hIG7YTxRjguje&X$DPhSCJ`oUCI@&GcN@4wfH`FiVZE z(74j_$YGm-y7-saTCztD_4F0@!UH-YthPmHl(tlyBn>tg=3rC`5?jF2n*NCDcUA$x zE++0N7J_0&8*zBw60<0 zK1X8bn9J$`oHD8`qT{)#kDA?MwnOp*86L#VxCjdBdh#4={1vS+)5%#6I);wPlM3>X zWf`l*{q=9tRKRcE)?j_EWeOltj#c#7>((;a;;{aBE7JE9gY0=ZZT`BVERz5Lty`78Y#*Uyvs`BVKo zp`XX}^O+Cw^9lVN*3TjRd_+ILt)Bz>xko?0rl0rdXRm%H^mDs@{`mv^Jg1*$_49rG z{I!0b($6>ab6h{i^z&8yd`Ul#>gQqod`3T?(9g&9^LzR^q@RQOd02Hkqn3XEH~IOV zexA|KQ~LRie!i)n6Z$!>pTE@4*Yxve`uVDUp3u*i^>b7|kLu?O`uSu1d{#f7(a%Hr z`J{dx)X!o4{Gon+Uq2t!&qwrgzkdFUeh%vAfPVJT+~kY(_NS3>+XHQhr_(YTxI5bW zG;3-d2lu+LV`|EY9LzM((hj?aJGE`6rngMnidjk1wqn-&Krk54g zd;Ta}Fh^{`Oz4z#+PVxQ9hz*tjN0UBt?cR*VXB`50n;e<)5YGiy_svfvq;+=W6<52 zMZ2?D8ywq|i(9kMwo;CFXLaR}9T{lH<8XHtxR-7(X1=QHD|S~QgSJ!F<_tCVVs-^k zMXUmBdXw$NjI1hO_NwfCTq|GpzN{+l|5BBzLTiy)hHcGW%+?0U!&|vc@7$dRyW5XP zAW)}1$p>c9B9eZs)RdMsw((D8az-3@y&b{Mmbl|tivn8solI52>BJWT*RnPJpTY(P z&>ii7wH1dG?re_zq=&LZ#om8=8t&pP+nm~&(NwnrYG|gNOQY?U^ELfBfe4Ny-{ot! z+<*Hnk;|y+mA7V}vbQVvF}k{y$P$Gmz>=QEy7z9)gq&Nks_TNgw)GV?rgz%rz zT?htHI01&v$Tt2aAdu?L`h-Eijvk!(!;&m&XX_Q5VCI1-jIk5?xFtZW+c{V^d))5XM+xAy_mW zvgrBPnDABQ6TXBZvy5Kf{@S9TzI{slg{N_k(EOTOG zjuRVm)Rj@z|In2YF41&hp`>ZTg3Qx}g_5QT3oOgA>@56{c?bxOBf|501Dk};srGGO zCNY5pDx@}aN%gZL*jwh%j>mMLlNf%Y%xE`u%FF0!+j&RghbNDCGR z(ji562F)^sHnjLxC?YxQX>fs)p^~quKnMEGoBu zXD7}yat_z@pg6u>)b!R>2U5A;Y-f~nmk9@FrFhR za~05JzT;*&k|-8D&zn=v;=b}i$7uWl0-9h)0Zp$L(ENOyp3UJ|+H?s0C1p{@GcnYN zorFJ4JkwK9#&$#X0EnR2oo^kUTgEeO-4UHoB&%Jma{M^JBA{`wxw@?Q^sMWNN24pzn0`)5t=CQ!#60#6J7}oig1R>B2 zoF0?TB^#}rn<~<)*aX^E7t;MQ-Qt^;?kgR!s6)6%V+uuQl3rlsrnA3-&p=bT>! z7M|N#iif49oxD`T;;v;y0-;E^7EQ+2(kXo?b6P9qO^XEp#;}WS45SOvMg4I}Bprc3 z$(h9QR6~IPhjZ4wLDFqSBz;*uNMTWVdyMgjK@O%UKS>A=7`Z@B{d?6*1`(U|H5}Ga za1xeHwJO?A2Q4<)R&0`e#uPVWQxk-NM1iN+B(3Z&g<|=1K>P0#Gf$UD;u;$-;%Nbb zS0Z(R=*UhF@eng2Y9r_*U1XcFaq10Fg^m-^@t{IIj*1ub({4LmGBXWMrCQ%006>}J zKid~Zwd~VXQ7t8Vt|^MjFPM>P&6Zoh7SAF_3r4>}RgF^#As`W)z~m?xB{C>V76||X zNMI`2BOu(2^2z+H0B;n&}IJR;7ZN?OUoKHVPNr%?K^qO%io3v%)d2ud2rR z*dm6;p#y4bBTX$_Xb)w$P?-x*&Xe{wtHTS{K_=XKY?@BZ+zsi6s2kp`&pU5iJO0gc zhg(W^ATQg!ZG=`AASE%UP>KM%Hnh$ij-g8X?KRjDwNShHs5Be zgSPgjUJM1RIBtfvZ?$uK3qMKNtlZ#N)Gjb~9U-BoEAtUb~a)ANQ`k`FOB<_ z)ANeo*=bDdrK#y=X52Gl!x{H28Ta@eiV3uwaZdnU#(hi9%LtbvI0_6Y6RL1q|S<<+MMWld_%z!s1(OK_u zW%VUtgu({LQ!EYin%Us`MmD%*(5JeU4Q@G!HeiF}Fo%pNOdn6cb-TA~^Dmb@H|_~1?HuS1)SYVn|At&H*ig4d2-zuu>~16xS#*KExg^TK}9`vZf2GS zPsD+Es@+_@j`L9RmQ-H4PukbHj*PXWviN$Lp-iaiD-&E1^H7>w*y%!T z$T>OHM=VO7NcbrrpZdvqZJXO*qGlvR7dF+dzcPT_ei~%u_-sT$7p{F7A^c+7nv`XL zh@ilRL>QHiHna~097T>Z&=1?r%YiK#rVqC4(LWWo1AVYXs%v%^>~?0lbMPru;tN^a;!r`FSgAQ65hr-6k-vU zsUE}8&AriY`wiuW#P9?!Gof8~Z1G@yP>D3L*kP4}6frE+hmhuzst&+JJkkO2*1P;5 zs#qw5h3w={`$YNI>lDU{=$I%!8_@|B)5eX6S)Ms=5L5?$Cwbl;jA%-s=b_Ko7v zH5yctTDuIHtuZi8jJ!xzY5-dcW^={gqI~>Vx~VfzxFXqdO*LX44|CkPvfsC$*~vO6 zav{#ei?f8eJWPgFS!~ld&RNn6XOOYO>B4*AHesdP4t8K05y+Dyb)msU>G1Asp(N?T z*(7OqAs;Q2|HR?I>7p4#U$_J<+Jx&F0q)kt4GVvXq3?x~r3-J9M@AzFqAa$dPX@QC zp1DMJ5T5f3Fhw}CMLlm@XLyX4f)%^UP9gPKk!8G;qS%R%y^N~!tF*};t>g4YEkX5} zf5qETjCy7vLrZepgt(5!^#5f0R6|}b+{yiBvf|ihm299&EjqgtkWnVd!E7z^ZU?@BO{;3VH$_H z$^Xo`Ar}Y2NnK=2-T_Bv>QBQht?kwgv4fy?pqP}9{kRYdwFt3w`Zfb%vGo*wbckgJ z5Y;c3g4jVYxL`KKc5R2M9$x8oKVIwLmD<@nQEr%Us_}48c@bypkWwJmk~R`7&)Jv; z5Hv4YYS_gN#zJPe{4#7Y!wp4v82m;JnU2dKip^G?+%d78&`(x(Aqn-_VltZGW?>mZ z?+VK>3PJE2c?iBW1q8t8N!7K|0bR6JPn>VRX^aiFly43Wk81DBH%Iw6l2yB(gEIE6 z&0@y|G-wO`vT_^xntgDK5_hOXO_0*Z^pT78K-I-q3`5}iX|K!ntiNzAl}b3FcZ?Xd_>a#S|}P2 zv63!u88t*|19HAHL2dJqwBEcWo*>HzLJSa>$CC(&!XRuZ-C$BtrwW48Wr%y@+Pk#f z8nt1d=~N$jhqxTZP}G!yTPgzJy`B0a9a|l5f06EA&m0T(bpq+~F$i|92$rqka4=~` zy2M2@HeIYdlKvne6B}oC!lYNYRSaaHeAW7GY?{Vwl5~JjAy?)BEX@Y;(am7Fp8w7h zA6{TSSA_?!+fk$R>8SZ$rn2RGDUlt3IqOxX62X3M%=OX?1)#u%^)8j`rAKHX)Ul5= zQ&T`RThgWusMVT%If}c5d$1xHk-LQ&(T;qPkj-)$AzKH_^7^7R!E(Mui`0N?;hkAC zYB<`}^GdyE9J2r(P782R7=$1m3R9xYly}2|rD}pECAlfG%#fAkS<892q#9Y7@^(0Jdk=Y+4TkEwl;|2sUG4*i%HH9iFZ=D-p7=W3o`ulK>4fmi!FP zg^n}#9X<2CLH7!1?`Ira3}XA+Ub38(ayez_m_|<+NZkrX?v{a0*bExlEW;Wal7R*= zZGN0D)xzeRmxDMc!O$d0C`2+cDcoUIQQ`lAFk+hrNxz|T|8|h*VJXhx#Mzy9fH4m2 zyzT$-gHg8uq|TsU0Owc?OruUmnY0-ByZqug3Y3b9G79Gaf4MZ>nNnMtcgyw zQ#@;$oa}Qf0_4v|Z_tFO&F&yxKqpq>AcEKVLGHI-=fluudzneKBiI3lhUfc310H5B z5a~w93vTeGDG?TKIr%_Lgffdj{?zl|eE3vLh&Y)cG|-oW2&wE@TCi~-sMaeWWPv6d zZ(N%V2#_)ar2~==;AEfg+wNoo8g$_>0v~N*wkbSRyl)Jk`qVNUPWHzcrhB0zwM1TL zGvig>M(#fR#D|~orXN%1V*{$0RG}pT$Tpoh%Ak+V9A%M-4sN5D^O&uP$m;r`6hZ(r zSav0L&gLf%)_@9=I6Z8}+SHgSd6lMq1sEnMsN$&90GmZ8PVpMBGHD87E}9h7?_d1%)Oc>taqVAZXRe z^$AxH6BspQ2(oPrFy|g+7=N%^`I24#; z1{ck=cNb3=itXs+L$-i3Ijd$tAg)<)e%xcaE$|x<&LHXiH8dME-Bi%08#-$DNFWY2 zMp*2-vC-)|aph2!6iqhpfk2JIs}qw7m8mArbyXh&m!aetyjuHI%87#q(qJh-2EHhu zK@kk6A#UWkB$(bok^qTW07fu6NE$6Tx`vLjEvN8;2y!bCz)dH`L|0o>;djlDty+rP zo+p6J$f;@_awavoRdn(hK9W8&*)yc3)@W*NX~N)+G#I{ggMhMy@ zlTnEhU~~skK}7XI%$Z3zO2uJ;&f|miplkXA;QEl&a>&A*W=&35z`v0n;rzC7a9UaFnBE6x@AOSDueh zMpFt#E{>=hHejt**wyI=QUD0`RC~F+3z3^V6=|52N~QR-(e=Kqwg`oT5vUwnAO(EK zA9$PuQ3o!YmxIQ<8MIJd?bb3^sH0tg2h(9S-t_JCKcJjaRoA zE_Je#`E?M`Nbn}Njjy8!>9qHm0lrD+kxNTruNJf=jR*IuIbK0uUS#1rqho5 z0@ozTxh}dzJMwEbR(@PfV}Md|hL$cDX&g`)o8Mc>;z&ORSj+r>)`utAXs9bd+FJ zL3n8Ya2!miJwOIS9fF+pT{g;40ATUcQ5y!xufSJI@>DiB1tsnr1Y?;*0Fx4735w@@ z$7~UK=99I%6taaj)1@gBswjdpc^la1*}OSfe(#t)4MyLoil7quZqf%jatM5%C&5T5PSA(37Q6NIh6GKQ#F` zlYc!ve*IW}S`Wt_dc5%dLUf2)i%z*B6I{5t%&-jO>A48bTG_?U`<{U588FGcvG~Yx zn2N&5Iqm|+yiT1k)v*N4{4m|w;*@@5Ys);Vj%{+eKhUw1e9R@Xg|&PVFpAXZ>0iJeh|SP=j<2*aI$r?9Cim0)4V zz4C7;W5TVYj?1%j_Tf2d!*Cd)*gW`K3Qudw;$c}haei2b10q zvyzcY<^g75@}E`5m0e!J<-{DU1IgL?-D+h&i=aW9gdSLU@@AW>|#f@OBe zI@E<^-)uYN4JOzb_MOt?piQ;!?oa*uIY4Sx_ciVGHFAGgO!u05yLLDrUlg88ALvWm zo?w>@9E7ReHQdgGSt#5gR`|!YcW528ZU3QmFE2JlvyRf)Y9e0Q@e!v?IXc0HtN_Kz zccFn$Z+?SSj?aZkqEc+qdqkOgY-?H(DI01A2e^{>TsU^W zS(B%{U9hpyWqwd6*YDRiB3LyXs!slx;HP?!GiN&a55mbFq`0mVFjG%z5MBq9GXSpG z4C^HV4%Rooxk??_QYePt0aePt;c`o+kaP+Q_nq!U`rZg%gX`TI4C1;E2m$NH%|OJz z7<#an=*F!qol;DF#FpIam?}&Mn-s2)$Uw@m!_ZWaqbj9twe152owBqL&LQ*5p+dYH zH@m(e__sJU0jPxety{XG2r^u!FDSts55(0D58}F9iYsl5@kcAMJ?ul1KO8{g#I?zz z&Sv7mQuAI}829?Z3>%^rWtg}@`0@ea4QYK}aWzEO&~E0R3#&4}jUt$!C30{OW zQ5fSUmB4;?NC3bv(ioj{(9v>bxays;sMIKxJ|;R{2!L=q1gwlLEsO*lHV#BnV?m*@ zB(Woga$1-=I^+&WKl0cU7^~ir-0i1NfqEz1gNbv08XC*WBS)vnvmjlb1q>= z21-kX<)K`7Mn?yl(SlQsMW}-JEyg`F|=$qu7v3f-moc3_j zVYI;SHbeDRI|J|_TN+Sl2#U_udL8jC%>qOh5132eva>_)$3CH`WsJY5P{r}Vr1Sk# z`TpQcMruP{PDghs1Yi*&!h0V5CbNy!;9ZFh=vRMJMfa5MWi6v4!ZsGnCsyP7REGH( zqhhCwQ77%dwE`MLz2J(hXA5X*EQ`Lmd{Qb8DHILkOyzwN4o8d$7!|>)0*S^CDR-9? znbH-tK{!P!vSdw;7lCCtO{Nqok~~SK=fj1zeb8y!f{86)MIVV^;kFj+On{H0G~_W- z-h)=2V*k$}3KT-w8Iiq>tsKjaFyUhRC$S}^lfI0IDgx>WqZJ{pF+!E@02b$u=v z2;;q6XX*$<$YFK%fREdOw9^y%0M^*cz0QQe7%{2G!#=3Ai1bO<>OE^tkreujN+kU? zlq(6czPTniD0$%aggT&Gvh3HZ5{ad~1LXzDJ7Ons_xVt>)hq+b?RwTQ386Smul!n3 z{sXq>)JrK}rA{mTzwmLFdF*}V#zncG_-`rq!&a_Mvb1qUo4DH3r2DPxX_^$Jc|QRh z2OM;%P(`~yQlU$wzk8Y#+(eE|#Qx}Plz36iAF1;{4t2@UmpvR+$*muUhzP zTnr4-39?{Wz`#v9XCaJxXJu9nUsyAnwH4&Wc3XW$1HzUG9@IdW;7z@mVoRHTI?glz z*k1NZ*7|?hd-tHruB))~oO7SwcfZH&)+ec@Zpr6f8q$JpTV{l;kzJKODqE5xD^gPa z!&Buys3{Xjx5i^V#wCJnwXHU21_Mpvnm8^&H6V}(a;!-d5J7?VpqWu(B`84qi~^6w`X zKL*XUY34c|KP8~~jVQ(p!JiR27pFXd#x&yt(0N`ninFCta3|myfegT)7MP{F@F$?r zdlASm%QyjwqH89CgIBN8)XsGqpDDgfSxu;jZbW5uub$NV^iodhO(ik@f;iOdD)=m% z9LaHg@m4PDtkqp#_yB91ySH$MDbC%Sxg#2kyJOt3IKmR zz|L7<^oV-aYU@j4dNd%LR7D(w*2l^tHUx^gHc=FPPdA%k&aqSnn}dhhMyNjS8@SV* z1ox0`N~H)DBZ*uD?%5K>2Y*QpI1HhoeYXlzZGGqf2ZB>m$m#=PBJPalBRyKLThkj+ zncfl%(H_p<^rw)ks>U$dnrhVXDMkXXV)_W$6_wzl!R5>e!u~0fxg^ifBZza}6?i
Y6Tys7t0lo3H2>jeC|X&xto;sfa&S^WzYL(tJp^P% zfS^Ts5Lty+M_86r62PP9fui&S2(AY-U0RE=tu%kzZXUEPLbF*Q{jqRi!bDCj`j1LF zw?M1c(o={IpGxgYaJZS1?;G@>9FhSOe_t(DT*9f1_~wTo58w7mOpgC=)03KNxbg7f zd>Uq^llU_!1d+QJDyD2Arn*SWI6TGarQe^sm-c-Ba`*mhuJNJn$)ownW8IS{@{=dK zCtu#P*01FEm?oT(OXJ5=Z{OK==DqV#dUAVb@Imv@`@82oqZ)cfHDJi5Q(l++Rnidh z0dGJXkU;(K$+e~Wo2RN1({Hlfr*em%jt*4;viB!%1N7t}xj0O}J6xqWqBy3UNQAbJ z&sS|HpR2;+)iUi4$jvrxd`y?JgEm{h`DuGVE;Bp%+O*4d_5Io0$LCt0o$7@r?<&Ni z_CnYVZ&d?O3CYa;t+H;OF}-2(tI7X(aq}X!;l&V1Wr}Krk#u5QeHb_@6xg2JCKoFu7R&ytZ9Tqy*L(^(5*{v4-k5ZslBwQ9n2S-2}t&i z1Ljz=1^&o&dEfa`j>n<)@g28YtOEzON&HflF4MXcPrfLL73u4Y#y?;fb@0qX1TJ*u zN}blOK{@NDN=dd42fN+AbgjKS7UfY{^bNgg6j=07xm~?mv3GXf{^bSvu77S^VzECa zQ&(YHUDA;P-)5lc%swTh^f|>Om8XZHYjCR>_h7z#wgb{{2+*$xEpuV8?PYR`jAeFX zxmjd?ljajjlQCN-iH`(TR~UEZ3UHLsBYrP#SU;)P341&VstJzy9xf2eJ4F1k;=jDU zxFg+NcRds`0G4Gp6ZxT(UJz~gV6Y9+33<>+V!)-)K%=?@ss9)+*P`8baL^~9W%b+D z3Qm)&FFIBnMK$B6ISIG`k_2ji&C9n?^F|d^um)(UO;1e9-hq2&ky$JiYG4iMY8qiA zasH8WY#C5lTOtsGNBjVpv>=*P2wA|Mk)=|obPak5I-`Qnb^Y+f6dq)FGhhI~?@X6> zfG*_!5q^alK(nFGh)Ufu{374M4Ih`R{g1N_kMbDbjWV4JIQ0@?Jv0+2#4(W)T%ymV zCxB!`V#BmWv1oqD@r|cHhC{OXRqv~G|GzBV|8L&!=eg33w5V7?&2RZ^l)gQ`^zH90 z-M{GlBz^M--uJmrHK_9Vf(wwTrneY=a0rNVsbdmwld@`Zb2L^cjp*i!=@RL%dU+yL z8mJ>J&hYh-R85?)ob<&J%aK$a+p?%c%oV{nAcp&R|W*@j=?*Xs4@3Dy`p`jP9ubKf*6UXauITL1FA|M8~I%%FDCK`t_?p% z*)eMdypBH3BXG8u7jG$lxQZ~#SSLtL0yl=jt52EEP=RA#jhDegVu58e*AMjzYKnGtTZ8Nn_GO=5T5Yom9 zbBwGaq`4t!V3B(Gnm_@9R3An0-Z*8#RMHL-D2d;Xlj1AehZsPAxXN)n)^UF{7Gh;! z5w_rf0AbKI?~K236=1R@?&yX*kMVXK@3!|_>^3SU|f z4(0{cqkd8@>08+&VsQc1D$`X8^h=QLCC)1pp{JlLgZ_ZxFhC()b$9`i@yV-_R|%y9 zNvE9XoFwoU%S4gq<0xsAOv`I_sgFFouAS=)vl+abYKJ$5M#j7G^ijEmGiKMjY5Q(# z_qzk>-NNZA(+^G~ak@CyI9XdM!Xxw_T_#N~F zNBX^~_U~ErtM{GU^n=^;8zY)-PLFEnwM1IS+2A6TQ^8l+{s!-ZdheR8CsaRL z>d_#o1l`5!LnZT&>sb)%6>kabq5W5{ZuE+>0)W{=eODs%n;@X1T}6udhGXG_he@8! z73YLBJ|FWT9{Gs!k-RMjt}h2K>OQg+$y=Q@>9nS##cQ6-+bXwaoM@n>9icr<<4al{ z5X8yz+G(yLm%kkJJ};Ker>>5tDr0KJ3DqQax`}N>VThuD z6`oJcd99Xa0RCAso{sB_o=?s7B|zu(Wf&xZyd}$vSo`bgd}^Mbj`OLxc|cW%cg*Hh zz_l%<0L6T!N^%KpqYk;+b4k+BJej}@*|8I&sDV0MBnUN5rbf~*{tP?X*-EHB)M6AQ zZay#&3IwHnWa9t%7a!sI-PUxko_zcXn9Z}o+%h?A*bqYCf} zbzHC)%&gbyMf6+9(z6WNSD}@Zf00S@?&R1k7l$l^$~cIbdOTH~+?UV<+T|fhVvUK# zpYHfR5}aODt&x%{cuRfJwQTy}88qS6m$;kG0p1brxg7T5Yxcz71MIG*uEQthhnOMc zQsy$AeGC2(Zu;o-T-N5bKw)cgUE2hYrn7JIH?#OqeF<#Pgxji^-$WNN24)AnJ21Oa z!MQg3OJ2sauy*?F9#Klo4m+)>;GlGJ&}|O}9QFABiloT@*-SON3@wTP`Z?Tjj_EP` zW`3WCUG{kp$&B{5+~L))&C{$*(kzaiXVP8Br{+<9#2@(slny*#QEJzICb(FX^qZu( z>^ESQ{py80r{6rH3PO(_!^sE(Z@Z8}-S^ks*F*)g806TH^Hh#AmCc&`z^CfjlcnC) z&!c9nm*AOVh!z@PU!9VYPHg#5T^p@M;AJg_htvV0D6x;8c4p)w$WBi}!XG)%L7jAVkl^IUxIK_3y)yM(==?WZ&q3(oV6js79tIU*a!m@Gn=RTTR|6g!-X)f1K;kOdL(wa;!@^RLDyHC_Oz?O4e)GK5~Jz@gXi(S?iLNPc}y;ox_bo<*irHY=-XLX^Tn0>@rY@f}#^P%Tx z8Oy4sz>tANXCEc;$)wVMM1acVU3VoFM8w#C^s_Wc!`pHk$ z6E^W$?KRPjsD=s16j6z92l7mn%u2p{+VHp6JrpQw=TO2$l}VB{B1LZOvthv_^FYx0 zgnAm+$Jjn2GC}t<(`Invy2n3z*JnJCVZZRSYz8L_f@jpqDlLb$=J!u|)g5s!%+>en&~QZ1K+)t91k7{twiY)s z$g5AfQq-)f=6{KsFBIv)|2*Qd};G! zbz=4=GTA-Cb-?urNb=hlr%aeIloQ2dvRG~is4^;KuiTP0h_Xx6c zMPgeCnzNqzQh?%YxU_`|TwAE{4XH8N7WrfbL4f6|1QNGP?gGiT1w8uAbMz`u!;Dy^ zZ}VeBbgoZ-*?OK;{p9+5dEzYvb_4hHv3RaDy5JeUI6_ns%oBGh{X+UN&yN+qUCu`w zV%D51?!3$2{{niwC+_}biI|GJU&Hgmo!kmtBOd)L=HoqgiHvz6n^dF`CezEiFQbKC z!m3Kgr4qtpa8rBn7|hpYRr>l25p51WY0x~vn411#eD#?KDXiF;4^}CK5doJ-<>%$G z;_tE-ra3Shx10l>LA{Jie&Ie>_(gCFm_-Sb?s`u!xuAp*V# zal_U+FgH6fdo!0KCuVpS-BqCBnhslF><*%zovvNtG- z-sTE-eh9~eM1*d2+j<|lfaJt(pg<4SFiLI-N8A1cAC;TUWBjd>kZZ^rC|DscYozoH zXS|xos`&_jg5nxNewwK&=Mk{$YpZNsk3M{YKHPibI)0*hU8aool;`1@c5Xq2Z>lqt z?&P~;j(hq~gDTHZYw*lZJ8wQ7l{tDSX*eGpjF!M)jMQE6%l&}}+U_uZ-Do1>qhytk z@$nAQ=teVE2~f1;Z=k1haGS8wT+kxok_qmVmMEaOG_N2EV;yyhVkXsZ-ifk+K@duW zY_?s9r3cqBpah0e)D`*dqDyMg>A(*F)|~mbS+i-*|2B6os5hbuH;=W?I;1NtY5BTEXJ?j4}CLEWJ-c2LHtyeq5MEM_n`wu_NkH)x4>?Yv@NiW_G7RuVa##n z!$BMYs4#J;EEtkdDB-mX7lTZp+8P7i*aOQF1lx1!qkKiI%H&oxJg&{B{vF-^7j%>f zx>2vMPocs+IQkAI{#vr_(pI)DL?k?Yh7QfPs1S8!h`Mq~)bV78s3U+YtyLpX96iz& z792T~xJ=$P$4*8gs<{9PUl+b^%Ddyxmsb%L*hihHs1{r=X4Ka&Dtacby0l@Y!MduJ ziS}B~)OtLbHz6=SL$m53^Pu!BHZJE`CpJzoXA3ykLTsGMq@(4z!pTjN&*^ejREQ4i zQba7IM=(zr=lm)V#}dQzbn5AfI46 zf5#^XfK7{BJ!DSprYQ0>!u zYR7wsmof{XrJ8n0Dwsb4o4rwKm~y?~tE~iK$GCg093#l6xGgCH%pJ0O;}%b{1PNUs zTa3_O;?inp>AtULu8PpBdWexoi&SRz7I=oLa*`^2NNaTs8}L7 z??v#4%LxeFQ1BSMl?4ymE)~=;Msp{zLXa8AD_u>RK93HcPp)$~Vh0H6^8{Sv```$aD zDw_JpB)wI*A}iw^A`6l{7h`>_RQG?GIZWy|t?_o6;f{CxO)o4!{UC(H?{{Q7h|Gd6 zHiNh6bF$dSzX-E+p~ph(V{i?$66o|y4o-$9cph*J@+Djcw-RJaFdW%aW%=2}rz_`s z^EcJ_oa_sq5Q`^;&S&Q^9*e&k24*8i|e1 zVAiv*HfLq}8#F!W`0`YwpX_&tT2S4vCzC$2QC(#$rn+Fk)&9^lV{SI|~v4q?8Icl+; z4$DN`baMTBRD_uhnJ3+`Ovc7SXEF|{?JRjMzA!u7WZ!`18ko;!u%(f#eldas0EQnV7=;JZq5DSTTaU~++g6kpf^Jbn6 zJ&EDwSWj*a(!{%oTc;Gn-5PH2UC!>?CjCKNC;eBXxx{mDueorlOgG2LrKIeF%k1Di z;3Gs*n2jo%ZYbGpHZI9^*;r()yHHhX2<$*{VLn&5v&{jlF>QwG%tjbstmMOOODtox zFd3oiu*pyctbS0E-78HiV3O+y!x0+Ma2#Mb!cOrp1&J)#i>AldRvfe|q)ryB#0HH6C3| zAcP^35aA@Z!5##fnwJbI4owK^Q|E(ibXc#zcnR{LMa-TZ;I^>3iIpLLi%d!%y;I>5 z;;^19EWp|z2s*T631V|DBn9xnX|fGUog9e${JM7Jyn1k3+Gh+IKp_L5>MR4W>yjZx zzz^I3K`CEE!2-J&b};{5u}WoclvKuK zuDd;6CJqn4ok*wvS6qnAv?&ncccFsRaV?Vzv8TO)cLDY1QuPCny578;Tx`K6t!v3T zME{GO12F}$4)MP}K1MGHiJTmYZb2+GBRi3BGxAqzd(Vtcra9r7O79cAo}D5O~B(PAv@K*8zuf?QXKMh4D`HOr@bb<8bXrO0VfksqmCL4I%&ctsb%vfs$3M)l;v~?gW5Yo52C($FM?bc zb60OS=B`;L$=7ep#TgS>o+o1t=A6vAmDZe77F|emzHws?56UjFt`UbFsD5QitmO|{ z>kTW>{)IZZ#Y6lGn2% zy}r^3X5;el@+x*x-PFk<2n;`+^N)HCSYzD9GB!#d4wG_LGQC{U+qQ(gs3b2-Q+{~~ zo1ZRWZ(q9RAxqaZQrO&L>H5|BjgFL;th*-Ru@MES)`Ba~C2Lm9jBkPWY9+~Bwk=t! zXvLy*I7A;4gHZ8|t$5%mp$i+Jz6|AJd!SCJF7x zw^&1&6E0HE2~IFN${3a_&A7p5hZ$k*CQ4y6t^bnw52tB$f2!l6&#%Mwc4}k;i7hXw z>nLdW*Q}0Uu*vLTedvbMC@7J*k$aUD@5l8)J_iPMeUPJaK0Lb;5;1c*k4$UM9Zhp~ zl9h7^owmZ2bjwKC13Kx+BnM>cZ?OmTq2`$H{)fS%hFFMPw^AH~ZEW9YLGcH0@^cJ4 ziz75*af9J{2j12@Wu8s4q2q;HYw-5ZO6z#@Y-|8oN`~=z(u5U2agR)4?8lp?Okv!O zC$qOglx+Ka_NUMBn~+$C@m6wBq)cIN&6&d7u}FX|5oPUn?5dDb-&q$OFyG;ObkNwI zFnwF%0cw^vFZ>#ng%B`ZA=)F^)U+18eENPCq`2Ikou=(mdx>`1E%8qB6xK&b^m%FRoE@UQXKPXAAQb!60XaXMh%!aPxP_d>@HjNJLER1$C6S{SR~_@Do8!0|)n^gn_~ z!nVo8O}?o_Scq3#O(fyUKiN!*9PfVCHnH0MWPY*Q(*6XCz2k9)DN_;VF|>h_{iyYN z{-lJCySCyK^tL6>*6i9b3whTH^psPA1ugV4&N1b{E`g?JGn7qAwx)4ED?$HpX8vKI zM0UQ{H51d@b29t()Yi(|1JNKi#=qJD%%%p-)$( zyiMyww?ixnGvYg#4!(F_0))A^6FhQaf|QS-dFX+}#ZZz@rCei+&UXOShw&-^O{j5` zNwHBCCG5wIC*pytn|fsCEUNaK2(9;J01v`2$d6*?6d;ZTzR0ef*ww&;zTBB_NemwI zFzsz{6T>96*u((e(GHnC$qI+t4sKKxdb5K+Zad?&U4jaef7rqljg1sJKw! zs|>*!n?gN><6Q6)6~bI*P~*e;xb&%#brC5WXIK09FmSY!V35muz-WmG17HwdB4<|3 zx|ncucjgpZS|AqO^v%Bq6i15U+CqQr`Q;z_t*hx(qVMX5Q_7+Aggxt~a*bUb(Cbp$ zbeonF5=Mapdck`@9_fzA-56)3q$0YJ<9av_CEJmMGwvDXAi?qf-;Zs z1rLY`9_Np3r6u;*xlA`z4d=t@p-}DU8ezmT8bFe{?ndu0dT*=B0yD#<0Q`b{Ba# zisoF-89W3sL)7>A=yp^~pF)25C29h0p1(G)4l2%#nvr7}-7_MSck>D#0~d;U7m+%w zz&t?mDW2{dBB$6_a;#u?wMfL1aeZNU5Bs0~_sAJyIt;Bs7T;o@#q{?EvS&?N&4!15 z*QDZ<&}gjdf=5T$rI0pkdj?vn>m?NGW5t@}Ii3ElHT00zK=i$wPX^QgXT{DH^0_zT zTdAeIEf%{fAwmvkfZHemNlSa{L8kc64QGg6X__hz${~vB&qVA;RC-r;5M7^2p$98< z{W2=;r%KruZlyV+Ka%3-2xr$ICykNf51CJkJ^%migKjWm2oOay#@9c~1N}N-+S4y z-%6Wd0v&6Ppi6T|)suhPt9pym(f|$vIL?x>`zN{gavek&8!)-t@E`yAzxv|CpZcwT z_~qi0DpNk%aYQGoj7bi;>^!N{M>|gHbVCcm8cc9NXFqb<-UjjZn_olXls?0Zoq+^w zXC~(0I~X5fOPu71h~YvH(C}SQRz}f#R(x-`?)y*ASGp53SD7Q8+!+URGW?Is%Q()H zbM03>Q*)Ivg{NwkpPU!zBA*B9dyn&^`S#_a z$wlFn_T{2v*YI*l8@0jckv(H=n&Uj958Ts6!3aKC7oVK`Mz0!vtk<5zn$kCbzLkW& zaY7#(AJ_^M`rT=*(9cKa zz4nyWd{inkS>SQ#X_a0kv{EV`w2BxBv=Zx754%%ZX<{H<5WEu=P`vK9wJ(}n6y_k- z)byfc*YI*l(Q1RyBYTEW0Z+y+eW{v0Iht(ptXcDXtKT4Y zJO6Iq|MDoE8F{Gr>A(HY4*Pn;&kr{*{)Z( zJ{g}h=e#&_>U=7HiAG1Asp;o@KWu(GF6p!L`7?OFO%HM>U-6Sc^Pl3v^ZtqEtKNU= zAMyw6*}@s_r+=~#6W{LHn2<8gqh^}rO&wRzF@14Jh@>|^I?6YHXEeErBGvH(!Y&6M zu%CXqR4e5!n-7y86$QNbH^~5S6jPZYE?p z&BvOv>8KfHpM0XwreuDj#+cslBv9=Wx7Uh#VQZ#Uo3U!5*GfI3JUAL?FWwqH_Lz!SHhy`q|=qioM@qyyAY^$1BCrl}g!728OwieRng zD;~s^V01dgKHZDR>ZKWUZS@sB<<+r*otI7T!vxx1U;JV?&zs6$2BJK{?_hSOLiqevV;B^w+!6Shp9{rro>XxGgxQ;4cmvwS&GGK8@D5fNw%e z-477bh(5)5};=!YIkb+-fH!d%}Je+i4y4avZ;46gY) z83Z1+?tb%V+s*lg!?&X|y2fs&Au9n~Pe+GWU5(_|17wnmh*5&Vz!yL4+^6VV3^7V9 z4Y87}BH)t|azr35Tb5O2Pb_0E*AT-4WVT7K&W>PLgoTgE%*J^8)9-Wn)vXjGun_*5 zC2*{D;GiiH+Oz)p)A>YA0pa|RpV7uUsa3@k1 z;0gC?JKUqh65Q!K0LQcIGM(OnP9C&HTY7>|IRg@BM{0c}oY`7vY36ib+re8fa+^~> zi?nu6U1!Xq>ngI)TG)iyP9-=Mpyb>{2_JY5lYXRrkZJSAx}Wk_?r~sEY*c|cz>_F^ zrmG~h8W=kvcrs{{N^HiZ6Q-w*KX@lQPl`2madesdwE%;~J$Q;@@-JVQB z%7`RBl>e%0mdN=$w{$;bv{!8HwWmyYBm<`n66mM088Sl%gvj9U6T`dUEUvoK=SSg} zstvl&u_G+XHqxS8TO{ zi^)p?oYon9_^fFe(H}CiCv%fq@eGmzLHC@%LJhfuvodj}=uAkwWlC!9yPN6yarx0- zxic}*3qa9~oxrOCJlws4Td0SYoh3ymk|ZToku0+!=^95UfSmpemBSa5eNa@2p3!iS zymZGj`qDZLIbzHa?HmNl_>r@ImlR}FoS9ltr>fJHmxWt&DZb(E)No#=XI~wpZic3d z^Hj4Tbs{W?)P?1$_3_4Ga!6*5GaIzkv{eU^coRs9ZF(wT#NlJB!Jg0`0`EBI0(;d-MTY90aI{|4Cb)q{ETXQLc6%(Ks+juzgW zZEqeNIDqu_`S#)Y_U48BwnZmaoQ2&+x5%im(T{8z(J05n{<@~3lE`LstWC!ufd=PR#L)%MgLF~FB&hEl^Tu{H%6 zbH7*TWum-_-iJDOgaam>M?8GKy@_PFa1P)Pgg{|J#5n+*5%m-ubuu^t=sTA7cn}G6 zxOT@9QtM9GTPa1~wE(}(XDSC1a;%J(MDsBRGm0V;Ym|)SQu!&l8h4WCL+w}sb1{~d zTIzzdw-vUMV}35i6!b&N;R}ojZrY7WgSjggu)J`&SbWH^$iPnRWpH1py>hv|G;LD3 zm?Rf&4va%!J1PXf(ed{Fm_(fD54UQvbrUY7c6CG3X@9iNQo& zr^)!7n>ba?0wbTQl6;2)qVO5Yu;U~_bh2Iu{>|IzNE(m}-kKoVeL+@pp6@6(-@HA9 zKOtwFKu8$>E9`!Rd+e1-dehVXHt(mYC9NS&o4?1S{vv-hW>S~D+F@lL_hQEzpU+QT z=$<^IZ5(#Njjr-J9Vq#1ya#v9xsBF5%{gk7#806YegB{gKQE(?3!JuW8t#e)=aUku|E$^rJi=Zl&bHdKvRy`GAIVRrNjOh11FK z0SxFrVfWAI1nG!}y83e8i@ykcCm?6c8T^VaX2b9yh`L;RpD)k+)KDZL_G_Vl0JewXDs;{Th<4_P&cSApI zi%LKu^TxVJfo)xM$U&q&IUs@+S)Tiy5$>!~cNTF{16Q^d|C-=@M1CX+Pk!VoWvxNW z!uVl`a1SK`I$F;N9M;el+F&dbHY=VQzxWq$Vb*ZAcdv17oAj!40Tu(8`lRVC%Agk5 zOxuU$%sB<$vbm*vYcVEi4tLe((6IS>JX7`Si=P1m8*+t>`Y5VInN-KsSjTf+t15_C z=dm0|0L(pbES9bKuVBXyy~`=4yY*bwt1)7*IapZCr(0ooavMjTV16YV5aOVqx+qU5RnlH-;-0cpg$~a(D{yHS4qQ}Uiq14RHNb54z9%x&+x`!EzTp&?pNWu`k zDH>%E!G4odx~pS;*OARK!SW_?u*p*2ujkJKP}q;N09+``lYBX|!Y zConssZ}rBgeM*!uIZU>fuWvq#`X>~4E zN9Un7*A;?)$~ANU9TgUFj7l8F@99TF$#uqAf__;dhQZ`>Lf3NGFO18fE4uL4(Juaq z#4P67Rd6>RE<9+Nzm|o@2C^?#Y(3x7MY73ef79WUtA zr4BZRL*T^2rA+Y2(@(B{t3A%&QMq@;K^EIUJJ=)HHg3QdGJ8B;L2QtnhU>C-D4Z|OimU4-4f{s9hiFCzU z^E?F-OwpbWV^7v;+zNmHrVprU2jGG~}Jn z6w%TJ53NF_5NM}oMElV8ymkCR)Ipa}LKYBCMJJVRLnfJ~vy&?c`sOhqA8O|)G4bDD zsaDdOqo;aASemorW&H3?v|x3wklsy36l+4b8PfzpEgLX_=4L4}iffc2)fnTTe;=%( zM*{$e$PUiPi5Q_UCE!U03QZnvMz`T==)uW6L?<4@8&&v=xv8LG7!$bw;oxxrAn+lW zeUeCg8vJw!$7RST;Zv?R8c@78Lrq!YWQG(|ba=z*%-pQBZ^#;c>67mE>GzJeI7%#T zkUW2b?Vdl9V4kbQ!2Q{{lYP!!adV?3RNwdZqs zPH*QP2>utYcVqfQ@3NwUJ9?m#GrW_1U(G7P7ywM3$qc03GiB${sU$p;$@nF^R&1U+ zMeQy_epRjvIevv)78RE2ck2fz(XC0_p@CU&iyaV+!@i+`V?{xS*sx3TIJQ^CP3?(A zh)%YvgC906lOYa0y7?0l2tgb?d6iP;`)CW0mL$?RHjfz;5R-}ihue~Ca$CX%PQjob z$|E?-H6A>uo`9){z-T^GwE@*Vn67?%PxHVj;S!Pa0%9l|7OB&t&N_$kS;;>|kk*0b zNF>R|^Ma*(gQCjNPvt=DATz!JRgq zjiWrdF&>SL{u%2-4r#CvRktuKtN-c*QXK3$df)>whJ##E|jK)VlJ=GE5&xNTZ574 zLJbdZP|4oAk7@&(otu@ft=ScA554*Z^>5+E2~D&H&lr&P6{@*;flQ62VsyES$v^={ zAdjzEN2Kd0-5ATNaFQ*DB_XkWK2D}apEa<6IbX#(j%MgCgRd^>Dav8kPc8q(7JN6Q zf`8YnxEP8Zu*3@<`f~bxOKX=0!tB?O ztOH_fds^czU_q3m6A`fy07_eNBEU^JWd)GK(xiSsz_+%iX%O}~LFD=ar6EQTG!PUp z{n*+!XOcjWNfP5^L{yN3Y78F_bjZ19fG<4ZvO}X!IfQ9D3V~p-9e7=eeH|Z(n>)K3)_jBGASMcC!UGUldwPx2LS99 zI2k0IEWePLc?nJc5BnsPD5expI@}UO>dsfULXSEEIshTP00 z^uKF4#}8^VZ6=bLQ_eQm-h_)r20O!i%%MGG1(MUw2EF46J^J%_i{>H;>#$%$ zGb`?ny{~J0u0`on$QJ)hSk-tvKGen~>DLKx5G%$PY(@%jq`4J*GtI40=X>GwqnKCW zduiv@Zcod5Qv0+nbHKxL&+H28{}AUQWe>|fe_w5s61fu?mmWGeNS|od)r9(+=9>(Q z*B?Q5M73ALFx`eu0G?jM&~ZB81PDUl&}oTKZl}Nj=t9Hc8!4_kh?mpvOHm9Lu5C40 z;Hxc%utw&AEoYwbjzt?pKA1!JW)cYy^fT49b|oahF2;AQv-#&(@s9zbjx7QyrqrN; z;7BH@!N|J1@#5u&|FWIYjuzlbw%K$M=oZvTCRCLCVcoWpu&4n9A!{8Ke#jw6dR(Mk55{qXY^p!qV+R!Oy|sgr<{83gn#0X2M$!B_ z(gC{Df#wLH8&r+yC-ByIAO~PpYltYHd*{FmR3~&ng;S1V;lVx3$6mO-(AxCzgiw+V zi7zAS+U5bHhaxo}uijp)2*6)}J}(hEz~$qmFy8S}S0`G&FR$QbD#3v=JnZ@KQ1_6n z%{;7pc+hHym;5InY5IvW{UDZ_o4)Vq_J!ULe1945EoXtD5A1aNVB~{K1A$wS4l%KY zq(TxlF+go}E}bDQk&r^6M|Fm>c}AR29Lw6W2pZslQ2Gqa%3lf7Kz{nSJa7cEn9gxO z8pUM2eUCT-z-SoLA9V_V1!f|*@k!EO&qUnZUhUFJrtF6_rL~hO{}p%%`k3NjsV}hl z{z3rZU4_}dtp{--oMs0gJv^<=sfzs?NF4XiA4px9Z>fG>UUM1G4^IE)>`nEm{s(%# z3Vp>XacG?v9WEBKEaVwqt1$Y} zv0*k0Rj6~k7~R=L1Ba%cbcAAIRozE+(6h!)v~Y~qa+P;I1FBQiSXjiU5}cqXuC+lZ>y z+qNqxV+n{b!xJQ3D2lfgp%27K++?Yo5==ZGps65(e{Yh3S6uF@BHWGAtdRgG#Iq$x zw@IdkF$ZIruwhmUyxwu(Mi!3w;KZEcYqhZqOyUXZxodG8jdck>)=thY<>`PJE%kOq z9qebVuIno!y?lKMNSOZ3hv)n6oKFyvB!xIZe{VR|!uG!V=U1?h@7fCm0gs|oat2f@ zxTV%OP+*S|v4F8sU%^s-@52=GyWWZ5r+*c|m>y!ejrh#HbG>?U60l89-c5-F#DM-t zUO6H!&Sf8-kMts#g>rn7k1(nI?a1>OIZPor7$`$$vH!X88=Ms7ESA-{QF8F0n(a?t zAWHB_94mS=cC%WfXI6U#Y)QK1_q}?*U-jxkzT;yS_tMAY?qxO4kCAgoruO;36!`HR zXZ*2(bMMmkLsRL;a~5EZ6{Ge!6&L^z7oLyX=VMR&is$SfJyxu=&sVN57`fk*i1}Et z+CE>szQ8-@b0qPxLe$2f7=}RRIdEW$XZw83bL!&xn$OqU=j+!O>*+bE#E%sl?emT6 z3ou|k8$RD`pKo4Y5dY!xP1Gk&MouULmZFSlkx=Gu)vJp^)%I8UffNP<7)x4A9;zIs zyI7r+_y+abO+jTGsZej?K8Xc)$)A-Mi_h0(-YcG5F=+k}M#Z_SWjoo%m(x5%t?Fk8 z+rrgDAJd{R)AWl2x!Tlk0pH3AI>-4p?DzyGFgMr>#{Y+9m%V0%DSL6|X|)>Hx|3vo zB6axH(u_ihiwRw)2|cUHgiSJrwmx(I$+-M@OWp;%oQnSW*ykhnA1xW zZhnc3K-aByFq1s$$dmn2Ci|{Qd*$*ppLo=+tpe$F6sV28O9TS0FdFBI`x(`GePx>P zlM|L$n($_dSq8za=rpb6X)x3JlJ+;~TTsU&(+Mn_ z0EA2z8!AYUhvJqK+!K}5YqE6Z9h5T2!9sAzE?DTIFy|-rn{K%5fq8wy*NXcWg63nh zS^cJmfr&yBVhT;@scW~Lo|neC(h#b2KhL~sQVDZl@I3A9&VCP7{n^Ds_0Qlh)F zeV;rYRCyvOKh18l+)$u>zE8ie+}`i&`r(EY`ExiW9GX<)pnv5~{9dS9K3WyX&H%!} z^o_-Dl@;9|e&3Nfws(v=2xW^37`;&F)mtez%5-}XQE?!=JV^(fhPIz{z>ClulhTW& zq>@BD7W$w1)!1DjVAx$URUj>?gIdgJoUsi4A+Q$KHjD|a5nBcu0HGdw`$s@aw%`WY zcmqWAZf`dZUFmC)eGeDh0w1tGm7;NT9Y+8liWkkZ^c2m1L>nb+#H8^%0gfy~`8&RCW0Q19S&N?gZA`2T+k?RCFb#7#7M^DN?N+hiL2PWV*oKbKX|i zLGYp>63-eU5k}2N_8v2*SDevSI@&zh+Dd#cgnQa?xCPL=pN^gUOFjve`s})8r8uDt zK#4W&{A~5(INFZ27G=F{D06`b6WaOrfpjo$MqX^d(fsZ$BM)cc8eL2-l=Q+;$JrM= zd_Uj=zwcvxjt<2hnPtqiXln`MRnfLLod9ey!+~q3(Pe3Alzo<~6_#VS}Dz8nPDdeOQDfpY}eCOtNWuA2ww=ALm}l6gw7< zHN8J9UJe>bkK|2o8VUp+{WIm82wF<$WO^=~0RWXAvV$R?zngb3@C=t_EGlTdEh0nC z>MM${mUhhY0Zr%Zld$1-8&))mS{;TUBv^%&4#BgsQ++7<7*mj8rXIeIuBfHaBXzkH zt8%XE(V}4p1y__~OHK%F>zFv1*mieWUj^UjacsE)lE~d_ErsDxSYiy)Sz-=LPUSvr zfR^h38JDY*+hNH|6s9ywWd|j?fu)vP@oT*Wv zm4rhK_ozd6C|s|R8fiUP+n7zRdfXmp5oVDTbor}h>1cy4`>(ph6RbQO3=rtv%R8Na z438f6zeJFbcv!d4Rjl$5@|gbF$pcILz07{;G*b3MF8ijz2uO!U-G8G7M8)b#z@=N- z!O?+ZiAl$fnzXbNOf>vuEa&G|Uu}y{UCpqP($Y?q{4RG>7fU;NFHYU#1KJ0!ky(hj z7ZOvhDW=&mtj|%lFu~1cwX_-qft$hBsFE42r!3pl4_} zDavapHX=aCQc zWsV7Yz>hAtdNXXf-d0qoOD$+^c|7DE0D$YO$O5<$Y^B~Tflgc<8J!&tVO{DVO? z?pQ#_$C>qg=P*&KH^}>q)RdlCYr?SuovSb6`Nxxh-xD5{<~PdzihL;?YUO?Q6npMSYWn`>7=I{XeOP3Omk^viCDIn z_9#1QS>u-9F#Th?2T)`5be>=m6?xtJQo-f^J##~f&ie_kGF6?#ZJ&`^$c542T|kft!XrGdgF z(V3E#HvV=2M%@^7MXaYo!RKX0& z=DVQFwl~gt;FC;-J$jYO`?_ml@u;GkZS~Os#+!O;o9%9e<*}Dkvqvk7%6E?)XXmLF zgV0eZVE9FsW(>p-&~2y9JYkt)9@01Y;6qM)+w+eU005?rv?Y)REBU2|eNDMCKz6g=Pi+$nB`E_{NJm4?4&w$}$sfLWCQy z!A$1T_b0PUMf!sCF7Xy5zt(3j=H1z)d6%t`U>Do0&nnM5g1WFiSf=dn7Cv3fL+E$U z4CyxOgZxKO*fS_;={~ejlL8T@OYq{e!`VfA27@^d&#o^@GKlUWgCam;9SDi56SIAw zLL&h6m5Xl9v=9mwDUO$qcTUowE7JVv;|GUN^>IQ^vE@niZz{QnFE`Aor$%V(xCEThxkAJV8-ZbBDlc^p*YGz1eDwDLx zg2K$AD($5}%u1&iFGbp|r|=7eQ7cPd!vu4k_4vuC8AJGVScS*uYfY!uA@ts34w9>? zcLLpzgu4X}^P?CZq0*CPpAlP~vVUozt>x<(MRupijd&6<}x`iOGy~(8B zAM^yBG0?W&?IZ#ppsUiz5+*wh9e@fZ0J8+9-I!d$-dX|^J7>0IFH@oPx0t4SL-LCt z&p$)r?1mH?**9cJ+X)hHZc@?qBuLj7JO#2LUS_SBB$v{ABzyr2ag#NfY0Tw_s<#Y5 zAI4H{J}0q}Ws#nbmxn?{H~XtkdBF0`$g2s3-6gsYNsZX3x`-=5X_rnv(%IAOk!+tB3B1I#`vl zGA(6${5`q|2x$X9((I`gT)YBe^e@M4uL4VsV+hfQXpD+7Uob{L+7R4_yHDDPlaYZ; zr@9DwzL_SJtf{>vOypfIMzpnWv#gjW~weFt;mRTT=LzjjxZb7Bn7HJ{; zHCqTq*D*8=Ix^h3`#e1R;nr|kO&*@XR`N1!>{7^1{6k5{png>(=AnX&VBQ@|wAr`0 zqdB@1n&-_5Kw}aSh_Nv?atfF_As({<()GX9n6jyN_NQKT5npD-v}50`b`g9%CkaJs z?>vAC+ayu+z%osVAxWR7_LX*7g64%+IeTo6-mg?(qki+^uOf0u(mtAWk4`_e;}LmG z{HpXTGa^&)(|j}i+-UNzdpb9Y>EDA_E&poT!&Lp^>=g&;Y8ThM zUA0S#965k}adf%X`0|awwy;FhHTk`AX;W7kb-}1bqd*-4)KQQB%3kd1pcv1iXFrlg z;m!r2sfzR3@aw%c{AhL=etkyzS%o8wZbztg77u~rc8qpEc`be>KUpQZ?WzItnKCj$ zq@*2#?(<*S&x77Yxj!gySk|BILAgPDLicr1RR6Uh5)O?8MSa~6$^DxCFc?Hj=Q^4E zoeZPDV5zo$h%REI-TwNxoE5@SH-K409y5ebC4wUs*- zm0EJ~s}u*f4sN5rwyOkNAT>f&NYSVmr8hAg$CbaF_Y>1W6Ig(#pFzY!Hkb+%d!)8N zrlIyHQa9?>bA*eh3N9gkLB5sBx5@AI%JI@^0*P?n8${T~i2U;o~MWp*$l1C;`rdu_sk)#lcB{1rx3v}yF?qXm4p!wLHI))mS zf#~(mYkG$-v3G-zbWshfG2Uln-bx*1bTKyM+_rEF)LySAH%L7fwYnicO``H$;WVpal0_(H*UiR-3n+vTXJQlWLpq5Ln+@~O#8;>zZFbz` z$?#V(d9W(UT9F&b$+k?j&m)s75g!RX^*ef^4hA|KEE*<&1l`kR04+KkM6?*n8IMf| zpuZmCiVY!p;kjow2m>hss;dqLpCJF`Y+kF$xzlCy8tUE$0kp8XoYISII?NtMreR7Z zf^f=9TZSMcDkDJ=DmMU?Tl z4bJEpZs`4Aj$CAECuqQE*ujYQ^D>FuqtI%ADQ#7Z^e7lnf^~(;xIsZmm=+Oy3I=y! z+h=iv8)_bYR1KD#L(I({fpOu22Tir#UWCMIeY|}gr3K3@Huza&LFH7 zEtARb_X6xdgNMLX4s8pE0SiTs5I+xC6gCY$F5g@|@0ohUWwp@pkJjZ0*uEQy#r!ORc_bw8HxBF{u} zGL1Mu!bVvHgP&Vpd^d2HS0&n+05#D9y?fZEq?lqrR9(j&4jfgqLE54$;jczV@7+ph zkTue8Tx0=Dr_4$!$?SuoJM8(`|7U7CTPR!}0%McoF6^ybVt zY7b`e;hL4M0QelgpdQC)eohhvM$1YN;TGUcrzU7*?Z2LY)#9X-QL}kPi+z=LAW>AG zRnVwDz=n5v7-;mn*sQ1Ephkw%p%JPOjnHCRXA>J({Gt)m-o|k9NP;IiR2 zXrS)X52!h9`w{&YA{8=ZNh$;v#T4hhB^4P!CY4?y6-iR}?tS$HQc+y6R<}$leP>T5 z6`0|IRMNc7q@s$nL@IqrC6B0^>G+f`NGfVNVrQ9F`rBxwzo3=L`F-WZt_+;lD{#2r z1iMy0gm!O;*sD^Up2k@}(g0A6tkdN{Q!=aZ0&W4@AglSNS4d}=hRU}`03T=9!}k+u zFbg+>b*v|Hnv)*jrnD-KvbjHTY6&Wm`|GNgXt=IPGHi|lu3#S|j)P(CVw!R?+h_k($hH)zTo24+6BKucoDc4WQn6lpOZn|g1Gyicu5Ouu)Vf%cfsEj5qlQLPR}gfe3CTNC3s8MpZ8f(?BM1 z0&JQO%{8I#t)+EB`eO7b7n}~RNnm80nEqtx6SwU9LeOxH)fZy$U`KSKsA1!`9wdpJ zuuwHtLym~EqTZ)iPjv(lN9=V#VLxin-|N7+1DK)5+=6bGmLimSMsc8 z4jKKPqr;Q{v9vyRFVVcu*XI1R_YMkxGl05(+d)29OXEY+Nr)}x7d6OBPyyaSGzM~J zYJC>F6d+Q-syj=zU{!d1B{N8PHV&FS?q52vis~ftJhM{~0(^xM#K*41QG7zGM^kVF z6$@DTuOosjayl?wlsLKZoGS3ZtCLB16wRmqQ7gKGnsb4%GD+%G2hKGqR3~hcWPfS& z@4lw2FOqf%#GyeTL4?O^Q#H=@plYGDpy^ns5WX&8`3oPMM-%i?=oS7MS+wFyZXiwc37c7-dG;U%=pdQ>xt+`oPN>lLfRI9Ae1`D6vul(7>iL-^W%H_Zu z^&2kep92VaQHqC46|q0vil=f$-jct=Ne5q2p~2=Q@t6@?`Ac2p9FEt1{z~_`cI|0@na{a8E?;1>%QKa+@KFI5 zQi$UjnFLB?Pa)`ZPnzH`=Fie;7$1n@l9p0RbQ)JCe{FxcPYs8CCK3BUBjA{r0_}#@ znbBMmo&a{zkPzaU$SLMm$YF**mZjkY!|Mj4Uq@8;g01!IbpVxBjPHgbrlpA2BbT07d%a$hGHFm$_1s>@Pl+QJ|sriIki)hh}SBSJYSb z`d0S>gHInuxd~jrSfK@Z^?(Di8NVlBhViI>F+6-iO8(#_MLls$=)3BF_(;V?SP}dZ zP6`jg6!Azbz?EMmzbUmRaJ5ulN%aPcl@T-66ZN_ovEHO*V0rc8@PH)D2Z8*6J3@)^ zi&`!%Y8Cu*`ap-~dVixyzpTT>Au@Qg33X}NHOQ%5ZpX3yZmP5~cY+?rp=1qdl>%KkDnY}sclhgEyYOlB@@htxUxaBIFDeLi z@uK~_x9zE3J>3LOka?k;H_bI%1D3BJeP|Gnv2QWkiIz&OL$>;0^dL_E5VnFWN?)tC zNWz>&u)Ey$0`r0N6mVb|axyWYUpQdE+K_2;++pgO1GpM>PvKcHOBpt)+y_Gw3Pr|= zqi{D7Z0=xs&T7uz{MzWwn1>Zar;-B=FifgTc)`7PGNC5TZW?P}RNG%14{&P;m)l>Y zJ*;yG#)_Z~0n`($;j6oe5>6i#C|jF3y&WsR5>d?x`V}I90tsQcGn7*hLnq6tJjvmJ zr9ljs$}dJqGMNU9oZADc9AEz3b4BwV&7;4EXp0cY?Fih4h&7ZCvG2wcCI=Do&ZcNJ zb6@UFRNYq-N!A=W9hmn#iutrArV3{h>S)ZTef55F00qVf#}_1yWcw_dg1YKB6Ag(I z(+Rjy;T&zhn@+&<1lU^4CEzBEP@)nc#$3uUf;G2uY2;j5G`edpWkBaj+PP#s2?K5I zd6LofZ7sQs~UggHUu`SX&^=#BUjA;)@XKgnx+y^&%?w4+c)T5PB{p zLd!3LE0#QB*%Fwlm=+DJ0g04^A9G32R6e{~eJ}_zFzS?H(zu}kz0P^m8W>G!4QNf4 zVFFRc0BlxC#$3p#VzfWvU-jF_A0~VA%9kLn6nRUp(pfhD_B?cVb@M66FVS7qOq%EX z71}C04YoI5IO zDoh>?$k-hm`{KM{PMF>pZQ6_PY<-Tda)^5_5VVgl((x>*l>{$}SvyeA;z4j1%=KEO zJKEyvqL{zOGdsaeq!01FM|QL1hVG$*JHpJ#(Xbd9Tg{o*z`8v(5JL-MOs zV*!G8OvCySk|K7^Ofk+U`Sg>fI@##;PQBX$2*RzT0^l%?nL>)DBx6Drz=5PsM1l|T z3<{hO7lqh4EW_klqsPa%npd7^hs0yP3Ho!U@^ef}Tp-qr<+Y?`m&uEezD;Xz;Z-gJ zuvNx=%2ynZz|j~ytt`Bv#jBB9bMw)s}sDkB`WTHorFG4TypB;Z z7g|9xzU?txLZQeJjcRI%Qgul zAON7q*&vxRNHIK*(ae%-(&Les2H7>4j3vINU3-l6=Pt|*%{qLLoY#!IoOy0UJ!{R`I4ESD5CV}ca=0iBrbD`}30_gkHa zKEbtjc?#F`6s}=UlbkB->9yqjMoA?*O2sk*Qy$+EH2^}CBf-)-2@Tgh3^I_cH6}Ck zyXySdq9rZ|00=@-32gu_}7=48Y$fwc@*DX2*5RmF9Bgtxmfnz=>{}?g2U+?Rf zi~FyS_(CfUh_>mt1Tu(ai(Am%xZW?q!Uwt4u8vg4p_yX04|2t+k644$=bLZX2boJR z75ww?K`N#ZhzhiY14!jy;StC6Ek8H+q0=N}G(1(aKzzemYs%w694~ti$G5DbYgqA; z2Qh=~wLFOVv+O~{O(4xc57G~RTKai)41%T7B+fd5Uu*ikOY zy>l?YykdXB-Ut7GqDN{$nsbb zCtE@1FQ9uniCkRt`fO~Z8BG6M7P**xJ@U6w(eq)B@Vbjo2x$uQaG4o^Hm4AD`FNFY zO!Xk5fZc0El$rxImr!n_Wtc!f#)!KqZy-ZtMp`wCUvRdx?hm6^ebTB|GbjB3zM@kp z2iR}TACV-4ltIit|1$Y_GLKh$TB z)a&$ld5hrAv3C?y%5*P^r58SqBcr0^*3w{5ytfU87N6ZVpsx%m!_zokelq#5h>S|z zI8wXaUa}((VFlzr2+N>*TetC)D^obu2DuGQ8m&kS#yj?MfK}wv3_lH+18I|AKU`gs zlA4^tB{@Lr3w?Nv)*`~eQJX$*`Y`^j&^#P&9Cz4b8bL^U{(w0J5P+PsSr3jCKVr}B zNa1<-G%cbY2W(S>9!C)ZG4vipE5sdZWR|vLp@=_3YaJavsB4XLc=-DufBVxjP@KHFMdNifeg1yS|s}Q#cz7W*nO5-mC(=FdqDk^zp*vWc?Azo zdIjuHc*PWX+$-)fN9&1OXJAl|ct5$eI-B1;SP9z;{R{e?Ulg*eS6@VELg-4-+Vc^O z>gnfmf@SDp3o;lIAzAbUy9%(lD=9>eU<_!IG|aCb)zjiaGasdyGViCwC1-tFSqhXz zCCUR=mQ=Fx$`W5`v!|9ra5JbhxeN)T2VLu6=URBCaA;m|J?iCj4}-jxqpIUM$iKFF zG2O3md!AcJbB0&7IS(TpqFt_}^@53p{^Fm0B8jt7)Giv0TapT$Cf;z%9S#=A z$D$E+!%r3=d^(1hxJb1@ssP7Ndo-%sl@^S>5mZ6+I%CIe`;i`&gr6=&{92cs$&5m!zX{d%gGvd|PIf}$2(3!k36EBXt5#dSpC z(mT^c*yYHk0FubrTInNO%U!1zEOId54f=$^;hDI-J8#vp=AkvhZxnG$<6!^4-<5a9 zIN~KUEjSY6AO^(t_RExlI96jE#MQu$+9B8od>~u~tM&foxqpIr?Xp_EF4x)BZcq4m z2ncHq0&i!d$qt{disNWBJPawjZ&u24&i8$+$HJ4WYIUhuma3M1xhvqD%aqY2DsRqp zi?H%)jQQ(}Lta#!S@d#QD@Y;}NG6vQu z9;-E5t&T%hDFP6ZNlIdv24EtQ*qS(D>B&owTh)=+YJe!-^cHvtnuSM8Uvw2_xu7p| zs4RELBSz`Z7z{;*TI{uFJ8(#c3w*`M_NVEVNN+1+(C8J&mP1H1_SU&DGIM_X0!OxO zI`MS;1V{p0V~CPT0%01moTzrQ-jcNt6~cE`NEQ2bl);a z4lzp3SWi=d1EB|SZ;X6H8Y0ZhfM}YPg7Okfl}JXMUi6nC84Sgsl*CXHBrgdHpH(P% zVdyefQ!i?oFTv+3U}V#RHg*SZ3otAt?R-q*dhW|A>83k zh}faVh1m7wPThD=9C}dB?!K)H9J08szh>vQK__D9du`{k_iz)+AP(#q=74%QM=P*`F&G#{HCwGKj%HWBm zDj%z67xk8uAo{Ti=;?yt7wUDy?O`O4t%MqMqj7Tp?`*H$U|4vy>d9;^KnwF?TFS#1 z7!aOa1}X$~66lwCS<+7^X@e0+|jRzbjZMfsVSz&jFV}w*w^kLBR+$4hly1W znIE1w>)OlIr}AWE29nce`YDHdRbTE0gp(RZy`KT8D8+&kIKLHjcRzLe47n_CbNz_v z#V#2rh|bp+C%VaR#EpC@`!<>mf%fP=IOxm^ga{`-+81SLN2pdPk4@ zpe+;~p`E^^`>f+|mal-(VX5&lUtxgg3P6L&nXm)O(oT1(Q^lCCgoa5?E8;4qpMczK z>oD#I3rfocQWd5+Nw9MEhy4ugVQXkI%tPmYC}d*V*`%!hjEfOT?yajY{)aj7Q- z+B11%9F&Ji4wKUt3Pt$ip9E)aK$^2O22d$J3P{2C3JqdY!zDeuc_ETSQxCah5+>7< zJ5OR6pKF}v$F)u$&)Px!=RK2&vx%cQ%oC1HWssPXEDm6{GaU}>8y1?7 z;YEEKb6kO{+zd+?OCNVmHeQ=2!(Oh7_~<5(0eLYo6E6%9ovTn8!pN6rd@eHqqD#rj z@VSrOP(Sc6^M~bXcu51|xvg%|nFO2+WuQ;+lvu_)i{0B)acqd&_Ii;q4Jxn4cQ6x} zSx8Vx96D&ok2i01ZPf}Sp z^rCFc^|oH#Eb7gCV9$5pUmmf?JBEisJ?}+83dHH}hn#D_uR*~G)2~=mCJsVkho%5P zLaP~1!m0;+Smky!jB|cM-u`?_ir2HTH$EHO>4DQ5$&?#0tA^iyx|{p*jMM %uu_ zujt(-Uw*mc3q@LKD{eSVz$NS1Dy?(_qH|Ry(Oe33b2h?v!=Ht}C;VCZeOLo)=i`Gh zV-*zb6TJbHqsB);w5$byid$%uyZ9^%&r0NG0C5^|gilAgR9ACqfUIYy4^T|I`fwh^ z&5!(*YOBkXyK)%2G1*Eh4sFd}noKMrH(N~|&Na=18xPun*qyPk+?VeFS~yX0ef?}D zT@gz{Y!~qHextXtG6B~>V2v$7T&D8~KoKN-5sOevR(BilsGhUv0?K%a1m<#ByJSXf z>0dD2Ri#1^>%2rc(GVN!4uJ&hD#8`v)jS$EM`S=mJNS6(4wC(9_M(hp9?H;AfuTws z5b?;#lg2Ec9Qd{x2%O>W$24wzZ$eSoW^9UmYu_HbOBj9IXU!Tvf+MN64{HrC2jHpCxy-L*)QvBrwDfWO=db_bPO{91VkC7)fMotf_~$ z-lcHhmxo~C3;9pm)IwJ(`BjVkio|RCJRc#Te+P=QGybM?vp|xU}J&zK_jC7g5?h5 zHX3!`YY;e44)jFENtJ+he9v7dK$_AZ78*c9;b~TIFbf!YgrXsEP@aaOqb9z#NWgX< zdPE6l&p4i0D8+XR&p1?wG9e3x>hfTTZV|*rD z)|{Y;CSsjPuI2P&pXP#JZS15ACR0KGGF@ObT#zovJ(l?udx%=PC|?g3fZt z01u%VvRG8z*94gz!CK?11NbP})5J4EpWgK7d)s(JC53B-7ud#iPfE}G% zP%Yz_ap2};wgE~Be4&VT{{F5)GB;WYRwS1#bNgEIQZM7!0LF6Pj2>t*1SOC0K~fD_ z3aLJkO5`-YB=Zr9*O&Nu+=@8V|LcpXxI=D8GGP;-Tp2CM=oM~q_=1>`$npVK7T`Do zcnDf#(eZ;xLHG*4wL>&2<Vb>wRZqw* zRtTd_M^HdlK$31~Aj@+ACCe8bHO0QVprxYL4$riNn}(Dj{6;?YfhY@3_0|XHmuTiz z94U86;E+Q!!C~cLntdm@DAdm)3MrzulNn!O?{);|p|&NKKVvI2`7{f$d}LYhG*?yN zNok;{00re2R2JM}Zz}5+3p*-H>xGyxiOO{GxZvZaJT7!iDvL#^B|1YUWx`F2X_^?* z7E&tcEa-eZb6-K(I}V*wU>TZN-NGl$P2i3fqlM^dy$1CudaPhN0wu6a_Vm{_|@k#dG00GUu_zzv!bZmebtH=rnixPC3%bpdp6Ul4KA5pm3q zOvs_3T@1wp#Sz3nO|nQbNF?=@h7%2I#+z%<_;{#YVi)y#J`N-{!$hkOPy>hJ0t%RX zL<)>iZ2%%iZwkHtm%X=-vg^7I`|iE(&G!uO01SWuW=P!kFk%NHK!FlPATVX)q9P=k zq|Mk$<1~y-*Yd{#7*(WLRjai{$bu9kp}iP~j#*btxKcV|Z8_#j8Jmvf7_w=bwrEFn zD4Sj7T4qu?3xBYyOc&EKv26AC+vnc6N($WsGqf;GXM-12ooak17lQxZs9Wz8?7tM;vM)fMyEexW+TXDAS+jopP zTaY@18-|7m=^q|ZHUzF^X^G{Ae6yaVF?t!*2Yz0ZPQz^w#~}P;|zjVWo<~$!PrJ! zrnY-)rUq*g({`1Nn2d2(kYL<4gQ=1BN3*tdA@+_tR6{vxD5NsA7OCR!$jg}8Y$DEZ zGl_E?$_jDa$kc+=;F-`xqu0UB=!4u0m3lol6Ols0T1@n)pEwyrSn3PymC)AUVvT1V z*K%WLJwI8tkZWP@Zn#$9`Jmh;EnENya;;==$F42NLX-neb+fkST7W{p!1TLZi^hxr zi;z>}Co`-=-$K$t{0gqM7+ecv8gnfSv6peJ>BO}>q%m~5l5yo}v#_-+-;N2|_r-g&Fe>*Aay6v8!lJz!$2SL$^aX!+h;M|=S@ z-ejfz+?&Pk5-%Ezh4A1`9eNe=Yb$jp!w+*mN!`+dL=ZM-cj|WVxkly=rEai6soNpJ z;y+ZVRqD3le6>;+oNv#c5ze=R<;I4Ti+QMLU|yF6uG8ywuG8y6JCpeDf)`54*Qs=` z!u@tsEsD+WR?Oe1(!Cn@OGq_4MylXcU8I5`jSU6~so--PRk^L0U$_R0(JG8fgAF4r0>t7(2wYm zuuMT78+w=Mt&{t=AbJFmd0is^j3)#4W-@zAABpWW1K3&$>yoOw&NGOT=DN)_=o9ELtB#j8;m- z#>+G<5z}O^F%4y4SgbSKqh`36qx!ls!j2Jo0e--)49qVGA6?4@KxY|~0 z)l0vCIVR#Uyr#L)*esG^2>Q*PS z{zNkCV=URqtdF@Q*)qcR8YeSvW{wZDeykNtqhhG%hFM?jU~JZBkkx;L;+RITtP&SkR$s`9@t5YrLMm&&XU&a+g!!^_Cya<>8x*0xW1iE zgH)K@uBF+91iu`y+~jh)-zMiNk5&njQ><<;_@-Xnp2eCQtJ{bRX=PLM(J*V9G|{YX z<8M@jk5V$vvqquiAdoDKEsQ^XTeqaW&{@(34AnVzu!mn`XHB6NK=B;b%0S?_*2)k| zB7yoC8=_w=>L+l~r9gdB_D_p^SRrgxtZTH^xgil)DxO+HIOsw%RxVOW8LKb2eNb6ycP+XC_$6PZZ{1zb3 z-M$br7Jmd)gx1}ouRjiXSRSVZ^>Pi;d^->2S+122N`XbVpmfU{^kVzB4g!I&;Qs(NWQn zah8RPVLdWo-Hwsbr;9~rx35HCqz$1Nqv&RAC}n78r$vhuBp0Nb5Jfe%Ee>Z23^L%>LJMH`oFN zbj~v4v^xQ!3yl|S_>1jl3=O+L1tRWgw?=M|CqGLw!|jr+EbW3ZypIJaK995V0LlE_ z5qc^u*v~k(p&@_uO=t*M9}O|>0iewr;#(V%LaNQp-RbcSHWT|W z3GVYCP7xY8Qyb}o#*aPs=*Z<;OU=}7m36U(ay%V#Zf+%`uDtpTMld$-{*=i?^@t|1 zU!R)$gMzA&mR@SYfmF<|!}b2)M-Ciwe|oz|(=Z?_SW^a1hx@3Tn~K42X$w6{uc^OkByaC^;|(_EEb1)*|8q) zsu$wH$+PW)OYwmCj_s3|;t7tx?UPsH3FjrXPtMth3OC>O$%S}wseMAzSHo+Pi*lGb z!4l|o?By!_A>)`CN3M06B=?Hr!$*;Wc<2$~@t1cMJCl2)pq<4(a#lmk1h6L5VUPQs zQp#{TJqQmI$~{NCn;-rtB$93CNOc@OSiSPe&xNy#_jt~=_xc9ozFSTWdsXbl$cI=S zkP2D+n4+kNb)^e1T(Nhi2r03E-ZbU0Q*d0E!qXIiq>!O$lwRiHuLHYu3%A}L+ra1M z(_2Q9cq3N@(~pb(oc4S?k9#MnMJH_=I@9JxrVejuqUSaR=)%Mqe$spbFUH=a_7%^t znwK-lQ=CR|n;JDUguuIX2#-mHR-`Iu_K6IWN!dS#A zKoXRl@$o~2p4`*YVH-gndJHWMD0{%f)V-u-k1NYQ6E_sv+#|WkFsK81qQFH+zb598 z2eN?lppP#s!W|tpFbWs9#QG`0UeK&0P=mI@i5)%@T3lMVwQc z4FqiETvt$JLIBrAyYX$O3vgc=k|RGcYMfj?+zGr%v^?o@;-fw=;&`7l-a0R`t|6PB zPP^pTlYuivOaMFqQ+utZoNKLe%#VwrR!UV;j`O1$V*70G{+|0N{2^1 z;+zH~sha&CT8?4(Zhc|19&6BKA@~;?-AnyJ5YNChw|(`c9}=ZW4_z1yge{xY=`6rK zvzF0TevD{`H+ew(OgRulA}Whf=IBuvA4fj-C&wH74ww|;zVlZaLd&F5JWI1SJ&WT@ zcm{dpCp}BM5A7V?GordmN$fjdd!eDGS;g>(fPa`Xa)tq>KP~yK z{y3+B=$g7m88;F4-NPjoGLJ@xxB{yryG~?7l7$mlNkU6jNLZj|S6aFKP;XiW9nm?r zBMH=eHG)QLM_^C)hX2HJ(5=L||5~L(ZBYd(0GA1y1z_{sC+leti!+znyJ+;d3s+Ej zgfx+GNyQm;b}9^~5*P0Cfc-Ryc){Kjz@fyDVl#bH!n?&17#ZKDV8m89)LTl?nHPw?Q4c5WR<-4RZ_|%ifJVQ{X1Mzae}MokN&7=UCM3V#2xG!c z@V+=};N+;N22NV=a`10cG!?FXbP7KWHTUD`EWLYEqM@md)Gsj;5=9K|+sYOXewpi;$Jl5e>s(jtJm6PniFj$SOjnkPR-(By@9W zeI(eNyH}eL2GsRgX>x-4EHFOv6g@^wxhskfA%c2{{y^>09VxQgEFmQCUFaOZ=8ko! z3Mj))BJ3o1oRr%@86HoiorgM_GURwWqW+DK0jnRQZN?5wy&ma+v2TzTnBt!QWwZr? zvPiPn7$v=mJNY}Jjl*A5f5c9{I7E=`xOgC=za7c;8PR{HI(PoU;Ks~M^wbCJ^@4hx z$kwQbWMuLUd5K2iX58(^phOYx3BAL4kA~5zDjAqILwKhVoye+l3;+Z?P9wzZPkW2g z%OV?}K)=)TLFf57iae6_sGeQ(OZQQ+9}ul8Mw|^o#~o$2zc75j0{3>n9kxLvaC*Rg z#|edw4G>af1vfa|h=18VhPGrq0>H6$pCyYe5;rj5+s@B@`*Rk_-Hctco4~8GAGdMF`%|4pE2}hZE9m)cL64B~p7I&FNEA5X6<(SN!{k z(l7Vwza-P6DRE_(3qOkEW)uB)ERL3QW=|W|upn?lA))+wv6c#DPu1%yluro{nx%qe zLzz*p?N~3Fn|QFImLDfj#T%)mTNL9xIh{own33)^XxGGp(wK*dV9rz@Bk=G82n`PF zkCLAHVPNuLd8|0^L&6lhoeorUS>qzX;t7<`)#H1ye5^WGUm&b95ro@TtGkeKM`VUO;|GKmjJ)Hc9ikEi|uQvVi&fx)L zPn_Sylq7v&=MbyQTJfcwtgrQ}$F^ZWB)zcfO!b&&dhWO0$)V244@^WvDLk^K&J6x1 zngp3f7X+?>AmIhLV*QE~=m$3zH<4g-xPj#AV{j|mM0<`EB_E$W3l*vBU>SSjOlT3j zfK1r6)wXB8c!h6+8UV(Znrj1|5oah2;Ge<*r}FqCrn4uq2TbYk3S1f#ovbbv`0_>A zQs$*dDz)X9Do+1es9p&^%k5{l9ruW?Jd(MBu z94d9C5B2yM<)W~bFPwv*l4pj%uX=dfnc-fh%I-u27^mIf98g9gr%Q|-iX3Y1c?_!F zp3_w8&WD}1vXAu~Pl-VWBM#a|FoO&!b?2GkRZz4g{_iVe1B!3cA63DD%56|q1K9Xi zE(P0R7}=T33)HI93n3XXGHb;va|Xtbp1-U>h;cK`8tMCc@RWxjfykY2p_6;zaI=G- z25-{y2&Fn(eU3BAjAgQ4N=Tln{E!)|f6+WA_$F}WLv81g;ojy!PUQe@9Hwzy>-MSt z>}z@%&BPs++FzcF1;DVyLXW~q9_FmD#V!C3Trtom+!TqZ%`ou8rbr?g0i)P96Rg2+ zaph(gX4(TltFZ)X)R4-hvsgu#gf8X28d+8#V6>venNFkA{K9`Q$k?YJL#~Zz(qyQID{}7%L|tg zEHMGd{FzcV2if@L{`fMek+`PeVpBBm;l2EfF=m(k*ts+W?3l_4cDsZf@huwIp-zus2L#GRk8+gDPBpNbZDGgR772FNh(?7BUBeEa z$`0)Gu;fLA&CeUyO$$5Z_A%_DvAJtu1ey?bP#Db24eW4f6Lz~wzf|!=(%4pB<%!PI zOg6w!&a0Bp!}0XMajCO*;=6IsPZWyrk$v&q_#Km@^NzA50A)C&BzPCGzJX34suVRX zKoEv)V|@{$Vorn-2#(^9ZsXZoC7TU-6O@7PB+5WA;F`orxdxvIkw~-jxJ7&DFOi;h z%Pe-6D+*Y2I;e6!_&W_{ik1$3JWqJ>=(bS-F9W+sG!zBhiSTmy;Nh^vMG1rd9^7oo z`UzVC&6nLlm zI-69W`qL0rS?}c`6od^DaKGPHO3K1hjIOCm2QeDn-Y)9b{Nm*a7qp%M6PycEp$ z)V-i)y%0k|Jqo$6QuGi{HVjrb78mB-x>r5cLh}*Hn^2un1WdhsVrnc{_NyllKt^VH zqR#qcWcA6#ARk;j)joO{2X8D#YsIIwQJ|6^K?BsLLBT;PRy4%hzh(Wh8a}8gwW3Tk zQXC!F=5-$?r1>8LX&&FJDS5Jb5@ADg>@#f;N&;9MA|S=F-s27+yXG$v)L|@$Ov)!X za*8uy9!`*$RQi;W*f<>Wt=vK=z<>-`tA4g%wjrL)$|E@L(Ttw@NIBS(YJkow4_*xB z88VO`VB9>C5!{Y!gTH4pZLWs+O`BUc7M(OL*!@5N5 z6f-}G6)(M=ubzk}h+V4aw%9&BHg$~H7F@>?Qr!t;!VSGhkXubt2^g+Ln9HE)P?0TX z5;+I47Q_W-M)yuqj*t~@wI-4@s1UP65_vd~G!JMj*W)rYl2;86Tc|h}F$1UyDFUEU zr6qz<(NjkcEj_K3&5Lt2;QpiQ8;Dc)4QOrAw;F#@kI;0S8lielh)CkWQDdszdRIoCeXPi1S)iV(}$T`41h(pD@kM#!C-@SM-tFGlG z;bEWg`gwi^e`I(Wcw^GnHm?D#Fx6oBEP1YGbN{8ruj~j*ok4fE*9Id6Oo*qei%e)% zxpVMk;#-kgL56MpEH8SPLwLP})sItqauSe%gTAU&=w2N{C0PW?^}diF5u*tpthUnp zU0D@36Vci5E*nbcu`Nht-#qvCdW3q0_B@64oc17fmJui>SN@s2IO<_#(uJ=1L+QQi zp6aBd)~h~vPj#13+h{sEfMMss`u7lk9+Ln|iiq+rX<}D9hN+l^?o)CObT0Dt9GQE` zPBU4Z?A&XfY43~bo9?ORS^L8DQtj0JmG*KFk%qN}UbG!Bf73l678xh+ySFStEvU{t z-uqCzK3ko8@U!L{Zl<--XhEhPNy9nEU9 z=Xy*rZ^q>6eo-8$4wAjoL4Bcz*DL8Oz0vgGXLDY?%&T4S3UB4{vN9r?GkPenpedt# zBHLZD;gA1r_h#fUTAj!^b)cen_PJ{n)afzefJ_m43*jSZpp`3SJlsQKE4hT`uaKZ= zL(Nxt!-FpiH`3>DFGXmG1-HIb*S|8()Il;>Vd;isns)V%WDobT8gh_cmU6|Mvazgi zGp7`PnNu;Nie8puRCW5W-g$a?s4{`MYRIexeu-!^8ph*$Fg@eH{OWhoBlS8E*K5@7$gEKC{6VbY}mb&~nPBSGm) z!XjGkVSmJ z(IU>I^RR+TzY4Yf9jP@PSG8dh$%QG4<*={CyT#!ikT7MU=Pq}MY7hN-4O@`DGgr*`QZYiBi_Ogph&NG6VFS7d)9JyfRb6cj1Z3L3T-VChNC~xtg$I6$^S8uadmc zyk#ikExJK^8;*$0TNZ=kEf%r#cE#S8_ykPK0r%X@%*Eu+itepkK{b%Cz0%HWhG-TT z8P2Cr=IU8{^RGm0GsRu3_GSc#&~B_3bfrLyYKGAv#L!IdilEm5N^oa7R=D5^b!D*- zGY)Mkw_}=2CTcQ3DO}WT?_D_nVcUCTC%u*H`#$p+^pM0*SnZS(83*UOr0^|uOa(&Bkq=VZ>3)r}58YN)61AJ#$5M$k3dzVB& zS=0F*QxTsZ;0$f_{^VI_BlwLy1;cAHEMN)Ki5kDQFBDogxhh^pmBYm?HyFsvrr`9K z2`d&{kN3|vIeX`N$GD4}T$}GgkGkWFFQL|5;F%NmOLEH~C3?ekXvxW%mORjYc8Ske zVTjKzQS@5zVEgVx-aS~qdokWU)V_O(cMsL?UgBM1*04`x7fX@(1cy(jwUm1iC(nzi z&x5It6-bT6NoytNs21W2Ts=le3#D%qj5$Mv|6#LXneD#t!ogpRe>tR#0rpk9Bx+Vj zq06EX3(?E(*K}I3l$Zo`-q%afVm$LZ6ag*<>0b2;%H_HP@t0JT4U%7g`$4|J$Rt_u zK8xm0-knS*g#1^YF?Z}#OAAL z>CZ0Z`}M-aPi+UR!ZweH5p6JkLq%&6TNvDpBZP!(TWmhUFl{S$r2|^nY!D;C$^|Ws z@7Y{I5O}pw=d`|ta8rT~)AnVIz|V6h>-E^rZ=`0+93x z=Swm_yvk&NLCvL);nh7^fpb)Jh5_2lHYyAY-3?_=X~>kLZ5V&>rI>c|lza5xSt$4U zpFpPvu<>FX!jLSTS}3nd{A0w93gkN(+fAl*my23Yq2@R-mV0l7 zvse+-X7|ktBGWbi8Uz>mFEMIqE~FCrzCIlHL1)ME$+i9j`1E)(QAFihgQD}sYFMs*STH}bY7z2MH-(KbmPM#EUtCZ@dT zgENy`e~mmYMdewal|A7z3<8LfU^e749*L!sVktLz`?>!YUL`_c$QN0OUy;;-tG&bS z?;XyY33a8j)=IkqfurbjqC#7A-MFX$noJFhUn-1gY+)>-Y8rN)?x2$`FGJ4SftyQE z$)Y&`afZoe$oJ&W*PzF%r2(E1%Q|BFwyAsy9GQ?SvsapKkML8Y$v3l^n^V@Ae6cc; zh2#Q^r_LNkVTL24ErY7)^N=ffDzSXIAME zeuzxQdT?mSry0D+s+E*8xy?hd=rDtyVPhtZL7*@wo^l0yVV23Pu6cS{Kuv4do~ve0 z-%E_L9k@nCPspZxBoKK(GpUvkq!egVPFvJ;{S6TTQ~ys>0CX)1z`}D25{=)Y5sd*7 zeEQX4VX#v|RBj53K?@5`7kq74XzLk+W2yrV*3;|*%BW(%W#GU*9c~kdaSTA}c!J}A z3Cu2{0H1y{8%+q`%DT?f;0rxgc7e-gZzt=w9|BxN+5Gx|Yv&b#3yo}ZaIGb99ey=% zp#feFuJX+TSCtDf0yqZ5@P>V(2zF(Y?Z6d5?D$p?JDwnR(^e4EtK(=5G5X@nN(gq8 ziQ3Fh=q(=R1Pe7*>DQ;*S6@-LkvX@(l=r57qh)SBvF!KBvk6ny_50+e{YG7zyqRI2 zRoGWA(-3_B>1DOG>i+jYVl>KlHRCb`)?V!x8}fqF=7?iNBX2Bekasd{7l8XYZ3m%J zIi;U&EeRfM(0#Z5Zm{lM=Z^Y0%(2RnNl&%xGD9PJ%2yB{3GD$zjkU!;%uaK4G%YmF z-f}NDW4DHTC}j_0MHn|LL~JBEg;KRqFRE95vo>-lyCPQWq^_{ptDa~i!|K`JxR_OM zsh%@yy_lDw#oa5vIm7hV=|t`j5y?2JiTIT4P!!J(DstS zBvJ9}zlzCtLJO_E+{9$eGUnDM<7rLCC<4Qb>Sxg4P9l*eXW_af5jaolMjR43no9=b zIU>2ok;pjOutcxNd22hX7jA44;}R=F`q#QL)Wc{DXlEJ;)q%xytkDbP0hicV;xprr zk<1SfK|=M&kR(~LR*s%!5do4q!F?RDHewe$hGxXfq24%g5EaM(E-GVE^KeFk6oq>n zaTpvZI!vgm(7uTG0?B~9sMe9!qY;q3%-gX#`^m-lWF>vF#3$j0tQyBB8j;t3 z5>{uw`&@jtn!YRfj%ARkWI_gQ&4FQ9rZM<8Pt6X$Fi*c^kmB?$Z(hl00Hp(U6laD_>JM!5knqB z5drzt^mwPEeK`?KKWF~Lf!Ncdj0VjvQu% zs(?R>?SsdIAdtuK_)fwRGaP({=wUksPINl;hO!woRARu=??8m77>vgdxlGd5YM|rH zRFnhA$lQ9bQ<5LxLVh(K$j@zwpuC#|;Ao2mVvQMmM{1(`d#+-J(-d)>yOnij z@HjkTmL^`A8N3aEj2WCoebv`M4_3(5ip$O5)LN=_uQ!7`{EZo$m#@zZK5>~D92-$> z2FGs0vZ5MnSa8^jPxF!)Tx(MOsy2hyZ^I1ETaNpV4{<_?Qqs3!2InnXhSJ+)1}6r< z8!&@wG8mh|+%5$LGh<6QtYl7oMQs$j@XgR;7P(Dn2TociE?Lc2H$zR)F;f~K-6o^0cHp@IBP6*b~vhN<7!KXEYGv6VrnAt_b%1b8=puQ!8#Vo$!5cK44^RJ7@8a*`GA&|0SQg4s@67Tb)a)ttnoEo%o) z!k#b$1_+l_W+@qVjZe;9 zKN)uCF#(4~m-Fbvm#Z2?dOa3h+C8@D?v^$Wut@SBJI+pQyMxxEJ19L<75lCB!)&x& z3+z7o9czTOMVAer9g8lwBv5in0mV3Eb`y&()|_x|2#YQ^twq;b6roy+?&La)?k?9P zai7*Q2Jzzv1TDH&ggC|dl3H{VycP5K2Zbadtwo?|b<*dDj zd}vK-?;#($A=US_MRz%QR!5j25JQXZULG|T-ThsQ?vA0cc9`sS5$i3w+odAgowZnW zU7B<2u;@c*kz~;gKW!Ho*u@x&3@&)JST-NApTyBQaTLtc1ufZIaq-a81H-Q5Beuj~ zq4y3OxMRecdqP}EhP6^d6wM)jZ0(8TFfDpMjK!&Oypp_I12$X>!v<<$$|{XTH|(}J zW-N3i>_!%D(&+AJ&{$~ks;DirA~yYJ4FR+Dt+2M~WTthsa=(u=Y_PEknas2dux46) z{L$3IOndvXXYSc~P&>(?nkFfiLzPJI)Z5xjiy-0_0lg5yjKUtn#x%*8ur}?O zU?_n!H>O7AzAzIsmRhBFTCHsaUERy*oHkfQ-)?uYN>8EYO{*30JkFC*U%USebesO! z?b)zSOYh6*Ho}v7MD&NJWY}PxHmmCQ0@ENt2P|6OZ4Ik*dvS|ygP~311YCchpKLi2FMUjsr=hrpl9AmpL#KxpM_4xwcCK~mlTq=~Nwkleof z+CW0z*c?b2oB`76YXd1%Eew&DW7G0iZJc9GsWtzFId=oTLQ2NwKaW06_Bl+#WAook zwZZ&1(>4Ep0|Ce-E&Qzpj_bWNGt;r#feD8Xy7*!{*# zna124t6m659o6eHQzpV$hUrBuX?>N`YzmJ-Fq36 zYPG%k_-~LH4Trr6U((9@C*fvq&S`SuSyp}0EW4VVmQa1lN1yS>s1d~TiBJC&a_?>< zyt3a;Gn92#Mm&g6VntP^kYa4c`Ta>fpSk$Ssrur@$+>N6Tc4#&o(su1ad!^0Q9)a6T*dq8^f13FZS1;uEYLfA8^20h5pYs9k z5BS9xB4*kX=G4C-RD71Fxe#e zirjS@E~Y|o8mx-Bp+f*Q?%zwTO_h8VWv24;h}foZ-W%+WM?+*4f#We=@pUil6*r5c z+>Az*&7E>Q7*txAO6%37QEyWkK#0<8G*8`SjNeWwiXuKeQ4o30U=6^3q7e=q0C4ggQP*-st#!wtVPBh)X+7bg%j5`;SO-Sa6~!W6pmA=6+3~WF#uj0jLbTD$U7o1Pl9WZQ&c z#{!D%dlqB1K+76?)*+@oPl1?4o-Gh!HSj<;4j)csyg?9+Jmt*v4(GwF8vJcx{*Mkkb+%TWZSuJ*B1Y8HWD*ziv zLCBrc3&e@M60o`C$={Y>+qSKqJ{_=4`mY8XlMb*M=jhD>n^U#}H*6@`++{%9gbc37 zHpRjQwBL2u13^Jm&BA z?TiWW#uC=`iueb-$U|hsgl2(l8_+BoCYu$_lJ!k0nP#i4VecU&BQ|+Z?rf+riRKBv zH_~|uC(;cOL$0jzHR0NTJ#E)}1(VKx(sdxcO^@txv)@SXH}9^RiI?yFM!|O(zEkXCy;0du-u4Iw`R{uuuWaBIW@iv6$!+3m3* zt()#;&bU9fP|S>7W+zseNe&e|v69IIgBqTa+SS+%tjXyI%GpD`yRe(ghJ|Txtale& zlo!YGl-YKyceLF0Y4&++J5^rzv~HS5&kXh{3EzMRpmtRV4S8Gex)+E6jZJF=g=fc6 zl@E(v%Tk(*DUH>41{nf`?PFTSj7#hu?0*Uu3EA%C>}&ylkv$@1JlX;Rk=_OC{612ZE7@@#5~K9i@E)J~FradC zZYYzRRzPRolnRP=q@QX>db2L!Rr%)BsJ&Lm7=t7zS^r*b-tmkW0t!zKZUD=e0dEY<#IAy@dZHb0 zvCbnkvLZ%+Z6{UsEeD9{hH!pO;ybLb^1zUlhIG;CtaQb8e-D zgiH>eVpm)B?Ek`?yOttO5*_9DxPG3W6c493^)XD`1I^=wo(v$NhIzq-9~R4d6F84D zt5hSIAaTS8-pADoysSg$%&ryhkNvT<=uq!uvb0kaa*UtR9pl+LQ7Y^DNIFFaFU*Km z?#A6UYGJY5fX-a4of-U-eEm#HAX&mTAIFzbJ1TE`UDyIChS8f|Qv@L;?@=BV!c91SWXw+wzDSR~>QtT;yNIP}-O z3Hl957DKjTzif=lC>aDag%eqtQPxm!0|^%OqpXkp5{I9GO%7oMG;;Vc=e9)W$XxBL z0#sCdg7Aj>YoATjQQEsxX&|t}TBNZhl=DoCuE>jPRut$UvDlJoV;-HgHd5ve+Z&Ex zJ=TZF(TF(poQe{N{#p1L)ZaKHr1L}OSDlmDZWkgnHiEIB;Rio${ge4QJV@Vij)J#N z$BDVYvrd&KKF`d!#Ff*=x#@L$ILf1>E;!J_622ZmeiC%LS=v^fh6~}`V@1*X=*0ag z{w$4@e;7)Pl>{x#uq~HCHSeF=cj44mvX7to*bkq-@ZcjC&*dM*1m62JEezg<*-{o4 zAkKz)4}>mb2j@Mb8N=0&=-nqqy;Jvpf}+|oe(2+;&NVmpe|*%tVNu6iG4 z8*|BW<9+&TRnun$R4^9oW7WL3k_3WHyQ;?AIF zQ@!^ISMx58aQ@3G?Na~%YYF&H`G6;l zVk{Ip{M|BCEptPXedQ~?i2V++;!(Y7R!6TNuR43~T?n7uM}x~BO<(?~1oz7N*g+c3 zyie_i(Yncjvp!r#kbB}qM`O5g{|p%;fSTuLj;l&D?6|& zyC#!_XbP7XB6kV6JV`zT?dmo25xyEDQOH+ylj`okGQL-}%J8`ZD-M|RmS2m4mAvT44d61On}{n*4k})yji!qjHP8`9rTc~(CyS+D4g9T zfI;0|aAHQ_L49hvF+g{c`RKm0{c=XJfpb(}YWPO=a&z@B_Z0i?pQwEs7NKs7>UHyO zwP9W-Fp81WqZFDnj#;SjnsI8z%Z4w4($RLm@|*clEE%&gEL<))!Hh5?XQQ-qtjU0h zh|oe8aP5s3eb$v1@GM7qJW0>-3t7_aNa9V@kT9&aTWFv9ZLBUy;B0awnE#SPh4p}kc<-1e<5OtGo`_{zT2 zjbNhsSi!I)c1V}bKhvnPL9FjqCSi<(>X~X0qJB5XhQPOhf#k{UWe=#ar|ge_#yl6j z5of$Y_Ca(at?;vg&lbafW?1U;t0yqum1jqLTXz{A&yT=YNC#jEH|gzopL35<{KF#x zE8fj5q?MR4Y%s~uN(24yroycZM;{WlA3!)!&DhT-3#_I-05re5;(U^_|@R^6SiPrUckzr%UIwl=@ct>gW~2N>}0a? zG^gF+Dvg#f2XOT7XaB@BERC%f)0^p&iyeV5vPtDQL_iX-@57@>^<4IpAPw>{+K2a? zGEfosGTi#Ifll4gbBw^6DGwc;3Twe`9@o<%+uvjXb7#feWx>=t z351YON1PtwQ2-c=R8E!|IIs=E&bxZZ>WDPkLCXcvaPpqfG%=%C0=^6xMfol=N{~aI zVzs#3z8NysSU=m~J19uL4hmw9+X@B2IOM3aAL5Gyn1JX6y^-OIoD&`7+zxWaeWz#o zUmK&AkUE}_gyoG3k9_1o!K9A|#DR<)J@`vJz~%yOQ4QD@55n??}vrYM&w*Yb+feF{`CxR=u#FAZ8J|(gh-}WP;TmCEwT6wnu>-YXaF2b2lg&8zx>v`@@!W<8Bds0#sxKhOqNkifl|`}J(+01qToymlj) z6YVb1c1OdF`tGPKKMj+YXVF;_6-!2?I2q`T>9U-=XEYb;Zdr~#5z~xG-DtS^26b0t zj4z4%(;(y=)GH~x_KPZ16;QOt>h64_?$#7_bf8st@oP%T55h~HcCzh=ZGeqYpdz>~ zbA-9aAqT(+IgJTjc4_YLYBC`%C+byG>Sz^v_^v*ceVd~3)qH~@EytNFucDyQRf<17 zR!}HO>VFNt3jq&LKty&SvYL`QvJ65CA`KGIO^{iV8-#aJ z-EhXUA-Hd>ROo1ahF=$-0U<2dflr(!q!7-oL2WDH^S2mfZg(k9y6~mX*8)nCg6hKl}ZW?f8g^mL-cX^_Qp z)D~;ZKo!S{RXG*GiDZ!cPW$i$?y@+92L8$?E_z@yOrh4`xRd3;E{%3y40|xY zQ%>Di&fm*4foFS01g^0FC`A_aYyL-YxB9uVCZa+5DE0@K9e>#`n!yhtQL!chSMvT8GIpxEDN&of0sn}rX0*H-l3IcU zC3II%daxskk;ff%;OV|_;GyYNgR3;xt~ev-$GDQjl6C_SFaD5iL7&Ugj-dSn1PatJ zkdGjm7(y$tq{Z$9nugyW6w)sd7;R!%!jE(rk>V17rL~av^#XUEd^B-aih^i*f$*_M{s}y04F#=!bzZ4lWaSYU4;Yzvs>W~HpA&b-VqxTJqS~CwIBNo>a#kR z;gg_!^TG?|g}tEQV~Pq0?{qMF>|kYUa6r;=&hKQIB>d|7_xkrajo4`%PZY0)||1;d6~AF+4FN9lLswIU>>%w2uKFu?4~% z15wX-LDryc2|5r}T2dJjdOdQxVmUY7{kEL&bc9wYzAw|g0O+JUrfOGrU>x8De1<;Q z1bB!5{&j&jasoojwoT#?xqW+PH<^#b0Tn6;Q01K4bjYQZKQJ5Q=j2JT-Z=o)dndZ< zX0TX9mBB?5;J-;2AM;+|4r`;Ixgc-6kcY zVZD-C41PMdZ4rw`nlAfe6}RRG+FO|f@e%uh>Xk1Icd_in15E2-Y-wZ)twr=t`@38W z?0`*FSFxf_q0A&nez5+6eQaae%0Lzkr}t3%+p&HYmvj0y4=XRh>3iLb*fx*I>FM{P zhwM;KU!#f*(sh`HoYXpsZbqHiMz@os15M2UrBd@{7DtF+heS%-dSlwg81%=4&mkV0 zq#EaomqiktFD`Si_-%K^gTw5S0s*-q+1u~T zKt|T8qdmV@J^J~Y=*DLw^pp%Z7{e|fQwgruQ;~b`9Ts2~^OtH_tJIWtWuN8n`3fvr zP76}K>Y=s)v^->$E2(~t{Z_0CRvFqA3p=V$u2@mThdhl_VYGMi2wk$r6-iDKwi5Ed zgHa0SeyX2Ox>Yi*XB8*?6NJh-f)KHYyR*>Iob6oqrws6j+LkWc)|?KG#xga<*5}GJ zM@~e6hOZH)iZ*~)6dL*n%HU{=Qgi3*R6qqmm1RhH0@{h;KY=)t zS9+hHr2yKfUpR%M+!%U{D`S1dlB|bT*$Aw+^dF@gB0g<|uw+IzndbZEE4>*o-CzC{ zpQ4-d>F46pMG$~b2Yd>RQP_`ati((NE#s|fH3@?i@e*9VNTHa?K_oF=t)v`FB0^HY{g%T2Gk!u_EoL{Q~|z>^cQCf-1(osX|HQX$W=L(cKkz(Hqhy zyAL1trhlyWSe-snXL`84f3Uv4U@BF$q;uVyS0Itq(>?Tm&SpI`_=TL?7w9?X1Ea-y zYxx(E?xJ$jrkuyQaWsqS@!py0k$Q`$4bMvV^6~;thDX!$JataSo!-ZyVF6tn{I77Z zqWZ$5c7nfF5Odx|pXYln6o(9@n{-iIx`a?g3@pH!NGh1hWsv)DMXAkn;_j#y#s~^| zE{cfv+ZNs6U4Zo0qgr>I z`Q#+bstZ8-59m1!`EuQ$b9JQq!LR0X|6&SyTtquxDeNTq&at8#7hjIUlGEEKn}-*h zi_b>Cij&PBbcK(lq7W6zF$diV@bAw;vj)_vAI8-%EeEG z7cqbViYqC1%`cjA?nvdl@3qQ7-IMQh2mUr4W-Q3f;82XzLQZmr9B@BS!Y8%KDaTPo z1D+hO(;MOqkY?Z+w*>MsZLlTVYC4b34pQ}&=h2b#av)nM!_vX35K9tTQ>|pFMz@6I zAwopcU-eA7^$>tJ=K%qVYY@Vkx8e0vkN*vJCvfEWR^0)JbODLkc0u;&P<$28+w!Ye z2W!5P7S>-S2yayv%^la3CP>s3n7?IRkk9t3O~+bKBO0*uT3EEnoCZxOJ|IsCPZz1A zXNuPNfD&}&OHTN@$g}*5v#=v`&qHj@T%dpzgTDdvtC!i?97ecALIX`<6Rw<@RX`+Es)D#N2~wdS zazTY7;Fh-)MGkEt^IG7vj#mkxqx(J&XmWAeD7Vr;ED^q;LtHRrwro@6bh+3s(tJk# zGz6H;L3x@wX)no9tCAT*bZ^=UL`C&*UW2Im>*t=zwB%6o59$=+#Yd6^HTauSnCE~G zLXeb3*OF+ht zO{qI4qXznQrDSpKa;&+HqFQ{uGnIQ+Q|@MzDh;;+9{y$+kCC(c)l4#LP294q7KE`9 zib4+uKazTynDXnOX)BjEwB;{zZ!ydSy@rhmHMv>q91#pvF~Ue6dG*5YTtr3~{PE=6 z3N(WUFZ!Tg{ZTxR*Mnc5n)^2e=Pe?oD}LpOU;J6Fa7RM1$Bcm{_I3f9GK{VO4l_%P z%WC0CPRm=V2stgU<+SlbC9 z8Ur8J51YkL0eSpW0&d#Pbl{)@h^+y8QU z&)ZlSn)~w!vuXhG2?Om|8{Q+e?lD2#tA54=RIVQP;$pgsDxczd@Tb-v!G?Av0`jTn z$o5%&20t}5cV8kK-C>|GwP2Wn^$jyVSA`mU0!1I{3QxRG{iW$eyp8I<^lOy)Z!j|; z_3;@x4YVj&ig^bAciWJ+riM6T%&A9ypX5P*`qcv_)7AO78+>MJ?prp2!l)jd&-_7T zj&JNg0hgkfCwvZ36Y5WL-2p+j=85VbwKY#vKkGH;^tCnDS)Yyv)l+TOx{(XjFSJ>| zYtu$n6ZJS*!;oc@AqNoDt$=hOmfZ>8T{(hAdvCE~rkleOxD-g0ATQqns=ZBl0 z%OQmc6A;OsPDieD_0(XPF|t(Y@Hk(a;mMe)&^eljC880XFKRf5&!VLob_TyM)a1}{ zp(!dZF3q1ATx;HE23Udota^q}^@klu+?--b-`AH7q~i75++WH{iR^f9=nU?x(sql?2b9v9vh_&+h_ZLQHj8 zFf}O7O4OFBma{>wto=fiEnT%kh)ThZesv3VwXuow4;($ z+uxp=dzQT?Z9FwBi?0^Ktlte`R%{Z&jExp7WEr%KD?*q}q!4DU09l-@)ol)7 zm602>r!luMmLBWrR`>ubKpZddr`#t2mILC3-q=TM0+nW0~DYy znNr9LrnQvXdyX5V$n3{s-k!)FGCjw3obv(XPsBZ^+(Ng?CC>0Jg%NBzX%`-pGb>@WFsdcxnJf!{!Zh zzAeuT?k?XMI{-xn+~gB#@QH%?J276X9Hnb);_nzKhDt=)0lC*?YPA=`a5D7qeUMMLQxJ z=7({I`onj*x=e@Mc!M(jE~+>MjhHIm#X@!YcIX2Ac-NW1-^%Ihy9~yMW6|4_+25`d z<=ex5AS>S`4S832N*Z!1Xvo_Y4j0R}3x@$o2s>|Q+`b{djxun=JIvE}9?7mgk-gQc zx8*C}kgs`ls91DF;tKDCC7Kq^Q!o784Ex9W{s$~NtRNabIw??&YRK!w-pOq6hnfj4 zLB8VR0{dO!;<1G@p!XOo5ARAdCzRyQ)Uof7pFu=QB&_6#>_N`<3`_-^dQTG%zD53v z_BbE>CVijwN-FX8>W4wRaNwtHociek&e3Y+ZotY&9jzYyvEN!{pytO-aWMs%Giic2 zX^7Ad-zKl*1lilFyei6*N3!MR;VsSe{^j8}H`n`?hi#sv<>Bq-Jve%wJ}KYg^;NL# z;a{M%qXY%Kt+Y|2{j>we;^BWrW#@L_wSVvMFLC+f!!yJG+#HL;cl+te@M@E*hli?v zmk zJorH$z&{PscoXvhQW_`4>&X|N;oP%36+fMdhvZcc0>y7CztO?}%O=yqJ3;A-y|bgM zAY50Kcivchwjlk>Hx^Ht-V`d*6I@moi!;Lm%ma4I5C0SXpWy#n_+OsNhW`cszuUP% zL7rPRP5vj?3*jLZqqn)Q%DLC280oqUGxyu1O5ahwt%2qp<=e`)9m&4$ME3rYkBQM& zzAYVq#U0x^xwANO6<8^GHa*N3;*6}!we@lZwo!;gBUeOm7;@-CxPFLtU9M?KAp<_igFO7mir)tDEj2LE%4Z|KCz22aof za+(Kf-P}s9b@Ace#Zb(PEUao?w5?^^xso-{7kK#>=?{BZM>oqPzRdwDaPn03JfHL?GH-4UxDiR5jTSZrX~F}J z_Crp&^n9cJ6-FFyJm825@s+%F;ecTH4u=S1W8l~OhN%RQ^4nz(4u~W0?J)vEeCOb^ zcww+!eImP1kmi~jaMc)PY^FTVlM=BC{ra4jIGcQ#5z~Y3MMtjY7nitZPd#F4dg5Bo z8|gxE>%!G-7uZ7_{pob!J>4$6=dv#7nAJ8t+MAjlO-9Oj#U`ImEbbCp#k^9ld4o;8 zs@v3P_mwvlXbW4QeFaVac-!Q-azehrCPTJr1Od9y{wr=W(2=lz8OGRXb&`S5!@iFmqt4sYI_gQt40{Z+y{ z^IgiVC6(g+bHqWb%G3Bs^6oP}T=OHA_`QXC@`T88bCP6e$Gy3fH? za;Vy$)wt^(*&(GoGpX@su;~iJkTMu1l7Ez)DU_xG}@82spzs~f!@+u)*VY&&O18GKLbma6U6m|a1Q>ni)zsO+b|hLyQf zvib}aFnB$7snmB|zuA4m97kn&^>dxd(p_6wu?Zldy#r;n2Xj)au}}Xq+B&EnWNY7Z z&;A|}o^&-Bu=%5`Q6k9_gE-MqHkQysLEfWx`my}nzTw3_b9a`&n8aD{0(_-+B@^r`2}?s6cJ zC=Op4qOwdA;6R!Hg=1=reqgbwnIu2p39!jmI-h5taAF3W2VL0}lwyLpUfU08r34<2^Q)l1nK>0vwo zCX3~AD;v(2%hK$n@>(g$@P-&gDNJ>OZlrz%#iQ*#wQgA;{cObFL$; zDU4T0eq4_0)7!a`{El_&1M}=zh5>mb=j{t%(sf`lYj+1XG3=ZiBiR=b;aB_F z<^OUX74f*2O=Ou~pD_p6Zm@2+uLQl=u`pHTi~t`8H)Y7#ks*q;Lw-=~(uGG=%;k}~ zUk8~>$!aI}gyN83r;Uv)?EjHaeP@?Y`AkB^_UrFtvzmjR49nLc&opCGURNHB3At8Y z*Bx_d*mW`NlCkUD;dcWG0@Er9GF6%GR`|?g{^ZivRizW+I`xshyY$-!dQrRR(LTV7 zI)e1K57?#{p+VaRZk!cq+6UN2DB)mOYmxk`^Dvx<*i^j?=Ss1gz|Xrz+pE$&nah$W z;ONnfX`X_ck8n`O9p&Dpnkbm59u;9!hAi0t^v5+ z8MKF39f=7Ucxd0NOcr+cbtcOl8z&3;#>^ zp`D$e@=b|awx}GlbBnpTJprCAF;ES8ON&_(_>s_2WCfbGm|Y_>*sHF)N&<~2)19aoqYfd5S5yytQ6XMt=iR5;JL*m=m5pSUj8xU3 zkR?jIKZCU3UD`}cw-Z%)hyc-_N&8c*?+;7&Nu+kEn*L1I{VDg#hyov-N7u-OM(X*U z#&c)m*~aGNjcM72v5XmelnIOEhU{YFr21G&H6F1CIQ7MBZdC>K6Av3f+>=~4rU;A8 z*{?w^mdPQJiuYJSYZ6Q&6cQiLSyM!aK8ZsD2{KAe&;}vTsWOwLd4|wm$eE6p90m6& zO(CQYYiJ>Th($xw2XhD`oUO;V=PR2R5&rB++SKn3EsCrXXY0na)_YT#LQ z2sJo7;Hw>ogGSv!p<$pXk5^6vW^Sf$InjmLwc;)j?co6<|$9!@JUmf8-c~&u-q40gP`Of>s$w z-#pNoH_s;sr_&^1#@n5Ymr;u?)$j&JfpM-|?3PXrT&ifwkZv@pYM|S5vU!Er=-!ju z(Nk9c`RwU5bI0(#IDTMTXtZsyNwmc##hgTF+bvmX$nkC$Ph#F$lB8JV)imHTt|Hl> zI)C}JdL=-X=2%$R6z;I<#%y|tfLJ}29GXeAdvn;-wtr@)O?!#X^_h8>PnL7z$&!E= zK-k1&am7Qm<@D9yF*YbYiy7%DEjP)c^fZ^rqO>5KBsie0%IYvjxg)xz+MRM>Hrf-` z1EyQ3c6(IP&=ysd!hMJb-vL1-!GPIAcGSS|jV?ZgMwzAW#@`~$!`UK#ES*6_+0cs2 zYC+``A&Asc(nFbX^|sq7E32+^>tsAQ;r7_9`rlk4Dq@L<+{EclVIuas!+&g!&BjtU zmt(1$nd?d*Ibtlb&Oo@tOx=T&M14GC~jAEX6;pXJgzvr7wOkf6!qHEO}s+g4C!~TJIin2 z0hX{;5-_(+cPo6ht48%uXK?2qgCDLmVVCY0ZFh9`9Ad!kDi22YRCMNn={FiAG4ZzO z(hfe_UhZ?-`#!$GGT|QP9VvWHbrO#o#2J0-(Bp0=({^kfhqGj8W~_Gj1sdKZ(e1(% zocv(*42nq&!=zpXTp3USkRa*=d^gu{vj(&_euLN(mc$KWTx&@bQ5qlvSIN^sC54(i z1=Jf-(SdpcQySBODSBh({@8=bMd=_DyL!dRbdYj!@owf4kYZ6`+*I}LDg&#csoT2v z;4}F?`)>$FKyZVGP41P%Io$Bx<0SjiSo82`dU!ZJ1VuJ)tg+%?4%BOmxP50wi;9OG zj~T_F#YQ~L0h7a7E-E0-1kj;L2US?sNT_#}gvOL4G-ibajJtsZuq=^)jf?4SK-WRA zaN{`$WggBE!{~lmo}S;7yq;*7Gn|aaBN`6sdF)b}0{;lAh`zc|tzrABof9yd)ixU> zzeSb^7jId{em`Q%c)57C%$8$ig2^IH$i8`*4L?Nc57 z|C07A#;^8g8z`pNX1Kx7T z8H~zC7jrz&@qs*9`sIRgH(2MgSo(XG7sS+aRvkQ4K%#6na>GH5LN(;vBftZ!Z0&ej6GN5oono=mV;Yie9;B!`&tApMgVfdD!}1T(u=XCVe^9w9)v>oK z?cJWh#IWrgW$soF{|>YCd7%(=09=})@`Pte@#u*R=obz`QcZlKabzAkR5@+d(f59L zJ~#B8`HY;=ozFJEkx-&<200Xd4cVc~HOfi$;RaI2wlff}4z_MF=Odz6x5v(WjcYSX zipX3vJ)ri8A|xmfQ;-0xcIj|mkmA-xD(xcbBX>2UAHCrq3gB^$D2U(MHUR+t6^<#VHjHI z3?dVz9>)nZNm?jsX7y<2nf7Ki)6aCCX+uRwtezM@LlQ(Ot+mypmAW<^8tn)Go3_~Nx2N=*Ib&`MY>L`GirKvafmzC2b=6zSMHx4T>T{I%J{Y#=CW}Z6-`8D^qreLU&7WjLsf6TPvN+S>jL*|-k8MTZX14#=2M>bj((Df!kH?)zUqa95H zVjVhLm?~OLEO4V41m{|q7SN*{ptQ7)t)kc{=+x5WIzgwQHm=F96Le~Y3dCr@G>roXEVKLBA@887g0 z)hSfZlU3+8=)Wq$wU2NHF|+uQX49&SceQ$D{GeQA5!7R*SK017Tr_zvYltN8M#vyJ zmm|E8o+(@O<61|os9&!bGhJS9?8H7v_&Q!seXbhM z^8oSYrt^jQNcjs)tA7;9p{G zjQ!#;( z{hFeY!zg)}v#P)1mXQ>0Th)$fN@U{v9-K#`!fA%adZj+^7(CB3vd!dr*}d;n9;`t~ z=?Dj;l(8PD%}Wenz)S|fq!AzLj%UtWk)ge3x`_$xJxp&^4xXlVmWF=}ILHIFJ zj)CO?D`F|A!9GXsq(pU}LwuBkAwEpP5U-ISAgq$4@x6hCamKSzSzRS>C&NBzcQYA? zkUE|W`?U0QaAIHe6db986#GIB?_kBgkkmV9u@9$EKWXuT!^TczKS0BnqVGrIF?xaG zF_E!#hbD460FGxu7yAZq+urzD1nR8H!jtBCee#pOJ|rCXm`Dt^*RB_QU*2^LCJhSF z-KK}v3y4*%b2a9gt9QX%;+Dh*N*vNd^`sOhem}#o^xbht;&LOuQ#`_MqPis1^XU74l(sXs9^FZcT z&!q$Qs3C0!>}$h24mh+8C$<9Z6gv3<$gYzgM~)0rKAKE$O(Db8Y$}zjm9{csCx&T# zFh5x58F;vEOvf`Ymed0Vt!Lm$T{525jc4F&^Jt@I;I*}9;2IQj2mfdIk4`>ROHL=z zWy2xY+YpP-;g`RJT)Z?kjC5@%G2^lOGn<;niF~{jWWz#HzBNr}ZdX#6gSRs0^_CMg zdAbA^>Km_j2OY)7YAH;{hDRM;116w|?@uOoXvB@_DoA>7u6n-3B1&54ERm1xTwIRr zT-+o(7q~NV>%uBj>pGj!I7__6o7P#PPh(zSqD;{Z2~EdaVo6PivBc_ITf0c6gOg=i z7;b7MN2+jvS@XtqEMenvP|{`X3q^UY3XTf0l>1tw9?H|+b#0X+VsPZp=~0faEbHEU zlU94LRaCiw2Yjsq>6^&J#@4ZLSyM$pf7y2vFpCsPhE*i6^WZHD4)H zK964UH068!dA3NJ#fLwrRwqVGe3B&V7DM2uN99LV9nBz>|%j&U?~>J z1aLjymcTvhhE%25Zgs8@e1wWIP$S)TMW!Vgc;Bqxz>*?UBVosPPpfdsDwhOKc}=2| zqwkT71Ppl;=9|&`( zdI@6OW~XgA{>;`*v)|vg`FrE4?jCd>C3#61mftUQ#xjjly}}VaNMm`ilP8V$ljA1> z|8Yl4AfUZ8DTiBUNYQsUI|{&KB+tL=uFuQ49XT6u)Kdz@d%kh>I|wRyHwfADT3 z!&ui-ELdABO6Dxd3Oy%TVoH!KA~li>m?tD`C#oJo+C%>4E*tH@BEm&~v~RdQ$Ran> zqlIlnmSb>n#e|$LzE0quRgifK0s!GHCn3#!B=eL_GEMO$26|4@b04xLopx%v>a(O$&M!z>0|rdz$r?Dbp2A(j zhCSwi1P5Nfr1cZ!ETGPU%%{8zB3L{Ya48e843S9J36Yq^I*^MQ2p&Q3m(-qKg!iOu)l04V z)NSN3_e)Ju-H^JrQBkMWC?e%G`Z)%(L${EsJd_hwV2-&P`b9Wctzy-U1&!E>yP}O( z`zC9iTA2w6Ej7XBp(cVWnwkiQPbq>BWm}w&z?0FL8Uq-!YY+lQn6MwttG_K)ZnyHs z#Z1!AAjX?Mrdt5%qdAC8m)Gzh7%QeaOsW&%YGOukxmki9%8g0^Z1Qi|& z5KZkjvjr*&T_w4K>H{sJ!f8IJtEVx*;2MBaV{f7i<#mI9)Z>Q+A%X$wQACwog13a~ z%OmDrqx!#aD14MxaEhg{Y$VpE8JP!ioaOUB;$z+>h&9>@FnyjZ@og~eA zJ#~_9L6DJswv;qKk_63IhMpc7IuCh$gQwFDp4EaT4c5VSPC+wIf@b67ZMS<+@FZvA zV>4b?MUX7hy6UxQUG-YYiE?I;p}1@0%tjj58#bmK`&@z3{E91`bIA_ojG3snqGH*} z!mv=B z?A?;2D~%yi%CcH{%;!NeoLv}v0^x@&s`3IpOd<^@QIH{-2Mb7K)g+5hND@y_zU$L) zl%!u4D4IMRxhl`a5=I$SN`B6c)SqkF&h_~WsWKJ3a^PL&)uxqJfxakF-KE_m~Qus2q0Qiz(szTQe`E>ZxM<0&WeYnal$)`!= z(M^gv zaAfeJbq(Gd0>-$}d#HY&=EuWSjzUKg2XG&z?BHoU@Pwiex5DFMl~r>_wj>Fd7ZSfE z?n2yRC0&>o3Fbv&>&P?095GUs!Lqf2G%c>V>fxF<&C5V+u|0f6rG#{?#z9bT?NF~g z*85<>;z^S*P`PzF*@)^?JF2~;X3^b;mv?GqCieKDbbN@ZqAoeW|7Q1658iSNrD z8^!0X%*e10ZXml!Nm_&L1F?FVr0KdQGmVLRqhmB*-WZi6Y04Tl+bWc{JW`eiJ6do4 z=qBUD1+|aE4vT38YpB|~iIOU;b{|0mkAN`|iBcS*4Gsv_Nd<_+Y~2SzO;N#+eZ4>D z-ut~Hjch46$+i!1H22=~J@?#mKIilMe9q^{`Hu@lv*(j+0?y30?E7v1CGGaLX1HAO zj=HhpHSx|UTaPM~e~<5|2Z%P?H`ZdanyU0hw9S(4YbO^Dfjv4k$gP)-M1YfG2)R&2 zP6wO_7N$l38|ToxpAa^FjzL8d)W|_?mWEN@ zLWN)W1)W;wPyJ4@S$d+f9dtsf--MJlWqQ+ArpOOhEXM&3hhkPEGXMGrAfLf*BloV( zjZde1Ovz_flt`)k^%W&4CBLzvq|R7mtemfw^8CgAbK<2>{$9U;kKqUPUs+MYLZ5$m zMTx?({&+>nASM5KMai%ig8oHOrsG6>#}C7cqsaf+mp=2a8@o3kAN;T%qTb?Z2Har4 zc5rpA%|3LU&NVEa@VeNsP8zQw{0g+;R?#Lxz<@^tjR`Boqgldq?1P&GsXJy7-Oth< zh*|_H>vTNcXEi40AM3=fcVJ_DDcTJZgE}M%kW5r0k3WA7alMXr{Ap%BtS7&Ahgp!m zW(5gM!&NupkEuOdX}_X+g`{*`;KV|-o*qD#;;dVv-^EkC+lU`;A}l~&==>F|+%fY& z2RDA?w)2dGwKrf&pcwPmT!QnJ4OwnX_HbKN0dKQXU?<_I7&6gx+r8Ok20|^!Ql9nU z&C8qx9XLA1^lvdPinJy6yjDF%ixzdH(+7j%#vP`y^@IaNS?_n7OnfI`aI_vl!uJ$mZhYAB>rHqtUv5}U)@PC8*9eIxDI-*7hx2nVWfMD$$qBz~_1kHwc3y#;tkA*{!gATXN+otIue?SbKFCm{ zD=VwxlvgUKVs-4CIwDoszYJyiZ}Cs7;Kxav;GgBruP0A&UO-E%5%BlFjQNpgAYM6n!qT;p7YoqB z){az>7vbKPUP=|nuX^5IO@K^Dzu)mMb1t!%d1$n>-wLZuzJl_bm@x>$^GR>O13Df}*kSaJI}7 zs!DAjT|n9Tgbf!4j_7r$0O$)*w~`C2FNIa_oE@SN&Wf=(0cSmS>Q~KpsfEO81-}fc z7}M$wdj)2oxP0=*%(AIbRIbvGnOBPt49Ksnbr@!Bp$%F<6<;D4fdV34iUMK?DA-XJ z5Nx5J_KR~KjqwyK%w{)%_G3yehrcJd_^h#0R#5re2`i{{>6jH%x_#6N`a_djkk1{# z)Uzqmq^~bcr#FYyIzEOSopVhbURD0NpOsbdav-Q#9E$D+10AI8deA;C4UDN&L)PKtZ=-qJ^CA(yDvoIEv&f6`7njI0< zOc_Sp?QYa`N%(+t$qzq|cAWYP=V4eO@lHjT46M-{fb_>iJkl?h z$?7ykh4hoWNAlT1D^n+NFW<3-AhgM)-ccD*NINVZAtv&#`$>AjEhL|#XN@NaJAZmJ zPZ!E385%E@Jhapyx>`6l;B0+hsCm7>Ar8cV!*Rl^1LxzvW57A`+uv~D2uyDraM&7Y z!1*hN)3{#ffNlnz;cG$XuU^FrN&UHRJalr^=?y|1e1{c2^37r%@(?0`;A;N&M2s{3 zFn|q5KmMdZJmZ(kg3pJ7%VohiUg>^Ot8W!GbzLsguBoOXBm;F?=z|gL`l9GcHT5=H zhHx{|gJiQZ^Kr1OMO9r3YE@KK#B(t4*P3#x3`7^uue#Li?`U4lAz(?!On0-Wg1qZp z_pRm*;A-xGZ!vAoTmr}ps^i2~@J5-OtT*Dmg?HIlrkG;!Uqy5jty$z7+p=LzMUjG( zQO5~@cM8zhp6tu5df2NBb=H+8^o0>E22~Oy$Js1pS_~qs4Q|H?xY&pmgS3ks0n}B0 z1x%ERo&-=4g3{9$cPU!V_Qh*AKNGJF@%WmZ>)nTrxhSun?IAVbj>{mlNLreuvZD11 zgHYQ8{E^Zi6leq)CFT?$+{o7n6e}XcE1*Dg|9XJJrV~rKH*6EyQ(BmwX>4JZ!>vuB zOz(X_2&=^M`2mEkVtlJJVqlzc-TUOn6|kq7f8Lv=7Cy6Sp&2+~J|IL&Y_O~*qtYP= zd0J3z`^%C%lmT$0S0P}gAN)3_hj*Yls#)-4xJ+)7Siw40D>)kWhqb($iFhHG{)RA6W*XZ90d z+_}0iwWj1h4yQIN9eA{bnM!3tgSawe`wf?LgNlo3Ji}mC!?>>p^{v>YJxDORcW6tA1nsv5jCcognSx#qOgH@PgvUO$BC@Pqr zqed%$OS=_CD-0!=$tXm@)@)q^>wz?$`O=tVQwysD5v5nj8v?(I$$U0OK+q>SlMx}G zNO`ni5|b21Yy*u+kiu`6%NO=%1^FUqt8OyAJvqe3&d`MwQV%^HOS0Mv1r7FU#!C#R zW%_oNwOJG|f%P=EUF28}q@I7u3T`*G+-f{&1@rxaR}r>dR!DL_RqQu9(H|+^oUWVZ zcUW|KRu5po3k+XL*;`!X2r_|*qZE<15dEMHjJk4L^#EgEj0$93t@ji{Rt$|WMkt`? zFVL4_?^I7l8dWi1D)2H_jtyHpmNaalcb84T^(SP>YtH4IW8tqjG*BE>ww5ZI!>Oz2 zWed1xHEtwCWUMt)eu8~qV1ht_^|RJ&`4O)DeRyllm{(2-oLXhQMW$txGN!OB!%Xe5 z#Y|hu$}%i^W^}E8p;Csy%apFwEEe_L+BqW3wx|2y9c#_Bk8Ippb6P7;$675g<-R-~ zE@7EX2uRjxoE~_SiYG!oT;bPT>kso(xHQ*l8LBkU*J|;pG~7`Gc`B^JwdPJ(n|mki zBQge+SEJ~%siJFhG_o4lg476zW(Amo6a-XM0i(nTASaS;wSSfj`D^X$J)luKoA@|g z0cPlB#k`!d5wC}#!B6Z#0y&T+RbClwe`DZu|gDx9=m0}q9Py?kX}1wg(m zK*==Vmj$Sy2LG}^RQ)ChC#P!b(kXMAw9R{A^HbKA_6!&+os#!rt(odzg~sINy;y7J zdQl?p#ac7jixRPpH$l6CsJ$fCLEgcBfmp|zkPbx+_a?hLWI_5;Gv>Jy8n+jn{5oM^1h0cDPl*xjh z+$R6FxudL_%L&0AU{FRQ_JF!%8W^c{HXxUvJ<7KhB{@-O0z4i56Oy0c)8G3f;CV9a3*)nLt`P0Qt2 zanxb5n9H%^%!3Pp;4^)s8Oxo8J91}XM51p7!7eTVmX_u84R>s3%S-8GQObc_FM=HqB?y;Z`Dr$l6VaboaZM3Gl zEDhNf#C5xsJ33f34D^y)XQt>dIwimTO6rDfjY*V;_s&2K+$z9k&FLy&YXbV)Py(e;8n`D2o%zig5h^$`b2@__%~o)eK3NarI@r3hRRGpaiw@IV7xUPkl*mN zrW|;RZjg7;zMxs|x32l^x2&06rPUwI8wG3njn=7qf`0U;=@d_WnpozkShy{Ke@sTy zxE$xhq73!u6X4~2tbHyzNr7RxatLgI2?c33ELTn;2?#NmGu?Dvd&2DL0?e!yZjW(0 z6K=)g^bLd*e5BkMGAtp*Np_Xi5mE;7@^eUe8&_Gt_c>{*@{0A4(d9yYSd5)2;6eEg zERvGSC}hz)`le`gQQvAriQOkoLYN|>+?MSx_)kF24%=vQ^cn@zK+oZNl!tOX%e|y|f7^DI@Q7shJE*@mTRW=BGa@B_Wg7wxoxg=S*lDf zOX5wDcLN~*I=L(b4>EPma>4Kv&hi9$7#$G54;|zXng>E4V1J%?2LCD$0TuSJK4t7Y zgdJhhkB0!^_rRElXwq@>gK;DnAxrtXQL!v5;}vFF$rqC6*0%hEt@i&<1}Jw3-8`*m zU!!(C8ZBEhhPd`svrhS~wJpnnc#;9e*W;DpjQNGIu_3I%>71dPP2K)ivg5HAtp3A?0tL#hGW zAp1;VFot!A!~6$@#=HT;F2s&;lRkJEZVq1ih@yx!QdslVBbAp8>J2`I@&;_UV%&-= zeC@H@iLOR-W>(Nd4udPk4rG^=k_EN+9AOqCD~$(?aunJX#=`}QWMWi|hnFaliQx)O zm=$!26xC3PD8TGR#aR)cfZ^LyRKt$)#oX#R%i5ngGS(XoND&L*Lwvm)C~#H~dtjmfQMfpv_-7GE_h6?3dG2m20?+#Cc~a_+Dp#9xC?WdR(aSxsSnig5_?er$1aS@*nw!?*pQ}LW}Wdl)`38lRRyNcr#$Ax>v!HVQn zI^h0Rj;7<%DGTN?F03vxzKl!PD)OU@OVKLwqu5t)WGJE-@1-kJrHtE>cfpp%Er(5! z?qFPjcdlN3Rj#{&o3$84Ajl!@q5w_!ORP^b=cJY7C`FEy%CTwIMFTi8fENk;Dd(V? z9ED_mtOnR74Yx*DtBujt{neC5X1Wg6^=H~#R09-M&>_#WO z@kBM!2Q;acsHT9UC8{X^XNhVGn7&4$nz64VSkc+Pd0=gPQ^C6C>j+l1sD1OmN|GZe z2M^y3q*Z$3u+T(N;t;l~ z?HeMXXnJOadQ>P%$Yj>w|H8IyO~VX=Bht>@&AT=&HRxgObu*t^HY{sVPD|}rC9Sc< zvF+TWu!c%H6nHiX4IG-g+RoE40T~$Lhl?#h ze9nBNmV%drM8O0n5>Y1jiclGq$pqJa8#Fr?p*UF7(4ch4=}Oq@pfpVTe9p25Sv%#E zGQbA4D{+Pk9dqGn8g-XkMr;vbh*?{%h-vdhN9>j$f<5eiRYEKUb4*Li#r0(R7`+cU z=ZOq`2!P3Ri^if6Wr+;lYrzHKdcBZIf^(u7Ak$zgCy=QmVNe#Q#2~|tb+oP~kV#$( zGKG*_0Ts4vR-nRD0Tqp+A0(Do9E(!c79d*F{Zz^WnmZ?3OnYemGIOlOFZwYp#eu&# zp1Yr>+HCT?wqo7ScUjPTM+Hm&gGoxw$lt(oU`ZDqp=2$SCFLa@tB9;pcKlA}k@R#BQKF-KBE_M2fIed*d zBjUm4EHW=Nd+W$d-jMRVAoFDa&%Dxt9M#~)@2R2#k4Kz7B%3)(?yuJ%^|7LYD^`{h}o=z z-}oL_(2TLfoaj#Glh$*4Y5NThJ} z;veIuh_gDN7^*hLe{9hh;T_zfTHsmy zV!ps5-%}fFKsIR`WWfXAyBX>^(o2C=Rq|uku(CGfyx2Sf>8bvJ&ZHbGLL;`NCyQ|c zTZ&Vd9kM|)*5ShZwYcDCt06FcGNef zv@;5?BD_gsF+sTYJ7`2ubYHk?!~{xz@|Ev z1yF&xbwYu87AAX%d=2t1MfjH@O0MD@wywcL~WBNc)5ocwb*4 zc%_EPmqf*~wPH^=ZH>$}DVbvaS8EP#?tdgSyd{g=_v!hchF@5<)Amw6`S~Xa7O=Edx6b(lzO69*pPzV{oL^*Ql z>lPPh3%Qp4Rsie%PVk?STo`^TcTxduf7S|E0ti^zQfwwQ@C_CPEO1kRXD}~d8njKL zFvznE9cVrOCfH!IM6`}$p`vBUI0zx(J3U0g!%B=aBGI%?ZrSkl{(SZC#P}?m?z)go zm&fTI91%$g#X)I6W!kyin&Q_<7voF=m`xb0WDlg~%urMU^r8UdQ!wHpXPnED8n$y( z(CXw=;{+CMJ$NshiCHsm`%`78)`-@kNIfVkjt!F3HALH`+g2~qwr^<2X;_WE40IC5 z4dl8>LiHvDHgz1+X=Q8y%rhk^PZ|0{$doip1!kLiG{$U}mZEeOdb*GNB3$M{IWDuT zdU8?fM`zR8^cSLXz&5WJPDZOG@?8U|qrpeuZG9CBIUKRUA~keBfG(CF z(Qe9veO6cjf|+XJ^wpxkxj8;&YKPEOiVK6A;lh)1*?kOpQF?I{X5T|d#S&q}T&G%_ zPHc%#({JhUB?KiMgJ>L59={{G0Hz~t%xiUSBUY^+)QJ0vAqXDDW* z(hXBfsExodK$ZAv{!W-Vr~6nV!hpAGQ=^zWR;;rS^TKj)3Lgf)t;HPhq(n=`C3>uKU&)@dT(p8gF|G=O0!o<$z*%IjF{lwSs1;`bK@#Suf-J$W z2;V`z@y{4kvG`)lsaUUJTz$r5hn9Pv<5ju*^|NJfHVz@kXlRZhuel#$R=g|2vBn^ zEA4o>4jBZSoNz76#M~-UY=Frv^Y6Bb6dP8enD|x^aBC%sS8o+zxmKcpby_R^A+#C6 zL~^OqvL(1;ovvj|aD{iWWlM0yY7x-ly<#D$Weaizz5peDD@;-w*E0yJe-spM*(G;z z3l(YMlbDx@ECxR#{^178Mx+NJGc0?Iw$pT7=RSmFi%YS`F(TiDQ6Y{cu{@-$+OZwvS%f}DKw&X zxv6acC8=HXTCQK*gtE9Q<071+99L0eDCdm%w}Ih`ulojSps98GmU*kfNbDeIVt>Ol ziv&?lQsz_&7%0hWDg`YSesl)fo?yiPS$s(g@i(WWYT2|@sTN1q>vXYwGDY$^K8@% zQe>0tDmZJt($|Yngi8J$^FN@G`=dR%21NiOev}+|GPzSeHD$r|05Z)bSN zU^0OXa5g0EO8e75M4@1;$TToQ!wyhTlOE;`?Rq-!fEI5;Qr_`{K_v>DF&KmZp%b3F zQh}L$yv4RD)SqLsh9xKiYPe?3$6>RM1-|rRwwUI6?k&Io;d9Fzta-n?r4-mwe_mjz z?G|-Yj9NX5B*Rf)M-;nCLGWc(3SfQsGAjl0G+3V@Bh*hk3;yEgi>+zbcDok1Z7$bBO}a@~Uyy)x zuON=1YiMb~J#Z5OhMs5{t0)LvD+(k~Thfv)#$2DsQ$f7QgJ1fM&(mdvegS)bgeUIU zK;fU^w)d3U%x_Z6>~Mev~&og_1*p@Dx=*_Cxjf`3Ja8`_`^n9?K!P(LY@&kwPiWB2Q$50kT(Y7TTz|3phOQVAd3yhBo@6lr|^@pym6=C`%{< zq-EI&$^eoFsAU;0%$@)OSc@_S1u)GeNUzX@4S@O;iry%R%U@AWQG&>&1OS#L$XrSQ zU|E9Dr33($B}nUnLN?0WFKB0@Bz-|u8>I&nCd@`@355l-QPKT{0Yl5QU$~n#Y6Nny zJ?!jOE~PHFaQP0GcM|vv7~Fq^NiG-Gyk2a_V!;(J;?+fEsNYN1|VrH-%$AUj-1=FwlMHLD>?(DaM&oGQp5 zk*0&cM_x4sO@pD|7z?N`JWIw(eQ7!vJL;nJmKGPZ7&IH@9gifuQ1BgR$w+reWcNtJ zEcDTu**y_pD2MNAX7m^=0s1Z$t7jrOjj8=V1YcHOlT6^LZ;i$g*~tU68$bG1Tl;R` z_hil#x4CvXGs;jqBO1`MboWar;N351c^REh3)X7PR9_ZB=E$wEUtw8ozf%fv6uCCz zi*9pL{D(H<{$(FM9$tgJE*3#v2cX>_AcP$-A*81P3tyXywr!7Mx;L;uJBb8%+iyQG z7e(87Mlm+kPAak*w+EYxwy}2hF%^U0cI6nps4@J8#sIZkV+@n4k3k^s?y|P15QjBCW7~l!EF<$ZWV4+bZVfL?Kg35!|lk!+GLAPLn z8ts}F4ob8+E=|w{Fff>)!H`nbEx`ocg8q*t&V2TgV1jPZ*J~N?*jHei;_A6YWf&~n zE(h{6sgQZ)U}{F?$ODFG8Y*6Q(FO{+lr~CrAcjmRTk2qgoU#;i&q}H;tgRUj;kLzF zn3!;ZpmgG3Gj;;!Va=fXGgpIAPFomLwgqz1aUFxAr|bPMklJRES|n1V(>bYa1_=7} z=0FfUc6#eEZZ`)_ZWMjvOs;PLj@4_&MeS~-w%Z)SA1%y-_c+@oC#h&_B-=Zhi{k8i z=?Y0|C}?swDx%8X#od72?avz~^aA;VM1-alhkj>^EY<5LvP4%5zVU&cXqYm;)l_237-Wt9r!CpLxK7> zyLiA?&aMog*O^@jpli);qcXcS&2A?ju4xrFFuUYM-vJsjyR0j&I@U)VWI~#&M|Hfw zAjsMMpu*~Ab(MSJzizZ1cwlIh(I7Hco9EVQ^GrbRHxI2fM}G|}&WC#=RE+I<{b>CL zGA%>v#@9I99IY8{Obgeh;sUeleNC+*LQ3teQnt$t+JdYto69APQ#ETN0|~k`o${ff z^OP^=kdY~C^6JzJNslZthvrZR2Q^X+wJ^ja78?`m zjb>|Lu&otPT0%rf)xwBM_GGA`t`-74^c5OM%}_U-!k174uIj7nMGp;4g}zR&)>laV zi4@WI+TWtq7t+oYK|bOQQb6Ad1Q=7UR}^DfbB!^zJ43@G-BA)ZNIOw%u{27#OcK;9 zML$?MK~4$MM~aU5~+0r}D$(stO206uWj!j%X@#F^47f)|oRtgPPN&oD1f zF$xizBX9!Wu1_P&%(JycUZ-MD?iRUq3M+OCihwfu5If*GpMAz{ksr0i1=(KgT^8AwDHy zhvI4g1{|j$k#4j~A`q4!*pfFr%nIpIC^SD5@9X))%c5p9X zSP!Hd-Ek|@E_n5m@1=(h@Ez^Jmvp-^a0(xd&6*u(1-=#MnVIw%~wf5cTz-*>9F;M&qxGX1|$SiD&UO z@C9 z!g&Tc;^8_{V4Xi)-d+A=fs@CIGG4h(aidLWqCupFJ_LCDIV4T@*CaK{R$fo|tkTNi zvXzw{3|4U1*F@R4Fj+d!7JU_zgAxxCxCX}+=XG*D6b=OHb$VM?cZXm_;OJ`>P0E=d z36wh~svZd>yW*|HI7V!hw&G%7O&%a|6$ zsiX39$b(V0E?m(%c_^^r+HN7V&a9|)$V0wj2p^YM+=Fx2AsQ4h*eCJ z;6N$;rRlCvf-90C<-Qa90{!XWUpGf2tPtJ`(PQ~lm{fJ+!K8RRxXR+ zo_LotV;6oUV|PEV^PZOY5E!|8qK2;2i{zG2`MvVin=Pxw;&c`kfGwNy%i6wcqUJXu z0OeGV^bQ_RI+r^tkdG#2hLBv%g$R|~59ky(muF(*PAZEShgM=H zAYgEs<=93LD_~*gELxf%fekn;x;6Vm1!z>m8gyBJQEW-f$^yi&@Gm?|Gk-(dL&G=s zx}5ExC#%C<6@-;waU78uD-&9c$O!%Y@Rh@RgZpFDhBzm}xRR?@$)iB#;Yvc=VL^4D zVhf|Pt{$41nuEh3;15v%|dTsCThq6Um zdkw3)J>ya<*M58EWX)lyB^9m7+J1*2mw#UCk~NoqR|}U-mw!-eo7%TwU)ScCU!KK&*S^)piJ-BRvAt$9eSlmpY;>tP7T9ugo_n7zM9XWrLPIBXrOs(xpM8Fr+f#Yb zvHW_JD?gs!h)6l9vZHG`rWTbaMq6;i1ToLKkBc8qYz9@KcXW-L4tf+Vf6t=?%GlevCZn)DP5=7xN7gNy&99zm|FB1mg5`+ zaZ$hmlocdJL7Eq&MFD|PRs)}SXrrDN)Qf^fUO+%BDw#&ABxase5O_(RVrv2{+rG@| zvm!Jb{_wwgF7jh~VpkZPe6$v!qtx?#Og6T1jQ2J(8D58+nSx{WEmR!UXElN64hXa;-X% zYb5LOWIb$Us07jvm*NCn1MSfI-96vH*g@0HTRVPrYtoHEV~bOHW7f=7jm#$BFG{47 z@21xVP%8pNc@e=oQKrv@2I@IYD9FKj<0JpMsJk|R%pz1GXY7>*4#(nBq0{S8+*OIV zKn_wCr>eWeG~p#Cj~g)Qb6SemobEcvAGkEYmc#-)b2KJ*noVnS#k3L#Ytt(5fZYb+ zQ&+=83F=A!OMHBP0e06#*-%_)eur*uZzCIWFqf=KPN2 z2f0zge8cYUr-3gKpom^B4+qo$!@KWh$_WVt9XgnMygru@7OHU|DC?g60wo>@V>Dfl zXxthrVZs{gIHAtH@qj#9k!9M{V%+^4M7;{wixFNDt*OTqLIi48;KM&L&hY(#nnftW zQT4oMBMIg2P`P%)+z4fsIC#Yu!9Y4i{_D{8+X|MlLw*j*?eQVnGCw z-1$1q>`*g1teKr^=1$X47}1e^J=sCrJ-siq(fv@2`ZgU@Ro;s2Eh;SSdn=J{R+G22 z5Wmg*;_ZHCFsj||JCbFrboUl4a9wv`e(QQCrnas-vCubTwd_O-*v7*A3?X^a8E{dX z4lBi3@x;OICN)GyVb`f&9L0U3MbS?s=H12E?wDRhB=aG3Y@S;^nZdizrN@;VVVuQn zelSJVlyAjxGI|Ss)+^Kwb=iHqT3wBt3ai?eHaivjlFt(qU~XtFG|Mq3yPZGfL4Hm1 zKw-7dDfob4OCPFjPi_A^nsWEkNw!n3ZIk12r-Chk_9<{K+@0L~Inz%<3I7+1%84e{VRGp z_u1vB`v>yimq>_vBgaCwBUqV0noh4Y$#e6k=p!R6FtO;aHZir#`(&sUs|T`c-pfeB zFMu_tAh{U$u67jhMqCu*n`jr5-Nla}FGn0{=Nq<{ zd^-znof2!rkN38)RTPSf9Kp=m5KN&?)!Y)+wI0oy=`P1Q9X{5r5sM>O(vhCVd6KC= z?h;){YrzNK_nrf|UsX>o4bl&WCsp7@UD%AE)>+KL_1H6~0LOIrgjtB3HC%osH2Hot zsRb~-O*34ylaDQSafr+c11EGujYG^VPF0E7=!&hY+9$UPG3T!YVx}(su+{3mE-`CI zUaxK3j?ddi)s38(orqb>WVyBLM9f+y%Zb@3*@O}E5XFI*2?BM2nAznUsO)Q}Wgo~= z4k73>&@z%IkcSu6QVdytr>>Co!@5G&cZcfPeY!%{-YUZPBNZ&|3$E%Vl62dKhPS%6 zJ(j&qKRvyV8CKj0UB3lK@y-bUpToxt{>jBW#RU&DsfOfWCVLP5WfmG^+{=+BDkUN+ zpY)WLWVavL2NeWS=~C2*=}%ohyU|9dkZ%^k*#-HmzVZs`%22R zir=Y94^zqW?`|sIN5wfwvi)vffQ;fCcPc62t=gc{;zC~|9o}Od>9xC$Ba?QC@K}3# z`BsYM?yZA}CmR-Pk@_!xn>^oNy7hqnl@RTfx_2x@7r#v}ZjE|AdH|T=L|=&hfHJ?7 zX~Qn=nvdX1*?*rq{E=SV{htNVvopBSbQTV^@Hn&nG2l<7`BzTk(oOyItl~Css!)iJ zzmR%GB{_yqv6OF}4*jk6bZhj*Tj2t!|BCha-_v8va)n2wo&|?5tH%(bdYO+v{bX6Y z?B0;a5e$OKH4cJQy7!_MOhU(|jP}bu0oU{FJ-J4o{3YwlOSjtYFQi`TFI&l_O35Ny zCMmC!9JZ3h+xl-US;^r_$q_4As+1hHk|X^Rsc{!><>*aK%oEAZ*kDl19!n`-yw%`w zB^>^Cn5GpFcz(Sg@InF5vplB$_~wEkp!=|5vzZNnnzy4>)z7_v9KCN;|> z4%>%LYz|theRrEaL5N^8j`TmRW`PiQB**8uo;{}(l4IP;%XX40g%?<*3NFP94fzzI zTS~ z?|qbCA6tk%rY_*XeB58qqZ;C|@pxI`qw_wM=r?3OHt%hzq1wVn%U6~|3*Pc2RIB{k zP-V^I>=a)0BmG_!{o=E=cK0T^;Tb3yr=&4x$Ph}yW&}Mp8%lR2nipWo+M1+Zm~?gt z>B+W%M1oTT_!!`G*pPC=V8hj5qZAxDY#QaztyhheuxYFg8)S7KHvJY1HulODu<2JZ z*fjhK*sSEPXvp#rYUKtru&%$M{9~e700Xq=>VrOM6aC2SCa(SDXXPuI#Gq6Xlb%=kC z+VZVisGa=&T3<=|-Gpa`!No|4fianBtsziM17PWmejxj@Y=6K$EsILny~sMb38Bbm zqCK!~A^J%;jPXNbH6NgfC1pG3{GS;}taDv>Z^IY<`JbeEe4dvi09 zT)FEG_BPE#Zj-;TMzbpUCx(D*{b1rYIqsW1zWFC>sB(UdgzF}MX-xsBO%h4R*HMw{ zhjraFm%OxQdwP!gbIB`fvUlnF>KX>NiK80FNN2+J!Ws-Xt{2y!6>jp!h9yon`NLxe z{4s?dPwBf2aA}i&s(zsR5qjd6ng_Zc)eXTb=BPLLZc^0AG~Xqe$s`w|^{Td*XPR<*#P(jZJ>Be&9a1w1$sDt1irxBhwF;>76lU;CrdK7hivg2XXIb zc*nIDq7Uf`ZnIEoAebg#9!@f+y~(|4F$uJBn`1>Ze_NMEU*(;I7$x5Om6R=*d{8rk))J{j}2Dky;G8%_f&gNc|AwL!+ZR^!ZZlBIO37{AL`AkfGkeUgd;(fg^#sh5Zx0BwktUl0 z9(X+D#c0XnK|uZi{%A{0HU*5_ycmXHp?B%Z{DWj5(cAPo!NNo#Kqe93ATA@k}GK(WHX?P z>XZT;J8lZJnBTjhH$|cnaxUPdaq|F_EGZEWQ+v!n8)Ss$W^>KmH3Vyy?K*t1?zV7T zsv4zo(~WEMfbmj$I>-;*Pv8hdUMu2?hGonQLeAo^9nBW4>%O^ zgPm-6U`I#>VLt}DL4)0dV26qB27z5uuxl2u+fu@=UcgRYtUDdbki(9&O%>SjbT#ZO zCVUGxTEdQ21iQfp*$=4}39<&cO4xy~f;tFc4uAn(#7=5UYPTRZz~B@=t;Op;dCc>4 z^ym7-!igXy>FBo;*Z6I4#c#AN2H+YRRDgFwECAxiDJ4%v;016&f=MNzn_V_;HDP23 zU*TxvTtFG3odwGvl3N7^kbn^0BIYX2)&0k&Z;Ge(d%M7R*;KwxX74&TDvA`Xi61w* z|E%Cl*3<5f#{n;%9hToj0VQ1EXo2q}63~tAkysdMEp-3);*Pfdxq1S(kGQ~+yZ=@a z@9B=D#bVej!$-s-8{#I&obHpx;k1c|UvT_{k3Yr9jbg==EnyvtKSaDR;G)qOhN1W( zCh;~Lf|clQQZoe#TOQ}|a}dTGtoW`248ial zXR)@4@$D&X!k)6J;5&~p+Sh108`lUCt%p0Dq|xxlN@yMxdlOWf0z(+>$!4LMX(CRd zdh}G~WM1`@RaMC{V#T0*rYt%#EN;$k&kW1`gsp>qqQh6f$LY|l&~O@DG7yM6!Mu1O z=hRBQYMqqNV_JP)@nS%lpE9I5u}={x+AEHDYI{bllw5=;O-Qi()n?)VtYRxGxvAL!?*^(3=&p zzHGwNv>(0D(w_mV*8LYTR~_hb&F+?+t%Z)F0p>kDQS|gMMg6YM+4(N%Vx3N%CZLk` zn*|tdR_;woP`L6?(whNHdaSuUIi9$iW$8s4i|U{aUNMRQxf$(P0-_2P(pQa=;5$Z1 z6c{COg^~giP_x@>2+E*(7MW2g5iPjkIZ)rkawOci&3%;R5Acif2gDsrj!O2X`7e!D zp)yHH7#Ue9i~{%+n+y~Cq*?@{Y@|B*rp5>fPtriaxg2o+)r}3r0h~FsUVCh9W^=hI z(!kC-Hs5>D6YnU`*wNd}?}PtiIpER=giW3E8#N)^ytpy{fSFAFAFU<(5v%I@mdW@W zHgYy0dyDi5Q|gWRCzZ+?)k=A;wS5)F&bGLJXjnBB?7GxV$)B^Ns}5;9%#Bd>Nv>2! z>qcD!C8m_q3iWP0INoulqs+r%r)&o$Xair4cRSR`BPp6PPR=9Rts`}r%M@XRX)m&z zlUvb51|(o9%8!EitWVpsZ`RpA%mYM zdM_(SS{j65n#R+#Tzpn?u=tqAUNsd>O}|<;t?izczLR~fHN)~LJ3MmAbCywWfbj{b zr*yUu!!1(3gC8Xh73cpaD3D++Z z0?Ij4`AC~iXU?hGdH9s=JI2jAq5g!#TK2?H%E^9w zkvUcZ7|iD3}-p?Hoq;&Nv^r<@IVPCgr0@=5WU)tLg- zAv-h#A4_3*PAiS(2=7JRUlDW}Xzn!M8l4-@z6;M9WOsQi=oYr-`RZ6$-dr?IBbCjb z`d7zDZH^C?#YF1w3N`L;XPbPIfz0~PL*cW@xv}0oQVf*aSEn9ncXbpe+KdMQZjD|T zBfk~Glc0D-_^1AhW3~ksAf^6~Lea%B?FPF8%#|l7`ob6pv$uHJ-6NBWFTFCB&GF7< zv=J_scqbsF-br8LolCY9b9fvx*G742ToQmcm&d~@&FOrEJ2;X(jP4Qrd{_8&M?1Tj z(QT`aZb^~XjE?2!D@V7@b{C9i_k__c;_szfKgBk%$dDrSKOBmlMUGTP_v7Q+Q@ovk z=4oEWHs5BWJ2{?B^ZsGw(}8c5YiBmPW4yDtM}0jzo(+Z$+7$5XY_d3tXQCdapq`&o z!Z9T^!vzG<(jH|p2rfiJ4qtn$`=jt*e-fu6PN>lX;qjULiyQ91&>hKVc(%W^~0=d}uVd z9K)+j1$GR6$uQ(&)Xfph|C>Hwpm^b_KOTx`w=%iuQCd79fQ&Ch&*;jTct--T_J=1emR~%_)biJPibY0Q*PIL9L5%$Q`L*@i;D6t*PUvT_BGm19`NF5o? zSkFK*jAl;PrO^zh<<{tZIo-OC+SxkQKQ@+ap~~|H zEC3*$5|+dyTK6!WHU5q8?=Ae(ku3;R{bvr6kdd1uNG6%0CRStb?WBd^?)U%r)b!rR z(CVbWWsP!+I_r=%_ja#r2zN^9YclfGLEka$5T=-y&{vHT`KriW-pAAJi3HMZEwmg)Ny?P{dTd!Dx&Be`jJ z{Z;KIMZ4>VBHD$0*4g$xfyMW87UlAm{Jxzn$R-@mI=XN!2A||+viBV#8q}2Hd*4wV zNBfHJeMf&BZN5jY1rpZUw{ZK8xI5)Da>zBD1(L2E+lv?OutvTk++l@)d-@gZ$ji`L zZI5$D0@sZAj#TzgCX|)bMk7|vZ7wwg9YRW`p20^q(7H-S!Q8-hLi*`0s!INe< zR7l;Hh3NS=1++h_Ri<^2fvy~QvaIW7$Us*Ha7x#VI1*iVEJUB>JzHgSdvY^EIrEII z1Xgl#G!V&&Q6aUllLcLmjfSwDXGgU|j2&d7T0O>o9A!Wd!7q-X1aUn*meJnU=$G)K z7c3Vtv=nm*Ib-=2JG?|g{u!=sQFpk4z{;kc%Hpf%lr|lDG$}&1-C_3D>CNFS7E8ig zgZ#*Z6>rUix9~OTtqV|~z6H;=Z;2x9TLTmlZ&AE8AKsb`>-I~V!dn+NhPPOl2yeA` zi|v2KTepX|wka7GWB%kQ7|L~dG{E3FgVEOLS8^DAcoY*DyF(zK$2mxBQW@?wO#_-{|MXFVGYCKEY#1PIPuih>d}< zyE_;B7j#Ab-OdHhu#L+Wt2XNv2Er`oEyCNui9F;&q|=g}ovZBUucsu#;HjmnkRg#`p+EV6b3{PpHD; zo}gq~6xXP%Qlx7bTW$|?1~k!`ZFM0M&wNsnv-q}O;;HaGa9Ywr^a`q~Xzh}&_bfyw z0j?H@Pv|;Nc#f`{Sk%>ZH;cx)5=nhT*E!Av*OiXJc%na58{D7Y$XVT#`!js4S$_K$ zd9r-l)~|Cs<=#AMzQR-Lf2<0o={u4a)c7M7<(0ad??_(M^V^6!(sdBdrR#SsM3;2s z!)(-!em1|yKuFKp{cNq-!=LKhrCxCBt7jv!o{vE^UEufNh?rg#K0Pqom5ECCgV!C?b@E&j3*m_zWF z>4Yr{RKlJYxJ%4|*1%cT8+uS)GV`7dnfDCb$h~Ls4+ZZT zZiwU0!No0yic)Jor6*fU=2iS?4K)$`XwAMKtx@{X!qOFfw4vhbeLva|JC$tvsvoTgRe3Ex+9)G<9X}clO)ANcHXi(F>-&DRQDkw&kG9_AIDWM8iXUzKntrtL zH`I@2`6V#HzYcyhIn9C__d5J&cxG8P3tr9Z^`jmA6dZdOpe*^>E(7I}-O%8LZ-+~j zMCTV5lx3hK%A@y)I}q8J$2CHBe;cmgDST0>S5d>(ALs{2o`w`DBTlmXlxY4wUVHG4 z3bJ}l>{>zW<|-cQbOB~>6moh{EI@FDP)d=iaEm7EF-l5GqOLT~h2 zrtFHAkpMT`GD=mAmYdr3fUSOid@a~@V|M1;= zH}KKq!3_q#&_Z?(O-Ts-A-+eq&8DEVK8}p}78;0HS(In3hY+;d6aed&#!N@O70v9^ zgqSMg8o5?O9aNOrdu5KizV^o9o2I@AaDAQ8_CC3(p!Wf0^`YWiCJ;#rTI?J-*xP1A zft<0ho+;A=Q-AK)l@dt0R!sBKp1`YHsTBGq+!{7~6py~< z7!8r-7UC~g#oZWRY88(~Nco3q76lFNyzg7LY1k(Qm$nQYv0Y{m^e7RA*vPsBlqZv|HUlj^WxSAhEgF6w-?wzqk{*yS4`Ol&wU}1=(p`O z7TC->$(6qmr~pbP-JcF=FcAY%*b&$N{5eo^7RqGh?{;R3WxicpB5>v77KC_dEz#VQ zRy0Y-(>8v>F~$ylHlLX{FH%hMY#x%VAu7g=tA!+U4I#qU3w2-42_r=ilBJYO$+jclO6 z%^W0rM2QOtHB|C6d+NXs^q;1jBPOnI%F{P~%G1Bzl<#9SWJoR|_-)P$GzfE!n*ZPa zoTs)`sxs%uSIxQOlFEv;r%AY=;(?X<@mc7{k9J>$rTU-My(Ln?O69)$`wjoR$|R*H z%d+mDz~b?8LnT~7f>Ulf;W-?*CZ-~}BVn8~>++^xO2@=TPl=8Gn`V1sMBie+_+`re z;t%*^EbI91^Xswl*XMckXY}W!{@AY{tuoSoT5`OzYW#fO__yYb|9i@6{#7xD$D!O4ph)cyaV3z5%U#7*;dF6-l1j=EgbpS&GX%jl`Ac0M1IoGP%` z1Qv@40f%)|JrMI~`E ze>ATLA*-plXv!+)(+5X5@R|*l(_C%PzGbtGZZ{LP|1Lr{j3r?#sDF|Y>Vx_f`{SCn z!2r@4@4l?Ld{uwI7h3R7euaC3S}OK=zzdMwuL||7{ePB7Fu{!a|JiPm;a0sK*Xv;^ zl#jMh6NGR*rOr>X7=0p^Pb}6JZj?P~5bzV+?bIU7s8p=NbHG!=e&}QfjgdA$vocOs zl#q(G`7#Y2VcB)2iu&=;X?WjlH zKaKgr!`1?oUZ)49CAIHeIZOV@-(E((k+D@uY0L8g6ghtqjOUI?u)Ek_q+0hsqOFaB zri|7)4_tq^+5XccZoR+nz1EiUUh|gt)?!&V+2t>SZRp5#K*1t{G+qK|sUjW&5PB`o zj@VwhGuCdyj-t{N&h8@`wsFvntKgDg%C=sY!aR3Ze*cTmF)@2)T^x#tP{XdxP06Gh2I6R=K!pK zhC4s&so0|);8;x&K%ZnYfy3nHsa`g2}?&gzfxnNzwmqI*VnOZu~@KbOU|Ueccn z`g2ZyKBGTp_|si(w&z33&wW{CVtuD|cU*ryqCd~*&k}#SpDcCYOJAYv5B2AQ{`{u? ze3n1mPdD55tVB7Xj{YCm!qO#b4*Q?hC8zsmx$pjEN%y%5u2R^lRUGzuO+5G67^Ywt z87Qe$rFuRB#;rVh5G&$J9$=)cpL{(C!Q$H*#&)P)PNMSzZYXSxzDt z!#sGyD7Pq^9r|cDt$;vivv8@v2LDW=Be0r~)mQA0K}uKFs%1iYMH$kGf8xo*-At)g z{iVMIcC-G;uL3lomi@eFKeM<4t0Gb^hEZV;FXr(@be2_HF={62tX&tPyXX~)!VZ-# zM0e=2Ge)ge9W-ZCsDE&~>D%IkZ18cE+F^nA#+vX36k-v0En%>R24OmFK0${g5s0SvgY@9mNQi;K`B;YbqU_AnW#!!``UxHtHq=lMTY=JH zx2y$N6Idgj#nOki9%n5dII}IcNpsCa~~$CV~Rh)M*k7pCe=Ww|9eB zDP6|epbKJ-q@Lt`dP94BDFN4T3na z>@D>fJmG{5YmNl`V#xX?Exl&XhVo9yc>=zugJ_;WK)tiZQm_Ax{YTJIZrW0KP$=8P zLKkNNK7cx3(Z|GOMzgIYwxi(?G6-wt2ux3dtzwiQ7Q z+e78!9Y`W(kyYz%{de#N=^eSh^4c%_p=wKWinoG+j6sOBTti+33tG0qo%=|3!s){neg(0bvia(L7qL~?T3m!+oA-4(La^9G1OH0b0F=HY52ATFsR0R z$&kc4Nhk}|GC(-FBlTys8 zi||^s4P!w$>gYRy11p$(Uz2`dXG~V5Xlt}aAJ8%;I}7oW`^wHj6)GN}vZYL)1T~1b z?$u~TuU0?y+Mg1kH`QMVeNdx;u_ImgqW&{Xeu1P}(S-pe2f+U@#Ina3LTzjGsakJX z{&EM0Z~G_Sm(^`4++yB%#eru{I@YUeX}7IA@c=|Pd!|Xow0DCbLr_e~6XJv7`2$pX z|9jvb&@ZeRR*otQM0s=fP>V2d7#HhR2Dx6#wbXD+fCi;#Tf5O)dqUfk!P`^G3mHR- z2&$KZ=%Gd18%nU>+S6-pU|7_4+?XP*84Hel;_6U>{iy<&G8Avz`R)zL?id-jjxTcxcK?v2Er|>a~Dl@Ms@3@YdBygbedVr#?vFawwg`3#6AnH@Im!$fUFU^=I*s3U{S0EIRp zO#vGaHNDq~%Nh|FuZG~VbgmJw12SdVTGI&P{4Wn^4iRgo#P@6=RIBuwbf7F6P*uJv z0I(rZ17n?fSv&xeJ0pvzLUU)BE;d}j8m_mO#i!IyVHKYeN3buw_IDt({w{7~iA3nI z^Yn>G%QEFhhT@8hLTxcK1r_@f!4bGCq%mmClqS7k*J`+ir@Bku+_*yO1^}`Lc zCWte}7(V>7iA6=yrJb?sYr^C0cKbb1-z!2Abuo4IlUTpe2%{w$ol%*1^bsbIo* z2D3nv1nd4pLQO4*FdwE9=c_U1rbh#3K-}mnbGu5979z0Tem}{ey4(Pr+-# zxI$o4S^PwyYiyE4DA~cn1TqY`j??Z0>z;he@08fQBO%@KTrx>wLByUDTOrDn$(ymj zoJ5vUBEgi0r)glyv}{rLi6YX_%q=2~D52dO++c`F!)stMX?O}knA&1j{Lf<2@D*50 z+Fg8~aGxF*Tn>)Qkd^>o^K%I?F91;xxql(LUw5~}J9fr9bT^l5+n#RI-E6Y!j-(QS zn5zU5)F4C92(lOim6{PGEq0D(=Yss6<^(`(kP;xaYO7V>776$8!HOR2bSu7W`!^|> zS22DW5(@yB_Rqv|O{Nfu`OViRLLg_E*F~kDaN08j6 zu#&2u)PB$g5Pxt(FXmd`L+%9BMA=Ze^QB?*fNCQeJ1gcW8XE@IpqkXi?yoi5%l+;( zXQI$A*iE=m2X(BaaAMIg1Ld{f&t)`OrbhkbYP}3#(7rEvPLHKhHKdT3NT;9haES>0 zD~8axatO#(0Hdi<+GtzX)DX@WLx45c{7ZV0miu?`f|Qh~o<5NTWp^>jN>yK(c6_Ot z(kZj{QTTzNspRxbDml|DmA{X-?N8k>fan6cejiNFePh9Nc?Fmb7s|;GKsGDD^nn~q zfD0#qCb)0I)C0J3{T&2a0WL;o-~t&?=W?*gmZ^a4;0kAtxP29=jK%TIE3h6CGHe3x z13m?m?&CvX@dZk2XhP{-d~3zfqAX#uWzy!JonV{LTgz?863WWX{@`_XmL3a(3pxe= zZ>-1Xiyr4hD3e@7_&?pq_vyqH*mYx_c&X^bJFg_193kR>53)L8jC~*mM?(N&jsfC4 zAOI}IToRS}fAfkVL04j5vA_IB@J^V7c;}-0m>-lU%GNmcT=@o^IJ|UH?$3^2)-N-d47-V&PEwMNhf80&paG(UhDTOKg(Bp>i397O-3^pI0n`$4nm zpnNF+z1l4?D=G2;N*?28q>KQ6lF}$V5t*_xjuM27^7_yVe2w)iO?Dys@v&Gvt)!&* zi>#{dNaw4Bg z;(=?8X|OsbdV`M2|9dHNl&dL<7TS}w(p^dZpDV`QP~Wj-HA>u%Vfc9Lis7^N5(5=> zZ@rt=TD=Yr9FS)Z58{+TGBSt&7l;?Fx0$6t1x-sW^Lko&!*yg?1OQmDo8V;)P!`}N z1G?8J;RT$u{&f6L0ff1j0K7kajVGKC22r$BrPpY`7DR8q5&=!M7s)>R=fFOv#i#y~ z@Ag^72jW%UV%>Gu!9eZ*mtJl8U(iKfi@R{B>HeIRQ*d54FX_(!PcsMnE4qL3FZhEF zqElu3k{*tR5@TD(|1*7fq9o9prA>WQuc@QbRWaY9UbMjv(CcVJ_b(dlTj{1W=hcI+ zR*hZS_Xe)*wAYx<2llh8Q@#KBW_!|#{23novi_Xb4`<3BUbyOqkLQZ_B5r_KRu!ui zI89HnzsNVU1SEsHlpoe)EaLYdXh>c-0yoWx8-r4Gpq@XZdZ^_OH9e&HLtPI^{-9M* zP*5@^rZw|<(k@OP{&IS?yl+euL|_hFb}eutz55e!+%TYvUpj_q;n{WwXmlM+R|dEM|8?O z4lPJ1>V4kI7>c%pnD&GlNVYsqTj*5|T?WB0+mf8Lh~)i;h5EwKo`dT+0o=^~6-!6$ z_wYuti{|9>kj7&cQ)U@~G!HmWWJ2{~aTV@x^YkOT(f$1Mf5zM!Ia}PB=(MbgjFLwK zor_ZcVo~!e0xxEbuptE-G)W-DS7TegO2evvf!&~wcNM6_%)l-X1*L(t9CcZiO#{f# zu@LeG#O=mmfWe%B6y7n~F0l#>)9k~?tQ97UUtgmIF`xd+1{C0}QeOcE|5H$_#0tOmz`PdB$o2gSIFN;m z<2^e|9cxWhnQQqL7`OQrhWY_(J^?Wy29z+O`#>qM&m0O=Z^ADa^h{ zEyUZC!~^Hd_qep?l3g+8kl{dY-I4qwUHq#`_Bv~~ zIz$<%!43)yE@Q53a_hk;A6@~Yq}TRq5i))CJjwHr+n~rfQvQOU%N7^9T3i^B{8^{V zfoy}x&}^;mW>e}a2sFa729CT#c=(E~tB$1r!ehNsq89_An`;3M|7T&;#4mo}fm`CF zXDW!@L&^^hjk5L8gfapZCU4@@;Wj8FE8UcGOzZMB*WCs*2D)K$gQr2FmF*hlqtrbu zj`8}?)h+GCkBz3HDc6D`SxWI;Hc6r`?iAXWrM!Ck67MF)uid`X1GO*lq%WA@hC7RT z2kEH;JQy&py;mzZ0E>~utia*|=e$Ab8T@_UqX&sshg+%SaX<&TX>+LZZZ#iePw_fy zO|?PKz%-?}WNYXku`T!kG2Pu7U4{&d_U3!wBaB5;y08qT1qNF` zZnBpg+=m4llW$6~7ak=1O`_Mivs>?5U__8zSu4Eo2l z7Rtv1zQ&A->bUXNc7GZPP1`ibhCS_8C>)G1soJ4p=?%U|2ifGDxGuM;0(hK!P8sV( zp+vYf7zB^S;h5GtXxoZO!v}?=eKyv0gUD#O8w);yhN#6n76ci!T!1>VjDGs?MCn@etDAzRSkZW;k zgk3v^0*;@cVIFz|3Sck@kAe~G3pv>1P)g!1^f5e*U>&uzHw{JI!W@Qtw2#tg-(xU` zQ4V4No5Xjr>2#NyR>K=}?lVfm$w3gSHztsb3K#8hz2)HK@qJ!r?gm~o>c(;oLJzd% zDOdVO_x9Fr&=l9KI@KQHk$uV=a+C#fO1p^DSH#4c_Fl0WG>riUz+$xe-jG6LJs)yo zZ&%Mp+~@%k1+3n4xP!Vqs(#XPJ_M~Y@%ggH+ND=?l4@o52ln>HHi(!+^Oyo^WAq^d zJ^g!#z9v-GOeAhS=&8LM|*7CM(^T@OFwU-K%7>|RG6PgHnLA&&~U78L=Pm(2($^WBUMij#BM~wHq|AP7ElUNa97w?gFslSW69r{#m|bf)>yz1NvDd4 zM5$gOB3FM~0L|aNN&u>JV3{=WUh_dnxhWP9ivkNF2*^kD*%d<2#9}T4$<9y+!L=X= zdZ`X%aU-S-XaHnm09M=t!7;9jB;Y`JEtf3gs<{SI1gh+A%&U(FfeEMA(Iy7z)UD-J z>I|3!LqsYHcT zqtzhQbh4~THR%vlsb=n@T&k(k3aJL#np7iUy`-8o5!3G#O~}neCrqkQqbk*al}R({ zS;G4Vht`_=N78Iu(u_Y*&)EDRRSF^3TU(K4UAHz&d=Pym&0zDnG+SrVY%MWzl4dnY zvk7`5Nk^VolV(&V_r9cA&7>J=yB%k?ib_R~l1-8+;1x-03(+;TCznPItFX>ZNg6e( z(#Rks$p<>Z`b`?K%#M0z8UGPo{V&ry#X2mxH2UI{I)B4^=Grpb;0{cPY5Lq&3-(@%q zNdo8e6VF9{vp@HNT;TW%-1(dQ;s*-}L_8Y`rUa#4E&~v>xXLnsbG34@c9J3pvZg&W zh{z==W-ZLq9*7)5!L;s)POB6XY}F6{F})+=Ba)uL9q$d9xYcbWx<=jr@X&#Wpf5$L_Q#-wtO%I8 zM5(TM5JMM}!H(S-*HH07h=nyO7Ze~m(A(rD%)o^4?2N}DS!|9j7p?qqVM9QR3+Hl( zoJsnDhpXHkTN5s5{)ug<5%t0!kl-mn`B`E)-7xCU@e0g2WLyXqEI1_GQ9YT@D&87x zmcR+SSxYC3W_TXv$7NeD($KOPti=1GhgBkFn2}-wJ@3pKFr~l`-DhjATCHeNYYzqerjuEmT(^DTS z;nKN4_xOjimb1n`y4T98V!2YlF!{qJCkcu4gebPr#sqD;!%Q%emR3}ZI6@nhv}7b{ zRN7#~nAnvb>}IAjN-Ig`_j}&=`}RJkPH{`56NN+V@BUt%_j#W8xxLTZ-@pcBI#1f9 zHR$k#)j!lq^>=^~hi{pcO~JnF6!BDVQi7>?4~-4nQGWFz&74LOoNz_$20N~H@&IBaRXRV+dser1Yk0evH?h3Te`YQd-(Q7vWM zV}}kw$zI@j33Li70e=F+HeC?A&eaJ#Sz_d-QTbDD5LEK8%EfPw#JA`0_T$~#-&{06 zOQK~7PSM_pTf%Xm2e;)@&Hmec;KmlzOd|R;e*VAQk4K{YWe+X^xZjh9{n5V(>wDDm z6aMVs1~%BIJijSl`k+pVy)MZb~U3fI`q=<#teX(kj zVG3!%SzQjbdLDtv9V)o{nxo-55YsAe_2Q%QK>O(g=S{rZfpVKx5g^4E(p`HXAn>H8-`94BX7_XE$0ojb%O%Ex5 ztL$dMu^kXV6vBpco;LWw6}-gMhj?jPP$wc%&xTZh7|~Wt)J$ipvmwiAgd*%6D;Aud z=5oOHE1P~m&fsO3QPxB)THt(E$FMLw29ptaht8<`n9jL)&sxAsz)FsgC3C)^6;;Gk z5NNFqjFyDx4Ne7!fDQQKG+a!tjg{SdO@;$XTsFb8Ki zt&9shfD8M5EP!gisl8*1X){a__i)x;*gnzSpzta>{6EE_N-1O>&0>B4{#KL6^4TUq zde})Ed>CWhEsxqi`NT@OSI&a8O2An|Ag0snx&#Qi1j-QVkz^4hK>!br%dcp>5-GxB zFvmBcn`7M_i@1Mri8QBkW4{2TR5k<-_fj)ZLPOL=>#vS98_=Ny$E~F9ATg?(ZnP_i z!9Lkgmc%>nDhvu%e&YvZQhswA6VIU2EWaT_Z(@`^gHEWkeY#-Vk6W?rag1dIT!F-RZp*3xkynQ;dZ(kt6259$h;L|8pBQ`+v zHM*mujFfG^_8mo$-`5s@&jy5Kx_SA{fj?WC|#x#waB&P14*ey+?qC_fXg4UI;Q(x~GHI_wW<)lkVYljC)Ykc?Cfr zej8DkyoZ~TpL7rZZ@d>y;n8KhHNNZ`U3{B5#E>9VM+O{_(;zuC_Ss$^nm^Wd??FFU z=nE=;_uUBD8LMWb=FsSvpArMO5uFxV0z zK;oplvY=9$sGt(e-r`G6W2CvIbk@>p&xS?3DgLULc4vT`IalCE<{~oV%FLLf@iGBg z$C1Y6pazY3D-C!dO)&s`IC-K%{^Xq+n`E99bR)q|>ckpSu*0Z*`#Wx2xq6Ou>Tpq9 zi^Y#6Lc_Ruj15G2__pJIgEfn3SZgR^97s@7bTDbAik2uTO?FH(P!d}0;3y0();Cn` z_mi{>nu)PkflmPi&{t>BMnO4jbO2MnmNBv&#~6kiu08Hu5LwLYjQ z2@(jvLi^`xL-Z*0=xi|y<5?8mY~`w1s0O}{bi|mfX0VU1W&Ks^`6%_A5hn;GKVEY{ z(qjkacn1Qt;6XPeh;eq6rbD5LVKJP9_h@mXED|iC`ufPR8TMnd=<=8@pW;h{-L`+3 z=_4K!A9#h2XL}tirMsw0B1%{A*Z~_f4 zWh|mGm$GJYX>?sYX2f{>pjHIzvvf65fdgE+o7~x`X&tt{@ZYp^H@u(?46AZvlXApdol@bTYef z;TrRUI8HHAuH2XdD!5q-sQpTA5cy)un+?JeI%--EamTfwkG`8Gh0V}sC;F=>hECB8 z7NZb>0p9H-IC>G5kx!mp?N7_gSb;P}=D^#k))hkeA#4B$Od(B!>slUHX(z>v(k#}7 z+K(WBtsWS$pA2(Hino%Di0{uH5!u&WBPB2J_suRP3C>j&c5 zzQwQuq*4v~(A*UB?h6$I?R5Mdx{KT>iu3w92h{5r&Zv{ERjpdn5kso;5c9Scx$+ni zJ!EzaeWCOfa`w8rXvs!&I))YUQ*(L+l%6+OUid%wJ~5j zlLkf0f9z06Q~{DiIE29y{K81F&0b>{_BQ*`6qFZai8sF|k6(2ph{`2|itWs135DUU zKoz2K66HYE9wKHV<=CYtr`%94Y$jRji>6SmqWs$y<MtPWLEn$+J)eRxk6%W z0>PrSW{k`R^$U&17KJiEclB3pJ^fIBrHD3}oAIN>72+I^2Vf}6(wWnbF%VB`Jm|u(0x~d%7+_*l zO1_6(;!wMC1BZkoS*CtFl6ma%NWudbLm0ywY!pB|-F236sgoO3e4w&%lA^?BfG6OP zJm4M_Wt9*k_!YHUIN0I^${#$7!2>=4a`_bOtG(^!jDCuX4mNN-3fD=Sf=HWZN*ROM zCJo6{M1!E99=dG&acs8Qg0(v+$dTZm0I`wyiBR-I^v(1e@OWnOrH6@7lmYgkg`OGM zBd#8^1I-zG*NL=~ypgFUphUz;0T2kCF9E@nd4(36N02Bn#MPCZQ8fL6U~_T!Qa`6iIY3?F=$1A8sCXa)W%92%6@JIcpt3 zuO)&ePAHe=ry@OW`zRH~$73dFanb@8#4N5Xh}n3e1u-iK!H57I_i1lW$XtPD%zv~7 zM*S>Ayqbu3Zzf`jLr4J#F;kEPx!}BXu87G)UYh3$t~*7XS3s1&G^h7dBiqUXtL~G4 z0;@ng(&BcAhkXwAvNU}>BOhVrfV2tW>i7us6;mc)Tw(=Ftffb)V5!fMwXi7-ePkX= zEdHzHC!0I?iCYBh%1_deGB*&dph8R-h|N^h zToc>%uIdlBAIM-LKk?+2v8sg=tAD7As3j*^IkBmIHC9fAEdVyctA>EK8FSqPykbmL zf*NEVEK(^whqNdSP2w&1;z8yb4hLqNybeES3Zes8-H?CrY|&`(-#*1ON@oVjNUFN4 zE+m^9&LD1B8!8Zm1-XI7D7d}Kmek?c3js`yFM01$F=_Sn&{x1OT001G#UhCDQTv5` zfF1Bdi?~}|Ixpk?YFl3l_uw(ikDp7~;G5tjd)~4E)v+1Ty4_=K?!WqTC zCW2ie1A_rDP>YuI%6a5)Q}v-h4cN?jl=Ta%bD4}Quoe{fO(nEq`cSB;cstlHIVHvC z{18HIEhqweP=Nw`*wAZ1SwlwPA`U=-j51Wn6Ottqq%szXx0p}G+EHLFWj30oESpy# zHyR&<=T25Jc(X7;$1rNg9$ZI`F8CMoXGk!ldUN)sDNN2%X{sayF4{7F4x_Ggy)^3U zf1P8U3<~6E7`HVJFU0`tvTUK z)y8^I^DHs9C4|r;0VvLEUj+qQ$%{q75SY|rWSHnYE5sw<Zfu+OO)2Mr1NqQb=;h(um7sECjFtG}$4QOYL<%oj@M zq7GehYNXCoYgE<{6@d+Wz8Wbd8$bcF!^s(wgI9|$mveTaTq@uZ*rAy!)AC1wW6KQw@AlsfLo1$K?h0AsSyv zQm@79q!OIiG(rG?zMy&|2W-@rr@p?;($~eEp)a5$#t{H@3}~igWwZ(7jMWCNyn%^ot?LfTPj=L~Etn&mmGMUxKdR zmCg}jE~u{JoLlmkm@%qeFae2ycX@qyjR8Y-M3%ZTNA8gR0&BU^BW}4n;_|li5+ol2 zO_2(EqZmOQhpWry@CB-R-l8FNkTD|UA%#3=zP~1v20#}T=O#FH0vt1I({(Pfgx`TB zB-RMC>Um}G#>}j00UMl-`TYn;O~P!{hn`B}>;+Q^U%zNn!njWV1AU>Jkx>?8P=1Vs zoE^=7L-j`V&Y}Zcwq`b`YtKb=@Fi&>By3K|VVmw;{=ABLohqUfAsF#`f8CMr9NbMr zEFJ7l4!rWWoD^aVgA~G3_!21uaXfEQfIVhXNVbsyBn7ub#+-h#LSF3P8fPzWMfWf}%!+m^=XOn7YH@9dw9<6ZZ>cqptM%*K$IELh-e*f&YR%eOaB`Q2Z5YCr zzn*pP$Cg@68@|-#7rrT8=(f~4srbJ3ZcD9MJDAwBr1xQPbO_fGT%v<$0KMS!I!b0p zr;1m-sD+GmRmFq?#P~8SMK}=K;rHd#JG^@e8I16-b-t-W1fvLug2)DCr;!FoeE82- z7R#F3cIjj{&26EmA)%B#o`#*`1>-4Szj%214a2pQO-ayuDoLg0@ggm~!mgvNkCjwM#qW>GHQWjg zp8hCKLi<(4!Q7~YH2gLzni*BGFf$s;N4XT9&5Ur;FfXD@q~sxCW;AFGGovvhm<@8A z90m@Vfp!EutlAl?uC!QPtdWLKu#0r@y)Y-@BB~?lFOl^Sd?SkPctp!m7Oo_%9SR;ddd9}q(O9jQ(O8qg&{!kyv5Bry5!Y<H*wio=QM#CTmMiv?$N zRNq!wU25G@$C5oSf2YY~KIFSVe%Yd-5F^`byqCb`jxIWWsL9AjU>C+Sl}RdNl+4zM z&>?X;j-4@K)4-naf5eTDhypE&5ED*4KhLT_{YjItUGcmrY%5^#S7gyj` zj7&!n=ZvjcxN0&VTxSeb8Q8+&8E@jf!m4W<@tAWGD|8eQ=rac*P?%eiLCZ@zL?boH zfj#=aN+x02O<%x253$1ot_mt6zB~{mQh(UDVT7`?JST0%nI^TcKqpveWiGHXTN>eV zx(~E6SINrEK`V3BTbWxI`cQ5%DK{e3a~`ua3XBu55zFi+qay-_T2)WpkaGi)(GAO4 zTi`{*wRznvflp1V0z|I|BKq=q#&GkDAZ&g#_+s<6KuCA;69x{_+>xJ1p~jGVHefKr z!$JHMKnr4u{gHEVRg6sFX@@;{S@a8GNY}*6SS%y2LWDNXw~(5Na5fMv3$ zf;6ChQ;R;)F~YRO4~Cv9W@DgHg2M(3(F2YVS?ZDvdaAiIoL7{|M_QQ(C}IB~Z6jna z0*NF%YA_WsCfJn50^Gary+kF%x?=d(!gD(Lgn{`jvG4MS1RQp0r(S_$OeXFhfD;M5 zY?jWS44hb4*4r$DvF~x_?OM8uRhqSH0v&eLjvZrH{6?A{;lz*VihrS25!@n-Kg5h z^>aRh;}qLk?>udvj|a5o!`R`23c~A(F%dJE)!~`Vo>mNpZ8gE72jM!453k{I=S9WR zs5RXf|GDN^tduap^NJ>gIENn@3*Gg^rAERVb&%p1=_2#%T>1Jez0STNvt(@}8DITh z*E{Qcz?eW}FL`I5>vD^iytDeaz?u?LdC5B)9uo-Yg-6f99G=ZP`_T!zo8#U~S%X^~ zRzbI+l}1!WxH(oMszNsh3*w%G4=Bpe*EUai`&jjeFF~&vDI0XnS`@2t^n~p2ne5_F z@`D*}o?R-&mzA8IFi+h&;j^U+R+4fh}#OcOIvUj>v7L!(Rb%n ziMt1Nlbr3n!~L7*_V-@X-+OJkr!WGj>tKQ56Fcy^v|D)1vtz?V_Z`c zN*u<@Cu&-}=HPa(xoVGA^hIRH(&8~w7OT*cvw978kuD&woaqAEc+NTLpbdP(qc+k@ zPVIWhNeDBmd|>D4Igm=Lhsx~MFSA>prrY=ql12mp$s9u;9!Xuqf)Ynl*_E~oKmAzq zv1}w(66GaSw2<6wEVZ+ntI5xn_NyTYjG&-SbB@g;`;bM{7U6ok!dh}FTu#V%n>s)) z-gJ^SUgA-p1jj%ZjV8CDRrn=!$z za4?etf)D{HZ*YBL8x#+CDbo%Ggu!JIy%K8(CYnrmK8h!1iXpFI477b&pBFvS?p{dU zp`NeDYB>w)#_N3J7;18O;>eDTv+u2|Y05!E;+L9-nYaSd^6j*`hJc5rG}*EC>xfXO z`{29+4|&8e;Eo^4jUkm-h#-SxgzPCR#C2qoaYk|^?PN{zzevaw!@qaO@JF;GLaDjd z#Q}4z1D-vy8Rb;){Z+-r#bAk*#iAeb)HPFDxraGHMn)PR7Y5?cl*^Pn-Q?*8Pi0*^ zwWD~F2&I`a&H#&Hig5-ZBn)=_vAb*!l8}xyXX~!@8@SeQB{#%S9!H*8GL3xl+fgb( zF^)X(MKSWa-t8)bwo8;v2=9YD^1~Q;I@w_tfD7pHxi!f@$=`eTkZ_AoT8P9c67r5I zK2~5x)CucI?2<7GwXD=A3|Q%^v}$+3fwbTg<$&6+D2(J`DLjHN7As*}k%Oh;5!nOs5|Mfq{AwsPoR6R?b0W}|D}gjQKFARl z;u}v@yJ{!A6g?6_M+4^>V+EubD*|g>a+~5-BZq{8m=f&d`HCsP-Ud>PV&7N-7=k%? z%hiS)O@{%sCgy-b#U*TxM^=R5Wkn8<6@4vgNGofesUqh_aOH_bNQvYxrzfuE4fDa- ziPXUVh=3|19cP*gOch)%n7$E2RqOW4uv}16ZW+0P>)>@xXapo>*{YisQkGz(i3oto zS%QQ2`w?^zD}w-_u`1pH+Gi1{K~*WBt01=PF&l4|thSh(HF<{tLh)|Ip9H&&K)c!~ zIn%=ht`1XhTrIAevQ4s)yaG3?jH^|~)o!tHl>+0o3r-PZ<7mO^Mb@e-EmjLBp>GLU zZCb>F5u|ifs^J>E*&eXPGB5=Qxjbvk!?jmQpfbCTV0j~^1LIaGf|BH7!p^kx{f-wmqk0{ZP`GG zN+}6(8_bC9oJbIMma13`^onRUPOE$oAC7yM6k$B(ig};D7{3$>%c{Ooi~ND(v-R#l z%_}r*f5^SeA8!LbWZ8dqM?MH?b%#l|8c(tMv7a$1UaV+4`2_R+i=p`qQnyS|pm^kc=b zcI%e=ZjgrtKc?rT@DzQ9=ESulifJ_Dz#Pp$F)hvEWFl5fivTmx&$(rUEsDoSu3@J@ z60lwmc7E?Qv$HwZ2zA3XOzR`9UT?i-c96d3o21z8PG8RRt?~-;&T*VxF?)qaa;wi? z*~4Fn7;GFo?H&e3rKofc)^x^r7FsJbi!A7X}kjZgpEJCgCF( ztIIYFZUeM#iHEdNzrH!0eXp23*SHs(U$PA;$UHC=OC*AV=AoZ;_K=)4z<|_*N9PmJ z7V*fSxqPL(!(MJ4&TN#wf8g4qN9R-Dn~^FI(Jpb)F1Qz4yiiu4MA*}rRqrLJY1Hl<%ANDdv}o&yXw2b6u7B$#l7b%U71CO z4B;Rka2p{AoJMvuNTk^pxi^E4qgowE(hl8HCAOK_E@fdNEfYH?7TX}}_x2D+3Y zNRAXt9B(%bR9ADAr-6af0P4o_GdjsMfcD}vP{PdFEv*alhqv*8!{jv3*>ji%qR>1I zC@VM(BoP)qdls~^8d;}QW59VQ1bG2}X`>3{NmhdIGC81l+me_ZPFB1XLxGM`sp!=* z-%~+o-GpvS2yq2rA#<^FBFYr6qFy7SngndW`R|%lMLZt>L4lL zah7H!7Pf*WADP3+^$4ROnGa^XHGXKZoGVr&05i`RA~ufVEaeo>a-RvY=Ig2(jOKn( znEeAZPMQG?15eF(Qa!K@nUGm_p`?<4PY#YAbbXK=DxEkdYInRL*FyVQ^q}IvsO(c@ z41)$cEhGUg6gn3uu+^2Lc3>VM-8J=2Ul!v?V$`F}rhTfh2f?zW<@gL%$-WdLrOukC zDvZ+$>n3sB(!&mp3u%Do)N@W9xljT~8|UPGm2$x<+H{&Acaed_VQ@q24*{pdhhwKM z&P84LHNlmLlTv>yTVxR|#metLLfN7Si((fg)9eR@{o(nWr|O zU*N)tRnk`{^D~M2Ga)i~yZr_Gn?t?i)hf!W9t=lg&vAq*_aVh zP<~%SlJ>a`?Za(?7SgWn0n>VYb5TAGkxVEX$q{uq_CjR$wL*-aatQG|aDv z(ff2}A}=MFnqddXAAqTd`#d_-sZ+56qGB${>J=L1In{p6g0w8<<3SnSProATMq&2< zb*><)zOyxhnY&Y3Bb$S1ZzQWc%s=NNt4gw8Q*k^|>!n2rD;!@)+*y-t9DbxsPo{uY zs;=61SQcL_I-7fmzP;$>{&~67OSv|m_Pq?%VyTzt{<)W^>nX)iI4agVFff@1Gtqy` zfbOS})scXF*r*wp*pjO@B@uXfIdIJ>i6TsJg(-CjJ;i0m1q->Rc19tLG=Sn4v z3x;FwAm_$@?67lnJfB=4S9OO1jRNzLyU&j^ZNl~ioSt44*_69T%L208s09>QNrX@a~1)BnN?J{PI z$XegtpwhEu3uzr9P1sl6!))2CF0}_ar)viEiax!%Xz$Rv;W;X& zN9SyW6{CYVSvO?lLC|$`0GEyK2_HZt1a(e7pb02&>={Pu-KWA^rZp{mfu(`Bp;;{B zEy-QgKM)6$?7&-o#aj<2;jP*Hif6)G)MD+~7}vBLCA>AutEHWUx2ZJ7j<0sdTi}Oj z@fzwBYtet61#5q;WGkAq4mPwu(HBD^G~5udaIib7eWo9V`#=uIO8fP-zin*T+z6c3a|WkKr|ot^uLitc)cR=j?yOwuOo&TXPX(qY9bW56lB^}vExR9OZ3V;FuQE9HpL*co0|NP=^i z`K||%eWIFweRyeL6)V$UN{XIMZilw;7ES?2HSuc%J zG{UIlX@o(6;lny?7SLMOL2|;s&aWz)3jlRfFjp#23OM0#dcHlcxAna1b^Y9X?cQNb zSU_xN*JHoBojqsf`)lfX-e&8rKm1fN{YbwN*GhXEH`4B1c|)(Nz1dr(8+v`JPN|T8 zf>4s>zcww3XVBlHnU-0uYS*qjdvkSEjz%L@5?QbFjV54Dz#MpFIsGggwq+yUS;-eL z`3fE#ZzA?bnOY6Zx-XF^c=|23_Jr))`t?7K8cWXDE@ZPRqpIoqp$u@hy@{t{7+aK9 zxGpRPk@a(YsNQF3^TNw6l`@E!T=|sE(`hGD+oLFdSke{AB6lPqAlNhm*Sv4OU5>g& zQiX@9fqteM64cs6^}s8O>=uv6&JN@jZ?m!sDv~~1GIML(PxZ0=$#SVad0wzxlr{Nm z$(VM7nR;E&EQe8`uF$G+&3|Pr-2}v<_3P7rA0T2_5;SA3epdL^&kjGTU54L)p1!|^ z8BzE40S)rrWkmY{roF;z@-M1{w|y}{K4V565HV>-rw9C34sxeYg6^OA1<@|ET`)Ir zFQF-X_t`LN@azzwuCFOXL`>Q>{ZmGe$%f;^jrP7C)0~q$wWG}#>7HWR>P-+$dD(Gj zBeq= zd_|(#ypkzafK$v{SzN-2xEX}E1A!8$eXuH(ZDfw}#H#M+30O;oLS>DK&@k@prm>TC|=TCUn5ErRu{lNUHSc zB*9Foq4oe{Q)@&3b~QeL5-Q^bqUti3e8=BTGU7>x892a~2#|&8&VpwsL8(2)ZqlCd zt4jAEMGtfcIWTsM1}=4h zfQdt@8imw|x$b&8j1}N|TKzYpBNK+sace@0(H>0lrX}Ndw(qZATq4XG0^mZK`l3Pu zDsJwQ!wN7sK0Qx$pnokTVi#w2OoUBq5QI@|so_t$bM%)vc zUXp}iUW~SKHm@icQRjl?eRfc8$c&yutehkrbAU|*#KZJ~&k7~r`(XQuc>b&;uYBTO z>ZGXGxZ>GZcG<3w92S0q{SLbVk>32RkRVCYHNVyhD}Bmrqh3p3)bY`v_863ie|%GU$-YoT(^0C@W5F5cpGt!fQ79r_F zpUhTSE?|4`GT7D}1m&}&Z*5yMz=%cOvvWr8}+u%|9l z8=j8X(B&s|R!h#~b+w5BH6acAe5OLyJRnlAAzFLz`%q1H;1~^Nu%>4O+Vvw9JaK&% zA+^gR#oirDBjrvmo0uHWbk&BI$QjYQF=TAQNvv-%-{YnQj#q4oP!tyw>~zG%UiWd= z#aXqho?=q1kQY4L3vf4yO*Lc(l;Uo)_rf?^J&NHn&i1lns6NiPfT2#@80iFpd9^gs6cGar8|MfoUJNr* zkaAsAL5Gq?Z+Yd(<@KYyYkAv-cs1FzezC$(CDk-#WbbO-7Z^`_Hw!t*VqtEp>*rLS zTt7qzwHRoCqXW0nei?y;r6X$%Dd!r53xwhyqI?)(NV&8^+0T&7D+)LIX`p7V0jF8*gL4kr@E!&1nNf9L8u%=8U#^mcb~X z;)Mjp;3U1f4m+`61e&G~1PB4fgUn5!@nb)U<7U|YzK3!9Fo)>}$CK02!<&DKySMQ( z{oluvm#2G=zn^=L`tzVaAK+*D)8h&J&EjsmjeGZ7*f09?v;N#^p?CC!-esZpisIV`J=~klqsF?u z+p7c9yT+4)x${fCSZi0fE3Be2}7rn~yQSEyO};V-?9%m2_{{_`K> z@>}9z`=IBC+ed$#hW}fA9XInSEqSH$Cpd@P^jD+Fk5}ZR>{`^di$?9-KTfHc>4}hd zg^X+?U05pWZrX(4nIFRuuSSe`5!XqCK>lWEDTPPL0?C~atrmCOK<-P*`|;tD9r9VN zDtzU9p^owV+R9X?T5OA^PxGl4KeJ2qMzkb(Gv%C9holhxkWrQt><`Yzma4H!f$zG)k3O@3U+W{m$I;hX z2J8HmV5)g-=x`K;5YrJr8)M33fjFa>!p8B$#2&*PRL}~97k+D&y3VRe`h=I#V^|=< z2Z96gOJW}B5?Fu$*YqD$s4&Z)47PvbWqdL{^(UvQrSTJ|iuV5UIOkob`U;~9Jl?8~ zU(>ab^IYRr72n5FRb_S+ivoFH;or!^OyjW9WC?(Ax!-&l@2xkyc}}rVpR znovUU3xlFkiIay$DMc;9#b`UL1~?Ahd@R77_~ZsF-oug%i)PSb?>24_YFuccaQY7} z)>YhbL7&hDpr3T4xQ5;qY*5Ly2qJfryx`y#?6hZ%0Zj17DI!`x9Eei40X-P95X4v7 zce3GdeWW@%i8G05%w%3s7AlpV?#=#YZg z0}6s8%pdIuC6^OOE;<2W^kJ?WNNB6=$Oc=0cDKy@k?^^z=H3pj2_2&SDeW)DuAZ9435VQ` zW8w#+3Bn!;keZM*{Z7>qJ?@HMyyH#7|oas?d2RR z?fpHN0M1H#U%s4K4yM}R=Qtn1*%YbCDB#(U*@yWDv@#$Z!r%*8y^)-2$qMV@jC3Z= z03#$AWxTLy5rLCe^w7R-O>@DN!pU#G>tjXxiuQ9Hl3oYL1CR}c`A;*1M4m6hPBD3Z zT~4y{jrCE+CBm%8@LFS})|_+re)J}w8>obr#x**nk$dyH{bSMgkBc|35W4+K3ioaa z+W%#tJOkSCxH;B70Lq?iz~meYhBrLT_Np1p%;0fLhJTkTiai;C0yd?UF0Uvo3gt?fC~CpmZdIA>npe)$I1T~1Ke(D(YVE*r?fJh@F(mI4|^6C zlzTk8)1O=Yxy7F?f1c95al)TJ_UAEvruUC0=cbbH*PapPo?r3oK3n)pp55ioE&NP> zy*CTpsvYPSe}2%PFZs$BedV{tlW*T?|%+^wDkkmy8g@-BW4R{&`@|Ag{XJH)AD-O)r zs^v7r7>zKD;Xs5ngi!}YTJ_HQPu!h1@G+U%aMX!Tv0#VQNvN1NV*;ff=4>fv;KyN6+yjh z#w-uqAPW5#P!G^|sU(OWY<;HI(tt%%am|Gu_*FF(=u!E$rmhp((u}W+IV0NDO$>wf zF~%)z$B~TzW|siWEP456z|KG%66|c&4zJ~KFnPJWk;acj(QKn^e+S3p!s#8`kX&Gc zV-vn~sqQS`uN>zPOnOe$h6@DuwVy-O3}w86dc=3olkBYBxb*DgLvrZ@bVg{aQ(j=> zFRzq)D9Z`Yo!R!M8I^Dn zX1mmu%bQ-(Il>)u8Jf~I(Uh(O4`Hjlpt27fXqyKcUy;%wb&6F&(Wc)+>r`&JTn`Y| zgMj4W>UAhEUbDJL81s2otj(m6C3u8dK$o-`V(leZ{a!g02|U54PAlt47`0PghN4DNgY46%eSL|l5+@aD0pMY+ zvKBoawRHGfckWT{3Rye6A#`p0Y)=i$Apg`RgbD~b+N;c<{=z3!!`iHj z^N>gbo@exeM0y}gCuH85hvbB*MYW@|kZDI-rI`z(Sz75)AEA!%^oPQP!cstn6UY4G zHA#9=3>uCFcHcOIqHi2<_zL6z>W_q9Hd%`**XMUe)UYR1ON-$XVK&|K3Vx90@y|g% z?S*{%N5#?hwtvROQ~bn4{)ZEsyroWFO~#pdT);y8o+#NU3pD`356-6A0oq*U;o|a* zKn~zSOWu4P2Uv~N1Sf(2_)KEvnK0%G7z=;dP%sshD&BwVtQ0VZc`bC-sKWKa+`?3Rv~5&F;r|(CZE5Y*w9KmZt+AoW!c^DT3h4}Uk+Og|)1#1gaUOT+Y;VEEms{_oA8{GK^W3((jT zv!b;rYZuYMpd{*X%pEbC{HhpFLh%Fz8-7K zrLnEL!j{JNqxZWEh|X6>C#k5I%lsC{Ej<@2a5kNU70_~ytn+zpM)V>>`Cu%{jz$CI zh!#pfw!Ls6*VS*JoUP-jz^Uu5YQ%S)Jhn`vbz3~|K`e8CLRWNTwlWn=&syFLAMQZmh60oq9FPE&A!Sj5}SW^ql$-Gs)qQb%IKMAyN`<(moc>WO&jSQ{A{ zBX=c%xLJEACnCr-tBJhOnpdcKaCAbEv&|M%8q-1+ffZg) zr6Jm!w)CLga)S6rb9|tKX46%Wr*k-TbanY;p zLcNEVp)(L!Gf$E$rVLC8$(Y4EDOo5OR9q1{ivl9t33xGPq&k%MmosRP02nAlc2Oa# z(tL}k`YV*hMN5|20Yc_>3^bRyHD}S@5J;v)!wGGv4X{F|n%oBCyXV7LRZ5$S<#1fEiSJJt(AvZ zH6^Aoa|dakN`*@7k(!iXkyT5je7$n%+0#cDQMemr)XkY1X1e$zNNR9hU~&r5$9^WT@mhXUJ`9ytwDsd|$H$53sV+LgL~rBTeVyCgOT= z*1QqSDc*Pu9UL{Mvj_?#rt>Z!0--EggiL4qBqwrFT_HBWtOFdG?5>!gM!tmxVHK4w z5cdxdThNRM;mw#U@8)42iXrdjI%y;T7BT%z2qYaMYhA{K3y8-w-Yf&O8#{o6L#x-C zeQ!>!M(*54tC^n~7e2{j=pS5TPA!(%u5ag$8JLTGOGC3-Bqa@VBMH=koSVKis{& z2awlqb z!B5xyD(@PDRE#DFJ^c})4jKCy9B%RFttp5b8_1Tdsc-+}A=BSY+AlK`Fnd>?jKMB> zK7$Le;PhJ8qx7fF|1WId29_3O~Er$Y)2< zU&Nb~p#LKp+>*(enPJLRl{6oq#RJ9vX65fDB>zZLcd1uk$ubid2VudwrlEK_1nT|b zt!ewz&$7h*zu{##!yPoHy~h^mIBJ1K`?0Rkzb2coVd;-H)Wh4ukNq+(+@XU};{U(okN@-&zy0SAefsA;}+(uJ_(yeocot-~V}txM%Tmj+64NkWZGhp>u}{6oP|Sw_4}OwZI{ za2)Y;@;em+n87(*fYYT#JHUD4y8)+Q*#^#00;kY}OCt{iICUZ?aK?%>D9TH~$zI@0 zSm-x`^Hzp4h1wtwS=;a=fJS<&;dX#hR^+Y90L@K(W`NQ@0c!gKpeE>e)+TlUwQZ2U z05ya)0hDaZ>Y(D9XoOYZP<1(!d7_^VG#kYzY5junRmhKBbe_wa8 z{CSdPww1tYg28$*AqXl6yCdsiIUH6c&|8zP-VCb z2Wm{&Yq+r=%%HOp0?{^I7*E9MVqlOoVrtbiZ&pP@Y+D?qF{@CJ93i*^6K>B`9#~>3 zkQC*%zw|WktxeyTrgdgCW>QwqW{ydVtqZ|JDK$ql@#^8?^a~2?g$+h=JtA;QUm;Pz zr)vlZ8PL_x+uH|tid1a6&!?*4eD>e%0K$p-g+l?}iXxiUAhzF3mhf*jvmls*AbNc) z43wV6?Sl_~yc4j-?L+wj(Meu2PP~Sg3rPb3i@b1%OkmSEIAKq^Tqe?0EDO@z)AakV1UX3R{7dBE(pd!aw4BBdlEGyKRUYNrG1A?{`*9~xlr}OZAN5&f z)nrzoQBL^KrkXHelYlXrLPB5{>LA?(BZtmhC?%@+LR_YJm?a7byceH>ESSB59-bE= zFhe34C-JH?5S&bcr1DaF{~8h?vu{s;SpuCF@Ir^}p+7=O_!r~J-`}Z+03xBJStaQs zx87%3o%RDBoQ!VwaqFC zqO4M;(ABlc`o`v->E3;(?LYmDGY`D%tg{ck{1vZ+>tSYXZ~H~sdA{cdki_;5iuLZv zLq559`N=EtH+LXww&yHAd3k>F37;HTesVBB`N3b}2^nM;^_<3$kGe7x~-~8R>Z_db1zU(*2tC(SMdVcc$pX13Z zm%rJcpZu~P&xgKn5@#I53+14K|uVTnAob+T(Q2~1j;@3K;4%KT~ zfAp6>#ni#t^-IbN@u5LNu%?g1#CiUW7uJX4&SA(U+DxP>sK7f+l8=to2_%flPEbhu z+IW_S!YmawC>c1-}ksSl}=`>(_n%aQnVrfxKNHwgAY@5YRF}E_vh^KDBlJvp~Y{&qtw| zJc7bugx?EI#kK45toUA>W3$K`BuhRz@znd_PPN$?ihg)b+K>#dT{}Lt>n5nOl;im}@c2F^NC#TwHyr z(Gg7?AgI!JgF(Uhd^y+INx+3(G;vHG9HI$I$<#C7m z7h2?&Zjs!%+wMMxrE;VOR5qz>Joxs-$TGm$C3w`FyiD>I(jFA-J!yG=K4V%`NkD5> zA}HG%u_$1;niV0_U_T&QET%+|2T-SM2g!?}q>K;4bZ_nC<40vBS1~LFKw9 zk56%Jr@rWs>nA-z_=D9%M~PjE@=`8iP?oj#FPwY6VF!{&=S`65A+MKB8} zc3|BFnBq`yl*Mwj$1rtJ7S=q9y4sp3y(^UlqRj(eoj38sckg-;>(z917})KE;?0b% zP`t?_aJ$hXZzd?ZHjD`%Qby4HEm0w$_;f(gzHF68rw|#R020S51T%2+V{%n)hZ~w> zzlN-qPu{+_JS##Ci76vmNPG%9!o`_0z`z=V2cu{GLk(hFE34<1X=5j=R!0b-S!j$5)T2RH^t(dxNh(HhC7lCHFU-2+{* z89{p&$9){{foR9T_o2EanVjZSNXlU~hTi(+qlqcgCRH&a9RCknkUdHLAnbNp`#yk$7>kMcu zQvw<*3Ve!-@iFY2%%lt=Q$a_mDUqL{M>D`=J7eSxvT2{z7#=ib9=`BglnIb&GzFx_ zi^QOeL(XT$NswwCp$S(u1sy~Y?tM+?dgl8}iu(#2*gXeD8F0Z1((75dlo_dz1TO(O($>JJ8?+!Jw6I(8c+UW0(Ys!nd}-+z^^ zozyX@=xaKNJ?Qfg_SY}s0G`}S*dgP0cPSw`ncN+Cz<9EoQj9!?Yz?ll2~mpqVBSZM z#%zd95*KV+v^kA(N_Qms1Z{@j0h@q1kMyf|IgeH?cV@7VDUGjiAq}?lZ8?whO7fCQ zII}1m%s^*OIU;>)9~d?A+-FNath!H-s@@bnb-LHsZjW7&C4NUxUCgGMU|!_O%^Vns_jTRa78T(bkKwB@{qGFmpbN&s4%?nQ4%`YpL+VZtk*U<#llcarcx`@ z%(H7{wB=bUqxC>Qn+`>-GFZ;LjLRL&*pX%uM7To^_Iy&VPXBKZK=y8oIwyBU-bn+! zt0PP#+_^_SAL$-Tx)RBG2fEPqGUwzk<0QU}DVrz~a1Y3-$Rq}=NVZF|;1ATHh2*Jz zuv1N0(poGE5Eav(s+)cM1ih19qnA+N=pmudB;2IYB7NNg=b&nN&8`Jartk?-Ri^>zluHSDSsaK=V5;y^yglG?(*k0e{S(-%b%yTGN170 zaep56=i~l-j2~AgzP;SVe2u0$fTJs*e&Io09=89{1NOUi>*Ji<;?EjaD4%iT{oc^f z$Et_8@h`hK>U`r~Z{U1k{%r5(eEN1TVnNu~Y4Yh0CPeL6VL#yz$nYkb{tU^dw|)5n zlTRN&n*{tf|DS;E2mN^`KhuwmCx79LfmoEXd@UvqCy~gSG)KES)~b4~rbrP2Y$IX> z%l|M8|4z_~VUF(;zeU-G!59|BIm<>h^YOe#fi1^gg_2ip=G<4Xh%Uc!o3E^;SMJQO zI2#6vq>AqKm0|m<9#+$v5BlbpV){as@xh2SsnSTJuS zMT+n0vNLp@U=_~xK9HNCGB-nw^M1d1UVxX;>J!{M|U zMuPK-eV8{m?8UsnVXAop*4w^Aflx7dG9z4ZW_&ff{TbLwCG=eW}>2LS&;B)W6DON9FG2hW@2bp#p>B{!ydWBUV3h{u?k-I%)Mh*5w?BizL9$f z?DZVN!4K=!ap-0j6{m3^D==GO>eFZI;b!Hc0^gA)D?)fs8)5*t6bU&b9mDAfB;;CC zlSs%i9g_=}W)GmOX8oc$hct=y+EhVu0~t6xz0^x~A|ml_)3VX^@B!;_~TITpzV9{m`s>oJUvKmBI7 z(!eE&w_{{Hi7jo%AFnc_B7!SftUFc(R;`w+E922{5SwlEz0p7STuE(^Gb0UhW~AN0 zmK43+_fOY-5<2&+RWYG4(Q$$3HQGSXzd zF`%wGuPEf5=U`aD-u$Yf1T)NrjeRW)&#@UZoGg_K>?2*!YO^nG;JSWs`9=ISOnvp^ znw?f%`{7`aMS{-Jv}&^|N@y4*fg#Nja%c=`O&Os}Tb1*((XO=kdYZ$%r%PElFg6d= zklqsDX%HDdu}7WEE-lCLR<~!|Dh+{%O_m1qBV9Z$r!~)Izsec02FI6T5se%EcIH!p z;=R9?av8)1l41QaN7`IoXL*#7a}mldFc*0cQvqg9&&=e)25sQ2gQh{KZnrAi6Z}Ql z;VH5^Ud3$&mtR(HPrnk1YN5=s#0kRG6{xo%-Z9Fq*hzT|Ddw%w4cbE?HZ}F)_L~{a{!U(jc>p=P-SD0;f5ckLXhjHCy=QPNmvGT?-bz6bv3D z`y-^2nk0(WizcO^%Gn$1*bh)b3xHwsU?A4{AD;M36bN0!oN1gQY;K+LtlOW89rEh- z7LJl!wII2~HSK66T?ffYCK}x&Ii7b+f^n1N96pd6d9;AES-~jDvA#f((-@mbj^#y0 zki-8{xsV)lJ1aYuNbWWuA<1EFU6bV4!grbE%4L!pFO!@X0dq($EdsQ~%OodT3v5O< z8g*o+&G-e9o$NXMzH6Pu-fq(GlgVyf`VbI_sJ4?`q*n!kK}4)H`zpz9HcSfE_)sC2 z>i!sVs8N447TKKbaOCi^_W*;aE@5ncWIL3 zeLMN)tvQkA)-forOVH9*er@n9$r(+5xYQ`|AmOi#3uCP4L>yK zGM>l=+NZjti`-YSl^4j`6Zc5+7842M7`lvXFt|lx?M$bcwTmTSLM)g_J_%$!Q#g!|Q_|6P36U#{Qk+&qCugb553K&;saz z;keGMoj`+gEVd|^iy*LT5}lTC7Kww=gT>}#r^qpotmA_VJ zZ%rJAl2)&X5qOwyl_>;b-9E@wKd!ZR?vFcp&h}2iiuzuG5IbRM)ShSfax+(2VhPK763AFiBH`=79CFFE-W^0(;)F7 zRxqCS>`^<<{1B;b^=B5-Hf#c2s^GQ^vg$lXZWNZcc)}KqA|aWf%Y?R<_DD!Vn3I0& zl76^4oaE29fj^K8yZw52>uj_L^~kx#!#{&3_Z-GV!V&N22LsEn&a>ngq8Ou_g%d)J zeTTu#H=NNnoci{GTly{N$j0{#LLR|SS4mUqwz#?L)5uD#6!YQAo5Y8vhCWaIC;Y|d$3rPPGGiCce zK8kg#L{aArhi?7X+=?ZlH+5$seSWY zwYp@voy->`em5B1Nh~bnI*G(@KLv@ivu~XoeVtg+hL04Fa7*BzcA{?IGE^&8kYHtU z%QFU8eaFX4D^_Ra{{NSzDmDI^pYNry31VX;QEt zgVql*=tZw@4Xjrk0%G(vGqbFI(A|vUS^c25`G%sa7-u{H=w{fM=r(*kJt!`d$sZ?a zKW(FjWu+T-bm zIX$m?N?klb zsgP55!{)E^4UC@fM|(juYGi6l))ND=!eT*+rt^xIPwxs4TmbBEumNwxhIOQ+%EQ&= zZ~}7+@5l};MB7gXPLV~;Y71VsjYlpl{s*2(_rWrfEXVm)&?tGzvOJi<3CJ_(>vM{j z<&AO!fC8DA_2=2~P#6&tw{=`e%d!%7AaE{*hG;u(lcS4Y`O#XYy;?zrd$f8!v40^- zBohRp#5^M1mV}9`P=ZKLJwQZFijPWu%Kr#n2>(I*;QdYujEd6&R{3USX-Y8Dyz`z7 zAG8niYD!`dvjiBul9sta)69E$u~HNUHYgW^XbB-#F-C%kh(@F7JL^dt|3Lpz1hcG2 zUk&e^jueLeLum2qH;`>LW-?bws*BNnb21di_5l{o%i;xCTDg{*&0s$Dy9NC`i|^x8 zVxdWuh&EubRbDg>p4lh3piqb_RXH^ALtN1<+(j;^LKty1Rz_jPT&}xh7AkGjkXH8% z6IsxE^(tvO(+Pd$N*kCHBeS(VvfY$4ntmh#QhDL2QuOuJr%Poa37sLr>XIlNZV>ct z!-E;@1WO<+wzZvT8djv;$#X6D%NUX-5DG+ym4Z2DGOHD_mxv8hQ^f_cjGODb;AR9_ z?!e6mwLBR&hdpj$ug0%vbQj|gqtb3=+#Dv{!~(YsH#NK`+#I$y?Z8bKV#dvo$y^$q z8#+w58E|46Oc;pm5L}(@NmhfLw<%CJAuj0X1SMk9zyW?k6+v)NBo%uxr9dLSF*W5H zh~Y4gNFjJEfNX*@Xk;*byNe1efG@F8N9qM$MGj54OjJ;Z%x?y-cR^-W;x6Hxq(?!K zix9!^3TOr)@iNWo(M)iZr#;@gjf5z^EBb@oW+m#e9qiW}*j?vzL=m07(oEYvi*vIl z`t)hqwL}K=Snc?^Qp4JU8nmDy0s^AUg*%)_u#g~@XTBwj2Qz~)KLf^hvA}`xT`X{5 zd=3TfF`l*K9mb;@Ji0Vd?rc;h)?H?0MpVw5=Z$(7aYEDqK)yJK|LrHIPoyOQ8xMk< z+}f)l&k3PKctW?S!MWeZaU+%B8(*2Mj)y4E%O5cD`@vw>55{XNRgDnN=hw9l6UX7! z4zuwk?|k>ox8A>{Dp6nekxQN`-#OoV(}!lGOWyJBn{M4|8ZU+j@5}X*t1H?tS{W53 zGuawT#3c#ulSM#IL0Z9{PBepY7w@T@9^Cfbns?ukZwI7=Mdpu6OKk~@40Z|}La$Ts zs7X`G&&^2}13Lus`QBo|3h1iu-dl&gg{#F|*`raPQ(ZSlUucvIZYc@3X9b=v{$PDz zd^ibQ-G(CJJ(LR?R5S#gHymJ1g>bO(t_ZfH;Jv|tQ1r0VK@#_S@Dp)5wTTR+2m%5QTgv7m?wNtKPA4x;w)4CBV*>v@qj;UtL70F`L zhD+ISb-24WUL=XzxV@=1F2b#B@L5RFV$24ft0zr5r|5ZeHi zDd*z2=SFf?&PV1N7#gk;kk4ry=I|V#&KW+AYh-B-OIdW?S0JJ~o`Dm1S zODJ@mvB2`9V9R99qcss>vD?S*p-EkKgzcZ(AO<$f6>?=|l5ik~yDRn^;cT(rNZCcS zbUh`aWoJi;X&D;R@?1OW1_imNN{L(h!j|a>Ah!0sw7{Lc-0|gm(oQ8idYC@k4=xHG z_^xTvqNtH#r|Rr=WbN6hizEvURvJw=43nlCBz`F=Fe|}{mWMPV(kAXVoNj?WIVK4? zUz7?~)@f52`$DaGn-NN#-pq96rs^E9W`XVt1I)8%(V>W8UQDvG9=Xp>*9+CeN7SejrVB@!LmBcSMg?vQ1l!WReIHRWp!!rvwtAU>!%q(D?71NZg zu0o_4<}(}w*WsZ52&R-RB9UZD-p=nR7@NVL+p#ap*v(l+wLB{&w!q)8w4KbFJ0XAv zNMysg>4$D}R{u9QPWCp|3qT-&!_el}3`*?Wr4>Wxe6 z?kwlzAxWx^M;5A=xj^OZbPL15;#)8@rM7@%oPPjvvdGq=u5MrsS{^vOH3`fmQoKBA zp4DVG^TSXnZ_*9#1RBQ92vx)0GY_MYXyZ$=h)9I--dDU6{#2_y6uW69L2q zw07GT2r(t(#lzKAP|~6&Da8whTujW#-Vg^TYEuK{-oWC!-f+{_b;|xDb?V+Qm^IC1 zk2L4`!AuliuaAJiahD7pfKnhcQY8FXNc|Bhr__%iH|UYT;^8Wy2-TYI95Y)dHqT^t@H z^!Rz({_p#>&fEjGgpuRHm6T@D1zi}GmUudpP#tkhvAmE*yT$SdedTCec=rJng=D*a zisrS4+uMJG(qqrvVs>(7DYh@IVWZeOaohn!O6xOANxFSzDS0WWffBqp^)e;OsoTeE ztqGc?_@d7&<>!57spZe1MZaDyfu%Jn`tn!uA)TMN$YBqpGh*_4b-Hsd&*dAi8B`8M zwOYw2l2^O5YcXdMi*yx}c36(2{gosQ!eDyptd3At80EDT)R$~Mj`+2;ej!%R`jS7o zA5rW*Owd00Suftj#cQ~@lZ#utINxu$xc%*19QNWPTU%QX55?vBlH1?T1**&e&fmrP z!$@FL?{j;LlvTLHF8RltJ{-a#G1!s^Qbk(K8tl<^hjB;Y5)qX_f=l(i)?UV)-rjtcb*`Tu+FK@HKvUDUR_x{4f?gZcFBc3*o$E|BUz8NCdu_nin5il5I?d+3Uw+ec_Lkv8s&QYCt6I zj<;o=b>p%$)ewjvn5Rp|7_;OaO*$4Lg6@Uz5oQ@eaaEZ$_aOv~ZQ2?9hyh!tLll_B z)n&f<-qM^+b~}`^XcA<`jU0MO1|7VuU@S9G1wTunmrNG6FDb}L*r5h-$tLs=rFDAF z`fFNm7dp6<;UA?rJ@fwTe_KvnCGs%5cJpLj+btW32G94&b(fq@^Z=8Cb9EYvYtim_ z>^^ioBlb&-7^#cy3&A&N;?Y0lg+;P6ZZltpR0v&SzcGWKyJK*>FsA7cKxH1&s{@KS zb8;mVLTx^G(Q7p3iX|8w6ci5GPXM7iT=$W)JS2gg@8@@(Rd=fXi?tnfq+G^f*~V!BM*aM%Df1}T>@8Z7ic$ApNq<+{8<{BD5!o*l z-?d!kJgw%#6aqkxj-5*jIGk_(X51LB#tBu@KyJN8*Hgrbzc!gZPx|CX(KPg~insy}0b!ytRdx!^uqs}2H-mxF%81P`&nuXbuWLrHDmJh_T;oQ{ z;F`1-uBO1;;Nvxmm{O1eh&dsbRJpoZ7+|x=+WPv9)np&|@khbriFiBiMa{1tL35;_ zDdb_{fSh4Mo=!u;9Uu#(AsWb)dO>qt7B+%=r%ANot#hhZW1TkIrI#?d%`O+@QUwg{ zZCdE@c6fr*xno3Ri2(ejW4`s>|0ZQ16;p1@7gTIoRkCy>n&C8PCXxr^E#}q4g|s=h=h!G)Mn@;vOUxSleQ(i-QOsCUrb(NzUr5|ai}Fw-JZwYTR7vpuwXtsgnG z8gqQn0*i?JqpXQ!r5bMy=oVt6dtab94VpdJ7NjV-SE8+rhV4|6(&Q?&xa_ivBCxTq zcaWeTr2L~8?VCyW22kgTcedppbw`s5GEUYD8Ws6RYwp&Oe{?N1CGABcPmVgYcZL4O z4o{x?FXta!AVZ=?C^ayoF&{6)`n*sAyB8F6AaP|jb6b!hog@qR{(2n$4fw6bv4C-ja&aEj^qwEZp#-h0&d*VRkag0 zZqE-+i5o0jc?mZ)RRvn!mW+Kw&zz?OZd!j=<1@yP|Y zJdrP61Z??YSJh5zc``pZCAPQ*_5Ww@ZGbJiuKLb%&$;(~-TU6V-ThkK>TXHrUbXGl zrX{r<*=pJ%^y#uCH7!LVPOt?qNr*FO7W zef-zjYp)$z_CHCI0tADYyQCxm`*snJ_HN%P0R&hwYr1#!AVjj$g;V$A*K+b32zW{# zSDF+LO|Pw*z+X&*FBtC80e{$7f7#lKzPSCUS3h^32P zdhvVXBC&$qi|NU{d+{svlg0eS^kjej;*Ug`gYLy=>(>|NFQ(TQyBB}2esXF4VtR6U z{$l#jO84S(_3Oj=i|KXj_E|HZdojJfI)Cx+N9EVL7yqCxbG>`<`T8P`nOT{C%taP_ zRJ*u{MO##V_dg&r+!00p((dN!N4r<|G*|yo_bPj5rxJd;dv$Mf_2-(a%*S29MU1gI zq9T+tjHXQ?GSE+pjA~XdeEJu%0NC{gEbr0kBA%7Yq}7Zmy(a6v(HQ~}%dT_s1H+q$ zJUBq*-CzwsKj5;9#pm#bco+Ts7lg&x{p&9Xi`xkoh2wPl@#F!*6^8#p3l0<6e~vNP z?UZTlGAhOZdL0F8%F4TFQrcd1vNwOuTSlfgyaVz`ItHB>}T>U zZztH>YYae)5{Pa#bLNa^L&*~iQo!!3k;g_ga=nZHBd*K9`-ET*JY)~twbZ7eRm@^q>BCg{hJGb?Lc zO8#({SFF)GJC#AW5juGO^R3I+%iX}W+^!mRv*tdqKg%Qu-<*RsaI7!WM_4h2s*2xS?$?-7| zrMGmNf;ebxE1z)CrU+L22L4}QOX7HP8nd(J7qxVrBeo+ zSsQ%H8cprjnKE!@tT}fU3xF`PT}#s}4X3k3oU>tWjNVvLZzJVOuX`SSRCnx}-X(H3 z{z#rur?EdrpRf}K`fmP7xkk<-{97!Ma$dCa16HVd{1=$V{uKX={~)?FF23l+ht0yp zMLro9ALYFIY`Vy$2pM@ZVlaMI9Jp<$V;bo_z zl2Ef4Qz927vVywP7xB2uD`HZvOvB8u`DXJH_$lHB9$_B7I#NB|OvnF#GjsXL(m;0z zKjwq-Z3GM7q`3sg)>RdsWVIBM5&CSRDj8Nsmu5M-DZbXl^p1Q{4`Renx?5v2yfLNF z4*&3HPv*mW3v=@ra!~9vf76W7t8q+oW@Z2|m$!S26TXvHcoE^84~u@)_ zz_4YjucMD=fp6VDTZ7%f<-_(P2O;XU+(LiR*;YD z^2!250|AUv^d*z!)1`7fouHjDRu|LC(zTn4$gkoZazhLZn9QJY%I+*5r<<1f zXnKht%j2em0}r`?7w`A23}hX`-bPMDjAtL4W;S3y#kK1)bdm!$8zQ=e^JC}*4x5U@ zLXc#DD;JK+tW1Hxo<{SAA#@y|E!6GB?Ta(( z#7VrF(GPwgQpPzO&PNuTw0B6l_%h=Zg{Nwa*aL{q9?1qbWvnk`u9$ZYH>>lq>MGB# zYRX{GAniCw<0j0f!aMEsxwi`H0aR@ zay0GQLn#{ERRRWtLkl-U>EKA#?uFWo145ds4H@t#u}ej@l?|!hl96az&O<639F8XH9HQjvya>D?MwR1{dJ*}UIKIglfz!F=_$Frr zN&2HanheL|hrN7`zmj(t!db?MSH|(z@;W@|gb|^$I)8%^)s8c+A2%$IDIm+&%WrR8 zU8$u4$e?+omI}=Z-4K=_0vgrhPyft87Kh2_5uPgvP@uvh4@n`>sFk3O6*!_)=J6`$z%g7W!aqT)njHoH0%S0^m4pI%fxthSQZXV ziDOLo zGE)k{w6!eXdl^i;Z|IhEf0<0YmofPUn0SKtAfp)Es7JCM-g!R8#5}}44#3I}{bHIX zf%p2=(=NV)gB(%>nSd;|-X#jeSs)I5Mw(%UZzHwZF;K_O`kerB$YRx8hh+8i9skO_ z>Ttu$b(}ORKD-TV5uxp<{d*Ov0)!Nc9u`OJboZAz90$IE;ef}kdG&`wsT;1umm7|x zVUN<^GAW}WlXgZUQN`S7plP>{25`9XMz9E0T!%NpnSG*72=?hs@)0?$TM(bJHH;WU zo;B$shZe+Z$`~uUx*DQ5zf2GhI2iH5Jcu_Ae#FWd=?EH;tb=^W)R6Ct&wFU=e$v*f z!Im72*`wrl8H{-~KvlVdRD6GLc(tB|S ze4bXbiO;XTl=P;{kEWg%ge$tkyBW(fHIIKi2Ir&;26*)5q-O0y7#D;20A*_)mibJ6 z?})``AnY1Cwqt4jIbd;XiuZh1xLHTLE@p$}voR(MBl~{F%CI^*Hb8Y98;e-e-`HrAE?;^70?ijBS=@|lUW`l`u7~{MhRuI`NQx#*pvcnkHHdsgx#;FF? z+cY%3q%Gsx!)r|^b%zzsXIRPblZF+VPFt%`Y)2;xytMtc)Vi^9iObQ6<>u&FI zGW;(JL)!Ls6ijFfWR`g-V&y@K(L~XJ^@Sryc1Zk~Cczm@1t6;qg;`PoX?8`_U;0OpQPGZrT}6z5V(gtU$WMd8!Penm?*|_Qe)>RR=B?%@ z6C8BFtK+Un+1g@mi#RI#T9*tyd|jJ68pEpB+8ActE!!Fg5Wk3Vv`xJ#AsW#;Q?C~_ zj<%>*lJhzA$=#rOfSj7jTtO|5f3vFh9sojQR+-8Zb~ zV9;e%mZ<*!m$FypDSI2Nu#t$&7|_dyjsdb>IduF+sC!2@Zj8$|)4v|UV8$3hkRjB) zZ&-c0q3-Ij_SeVTUmtFM1*yk`iT_B4-4vQS0ik2f5#*kmsdqHC^oqZc! z8M2Nu^S^KiZ|+=n(gfkDXYB~0-}Egwy-D3$r+yECtFM8Kr(w?|N03MWdrVGVRBYg4 zs4mP#nrMYuun+H~HZ{T^^-rBTD-?mMkVW(mg5QK+bVZth?lj_$gFE{YZh$njGee15 zmzdDEMXwx#xX(&gyhY-y?4lUNRM5>Fm>48dMmtpvMj@GWnzV+=5&BHP)q;(vO8hV# z3{qEpUjNe|obdwL?g+-TjQqS!O1J8238txU4KqLfAC2OSXo_c>th&$* z)8$TIC8-d!6E6M`sl@+$x_z`@f;`RVf4sR?eXe1#>V?_0_Sa+WuXf2PVxw06g}E_q zhU8KPKG&DC9{jEHW+wyRJ3M!_@|*LM)STb-TPdgHWxT~J$Is64O3soP%*wiC4V)R3 zWvGCkr>r&);C)4}xHo1vx{Ez#dIjR$z$2UAf9q3U@6*jCf=4je6q= z9t2T=3Z?iYB8eVT)*xE|R}oc;LymB-o!8BhgM`(Ctvo3hbBQSyRaP%$XDF1o(k>~~ zqwnT*EqQRwNLsFK6=@NxVZap_udYYlMk-QKuZ49L>kQ}W;rd;pWq2eZzxGEf>U{l_PDra#V>prFx8&-#t7Xm=Y;>!?QwN2S9B%ZByXP6dkSH zNztWs=4j9(S!~*t6rGYFZ*o^PwZoMsBKqT%i~tCbv`y!VR-Gpw3IZfvzwfu=|GNB{R-tgKfVN5ot^o zVmH<);9iAbCAg9g1PlEt3p3p__wRL&-Wovp4>NwEHyzl&P|=sXXFbc|f@m52{L#FzFIQ!@FEcLsI#6%30mxSM0Ui zi%;#ack(|e6giYU?TsH*6g;#LrLo5=r|tjF`3eBq~?FIY7F)vIgLEuP%yWRkIX8)=9i#}UQIq&k@5 zdiowPt6OS3`AYhBR@U%)a`Z{678Q$D%M^x**{Oty&F%9XW0$^Xq%uZ21DTJ%Xa}J& z0j;noA#I(3WRz?L#GW}7nD5ZNekq2pu>E?Gw{@?)65ZSLIO|@=bElne|4D?mI})=I zc3_rfr*x~`IsAtq7{30!es>^j`lH!neH&pz3k?;g9=RmJ^DSfJ$yhKL@i8Dac0)D#KKaX9>`)JKc}{TKaBL2~>n***R1?I=ZS(9WyYQ$dZX zCtikla>YY;+vNH*5s$oS&ANRReK`D$o?8<}C)IP6p>OymJR$*1<)3`JAnfo@-zOx| z#Gh4&gu_k3*d&$a#0ExKJW~VdR%~oqh+n;ZtJpBx8P~~A^Rl(!v9?0P|1zR!bLyAW zUvS%Y)r7JOeCCq!fMT@gqN)kHtgzCfDuqwHe8kCNwK^f#JwSB>=u)23PCz(X-znO3Kcp@| zz=gTZpGx!m&t7`zC6-f|=DeR`XxSFCm-Ul7TT{NO!;6b;npzvaPE|s8pjH7^b?i7` z?=ZDRVV4{@BZ*rT2+;Nu><fYok6CpW#*|y`j=Z%$aT@mATtkip_bU_lWiyc8y z%M0A1Gqp7^hawe>{N#bTD6YH&yCaf8!25nO6%WB0bOR!nNzNoQDuU3-_=w9nZYSO~5Q^#D$dB zs@i=IaPfII4C8S#My1EkPZNq{&1CIBaR&G)D&VTALbnTZ*jyUbTQwbHr>2?PgEW3f zwCZzK_%qHK=_RxShhNCa)o4H2nE(*GuSW8HC+oQI4&4G~Sq=I`9seBRo6J^J$Ytv8 zIwNG3EkuG5K8`hY;g{>lsp?rj=`>Y-Z`F%;r$u#Nk8CFg5UczoOBO#_l;+8O#59tM ziasHv=pA;An^NiQT_6bE)RbyXE0TsZZ-%sA_hdb!KY#DHr97(ivdMrc=A{~OwWMdTt-r{2` z>})_AV}%kej_k;mbDI^3#B3a)wub-eRBX4EJs#+!Vmpmbf?!%3?VTp4+P3GuEpC(1 zt;wl&x+;vrv+3~8Aska2He!wspfqOv0_U(LSi>0-r?hp&9EulG9U{HkZEzXufPyK^ z#aJ$!=Wg>AkWG}EzL7^TS!|6bde|FRrONnJE*!H2F_MvFJmVMX_~=I?7);C({Z7aB zT>XZnZsHT6Ut}$5hKFH^1mHeKptx%u+J$D3*)u|`c*~dzZeq(CYh|$_$XJG^>nP-M zCqS)e1JqW={~eMRU{B8+CQ=_JK2nsHkn1<=;hCx{R_Ay;-h4su#{FZnbKG7LV!+D* z8N=t*jdy|`t4Ebt?({y_A7JHJ1Nc9wd4ky|0iZ%$hOP-Np1Ku*zgPz@-BrEBen{;` z*70*D>y+loIu?dTO2x8hBw3zlve+)k@+8TMT9TzND#ZYk>|;PbA-Rx0wS0mb3YC$h z70O7xQ|9N>6QPMzPv_&g&_r~xLX8J{+XY}eONKE9g$JF3@2IW*vo5*K`y=XC0-nS1Sd3cZw2MYC*cwNPR`V z2RjT`^<0NhP42jU*E@=Srbo)bIqVMvH65l7QEVtbXhWSwnx{?;aYi3z zu%}Y1Xf=Iq=Sq#yxh$OxO>b}K&69KLK5x`L{?O3>MODOu*{riEy{q%x%H&fSbCwj^ zKRcYlgk?b+B(akWQYq0j5B2#KvOZm-H+#|d=~1M7ei>4p!dfYxG+`^rTPdHbPUbRwP>!rI7Qg;Vw`Rrr>k+AI9VN6_bkwHZW$DpcU zV^9-SaZOrE8vW9|Aos^`^5oFWw9PTwP)>kbsKmTmnrX|_&~o*O}*0qDa9HEgMkgW360RPk2!t?ds;R2_u<)tB7dpMoWMD>5+X{E;3Rh}7rA>^Dh6nr9Gk z03iyFL4kjeVrgk~Jrltw>xyx7!ab7~Mt_`mJVy9YSFCajq8g${b zh@bcrq%->k5m9JK71_*|W$?e1_ZG#dCA697*dh>@E=Z~!IT}5#RS?VYCNwSWs$wAI zShj+#AV~Z$6wYFQ$giR5BoA;H#j2NQQ`+f*#Rc@P*w>DVLFZDCX*vUmsCAbVi0YNv zf#wE3(7X;a%(z){+sfJ4JiJCs0tBpco!ZQarq>8dqvSvz>otlXLp~aSr*;^{3QPzw zV=}qL7KrKS(sRB(fM8|-+JZ^)E%40o!p{R+%_RrMjS{}_omp@QV4`@Vi&q?u4< zMSmtMasJ$YksrJ_cSigPw(^G8sAw;YIkgiaU8C*hLlN3x9jz%jf-AjOvg6FlZF_F|egL<#+R;UiFNz4kR7lYu7Pb+{RBAWNv z=$=5hiP!36;HIz$UhBzgoxHK~S{*b>Xcqz!7Knu42r?OGP<^iLhw#Hj6`G!s<35dJ z1D2B`JMLW0WXu)nsS1g{S*Tuk=_NL-Ifj8h-$xfaOU`FrIqp=#LWL4rdsE(<{nzjH zn9bvF=fCbrbDyo2oyh*LVJ|DA1v;o6$KFz-G9b~N)gxqfG%mK?8La8nM-7ino&9k= z&E>hZzcCz*`u!1q_|IQk{_Brc$6GG7r}4^Yu+D{r`r;DD<2T4^I@QIkX z5oa1<7txC#gGQv^HCaLEtOP=j4ra^Y2BGtFhS1%LI82!p#B|7iTt@KIlui8(DoNhX za$-v$yR+JLszs-1+36h!qZaMaeN{#_9bo$W$kju1;~<;+FXyb^y|U0f$+8}&N?E$r zh{L=>tg~Nw^~lr7d6p;VnM$c~o;`Iayk}lAXvkm;yk}4FLfYiKH*sI>ig+3RigNK1 z=;iPbmqVu4bd1P7kzI*2Ad<(8a#@p$Y@j1zw-#xG2ng0rui~_r_DHm};j`dkJ$rfh z>EJIj9t^4vLPPN5jE1u60c6j2`Y4Lo!VnfHs_9kXC{Zed9`jcFE4ByKNArd((=1M1 z(?NOFO~r-WB@Y87)TG{oZdFYbLs-3ldPt;F{rlO^U-M`6@V`c{u_wuk9BUNnsCPz@ zGLr03Q!5)_4l%WZkrygs-QWxu3gn8XRcEgfj&dAYJvy+PH1(nS0 z9EeE*1V}dvb#FM_V2Y6M0K<^)u$q0l5?`4Bo1S1varF$O>yS@Il(7iMS1Y((`SnR; z-fI)T6c_!kzHe47_EvG_rOHTopkFOuM2V%KRPaIwgt)`c#$#4eQ*!6e9AwkD(D9f} z@R%_{CA#p@W_N^bFHYbx65>iVb&=sHD`7>l=ME%?L4m;rX5lVbNooVD8(El`w1~SsGv2z} zQ08gumyw#%{!zLD+Ake^r$SaDg_j$QHe;2B9K@Z5JdgjDF8W`6Kk?1V4tztNQ}~96 zZ9V~&v6L$ybnuOn3thg6+y~TMDX$A}lV9lW4&QLr@(o7V4)jIE)j2jmbwgiW7LjOJ z^2#fxLh$h`80@ekR?=M6jzkIm-hn7dYqy0c*XhjB#RziL668pNB%`!`f+2nsnL)DA zH(B;yfzHPMUqWZYJB!vO^fpe2i6?J|Vnc6Rd8lr!p~M;OwIoMAZ%R?fzC5w;Y(p#v zRT8fSKY2kCW64ffm*yI8 zVHsHu0(dZo=J?R++x+MDYCQh&#o)~1I+P52$Mz(Oyhn=nCVxkD-v=MRHwjUVt(sjo z=RjYuZ#Q8J$^<6GPK>=y!@Wb2CdO<9QSTrmRb}q)tyXK~15YdmwXyzc){CgBtt{t& zH7xjYT;~pqAx&M=qAfJ*o$5)vMD|)cNRd$_#wr94wzJXa6OUkGt!Sge=@RWrKyO#+2GIn0sbOUR%1;>pobRX* z&Qu{G1JLBr^yMx@*`y~OR-pAvg^;Yjp8CUKz>N+-IRefgz&Jc5+-X$Ew&z|SFLr>; z5r7PCG-;OZyd8nVVTKntxvc~*#L6gg6V!Ntr|Sv?oY`bJuqWKUN?tC9=c&UC&ZII^ z`O5)kkj`Yy-W!)D^l^NKg|_kbQfLl77G?#SL&{8gqk5!4DT+J)z>U(7MscA~++oD` zNAVy*8)&wu)Za*w!!+nmm4@+&8qzT0dY;UC+AR#2V5*v#H4}nyDFrU1wNN*27{4$1Wl}+kO&3P@oCI?X|}DUOLL7kFtIHgzkp?{&X6E|icv9fmdH?l z0cPloc;PQ;f2Oh`-7ue^b)m7?+Jj2qR&nws8SS6N*JVh9*FGAa#c;v3*FMfQCbp_C z&7Q-S&!6nwRD2Mle>4AdZ%WHtOnPhva#5#JXhfEb{;zc| z(3V(;8h7WslLl?pIyyWF?groIdpbNLbwD@#!Y`DtOyq~(2BB9%!4>1xypGp`B zs>qD;2xUD=%6gQPwU15q)k0{_RS-#XXFdYPs&Nl2X(7dgk>!S2v;@^Uhu{FBLu&WH zQGU-%q#k5h&lD&K7~ZX}0oUi${Dx@8YHwxCPj`#Gy>3Arzr& zAkGc}*h2`^`iXk$2NMBL^awazUAzLt%^diO4mUa@0Lfzd{dOE}(Us(%3;?pghcw)a z27vg*lK25v@z(%Euxqr87nnv%ragJ6lOsIo%`_L!M|37Pdb5nPj^5OcUuIK67}@6< zy}9kVX;Vz2)h4XXSw`W~-L&X-hLA((%|bhy6RbffSf`Y(IwdL zJU5!sojbR@RCb*ff^l6&XZkrK8{!jvM;EoX96D1szOJ~A&Ljx-@NhI8vJnoO5Y{Gs z^#s4F6V;1eh$&bKd&gwMGT%NS6esoT)A9o%5}zHDVhxS6$DG|21nzHoAc$g%HCN0K zDnDlkm6L=}vF3_o&0#;)L_zY0NvcHa6AA`dE=_|DAtW{-&v)1+A+&MS)<|wUU%&@* ze8IB`$ps&1gj!&S4=O|=lC!nuWTq8*^f(V8Rc=hYv7J*6DRBsE4QnngWgz z`1{or7`T>uz>sx&F+T`Z;etFHROMttkgK$tSmt)L#FPI9YRtz!6gF%vQ87eg@@(n4 z?0Reu4o8s`TzxwpBMw+Y5n0Jk7DX6#h#jsUkHf93AEO4igq4>5n&w2w7(45nM@g)x zYuUU8F34`Y1ykk$H){KdKH|JF;`ljZ5ucljx1y=3C3Os7)1VYN>ZFp5b`))N z-9+XKY2X3l0O+Kf(bgQ^IVB_Fxhb9n=#S2vt{Yy=uXjwY@Nm~;cRBXQ@#&T4QimU- z_UMVt$yHu|D}IH0Z<*{WPC8KKReW>z**9d_g@;T`Ku`8XV|~c3SMFMkYBMtdIq>() z!EzV7sPO^*k^piK5AQxZIZ!U^R`8E9zubejvcliX!#q;2k}3DxLApQY=d}9AccOe~ zvxuAq*zhY1?xft^9%FXCUtVcWg;guUibCTfe8m@h`M}x9!FbO?S;6P)2WRi*=Sr^j zX+yLnBp#b{e#F%$zwG=tU#=c*&(>)QrfF7Y?ySbG$J<*tO60KU@^ySL;s0{7aTWMT zKP{IFoD`FsE`=xwOQ9EyM66EmT0VY|9Vpx|IEHBq9oV<@4+a?RJWv4ZqG8m%Iss)v zuhFDwFXh7YVK|ab&Fx(c=(4yIh5@%mMC=Kkt9oe&N&-D7AM7c{m|JP;H8F-+ckD_) z3$m0lx$IeVp&wrBT`bdd!77>$Ss=9)+V%#15_W;UZmYv zrM=E9j?YaOfxrva4bgIMP;u*JBq-uEx&y8I z?}Mt#Sk_>iSVlkH*Iv=p56f52%Zu?0Y-jjhJ=bQ~4QF(yz?6f%5zIR4jRo1QW`{Ww zx5Eyip)NbbyyvV_I_walnohA^!4C0xWZHZnP|Xl?c7DSUu-`(LA)vx73{mAS>>8FE znxDgRZ$kE9d67Nyx*+@VYG+&n=Z`rsDWe&U5rXeJ8IyoIK^AuGu-pgozvV;*2I?RZ z2n`G>SVI7Tkd#@^gew$!qH~f*yBVfuI{fG`5#P~Xp=IgeZ^-(r9)Up$Y{}Ifqc#J`l zI|5W2F+k@*{Q;`Y%N);rJim#+1s*(+9peh_QQQXA_il|A(8DvR9_vI1VEWX-N~7Id z${M_-M_H#VJ zjPlt}p3#J&+SxA0G@GsvY=(Lb=gl!^G~(BB0S~iVZwFi8o4iZ-%N?hnQ0zK-c((p^ zlNpSB2;`cdtBL^8VCN@(4ZHC*)w3MJi&4Gcg%j1Izg}NRC5vyI;=+Msz(Fs75z_Ju z7&vNhbq;XVgv3S>7jX~?gdvp&F2ZsQsDM9P+#FAF0No@6)Nj!fnztZ28wp29T~v1| zCTC-d8|@<`Jjs=|dZX!$>MK;c+NfT%_P?u%frIV3j6q(nKI^UBl)QendeF$Fj~KS} zWglX_l`4H9sr2w9x-(smBEWo?||QtcvsdKsT6L?fVx30R>Wt`!6y_-U-Qz zQNwLsyrUh!dy;&3N6MRki+#@d-ul}e+8NA&HkzrW@Zh(CTAb8EBf|-uz@Y}r-b0pc zHC^iGJNUDrnz)+dyVI-FIUeC1t9=|A>%au60pSZqAWksuj4VYR5a{uiEN7K+w!kVq zkw<8=MnmAy>i&NTO&Z``ea-bT{`$dTzH)EhXy>OeU;DFI!*9j(OLFV=?XPd*SM~6} zf?W+XNO(Z^ z*D{vdI0uR^>&NahBwl#!xHG-(nwgdA`Lt#R7exeYBCCP&>0Q3 zDiW!Nd`zObZsNC^NX{#+)LCNsn8a~|(hwgqKT*TA= zu3ccpD|l8s0g&iBuO+bsZ2%&qiI8<|4s0?7d?>FiIMprIW?4f`vsg7}=_G1>1QQVVghu9>e@j(;6j|_th z<6F}aTs`x6Bf>+1ehT3R)9CzuO!-Z$EX*%G(X*+ZAEV$|nf5Y~+uKX}h_5>=4L|p* zk8#$oK1z`dYp_TvM0yNM5ud%#aS44bEe(pGk%CzplC~fv5mp9kBg9xZke~t_&1?+U zM&+>Pcocx#&RB!?xtoS(8k=48tBP6-Oxw0XC{h zXVK})M$X}uJCVH=7Y$M3Y*6FtSsm4^GR-Np9+gmoMis>%`k00wqt>1yWn)+^139Qh zC6ZnQP>Z6zz3Yl6`e0{ndO2PiG`v)2cB$7Kh1X=unj^2(p1yExnAsu%CU@qgVCK4q z80i^5!AKg5^sM~ES<6ofFBxH}e-hX?Fc%y~I#Q2adqcwE*+TQue5A%)dE0)Pw~ehuPSSr$S0)IQE07+r(g_;C5SNz=gf4x4 z(Od*fa-~0x`}?Mgu}U>-BUAJCSNhQlAD+uh7n3{hJ{PP;KC~^V2XfL9C?Lwkm?$u< zL%W#OjK6|d1#VjJ&0=Bv$bgdwu{IY$O=>tmf=^?a+!IZ(%*7w8i%UAg9*6+3gIC=ndPxt8TcXQHI|P$fm>E$=bZ?#9Oo})>w&F;_8=z2VtaNaK;iS#Ea2I{C8T2Ow#DET}6%0HrwN0B5 zg6(3J+~PoPD_Kj~OIMP*sybdtC0Wrr>9tx(K^%d8bWd`)wm(px2+P`!o6_wJ|Hp-V z`QC+;>Na`)A-ZnM#@CrV@)uucZp2@_PHd^a z_Ukq1d|jRoXCoqcx+>J^D_CnJ>~QuC$5DLyM1Y~b1FV7Ol^PC#T@=1vslgB!Mr+BUa)a|0Oey zWFHKmP%mla6XQ>rW)^xUABP?-S9Nt<`7ayVY?crwqIfwXqykuTV#I@x1V#g3o<+Wb zV36mndd_OdxIaCXLUl+nQIQ7w7zgIbAUdKkbiW_9H_ARrCw!-^KVNUn_s%;;S?0Tg z3H-I(9AIZt9DmE;IF^^`hKQ3itV7{Mawu_NvD*Evt|ImL5R< z89%f*tZ#hGYqJ~wcyYKULqE!8O8DHuaCZ~{-XPwFLdHM4*uC_0ed&cFUr4L^LDb>i zpl_UWxc2H^Os!Mf3|v&Yq3uFr+ehqqa-ofZ)Laei&Y(-tdMUmtA0C6X9rH7 ze;cPP#f+O*o+0;N1*ShAtb@e(jlm@MpMqYXf8IwJ4YI0mr`V^y4-111!6lKM;q#xZ z&&%xew10lOz*x`&(D~rb>ENJ!V@Du14AkKQ%My`o1eydcUU*xRAohhXLOTo9Z+Rfm z42SXm+-8q`cE_8)wX1ifb|XO_`w03#RxM3k+`tF;-JcTOkti^=f(iPHfg<}&X`qm< zOA;qd0eyt=-YR9CIXGqC4#)`kVC2Vig_}O(1(yp1Mnre^s6C$11=TI9U{z8KC|WiJ+?YG03od*cbO8C{Ol%J;I(nLF&xKaK+zfr4X|(4S$sn}>Ow+-k}ChjOZCfAEvp_$#Uk zm-EKiQ=ZWt+y+iwz(o|iXsxi_SUTZ1@2$U=*WY72s9wYx(Mi!gZtQC31bLr#)fa`X zoc7x32=#+_;YejtzapOkVS)@RJ2W$%{px*p#>e?7^Yko{Wn>4(zlIp3WC|XjD&P=UG_d&syrnMj*Y zt&{@^p8O;f#fu6d1{6+5&?e_caSt&GICRE}Y`m8_J`BiEcP6B*^}+soI>jl#C-^F{ zbax;V$Qt0iJ2XPzTW(UNxK)yVBxXr1!j{Yxk@{J&Vh6&hjnNwat@j6Q@i^EbDOS34rwBbxx+l!KsevTjE%GaP{1D zPq~gF@?(bTdT*+Cf<8dW8ONL5&eiPp^E7Z=GS91MS5PlfX?iRqgp?Trt&})jF7oe` zy!A<)ERb_e}Tj6jZoJ_y71{O?`CcovXSXL;oRm&Pd^C;0?Rd%3yZ2m02(M z{52~xGSqZTWgLs7E%=@-NR^1MGnr;3_8`KDEG7K3{iXs!or{cnFEz6(7p;XpeNU-$ z%rsMtH6g`*4rtO5hY!MZqM6i-y2fiR9en!^2oTo4RQ1kRE75=bi!Nd$*ItwON zv@TD=q}0YN&e0VI5CeFdp#TQ(N^pEu?qW3*2*BVi`I>!tKLIEbr&R3zqbn7jrD?D# z8!Y)P=dyTyP<`lw^_Q#9alJZP-R}k01XLeyA4D@se?ndk4I#PYf zuQ+!`vooqURtQ}k}R-- zW=VKS=*?fpURq9gX^`;J`r$0q0YY2ef|r0V_n33(rNz5L#q8-Qo;k?G%$|^GD5S3; z6HNlTpg#byYiG?$;vd8bnk{J>2s2e32#~Cc)BH&Dow59DJ7D5Pam1R?W`Qq6MuPxL zB;pMfgfdldE(J`g_wijyFhr3)n1@PHUUqrqC4kf^GPsaJ10)S5^B^gF68PM+=iG!fEmRTVW8+k|D3Cha-rX)5pq<0Bbn$c*W1Pr;LDCwir#8)3%L9_# zs>IShK?)NHQIOON;kNB@l{Vj5gIHPRyNieCLDHZDl4!^dAPKjmEt$H2l3Fpf7vD_6 z6uPaemq+ykNp?~xhD>JSvLI=2hLqe8Mt~%~lR%OHD1jssDFsXdTyPf#kb?56XF=rv zZ1k__ItrwWKM!og+$<$0h~G$LF03SDK=5xD%wZ!}7zkSCun~m0Gd3DofGpmVZZD3F z;?~aCs3{_KZwDKVYL7s$9+pkQMkoYo+{H$MpagenY!oFI*oc)VaW7#b^=>>?*j@iyF2zRcEjC(D*l3-iI@suP zp1wFXTHb<@Km zyLzx}i-z_D8d~204Y7zNS1=MN0}D31r{*LSuv~7@kj5%3B(*pL2+qLSLsUqu5p)*d zXmEC~kG>rGh}O_BKoX5XIr4;m0}XM94Gb;M zfuRsPfh$}$gf}9<(6V4Cux-g#=E0Em`o+P}gGF!6Dd^~MV>tOO7Md>UzsNB8mF6^S zf{dQffC)o8A^ONaD6K%xbq}oyss#em_3MD5T3JvM{V?>@`WAFPW|MFhIg?N=R~ZIF z6s-i+-vTWOt>&|o!h=FfOeB4TJQxx#8jH@q1Ffp_DEbERgU{eBpN+4ao)*GhC$)-$ zX?c$u=*%D{%UjG3rh_!0OSF$41zl=tIZl&2NB2<4713}C23Up^SOlTE8^|zHQ1$dP z4VtBIs^{7>@4eWbL3XoIu`#w|_ye!quFDN+G^EO4j?QSvGK_|YxVqD5G^8Da zVId5Lq|IO?Sp0H>kz}kNc_o99s5=HDsQWK;F#c@0x2w*Ryx8F9#3v*8BymZ^9tL}$ zP!dx#|E5RL_UdC7&)RJ(Ny*UPL8r#_cv-Q6;}GTRRv?~Wym?sAXW<$V{vzI#dOUOH zpokM{Rjm-a4edbrtB7hi5}Uv`Yb%de{H7j|#Dej%?idguQwEc@sBb5W9k+m(wuxF& z6iJ28@X;uAh{HR?0ku7Yw_Cmof0r_!zf`d{LrzB(xpaEE`)yvl<8B1KIYn?8#vw0v z6W3F{^iu`UVp!exMB(f?E*Y;eKv_@B908n%5xbE03lxwM~dh03{fsh`-T2r0s zV@>S@NBgxU{V|>z-_1v;8nyD*Do!bOC`o{tUmMOdwGSPbKnXx&gwllx%!} zaqPReEb51#-V=UBWS*&sD{x(_b^xca0C=;?nH3s7v!$D_F`oVU%ZfcVsO+>S4 z3CqNn6GOXH&ZcdF3RDp0WDUFx5(Ya*Z+ExywCPYY&C;jgXd?NYeJab1=Fq{Yb(JW| z1K<11c65L@Hn~bhe5pkTw76G2*o@BaF7(!GxezTk=@%6f95e#34}mXF^5SF&k@jD{ z9n*(oK}`Ce4iy5_-2=hL<-%(r^@{p|00sC#lGGEA;m=^a9dl4wl6oVSwcFt_a{`50 z3R5%)S{{vyAUg`2j=cjMD_0bl@#9Wp8c*JN_v)fm_V?*2u3&HhW4annscjO%rw~g~ zbjV-Cj&^A+izjPo=7jIa2MP^VZ8)tHerdnXS659LtKfoWcu;Y`r6s=!u)>^xIiUs= z3V@CCwZyCqKS;ixPvop?N<0Lj6%V095+0HpOrx<>+VHTxtp(qw?aUiFO@g}cDVFCz z&Li>^!ZW%ME|(=+hac>bYC$(p3#)F)l$dz0<+&}DPLJzgWkI8a-qxCmSU}9IEZ@m$ zY&6>_@m*R|O{3{{zZ&ys&{)fGZ~{&|Ta71}Qv4MvHmbqgEqx~q1J2hPA2c7$i!U{qQj^kQ6l?_5A= z!(VK(eHA3rbs=z3jmP1fg53Vro!AQ@#{fWiPGH5SVPzy;>T%18UG@wjHS#ND82ZFC z6nGg!1TcXG`0!TZryjkw2tU>0aj*saLuNy!g3b2HOFpaPnt&!gmNM_Pnu%dzys*t= zyP$9DI)O0Je0+}Nh^dQwAaH)FcGTGhU%K}cH}+k;dv*)S#5YdUvMf2R`J!2w(&+FC z-w(QAmW-B%Spl8P$QN4Qw{qjd%~^GStM=_hZhgGH^`Z8b7UWEL*OWH=+Y58V6cM7f zEfG_#A@)N5zvuhaQ%-Ik%21cuOikPW!D$&PO(?aY! z#&=uw=zN9*Ko@gA(I~t)Xjr<5Qfe$pFfU|h3yW?MDPgQ@UuCzY`4%ExR)S#Rfkr{t zMEzaOm2fY>eG;+ax^_2f6DO?H5H4K-!K8gIgO==hz*&M6HuI%_mN_+_I^t!U?V{g~ zh-i#DdLtpCR3O!ajVbw#@QOh2X^fBrwXlGrP|?tLL+yiGR##@!9z*Oi@Eq0Eh$h8W z3$x*eF5T-%o6-FY?m9r+n$i8I8oKWkg(*JcfDTs1HLKJ$(u-XzzXZz6$G^HTe7!=C zP%$qoSC4r3sQ(PBA5EA3wuk=s;l<&#vDssypqNBQl|+P#tc;`qhz=iKX)VMBEyM(l zki;P>(`1hWtT9EO3ai7p2ugWr{cgjoz~}F|8@Do(0%o%9CtHA?RF1-6wh`eG0lpV~o1qfC z4v%Vd*}ki)-}Akyej3<(flQ_IUb?=d1e^T&`bD`(?g7pgA|YL!2Q;tBUKa$u2X*E z%e5&9>o1-+B1Z4?#d~x;^$9q6OOHf%ip^4fdB&$%9FkUrNH`?9ktSTpaqsycrg}jL zX9(7yA{LCi>-+@AJ!9h~{yGnZTokdjFRP(=`J|6FPlflkeL|9)6))x1nR5LYXRJ7R zk8k&fDIXgZw~JyU0gh=2OIj4d8+LuF8jGHxbJwy=kU>_eeaOqHSh;-m@$@o}*BKvE z#iJk!1LzK?7*Pg~Elb61c{wpFq#q-z(O^Qj!UW4~vRD=PBl5{E&UYv3lTpvD%YVoG55RPF{ z86Xh#5Qvi`iSg#*1RTKIYuHkjunNUk%B~4%JK}A#{nqa=ca+M3Pyw0&h01lj1^!wn zcb~|JLnVkiTe^u0Dfkgj4**fFV8tnFG*k{hP)HVEJtEQmQjy^rY03BEBs&uV+ej8| z72XGsO<1Q$QoiapH8zL;uGcGCKT{O|G7JBNQ#-kP&aExFcSWzr8(TXb8clV(<_Um~ zzlaoeZE#SXsyTfM328`I&P0Pm#HV?}0Zkto^C5CIzBj&<^QFA#@e!Mukl#|wP#ESP z^J`o;(n{gS4ZwS--)#K%i~MBh&}Jh&;Q2GLgvT$Azo_wJNy9z#J{5iNE2t*A=Mg$*v#MonLAO zDYa`hI8`pb=-tX@=WjFWIm&1TVq@!@+XmtiRql+#H^=Xc(q4ucw{_aB?~t_Wt~euQIkGeBPQH^*7F^}+ZY(e!Dda$dbo zLCv4b>(Y87D4|<^Qf4sW_}d_Sr2d57n4>*l zell&ihT;?d_Fw$J5B$*Qf91boQP%JuLEvczz5AqLF}8n7msd>(sr7?X`M1*~xN%cG zOhw?iKLRpD`qPvc!D5_Z-Y6`kT68(}1t1y$9j4Th{|`BTsrWwqxh@B;17p0gG! zRzSwutZ;gz@ff>!p)L#!u3e@Nc^!9<%AD;x77}QdrXV z4t_1%RJT~m zIN+_REHtBI#b>@V>;Ts9M|tsh^%ii(spA)J&aC1$d$M`qTRh>{(uKd8y(txPyBBWG zZmcp^lO40q-z~vx=I;r%=f`*KK#~qeG<y@1=;RdqzoEUquzeqfOIQ&ivwYr2(Z@zaf!icxvVk8Q9$ zEKLXFABHwqYaJaE&3QVtFGwUB{H4x?SnBp%=fb8f1_@Zbc;%QE$Y|4Eh=pJGw+R64 zFP?a?NeIR`(!p<+2lF@OcOium7B~CMd`-U=taTfFYzQR({N>lQH>?7KA0fRrOqRh5 z$%QI)G>)Jk|0cjZ9mJ$F@ncGNHwJ~w*+p8N>0z=D2e|zs?31g)}|T?-mIxF z)WzRSL>m$%U9WnQB=3{k1ibwNMMH#cPB%E5DLT`i)IF}QmFoJ0+i_seKFN>}8uUJO zgf%8hkZqk3G*o4O+p@oindmJ0!vSj~wi0oN@*$p7KC`S*ep`CwEO+~Ad}mH2cfNzY z**=T7m*wf}wEPdq{9innBY?Tx_y z3$;SSk$GKKp5P9Jr84<~`QRGYP>g`ZA}7>ANsibDh-e1mi~W3@Bm&Eq77tTH9_z)9 zFZ|LoomT@qo#7~)u(cdt%BRpZE+cN>@N~B%L!VOmBW@4ldV~((UB4AGE59{Rm(E)L zpRyN|O~TGws%}2#)=aM6+tp7i*!>5w z4)Vq5f$1);aUctB$eaip*lic$5vs50?rC)>J|ejy6ei~xIICb?rKjcb9Xv%N*yG%BE_Ux-$l-2r{N2~i*b zwWH|1JrrNqPiWGH|C7pf@(L_<*JPE>M?JkZ)RRlz-;P3nZ2%&%?+I=penHArHhvD2 zwV8hyWt#MOXs3r~iiED=S#l=XK`J8!*+&B21(K$##(&t9!8{32(e;vu!2($y^-ZnKGHjg*{=-d3*TRGi$ zH=HW_7&n7?eT(r&FiUb-9%3a3VkycfiLS$sW0{Mz*aF^Zd}+Gr{Bo*4R@C46Jx1Z` z>i&NRP5v%HHFPD;&G1TT>12(>L_{RbtQMT*=^~F9jloK@#G?SUWA8p2DU4u-=~_bk zYa)Io-$ndFYRD3l`$s@BF)t8wS|r$SR38Wc@}{7=i9N5phbSC8aWWVLidWCgiNLfgp19O3rWJjBc zU(4axM=CE0wTa79ufSmH6%-qKB_VS&j77~+De2LQxzN=bl@}FG!POd-6J8Lg+~O#J zp(|H!&QPKO2<%;|N6$RkQ_*bZkLi_wwl?!eoOO!XJ)rhETg%ak4z(9~;5#L69vHzK z95(Dz$OI9jHqF6BoQxV?M{qKpZND+d;NjBM*!yXU#Ku%(L{!!S>3+KtdGmgXqO-q~ zGrRT8B)p^cjHe-Tvyt#~jjRpPlC)1L`+X3dp)jD9OS}lim+n|?V|Z;btUd%uR=%j}=*Jg$YD6255LJ#}IM3wP@$=!UR&W(%;0YUHs*N;RmZ06S zrqmi1G#JvTi(~|-&=Y10IG!Ge&ql$8TPunugi8ZvAcNd zd71-NgQ9HTJ7bar5EF8vKSk_9Jc9EA0w+`lnW?^GwgXkp;l|pP4hzuQW45Wdq4#Fw zba7qwCIlx}k2;U1Yzl@sj3)r&kM8AKDR7ay7Wf-3O0F{pfnKL@_O*EM_kUIBR(&uX zQDzoAuKM~AOtORwe5v<=Q~kg0W(2h0_yPaDnfwY4)J4kh;}W^Sp@z?`C5_dRmWO@#!mhK{kU9{vMl{AZN$ge%>g9p>}jL@vQrKppWUxea(A z1k`JSL4~At>2<`dEQq|LH;Fk9RxkvPfsm6J7E@I)WDWqB%-?}%<2B+&-_m2{x4}HS zWGdHil&cgwD>UAiK#5GLC>GT2u=Mc|YbHKCZ1q=gK2*#^C1Pd(*8~u}7A5X5?$jCo z5@lM}5Op$;skYLv*Uo)2Z4aRQd`IR9bt2D%htFv&)I_VwXDFo4w|yOoYUcODs}~fuDsO)5Bx=M=_cugudG2F{Nya?26Vc!<%SX z^!psHE3~r{tW!&%c90?tRgz7;B$UEya#B9(VaJd61t&C!2KPjb6g4-XoK|}zdsICi zU!Vp^G^Lxf*vPg-L1ilqC`qe$VT{!(^U@sH=y+mR>M-9{`t$2%eS-+4J%4PZDlNOIjLQ3TOw4aYEwUjYVEFJbDJ%4kW+n5c@&0eMN z&@_yPEemK+%+x;@8v)3p@1O%X9Gg;H*>iyvu57*EVYxp199V2pJ;focgz81XSy_Fg zx$ucMeP8qL@#*-wIJxTf>Ogr|}nh3PqA+h7FU_`iwkGgjFjoDyzjc2lyCc-}rDw8cJ(GuCmO z`W|eFV57nol&}RoiaATMW*H%>%9qnADRzAb1a70{P3|k1p(K6%GS&3v%==`*meDbv zrw`%nNbX+5M7Vn+RxI}Yr6sg0O}R36mq-^P-XGJp*zqxT6d&`g0WSvC%=3kB`$+z= zaCGtGBfZJBiQMTdNc|BUQOYD7C!RhUD=R7R!#>wsmzNHeSD}KFq}++oUZJJoTNUjWXVIUq@nbGTOAHjsGt(*iyeb5Pd?zRk;PAF|&D zF)g{jR(2!>$o%5w+3BRcgc9cxXe}wk*p7htuPOiyA)TiY_E(Bxg=cI~U_ydSV+Ogf3l`W@G96w@duNmpUqW@i@rnIR1&TgtLTD6AH17|`Su@W&4TJ6P z)Ybf$N4V+1UZqp%0;i}ucF?VYY{>9N1&fH+@kM&qIt6IQ49X)rUH<{v{?Xva9 zWox1)>)JaL#Z*$;8fU9GZw06XS3D)5!P3ur#Qc9QnSoJ_7or+Z0fbU)#dX;WGp_y< zmcKiciKACeWdEEJ%lsuGH_4m}gA=LXW<1FsQ5b*=V_Wm0$Cm{4;g+p7aPOKbkoC5l%O0ePZS3TgULT zJ?ieqh~ZC;VUA+XwVIJ1nP=q3qu87Diw7fHE-lcoezIj`TZQ^N8d zMmAAz6KTAN-sQ>|Vsio(iLCZzK#vsPA@@3fX)L8XZzcBS^X-M;UnB z`uwdEXO3qo7mk=uoXIEdsh*i7g1Qo;W2+onGcsV=8O{w3htE!~wu`dJ2Xzfv68OYS z_28cAE|@POjj4`&B#3%S7PjF@kKopb8Sdkv#UWSlP z*{y-L+d*NhFf6L4e+MVSS9DV|E1%9HgPRIK;%d z{hIQ74x9X*q#TO)Id)!8sjHw!)6KB>F)|v_?Ur}T!E*2T_pw`2V$Xhg4FaZRD?~<} z*b`?;D4=^L*YM&RH&{4DlH)b76$^~(D-s+A5o0OHSK>f}qX>&&VgavV(db*`bUA_* z>5G)+DMUFE85%&?}#|~x+Kys zBaz7gMKQU|;xg3NpI+f|aTbD`ylT0;BBV8GG_CP&Wlf+qs$&d#;ouyz9dyAaYv@3s3h+ZP9Dw;=9EaTl-3W&GU8$ z7LfTl9_F9zvc-(8=o6$1-`|HpL?`Y$OTmoA%E9SM%{vi+vI1+g=inLVr`vP%N6cR* zUZaEW04sq2iI}0tRh-C?GPEeKge9Y)ERU$0NmoSvQdg!-_9+bNHm3R7Y16>fi!=}z zDpcX0of|08kc8x5o5@ZlN3^%i33#?TYfiv7^W4?Vs|B8kOvpxBtKyW6G->9%+z07L z3&+|J``L{?oND9het2KdKRy-NNXL{~J*PZ~X{*b5`o;EXHV&>HR3d~df!@+tosD#{ zTxADsy4N1>r);F_n`J@{#5j z-;4xX%l?RgLbj-%6cgo@VTX+og9$M_+`hJ7mqAue#0u4tggpgn7}7k-^~-V* zrkM;V5?SX8ie*1X0K#)d9z=Rsp~{nFWs%5r87){;IO%2@B+K z56B5qH8NAxcKqOdL^O!ET4IGB zo&&s+i3PL~**cI(6wGtFmIIayNG~~zJ%t2ejZk!gZ$xF#c2Lt%y3na1s53cKGwyBz z{Oca{(G+PH4gy3@V;(xY(#HNoW!CCG*bThVpGRhaedr5N_VjN9}F`sgz*e_4~q;vPv;(=3N{l#DT%tH@;{->YM9+>t| zjlZ8}vY=zkl7`>@(vN-h*Pr|Ri2*1hrjycPd@#LFYz?ZJ@xN@ z@s~dEuOI%mpZKcJ3{I8b|9&W?2rq=p(!c)!URwSBa^U0r_p8`X?fQOBC^7DMec{yJ z?=Kf0VA`yp1S&>Z#rxxX@vH@?j|Nol0eLpQLuonhP#iL&un6i1H8(f;5BFv(8zIDi3`%9XpxS;@S%HMgXD?US~g@A|;0`wVwc&Aa4a(pf{arnp@S)8l_2hyYjnca=FWBfJr(4^_qc0N#A~+;qL#{cdMa z%ZUEesT^0TUFQf_>9N}wz|8zG%hmFk>LrBl`zkiFi`d<`QT_2BvP~uhxE66JAT`bf z3i(e|^y*R(l3+r|sx@{brYf6c`NWaTavExViluV)s#s$7Fq<4M z3-+|nF%ZFe*kL@+OOq>5mPmecy;5u{RBy`_ldF8tn%nel0TEsQmY$Uc-yi2dNXm^I zzD4aF7dO+{A=1!+U}9_NoB56Td^8;nbHGXmdzL(kBrsX}TvWiS&W5EiJ3pQDk2r8l zlof3P%V<^%X0CrxIQKUuod|(4rajqjhKxi`dt$=qAciuuPv{LD&!wO;O>*j$UlO?K zo%E@b=QvM>Qk*+$TN_Go&J;!`8WuejZ*KA?n#dpo>Ta!;rb8;t4~Dd2RS%=jFsK!fa3nvZ z11N&8igvz5*DJFUjccJVV|@%_sf$=B)0$rFRtP0$_8~ zi?))BC$f^mTO6dg=XMv|+el|-#HN?r{DMb-3jA>A(qkNNWbR}uRRxp?-}>hG|7l6f z_)I_m!?c`eYdL7k$?za80$ABfy!FR2glYDjlvpVvM9hsd=_hG9V;-Rhg|1;(bJK2{ zMkr-aRm=`GR0dVWpsR-z^^czwcID0@t%EBP`-rW+KLGC0! zNnR7iFXfYQ(vp&T>?Q_@uq~!SfNjJgF$Op-1V~gqmC8f6)djm+gHkc+NN0mx#nkwb zd_%fgPL*h8O6KT_VB%ytoQxoewd=A)>S=Icxl8K|8mMDG^^Eb{%|zSm zCY(W9+wC?4{Mz8}UjFXq@0I*@i}!>4Jrs8*{93_3>8?Z}aTlxihl4tV95_^%$iH_U zJcnIlS}8+c{v!X-+q;ymYwtdK-Ssydd&3)V{43e<&VRkU=pP>}EG{jt3`eVL>*HO! z_iXIFV&DEN4;<_~cFCWIuDbe~ax%U4`0>N9dF|^qkG%eyj^nDBY>aNwbB)(&kze-N z=uI9Dj&Af2y*c_T{@g!$qldktH+a|>9rLg-y1`NwM%U|SUl?6ya+QVAQKl?7d=q{Q z4zC}Qm1SXcWLV*B9c}u(_us-l-*wCR)z?B%s;3wP{$&u-unZD6+~SAUa25I(z1C_jk6vRnmq&-K=JM!TtGSF3NHv#7 zNUH${ye`DajIObo%cHC3swv-oBh@@~)m7P5RugAJRMXO_%4(E0)cU_771F3!{C*YL&wk!)lGg-eI-QVZ-;9M|*s4d9>U2mPfmMZ+SHK zz2y-b+?nHb&G(i^tG>59BA0DF>Re#rl;u4fCgua{K?6%34w9FK!vTVbIb4ZjhQnSw zG92~`02Zt7b{y|z9DC>yI;hJ`!i@PVv>X?*l+N_jp#F7DwTr<^11F0Lx;q7{ptcml zux+_Q!Na<^vMqQI1ruF{9g%n+S;Buf{jNTdk@Ua3<^+g{)IKH>S}%!P#~Lg*%>S@n z?p5oom-|m-WCAX)Jdq7J95|8bGbGPp!Qqg}t=7wlxd+!vrkkA@DXabW;7T0dLpo+H z$!dvT%je&mtt!))%~7V&KvEm=g3>MhQqvjfRH9EobOCDkNs4FP6rmqqFY+RU{;m4P za@c@=0X%7h_9lDyJLPZ0I3OCijT-)Iof!>pa!utlWwe$ic&v(Yn#AxlWPI$)FquV@ z)sOG7;(K^FwryBM+cUwy)_4J0QI`xSM%pK{$QxN5IF0X;CfgqYBK5~o(HeF@^p(M( zC`T{~`>(^M2HsLNGfw0azS#G=UQE z`}Y}}YeQ8_d&^<^w|+PT2!2-b&*7zEqP1KmvFtJmP+!~v-GMJ8!kx;~Req1V7nbIJ zL@veVn7%r=NA=qG6Cjoi^>4W3RPPk&HZ0+i!)K>Ujsurkmz<}N`L%|hP|bvBMG~xU zwi$=vfaIPBdzg`z`8&E@$ju;?>{|0y1IA;TeAP&>+QDy}18|R}@rI9)a;mwke zL7Y%EHM@~d|K8lKkpjK_!EdsJIXj>&BAENiuclK>2~WRNpCYY2eeUUWmkN3Me0>*@ z@99_TqL2{rZhZ>;_4Es$PVdqtPrq27!u6j1;g{0gm2~>m-%F=-u6Mus%juMM$LX`_ z6r&{G{eyH0g7oxj_33&#{qpnaF0rKE{r$SmEWGygi~m=;%am5!eJY*qNvF^KLOKO| zdH0X&Q#Nw-^vm@ra~g5?E9v3=)jo#j3D)(HFY#v<4h~tOJe=+e5#tu#SWNp)WdC_B zA2jY(BUZ3Gc&pVjK+bl2u~Syl&=>E36#M+$!{6oP&bq$bmz<)<=AEK9=o+}eXU5Yv z%sWMIcwqX*^7=Wa==J3r=AEK%2uHz9<*|-0%Grq`D@ynlL(QymM}zkhl| z-0}JwbspUG!1N8g**G$ey+6Je&sxCsDlBa zpM0ZlzLA?Y%bVB7&FgVY+~9lh7KL2z12)H3uTM_Vs4mar6utg|$uT)iaa=~SGOeJE zBs+E;&R}`&3OGV@4V8dgVAED$4wu&dKl0u`*se0I^WAIhefHVs>~nHt66CRp#j0J{-giED(XtrQ0JgUXsU;6VH2C6X=R+Ks5mm-Oo`JOC(bYq zGe(E0jx%wjZB%BuRjlqBGxwsGTNkffWfYZ``}uyKcdfn8$>E1O&eW~jY0kUXyViQw z`{Q|^-_P@+q*NH(16*<%B|-I^Lfa;TsM%1mW)J-OUrl}o==JZQ zs1(bOlgK+VL|roY>8_3xS}^eji*S!T-Th(vXAf@p45J~43UadR^Q1zYv^@hu9h>`+ zBcL#e4>~M_W3Zz3&*XbTKJ$KRwWll+@EsEj3qRvlBmK}q4+1lxwgz8g$QM&UB`!gHMvr#=D$t^`#Uiax zx@&36eF0D(((11NT=`*oMPr))iZLaAxyMEb^v^3a&bx|9SjfHuxpztPjDsRXO6T!l zQ6U~hGs*N&z3SEBuDdM(twWb^eX*(7^_|u{&o5!9{f-BgR_Xt)8*MA;|85X?-B9d# zba=xP!y5&uHx~OI9p3oFaIfy{1w?P)9-|8--rgsM`}Nd*UivVvvn6jtgBM`WTl@9a zerj(3z5(T8Z@m5JaQsa{xNhE9-yC~W`+~l#c+)#byFxegfL_&4n&CI!pablN>z?@h za4V1`rR@0Z4zFWIfg8;zDo42`YBFI=)Z#ItsSsSa5#BZD@jF1*<2(L(O|&%t z=q#{84d-ENP|1q1riOJNf(wP4KodKJw_Y5gc=?jpD(D9ncgJ8*GW-a8AF!Dr=i$NJYH-<8>P`?|>m`1}} zOfP?mH=xLHScdy95X0974Kg7FQ^;hdMkWDAf+E(j3(51|Jo1}j8ig;7d+<&(>%Xm|OKRtT0h&Qz>u&u8B&CB9VZ6N&f>Thm~ zH?_Ma-|fw<@uoH+j;!^YTjEXaQu3Uy{mo0_O>Jn-u&Up@INsE5$1Jh-n+x%#5CfR8 zesfd2DXalwBYmirBh78w>nZI6Y=q7#kfHz;y`d&mh}?kU8=B+TJ^5QDO2Z*&BcwSW z@aJU3qn4bA82kw%2;zqFfYwZyIM+y|hz=z7twr|m^+`IMt^N>YK2{~C?wx?&z4$oj zca?D;?)mcwnBrIgNwaA^bpEpIqqPNB;m%p~(FxcL3mdN8jb(q=h$^kJ?C;_w^H)d$ zV+Q|SR#Tui(6&h&l+KwrQf{QN*2hK8;q&DSAm&V-Lf~u!aO0AejQP>?#dV)2Av>5sYeR+Brh8nWWBO> z&l8^U2Zz1%H9-w}_6eD5q_lW@RgHSdiWH7+?t0uDjMScwc9g6{#;sQszx2M_yJ=;;owffcqQCvSY&1s zaQ>bZUOU0N%YTkNHg$v^yvu|Ci@vv1P5SsrZ#-`_x#0*2AUSADY7p_O-i++b8Snzy zTUq11I})@j@Q9tz0DKC$u5qq>^gBCS=wszwhL^OqWhMmCspdwzM`m7HX*RcGL`JQm zTry_m%?d4Rs8_L+4ro&bQ#gK^;oHS_urnKm5EPVjSCGP*eFmL()UeVx%zudqNq5PnWOs_1!mRAWk(}>&|nKp&RPfTgd?kJk*&)+r0k*=a?dPG zuq4&B%lHIjZ5oYBZAF%Y7U*E-HuVx+e3?1Y2uP!YRj!}~eE%pdVh8q#8|em6{v;%#^s(%Sp9)|+F{5du z66dcAXNDm1NVl5-@X3r%(pQiGiX@qi;GBfWCS{oi6fo5fGrq?csP?jas>E1_+^we} z{(d^Rw;v{R%V(4>nSDhkS2!awo5LxqaK}`w@8Wi5ZSEQ_t|DXq|8P5dAHP;6UbdfU zF+GV5ZUJr6tcOk$G*t#!$Z_qx{aH=N^B}t@8SYaDmN5l%U zxI$P}Cbv~KHI$sqmd&*Kt^S!#U}K0$*NW$HOx&|&kqxVmb_zV3g?rguqAN3Fco=0> z;9;2>F`zbhm~(%^M@a@eFgq_JEumtTe#deP0V~8?gNsRQJ5%D(Oxv-|7@zP%gNvu| zA)9V+vE0bPwhHJ2xs*KImoGrzVysQZ#drWIf5hZ%{Fw<{%uXs05_60jsGSoo<}(Qw zzh{3T8>7zhO?6gepFR55?5vRSs?N^bsU8M0cE17{Gpp6<|7V1Z@dCma^?u0MVI?eA zgN)l~6GhZm4&mf>ihtvgt-_D;nUZPIw=uzSTj(SYb!A`bN=cva7f{odKyt}_-~ zJ3pM?%W($&Js1}93H0xoA*S&i@w+!HW$C8go{}GlUj)q-MOkbdoSP_HMN!P_2fI!k zxVvaKey1elEJ$Rt|~DM6;q#?XgopxGEOz1kMlwAozxqK#pyQDmCzK&@V=jDXZR)hRV- z8?(JQCX`e>&r9W8et;_u_ti))iAF)u#as!P=~4BYtpW^{H08zvAat@Wu(3S6*kSG= z-k1U@_wII)R2_cVm=CM1_RDo*Ji2pJ3zJ~@bAqEHMWb19SN3R{D|HIK8y!riI`ztz zEwbgpAygKv_1HcX#>7-9ZV7D1QWY!}*G78Us<=7C@h@$C>=+nRa5S8gGvssyCR~OKvta+PH&O_A-#n!26JG^lKS1MhXmnSsZ#aY z@w&ru=tb-cIGF3ZeKC(pMCtqY(a-gHt76dz#gp?m<(|;;?1qW$mzpaXle=4ZsIO!1 zCm-6rfm`>$8$!clDPwViYYAf3N%mGMLF>jJYG%e^#DefuzP)2j!Pm+(r%s12E z%o{CbTw!W>>;$N7G^NiYws=loP+TUr&oHHU33*C8n$oE)bgSw>8Np)ehVXGo$G0lz@hOO#kQ=z>fK1_4g z#RbS~OExqXC6e)}jcMZ%`#8MiVbtasc2_D|j zytcJ4`HX3CE&l~=ZbV}6or$8QY2Z$j6L`D@a}#7*TlZ!y?-ijOVk z59(Oa8TM2>ioofO$<`G#6&+6skLZ$u4esN`Xo7wcoEyo!uH7If&A$1vTr!yeefnX*f`Uw3(}RDHE8Jp!JRiDKPv*F!$pApzu^gyA zpkFg_q&&aoHR+0z?PJo$T=udL16a_klWxTsBo?&$#5QXyBJS^nK;pe6dd!guqQ?{R zNSmkNkwFw_9W+MrppDO|zRir9m_%$dr;_H)$SS2FVom~5LG9e7CdR986Q=wc$)z4) z=17pv%EWM37Y&0tFUW<{Z^#lom0x~|g-JmQr1tzw%bGKNHenTnQGC4=wq z&?QN2#fyP4>jlMiB>kF+|T0SfJv{PgGwDs8|%%#@nC4i{dwl{xKz{K^rRFYK4 zVDxl0q!uj2+Nu|%{@M##(@o)2|Oed@jQX!NOsZ%%n03x4}m0cNU*Rjbo{ z*Hs+qOR|dUcQegmr|QaOwOl8xp*M7nwWfnNbV?~!rtZTJ`MozXoU#xaiPoW}c>({? zaHgy_JPZT))gi6%?n8KV9X)!^i`3%FJspHAT&^z?oV{GMh#V7niho+`H z4r66-dM}1MAn%5T+q}SV{lbRPaQT{t>vtc5vU|AV%@yW_vY&35{7zM06&u=SI2@$o zY^fR-!iF-o04e{U7?-hmiwOkiwS9Qx|AZHz?5DTFgt&ec`b?B5Ttc{StJA3sSu8o@IJ_ z>?`ok=ymm#Y{gd$sgMr$<_nK~Opu`XZ&;J+^qUB+$0y-#XM?Yw6=hg(voJ)hk|?f{ zbU~a7?9cTjbWVEehAobBj@bhX&^=9V047PIFa_^uwJHq?Rw%W~$mUD((g*>OWl6Zk zbElt!etA_OQMiH{i3$t{n?a<8M>7m88W%#T@bBs>(PScNz2YjZM6cK&W{GqrdRi>z zBz7oXiS!j)2h&ukv3;r3NpRgV`yMnfJU%sGY0h zxfWb&Dd%i{(kr~Dz$S{k3i51}-WFj^Xg$d!=SM7_$U$4F0u#-WkxBUaNmiHGGytz% zJ=suRNka5vU;8XWXp11cDVgZS@*F3B2%%NvcY%$U>pIH1 zMcz8|VaT_Czp3A#JwV8l0Cl&$Kyc9Fzx?J_`d_&iiYe5ZEJknX+IFkF8V(iMfl+OE zx{khBNQRnbZc5+)7B7W z(hT3_vnh&ckqU`p5t*rTnspAl1hZ%kwws;ig@>kTfgWH+Az0i7uOW5JjEx0pxh05D zmZ9g*eL0zAvodR86!HQ9*TVz+po^%O%44r;CMQLn_xTFST6Qj_s; zgRYOlSPJ9tZB22xo+U)bs))lNZLE#NfZ-&wsj-zgPdH{&YGz?6!ozTL)cmvs=I2`i zV}6i$HhvI)8b3agN=t$~;lny9y_A$r8;#~O{SUlLfC2t4S`#EovbIRq3_eppO9(1V zGG=1{#vhN*^qfbFX50WP!~522rI)up0Cm&iY!;63roDSeQlUe{MG1=WC|MngqdKXt zwu13DmRq%bw}!EpIn>J(heh)pD5^v~RNSGVfrFSa;hEeZPr_23=8jhMZo}@7XgQsw z1`Q!Jl1Ow=W?Sz(N#E+1j+y3eEu_mLLA2UH_oXL1=zHk)t9>t}6 zV7|OmqqsCiacLpdSZWtt+lqF%J_eo<-vf%nQ-w`NsxUsGBjy0>iva%9M1b66bFubH@%R~RdgavC$;{iXQQb1f1u+S16V{36xHLdYu zKquG^$MSjz-YBMx63e*-?Mw@h;1^?*MluR+V{KHYk)W{vUZ8-QZaS2ppHfgNToEni z9*tp0h(4mFpUg{y!4`fiF|%86c!%+6Fcr#%enAK@RIz2g?aW(6!tjs}h>fRlt zdwG~ZHg^^!j*SP>(4pdz2ueK~cMJ@}SoF4H%C+u}Dc`DP=Pn?Mk6;XQo#Wa`xW_6Hl%*qYT% zK?0Pd53Yjt@kuUD9 zDNg>fV8!Y2(!0fYkxgpcmkHjpC`-<2jR zr_Y2`3KXqtVx8$Mys<2a2{hUN%{}tu(}VkgM!vmuI3*<%zxHETrlU2b_xP4t+ZG=DMPHFvA$R! zBJ}7P(uC^!I(mg&LoEm6h2Dhe&KY@n+MINb>N)Yv)~n=9d|Yd46vs;z7|+=8KPF=D zY5h5+KQHLd8U76Z^<@A1yZO2}Nd?152kJ!c)gd`p)t)k*fOOUytH(ZLM&^eT5GNoo z<7+I0P2y;grF523Zg3j)n^>#_oVUVbw0U(x%#Jm6Y7xRiTRtaaY^BABQ%yoX0WN6) zrU5u zq(ErA{V?tpf<5mrJ05|cHMp=W2=!rSN=rdM=7;T?)*?MV*Y4(jfzLg zYgIg4?ojbyNk|fgjdGWY`^)Pv$}#&E&~eBUn$iud2}0N05RlDOKl7VE^P4TXg3Lh3 zF<`@at+4BXu5H)rYVk^ri6fdINNbl2zEjXQBnM3L^gb`M_{LNDa8}SY>mb(_jAeya zvfpY}o}27V*kqP|l22mwh-N2=9ERSh*$=7NXV8pAvnTW6IssUxoTK|P;Awc=TQ?fT zy0u3!kw!7+QQ(TDK(=3!&`dgs7{d(-PVh;P#g3p;N>2Q^QRP?G0EMrNfdVHH2^4Mt zZp8eRhgH6qmAF1xwX#>`*^GEs%J~u}2eHNQ^Z%nqbf3B}2c+v@aPJs@joAJ=~CP zV%ohrzefkNsL^K`&ex?qYTsRcOvT~ycFd-HUFVoF?a%%5FN5`&a%Gx93&8w~#t8kh z2AT9GL{afSgA-Z~mX~T|Mw>Y&ZUZ7Fs}%vt>^V6LSvOeqoW*YhAb}Qote69od3K?$UiaYD|WtSWK4iCh$7} z^s>2=&54-?!3m4S+I5SME)9O19^+lb*4wQGdKx`nn3Y7ksW>rKfzNkGrl;l!I3Ar3 zHmbl{)X|a2%@eG;4?%CY=nf~6+^-nZt_U+!Q|#`9Nn0*umOQM_Bi~tsc_l0F5Ez`# zN_^t3Zoih5->h<>yo*olhL@qRR!4wlSlXj=v;2AVYaQh#OWoK|97wF3z;Q)+* z<{DCKU|b-%elF4>G3+j-QO=9~VkPt9!(t`#;wF*vyl|edy!ePneqNBX4l-46MBW=2 zRbI9icw$*o!$hFLv(DAEelYotfggy>RDwv2|~LAH}6`{1msw zxk?|~*S?#p+xN8(Q(WwWQi_8*=>z+RPPEFU_STt90SN_D4Up9UBIbFN?^m8#N0F2Z zj_5t6l50uM#jJHidGR3zm9C#siJJXsl{YX6>H4I~TbO*63wyz%l!x}^FR9#wu~OyD zD63VH==%kgaAs#zA}l&U4RKDsB)MvamAFZi16HOf1XulR?8 z@+`bgN4!qI`u&%Fye;n-z1k_q)EMHq5pE!O+s%7nk1B5{`sEJrLc6%(mRWNhcLe1* z9E9iQ(xl@+P>wx8Id+S3>}XJB*hfUddVLm|7!#V_7yI(&@9`?=6*0CXY!zC z*qmokhK=(9bb$xy0!+`UE(Av~+~qE8Iy5`&E|3y_ybGMG`<`9cgyhmMX`{R-Cgj;H zxP~4%=R6_nR!#_pIeK&Qg5Io)3AxU_LD-yfZ`Q5sjRgGnnvjKld7YZ)i1;}sVosm_ zCi6qg19oL@!7O%GQW2a*Nl!Gq*k8Wr(5y7>B(5_3;A>h6wr>x#oN?5_@M5katsrkK z3FQHL&^a#+g+d37=e0r?d3t!Tydj-0$F1(; zmP51RG_zu`vX3w|>LW%_q?80Syzzd0#7)h-`-|CdJ(IS6MTbz7)1h-0bZC8ah&-(9 zuS*WiibufuxMqiNfF;*z>JV?dUxzO7r14<6EhgFQl8hRCNvJER?3IzzAgb$ot zxw0DqrgpoN3Pf@zH>`vyLf_#Z-hGpG`@wIY&xRYBo{cL%jRl%df9--#Z;Vf0?@w>z z2qJ%a!am2!k%lZcxe2_#HYt!&xV(U*ile% z*@$7kY;A_U0EF#MXomgDeo+)x2E#6QKnoofk>1Q|q2sM=SPHF{WAjmbDEO~hufWYl z=$IN8I;NQNk;t(FZks+Yme@e0AZUy94345Fkh;45;E8-V6cBXEs~E4&n<$3k-@aT3`kuF z8J`?3f)}{H2kw2bSmXvQWta{#>(dPw_YSX)$L=d{FRm`GewW9dW|V5|C`@21;4}H~ z@)+$k^=L02AMG`(Mtk{awAYM}_L_RMf&;#ADkpb}@sAGlQq!WXaMH-7*NExHEAj#4 zM9HOk{#kl9zNv)WwB_dkl!?;m*yf`va^4|5B*cSftg%L)0S}wunhIX(6y*Dv<|>HU zG#E2*r~MRRAjKe9S!nM2E1m^>1^r<5#zf5?6KD_F%pr6fZ8xUp@|~aWjfW9jyR*61tN2XnS#m zI1;hYaHemGM}k>1uf(-EWH{K@RS!pMPMPahb&VnMyh=FTucd2q&Uj6HMc0^Gu!C?! zls(Q!lW31Kf(jBR&GlK`htD)84M%<^T|cjq6RXTgW2ZAG&9ymcm`8KcFo`Gi9M|Tg zVK&W4!z@0fdah5Xgc&s_4bx~&n(Je#zaw$daPs1$@nd>~0-`7unpG9=e0%WDFx}#v zKeji&hXPjolN87kpP)dV5GM`)e+LEZzZhzyg_|i57Q|2^oQRV~IN3viaI%{M!C?o* z0fi&v#ohbbu-M|jw^Dpm-YBrUAi05FA&h=K~xQr?Ok+7CO}485Cm)GSPI?|*=LiY~^5BrjgFuEG@F_|VXc}f2)#G4E8!Fb}z!G~G@3yjaIvjrC; z9(pio-;$B=v$B6P)UgjifXGW@3t6AmWRGPM=P1b@j6lxq@gW(ElK3+5-)p+!bU zY}LFY&SG^cP%vRgPXLfsf-46(d=u@+f^>2cSrfB4+@X-f$Yv^ysoU@5F=Ulb=zt+y?nwd^RRqPg{ z$NWhMw6#|AYuvEPBqUoHD6h?)mPGeAbGG|jTX`N_AmnLM6uM; z?y|+mY=}?JES~~c^E;W!?A9YicP*Pd_)EKo`OM9B(f*ETe|Iu?OKJUCre1tu+&SeQ z0YcOz=l@oLd4Y|-RQ(+}rgHFwup;%1_!IEev)G>VI+e)(Z+%1!Oe zSgoBI^z7(CG_0#T|6KDGH`WHIq(zmjx8MJXESp#Z7({j$4Vb%{7ewrADJ*kc-paI@ z5C&v6qmjn^zR?y5q+-sYmau{9xv!T@Qv+j!4_YWULZ(aBZ&HKAYc z*ME~|-IV;Ly}jji(S*#lG!DoEvn=c(y>^_CF|ufDoC8pYSEXAOo{9-xaQF=ZN{|Xx z#K!6{Xw!4Bg{IwY`cqXFB71ypbi>rnAHklbrMGmBRz2Ktm;&^4aWn~fNHc6uKRbd5 zBjN4ssnJvRl83&gj~YA+rY*Uj+K)nW$jb4Kn3qmfq-nGDx@aAgCE3Thiwkhb`uTR= zd&~jr=LxnA{}>&t0rb+=;ERltk>XQuHvnZrw0hneZ}6xhnzT&0x~46GMJ#&3#N!9@ z3G4+U@{WVWVPZbd(_x?`{1bwcX&2Ly?^tc@8Oo<^7br1yngk#sSafLafGZXOgM)PA z0-5?D$&sY>S>%p}kxP-DW0mHxn=fLK&^T(ZJ;8;dOrfdUQKV(2dO6-F z{Iyi!o~sd-LDOKiA{+dO8y-ZaRD5EgPRju}uyo5YD5eFKuuOht?xvc?A!`7pM>guQ zJDcR(6@4~V@KTG-NsTZ!qf@od>*yIyEa)-AUj3hFXB}-1o&OW-3on!n{;XZEY<)b) z>UA}sXusEbnrgTAM_RJZmtfCpfimC-ORJ@eVArPK$MybwId5Iq68#IyMIa zdEJ~iDRig;Ew6L^d|GEDHyx(K--RWHq_w#@z!cu4LQh^VD^r!$jApU{85C>=5N^?m zX$DE*o>nK9qr(L&WUsn#6ML6W#_Fgodr75rsv$`m#0LYhI+*IbI4|b0I0x*TrWNt3 zfGX~WV;9PJl;IHeByXc!yAG3^w=u`(2>eNE1KF&QIR*0EN9wI!A~wQ;uPTbDmy9cT zl_Z?;i~0J|30TSoc-Yh{7BY6UROy2sVSc0o6Vl^H5te6V2BKG))mS4S(SbIaV()FF zEGC#HVB6b#3qTjU#TFL3#TB1Ne267We!~t^GeH#87?@vWK-E5a{Y^{NGyj#}Z}DgF zd-4?EW1h)>MAjn{>SJQfp!mmwHRIQbRP$6*^GvEa+0>j$HK&`J=Tps@rsiy_IoH&@ zlxkjXYFfWa>D4Lo}9dp`O+3gvQaWJNj@hYnd%h^G_S%v)obya z2msxr)(BznlU+aM#C3i~gsnHcNR*pjIBsq}m^o!O*#Y2hRuE^->U~ihrx^*t#Jkd4gLt>(V~1i_X6GQI(M8w|Ka@`9^y4=~SLbRFVex6NlJ)-^K=G3tS_+Ju~w)i7_hTwUAoja`3+&RsG6h- z|J{0SUZx8A53z5mUZILqRq{_6omG6E%4sV1kDhytDp9rOwCKEggDOQ7!_76#ouqCZ zb+3)pouY1zI$Wum=bocZtm4S?#_Y&_R6WhD^(=Afv_N;jBrz2I{3P?wPx<)iuTO|W- z1b&7nEp_WeTfAgv@H8?Lmro%Nq06-*gRY#J6vSl}8ugng-tb}^;1>+kZ0f$9lxCU> zSl;R80=}s}I9e7HI{`ApkOq~UJ92T!WPEs-0^7nP6!hr?eL74R z;AV>TO%sq2A0ZH}13SfBbB~oO2F=ymTzMkvDJ1yGUM88mPeS<(TZ|rE6HY%_)?A=? zKH?0r>U;haD4h%_Jxla;)C82iMzUbmJRiZq8?HIp9@V_%n&V?NN2ig+QV-c%Tmd9w z_fNRyIbUK!p52Ao}g zhToWY+b~#^uX0YD%JXdq0&X}QHweZBQH{Xz^h9YWJ~bgVwync%;`I!r9oPGZYi}Z#d6wfDXab-^DaA!!H)?d$$ab}gCM{?Rsk4#BAX`)RWQ#@1>nd+ zO^qsIsmChJk+Pu8E2}^g2R^o2z$aR1|4u-9hMw0z>d9@|5TJrk##$Ay!kmxQ2w?My z#cJLPpk`GXdKNkd17&QTH4%2~X*8k$+{A1zGbd=DT_V!kO zfC+6?gbWWiRXYd2;$v9hcd)6>id{OD6Q9hKnEe%phZ!LNzOh%A4aJQn0W#++NgO|7f8zYS|gSb8p zozW1sQ|_Wif|_01SwGNmr^vHm++ z1cjQWL!p~2B`LeyB`C37(agZzI@<;GG>?4Jl8o#HX-p{(Pka!p}7x~wpmfb=M;?iw4OgPu~a?9JA*GFe`*f(T^3AJ*jI=* zf3*nxdPErmVnp?nROdJ!g;8kogVyWKG~e1N`x&UFq_cYR#qqGkbb#bP{4)sP|K6&O z{y81_KP3pagH=YjAsVWMY(pwQZc0lAbRu_G8C9gfd-}|mb#o^DN&`|me?U7;%g<_v zZrQuT5~R0_#Cz6-|2zyYhIzQL?tY8sggpef0Ad%weRcM`k}ftT6ojDVGC!r%Hw+)0 zFK5~aVPuG_crXt>*Fi|-bDOG*V;j?*2eo$}c}U`I>Kw%)Zha&HR4+?`xAw9oJP+XY zUWQf%@Cqq1`)MyvYA<(c{z9ox#g)~Y`K?nw`P#WZ{CDr{_Fk@+Ow$pGiR(Q~n}XW& z{yrT#m3t!x=)!|~*TjbfBo}@ZD}phf?OuQuU>l~Z6@!$RM(#riW--_fm+2!qWGH1a zKRD_((~@aA>Sgf|@JCS&1XRX?BEXx~(3rd$nSa8|X*LTCG>kPCMkcj-VT?fuQj6}@ z-LWCScn0W+hKztP-5S0bV*pOmL2wL}(ZMRi(P+FWEn#MxoM)V+y#Rsy76?QZ!k7+% z)V$d;fsNK*z0kJ-+!&U?LmMvPiqT9N*=ZT2NUt~B^UanJ-Au@?r9q$8Y6;aXwk~b!w|=vFqf(m|8mc-3YQK@U$_p;!^B!yLx(}=DXU}dDomAs}Y0W zu1<~Bi18-R!>C5iStlk4D}X)J@3Z_q%Ws@!Cs=dJ7bZ%e9rhXbG(GXkM0q=HoN-HU zPt@vPI_R1=X**QWeAzXxk7{Iud6h4m^cRkHG2PShF?lLb9`C}(Q9jwlJ%X{p>@bDh zr3wwDBi*aF;N9ERX}nA8PaO3_&yUp{cg+i9H78tiZnEjBy74Tc*&E}&G>D#)Kp@|L zW>Ts{_ic;&z(VNp$X~(Q8c71qyd%kLM{ z@00vK#c%Q2{AI33vn+XyiLcf1`t2HKw)vRkzIMgzH#L$AnS#di*PncYS$<1d(8yGO zNOSsPeyEr~guA|#^+z6hNX{DQ1#d)<4 z6vQVvPND;G7!txSBBX!V*#f*m4aoXQ02Ihb9=N|GLam?${UEmtpL()W47RYq0dl@z zUoPgaz)`Av*-4OC1Z?xtG*Cs@$E>ir)HT`xeX-nRN|T8I{|VuC-*}N5yZMQXem8~V zSbEhCDI|K;4;ow~Y!sd-PB03IuqSPUL8Ylcyd$a7*b|0e0Ht{XrH0|8smO`}hczWt z1Qr;HddRX;MUYKE-h@5UPU#LJe?L zf7rn=hP|fdc|QYuHXuH0ICuphx*7&lUZzSl#a|*_(boswfb6spURcRf(g{#L+m0=M zvMnT6o$xDCUcQ)Kxw?In7p`u<)t1Yu3_kR&Q;*veD9MRH97O2hC?4Db=+g8A4N__xiw>BDDQ0uNa95Q12N3EVKZmI>x+Q`6L<$&Ea%SkY8a5= z@KO8~fNR3oG-kE89*gCG7SFfCf>__Q52+i6GD=>70x-CH?YgeyYrY(nfpA~l$ zcOE!I63s3`u{kNN16w}%ijo;jYC zQw>|jtI|TqMS^2J7jspnS2kAk4*(|1OVi5#hB?3$iY{I)Kfbx{S|nE>FKLji2!t^mH%@^CCbk@ey)B5&}C@->44| zuZ2&n+*yZmm)ojA6BRH%=njFABkV*E0C2ky6A6h&E+ey($6htFgSc3VMa9Jm*+M5$ zs1~&;REuAPYF#RFPh%RE)EJlQ%fwHQf4M)?Tk&PSRS$%)L;4W|;goXusNAGtfk0P^ zd7|Jb21LP8%#gK#qDL4RMW-}gY?YO+J~_OCar5II0==#%u7DAP%7_=2HV8**Xb^Yr z9bOra-B*6JxU#tNT^@6s7LOmz%9{g@iPPG)YN*>{sM}T!b@JVYicYi{>Y-?qAT5Vj zgoA>hgT4}$MJ9;D{Bo$)L$lB@+Y-hcz?Bps;#dhO*4*=ADOD!brY#D|x&!jb)ZI?y z=A|Lfk_gR48RU%UoVNEYj$LRbov*RN?1>?_=WIzdR*Wibf`Wv%yR0cn?w zPr^pjrQ?vcaRh02NH&m0&|P%~1;nkC=nERw86jAbKZ*+24&t>A>(h@Ajz{ru`7sp_ zl4F8md+fCWe8-j4{uK8!4)ZOODhk-t;%W;_;%m(C!1Z+%=uZGwSHVXFaQXTTmDr*P z;OZ(i>9utIs!C!s&Z{KAiU2NO6Tn3RZwGL76-@(&=j)eLV#Ih+<UhK3E<-RW(RO}ivn&hU7u13clxZ#(g9q)CV;CeV=e()1g1EE%hxA#O@P>wDhU8P zp01Cnyx9R<-C~bKu5Ljn)FTuh6XV)dN`nU}kjfsQfLXqu;-d=Z>MD}$UW$VX=js+$ zD4eUSu(wZ8kdokTifa|l)h%`?oU5z63O7^il9{oq5V8Ffq*vHOLC%BS6oh*1pdiL; zkplDdb_&@0f`U90TPX;lTA(0qY@UL+u>l3qXXLq6G#CLpiUw0!s!DsjTU_NRt8Q`F zQCHpKdh5Qr$|*rqR=2ptQChyn;)Z_9)+G)OV1m>2NtHzC5%twA4mk?U*GPt4rGz-4 z5=9vTrLPevyN>F*H32UQG>Ll->mr%6@y{aL1m7KSoMe5Z{U%6@eG$?MTVmA@Fh$f% z6pO(qw+1J`XC*mPAq1PipJ8Ua#J@^%HE-e!m%2{B%8iJ2;@^`xa{F)^oC3GKB=JtF zKWnqZmMhWpda%bdcqa6-{5nZ&Jul$Q>?~$;pi>xBYlsmQNLV(Z=JD)bL>ZeOuzogK zqexaJd&nZ>68*3hn6@8UCp(=423m^)06;rTpY~}!_%SQ%?Joz?;M;+yn2x~ZLOC+> zgViib(E2PZT#U^?qOTi=kqia36dpu4ZBM6ZDUq+P!#olWZ6 z2D%|({G3yMh<>mm)b3ft4s(bLnVrgW>rn|9NJE)>6>fxp~#+f ziV$PKA^zg^{RBwpKsC!mQds(a&N`r(!H-L9*W|kGE0irtFI>M@LDmKw; z&!cSD(u9-v7tRxZB?PkQEU)6l7KLkleEwfq;~2dJPfd$I%WQb0bH& zIBF+d$(OW}DrAeGKOnZFnTEw3cpmz|!Dwz<-uS6`-IOVwJ_;|9tsbDUdux>+Ipj}z z#COn*$Mi6xo)R@}iF*=YQ-=hXc_-cB_4pP^E82D$s*IeWhap|BSd$17r`kS{G$pTF z?UK~Y1aD-^9Ms*>sHJFOH?dB`+lxDFXax^-mYXf+jm6ti2&t8l{6rJs1EA9K#zo=j zCNz3`Om~5bht90mnt|6qc=Lu>!Ah7_*V(L!+&3e?(H7n3M~CU-&>UgL2{gdO@bqGo zunz(hF&ade!H%-iDP{zvy}<&qD7-0xBMGqpV5ldD7b?#%;UU#$v5-6>v@s)n1Td>O ze6{uHuoZ@<`1oI?O?eNlY||~0I+wPPLzfCb0NG>k1Mm~-E-`f%bXO6%$~V2Pjys8t z+j*QcZ%c`kF_h@GKY?7KZ_qfB24e(nu!;B^(-Js2zD=3_TFjHOiV|L0Pm!sH`!UdY zYC07o4PuIq>Dv;$)%BPx_6-Xssy`?BdkzgZuClXcM)^Df6ZU8i^EF`&%-}3ri_d%f z>VrDcX{NxvT(x4vPBI0k|I-w(x3qQ^wO33*XmRJ6iW#l2of{;*0A!(l5)OA#QP3mZ z1-iztVPR}ow5y{t4(UL|N&!`{*e36X34*RbV1Rh|59QTWkZ#6jZx|pYUFOx5LEHgl z0jsY-PF1Fjn)QFTO_W>RO0`kXs*$7uq_h0ojyZV|=VQUPQDGh{diNoNWwLzW(U3{o zhm{eLiPzBhVs>Tl(wg$|TzXUf)9KUa^Y74dfuT7L}&#gy9SoWbSsHWQO(I^o0q&#fcOE0^axE;~LRvJUFeQdZ2VGy}8= zxm7rITa%1kRKy7GKvy#je9Vo(Sd}hVzP*w(+S-UGH6OPAkje`qV~c;;;Ad>2*ipje z%9($XuPOgANOMv+z_!!*h%XNhiIUi0CK%p@7eFW}dpO%3PAAf0^SoDKKok$8vloUD z-3K&00>3GAqS&~U{8~?^aT-m{#y+&Ms9n`npn~Sodn0kzYz;&T1I;8Gp#$Ks+jSD%gj6TAuOay4E`Aq4 zqK{dXR>H3_+F-6UQ_2eP9bZ(8+md4zrwDwf8@RG+e$0Bh}xX~*Ljb}!1g`jzK zRpOaASr$Z5Jx#OKwLJF)0LBqM=ctJYAN6YGOXn+u6asUbk9lb zwU0H>H!p0BDU5->EWfbTtr1BWJ$jSX+O$TXk0%SlfMrW|eDl)I80}Im->hN()Q$7gCQ(^Pty)w#* zwDS?hm_{c#jy+>k@<DIMC?_X&WY8(cmbEj*_g zxnO4M!|zJa2KRB}Z(w&gqqtGk;%(T}?rX>VU}TQEW_~apqbl(?(o`=1^JrbXCHOm< zuLlDd9`+328p}*+uu#5OY^-yUF`#;BG*b-mYB+jLRUT9IOmiNQjbmIp{_q8$HJJ%dUR{U)~cCgF~;Uh z^T>3@)Eyg}D0Ua`Cb z5&9*0PF#p>&NtWwTC4Pv#YF#wPEG=qly(w7?M5eQk_jJNlT7VHwu5M;9DJaaP%P0y z@W??eup*?f5nGomhjAp z)ACm64m>(EiF6RqXeb#iJI^pcA_aSoS$IsmV1as2*a|C4(GMvu~->#y>-@k z+Tc9PTd>zF$UA9F7I66`TMnTjQp8L}jvl@)W|>01AReHZ%b@#Glpu=*x+D_t+g+{0 zF`1Z%o>v~E;0vWfw-UloA=W{Lxq`JzM@d+U(c&u|cv5!Hp1r>o=kI|rV`T6E#Aro1RDI4dZLn};>CNm)NZ9*xL0 z?3qLMj78yWu7BWN)T0F&!>|DS2&!2GLpAZ?ZCr7RzO`n8O!Hi5SlQNqj=s}EV+jNJ zRyvf15shc{a4;DPC>>@GAa!@P_LxHwsJS;i%Ql++#GEcXK(szQO_8k{6d5NpC@nO1 z)7VH-H^zOfIkc=ES{6gg#)bwwkA}wH_R$ZBLGB~MeL3k(<3;iI2-pjLwaM_nG{#ua zg=r4o>qF9(N!uhBk`9TPyy(r`n^%@~S)_v=1^Z5WqwOzFOb4tX z2a{7vW;Vu5{i{FE`8B^TAXegO)?zwXNN)$94V<<^Bh(9D5yA50Y&Mk+ROxJQv2frt zXa-Bp`X0}KLdvI8c`B85Cecn7vXfW`EZxd0#)q)^oK8d0;O`TGp!ei@2GjfxCQzQyg&wSE^{P8M&rXwj zHu=J+$o-cm23y2q@dKnPM?KP?iX)$>Ht`+OE@hh9m*G}*-M^`Ye4t+Kh&~ovb#H3j zNWsR&d7WyVc(L2R2K?Gi4a)6qD3*vt2A}#L^(dIIL~+~)+a(JeEd~H^lR!j#*H6>z z&K9Xf>)oP%VTaSKsafBPiEe{Do)WKS|ZELNa=0@}UH~Ypw z-x#ECfCVo627(YLg%|HPoX`M_jfeR)5FmtVK)4F77!V$rYkuzihV((cGd?JLey%kv zfs7UnEsIFGM1LOzBV~&O$9lQ6KE_BG?X_5oY%0a|QpOOgJ+Edpk1--z_?&yG_sn05lq=wctwrcEKGvbBVN+sEl7Z1%vCURI z0Qz0c=|$EP5$l}hj-T`{2YYD`yC93?L4D_h{yer1WZMu(K5Tps_vc5PwF6E|SvxQ- z2sQZr9*U>_;g@N1cT^NnEU@L3h)0M8&6>pM*C&K2(V^!v`$UVWP^EgCVaS+9^#UM!>v-1 zha}M`Pls4+ z%UJpXp0*2}-tt#F&JNQ5g)CC2;7aO@4tx_L+IBkcksqnX2I<9_6sCrMo!hoJO{APj z#oNF%w5#7DxvhOkC1292{&G)@yoD{J-QC5a@R$&qU&(!>VZHnbKenp+;@RX`(XlKOAL*kXBYNdk^qw+>g!n-F{kGu)cTWVU6+JKH?xi&KrD~5l+Mvxh)?x@ za3a9q3zJR~QthvPnBzp6%LT)NF5g*~Zw@}5Rhp^EG;M9Vi*eRkRIam6lM2p4A!iXc zH>#uICWRN9(9!&I$*FYZX80dW9m77a4A+r?DnFoqj9jN$Rh;G7^7SM=*2LO}XJ+WF z3R9~(`Kn02XjuhN=2E8!vii4gK{qJ5sK}R#i7g~*bI6Z?{&wm7VVfXix$;R)hB_an zq)m=2eF>2aFd*HYJ|X!$N*~`wHjj9}{ZKCo{Pm=U)s&Hj zvUjI|NC$|s2ekn1^QSQ&DbWNu{>bjIiGj4N)Nd<-T8X@dQ;?GqpJ6_~LFOr{)(3^b z``icMabl>RK#EHBQ&A6x#0yL>(y?;qaRng1QvaM7H58s{YWJA)-tD~{>d zUm|M$zA!4m8gccquf*|cP&$8yaE`k)uDfJGuHNL8YDabQ9p3yh&uaYD^lf_JcAJ=a zoRi|Th?7OX;y7@y2>*a77QYXgs+b-%ddrrX27O_c{oLm^pSeR%snQ# zhvj`poQjfcqoVimm?d7%Q6tE}dxsf!K2@FqSo*M`WF_!kXdlpS&_CYjqmf`H`ZUFh z%ou&7K>yDHm;e*?#jIAxIU#AfjkO(so8}fkKS2{bgDj*5^t!*h#L@Cq+Yj-)LQo6w zNpz{BTfpe_4BlsMf}E)6f)gV& zLGIL$@Pp29jsty*tN;{+$L5@8a#}G8t>HSM4Kl7=Qu?YfebwV4N2=PSYMGAy8_}Ac8+QA|0Hg9P_k;Hl7Spz^W z6Ri;!GU3FF^8C;*d0GtuH^}#Duw2YZCPqDdCbGh=BmxDLy}GGm(?#c9&~h=-dY3lRL?4D(SvrLF%ZZT1iH^s~*= zN|5t>gEqw7_{wNQz|VjA>Vo4vBCybb$q|yck+T*-nhD^Z_*_*T5_BT)+!X z4w5G@Wtm&~SA!~J) zD52th7TI&DgX#h`bwAu!uE#pe_t`R#8t|4$cY*3n?clXKpdfP%npUN{R7!56a6Dju z5_!-B#GBq0N;KE+v#QTQd8%F2`I-QI|4bY1>QU!p+r2!TesBJ2;Q{MS2V=CR=CAs} zUo9-#J8}2Y7@IW-s>dt34LuB;3`B0T?TfNh@UQ6P$Y3noNrQVz?rV%LgFL6~wvkp@M!gLDi{jef?${`k0tJx2R4o+b2G=s!Z5!LzTOU{g^4h4_)?_==uGXnB9eC_KJ3i%5NLaa6lD=2vPF>LcehW z+cK<^oQbxY6avzMS8)wo59Bat_!ZaJRUbG5o!<3oRzc?;li^;>0&GFziPjYxzgavH z-gcaCOQ*ah-n&KDo#~A}ZP8g&IDJY=@$paBdxjJ?+OF^qru0Iiy5uaEn$k~;(l3hL zm6Sf6DE&e)ElOWdu`o{QKgiS1ifDdGe1UwgN0eT&?}*ap;IE#JtpK`2?t;><4@$qj zq4XOF78D5sD#j^2a@L5_Lk~Y7rTsZVo$*dY z53&e$1S5d-nza>$Z(s@v2WYXQ=u(htjtw;?=6m$S-~KjXdL->};Lx|4Yi86mHsDk_ zN3~TT2wh91$d_7|=???c;wAK$?1I2pa>SMp0tuQ_Hv~>WTiN*1gRVhhU&*rG8vK*e z1bHICS4?CNRwGTMPyk9c$pT4W9wEEiG?&3V!SZQV&68>;b;uDYLYZi5tUFD)`|V#F|c8@&ysjpxt$ z?aFa%!R+z7HJ_jb_6#=0`Kkphc5PQgbU+T!f46UuV24_RfAFO+#^681uwts#bpdRX zoa4iwTD;QLBh%i?)CL>mFQCOnh=eg?8d%q@vew&Fj`~dS0@n<@a9C(~+7%ObfyXD+ zH{2`kf?q>NwzRXwOK>EVY+OqyQsAif#hiMNpM;W*={>#0U<=gG>;1A?X1l44^>qXA z>C3ds{^>e?Zc+due~u?HaD+`23?!DWrB%6&v(Kw%np^CU>h15YAA~y+`uEYqJ!viw zUPK|(P1KeOwqf9{NNs#t1{9|@KGR`a2bnK?7Lpb&++26IbRf6iwi=)}uC`Z?Nznoe!&VXg%Tb;GqYm$nS7lMvW+C-? z?9F@;rYW{P#b_s}yW`!AR^bK&f5#^cNG&>dPS+&G{^=}?5Ma@cC@#PusWU&IpV&;? zIi_0^1BO^X(PGrx)ui$*9rzA(qx&5TFqJO=szNk?%EzGI@H#wKiCcq!x;Ej*6kzVu*z@nc z?OtV?)XU1)&fnd2z9=8+O~vA<0e824nalsT z|MUz07r8xmqekuBMwk&=+^buygMad?U;K$5`-7kO`LC1TGp~L#-kY>{wxo;s+c-}4 zYf(E-Eka3JSOlAF@GnOTTk7dsW{1V>j@Eo7ti(^%@!y-DOM6#)5<5`x^F;0(`FZAc z=!7JZt;!yrsbUTSt&alhue1GXGxV$c7T`0bb0FH!eh-ADJ^1@_CqF|JSU&hEVNPcI zOcom*`J-f?*Qb89+54#9^u$>bFsM{uGOU<>(t6u$d#8Gp*1&4`>r?-lG=-F8APznk z1+NpCSlP(NOjw(qvW#ly7QsR^!hE@rc-gIq)nBTn6|%tQ7E8$v*DyT@50HVtb$CCX z!57J3^C}2Rwh>ec((Q-<6;nr=SIJ@&yP6w`{W_L~pJi|EYN&ixeJyDuKOmn#p} z?!7TlG3@WvjZ;j1Oq5sX^=wFX#qhH@M{CUOROpgG^;{%G}JQ-zEu9w%fubarEP74<=wh58`5!s+@#->wb0vP5N z(d6XaXVfgN*RcJ*YY1emxrPWV@4kH899urFw0x}MUv>Es2wt#!-M{+sIRJ%4!aeB;PyzybW$8pm(jihTAm zy*cSO`AKV&t5y-C7uMl70$4CqRne=#9dv4Y@Q{{W*`q z0t9J8Qd6>XPAjXbm*}$3yvxZ__syn0&C<1cT3@DO> z5S(DFRG`|=>3x3&0)RX62m4qXafZlFFtKm}&7sZ!onu`Q{v7oAEV@>_R^#Kki3Fz} zG+(p{0c6c-%63k*3Xqd7r9`F2jA!Nsxw3KrP9HfuNsJIL30#V>83ElFROnHI3PsGXkGxRF3VLpgWrH|ag zN*jjGD6C`V8u8IYjNTTJ-2XmcV#YAhtA1nra_>33ic8D1wBGi z5q=PbrsOIyM;+@s=n>k_?+DvNq-JSJd6~H}W720MMJY#yr41$#q zX*=jU+7VKySe_}Sc`jHA^##fF3Gt%2oSb=RK@YL&bB!nHoMTbgKLv^DGQTQVb+tTh zSTCi3(2h6vaVyk;O-5RNZRQyhfexFQ%Kojh!|{zZ3na!?V#+VrN;B`bl}@pL(pG|Q zrmggBy_HURy~TLbTZ}Tc z7`PiZr)G;?*xhM$H@fN1vLEX$7M)F7j9k3+7MqDJ=Hk8rBfYlROl&bv_dS|*ZL!fn z_s2r)q3{-)i7mzh+G2idyB?Q%0XnHI=11_{;78hG(R+`VEvDQMG1qJ{58`jK#XMup z7MmGk<@6nGF<`3RVuxS_da)OqeT1S_=7oA6>9+Qft79L{T(FO(ViWaa6Pc6JJ{rlV zq*1tKcH2ym=$v^aczACrXz#41fX%q9-5uNWmf13BqMyBT{KYHAUnC7Q8+OHumyNx+ zee^5dfb2wjJ`t{L#}1-Ht$1)dr~5qf&~vlYOwWo%7xMrxH?;egIVkz_}lkcC9P zDuxaCXX5L$Wl<}SxM^)=dH&5{jFa+ECbe=hIBamgxF_nia?Tjc9c&LpXV{namR~(F z!#n^aT)=lz_h10Y!-+g7BNG87IQ_Jo{8+Iz=mJo27e_D__}AdbLx=PuQ#x_9B{e4u z(SpX!$=}Ab&J1sGW%ZG*+>NKfbfdV{DslOTX0NE({MySb*nCo?CWW~&owkyOr!BJY z!T&9d4Wu(RHn}XBB%$UID@UhD?O5;I2-ADum?nb2MEaFX@r0T(ifZ;+| zPcP}#;f3rT5&{wZKkr#Wu~v2A>pQ#-efpW3OEoogK2 zxshYGhudTx;Mbr(ymVi?@N31T=?Kq_f~CX7Mpz|;w~f{L=M|##5q?qZr(R(viUZz_ z4=yb&(lf#&*d08wdug~?af}35RxR1w#QKBpsDiU+-3EW+k{BS1SaLW}^{~CH65lz* zJams?t^-fA)38}vuk=guaY6W3uv@SCr=&V<-3CfP2!SvWLL%}sv^4HVB;ojM0R z5y=uVK@&JB61XE6qI(noeiK5XONp-$NNdqbj`!G97#$j5<9(fr2IIh`4#xS8I*=LC z1Tcu{!e?4PBbl%^cBxciTD`U>iBM0Si&$>c@rXTip=~TR!#PcOt7xm(Pe)mq-4vQ( zT^;=6U;U3?`uvl>^K);uo?y*f^#}j?2mkm-U;5h5zp5&w@7Q+mzr6Y*fBajo|IQ1q zt4eN9+YbKMU;VYmfBW=TfBuhEB~yWn_;f!Xe3FZI;B@Z-RkW+$z$GM8oieD;-I%uy z?*E=+!=bK=C(sBEK3C9Hpytsb*V_(m`dqP1*9*hTRP-L@nc{Pg4oltS;cZ1xTy}7l zx1JbY7B_Vo?fBc5^1%Afal0ssA$L|cp!>7FU(`28pB{U;zB&4I^Wma-bK4W@vOcID zUFx0{<)ivZ9~j#)@vU3w2Y4^Aa>{u)oCicWvyW5Num)Ebe|mV)&mR2l z&mKE|;^f(**=JZ&9vBcfLLnmoMMs%uWur+5WD~Q!;mC0P5~d_ZzD*r?jE|0*`L4$g z9O%($m zun4^>D3)#hUB#ttRF+G2RGEXC;59@pj{aQjqHq~Am3_~Oj>ri_`v`_@J$?{=8=Z{? zLxyYYVk&$Ailg@DMP3b=!MsAToLMjT2p`QNhRYj#^UauU3;+s7xz zU5-edO-sc^G9S&WPxAy$4DqGrLYE67Xwc*Znr8BrnGBq^(hI6$`2obxpYnXKT+i$o z=9n+oA;1MC)Ox9}axL02ZmBr)_gKDRe+62FCO&|tPJaxo_HcpDnQ{Imw7Q^9twgH} z>W};@7Xq!4Fj;7oVn%;bWS%Zr`FXRi6!PMcC+>Oy==|V;z8faUfW&0fv%0IK_U3h|p;iPyie(jd|IsAd8YZkxYNGNe3VrQze--`yVJNOwqE65UJ z?e>^M8PCr{H}#s%r^pXfi{UP<)-;@kePJhX`X=pj*})v9gxGo{LeaN*MpCh z5I^pjhn}{XdjL{uXInwN#1ef)Y_&~a$?}=`%|cSWVskA)u~w`= zqDr!SUZA!i!fC%A5UL^Lx}@|CLOd{#wUj=k;~ONUD;qmLFB+wm=x=|V^nGlcA+HnH zN_2^ECLM(JunLFDUJ0N=@QpcRIHu@Bf}WK;N@@y55-Oa{Uf_^Q%B=txbs64-qmxLjkueHeFB(*$2)Ev=FpT28e;>_vUB$En6t(VR>_N z_B06)y_G;b`pD2Soks7CT&oK=3l@t$oq~~4h)o9wps>MHK9ml-(SDGHOiS z(h_ej97hh;?TgOetkEtK7oTcu3hMpM_D~weLEQ|=s(4GjQ1VehTTqTGmG=nGvafXHxL<9xr`_|h3 zIp;nkOMXz3Df(8Q|Ggh;uf5)T?HrpR8Sw2K2>{>SLQes87O8|dA-umW;q7dB(J0NR zo5g-Mfek;?lhB>*vD+o4MX2?%T(>#-ik0& z$~u@sdN@XuYdnrYx6O}YLEQSPjRC`h-V?;z6thdQF~FI2We%hI)VX?ch5h^t6bkRn zYcrssZ%{eD*7rv~&^!dJ@@m`WE@&rx$DvI&JB?EnVNz(mgZpvYE&9!%JsBWSdz+ zuC{zQ3&C|ie2roQdw)!;gY0hiwah|v@8l~I=TE;P)3!l*vwptWb`2Apu6h?!)&f&F zh49*!)YsaDPnfi zTzW|zvG)P}TA1mV`^8QjrPC7GO_&e1G^#(-C<6U;kujqpE-8v9m?1iu!3-_8v745+ zi-&c7ro1q#L_EZnB8W_S*&^m5@0PaABNn= zbuo=1$}p4V&Xa&$>c@TN~a>U_E2x zW&zj(l(Kqi03cYev2r{M+d>_i1b|l=08ajmnFwO8j3CA=_AcJ!mD@RJ1d7Sa0v5{d z@;}18A4BHjd>(Cp%FlhBVftV9{5Ya<^CiRdAKW!eAK547$GmfL%Zh^et@Go{(-j3V zFXnSaLH!7@aTUEXH31-O)XpwX55+3Z02xAXyZ%#xDUlhbF)318rIc!Q<|gA!8Aa3~ zx6<^21y_GV?Y1D|OD?+j8)^q`eeH`bv{!tyS6%!E)KLV%*r~$xQVMCkBF?i4k}$6u zXCmd1dC~B>xkZYxlxDi{4MO{WO!HCx@tH#k)N7RYTqZS@izc5)KG`b5HSO^ld#}&D z=7%Jn*mj3ZSljNb&fdWen_h_1?RHr>-U~%t-54c9eUCJl9`KUnVn;9VTm6$C zWeJOs&H~j{5sm$59+||j&`^um;Vzf}&$VxnaNa_~gcZwY&fy19o+Jn!`$sO+>z%59hsILa=jN{j z{aF&P9lecZ73qR8K>`6E%EP>OJ+dpL;5EvVl3>2~o7MlKGHk&A<4 z=HdX)CdoETC4?_wl8eKuow+!;JITc{`!y?l^ZnUe9J4Q&CUkx#7e{%$Nxd~)F85#)%9e{usaV~ZOR_*gHH0KKF3ehVBAVFQH>ZA3W0LSkpI6@XS;|A!6 zZ&$wylS-$q;~e&EPTr2wB#7fOPnf^@7>RwD=GtVAd(Sz(jM;X6gt>qmZ0T)mveSl{ z>A%p$VHTplblC~t*#X=LHaf!Bdpy z$>tdZV6Iv`#ROxS zWK-dQO;kC=j##~+mN6&<5{L-^X>+EgTTIpvQH(TBk^yv535Y~koJ&lctk9+?!pZPm zOa?X%9{zZ*YO8Xv(;gnkPML{OyDmuIhr*0lu0y>ema9ej9O1-w&UzUVZ9PdLOL`%Z zesU=bbDq>!<^X|)(q1fivE5i8yR4Q@cEN0%cklejPVXBB#5YLu! zS7e`!7SELyztX}29wGGDghuY6YG;1A#XAH-Kw_VF@4#emDNIT3D_vumMgjuH#kw5E zcIZJIwIGdBY@-&Srrn^X-I=HXR4tqvr$%i%b$Z-lkenK1nI0&g>AdKg*{l26s`c3) zx&GI`@P)topWHyVyEnfV&^C2Y^|o60v?1AU7eF6iY_i}-5FOl5#pqgGxq=NI#=&3} zT6x^GZ)8*U`~+Xj?Smx3l?Xrdgq$;WP}p!tOFE(mOTP%mGPR6PgiAi!-ZzzW^Xk0{ z0I9Za0}ur?J>TB%8)iBljAzHkVXlCS&jm214Hgn&92jmllHblRJ-5h)f+5&kAeIqv z1tP@PGR}l%hz`gZ0y4DY4>&N8HYd3IjV#iE3yKsyoWQn7?DV$T4q^E4}FG~|=92R;LbkOivIF#Gy;!ndd|Tdm2~j??Xnb~_fhm9F`S zVzn7fdi4BD_voBkwC(6o!gZHUF@Er+(%Lq-HlU(tFGPcSHJP5K5MG&SYkX+0O}L8>5!{`^7UpZ`WV3>wm?M z&|_3hiTW}rxm6tkR^Y+RKr`+Ojc;ZDeCWY z31Jv?CSOS*?d)i^oLw`X^cOWmkt@Wmz+r){9A!3eI3_7s0II3s7i>Wc1Yx>5va3xw8GnU9VRjz0(8MCsngdCnKO{y{uJ|<3ImXYAD zkfvj28Sh~?XfO{Fl#V24o2>NNZ|STirM(EHg~dXI z8E85c)J-i0@>!hPvW94s=_wma89YmLjlt?yr z*o27y5I;&acL=+*IU_N>E3aBEYo_jTu*f9>X^99!TWA6{VJrP%(gZ;$Jboc~hG5NJ1!U+Km~ z1aY@LL(B;yIG-O07hYFZdVtY*91+|!(0?TyM zp$CjtRH9*2BbQ_yjishJfvbf8V-~X*#UL}J84sDMeY*Y%|Jrvx%({y4p0wvl66wpB zypl);v~EP?*r#Q_5#1W%4OD@QxA3)~)S?AJ^0(4Q-tIcl>Symm^7)SX`5z(1^AAz1 zOM8llYUB{29wlfhoW_L1JH4kF0aIAKgJsp`yXOI`NENk9gc~=Qdm-BE(&syt4~R)> zQhiJWQ26yx#G?(tQP_h6A{!*}kF(aKY3lFlQ2;S6_$xgor zg>P)N-rSN-vQ`e#?G7y*q8zBUT!sp=#Ii6Y2!({7Cg!*jGaK7xwV)-8K8-mIxKe+U$X=h&S#wWP&ffMoAH zQxNys3=gAK*~gfxuD>mGuo)f^k+G4$h^MsoDD4E-lEf_1)%(e!5oU5;!w6*Xp@rjlt86sq} zY&p9iBD$(PyCw$4W@^C1&D1_0Xx4DH6Uo_bg0mGJ@`>%7jbV9NUe@4jVQ8?)S)9H2 zDslGUtH#-bGdO#+fl&qpfHu40EJCd-qs7#_F}7Q9RCnRF#5b-f1i>JS}Rk4wV9Mw_{I*7AhmF!XjAA- z@K>?s;Al@lW7?|Hv?}8Wkxdnhh0}qcZmk zN44!X#}76X+LXo1*0FGd+9niWg55T28$m8M2ObbF9VmXh98V-0246;yyDc=bgYJMSh1HE6 zb}Cvj-L5Di;a_ZaD5E-rat0XU+ zO5lE`Wz~-wW-I5-RBd>-iW;p?T9WyLd)j@C(q=$gNNG3besQcdF6Tujac_qxgm@i5 zHNTYU%#qfGB6zR!vEl$Q_vaPP0v1NH!wk3rA-Pmf#m0zOCVe~M!C*%9mXP?#S_at( zDTo=VbQd;bvZZ78Q3oQiNZ2A-0sl6Yr+fl@Bf3vPiE7`;;S)in-vJNpnlo%+^Pcbj z;+b==b#?gkoMuk$yFr~zG+fLx^b(QUToO@Z%PMHIS%Vgiw9a51Hl_{T{ZQA<>suP% zfl9!(X4N1>7Q)ee8^R>eS$mrrEDS3=HPnM2hQ`lCb4HaIVGIj8*m+0NrKMWQA>M*V zb|bMJNod*Z7O01qa1XY=MtDBM`O6m#fwXWW6XpyVny{&dB#Sx{mvhj2Ubr3W1BZ83 zbEn6vo>B6Agq9^d2qMX0yqnK_PHrs3J5n||fQ;g5j3EN2N#tQLv=UfajwH1d0s;jt zCG-#TGs3I_4RuCyP8_X*ow&yv!W&l|;W#h8y@qZ^?;8Hh5(BfKGJ#o}Fpu<|2Sm zGZ4^i3_%LqDsOU4_4H7F5?;KO-f0O&T2iTCo%zOLm~(QO8M-Q=T@Gq8=_$PKB|FKp znND(5(N}sm?PTQTj-EZ(oAKd89uh5`TW>+M2=Ki{bUo6#PLwe>e02X<;B4GrxVe9f zt;JozyDa3u~M?Sh;OfqxLqHiFykU<FmjwS|6veLtt<==i zl4iU^l0mDH*qT^{6ymK?N~e_;C}=|YhQOW~9+tt*@$PX6eQp^M;Et)eKlDs6km{Ib z4v%n?R^*@zY|gcW8;fk6#rKlGDq3GFCDJs)I6Gz|3ms&I*6dR1_-(%q5umB2+z z+X@#ja|Ttzxg4lUzT907z%BPWRy$nV;Gw~pJBrFP*vc#%f&;ER1)40kP*ES5;(8i!ReV$ z)ioiL7uC5lSKnK*NV?rz03(zC&pIV~M_RYZz*Fq%-sWVa(IG`3$RYI2q$xj~Hp~Ml z8WJfa3%Ew1NXo|H&F#B*1}aaZ(48p=k&Pg9Q03y#U^VJ=E`gMg~*7m-SXe2LScIG*r}6c0oA zgk_{)V?D?=fDG8+PYczjp;v@TXmu7uuMC!xG4}%`D1sm!-8#5If*fESA(*4Z2F}=J z{NJxp3+v}w$?r5BwGLyzgoS+3VL7((n4HD1C^f>f&|hY9$~$U}d0my^uW!`;WYAei z*P02L+(W99YJO*GoT}Nbib11Q_jL4NAMD(R4FZREpw`_T1c|`KzK=e^)@o=Sme!up zI?%HLgBCRuWacHn=^jagly=-%6B_i7{_8YgHHhq^T|ygmXxoQ<7|nZSbCU zh-)}vqH3dSE8o+i^;Da~^2QRZ2zr`!PWgD7<*k@3+QmHOK3tU7n5Q_URYMxVq$lU7 z=8FN~$xc)xhX*V;x+kq0Mc~Lxho^6bslVy(;VgOA{<7^F;NS(ioqfc#IMc^sU6h5= zW9;Ql@7O0E@_=Q7n^0OU8#+QG@}$@m!wTG<+7;o!MJ(4e%F*O!S!!SR!C)Efx z+|w}6$QUAIQ`APoW4;dIM96X(Q4Xns*EXyX;Ub8M#)$5y2W|;b zF3QGqg#ko|fE-gX_ygZfmbqKVz?nLOG!4tVFk-%u3jlGs>?SkPDqV^nK!*I`!~)C0}~&-ROCFPH+>! znglUd9f_{;FGKqzsXq1%|K~7y&(-IfE5j7#C{g`9_wxmE%Sbzf1BrXll#S99{8f?S zfVG>8(()JE<35%SS!tbq9zHg1mBTvNgn)^0ytsKpv_AM17FWN%h$I6kDsjR}2Ngvz zu*e_v#lW3|DTyG0R4b+%R6ID2T58NPbsAU0*}+r8ryKDIwI`6*3f`65J#8)cF*c4+ zYYR861+RXUf+?U5iHHq}nH5By{%98)YPfME@N03Hx`l~t1*-f-*tO5_SVf#GP(Rd7Q+gVb$#o+Z zh3OITn_gRZ*lYob?wFZjSCWjv1Tnn?MC@Jg<9M#p_Ok66+?i*34I@mxZHym3>+c0c z13?q>oZ$u2AbcSF^ul4oR`)3NW!3@?k+lHw7JKJ)Y##EQ%}l4eZIqgWswU|i&qo?a z9wS7F=dZN3qcq#vPym^XXGBA&e8h3y4Xx#r;bKJti0jezNw-S~=Z1-$;hWSl?E?^uuVG+bQG*Jk5aM$r6HsIwB%lS*Kw-*Q2Et6ovvEZ88A(&ryHjs! za8XH_6oF2gUQ87*hV$WAv~ev=3|_b^wF+YQPR7}d#W7UMXx{4sr`8gNJGikJCGCjF z!>zHV8R`c|Canq{9`t0w+i?>=1d2{>_Eo5P(1}M+U@ydN&eh;;`_v@!MZ^wf6R9wv z&ar8c%jX&rwiVl}l}|@^HM@&@U2Ur1W`={XjRU4&!qm1vmP(GZ0}f$5(N3^eIcE+Y ziXc4?F(7_CSNJ-|wyA;Sb-NKrODjez+Heu)P6Hn)I;`F^$x(v3H6A3WNngx7As}B} z)Loaif_hLu&8Ex+)B)oGl}}+jF|<#B$#a0YxD&!Y&@`~f1bk%>{_X(ztA%2KzOa@Z z<1zuUuq8e}V4Its$9IRi$AKW&-Dvxwaq8dV?Mv!AQ4|u)jJ^|w0>)TJhGmn6A;g|2 z(b4)E3IyY_KvhzdYgE$zhy{HpFYV58{|udPtq$6qPN&sjZ64J!(VT_lyL$hq?FBhx zS{^gmORK_4%~eGHa|~f-=|87v->E_{;$%N#za=pkU}D;}hp(50D+uvYDbZ-xa_4wH zI1v(({-WV8u#crzx!dWJ|1F$2b~}Cc|895R@}Z>NPUq*vXgcX~Y z*S`pBgo&9L%Q}y=S~a23h$;p!xV0ICB=W8ee?B(uEF%u}yeoae(ty~Flqg~s#HVDg z==k@z@npB$_ypmXw{YVH7QvuOvKO}wt_~z>S@f(Fv3NR^Z%(+tp zzjzqRVpuY^9qQb5br%W}#qdi4y5TR(v@qMb{a330bms<|JXb$Qc4bJ_!Ok;ExEwDS zu-Y2+_#f-ca_I35oB(aN2-O6ku9-fWnc)G877#^&G~M!GylFz^o;jCWb^YeHtjgZnmQ`5=W^CTC1u`i2pxtIw9&*-XRo3D(x?ZxpG1`pu%A=dS zx@L5PhsvMf=w`l%scf*@HRCmwkd7{?Zm4dGT+BCpbbN!Em2aqS{=oQ#kB(28(D-Dv zSzZ5u@%52=`Q%5(H~YrTyt8SBpbwl%TTIKZPo0^ByFDDhxercsv7%j48o7GL^UXC_!P92-{;G@;1_pZ2S z^DC{7OcNr15Lj(~+F9iOr1K#Q#*)gDkw$rQ`qj2H%A2gDj4#O)TWw|< zWnwhv?;MjS{4Nx;B8G>YjC7EjZY@zF8Iw0ZGTtoij!3s(t)F(vyTn&_7E^-O8P~&^ zUXbfSk?rY|)mw(_LI9?ysD{dI@H%WT7r5d&j)|rHa6x`2k&}RFpdghHQh@A;IdR8m z5zMb5AABc>JtPq;(qL>X44!eCF>dyG))a7wH4Hi6s9WX$jYQ2_=Zq>hJm`+S3$X_!*3s!+p!nK#bHSam#g( zgc3^mcq8`SL62UbRp5$HM=K(+GA)m0axblvAJ^Y9I2Ea)Dc&JisMbr!sH4jWv1!IB z1k8DwUpAVcWfD$bvk>r54I49GzHX6=0MiF&zDG&{?(kF<&DJLrg)_9p$ zXegr~#7LN7d+|4x_Nw0LV(ATOtXY_6pgU=57*Wi3T{RV-QLno66baE;Z2(;1Xs4><6cz@C_6g$8`EOAW*Lr{R#+l20Qh}BqL^b5#Y_M#@z6Xqc9Heb z2=@_j@XGKFIE}ZD7wO3h(t&NKXAbCRWJ9!GewZK!!Z&6eSU)>7 zeC_B^BvYu2(b{QYkl#R~$Tc-0A(gOlo~;3s*!h5_^+s!;>!Kg)*aXL0%`1RmljW$Y5LFlpSRg5K5&^xZ<+of#K?6VucA5^MaDHO9LD zrVt@J5Eo0(=8Aq3RI<2ChBp=_9~3_g);R~`z({A*<8u9&qGd3|Uj1DAG)?E7Uj2BS zrrpjP+(!rw;ge-fyl`K~cR{~ieSe(p18G2h<_Tzm?Oy`CTqM_}`h#}{swk8r+|o+? zfzv8Z?&JDmT$3%p?sJVqX$_hV<2e!$*ZXKXbdO~}5KN$tNwb6?QskD@#8 zHh~D1L9hbfGkBQi=9R9CM6D6?24@v^Gc8$jSWxM8KP*}0qDP8OtnjWk|Iqiom%3bG z6xybKuQ;Za-+hxef$g2gwm zWJ5SON_@v8v}2)vjo}FVuXiyQ|yXV+Elizm{%>WVvYdy=beE^ zZj9Hf`APN4aEWo2L-U|A|68Gl4tS`l%##oybpWwVptAwxj3=udZ4wBs8-l7N7;U*%IuA8{d&ikO&AvzOAi9%=l<89{fKK2auW7pZoD=dgtiHJDi?wB`FMlJ zNx z`gv%@O8q?6fgfz=Afe~3=rbCz4*X!}UF?a)ft}*Z)62blypvaQn0|eK*D@aOScXjP z{_f~~dL8lNH52K+~R{0s;Gz~g7!2!P{5?GZbdyY<7U z@_4pA8hL!6JsNwwzdd4mbbIW>@l1Pk$m0h_ z-|FH0qi^$Y*XXc^_l%BsxMTF~9^O5ABlbMZ+N0GN@efV#iiZRzXf(PE31qxiA@#D! zO5bflD#_RpQVD(pC0LtX?bVrl)C!1Rh`tiwus~Ua8{ZY8l&IOt`Me5Gnnn!J5+-Po zd10t7hlxn(H(A^R#6~d3IXm0QR3fV4kp>~PZ9&TQ#y4%9RjafrIIv46Xu z!G>i&+8+HKkB_uR$2>l@3tBuiJI-${<4gtzFz|ePbc@F)+n5#j{E7DHJ3O9ikFN5# zKDye&aCD7_<us<&>OwkLu+)MhsWEaw|IQ4J^H&KOord|8}kXHtaqeZW^7mfa_TO1o3?2XUKGZCGc9r!!ef$3XZ4xk4-6tgh>ea z?;?tMP%l6*Vs)(4eX;%vUg*0${qUzk$cx2oCdjV`3;+U16ZXNo1Mp!l>vk81zlM-P z_m-gKi2F=jN#X)f|Gc!1;mDH#Ty3@5dunNXr41&LLJT`aedv3&goszoDMb4&Xn2H7 z^X~D{clpVQrI9TuPNBpSH&>9RfgyZ;%^jFxz~e#vL;uTzd)2l4?$OSuo;2OApy1j3 zqH~cbVYCV#Mtjmrl4PM*)u)D^ghi=mt>J>@{*&EiTb?z&AMoax8jykub`?ngI3B%R_p3K+ap+gqY8LBP z->E^YUtMGDLchA&fP;Q@RqQ>~ufF4|&Qq3n6C$q1TdtLM%|W<+!Xww`Jl=41_jV2^T}R%pjvGqZufFT5&TSk}p&?<_mBxtmtDCRxzF;*V z&~qL!W?%FOwjAU@?N6~rEIZ53W zMB%-B#?By|$CnTtH~Pqzn`yJ8PC*kcL)M3b(3X*Umn4nE#`Gu%M{h@Zw7t+s!>1Os zK8}dm-iwhi=vk2(sI;V&2mv6OOTY>q)*TJ#1rN@4u>?e2n#QP$l@=jdP03NLzKFWe zYv=>ih^pYO;V1&pq5T?9@Ak-qJQHGBU@oHp^#B5DPcdv#k24e!L3>a81q1(-+yhYu z*)X_BjX!$$5DN^oV=i(}uG1U-4*RauDr~xZX=ip9b5@Ma=jO+<=^yNkgC9JnZ2MeT z7#O8oT?MirBgQ%$DC{h>&|0YSzEF}Cmu8@49Mdy2a8qNirrc;PEvkpnwg+fiw0iiZ zur9_79~`aI}*||mBru&6nnS;CN8GT?r|X6G0G_=ux*?-qy@3Hd7`;H^giFV zcVcYF{G2`B!RlsPNnC*(&*1v}T zPwiUj)8#qVn&ANpt+MO`O=FK@UgUPB<68(fAu3#JyqZ1uURDxxZq;^hLYwm}}S*5EW2 zil&vY=V&IZ+_ZrU1o354>;0!`Ew_k$@+>|;x0~FJV1#lvc1-o%>5IWbx3>Nf+nLSp zqf->?o{~sRZgO)L9qQSs5u(0_d#q=wzdYf+;ir5C!vtg$%>_kqP>0)KPJNwMU*PlH z{*T?JxPxyF+*bX0l&dDz%3`_~DdsVPm^^=hU|l$F=@pBS~N%Z4STFnqHvh&(8?($>AF^!yT$pS9W0; zQ0L{azq|!W@k&e+a0z-Z*{h(~^cS;enlG`&qTGb|=u4xZ>~BN9#NeJqM0hoY>&Zc{ z!OSD&jWe2>_c^>xnmPpl)SbR#-V?IeUIYsF)*xyC<11Zwz++dk z-0^)dhAo96zf!2IgcsM+c+IqYpe>qcc;^CLJQ6UVi?a|lbnytcJd0V02}e-r*=}{> z)6lxrPP;>FYkLImqub?PZ|*=Edh{TsO^-Tr`9JAZ^u58r#Rv^~HU~;T5gPJfE?)Gj z8@Czpn3&6K0u*+WZ(y-2Y*^H`R5ySv@wC!pQ3h+{36*6KcA^1>A00et96Jpbh0Y*Cpa(|6lg4G2#-ZlD{FFfKw_Ah$vzglQv{KtUx;ZWQUpPfo?L$l$|1M2 zWbG zDESrA-7r=ID<>h3=kR?{00izRlm}~7QpYfVG6|KH^~Dn+KMVtCL;mt;EA~VCia8WA zbPI4sJEKRjmtcOBuQ9dX7PFSbKd1uAXe`MzF_|jJ(qvSsHHFfg8?XlnUvxe!uAB~0 zZrgqq`1#C$Skk2`Xym|<;tCu() zmT$q-Z;$z8zI?L5ERn465%?2?Mj8^|R!hvzARQY?Gf1N1ymrn*I;0@D9~uhc&1ww{ zUzXOEPC`QwIHoq=3gg$zRe1}7iWqE|H~wu^v_bv!uV>btL1yi-)%6ALW!4^$}-H5RG zLgLOB+KmW{O*-y8F})+|JIY-X^d z194}tz#AO_gCjTs)QvI+I=LbDCFZ;JE&$cFrDH=9k~PIu7@qCgMSytGNrsg298wI5 zbDUq`JSHFapXMB^M9%*-zyBgHY3f63gn-h+2Rq}lGq*=)k8YW=QM;aqXm@gc`kb4GzjK(Yb zmT_Qw!%Mx=i5;b)Q8#Vn^y_QumCLXFCX{-`^0zEaoGADF5X1Y22mm|ppqUo2UEX#6 zQC|EFB?Y^=)f037jzV_cIs1w26;19))Cxv%c61D*gyD+{iCQiI3)ET+JIOW-i+Isl z42$R`MF#?`Ec)PhUb#@r30%1YvhWx@@hsunXV?{L7+q4xLW`DE5sw`PxjC(buGnI7 zXX*-Oy}Yv_%F=5rG(%*$u-8D3nen4bvf+d#T%y4fA`JQ&+vK;4;Nf`f92OB~obGUB z=b*f6kR;8--ouzs?p=&~eAFJT$0O{?<`=!~g`dD;(+< z5rri$kGL$#V`qf84=^}K>5PR+4|P&3MCw?V0s;DN`Wd$}=Pc>bZpz)W!WDE5mV|w? znY24mCDDX6>Mw&PVN;kzlVvVoYO`p9X&%{peg@Yg5SM$)LuDyB8RlP9P7ppUz;l`u z5p3sNU>Cv=l&uTLlqT1Y1E!?Itox+vPtv`V#ZETH4eov+S8EX23j@NC(yBI6_IYAr zgPE&YC-_2WJTquKUet-bDPYj)JPZ^@_6`3rL&lX3ULpoHJK|d8LSYq7A1T$@y`l}K zf#IwhV#qbeG=$4KAhJY(G*mVN0+hRVqq3X7^Wq7l1dnwQ zl(A?spDKnm#`Oi_qMdMI2rYu{o>V(keYWq|;61hZJtDyfIl5o%Nvp-4M(AZdB0ZBu z$BJ8l$_>odz&ogfKwQ7U&c#BF!AYZDf~qK>gqcyk%`7_OkxBKUk=Wo8gG=^h!Y8YB z@zU~kBHIMXFf2a_((%%h1=&hmxC@LMWU*0V-K!EEj>5T%xEz=}UbasPGj>V?6XGiY zq<{~Y-+uFZ`F+pLY1)!VT`H_#^~#cw>UWxpw^zs%$A(N@x}8iZ0B?RDbCrdTp*9Q| z)B&;L;4KZnSdc0;nI_>1invt6$|@Cj9ubSm=qQ`TjUZv(Co7<|nxg856c|I}4a+_V z?J%_X#!SPw_$&5EN@{d;k|Ut3VOS3RUzk3lMQWl*grx(@iJ|uA5rwP?TgLo8QJxlp zrnRX&ss2>9i(IvcR}n&HW6}S4Z?VG5F#M$w8d0+*-Lbr%7Hze6eIo8$oUwpmK;xa~ zX6~GcJ4~U*N~YZSbQsjK1kZUj#|R6TY-M==OTORmirGj1jyXO{c_n@>RRv@3;Ex zHq#b_2m|ewFA1p((`kyjMtDj)P}evbZLN7`+cPFtK3j^#!?7v)Sui^pZcrGQt}U_3 zM>4%q*i?Dtq3K}Pi4cT-HN#&g(mXbEClL!Nxp_wvF&ONH_7XuMo7?%b*H%lWQqcMI z>f+pdi~e`|z;CHO^KsOLgY_qr^1e8c5({w)lPl!xtW1$9HuiXyRV>9*(t?m~uoU(G z=q+nmVIGhCGFW!9S!ePWq0c>-0Vwt#y9)Xzd z$IY(xHtdExIitZ}t4{XhUj(ONEs$1gq_eHkin<3BkZBXDhuoDYKGn4jnC`h2!PMG!@1&y2H*E68QMkn=eNgjnvzR8V+i%HeGb>o(XjGKe?K_YcWHk%|JhnCjvd z%OG?}=AsBZ?G$nQc&#Vma{8_@8LG3>7>m;6!;ooJ4}2P8I&dOWEX+j7Np76h5O#QN zS#LopZPXQZT>r+B@$*;k&7A4NuC}sUF2}lVh0FygR*tKplW$sdtwFD}& z_$$X3fCUD?trZakDyPVZ;#c^$*W@a^M!mO3G>&IPF$JIDl+Y#{0LEr}wWQHRn;Ozs zgR#(Evz_J382S;nQaGTDca^uxAi=*Ub;P84rFGD^?R7W=Fl73(CVZ@tvY|lu1;S^~ zAWcLP5Sj_k3hh26hge27>ZVu?u`wMa9Di9F%Z8%i$nfWS`PP%XsXE6$gWD|M(x}!QDHJFWS`+&jc#;V+Wm-@oOCE-UI~S2jfov& zR*mEe3m;U|ljcp^ecD7lvqMU=$rcAi2#VA@Md))1gQ?==;mFtfcOpUtanfpX9zD@lB)lP`3Q8IMgbc$ z-xA2r~63*t_CVwHd^zCP81IOz528n|>rv$j>qBK)V=l zig!T*jv<=!^5A)SxP+JqWZK^_$UuL;I%M2NoVf}>QEUM+9m5>Ll=)F88vu_8ZEj3- zZ?saWFJ_G82DSjzD2kry{$;BBuv)2Az}qOGFmof?RE_66C7w0J(=bIK_#iR;km$)r z#7)h`=%6<}uI$7vNasY@DnifVoyWbt_hVWv^oRSIOw?mA&+x7gQD$O=j(bk}ka#$L zF_UN8I7jjDPIqz#iAKXYL2`}L=KSPgICP#2qXsPv`$kvOwWxrp+U0L!tw*kbk|uW; za5BoBrZ(;}Wilwiv`0*ZE^=o{Dhg$Lgv2Ki*!-vl6j##V=S`Zgs|)%VRGiaPB0|IQ zViHl^sR`OBG$#nFT24k)=UZMweAVNMZipj@wTu-Dsu1ZW${MTOqW_#_mv73m- zbhKzrL7P)^QajKg6b6i^Q#JBl(Dp_*XfG`G2c52t1IFrE3^yJx6v5l2<8=#De4{wr z`vZ;Q5QYz>y7~p~C2nf?K%Sf1eBuW(r*cs2pt=Q#nH}{Rm5*Oj`G9va9sfm7t9+iL z0xVACZ(4!;jT)t38H83D9DeC2h3Y}Q!2_UQRy9#Kki2Kr4VK`mw4@5CWiWaO(npU? z@N@h$Gd?tmA;I{88pMt8{5X`J!->X?w0Hn1vLXr}xq*dr6V`(H3>t$J+@rAzN(~VL zt|{Yrbd&!kL%?J6xCsmILE3ZKBMj4N6SgsuYS~w2*rEiB7o27~samc?T4W0Pa8daH>R>#~MglUT4HR(A~J<6hS)uPOxSzyCsY*kdhu0HnwqoHR(6HOsv5r`cM z&ZCCzhh_Hx)w(N)Nc9N3?-O2dTox_Fq(QklI#w?OI_W1!7cem{^HUa_@WN%W2;-%T zh5)4k`Mu+=9(HKQjlmL0&l1r+tVe|U5M?L?Ou5PdD`eY0gD{m#;9K3<|AnDoYj{s-JhiMtBr^H7ZKNL%pZK!#(c6 zNrpvu47N&;2@e)DpdYRx4>a%y!(7wEW*@=;G~}D{Nc~4^t{BI+GW&Jwd5Rmu56l!Gm18zF~n z$)IjD0K2iy0g=ii6}(AgcDzbtwyMJ?BGQDDr_h-80C%7sI~*NHO{MfjLgpiZ;gZOP z6G!hChu(NSWt3t~2}3CN2cu!|9n}cb&_FP_Fjgz&nnrVVadECz>e6d5M~6L1tEiAh8t_ley7F6leWfh_;cG5qfNC-IQ>pmhS0`TqjvUV->Y1m8nT+MGhzAmd4Vu7?nYe z%1~Q+jKd}Lzu!F`x-CnZTP{0RLQmVlI%m6%fCcUx0f$pcM0N^B0G4Lk8SKX7#vdc%lv8iK7ZIVH#TG|H9MR3rFMwNro1xzB2tBB!O2b&lDs%kE} z0u?xv4?(8p8xs^}gVYZ95QUEwVQ<=4Xr5tXwrI9J_G7k5sDD8`cWGK_*k1ZM+Pg%L zBYL+HKbm8;S7^3ILj@2^gQmGsjAX17(9AX?E{%YyRuoxc+Tu5l@Y<#Nek#DV1aDp$ zew?M+Vf!Gpeb_!Q+|hNkUI@0+H?(LSy$tL<5n1<183XzQQSHK$>PT1C?)z878eA?<)h~R};+etF4$Z{SeG(zS)Wy z8(T1g_9bS}q?c?EtH=soOv?vlZP*UH$i(R@@HIrUB5v&!UlJQMycKLHX(m*{!Zw${ z5m9&@;952s8-ohYgVL%DVTOYgAg@BI)aO7nJ{b`9zyXJ>jHkf)6%}P6q5=Cl@*yWg zGEgHXO_pNDa7imCCPK_>P+lDUdhjq2cAXHm4cVC`jyRiHjwiJWv*w;?KZx!$Y%sl= zC+n-&4q7d5kr_=-vt4G4lr;0J!aHjRzBBo*&4srLyx3v zw2ZUmQRQJU8UY#NHQ5D=gYAT!FDt>2{nJ_0+;OIG2O?YUxT#gVy->aOG)Vb9qu28x zT^_xG;{}fUAvLch*G4!5y3!o*274=ep#;qt^WO2(qt{d;8ps%PFv%qk2|@A@^e1wM zBV(-~W34y>kgk+D!~Vr`SLN?@4#0;c(KL~t^&m!&vLU`Y4v4V6QGXYptB_YNmlAPb z>-st{x;&YcNrISCrPqJv+c1TvrWS3QixL1wBVyQtu##9J6e}nrF-Eu&XYm)njD_jxEj-H6de?? zP_-LA=FHTh?m`$&PKWpUSRgIya5;08P-6UcnCEqc^ z4V{&U1qoYLQrIYB%(5eM<>Z24+1FfD%W+mEbt{YRO4v9%H|@{_yr&#Gj~q(csL;bw ze4CF3#sa)$bN@~2h|~qs>dme&X_*q`2U4PZf6AA4abP;Wn}cl|pD>Fwa=3&u4!3ha zT)2ZVcjbZ7+^g+veGISxt2W8)%3wwj`)7$2Fxx*%ssP)506rm9`{S$%#Ip_fWCVR} zS_UrOK4x<&{*j4I)EJOb> zVarW6rqW@jVU=M8xGcM^rf^wO)XS_8lQ@xv&LbE$Ln`|KY=u<^Ou|&mOCg0i^N<-X zla;aeY7cWd^k`|Cs-E-=x(6|x!Xn%ymPUiP?zA-0&A8K0e4h+U-i$jfA~)vh`?_$y^P2Z`qYcuH z)&ol-j7V8Cah=YsJ}48*xLd#%wy(b# zjTZqnXff~%MV}Uye zmpcJmhG2(h!k8s{Oy7t9y+CNYk}6X8EDV1)oaSNZL9L0>8SxXF?eC^``~liOA=8ax ziqiukE#yh!8xl~=9SqK}1`Mc7pmCpxnv3n`l-@EY(jPGp89|8#`9kNkt!CG5)->bO z>%H{It{uj0Tw6? z(Zv{wR4B&yH=J~?$;{ZEjv64(?#UzzoRMU~bR)#3L?)D!*qYBoy7DDsQJ5PqH%S&2 z)VXQG$~4IW;sc5d{}~mAh)zUOslQKu8e10+n+3}Fb*4*_>x+QR{8>*;@@F9gQ$HeE zxKrOl#}W$RKy2X+L_48f`c1vUte7KM#!-!E-qZyI4S8$$M`SVci-<26Z*I0fpkNZ7 z<|m~F=xygD6c<=iLP`@)IqH;dY_whSrNqti94%&Wbyw=3)m4Jx`%aJM{fM{MOY&uJ zqR+Ti%9n65F9*wum626DlpSv3YC6=xaC;HR7>|1)MI1Tpl95O z5#@NMlm0vuOWbR*LUs6&pt>Qoz{QfDpaUj$itb%&)mNx@hm&VxdOG;<|Cn-Mq4WSL zOnewG4F8C1{NRZ^*q1C6B;$0yma4c}rP+TE4P2=9>}e~9QNK?)4%looo5F9e*;lf}_Vc9!-Zh zdCytprn!^I*-6_#j}iM)9mF$;MYvEY1b z_=KJXALS5}!&qlH{A?OY2t(130>j{Jc5zoTy_zGqC@s@P=Q_eyw%99|6D~3{5E^7- z5R>gPnkt8CeUjK%6l*L;z0R%5T+yHrDQh&e}bWMAkKN@IzoAZr%l74 z&-zUI9Lb!DoJ7OO0Wl3taDWk{_$AzWA_+CxiHpKQ;neTRu;QbQ7bBwj9_6ph+X&va z5h|LrjT_=Y2oN%Q1&-cu0))YKAe4FEPaq5@a|`%*ugrTE-@#kIIuIb`+dFO`xho`Q zIv&uV_~?8@R$Oewu78u-MYbBB1f~gTn%GQ!!wJtk8c(2a^xF+J-)QTvZ5{ETd9M=; z=M#eOL#|NC>u}-&sIGX1Ul_5q1k`kcX?neMZ3{67c>h4}+Sa$*4CH~bsv_UYi~1f@ z%q`UHY@UQO%$1*!$YghG z7v?oX=@s+8{?}MqH2)oJwXSM;ib8Va*K2?8T=gneG&KLwJob^G8n1wrVoTzPae6rdiC$D))jUHy8IkGx2 zxV`5{dy#?(@hJyDQUvFk!4j8AA~b?SO~ytfD5vq@n=bm)+OKD%vlY-`DxGsjEJ(n2Nh;BIHvDz8uRUlTj=HGdStu=THKs>yjBxXX+Le$u=qu z(yS?kWJU}xNYD!(#L9;xBc`AoQ3qj=7#r>&ROs5)h}nST+0Zxq zyEpfaZ~n?J{pmdeti0qpRBBtS-+$+5Vdid#T5oFM*?UuqSo$}$AoOo)!Moqo0{U-i zp}W1Qg`Lqu>!X{W{Rkwc`ry}jLVKLo<5d`phLMteeLg~@HmlXys(2U5bt;vHM(N#j zQ>4FOPkz`ScZ(I=BsR}cSF-rxj;sX#8W(Z zRWcg2#}vk5g1n+I&Dnt%BV-T2bed66EYYeItfE)e?9x4E>TOUh4$Us^?QlJCOWHp? zhma;&3PDESn5I4_rx^Z<>SN%XeOPNGJ?*p;!gZeQRCKyJQQgQi z{F$II7gAYf>OIq8wxw?Jl7^WX-GncmhCPPT9~qyCQOedS3=F|U$V zApOS5(3B?UlMkmfSuR$D3xSbjjD2rxEvb>Qtj`Xry?uT5!qg(yW`gGWY$y{_3Ck6e z1|xKUaQs~WHA+TjwkZXNfH$KdcKcf?{(95@r11ZKL2CN9oA_PR*TOvw#IJdkP z++Uu^MdB1wHl+YTiMXXH!ed$+#D9nc(gmv38Q2);&vgkDjQo>n7k9PWGPZFg*M$Rs zAcrNG7__{&l@>I+x&PPX8p>pt{Nx(q)Zx>~_3_hO<1cEw<`6+b6?Njn8$d7b6Uah+ zuHL?hBa?7YJo&i|H~6tY6-?)DeeBfm$zma~A0*i*N(D%`(@^Zhh`ozfIUH;Jxa>cC zsB_qyKMfrh&8um|U78;=GZE`sB*73l_Te((uBV@86;x4(?I_DGJ9F$7Gr(@CyX&Wl zjpFhx1gPD$?zSX_d`^#qI^34V79W+BM+WEdd0@nuC_NU!_?qmD6}TjjVH}1St;MN7HeBmA#%I;Y2OcbsSkD){Z58&S z>S7TSJkVB(4z8XSVVA43u@AU<%)M_@b&qAF-X6NuMC##44E}-TG=OW;rNXt16iz2+ zAQQpC)944ao3TN#;)?mMnJ&re{R$+>3xz?Wipz&!Ve^gosj@{f-pg=gaXU0-#aBu2h07Lc4rn#EPy|mWE2q`QY5-~t5u}Zs5Un`DPrK$v6 zwGn+@Ta8L@ZoUJRJImnl@BPIdAcBT1CkLhs5AQueu(L8i>K#mWEUM^JVb5knOP=_! zrRTCv-7>LccV^FYSDJ#pIiTt$*eB8xbb+n25k4ce2U2mh2&#nT1L7I!R-R%hLDJDl z1`KGy>>7{@(%Mu$Ae4HI5UP>-#r&Bha^N4%*i10zC^ASB4^Q+iTr3zA_y{`))(vK9 zu+g)zdNTRggV;8svxZcl8P24~Z(~AFnc&>0}2r63e0u0yE<*pJ#!o5A`q+bH`{gvaOG=uiQ0lRcV*B#gF<=t$;=q7|IO z$oKYvX?Ud=Rg5q0`fg}48$)0%Fi#vtfd9^6K2Wtc$pCn?LLy51xH!U7h&iDe%v@{J zXfuo4th_B%Y~$f);3p)cETAYJEDREF6gb*)IB3i1ZL{U%b=q>|9oll3w8(k6I0|k8 zg_+oLcxA?xv!}7;cVtSx6nTMp<$9kEloE>GZ6 ze+tZO7c$&xaZ0x;0Kvey+bb+kFhL5mx^M-M>aW0-7MKSU#e*S+pW}}ocZEkS;nE(50y^{ zb!5>ijkl6OexJl0yoe?GonkQnscC+B@iH z2Bg7#3O!@;TI4R#D^tRw4Ypc*rOp^BZ>BvleZuS>FkTlAZ}ApU=7p4M$MYRaf5 z5RlV`()D-*=wz67Ys%+X3NAatrUEJ|7U0e*Ofkg^NK<$K!e!pdkvmzn*hDGx@=&Zo zU)teQN1UN?Mf2Le=`k1`?&M~>V+F}9JRH|9*GWDXRuI_b#0p}FL1P6`+5F~OL0(zS ze=SxJ^s&@ulZpV_uh%FN15~!bnyW9EkbRBdwQ~p>zsfV|Tm6DpPk$aQ{P&d*LG73= z$c(ub?q9F9FL$%C^C+aOV`JE0Vy*F&3>YUp*2bX)ppA^lNwUm2yO-z;3K=H2Xg!<| zs$_Lu!w#$NzHn;HyxHW3$@iN4Fq)EG;1h@aRFPja+VlzTY*nUj;*KoNT{$8^{ZiUb z^cz9kQ`wd$`;oHk3x*AsV`;VE8rGXK0{U$gzHV;fx#S6|FXtrtxrNuc!8bt3?7_AE zf*{RKGDx)6>N&9*IZN|9`Ml6xn}Sl7kdACvCQunJ>*? z2!-)E6(3d&Kq)K&x|H{EXrMAi$MK5Ah%6bkGz$fcD_h2JqZz}Eml(tSyNw~S9Fs9L zyVAizNRq@2E2U?!Ou&TLI>5QA%zyH(_vkYu0_x3vOth0E`!SzS;1DPI&xiw zHsu)m|$gJX~8yAO?$QKo~Vt?ah}*2T9M))qZxC=dh8kp!Lxe zUJc3J$zhq1;lPSfkeo$?;=+Qd8fNCw>T0*$0`Ft&!=xQ3!%nr6nc^O=k!QP$8s!qZ zA-TXA#yJx(RhP)r{O09n1`1mQw=>hq%(x_dGMC`@S)!qAc2S~}A|HE$NPEOpXJAx8 z+tIk05VQno&$-|cyf=Xpduhb_R=$X-G3^4^rayy1Hd8+Oi{r1dQ+5bt936WL+Q&`` z)EmUuI0ZkCMMeefF}0;@rn+QA$J`1g60lG>fjlY#l%Bw@u9yNEC0F`lkN9F^0%-gk z**-&)w2&}Zl+df(<(l%BZ$S0B{G{pi0vcUfi%Yyr((Z&55j13LrEjsCz&)AAe3<~h zl)auZX7o}83RX}Q0V7gF#C)Cw4(F@JY3IhyVlsEgpODR)%ymYQM$_F0QFhBP(83iC zED9kTR;-y}ogx^&uI(Ip4B?`Usz3(LyEJ5s(#nE(Nd@sJttGIsS63+l8Vik4l}HbA z_ggk+I3~oq$Z#RVxkV5bJ`25pAZT94M+RjT_QN;C2+AJn7N(vn_t6vXVc^xyaiMcZ zp&$A)e*{3x;fvU~z74t~1x|vSA)HLjtlv zUpefj3?vRIA)7b^CB(FQlsn|FVXG|D*RaW#&ku0Ow z*R<&+OB#>59-sx3cyLWYPqgujvu!#;J08UH+*7%_Iq(+UEq*znsRFzYH8JmX8_n}|?n?qW?8)oC%9x>Bu1 z?k3V4gq2ZyQFMkjEKyC9B(9u0)~r0>OG@=UkPf3NLklMBiWl%jlt+wrbhO@dm_wg; zwrCJwF&;RBSF1@}(`R|w_PjL=c7a58uz>{N01_b_aT<`ob`B&u4G7xbNDvrg%Qm>K zU8u^rAYjH5g9lfNc}kx(D{+YMNK$wP0ur_aGJtGpDW&HXfrPZ0V9K`RszE-wJ>MC8s9R=87wW+*ygzJ!p551$J;qSeb=0}x|0Tm_R7v!!&mG~= zi72vGRd>Sf6-=m{fiQz#~VoaUXMr3q|uf9ZU@@vT;?^9-PG?$R0 zDG9t@0*@^>0(b%_Eiw>g2soZimP`ONeWHSDysS@j8J{Qs4nJ16KGS=1`x-8L?(-LS z4^E-qWhA6A*D@EP3x7t)ayau#urf?KF}%L)eW;)j0|LDr=0ydtI$%rhNNbE>!Rf90 z`0bwDcP+yE@f<8hteGO5GDRpehPO{|omC@xRj5Ra=ekUOI)pC;dnW$0_r@QLm+bx0 z*VlV}aotwwJsol`?AE(Vk$}yLV=9*O#P66ZA75xMsw~1w=9wvErI9#_-4Tv=0UeSV z1cAne7Nku{G z=Oe9FU8%E01XSE;H#bmE<3^{sfi@X8@LlF7y>bIdCvVJ^8@ToJ#(cRkA2+0=@}9b4 zdJf#2i)l&C=5P>BJOl_prQyo--gv%ua;RJo&J1@!c)TW%xOyuGRz(RzUIBpVEfoUy z_9!%_{y|(PkW4OR6;$djdK`$3#J=De)0tgUZiyi=#0J#9H14CS@c23#cd&Cjy`OXV zTS-jHJ8Zp1{k)A*Z_7(|K8FXXvz=vZ|F}M)QJT-BR`J=EMyKek#|xF-rinmEZ>K>$ zuy(eQova|5Wh?PN0oetbmo3A8NK5stTOV%YYjkS7G}7&gX&VL8&bxSOcTBUHu)MZM zSze<5HxaePBlrk@9wb-b9;|F3Lar~v&;#uz78^TLbAi`HmBvg=FgNDu@W-$p2dNnT zvvfL*l#&kWb(nbKNz-+xGrStYJuhNjSItj2=`lpSy>MO-+fRs0_>z9Tphy3x-EK>d zs-Qan-qt~f%XXQ-s5PYkL8btl73?pVuV%hZ1^S!1>LDijDVt?7ki|nAMpj3R@*Lo> zu{Lo6nuC}T3fs^3JN*QM9_)It-3;rj0M(9XlFXN3kFi`SpdR#6eh=i`g%j zRrMJwG-xJ_qHl~N zauZAp0u>?@ObjbdFfm+N3Ke^p!?BA5YH#6X2&$d`A4mXXo#&S}P zT{}Epj<(Zkcefg%ve+TiHM6hSSS-%J&MFf{-Y#XeUU8##?IQ>8_NGc1*sxM7$yI#F0G zW{b`0R$ATTf~C2F32wkhXDU(hx03l%12z)@Mh*KB+Mj2Hva4B$y@ z*+%IOOxS)CF@2nEAiSTKBV=6Ne^u3 z>p?bqh%F-8Z9vJ5!?c6LQ58zG%n)C%5vRC$U1*t6@Z6~}f&CKhyU2emxcc6Nq9f->y3) z&d3>5d;&&NAffsAosNw;fP_u-r8E4OiAJ)3GJOt4mz~sKy`3Rh27rv=Pu!Gj28KkS zz1!#Qk2EKoY$y}f-8&_KfqJ0+=PM zi(fB*LnGHmNAs}dHB;)J_pm^OjSe}ck6y)}+%|GT2AXoYE(BrLF+7|yQU>d4P+;Yc z%z90555{g99B7CNitEXOFaU&!l8xPhZDYZ2L%v|!kbP;6L36P1wPK{ofOwe`d=3j; zqa+MzxBQ(SFc*T!`j2Xnb`S&?NLkJ$ovkI%9bJP(%eISs?h#c>yS|221#a|~vaZO+ z^Ns1_G@z&r09bcT1RHid#s@h;tpfz<%M<~FW+S#}@ap9u0pn;O0f8cUqH|~x0NQ8H z6ZzM*4C(v0y#=1!jNykxT|@|hJp{(kxUg|Q+i48C1zEBXa6TBaR zCt+E*CMhoU(qEnjb}*D+STRtPm@2R%OiOMaQOrY&)l$I_BGT!BjI=Rh4yXo`V+eKS zTqKO>y>2`p-65yb%uZMmj`6%p4@i=@yuVbQAx1+1_pOALx)^a zmhNCZ%oI&f{nMsc#!63WZkn5wel;6SVeUUDJK}4Sa74N?Yf(({HmzaM{12K zcq>eoqcElPobpHsJrpgC%8E%83hDL`{u(2*hj#?4RKqox6&`7FRk(Pp0qafEuEKJH zjuDWjjH@zY=W=`XczdGBm&rva?U9!!5W=fUeD4+&do3TTQX#akmtN;eOl z;=W>G0D!UcB}ggegJddG3-&!ZEZA27e$nxl`N9?zvX z8Rj&4NL3WjP~+0a-ow<1Ta!%QV*bM)951nztE)wpJ`H`3?6bNih&td6dWkL-vzDeK zM%~IelOY&i{VXa@{T=o5KZ1~L>J1S!khP=)>jPF9GR$M=n#oKFh7cIrcNxe@bG9#t)fqk^o)sEDN{s8Nuop~_Uh0_S-zOf7ISF2|53DKo$hliQ@F zz16v1x6^L%S;w`8tS$v#N9_QT0O&EH=IidQD;O?Q)@0TqK^fMdnJibynm-+8)45sy ziU7g@feFhxH4{M7XiSB@U8_ElY3wu8)QM)XTb-R-S;n+moo{Tl-rPb3C!QSS?3_B% zLK6lOH3{RR4Su$@4c(V&0}jmSx6R(A-|bu3u={1&z+U&IPG8$vC#~DP-$?0ECsu`B z>NH)zZZ%GNDG?UZzP7c-_Dj_W35gnIe)N)NF$EmmE~ATct_4$_2dQGSBZiW(H7hYM zGB$}h5@skeqewh61MetyB~RU;P#|Ucl%pQr+}g8_WSJ^-Bo{0KpTr`>CMZ^fg}W(W zpwZywc&~IWP#4xNP7iE=NNf+VJBIuTJt--ZgQ|h?5Nn8qvTX@! ziYRmVL$Hw`8=tD5brSy?llWKudMFAE=$lARB)PNXq#+_Q*#P`tjNx{Mj0_qw!k1`- zBjzS^w*fiXQn>sZGV(WMWR{FfnS^A-*^HpkkP)XjGUGN9rC0;gpD=@ef62)AqbEWJ z6?I{GKle!_g`e@~pZoKWKM(rzPyG3mKR@Qr$J{RD!~UG{=Y=2R=g(9^m^V9x3e_J6-b>amecfdT zUVr%;Hm=yYhb-Ijf;GDJd|cJtc-o=# zyza&Iju-m*w7s>g@^$-83oaE6?yS4BMQy2gQje|JQszvJSxI@Ct?%7gccM_gE7fJo zt2^tttS;ZohrTxXCZ)D|+OYg`(y;P;`}@=9`Tq3#Y~b`dVYa0^(`Mz%rOkOUfkLTy zrtcwO*3+-^x)h!DOux?SXt#d7PK-i+v1Lf6Uu6B0o(iUEH}cDPdFjWx?cNseUBtI4 zP#N%rJ;T2s!*$2_Q9W)DpziPw!qq$+chYEp)j@B8U+4P=i8R1oix!79cZ{pNB{@gJ zGJG!FO0j+_s9D5^qGw}7(=KBq07M?)0QvA9rAnHDrRF88h8XHC*8b2mg0>)&YLB6Q zQe;osPP2Dydxkn^XNZg@C=q2b^xEaBMOjq8ztJ>(V!pg|PrQQH^j&=Q*L(>8V$lhM z)6xT7Y?AE{poZdD3pF(PVW>*IvBvsIdxbvIpW9jmoCgdH{tW#%o#SBu$yaChYGQbd z91kmrKe1I4g4(jWvxN~-7sJm*udxmVAlZ#Abo;Wf$*WLFJ3AI@GKOK#!=MG`YWz-T zJz!BSN&k-`V_>w2+gHa9N z&x5lW*t9gWEe>CboVmg$LjPLL%9#j?k8v<%8wLV~zgl7soXO~z`p2lwcKW@E!^yS# zAsTlY%K$6o4S%|ZL#6qjj%e=h)c1W#J>h8HsPe$p%$yj3ei*!W8UOId`#^%KnGdmX zOK2e-5D}O$sJx{2ouww9p*;4)W5aj!4bRX01WfAp0m$E?fs}wjlGqF4SG9Sxqg1`T zSTSr8Q|2c2W9LHF6HDL~x<*XQG!B?kp%q>Oz!51Ax#8+JG3LrDletFD&!tsAI#2cW z-0&~wmwu+*?tVzL1fdd>3O;eGx7um7rDcS;vM`LX_89Yyp^5pzI?#D2ovj&1lb}j` zh;1lP1c0VdslCGvqJ$`lWJwB3>X=|P?MwR))2x?QdIESq5a(yxSR4ahsIGtw(NlD1 zL=4gs=IdniKvSIW9xq+N#OKX%`$!84LgvZn73~bSJjZ2BnoN%Z1`p(k5_+Q+6V*z% zfQdP-Vf{3i7U;*2Y0=1u9keu_ca5XL92eAX>7RBRQx&G@wx%jMKMOnn0i(+*)r!Ng z^Fbfbs;CT?z43r>*lSzR+@Px<_3+O$SYRmUz^l>Z;fr)!bRj~w8NDN|jWKpO?Zmvd zABDNS`C(1R|LU`gtaI}t1$DPbN}9Z_r2G*U%zfWbw5exUN==O(u&)I zkUFvW)!Q9B&S`afCz$^!ol(dI7R^x zw}~+Ri&3x{M9_d38^+Fi zqcjrq66G^;_!eh13(NFb8-dbwO(37cGN9!^6`(XLP%dzLCB0j!_PM5n=s*6bP`QC5 zisoZv$hHwv)&h;w{7X27pr>eBJZI>>mTVy#vk7RBGrq@^q`YkEhrYOg7DpBa&15xv zVX@((F0?=a7`&3u*&qKF%GTBO!%qY8kE;Xo&|zrr2=L+HsG5Zr9H5Y=*%me0z#Mp_PUPKnnN0@10!n4{K70Dic)I8(pDB&j`OLRhNA1f@n z`u`%tjiSNF?omVYo6H=KTAJ9<&xJn(BE~A`5N-$RKJVu1*gtzyWhq(saem2q&x zWCQROlQXt4#z0G8t5&zh|GS~PRocgDTAy~}8}j4&{3k!&F^hyu(}gKJw5l`pZal(v zh@B&bL>E)Du;ybmDS5$?uMOf4K{GF8>N2x7Y>)1->$@lG^T>kwuR%N~&(!bn_aoGi z2@~T-UqH5PL`u!P!w#CUuS@@>28e{MrS!-?fRGipSDdZKFZbtPH-EVtKg^%{A5e)G zw)Qrp>R0zK+U9HMrw5C2|D2cY1^n;G3tqq^G^P)R1Ee62vck`A^~ht=~FCFSXutMwzJKHsiR%)o!EV^6HRdMukXGW1MIG>E+2oEdtWQn zT{3teq6`!$B7WVtg2_rD&idCM{y0JG2qs`+jdd7 z>tFZ@pf=hG%MW<UvxiO=5&+#vc|p`s25X1wZW*`+b7^2j82& z`90qJF8;tNid&}LBlT(xS3Kg7o(-6JNDK2rTKo$d(l50g4$R+UNFQ&Xc%DO=;o_yu z(%>&>NT0I938yYHOMmDSD__Md{k0j&UyQ$$d6rf#YZ3i25Mv&pW=!KtcI2QPN#ubO zVzf-bnoOk)RW*EJd3n0~UgitS%ZQ_kzIUbi(|60F0)4@A>Te)@`LO`IBN9#$f!H$vX?tzr+WA$ezC0s~cYJ z=VJ7-h`9CL-U{etPKr*{j$U2Qg#;nFR=%eF>enz_VHz%Wrqq2fol!e=&5bLUEgzXd zt>XJn{um!gP)ofE$@Pp^gWFyVQpn4d%kx)l_VV4Bmay<;J7no|d~o>%v;JK{|K^Eg z#`ixWFFrOmlPy^^Qgxd8Mj04!^XF1s4=}38S!R#@Q{6N=| z!7ai%4v)DeOm>-fce~7k^nbK38!YP|d^f|mMzCGw>GygX)RhQkhsw4b?D6}2NcB`2 zittt6E+-2Q zZ7bQ^0OkV@FkNEGE zoP98z!L&bMqu&*$vkG0X5qV(jKZ%PaGCr9ootsRXOpQT#mhg-D15aogpL6DIz-A@G z2C6d*Xngdi-Et{8X~-iekiNzE|B1?UMUcq& z%bYAEM`ibDr#zMZMfcN20Z5PKMDX|EJUrb~i(u7?i*z6oJW-Q{E;_Fhz~U+82~H9- zJC~B&#hVB>8NY21Ex%rG;|mKzk!0z9& z(cI4A#tZL#d}%~ijJ*-VCkx=`$N(_YePeVQhgvm?Kwj^gj!Z^TbFS(me1jZ}0ZMXD ze-=O1)4Kbhky~JSe8Sf&mMH^5T65?j5|<$tqX0@q3F^t;&JITXNq`gqOIX0;!uTUv z2`R9GJ97@m<*CSdFr=OV%IA1Q=eaG{5Bx#Xp}ks7bHohRPqsk@aYc!4q1}CF#{Y*% z6dkQP<99Q%A1n1aH&x$r$>u(9VbfT#nUr2DHb-Xf(R6SI=ojA0VCAWD9`Y&#lB+`_ z8>Ydyn(#f1l~K)E1EVRKi>bgm`nH-gkIYqb9$dVdb9YwF8B(5Ab7oOzDt3?>p0DN% z>xha6d_xgLUtL&(_bGxD0EFBI?HgS5%#TCkSCX%|qk3o%PXMZq733?#aMEDVl=xsm z{AMVcT+DIo?CgGHNQ1di^`HN!$P<6AQSl8&1y!X{r7bp*aHkXoLvienFUwBuL8Lf9(^q#^uJ1s~RTP@; z*3{nU)d!oFBoNL?lj_7SXR&ZyZIYgD>)Gy}vwAXVJH7Bzj~?sdSMKK(I8En`caLc#*tlkxD^U(( zx{}^vy;w85aStUwR&$XP zCo+;IX8;4lwSEILEvQ|)mYFaq@(K9c@=G)&Q2T>3=KKmE*ICis|jTP_CJ%nBJ}mWQn@y)W!5hnIJBm zh)XfQT@+!Tin?{mEfK|J9;RV#%9+&YNlbL~AV?^_90(C#bj=}X5J+-D)QDdvS*M$1 zAhhdZQ_#reSPVVT1FKgSr8PVL)!y@fHoFssZ2wnfF_gv)zbrJsW9@$=Zxbx}YP=eqC8A_mBCz(=q+4>hl@a8l$|`zfEJR6Ck$S|~)kEL!WphDC1Hzgd(3Hbp|ZSG6PKkCQ;G(FH{{!)xB9PIB!jI) z#i3#Pr1C`x(&^YdDEO0z6=g+N>b!R**OIQV#I2~TV+;@NZHf0NXIqY_4zol1$Tb?- zrQn62OsF3mTtzhqg=4n)XF5*`h^|aGjDT^qDhAnx^C||9%n9RRBaG8i^BYEtP%-j4 z$`I$xh7rW*lQ2%N%&QobRwt?x3z!tfl=xE^_iILhCJSj3Nm#X}4k>5qU)}j8cMOG|LoK+2 zTc=>z2Ce(@St^NGUs-jAe7Qs@i_oZTjV#}Zzzp_}GM_A(lBBOEZRF6L@t;fPVs3B~-RPb0oBMaS~d9gbGa-9G8mthJ={=LTAcsr|8xm-7PHo8Pn&nytPGl3kqCZf#tL>mZLt2 zd<&P^iVd6?w3)G&|iICSxCu*C>PLiyq44;>p z0-trodBQ%cF*M$g9oV;BRav|^pB>KlEPQjuXQ{<^F;!)lF_3R0RRzw9s*-gSJ-zBE zDee<1wg3mCM2)F`8y*ya^+q}P11@MdA8Rf=hx*VBr2Q{xKcVk`w@s0#g#5p0d0uE6 z|3zpUXc3K$fjCfofa~__&&-~!ui?Vgoxdx4oL5P*(s9Y!1~12ciowe^wr_9#u8SfS zXmvEuY7l4zG8H0|tNasMg}!!trsb&{!kb^ip|W6W+*ct>^6A!eK@^1*oCHdJ3|-f2 zy&{Y?N)l0hF^4~tT_EYv>q8_45RW&UI@rBxELMRqg z*$MQ_UBU;8hN4^xMdi|rAndkF<17mo=PZkR$hC!wa~0w`A=g^2f`;a-GJ?6OhU0KC z>2lmlr7_$QZW|MUSQ~0b1A@8FkRng;e?!Z-aQgM{w$l|j0gm}aaSXzLDW6Ja%57=h z|Lf~JU(c-%rFs7!(!7IJT>IQyLkLCF^e0H(vHgCa4N!Ui0jMyrsk*z-AUsoq6%2*clZHtG{!7Ich!8;L@q)@ zoNpB^d}mwXi@QtH3ZLBFVSVw_6|YcwXo|AE{8l)j?QGT*`x-8>Fp;!@?cDY6qy>}I zRMIVo6FFR83Mst^97qVMzeoT*TxEg~B`@HgAb4)Ntt7Lh$hv%3__+fy?wcRXCBtTA zo0!zOMXCbW0yKsGCHx&!M?db`gH$4~8=fBA+^8=R=DDU*)PIu-i8O!JS-d6P`oGng zHmC=8RKweucvP|GN!DMUg&_{^xILbK9rYBUeB3Nt@WF08IH=c*uYay{)`U?KQ1Uys z(+5kN5eDPg-kDKaa=;fUgpF?c%9@yMHMpaG>$!8ivux_copUC;Gl=-d`NEw%d1!0( zh?{|={}s)TeC+7Zsn0z_dVbGXb&R;a_sL)HH5dNV0+%>V- zJ7O)%pmWS$kia^K)y!W%&7au5kSQR~pO;)g2M zIqMv{rx;fEMV-$5r+@Zd-S@B8vkq3oOv3Bax=dIafy9cQP@0N&cmq^e~MRPzh1^9Db) zTJhX<6b`LV_|upJI>Ryt7g>u4w3=e`sh7qx<#j3U#zZAXmnKW(GVhXSaChPhW;Ky6 zVYX}1(vhel9V8N(9IBxex*CszH+WloM+m5G#n3y`CGMvsro}uE3chXhhW_jV1Tol* zoPdG%F9L`iKmaZbI4nhj1E^BO0s;`};(|n~sqlV0R8`5?Qpvs9xSD0_2qB&4MH(=x ze*kE*YXGfA+MLDXohV-*uIG8cA_zlkbnmcSPUbkt0%2$OzX_JX$puJInR$WAY5jI}5MT8*{%`VWpm$W%T>@*s z4dQlg5#*l*YH8mGN3#m^64-CmIvS>dSw%(ZECo*)5|VXDc+c{(AP=*fh{uVkfCQO=LSpFe<>`uuB5R1yD#!T$G3JzuAK@ASdsoTD4XLth^(j39oyx57lvd{_{H4tR7%>24p zNe(9cKM*q|dM*zuV#8z(u0{nbW z8Dcf&t3D}MBt3A-%|j5Y%-T2Sxs~E}g0}0NG4fLUpL0z}J~yh?I!-8>vE` za(=ReOyrOt%c=#50j)t|VE2|FhKqo<2)q}x;60#)V>X}_^v#EZwb9eW+5Z0tT1J&Y z3mV{Y4$#73!1?~@)n$R6RX@eLa^OP^)Fcl&Fs9D0-&*$_&OmfRvmJKc*f+knKf!zv83&Y+g^6ySzWn^@uXOG`{f6(l@BD)gUpQC1 zesX2C`3@+V$07(E%#}z;wS0Cu)UPqUqPp__>E`Ks?&tOPy}y6&>2uA=J@-yF%TwUy z=B+BRoB#9VDjqHVeznPsY9CX8I&#%J>h7IZUR*v~-+J40q_NhJ+ZELnr;9gkYw^}_ z2q|p9bn0Tlqf|ox_Azu{XEmq>Mc&^>V%}v*ORiR$PK+``+jI+%gjzCCZA&AxF?cQ8 zl4%`%h5r>)j0AalF!q^~L@kvVSB`bV9U{RGg`czq-AZhZrn|n zzk|U0-(#yYRfPb;D@lMHzkN_0B(d@^RaEdYsgw0?J~En;33=l6U;#mR0KfT;sa^o) zW<~$SP#c8oZd&1IG0KfB97Y7y3)T}ygJ28ICW`2^0@i_VjX%=&gJYj%f`@0Y`KlFG zu}|1o+|+;r9J+Tp#D2Ya^AUEU1^{gKQn?M_3VmR=TK0zAVy9d8o&is{VQeBn4MtU1>^v>WTNFIU}$2doN@mR_! zT{%;&)tBEnT{IMKglA!kmkEw|zQXxE-&vn9x5#MDu-a(O7dg)k%%1L`MgFwsIG5dX zr#(kwb;F(Z95vQxadXb!ixG8o3S;VW6UUPuUnVLF>n@8ACH2C>t)nJ0}UPJ>*C}uG1=^+$* z{4$y-moeoa>VzP6JNf4S0Inr4dLuA+{p@rEhRRx*xp~Y2|1W~a77t(A3y(9!3>sPi zdwFgSdsRf|zcGisqb(+SwDq05p;IFQ%A^l59JH%-@fxO@>@M(n3B2|kZUHXTw?fMf z(&4T%zJ6>F$Gej?rib^5WpHK#i`AM3J#5o8pSZkQ1BLUMx7Mo5(-YWFb5G>6ZBKNe zrsgY)IN0JWUQSNswZ`6P4$deZadE&S+EV@^+pyUF=?=q#Imp2mY<>&#kM4gYs`NmuyQ)qA!&_3pI3kRO6Tmf zFX*_?%pbsxOHuy^wE&h7ye-a~w0)lkGozHhym!Irb>|Fu84P#9>21zoxP(Av=X`s? z>22=wMK)_uX9deqCBk8a&NZ3Sxvrp#laN*cndal_P43(gM*OUqkOy;pa%TrctXQd2 z#or>tTsQI#3xGTlQRh0`OBHo6tCS_-)&d*M^qd=GxWsfctIrHV6Gob6L_vjf1-GxJ z9i#Y>EZd9cWP!U)DzSDst@=_l440NWvp0D?{%lyjCnf~~sTnIf=;fCX2>I8(yn!H! zMF?7Z)T>%J+Bh+&*J6@^vEjedJOlm*X@H3`hhuuc-&gV*Xdm+TRs5zi>;A5E-Yh^y z?y|tpn%=Bbl^+{bS9w?xfDPqQ+6E0@s7@SMk%ve~w;lF+3y?!CpR}fdM?yAWTV2wQRNs@GSx}r;mv?q;t73#^RyH}JLsleJUMuIYCmgJ>* zOq(oy;eV}(g-OuZ0oY@6CYF2~tC5K?q%$v>5!JBcpK8ig$_EuAqh zEIObMy!VFAH*eEbn*jj^XzsA)fOMy|V3e=2u z&-BLEgALqf*8mR-@H7sw(ZHlsjiO_$TdauQgz_}Ks+!zCy#nxJ&o;(!vE5RhUV%{& zD%dh=z!gc!AEAy@b@~qd%u}`pDXJ?$G(A_q_t-as1=z=bzq;aH-!?*odD}b?6Qr35 zi(-_4oXVI$_y)T|$^{s&c;@SKKSOHk#|#`?Rb92q#FzK`J#|m&t~#v!eDq3;!Y>f#hu4LiFhT>`(X2j1 zTyuBL#~3(&puiu;@w|!w$NP$^plyDo$Z^?<78$jo1#ejrE&O;MqD3bg4g1o(Xo;-* zD3X{iZ&sC#4|eU_nvO&2EYuI@i1ecuSWEc&tKs?7(Z{J-i3FcxsFR z&0zt9n*%E=Gio0K#jp;RLSZ9nc>lB%wabg5b{VK0$i0H`Q6}VGI%6vx(R;cUEJ6gA zJ0$e3dLno!f|vJBX~U9a#FPruhC>WR=Fz1A@e-wt+|!+il)mG$3tN1P`ezq;@PASz zVqaY&=&KHP9o+yA4qEucYBkl8+8xcHP9_zZXV`!bjc%igz8|bsjH<_;pVJLSanMn~ zn2|1PnQYhX!NJ)^i4Ju^C-P)Y^=&x2CG5PBpGcTY(jJKPd0^#}hkdkL4gG~3DEHi_fV5A1 z6jb%jYQzWNya%cISM3Xb=1!#QAwtH%6`2bsy$IAHsCY@JgStP5Hn^qMgC|Zw{f_oN z^PW)zeGFUJpv6I%jpDNE?!*d}f7En!6zm$8wvOtD;Yanp`cc`^XP`J}1`*ehWTF^e zZV?n9E)12`PySp}ppUisl!D|^FQ*cmh)fW!q|6Xct9ZZ#`^1#_bp60j^P#Bahfiyc z8!pPBHvsT7ft~5BR8FQbANpHD-I>NL>23kzP)VGUX)jF_>dA>IbBeNImXfP?`DH>{ zH~n;BSwH=B2g{*9mj#$R0W;0cHiNpBvqckl81J%C+K#zCK5I5DOK9>5OW+Q)C#<*F zXivzJTr@YGX>vC3W8e#Umf2WhL&{+G$OryMr36+xFT%VG93o&Vm_^($7{d9rFai!I zFy%QMuVlgeI2tT?sdoyz!D0`-en7r1@8?Hv(&3KC!@1MOuXrU_w=Sf#BG@xe`;afi z6PIf;TwX1OIiQDUEiUhm1mMv-29d^*xN|?VTPP(s>aaXD|1U*OQL5)S_RuizaQr7d za(}{m&8KluucvAxQO?2*0lF3yka>QfMLLGfL%N?K|-prVm`S3o%hW4yaCw5 zOE#3Ay%!f`c(Jk@nvSc-I0#xY)Vm@pi3&VNsrN5X(>zeN{bYt%V$&mf)wQbkl*b|~ z$ApindkayBx_jf18#>dOQkT*Wsm@8i38g0lQn655%UI&PSV5FSY$j-afSU<+3~hu- z(CjJLsge8(_BC>AJd>8eu|F3~O`%9dy#9m1l>X*VhUmKlm?kIzNnS+|(Pfku_Xp#Q z>=-Y`GU-kN9hyOaj=+6T13W)NKSWyDLSIdz8=_C7Nm=bcxK}^+vyHx{?)PA$y%7jV zd34YE&@=xW=K4wWna4ACeSbMeD6v5S5P+9$S6*0L0zLGkhg1B!C$cYO-UNPUG{MP? zCc3Xe2JM9D|XUEd~)afiNlc1 zP8@EhYTDJZCbO_1I@l_R9FX7SBQ4~++aTYaLH^h0LD+-WFu{9(a3BZ=GZ1PC2tu47 zGZ1nz10kD;?g2s{0ff9x)F$2rgd`3M!d?O)b;X0N^b!c;>ap1}lFU}L33h@oKDiTw z&&5`RF1_{;=~QC!_}gI=XtzMJyaTQRM`*#SL#hR9e;Zgy3vCek-6gv$)NJlqo{Be5 zQaijqbt#`0oYu(LM1_*oaA5;*fJ$f0iR4G#sygltST_)e#x~XDtxw8sG(nf3R0x#g zMn0x3s>|4-y5u@GsLsSLY+*_vt8mOIZX{n~3JkTCVO3Gf8NxxTZtG zLwWXP%ssgOau*6qNmb`{gily*@aUt^=06@{Yw)7(g-A+SznKTQu)(*B`sdT;Jh3NH zil>hmL$M>%X(azj4oL^2Ds zuBU>Yy}z@Cj(@g3d~@Buqw3wxt=MR3k6U(1D4+pEMq@>Pfnrs>(j#A4Ps+*d>7Zho zw|QXH+it18q7RKXmlacZU)uiWFqzTGo)|~!C;)<_t1zwg82`|qdWxU(Br66bauKS zQqtUdI`k%&q5Lp{eVC^Al&8`^@g1+3R_A`9XT}iWPi6|cCxX=^Dw!YL2CFfU@6;C5 z1j6#ioyU6~ZaFgk5>>%%3YQeau*^^Yus_FmX*g`+663Hj!OWsxsD{SR(P-Dy+ZSCI ztQU@az~};Y31`IYQ+B6>wVu*0#~R27yNm%nIKl#ER%(eIL<27Gm>vqJOpgQsU}Z!N z4NU9jazXjrvxQ{yYt9x*-`;P;Z0$8kDL%311m!A1XHa~Jj710{M|_7w#^PKajM2>i zvG)#nJQgdcBr=V}54OU7san2~(PAc<=y!{qYLGOZqm> z4n{>83d^e#;($UR!0U;}0;O1f$VKC^3*;|=M$Kh>Fyw}8P1XfZpbtJVf?E+VO!3!f znb2cQ17$F#q&dKh#3ZBKzHQB_Ih;CRfNT|pN5uO%`9Od69 zWk{r1@WaP=-2>MV!09?sQM3-P7hWf6HC<;#3XXBFM?2l-ItmG11+RBa9s#P=h#VB~ zU^`;3<@l=W&r;9w1^t9AF|4IAL{xP4WR8l0Sc!a-H3%CSSNjd|Y3T0FZ-UX7-2e*l zFheHlINsPbRz_VzsQ=H-w zi^6Itu>iorb3$r6uXAi?6q=c0Xi%Plr7}{c3PlIN;T9YiZW=LngRNKEBhU&0l0a%` zEk)+!x6C@VB0u!V+RfxGVeYO}BP17px##Mx6&p4at6o5=@zIS4fQz#Hz_1)wD|7<7 z<3Ml;DUurZl*U2Hq(Ty7z?VdSOx*8`e~=Sf26=SyVKc#1bev$=y2J`QA&M&Lz3K9& zxvTreg0Ss5Hjk-$?KxZ~s$Zqnf{DgrWyAa^1*6eVSW+j%Dtm$Pnz}qaX>|Fp^4RMK zmj6_r^#4FFMQ?=@*-%I-3yvqby zXmfh_aDFMCC`Ac~G;6T{OcsI8L$4tOs^#-o)lnhk3QuytNrs_8>NMU5wYxN$!qK2& zJ2W~0_&LUH&S4WL6^9LCZ5-CoQu5|`Xd=sCnAz1F z#4x)+S_Eg?6cV7}Wa2&9n(PmWf}<|weMzrf8HozX+Ln(QPJ?2!;qVFABl6_b?RKh< z>q&hqm~vRGtV~zT#Pz%|(7oSC617@STBEyv=*w-z#@?(0W=ErV31uC@OL4r)b^FMJ zIM?Tr6_Vv@ZM#CETWO|{pu643XyLq+X=)V`0Gkz(BEeAO0xkGi6%vFq{pz!>+30L% zy1rW>S>L6QL|Llm^Ma8yV2Z-k7-o$^65lSuIe1CmP6`Q{hv=%D#mUzyB&J+?QH5j} z3P}W7y-XH9shV5VJLWX7AsO-*LxNHALy5)f9=L7*F|LO~64!B&s*vRCp^(IN z!oIAYY_5kw64#;AfNIrE3dwfFUd{T4nL>~TJZs(S}YU8Jrokj zcQNr=^{$mhAwePAgWn{D#Pv8ii@Dm@C?res3dtzs&*(pOhDwQYIsIQT)IBY{zhbCg z4MWX1^;ZnF^PeC?eW)yZukWXQh^I?RY2BPVQZmS#MfxTEecX6a(T-Ki&7lpUu5N4Q zPen#VEIcq_@BXPv7x2MfEa#}#Pk#!)piC8KA&y?5`F zwY%r_;Z2my&}CPu8)w(sPv)jM(U0ZX0#Oaa273ml9OE6~N`MCmDPHz`g>-qQ-s&RO2mUH}5NS{UR~l9ilRHU+GjwoVsO z!8h7pcSmb})lccI`_ORP>4%4-KeECM% z^iX`zMeo8TMH7ruqrM{g!@{8S846{GAKx^wp8nQZX&TO58WhG;tPP?&>*?{akB8@} zhtfp2%bhN;cjx8TiTRadT}b=P^EQ?Y z-y8k@h#h`oeP2_UIN;-oRq&hGg87hZh|Cy-?k=Q|K@)e-P85^r8POrSFI&}YZjc2(@o&EcH z%m;WYJ+S{x+-C9CI(H641JP=H;y^Uu{X@-7T0i8=hj?Y}bb6Vdv~M2r(}&WB>FZjx z-rQWj-}ii{@`gQIV-WtN8GiHR8cXN+dH*}6i|Y0(+tN%AhEoBb048n^-$BG-aVTTg z!$>*w@GC5enbW0`-J79uaNc-AH(1|+ijl1;1lBGp1lAfMP+$SBB_Yr?ASCOP>zQ~; z!}~y2H|a6ckjsPy;8&~F{_K%iHd3b{v8H%fyLU>vDJ8X}tD5LOu1^Sg5ow?lglOWf zK=#01nL#-XwA-YCLgiYJF}QhqkdH+$tPC@i$H6YT31DDfEjV_(q0Jcpn;-PFj3pr5 z6a|Az?`3)N5V{^sM-(jTH!v4Q!Q79iCUS-I>W_&wB*zd3qj+>Y7P;)`#$3k-);(@J zjw!$Q8`)US-Nv=TbJ6V-qS~{|6TH$u1NW6CZFG&2MtJRX-o|M-Z>bJUhLC+|owxCV zm$Hk-M4NvYwNX^Ab<3o;N7NRC{RdUbAcSoTkLd6A$ez)cnVC% z(_l&Q;;c`EWZ{ZSBv>Hzy(P61y4FrWXE8XT>M|YP2<$?$!4YPML%Ca+SPlm8B11{> z(-X~miUhiQ45x;f3Dgqcl=Lf)3>HrzyVcGLOYoCDTbN9Mu%s3V!b>6$Dy>|I5))Am z#F>C$!)dx)mVTn@0d57BO_Nz-4UmduHspNV0adx+CKXK}x_X-8;pSS3G_oSUlYlpC zMn~j|cX>;mRjqY=z9PWzXXaT-7(h~A_s6MY`E?69K}NdFt1cxRe&VtV-jM}s4B#_0A; zNWBNQGZGe!7H8pdVX$H}`t^cJNi$^WiW@`{O)Lm3Ne=x86{3_TED_DY5-}lR$>J_7 zNo6Ra@alZU7#D#%d#-M=R0osFoSCa<1se;yh%doW6P`3^LyXv^V`8CrLX|GFZd2Wb z(;%DxU~>s4TGzoWi+09C&dtxYb|xO z%8QQe&Cw}aj0X`P%S4FMmcUDiMei@x4;5RGMRa|{w;*2T9J-4|N&6}*<190h#isl7 zG}=@V3K~U4%QU*r(E$6*gpIJJ+E9t15nEW7)@KlmWe_M5e1DKYH)ueo?!DT4`#C_T zHj+T6T+fVPW#J;=7IbVeo~R!_No$xPdziWC%Vi}ed@1* ziEgu(lckQBQj{b~C6cCkE?1YmE}+{(h7wemD9jQ=H9QPU(n2hhN0pK;ZqXd2JEWI! zqL+Qr%lo?JfNiPJlC=#~lNVI|7uEUsom79Q3j#3h+a*r&PgBH?@w?n<1bAtO5nv+X z4kN%zJB$DZO}p23Z=wUp#RXS0V3WPZ@Cmh=J#2tOi<$zYMaU&UH%$TlxKt_@3etb# zrlHq|e*)DR$#D0ycR$t)$};p&b?=^bLoJ6}4^^(wcMK3pU>PEZg}bL!Occd?CO$mj@v8&}Z(qeb+)NY2`NX%=15VTxE})0FDEETZ zO#@fi07ZQmnZ(5cx75Jh)2r_1GrU~U`ew{BuQoS%v+~V~TYQ*qZdUozzUh0u6E}Ro zS1k*m(Hu`&Z-$@uzhkmLxev^lj8%)sayCFquGIY+)R%8FsIQETeBe(!CjqDg;IY^b z|60rjG{%A&BTJ<^msH~@mdS?3;p(+qcz~IjX^dSp#uDFzHjmjJx(#zp7vD}AV|P*{ z%NUBEQyBNEfyC>Eb}_WjAky0~)oTA<$zHiwhw2TnQ56nZ0prCQa-6%u;1%etq4&$h(S0_RdBhDK6%7`#kLo^v%^%0TTE``$J`k%y7z z=c0KSJBz8LJdBu~XG;uCdij~^h*S}QZ7L?A@XY67bQ>doOk$T#?>6)-QqJ-)Fb&DG!5m zwcU9bOXguL%@RW+55p`-Q0EXK8;B9~ff99rAJA}$!aSu{3tWj#gLxR2safhe;n|dj zfn_$2Q|l&rucBv>n7J#%=c1UULxlHs=V4^bqHaWT1AsTV9QIjkpW5Y3cp7Su=aCVd|o(0{i zO&-SH{3hjLuu>dTfQRWaThpb)(6#wIjD5+|lw@2;GS&$Eg>wBpd46&$?#b^h(hFEg zHy0LE%z@cghj9UFdd6wE71=u?Hkgs!3{p;LDy0;tE~klLpsz1XdZkprPb%>MLU0>t z3N~tvfBpm|5$YjOUrvubTm4C7W)Kj$`w^Xsy^c~Qpa8?K>v0OL-GP+bumxIUIJ{X!qx#kAA1QPPhu|tA541*^k#br@J{R{5bxYhAJSd| zKI>irMF_ppy##vAUIM+jy##oE+g<{tdkOR|VJ`t*Z1)m~5zqDuU>zJfH-4C21g-bn zOMutYUIN`3+;{hfr&z|S*M@=uY4?Z4cc+Rt$ zRuT_To0LcNBqc>isJetY^&5zcum~QJ(q%;;R0TGHPxV8tr+vgf@A1zE{qqEW#_t`D z9x2)dczw7LQ>1!JKqkH+YTzPBeGv)ewIC5c$CcGeBKi(xl?3xpUy3j;R9LE<@&!xn z1pQ@CV|t4q3LTq&OW*O*!9qYA|}J zU`KIAPX{~7Qnq?c{4$U{`kjhU6>0GJ(lo+#w&3^e8{^-0+AyFB(?>al_&tC=R z-RIu71FrI-zrcMvjLe3Az<^L*M8}d%`m*CgvNI$I^fkBac%bX3*_ot&`nx~=rMJBI zw?6i<%@I#`>hi_K^MU!B z_ob6392uX!n^8lSuSA)T} z5j#l-B#397(fhxy9A??X9cuN_za1h4>m}Nth6^Zh|kusFeg6>pyT{Jfacd@ zW-Cqkb*y}xyH23LSx;WwejSI{tZpH&{VjbrchS|2;sR@rti*PEg0%d+j84~8h?eq{ zO`RiMAk>1W=931+1?0YL_T1Q_uRh@F`ry2O^DK97zoElEk=$6mvwp@iL>Om-JK4D? z-QHizfVaJIAkNnAtUtHs8*PKLCftmu{^T#hl|Bh$`WIR3Y-@CX^Wh88XdTP{=?h(| z3oyT(j`9=(#tvXgASoD32`49E4K4%Yj=O;4!E)NqTU}>P#=Hu2OBt3uhh()fLW-T6 z_|@#j9irs{_A+QcN1g>)CxHP-8W&G3=Nd(izTiHT!>FY;NlQBrEarJK!GsL!hkq#P zI%U#zu%-2B+d|qM$zMsok?V2Nus$&;Cs8D(&x`~&X$x^O5Zx6x*TzraL{vW&2RbtA zBx7UUSbm!#orwvNtwC*0tj+Bp5rgA! z(=v7j%#ks-PFDiA2$`N_oLqUebp=c5;wXownRs_B3xFICNSw^Dyl@p2p2R&t!lr_C z;ds{lv%$6M4AN<(ci1-X4lKWMvKk5==Na# zo$3mew>)gu>Mzi6{dxX)bMs~X-Jl2rwF-~a|IT}#^WMm+^)TnNM{0n;>G)6CdFycQ z_+zZZtqZnWXY-^{P`OowqP#>Y{Z@6NZyP_ii@Gb2BD8vsWBq7*QukDtwA2mkIh&*I z$!_X?K|Iq?_pUeE1{><0)Unl=4Y!w?&jc-3&~iB=|1ScW&^mpHjc%px8M%o|{-d>q z!nNvwAwgnkomz01*i!qVfHAj|1LW?WW-bf%)Kt%)L(%R56rpWs2WOo}J8{+YAosEi zUb2AAK@TAJ4s+8{la3N4Af!4Rx6r(xl0S9Zg9=g<^$Ma@T`#Eu^9HqW$*hvz*i@cp z$k64$kDE1Ud#uStVNK7WRMK=JP0%FojS^w~fnm*itLX*9ZF@o02o&LrT@PqDLgSCj9=LSf^5Xj>J9tVuPH;46QMi!;q zp9}3-YA!AVz(9LUs_kg6(*P5P@J2#;=6W9!jYz-IjSp9x?^W=mJS#_KMwU22`-5A; zr(tPIGc{8tM-rQ?dA^EcZ=%&26&pcUW zP~OaZ!Li}Zcs&zuRvk%6n3*@T*cg(RH~VNHY`5jj;SV}a*DM*GTtcA|5S-`Xgr%Cu ztj-PI99vZ|!<~t^3eVIM4-XNX8mf%GK-IeN#_#OW=k7I#nqHW*RbPhfU6!eg-;OUg z-IH^73}RK&eJ|;NwJf=)_MJX?KAjN2-FN!f`ET$JzZTAaV<$e$5`0*KxD2O9GRW!u z*N4;dH*tD8$a4%vJ`+ky}CVXun2}o%H0`MW^HyR)q1c5)yM8cm2fLcWW zaTKUyuf%hw9t&cgz^wj7%r{)>S%R)et7b78P`Oxd|J?mU!D{=rB7*MSyOQ7xveh+a zb~4G|rs8Xjkn@&;S8BNpgs0i)?6nz`yz8&A)w{Y-o0~khC?i>3|wg7vszTuPJ6 z@J&_=H*|DZ#@ZRIpA^DhK7T`J8AQeU z#k1LZbTK@mF{0`}HJtr^bT|TGcnMf^#y{QODdwIk#yoWgF@jbntdl3MP<5!^@KdPP z;fX`(2RqR?Bm&ioj_ZUZ4O%x=PBhfc6*V(MQgkE&q_gOMik#yW<$)Mq?sCu0wB78@ zb+c#Jes{>)pwQpV^Ts_@cVQ-gjmqyYht5iRc}-_o3j>)p{ug=bDOB<`^y?w^rj+zb z-A4dX_k>oJuJBYyyTo-zgzkMUnNcWMGDDumW*m%992A7dV_8D|OKg!r>S_Ir2oz*p zNjdR4>Y|i2%b!kj;SGmg-1!EMeEMWfWQYHN=|o>9)<^RX*hJMxaC@~^lwBQkntjDL z%A`xc$S-J{zTeQn5kQUg;v2!?9{pB4%Y9~bx=BH#Xdau z`yZNrpN|`brZ=%S0Q|KMn{oUBrt+H3O-aAy*XepBY5IUg(zxi|AbPi#U8GAR=eG95opspGyd0My+Vs;#!sd$ z>+bUXq1|h>h{TngYZwGK(+f+)2nWXpN*qQMKc=BJ~H={#-Q^Zco|4je5Kx$w8 z3EX-vDja>XNa6bAkmkYTMohmyqR0=zlmp3;c^L7U;X0oppc~@WCHEvW;%0z)AiI1K z0?}$Ao0zhQd|W1tC)*gN#D%DnO?=@4dKT&AX=?p94wX6Uwc-uClP*0t!Q;FUmo~r# zSTd{xrBL{719c{Zm_gnT)q+56Q9tr8;jevM7mm4W#J(cq11{I@`SX!ZYnu1#C!Y9t z=jteL1;(@Y=SMg{7WsF|b6r5a`XdU5+Q?$BW>vlwp0To-YjF3+$VmYWQ2#k>!m{7r zc@+wdEUtz$z<92kDZpXbbYsm`5&?grp7N3iek|Sv*Lzs~Wk(Y!SSxC(q=?eroL|R6$z1)z&z^Vv1~L zy#%*qWL;*9e)DvaapsL>B~94kNAJUJ~9{Ph=$`lArz z5ph%)lhB%ev0#*su;ACjI+bMQ=&nEqPKyaBc>UuUMIaB2QESkKDRPn#od?NO6ca+Y z%(svyDYr15D4~5Bu(nh}+BS2vE*94xEY8$R<6nuyok9I%bEYV=mrPn+D4C;!=uiy} z28pgG94OD!4}Y=qVzB@WD0AynqdrzXQzWJLV=%5sS-Vq+mp@gErfGH$|7AIMS9z?++S|ifJHR)%G zIm>^NsF6+z!1dqLb=SoPH9%$B8)F@IVD|DHLy4`_#QC9SW%e=Sib%O6(bW6Zo@A)S z_$T06z51D0S^nN{pn!O3^^*<+YrC$zi31b#QV!I_eN{CmXS<)2x9^qO?%op4)Ud6;8<=Pmx^r8j%ax7@byK~8+_yhk=Z zj%3Hr?#wld7ibAkNSm2Nnb&O2v9v9 zQ<`>(VMcpk6&s_G`b5o5o`6O!_zKMv%>(gXDk*veCIsgh)E8)MkqIF6VF~!-`IoGg znn9P#EkA}6lRgJK?}*z92b#)WGSL15UsKT zlq(jbvDKu17Ap7eavzPg@fTT5 zz*`t(^nhP%0qUz8)Ad(Dul!<^rVm51i{tO^%la&;>DFF25D6x? zlVcY=cG=-NW=$3A3pWEwRDcjlX*TBJv>1S)#?{_%T6CMy7{{=JeP}1E=!^(H1*vP~*z1Ju^J5((;jlR&{YNm7f}lxH zQIS9tR~;}T6e@@{Si(BRMQ}JGbZSbg%i~?1)$Cu(@7{D@#Fa3iya5@obMI}0YJ(tx zmPj``sf&swr1TraBq_u%&xm+K8n*Zhv@0l4JsQ$Q&vWuu;Uj)}nUC;)h~yu|PJ^Pq zO#Uw2?{GI+AWQOe!|;1OU2;Jltb?~jLaUC0!U4%}#IY|#nm4w^<69%3%Qn1Xq+FIC zN5N_i$K`6Y1acU7cJ6gUa7S$|?ei6|s@(5@Cq<)%e~l(A+nihh+DZiMRG+riU4?j6 z@nr$A-vo24m9)Q+U8Ohq1hXjf;#X{)k!L2zMgq4JLFh?;sAHy&PY-(I=yV^hjXUdj zyPB>a@#5w*s@<%!SggG_p7xKxaG+-?gq0>iCyR6-ZMfRGg&x4z#$aD-A?QbCeK9iW zfE_%LXdKs*l48Y0l9p3X6GJE2I^HoLemE?%Q#uC=eQ}U~asaQvwKcG#|1!mp=xG-c zda~&<=mWgdJ}A_^;9=u-`7sklAPxC=waC0hiJVxs)u1MOvidC@Q^P51HWU=p84xvB zLBpk#vFz6v*vkZ@ag8mT}2_|$wdo8N6y2n>f?!f2=>k!Z{`f^@xgTV5N8nk1L^Es=@-K> z!ZZx(`?%{8JoK{hXHeRDr@#mpa#P!epGU=x%$YX1i?;}q02#WK@k5cwk>Kg~|9*Od?FOZMAa=Q;B0i}v^}7$^MN;+&pN zi}4TiiRBIIca|ZDx{Y|`g{%1%%CO&KS`h#kxr6%Q^33?lyrH)_z|;U}7ihqPB0v%5 zZS>?Z8f*2?M@s?cq$Xy>Pi9qZS5;~S0C7d_Rxv=9FZ(Rec}3o2k(+&V$uM=@Bm`>f zDibC}2m&Ch7I$(RU<3GB5CjjP`J3{m1qLe8P)g%6VqQNtzYy`1rA9)4Op|4<(E<5$ z_z#hMA@lRK0sXn2i#hwIGTaFnfGH zq*dO#ljO6Ra5)ji&MMQl3Xe_}?O|<0`iEE=!iH~prAjvW8P&Ad6{<*f0IQz)S1M4g#{WTLupqWP@a?M_R2ry<`9DbD~ zOH+N)EW^hi$F&Yia}61{)#a8fg+k z%aZs}pc)bq7=>))cwUJk>Cy$o1biZS+4+8m9e9GAv_ql@hvg~ykPL%OrNK-LGp@&FnyEVkZPhqpy#o83=&1-ka-kD-A#q4lt4SlYDl#3!kchgFjFoSr zoqG|9=vJse+fCgHcncf+Funyo=V<+tmqmMumId9*R#@=|(@{6njjxj#8$lka0Cr&> z5c4@)H4-4n{z{3Ua27!zm06CV;g}Zu^R<;g{1g>nM$m;mrJlo#J>!viMB*}EPk9Eo z6~;-IdOGfFCtg>6A^oPt?seto@^$P=-urAi3!?b6zq$4aj`asoVtQH5IAc!bC(w{e zMmA-v$GB3mEH5k{eqrwtIjQ1mEaLMQU{tR7k4LcB(3w%l#-9%LO6PZl2Gz26FC4`h zt%A!-Zp0^K;!#CY{HJ%}UpCUfI1Mzg)2;Omm0Ci!fTB_3qW-2*JYv=0T7cVgr(V4 zXJXrDgJ~~8G_+j`UJA3xQZn#NOipluEx_oj%;=Mi*_&tVL=bcb``lZ81?SSIrKoV=ewv>L;foh%UDXPMWDcHeehL4sxcLzJwha3q&_$mf^}l9 z&E2feF~3|RVHsV-jI<37sEh0McycHtEU`x9O!p274@IKDDT$l7IXGHcARMl;pHfxWyaLGxlLJ!x-8Rxp4! zzDOiJzZx==x55Gyc`DTO(s%`B5pUsn!V&N-kVQWpw69eyX%y6K=4aYq2OCQ@)6gk; z>mp|sM`zimPGr#ijJ~LSU@?mGKKcdQ@GKlp7f0IxF#sLm<`L?=oQY}_~t$NdqgOr zd(?uWd&(t&6yTY7Qgv?*2oYqL(CVc)y*VufVp`MMW3meCCDm@UplUU$Uohh+NHnA* zJu-ePlS+fMF{}@Y!Y$RwXX{fva zrwN5%F)*z0Mer$|3!%ekX3#xwj<-3$^g@XiQOO*`!7$$PCWuB(G}wjg5GmpL{9q`e zfJDj=VFPDCuv(WT_g=|E3y5KEin!jw<`^y$yon|p$+jkpNYDvzE}kH%GjLK`q|3OO zL-LAf3^moP2wZg6re0EfFAr(NBaX`5>!PV}2!TL|k?ZL8IB@ry2<+G+-bX--c)8FVnmD z@^W<$J`zlUPRh1B_{$JUooRfrL0_pI@W*#!^nBt~e6FYt$7w-Pmi)cYn2o_8x0X4) z>(A6%RiRmEJmvzC>W8GNk4Q(C^7JF^(-3|Ao|Yn+kaU(Pk`9v6XKcXn_qQTK$$qwC z^M0n~ayYfVxdZe-M5q&yQfvygr2noEWI^b!TG7orsz2qoLJE9=U-j|&;jeJvzGyfNogcD^caO!$xR#u%~F zXM`U{CFvY~2rkU&=;-g~@WX`PClvVPhryeJ#s_6uz(9|pPK5gRNKbKn@B<3n&jhn& zSV^PrxTWT;kp-Dz6hvn*Jky1ULws)TLb!ZBJ$Jzc!UlQUSE4gdwHJWq69pd&s5)UV z3D+WV{uoMTy7L~Dm@suPbRAtJ-$-vdtH^Eb+k6t{j*Q*tgJXlKGo zR~(=YOG;Sj)+u2n=zX*+xq{&Jp2-zF`N1+<>(hlJBowCPiUpD@M)Gfb*a(#1^a|5IXVP@*^8^9hzu6Rz4lQ)AF27ax$vN1t{u4N5qFX>vnQKfL$Bqr?b$TkJa-KKx6LxGVG|Ma~Su8%E_`t^O#cRg%& zx)@y3!9TkHY=n^MhAXXekBAS#!SS6=m(HkgC(bvF1zzkLtL90+Hsq2dnM71CxM5_m zXAx)|Gb~LoVlyJ(G}DsR<%#$%b;Q(p@1=s3don_{^J4gK+oWHOWIXi0OOVWU9 zBJd6O1@xe^4i^q+xIzlxubA(Ow+3fJK8eq_eF*g?Y%Un+t{xx=movesK1*<&$wrG2 zYr=m`Q~*YS8T%+;fo{_5j#7WR*kYb}s!v?jpRfbgKcdwMutI><i zFFl1juO`_E5Z=WKbJ4$krUA=4OR~*EWAm$l_vqZT5FALn|Lnj2wGPMJ@oTs0BWdFL z_3`vOcjTE2pl8|*PFL#X`8oEay8L#A6pZvYm6ZMQRqPX!XXz3FkUI(n0)!Zin+*hA zlHhZ$pyr1~G=XzWJI-}E!~s771xn=UUveRsvxpJ= zsQND~AouU(Q*#6_VEGdCz65}wcT7z-HBR)t6jtXV5tE>JQgnjipgaTqQqi#IEb)11ZGbT z!2|+Huw%kW9IP*cqM^xvONSTAzb!D!m-+6?G4BE{nB~HSL&HfqnS+b4fDO)|0-wuV zkT8CN3dR@%88Va6`9B{YTugj00dYGcY}p@Ew+$-8YCS=vTYmu|x?sXJBO>9NDFM&; z%^29u?p&L2jiCcW0ryP0X1nD!>3Z%48ge9FV@7Gib+tcV!2#KO6UdLZh-g_(yr$5W ziPuM!$vU^^GOu47*XY<>>b258B)-nNZe-D_Tf`dKW7LX8f#rX9-3WTzE_x$j?+V>6 z>bLX8(;?kjCE(R0)0!r{AcI4A1~#->>@%cTCM~v`+GPM)P&QNqloH^88=R$o6yO=RWbn6tBA@0jzwdw{%_&N zBn_*qblrrrZitQ#KNZq=9-MN>Q^z!J4E0y+4q_lOGj@|#=%k>k3SfhK&q83khlBw_ zo9&Q}^POvFL%KHO1+bOnuzNPsH8f2gW0ByL97$Xygd1TCZ2POrYaLAN@i4?w+6=}w za@Gx9PxM1_-__;1k4Hpmh-W!Ht}Djee}UFUrUKDL%}o>$4pm*C6ccJ%8c#hZj{@j` zwk}35#Uxp^geR&7C!a7cDd{L6h^s6@6?_z?G^oFnbhs?gxq#^B9+eak5BlY>W*ZI| zSa$$n0{`Sdw9PN^-$2GWAjZd=s%fBzzfk8GC3=AQL)Z;bs+-ofyvBduktIiOreXAU zXc%E~<<9VV5aywB%eF1h+9U13lPMdy)c|zMB;bxEd#DVe;>9aag{2;9jii(#YYE!2;9 zRd^26uRlA9FuQl)*0%fE=pV~e9Wgxxx1Q+SNZn&~0?xTJcQv|lE(*>IMA%G58iz%D zjmF;2;LCVwZUSjIxTr)V`-6JEO{Pjz^FBC*s|?P0>}m+%!Oq-c5eGK0akxj26AVo2 zN4R3H=n0d3_zNeq;lHKwR0uY$1aW9yuyIl`*&51nCr*!=s7L}8xH)L09$r)tMotQM z3cNy|zyZL1$=o}M9}q|wWMclA%Ct)9{VZ&vXfH zD+@e213()z57q=m1Zx6~GhgaWNSQJuZa5VJ$w70qBN}S+NhKU+80@gLa;~XrYHV^_ z>*eS1CWNQ2rsYTAw{I;5QCNl$F*Hn(@m;J+Uv*+unq1Ffx8i2eUYNIABR?$cR;leK z>@=y6Tt`s$SosRlxjEdLcw)AKQjzPh!_Yb!D@Y0^gjwNsfO=ZDgG-gxU7wFpEB9m` zc&xRj>cN~%mkoRtb>z0fru%J_a+H0SMdDUFQ~&PlT$^s_2Xrf59ub39ai4MGy|m?| z2r^dmWvyvZBVYsfNVZhtHG5a1ZzLRqCr^h!Ielk&0xajw7cO8Q~D)3H4l?to}I&t5=^vnw>8^uK}|WFJ)3=e)(rlhGxY_| zTl1Nh1a-`yUZ)RnGZ{0X$|K~K^Z9qZ<-cKVB_uS5XrG1k#~>_ zd3dSH3OyQMp3#P$yC?<*!lNw-f`y?*FT_Oh8#Q{7hO-*2ydlp=6`D{?R-xOAs0v-G z%7qFY-;aF85|=hS9?r>*W4j@W_{;0N6j3k=M>XUFF)agmiZ8eQ9-OKFw^+k$j$W)w za1M9l=BP58C1|K6q!zw79-5xa$Y{4?B0NjzDWhb8EA}p8g7Xl-!ue!>pPvz~h{3K; zl=VzdR?>4rf!f0s7o5(m@c|Od>D)7v)mPDql~seZvWm;Btg>iw^ACN0-<(|!7t5!t zIZ4+ELh>V2)PTO9F)_I}M-;Bri_gz^87=*r8Byp3tbdzxh}l(FB3C~cT>egDvd2f0 z(8tBvVKtNuZ-QbRDuaM64@^s)GdIl+(+0VNn-ZVM+!Rwhgh?U|xbW4xZcfiqCf;yX6)V8?LA%v_tQqwgn8{Y zia~Un?227@kF%}8d;I+24_;T#rJVWRV4AtRTZ-S|>yExQ3?i@Xd$w_=b$x&NLZDe)9lxdoS&t?*oRBYzgR>i*4o z2ayv62^I`1>ThLVOyWM=Y^(kk3(fz!&5wLke>1mR^O4rBF^`V;B|o3RkI6D`e{U=H zA2J9|wBxc4K8XW;N^PDQ(aRG7C4R@_sI zb?R?(Ymqq+((NOp4$K~T-#vdTp4rzvLnCZ_;uG$n1Yk$)pA2D*T7g8#HA47+h7UM!Wk>%!-W#iOR|VC`xYE(0t(2h`s{{76b&p_ zvkZ9zcw-cxJ(9k0u7@vXc2W`7To0d0mcj>vfnQ`je0310?uU&hX2prb zmCox2i-=Jo>WfIL`rLjN()L|Qiw|lMA5=sb$!ZEGz-4hdamf}TuQhH{F?xE$r9fuI zPuT??TVs50pCAEtmTQ4{l=R7cvxKTVAKYFh9s(~e=n-ctxu`;xw` zF&cYxp$)qxFp5b?)#0X7MP`q#!AdEHaXAC8a~PI^iD-UT@8%=G37qu}RBjGilLJC6 znIaW>)0ydhi8HqEA~QpnZ%r(#P>`I#30V>4DLBOvyLzpI7w?#^QfOH-$bwXz&in>? z(=u&hPxFj6JSS$e%4Rif_u8sYp9Ky;7L=zAyIkAvrZ|X%BoGV-%zq;uO9@<~Efk2+ z)_3wo0#uq^hQrrZ-QS8O{ zmkVfdUZ*41bg+h4KVU0=SjU;%*FO(`Csy~mL0twRQNa>$;`uy?oHfX#2U7r@m-E%7adZ|8+r zuGi{ySY6aG5;LZv1q4CXAIqn11F4sqKQ=#*RV5t)4h=&!!(0ag-p{z6eS+gb6rk>} zlc5Cm7A1dlRUHpmO|dFG2y^kL0CxHtboS5WiUoC*5M+$l$eY}=Li@{%3F87 z{oMJxFI?QZ<1YB9yKJvddJ+fNC}P%2p>?<#L-y;!=ok!_cf1ZB2UZe-1M8`{pSa1W z_emZ>1^X|D%?F_zxYao3!?zKu0F2j0sJDk&!GOpI)T zxv$sTo&2T;-7i(P3?uF)v;2X(76&~!5UlG!u$ubd_FIj{Jm@3aKafzw)3kn;0^SEs z72iHVejebR@*Q`H4*hylTqa-xFNIHP(2)V7GTKkx1L0l{=F_n;_V6w6JXt8sGX*mx ztZ6{lujdYNaVhqYi+ zx|7MkE4E~XkL#FgJ-045RYv0zJ%Sg>1tWTZBgq2LlOLt<#l7SWn+{JWAdKiMs#D}E zrFW49gsdnrV~u@+T|USL!QQ`)!vo}$xGW|v)Opy%u}?&XK^~)7*A1>1?ju>Ps!^2} ztA?!1vcuJ54Z4tV_2jSOIQmS{JpOBKB(M3fnJd@x#LG`NU-I|kkF+URkCxP9s$GvQ zizup-6@wES$%KEb1YJ2k!BIBoBNz-foF2bpz@2yl0hf|Q6`YnN6UDO_R5~PUf4th?p3~nV5X(h*-~b% zxjS1^xHC}Me3tRyJEP##5B+%Ad*L1BTcbS61vGBTqdZF;lyBNz2L+H{whl@?{U*tu zS>GH@oS_q^n@4}0idC7`w^SdarfSwkITm$Fc(&#hm}v7z_uLT!3nwNo5a5^lS6A;f zEX7#FLdZU`5KYq+3M({*Hx2cl1I0F47Zy_^D)vkOU|v)lSY@+HX5$%w7qJ)KziMif zfghU`GZ{9hcPl*2synnySj*74-i4DLX*q1(N{Gyhe$n}7wTs~%j2U{y#PlS%3<>pe@tF2r1lsj7eR9X znKRZ{5owPuF<~8fCUIu;h^gNUCpSO#5i%BDuC!GtXKDqvlNWR5+aNruxgn9r@?u(; zS4{K~nIO{P|7{@oIx1lUur(ZZi%j65*tZxeT4F?w+TMZ^EsCfg^kvy#X(z4D=%Ttgh3fA zLyY7y%{%t~@|p%E3s*oqHR{+a3Fs-%F9Ib8z}`o3F4Ue4l?3zxDg};CT$5!XILyGA zLRXz^(+DJum1h0M;#v;q&&NHOIgqmBZYSoB>$gX$kPid#%SC&F?2e|y%nBUy93}dg zkBt92^yQZ%OK+~^29%UfauEQM7i}=!^oYNW^?hCJZXL;UV*lCh476K zW`>v#!!j5J8*CeQ9&^ShSZpvu6H0V69|b?Or`piUE?FlQfeT;AQDGM5w_2m^72G0j zxU2b9a-PGA<2SFcf<|aU1{a zM^O%TDOw-5b3~FOXMt)BT8aVT@a{^%2{&E5fg@ihQsa}ClG^K^6R9zf=T2&Jw07N? zZh69{a-em14i#xG6+ig7E0$knKX%p2QD|copA#utxi~JChlXARGg2>76M`!p?H$pV zqp&a{sa!JaXNVT#^cn<|0n}CGw+)+L%A`o5glZ4LTkc=vE%NA~HEE8e5EnSg_gOs% zp;0id<=HVGB0vumDTpQlj23#qLgG_15`+(k*Q!nUdCg*W(IQw!fxdNtx#GdmTiXZ@-=6=0|7BMEkXoe;GH?0M&g z*`1TKJ1hm{`%&}M+EjeMt9go$oUzM!N(I>bu2NlfZF<$5UicYi6Di?AImsK8U@dRp zD&td48NotAc?APk+p;m>?!7HWMoAeaGs?%PI*G1w1PKe=k)6HFZ6saUdN1w4Fj%VZ z+1)BZFLSF&&nPPMvg&?*y9j8~;dD53ozvhfEO&cGWnvE_Q2=biWQ+2JNknzH6O)Bv z7j?L4$l0RypJb?un30&yK*w+50BYXMA=vi}o?H++O;u@;X-_7xpm*&71Nnn$MTaa$ zw~1vS*6_3D+axW6P&#Vp>P_`p+#+=^mWTZJym6#DIaw8>R#`@!U5Zs9u~1qcEeu-6 z^|p^t@zW0s{g(IxF6=p4-6SpsF6^<&S>mGRbjVHs2W34fTsb}xu(qs=)AYD!97B0R zdAG=myvTd8?44t$U_Ifp%-x4QvM1j~j?F#H6k2U~-=9L68XqpO|7&MUd9Y{vb^>C- zfhhV@J7YX8;jabnna$X^6;Z;aNZk-!rm5LB14h&HGU^}7ntpgnlCXyJkdzk7BUe!q zp3-N>I#AXB8DFx37XEs4NaRWhumaF5rnT%c6soaL4H{8k+_1n4kj*kh$3l+_GsZIx z>~P*&WEcl_=(Lz!P}6qOx(m(@yyqm%<5n5N$^b~sV8<=C@RNebU<*-(u;u_0wa>*C zex0QMx%IHu{1z^BnrJOIXb>_&vq;A zomgpah_|#peNF4LeNnP}!7Ew?CG1U;GSV7I%gOT*CD1D?kaeH9j3M|2yeT3nHkwx3 z8^UPQT8np>AlV&()v$vupx~tfc|a_I_kb2&*hf`_1EEub_`#9zT&Ocr!YSbfvkon5 zWzn?7bhUxdv+!%Dqa$40t=x#BgP~uf>{!q%XR>2Ka;R+LEo3G_IhpL?h^nZXrEP}Y zth6~3oP=c2y)Y8uI;KzTovA68Dc9O&W(p+g`e>n%IBa5LynL*EIm@*&jKgpY%e7*t zbYs%hVYyc7W6FE3hEgXlh@u1niG>!E5d&md_P*(EE4HrkA!v(yRuliZPC7Z)WxJDu zutL(J(VukQ@Y-tBEx{xkDX0mzBIMN&>x2Bk?FqYz=hy1pt{~jY>{7AS25=HVv#0BW zIW&qWAszR{d+51CKC=s$4N_;3yNv>TIvf$&+;U|vJ@bTRi=o-CWXLp?iWNs|cBLi8 z4${}FQ>OAum4aKYQ^DraYvo`9UE(2>6vjcNKMy8k@2y`@U+u8?Gpw)Rmu0@Lu*?@@ zDbi=guRco_X#suG;;j7IM-<26tSj)2EY5nc{kqwzu8^Z<7?GE_$e69a>dtI~Fn%aU zX4;x)!+6`Ft~zeLMB-MCdwEuUwX{Dqb_$26zPeXKlj^ISW86EB%0rO}&leD{B?3Y< z3x#2M^cXyX!(sXKUM%6L#>#~wJc#&I#kYy&XyO<;Z@c7&N9uG9?Wy;+*|Q-qFQI><@qT=<(A9i6g{OhqYOCaO+;p}k~KHkAdv^&57G8S~Z z0+%^)7hol<=-`Eb>8V-TkNJEub-Yz)J`>BS50SiX9b}NgC zG+R-HC*xk1wvR{@KtnFDIvHMS-FJKdAni1M!Sh&CnFc;QYYjexdeqho7EB;G2P@9T z`dzRDWSS0*LoJIF8qGr^4g_2@E#M}dh;UZu99Ir^b0;Fr?24Ve!ERKQ#OKRj6n%1= zX7;!)O?{z!HjrEi9Z!R1Gk2%lUAzz1vyu5|Z2Z3tVh2Tg7j6Mq1f2v!RHAUMnTNz+ z2qT@ISc8%dKb&;KFV^XIym1}ORb282>~0Mz;ecuhOvo5eW`dnaXhrpTq+siz2(RRQ zbW4VU*uyUxoD1@%2@Rew;#-3r-6jnBhz3A3rq~CMvzi~!2BrD+M$upD%?1FOrdG1& zjz-p`5gM-`lJOrhOEzHoh#u56r)*v)3P+9Faai|+#+kTuT_8b)Zs%}NqFx@r=#^ka z%_0U1r$N@V7c8k2Az3a>9%F%tDN_yeusQpQO@w$KFwDD8p^;VuSEgI=g0y*o7vKQ2RpBoWVNwJHaJ~E4)K6sH(;;%q;It!YoJ$syruTj7v zIg-RqkCXIgN-`J(GDD^;+DdH{CLnVPCxw^8&cG>=zab->68vVV6`T-98_MY_%4w^& zqEBWOP{`W=5eKR*w-kv#En&1OC2az#P*SwKjGi4cP=@;PKKX~-CIW?%OB@%9@>YsQ z0UW&;v}f5H+!vO^p^}`Vm>Hg{x!4GEmzp^a^avzay_d8vbX)?BI1i9H>u@xlG@!jI z-<5QElDzAlH?`P=Wy+dmfgR2XnG~HO41~KlrvvRDbF+X>I#vh zm6H*7=E5fRDbXf#2_pV|SShB1@rZTMMna3AG$xP?mb3`D+gCpD= z$^?q@t}sY1V(twfdI&;-1HPc*jExgDJRH@~#(bN!WW#QQKvQx|DBos|$!j>&x*X%a zRl4r^33E(dnHO%z!wH%m;4-%^B>qT#Q-g72j>%qrQ}IzMr?N0*%L6@4pT<9fWbpdPKS9hQO^_g9#o^8VctrIdGACwA2i^DfG(s1 zri%$E&WQ{UaM#-UM{>C$HC5bn6#w^)#R(qW9id$a4#qG{5oxB#KyNtS7&vQ&er>e4 zlSW_4W&Ca#gC2w*7Fh6ABQ3E{E(iAU~+5EnNQXvr6a?yY%+BR0nu^HngB2U8reP3kzS5t9ia)r z%HvlUQsf@4L1ysy-L64jm&a#Sn&9==r}FEyGhB_5j2wgcW39F~P`W9RbSTusa42X~ zb$Y6qyrrz$bUa?rT8o@Y)ThM;V)3!POo857{Ma{OUR8|$pcUt>9)LpxBPm@WT72c? zFy>$qV&p>3xdrteAVgD54zCm4ogCIMJRH94<~*rk%{Md;aLDo-SGGw{ZpqX_j;^-? zl0fd+$sBm-XSZSVaKDw2t6v)q=(kIq9@mMjC7?n?;sjXfgf1deMI3t%38jm&P28%- z-^N;vZc4w-9dgVT>0Rv941jbg66zVI$YE4$ z(=*U@F}INS%WYcQ1u|Ljps2v2!gSWp)1CFxHjU~MO@D1FjJqAoXyD(gFwo8Ol9jVK z?VpDV!!F+cA5dW!#lKf!o~H`KnwUSM3R543wOFZFd8kr(w|oQD>75=q*DO|dyq{yI zJBC>VJv`;T`eh`W=QE%8nA!24Z7=C4^z}zM@(UZv$k>x5>?|#-p;{z`%~3zJfYHNJ zUH9>$7+|@v&MbE`jWXSIi>4SXG6TTDJ@HNbHr_47yY(I0G@jIPjP4yud7PRJs%8X8 zKWzW-{k(O?!&QlbgHLO-lifgzucCpl3hGLn0B7jubfT1fA?H~}aQY(8_j3NJxX;3} zE1M_t=QRkd0jK0Cycq3fa84@PsZ0YjAPj<;;KgAT7^TA>y zj%@XVQrYfq_+q{tLX3K+k-P)Li$F2j1^z$ui>9!1u+&cqc#sSX3cn7q|Ye`{KAbbQf(Qn;$41IGO^ zVBF&`g3AZ#Xd>a1&hQ})xaaDr2-|lQYVR1B{VB_6IN*xnYDCZ(y`SZ3!D<_g(5Q5! zvPHzj_z9Tzp@MygC}ef;HZZ6j+|I37N^_Z8c!NK=COJpH z3Kht2u&cv%!zF*OWu+iH$wIN{6{E8=p$0mZ76&XG$7#DeM+_o*e}HDQ_Xnc);~l*p z+xvsha;xk8M%(|k_q?&eqB#els|`~s_0$-_s@cd>9gMi9zrpb>>#1C>H+`E4J<|H} zU(kADBPny{dW{V?WJ-}`w1Vr^t(wC3N;A%|{)zFOxW4o!Ms^W8qfWxi(l#y>`Cx>E zahA=LohI|ahR~J8EP7aOFb8^7JHYY~};L)xu zoZ2&KYj~?5>9-oNl3e+HzBjdgqSgJNgtb6#?(9zMNIYTI*dWnF{QewRsL<*uML<(ANP0f~e(Z~JmWf{@eayl3G7ieGN}=8|-A;f(h?ZhjJh9U87S!&M<|e#}phQ z!+{J`N`37^77+p5@9**CntH&*tYnN(=ENLL-1WPQgtKg-06b*eUSjTg%?aHHLx$g5 za%4GEx5&pppG8+#rYiq6dPP}6Sup>)>hc%a`Ou2VpRN_1^niq8npncW32st(%(a<_T-!1%f?-1Rv^WLrir81uKjCl4oPjov zVEhY%$v4vYazu;A{<;ht(`~>yACQq41#%+cNWxF(T=h5J{9`}rf4}$g?_O`WAZMOd zwq2KT()HNmc1O1l38ryb{-81rvnrxFhjtxRCf%IR1Uf zdH2oOM7^)xCj;qi&M1Zp!6%;}R*~e6yp}w{vy9}d_y~Jx>Z!r+ilh&Wr)Zt?MJ-D^ zyDy?r04%2DKsO}_+L#0--u~Xn(2EHCW-3uk#FS;WDZ@zfeIDQ+2KeDcBsM1aiAY}x z{)h*`b?IVo84`#y zKN~Z&k7r;D)QI1=(6&^uSExr7!PqfkA7D%%Iz?T1&LKX}9LT00Whakd;}QgGMfLfv z(x;z*d;+VXatPml^?sQ-^d>X!(qQS!+8d_?YnW5=09e3J|4FRj(&k@BmE9!vhswOF z4%ckzXd#8}bQY&@p)queAloz)v731(-8DngASGaHPnPR$&k%_VEH=TXMGxOP(mm)~ zBuV8bkHYj~ zH40NBzdm^obsx~Tb(Z-)pJYm${0N2%iLd}{BQ@S6>GpkJ_B(-rzA>BLHrSCl97Z{= zrQry6L^2lHi93QFd44frP8P-^Vk+{W3wEq2iQ_z$tdSS85bW6B1v~Po#bC#fV8{MW zi(nVAF4zIOWw0Y(Sqydz4R-7|TnwO(Z~*LwksNg2Ex1A_+o&fYwv~=26t2*MA?pz5 z7@;$H{sh0DuRwo7;XRk>(};MuDHF?X_^WIWCRem#9id&^<9Ggd?xRL_F^`S9j^M&C zme_QI`r!B+dnz>_<)PW@rjKVxV!7ic|<$HN;q zSZ{ly`PKQinlEH${$bmhEzlv>18%sg@2xz1KA>YzJVQ4d&7EF3TKs1F3ZY7MqGM8D z1XlLVHBV}eT(2G`sWG88?ZU`mV_5Bz!mYML=-#c`y&++5sMNM}8yeP0MAxW(p{i8u z?)*YkavyCUdZB#Cw&XQX@dg^Ap&d*vHW7?0rC20mx>EB1!C02!Z!~|vSfBLd;!k$j zBZkC&c+)j;<}(=mK!}nTh0sOV-JCYVKv6z{}$&`o4t1 z-Ljeb#m6!Av9sZKt!>Y*etn2MF0Ww(?bNa(>VcNsI-o-($EOl1dG~GRZ>M)VnFbGz^C_aYtx+bhrI9>DoXS2}G6c-ha0n|^hibu^GpkJ&E33o&6f*XCGuFC9m zIXF{Jn;qxaJ(J+%Ft2@TUurgk$Icnrrbp`e!1_1u$lAJxQ906{ytX-!T~y z%Zc{snbzR=6Kq^1gJp!GGFm{Yj!fL`pfwlo4Mi2yUVQEn43AZSq~=f;g2AM^LTyW9 zPZN=63ED(w!iVv!*g{p%b@~UL1~%x#+JP>ib+tG_O9|?%Gw}7q31z?nRt&W5bU4ni zViD#S5+?@Ra6+~}{yT)QdCMtKWnP|xKVp;H!LL@H0Ol7nc!@95GqyO{~q&LVnQ*4IY z6&oH|P;6E@#U`IxRBYB!Y(k@Uk6vu}PO%~7Jr$dLWl^zNSFyn&;Tyt;bPg4pHAk@z zkYGxWIm2oKJZWLYnHzL6v^US8{YI_;?R%L3!3{5pC(uDUfa80a&5PV^?Yf9>?cm_rv^LiAK z$%6hhQz?q;aipxFk*B7xmh1o5$Xny;lM9Wq_P`fo2KC^C#E(uZg1w=t=>- zmIAt!%WKU~T_TqeEyVkS0nZgqv=ifr=Sd%7~g`zt>H=e-i{7~}*_UfH}qexu8i zE6EZS>4-VHZznxnk}D=XnJXqe&2zcHIwg%1@c|09yeVuZ}HfZ?IGgr*- zksE}n*X3#F*Qfsj$H z0M8<4ssYC=$%O)F{(2~B*G*0OF@YFmxIin|QQQwt1CD!qG(C&Jtwh=^iz&-9IJzwJ z$)wYmW4Cn8xF>21@Oo z#+hUlz3uAoXNT>M z<;vkHI|;lNA`vy~vZlJ__~(%t7$}4RDA*UPiwThF;KZ&1x!YaVSPF+}L<^CR4oR?( zv0jhmtvu{DMjZC(x*fpoV__y2Ht87Qg?i03HLAnrxw2ZucEIF8bYawXfn5#k0K0{L<}1_^i68sLa7*I00vmk^kI2_Qd=# z-r%v%E<9!sx_$1c`E%qE@f@oCtU0UO#B-(Y!-)XJsB)D}N*Sgi{MH5r(Y>+N*$Gua z6)Qc+-OwU61BPWh5s__YW6#dGQ}lFgn+p#*!5` zt;5f8CwOD%eRth|DMk9nr^?r&y+<|x%LNc~CUA^nMM(ULnw9{FJ|ZJS|CY}cQIOsa z6Lp1~+zKK~Gxlv?UCAwWE8H%9(Z|_TsL!hCbPM`DA=t!9SXd3Mo|#gupTge|LR-Hi zme#HEg|>c4X$U@Cl#{ZlDG)Q)Q%#-6R>myH{aC_kcgxF=z?#;qm{kMh^BNTWNL;Wy zDae;kQA8<1H{Cfn8_}Eg98T!36HQhksUkXu>>xYAO`qF;Z*!T_31Fh+KXE#s{!+rO zg4?Ss)fYN_!Fr+|Q^D1w58gSc;OP15W=7B9Th$imZ9w+sn$pF^2nNA57Bt;THnA^( z!W>SpUKLRbY!Akp{<%5Ip5USKu?T9#&sU1s7K4gFCqLGy!bBJDghOkFP$Y#cgc8t|nzqgdMpE%w^h;^XRnc2Z+ei)1K_t6r7f25TH6*h3}jdSFVjM z)$K}kyZL9*2@}C9Vq2O=C@L&j*^IOL6(k<A}(7Jk&`Hi=rT|qMo_el7#Or}66e#Bh|BW7aFZ~rnQk!C`^2@^L5XdsqJjS( zw)U_b-8jeRuBrCrP73Iu>*x{dS*pSk|Mj|iBy6ff6w{G~7obnGDOT#u_fD@oi)h}w zY!Pg-Dz^Uv2dNEi_os*I13x(3wEp$xv(~@1_K0Q1>qGS+D_JjA!1gi%3~;k)cfCR< zG@N?bO}*^kELy`Ask_d0bVx;rWE9BCXB>tljyR8<9F{G^&f+q5av*N;mf9M-F$T5> zF_Ph~>bu#`0X2_!I2$)Gm9vc-yuF+|JiMAhO!F-sjAk|=KyN!VnhxG~YV&Q3y*~e5 zXc`c@x`=TsBfR*aBI$CK=Gg;+;x1~*u!0#G%B-Pu>@KGK*P}QFmFDqZxo3fu=9jb5 zJZWcmbNNtKnjf^4=ABb)NBy~xwnL_d6TCkZ;2l;W+hh=>u2-W}$N?u{IrfXSP6<_e zWb$x62QumJcy)T9Gbq>a((LalmhU;u-iFwgQDuJb#pKNX z+U4H}6ZC*~>4CfG^RV8WRhj3F{(Qd$m$onBR92Z+c+~L2y|XIwY!N}eDW5~JGCbli zsWNY_hngjPb)!31>u9O76)z-0q}x=%lfM=$WjL1XrPNP@EF;Nkm0CzFfl*^Xao2{X zTopDnr2;5bl{y5hE=Z6F68K>Br`-%BvsQCu)=IY-$esY+nr=AFqoBGSn}KXzvKfeW z%=3C7HwmW5nahS_3h=N;coN_B^J+@FIW_}X;zfPJxR7=JA~Tp4ESTI3M9HSkHQx-R zeT2jaJjZ7yrB5n@tGUHgw01)LA1ml$(j#3RXtd+p@4wNl1l=-$A{fxCa~ftjv3 zhl`j3J}=mJRO6lalSA#HHoEJCa4?*`zTx#< z-E~qU2pM{vg15(uad&-uW1(rzbyBI07rVRbyKgLrBY1tc*Y|YS_uNukY=y z@4d0uo7X9HcD!K2x`fX@HI{gu-Q15C`@8FG)3QIW@Avu@-SsPOEGThn`&W4V%I^A= zHx^gs^(!MFxj#{k=R`Re#ToDt!N|E9?|x8i`>pmuME9d0YqG(J??w`JdrlH{{L+g; z+ysqgR(Pmmj8=Ql^FiVYCKqWQn2lX|A$}gFH2OohH+QLNxO~v!6qdc&#nFmS2&o&8 z3EhsPz4}17X)Gh*9428QB)&6kwT~&kt6p;{gqi8 z#eg1q7^_{~Hr)V|ih)B&7s#t%7sX`5WsOv3KqcpFA?!cQEnbYQ+Us~1b{}$&I8j$k z1(}ETlo@i07X}u4nz3LUUsWs&XIZ{sLv|W5O#qW2qQ~Jk=I8q>?AJbK_H;yk8&F&@Li>&F4c5co<;3#ff@BSuxsBO z`43eK2$(Mh3rfdM2&^(}RTHthxKBBr+cXC-#%2f=BmTn3j!is0ZKPORqD5f8vx7GG+Ik5cdOr!WiwkeFo5 z(&6n#YrF$F6dpS?JcCilZ}7mG!Kq126t20rheO{vV3H_B%E>6Ofd#|DKBu_pscr%~ z)(Nw(74l0Q0rbue!%;b6L$g7>pWK@kOcD1oL3?(NuCiMNB{Ap;GG76n9bosVt}EG%Sz|4F2263Q=ElA@l6YE~K`?Pq z2~8UA1wh6(I1zphTLPj{_MW5B>49$-b^%76xa;A;6so>iHg3I-Wx~p(@9=o0ha?t6r^QcdEx&gO|c??v= z0VuGjSe*7@+Egp`mF-SPiz>~u-84$iZ>aN@e+xVTRB%<4^PP%TyJ?jC_`Pyp>|LH4 zEN)!{@1?Vg--$BDrR_by1`%mUdDtzRZ1!0#)#X0m74J$M3jqE-#|%T*Vcwm`oWuibE7(N2fk4E4t327i|d&D z9+oP$_bQG}Dkx4tI}@()jE?^}3LxS}9skJk2S)c;-mQ<+@dlkq#P)I8x@w_ z^bkQSv%uR!s){}o)7;5m=`$R$2zHAhrOGs^ZK2Q*E*r4=!w*ss`+~sqxP3u?>sqRYvmqr$OE-L z^l@-WAC)%Q$3fdi_he(2S3mt%Uk#9KwI1Fc{`u@9Peva}pr%VcAAQu5U>|KV`?x&c z+Ld>rkMYj!z^P3E<5~M?K&wxeF`OifJt1Ga&hmlpy6yJ(jE=@7l^rix_dd@y_jyZ zY_?A~j=Y@i-okVPN}t?5-5n^MUCf+b2hp5$79@luo)20h%PDWcxw{4De9Ec!`YK?h z-*7LURHW7TRfi^5g1eiJ_3C>4p`YgO=%Js!z~P#A*H{1ag`5B5`0wK{f6p8^SI>U_ zmw+i~M<0L`(*_P$-6OrgcqoRn?Q_#B=|ZbD<2ThmWT8zgE+_}jmGg_fm7Cg1FmnBb zV82C1mv4fM`hNl$_c^^AZY=Cp*8!9k88-qMHK2hYE}?`VN!#td!v}nL-yDJmS_sB_ z-Co1t}MJ~ZBm+C^!xhx|BphZV8^e{P4Sr;upix!{|ngC@lwFGD{=tZI}T7dFoP&eg> zAZDKr>P8^6)XnZ}0r}n>n7k9z9q-Jk+eW2s1XI0~Trzf=-bOaPx@!AawS6QwWFP%v zOuDVs{oCnu)%KAmqmTXQqt8bl5#G^9AIv@u=6&Ry=wrNdJ8~j9P|36Q(T(`xO3mEG zTpx5s4g%t3xd)>Dp>}QD-+%dg1~al4z30Moae8Jm^*x71x0U4`DL*SFk#rNjq*N-K zr#?!`KK@h>=F^<}4Sw9?AH#Q~Qe5Eo_{&J*K!DNzQkH|ZsUA%!Z!n15uuPRfksLyc z9b@Z~9cP<6&Ce0zdweo^!GCmY5EdiivM=v{kTe-c9)1EelGj;w^M)pxro-O@+gLc(U0lPi4 zZLVZ@xjp(10b)M0hPLaYbwz)Cs(MBHeuHnEtByw%dw17pKxh0bOQU-#;1>*Bcx5|l z#*&?WxEDhjRwvyQkezZa!jsxtCL=rO9jFPUnoq|b@Jk(T3Tzwe&EMF8qEE&C%Sv#i zq_LrRfgJMq#L`zsRbQb0l#{EgGeAmJBr@%}NC;RBiwOfJsC8%}#(=rAX-tWU$;pej z5nMsgZU&s1cm5`Lciune_%nX*^60nAs(f2@M}*4U!$W*yt{niM1ZvUwW-IhPk-&fi zPrUpr58dtq&C*-CvtBgA1}9uydkb|cZdU@4zVK$T=jk5rh(szki?7)TkGD-`BNrJj zm-nzO?OF25Z_jRQd!(LJ*+qMBvAkXC8p}SIvLX7w`|9eP$z1XVM$rWKJR-ULyma7-TU1(@16rt79qO?fY)5z;=a4)WBM9?vM^6b`Amh-2yrx z1&h9q-?PN?{cFpJGT|?KX|;B$e#fc4qjh}!zf`VHS5FPKSIKVTUV8&AQ2_={Lsf`t zmw>ef1Fb86c)j`3=Ru86LAEIK{tKKy(Q^O#P^L*gTEm{Ln!6wSm~Z4`_6e%$Pp=ko^ER{+ zz@TS^volFw;nD#Xz+P78+O}MjQLpSS;Xqt4-o{~g5C^`2_6F$Qg>kVeSQbvrc^UNLgBk{&;b?v#UxX>!og- z0BMgX#YP3BBoFM7FY-kq=AVOE%OTssF~PRv*C46@3F!9-?>0|6VEAWK_8g zNhK$w2IBIB)YV!*+4a;)~++v)p9@f;$tY1erqu zPh%9q$vh;uB41``1{63j25EuZhd{X`UIq81uf+t;U$YN^xEtJ{fd?4L_*a+R>vnef zYs;fQT`HHITaqi6lYs?t0u9CuepXUWbcFr{W?T$9WQ-6%0Pn&@_NeJplI!zc+|MNd0(GG{=D-q$@a3 zZd9G?B_AH4b@wK)#QDE^xKRxXL8mh-^cUu~?!Ov-BIk(atce~T&w+bYdl|ATE!R6O zFHXrJ(OPkp&QOIYnA29N0$YxMVtJj39sd+d!yTdBZ}&ASn;XwG zZ@JAJtoE`3xIK}AqUrw5rg=D;?q}2e%Qa16*qLUPf}`6T6!oq`C*=^yxi0p1-xbbD zIf;E&!sDi!Byw{VLIZY*u^EX#74iO0LSW~u$Nx)r5PS%oM=xM-f5{mW*iA`@iGzrv01yW4I1j00k zUt(T=^gfNCx|;N)7RKMpz0_r;!Q`e0x?;L?ku;*>l>lbBV_)P>%x?t)TWUGn>=Cv^ zpFaXG;`OB_nVioAlZz)VVRHxoDIM2~WP*bg+G%QdmW-MWg9i3jPAs>}zQVgc$eNG)<_F>Y1aHE7Wb1X@_B_{Ykf}pIw#Q>HerQaCr!D=*ae>a<k30s9|m5&;hYoma&Te|RM4jb za_^v1k=isyWZi>ou_IXi+kh!eed{53uWrQp7PB`tK^KH1L$}nNNTl}Xu*c|0956fe zGln`4W@p;;J|L~36*B(NU-wPX(Mtdn(KH&=xy%9f9XWDfq4Ro@UA3jeC>MaHkWUSe z%gQR+YNg$`iZ6;c{2N5&&WwLqmj+4_?AdwUrwtsR57`jLaW8YmVR0b*42f)p7Jx>y zAvX9jE!(~3;&08FIOl-x!S2e*^zWc3;oqUpW&b2-;9S(j_*VvMf(%yjRFwmMp~--< znJiF_UOj6dv}l^BqKTeOls2JaXA@u&U$F^#>m8wyP^YUYIaUfVTUBhdi`_;3F>31P z?deCBN2_T5bjg&;i4Q&eo?qNL_nx19|IgiVJ=t-^sUQ8{{^a5>{N|T0{-;ES{6KN) z6aVVBzVM-se(aH5`M^ED@ZR75rB8hD53ccnA1-z7plEB2bLfXPL!qox-$AD}y7tbG zJch1n>n_OQ!WIhajqUL|KhhjK{k~IL78hP}?)qNMC0;$|feB)~CT06rt*axD%|DPY zs^a)@oS#wWrt@Mv_$dZ_->3O=fj@dN{&IMZ>?R;noL9{_;z__ijzaRsms7}&f2{lQ z`K8fSd{&D059p-$;1}4myC_Cm<*eNbHTguhLQ307hG6Td49`g~JSQ-Tx7EGY zdjip=E90TxkNvTO^XNWVI(5ih=9X}tj5v9wyz3OJ!g@&r;K}gI^`=@#cjXCKPPrSp=Wlx|*@<*KeM(pfRy#Y=+}7ZhVAeIzhzy+Hw!sNN&NSR)Fjzg{msi@*5rDnWlG9_Ao6q{*)?V2g}lg7HZktfz^q62a0M`3D$OAh5?JO|F#? zXX^meaUyX6kd`eQKd95k1^KdgseC zdc)f}!+c|oEtVsU0Z>U6x0ygzc4BTw;)rZ*pZO!y5Hd0G=)ryq6Tn;_$F950=R5Cf z2Ng42u#?eT5;daMZ$bu>lq$p>GOWhtJV)Y7&yEb({vrd}Jd4OMN@N&qM+PT4aAoN- z$goY9>+~K22esx-O^BGM3f5qZ|>)$4e|DUR=A|jR=6f2sOy(e48C$t!! z>A`iN?J%)3r~7Wc1*=DguWhwo&^gdQNrL;$yS@Ng z8|AUB1(JXno!a{HGtcb0i}&kyoI4d^B?-sDhX;(LbO;0O^k*u}gPp48^U*r~V(OTv z6J@9zQ`AEYPXzX~h_p-DS~=bymnMKto2_PXvx+}AB=C47H2TyVa8T=YZ=S+b;gQFe z^7P{N)ALVkyZiX|yZ6sd`M#D4`nqw{Jak%+%H-&^VXy_(FxRi=qnNaiUx?BfO5NNU zrc=vt&^tQ^QS!^F1ENK9hvCEc7%3NFWWz9W!}ECPD=y^~Vg`#*n-Fa2>Vg;##ZFWg}Jc_HP?3j0TvTF+4pi+InIye)4 zrnu4e0pRIS4W%SQLrySWE%XBw3FCUv#kv>H7cPW$)JwldTwKcrS*Ijt4Q~y2)ZF)n z!0WTYZEfDb0xHKEho|mJ=Siu`k%cIldwg1zL)eG$fyMLU^=0NYMomW>$qveIp6;NE z)7#(CRZIq<6A!8Q5Lo*n=e~!|4T#xq%nOoi(R?XyX@~ezlLe0~ zyVRV^lS!`^gjut098cOYh!hy1rKzZkzYXGP!6GqIP+dzx9Gbd6HZb8(@GK8}5cO{_ z)=1cuXj80FUC=nGJ76-sx+yY=R^ugF1b5TNM42z;j-TzCLv2Y6%|uCC}vnNRAqxr1w(Bu zN@!E1kbV!{EYZVfTPjS1tvcPa5*uBg!z@08Yzk~V7+vP#gMR=gxIg~L2j0CrIyMsu=^4cE zkr_V1tIcTqCA6aPztD{rYQwMfGwghUP(o`%)95pmRzcr_1F%G1P@0B+&<=CMx~=$i z829+MnVzV2>l;xP^!-awI3pz@sZwfXFxH2cruu`MvU8r3UcPMy2{cVY{870A>!ABE z^9qWFC7}5ko6u8J;fvuT!q=BscbSnDt9E+HoCYu_oYQpvmm?spUJub^uM{Ahn|;Qi zKdr`ex=kktdCqKr9o$~B-w_w2bgKx1yZe=_4D0HqGaLdE(QhNDDrcCeR%t~GwZlZj zwU;Bm!8vA-0x?*tIA{PS$G}~F&PIlWFwfrpwYbWMB3C->ErtiU+3~|(R@p+RA6T%~ zjyJZV{%fDHZ>gB%pm}9H-QgY!av5+Fx51_4vduk~(2HU8n+t6{E9Nb_^|z|3Ov!^+ z8Yduw(V@=W&kg9KL^y|jaq3P1?SFTu5Yx*Z42nM?L(RdUfw~t9Cu%OA;2w+m0KxAN zjKv19nb4~OUL!2FA5Jngqi10cuw$$M|5PL&`@d} z*}?oDUz&guAdR7Zj!}LZltto~-jPlF$)`WleUczTesZ(@g8i;w+acb@&QCeCI1(Q0&zoVQbZE60CxxsA;RNW4+TEs&NNfMTW!=+?z3v@XU6 z?K;dgQC}Ii#s>rSBTI>vfhm_G>z4U3>@Y{-7kZyT`+|-5r*GvV(GQ(6f|H{WPX!wP z&eG`Z1DuYPnT9itN$U&zGFeXY%R#H6B)<&ywu4_vAi*^K%N{m=H~2wICU#+w(*-4W zB=vVfvy=l6IF^cHzaGwAg2rJ@lNGp4+Gq(1Sdat3&!}M~(LzWk{pYYZr6G=W##gT* zBL&C&izaXv9subJR=J;g`&N01c8(WE4&llB(A&4Fb1Ven{HTAv@%BTf9{$sx{L|vx zbOSe~g!39$Sg<&J!t;w}UvZb+!Z}`B9-gcv&(>d#=NlqGKf&wB5+ePal%~hQ<=l=t zE*gq6=6BMP@i4ukh&dw! zG}+N`teAlcH;OJX1NGoloH8iZ&NZ81tctkndeT`I({J9n^;pqd+dRx+{4rtepr!-@ z@O~dD#w^z4y)$?g3F^ld#9VdkEJhzrK*3m*K3xwMm>n`Wy~NT$22XFRliUB*OB=mG zQG#OR;1z*$O@~3;?eM=P_vy2XVU`(h6cw1fc~>{0R@CjMhQkAw~k|pqEwGjlfUD z0;7V2zp93@U0~+?~VRk;+78^~bV z>Q8{x2qn{w%^YkUtyGZp!KX4gM(QObgi4~7)CPuk1`c+%Ym;NBfqaV^uWm|l&+30p z7tu5nUM9sn6v>4Ct0Y8lUXKY1kNAJ>t$1E4K4w4+Qvl~|TsHi{T-cA^BqN&2IX@Cu zLWI!?$60&2xmF8=6P*F*-DJ}6F@i*)V22+^1&N96x9`fVf~&-AgQVP1K8I$&V?h%% zsiqm!5$G#JXILKsEk=8pqfTU$6xE>A$>^7RRX>$o6@dtO1H)7VggitCJmN#Jh|X6L zhLe0b4JS~HZ9*Ki*miIHooNBRPETQEbF0A2TpqXWPywowz>}BJgBEbmdG|H?5!o!3 zR^_2JM83yy>@w-pG0k3p;z6GAPji{CJ+D>WKVK_Y<_;& z^Xum4$2`AjetwyrK~PMwp}Smg&`axO^a_2n5QdTJT$vT>Bwjih6;N(I zi!z)G5NH7Beh7a$8>t1v8Px**i&)lD0W~KAvyCpOgCV#fVf77lM;(W_@?J z7hFXn*yAz{sli2=CW2@}fb?prC@rLM!1OQxBOpku5#JDfeU;Hkj$|K$0+D3KyJG%o zObi1kP<1iAtpoAQ_D%+)FjuDIVs?F0SzPLSTy*gdXc#unb zM$--BLF?`)^|rgFYxPEYrC>TZ%?_TToPt9G*NDIp^O;tMChMmP_18m_HKU^lT%*~h zkfU>QHj5XHP7yO|13m`G&rQ}&Q2`Q8l)$%@^>YAAT~ICsqNv);B9lzoLj36dUYej? zrrZo|u=k2fOi&@Doiqgrn>+s>#Av0nsA%r;xA)*;=lMPU4CR|AAYpJ}=;oPc2!KJL zG?`~-n_n;T3b)QS7yl-N%_qZtt3ji^&AnZldrvp-$~O4`?xr#t#Q<&|@DW4A@6Y=< zttL<)ysEWcH`S0~4e0I13!K6T99yvaACBh7Z#Rj+G37V@aB2KS+UP7#Tk{3Q$RoZm zaJ;>)Z=tBSed{_yz1fA%$cg#5lniNOXg5#T%+e(-H2*A`kIyxqw}mg$4_*$RG{)?g zt6bP~0UvB9mBIUFYiPl~s(IJr>GJKdkf}F_)8-u4K<7A)fC{QoZ*DIB zJW#*3ESmTIkNkkY;KxFw#IjX5PV!^Cht ze3b88-@A9%{G8FRZvt@lGN}*Ui8B9r{)~TDRStl$ZMj%L1Lr*6{dWENTl_qQXg}{I zM$+8N<;)^b4OPN#QfWPX?1bq0C&zz++O5;xsA{+3ih0@g5RG+F4;?NM>)=SLm=4J8 zA&+Vv^nk1)XQCnKp~|`t^g!f6Bf#Hzt?>|+bDe7o+c90EU|dE#3YmghB9EKB2=qw! z4E=4(GQ~=6Myu(1nLr3(=UE^Gy%$Uq5aN)nF;gmXUo|9B1sh`J>WtI0;weRwg0+i| zn7kcX+eSrjY*;uB=A{PNcR=KPgiFx%N-Vc*?juO4xac=j7*bA+KQpj{kQ)d(9fWws zCQ$4*?Ssul7df%Huw>1d6L zKzt##u)|boZH*ShCTY{I5sM9#n>DeW@bCE*Rp1o0+H$`+eWn#qr&iR zZ&HH$BeSR%xqxQp1IlPB3U#1@c#SE{*+Ub#WN<8M%PE64oH7;XO z(D|w~v}5+t)zTR%e!Oq24t38p930Rc1v-|v(Vfa{y4e0mt%;j-5bY_h>r*v9l6I3M zm{n|iPJ{M9L!2q8%Ph;yvaM)_C(&`VKA#|gD-~zUbYZ1q?~tZ$DsETKduiV7DHH(DjR zEHlL>Wm?3;j;@(JOedUC1!cN9u-^Jis@F4eMfh_A^$g0CovpPzgqkas(T*BX7Bqx1 zhl^x6O!c~``LR0fa{pKeqI$hE_m3TZP_HfFows+8rSV%U$Q7dQN+f;Mu#yGz)x-$& z<)XDqC&6XbLcONXsa{h~Rov`bdLva`t3={YVk#92b3BrN zEOxThAA&n&KmCaPG?|yDyNszpaP%;;7TWu{xeO~44Q4jnT!x`(5^H)-Wn~y&5wx?^0i|=)yDUb3u$XU8Vw{+d zz}}{KfWr|=3n9awnII+_s34{b3SyX&%XdN$#~={df9>%Ijl`sbcJ8ckqUF`=D%?uwxDLB9*w{brodyG6O*m&VjLl0&qxZqw`D-P%&5 znuo84VW`{)+e?)kp%$eB7?&v^fmV2Hw!p z{8$HGs4D=Dcf#-DPeLC>(gfHeWhS!ODpKE^fL2zZcdktU6KH|VAyJL}CT=||U>V+o zL;5<5Eo@J#;DSBmK%Uz6v8f=XohVkOw|4ZiLe>WSTCUmN`dE1p@7P z;RpvF6

yh$KDr`I-wTJ|;kfHveXvFv-TD-{#TO=O?&P_~mpEoXoV2N&bqDfp)YA z%8PwbjOG<+ffk*Le&WIbN#txCS&Ii~h-&;U5-!6Qqkrh?&TVAZ{3eFOaRdCbP5|ri zog|QS-^bHspByaCS6UTX`T{zNOt!)d$TPT1h`AWw6&_q?N=*_^Oq{PtM3vD1L#p|sBoOjr0UGZo6+gJ=*s?znu_98u*KxwXJ% zY%(TAWu;}4b5f469bRCQaIYCD$CSw{la$4IdA)=JJ9suy4ixueGg5A4Zb(|WwArF9 zDa(A+EFzD!Xo;CMF?z<~Ml%$F`rE}f9Wi5Uw-};o*L5nAK2+}LBL|2%*WQRB%53p1 zi5at_BW4Y;X%I>9(a-|Imknaed^mta;=~EXx6LFq2iFo}9W_U~UCo6>YIb1}Ycj~% z(6VR0qwsd=3osj_<{AWhjKhZm6OPo?JU^mtlNGjJOtQi&WBR+Lf04fc%i_h8vDDGo zZyqxN+a$jam6<#xzJVX~De$dqKDQI!xOERioRX_-(MzVljU$rl7UVh~0%~nLgi;X3 z5QsK81l(2a5Xu|^Pe4bR($NmVOFM?(r5u7EoDbp0$}TX0vlv+gPQgP!Z;_}Plg}?= z?^v=Wi=LoI!nbxX7Nr}kN$d-Z@z0V>|8h&Vw&e=xlb7j-`i6DNlC7`OHmTToF$4=3-{B0F6)*FKTxXt{C0BTy8`(?s#$4beXIxcqfQ(^>lqo zmBd?6J(h1nzBJ1Xj(cZfNHyR?Xum+3<=w!U3=HI=woe7;XyAH>;2+H5L~jJE3=mh& z3J)DGuAz`QX9N>s4>htss*~IQ)fk`@kSU#vl}ROfqB{$%RM|@Gf=S1-6}w0)cF|T~XbLO+Ur;LkubQ0z0CuBG4-Pp_~)@9V@*|L%yos<@&b)*p64XZ5EJ)+Jbf+u^;x$fv+|1 z|L1U!kLr0spjQnfV{w8ezYbM3*M=#dIg`^Wmi6~0JjgP?W@WNE17$@*c2VM;VQO18E@jA-B^Kum;CIp;UlFL!_g zV8^h>?YioE#!|apx%1)K0Khje8E^qm6QkHFL69(M%{d=xmxT?QduFeoFaj=S+s1P! z)cslR^?GI5BUlN#nOowVY$r}gkR#=|p z0WU#a6Ocxd(}B0dHOhlP*NnC&s<22Hl&OQ%ai!p#WOPwLgDOTwVD(Sjg5RRo4LGtv zL zhfd2mf|lk_(%;KI=@KTo#K7is2JYYqI1P9e1CKq`BKqH`$Q(xN{~^+PlLJL<2{{wN zW*TC>E#OInkQVT~*2_r+bd6g&#=u49fyg8unGSSLd9oXN zoPDu73&(-rWF3j|8GjNg>oOilqR5I&mUG172M)09mLWiUVH^5Ru4(}hOnR`n=ooDw zS~BZ_TckU{?(o!vq@tsmb+5uya#D^ihv#k82Ks$aa)$M@v z9SxcWt`_9f)E}EuYVwb#>m+1mg{!U}T&40;(Zu*}$pou#JT24|nrmBS=82b_o9ynz zt*fkrPh*o^`RKkVW7o(cU>D58=_vUPFek9rw%9H_ZMs4Q5rkm`rjSN>nVA{O7>A}x zbzm2|$3+UgfK^%OB?^X8BNH!~0yOFh@oW@&LC2%63vNE^y4YG&WYQHL^t>4$cM5-glYhRk3|_Uq!gFZ| zQq2mG!E5CWu}-_!6=(?tpR14SWf?r-@mtqN39sc@ffiitfx(oi2RqzAVQqK6z>i(I zTO97pD(xLbqUv;2PxoBkdksC<6OnBD3YKn>rr(p{5Z{FpvQv^%dA#_JDP(uN_|Lx0 zmEi!ZJbh#F9kl6=q*2WcMFFZ}A^}lYxJ>iw&{Zl7!rp7_9Iked2b*%Fe|n)!e7%S) zlp((CFJLfhnF;b^G(=V?^fPaRr8wd!wRT*Aau6=XPnN9l69dSTE!xB<4bRaty>iCl zUT8LMC}WK#trj~hB!Rs71qC!WExTehX!3-O^RC-YdUpcn70#%vb0Amlr67XWyXd0Z zAXaX`i3y?y;%JdEq7wFq}7XpqjuNfK+{b^<5lHuH)zHxdD564UGky zUsm~r%I!N}R^31^);M9K&BvFRlU)L7S3TRDL4=&sWlNPI6^G3?;DmQZGVzn)5D2f)3HvO>W#&>FuCYuNAP|EpTp?{t)21yH_u@0iZfCN>!cTS5KGmgQ2RI_2{I;MnjG$0w>3cavZ~V99QkZD^&W{$6BNzn=y4{g_ z2+rn8?_b$%CkYX>PeOvOaacJ66v>{A+!*YK3KmD+2zu3F2nR@`%Bh>#MHN4}OQe?C z9}x9w=5T#uxh%`2rLsUJj0r`H%?U+eqgkc}!OKF2nphh=!C9(H1sh-U5fAXoRKzK);ZPTC_04h-pOqJkGWv@c~67V;ZMjg={1MV>@$^p{Eq}VX2#M? zK?rzIPmJ^?9ngK;G!@}7r5;jIzbCT@(av6I^5K{=e4jd-%jRh+?>S*G_h1Sv1T=O|nVS?QSkP10^?)hCKo2b8f>2VQp&VIEXNZtF*$Q(tY_+{!S+Ov<`5B^1l711t zG#coF+0(!Xw>M^lCQq+jtV{2m?qe~Cm$%dXpd;liMcm81lfm>Hl=8%JW%JQ)jF9IY zA#>a%0;H=+jA-XQ$iNZ7Y`+p2$UMH{Fe2pr+=l@S{tUyQ|IX9bFbwGP!6dXehQ<)8 zfRY>BnoUJup;JM6f*7XEYr!0v$0UHON-_g3v-!34N@1)Pt!v&`J5xVPEfFs=ZHLZ8 zA0in2G?=wm8b%R=Y~a7|S3Ba&y1^Aod*F;gPw9i8-o;@qA143b+DJV-4U~g$WMaM! zNf@}Uq{GvJ3(%F>A{(5!9w0=p1rX`3;s|oHdqlwA(p zAZjplQk;fefNDeeG5TQ(WI8{cdH^?~Tfulnch5#%XClF~jGPU|c8=Ut!~1rO9EEDf z$kC=;z<24$FVmx1$H{+$<77Tkx}%L_uO?_xivu2p+Twsyy$QG$&4q2_9K{l~9oK$z zk3lHcs_W0ihtfP`+KGRhHtcc3Cc%VSwX|bMbym`DK9W3$h?Bp92Q`oQ%RjV{EuaFC zLUxn`83;OK=%UUTI$SpoJPf903|{vEHC&XFl7gGYPysW1G} z`+o7GKls?c{7gY2UF=b-${p>|K=U{P7oH`l&8t;^`+Dh>@j^XoFR2vJFp5~I!VV)5 zLv)kE<@Hk{Mz9^4r&@$CvyX{`9#e#~;ClRP;Epeqf;KqjbihWrovw>OMf2v*C;|(G z8V}k_ust#=ismA1<9~6-r+Rp*eCu@OHK?Or#XHsB!~>28`L)yXkg{=AeI8z}Hn}3R zX}f26mR@U^$=)&Onn$U19om8H9p{QF$^D>It|b9#L8;^4AqF1JI9|9Vd=k=Y+Z7(L zDF%rUn9(1=%au01auY$WvUyU_gJO|<72x2dv3SPBimVt3oJ|55_l4)RL2GO71%LH( zgF)eO7WOEpV9&Ks`|IM@b^JIyuW=16L|Viw@{d6}ZnuR@2*( z6Fi#a#XOqb#xr!@N82WQAngtO6BaQunUdY=qya?B%lP2FnLh+gt+a6RHH(F%gS;aLRxNe=Lmo3hOt>}ue_ zb^HPknA{Ezp12ebPAuZVYvSVz0FxEWAtoYxYa+rc7ZD-ReNsMeL?}ki-SL7h9;vPy z|29ZY;UC&jP)8M`cb(6r=QREFJM!oFPnJeMR7P}5@T+pn<6D>Pi_L80>O44@YQJe= zDFKg7`4EK{RIm$F=(-x@ zhizhfnrTIbnU1RN$t5Jxcua0E%l)$z~5NUW1JD_ZM9>`MY>dMiQ+fWP{I-l{0TdX6K@ysnh@VkMl;moc5hR#BT=F ze3px>9i~^I`4=xK1N!~uX>O#C59=Ba$OAvwodc6lHLkDf=I(5#qOZ+8{LZGZ9vD#D zRM9+fp?lS)*xdD}yYsdwOok)PeKy6q4f7`3rYwnP5Eae*KsP`{v~Xm!3CGbb+x*Pt za|mONJd(m)_wO95w#-Z2@bbLWjhH zUIpX^i6(T z=ncni>ov3w1eUw5LuStcfp#?ob!_itRdVy>&oGbFvHiuDWT+P{eidEmosYE^id6TJ z^gw5R$m5)xvR+*CsK2(h&b1P)i06pdK>=?%+dTfWAOG3G_v+yWCwNkxMzON)7Yj!H zd7)cE&G%*}_j01|9pv$H6ySWwr=NH)1X}b?f({RINB`%29xW{;c9qS$;uQK7W$uq> z+LMRc7ao{DfuWrbUTp8ZKkl`SweLL~_u2=ERF}o=z?x*WmCGWOReK!B3f1je0 zaDN(YwmiQO{S9EoLYTb39a1Cp>Qy%H;Cn=iFJ9lly4#11vktgrF@88)!z@_Goq}m2iIgAk>X?# zhR|V>fo2!X?1f29su2_ynG4h2{6UmxndyYdiN`hI@L4!)mg3$qQQmy;j>z5wdBMmx zot+?PI#fXk2Rj^jO9Xd#3T;K!&Nl!0@%6aSXo(J*2zyTr%5Ws|l2nZoe{tzILzb{e`0xIJ~OgkzgJba?mhSXzvrHNFY?elrcH;zZXY`+Fkz&wpx^q4y-QU> zbCzm~+`LGBmddmlgcBa&ro-3r!?rw;t(MCrSXS2{ljgJtMv5(>KDMx@1zSMGAv>3( zM{V(=(^-H!;hilQ1=6vCe`v^=M%)J@i!IEb)o~tBBi9wmk1k{}hVQYxM42)_Sz9tp zpMwn3Wd^Dylhk0MA5>P*11dmyS`2y#oP%sQ*V?mpT|mX3U`xtPE8<}|myB+tydAP* zHA^bKq)({jf2j@v z+38U-#JDO4h0z_#G{R^}jHbY}Ht1yAfn!WZi%~dg0jUR(_1$yBN`DJ|0ED~?=x5e; zr#0qAY#oQ*Q+v=&*-*B55mkegygF@-U=SJX4zz7TX(9)hNOe`wkliM)fnG2ax?oE1 zMN>#@fDO=NQW0rJy(9&I8;qRnSRA`g`T7)(F4726vO$)B&a#3-D!j&*r7zii7}Pu> z{Q<36RhCDg8OH-ABQd~%(UD4``p!Api$PBe0u)sS_G=Dfdf84ybPRYBmatRoOzm~2 zc8I+$jGKe^Q8;=@naC6okxj>N{Ptm%1@y?PaBZ+Bm~@Z>Fzck}bkpQRePl(fnvw}O z=CKDQe@;GLE+Z;)R-j8dE2GHgKe=~@61x}Va*`(--eGX-*){kV+8+Z~OP9w^kXn3y&W43K zS5@W&X%UJy3|9nVr4f_*B_aU}Tw4jEElE#CLB0`P)*+|3;`1=F_OEUplPgjvgG5s7 zoPz%GH&NWkJZlDAA)p(T-`j^xtv6VNO<)O_lA+7Cvri=$;jmXB9lsAti`!etUUp6d z7^@rRZQBP~sO-b=R7hm;ZrVlD?qkEWF*0*8%dly|jFj4dem9=9dKF?v)70=%jG~eZ zv#8bVeq3n{c>&j!{6Jc|;$CQt3~tL8?|Gt(-U=5Vo}#Gy&`Qq_#i*GdYA!I^0Y4OV zAkUMU-4B(a774hLg1NY(YNSEEt#9RO8MjGV&t76#uA)*pW+8W@Fq^rHRspDZ0qY{$ zZ%z6$I_M5E8eG9E;sXwiV3WI4!{wq!=5lcuvs^9|6$-_Z%DZN!@nlJ`2Ml~EIWsm_ zBQ^+*RXE+s+y@t?a&zjnT9sT;H+19+PDIg5Mtc0lik8AwSCF)d@f9pe{w~9WDXrDZ zbszvCAjU(MJY++-;2%gHtr^vAG?h6IV+nsz7rg;M?&vIikxpVWRhgU^OM=ljj)1ac z4hHEAB>E9J#+)@3Bc_y(-EziZ1jnl_rP#iJYDJIN0 zQN1j>*vQ)18m05FchAmsjz>+2W zOsGMfgqoIuP}dm?F;}~EEF^I4rS-m-*Exh5ms&z?YQ~!kLX8?Tz^r}Fddr~^Y~rN) zIfWXUq8}sC(FRj2%cBj6HOO_bhOoIy_ns z-G^jLd0pdl>mVYxl-Gf+mW{|pSio}*InLuLi^fqR1Z9Mk+>~({N^_5}r4aI*&0DoB z3Fhpk&(XXENqE8L4J4Zc7$i_q1T{qiKQ&DPj4F%G8hALjS!0-l1d!AmBtR?2Tmq2D z+_15%+#&{U*s9NF*l3XIo)bHpD`Sopgk@hh1XAxVWjf`VB1`5WR)UgETYc)4ox@SD zY(7QIQ7q?WO}(<|xTKGou?EIFLA_Fj?b@VK3zifA_X5j3Q(O-UdsGiy-D5Z|jJ~C~UeF|_GD>khDH}KL)_;#7 zh|$$cDVr8iZp|a4af`D~8p<@q1VwsE41=%gl%WE{fLE^&m-s;5K6*etwA>dfp^!)L z&uxcdt&4+xNf8@KZQ)Mt4anLPS>xRyDLOGo5zs9;1ywhfs6?DdSrv@6^texHuEoq* z`_y56eyFHa5HHR)X7v;+IRUiQ?rLE@4{!pi3jS0TPJ)s+0bbBLsHdVQ#l_?yCWv<; zt17x5BWaU*3ghbdHPcUQK>9=|G}5!;ITE_b^cGhG#Ck>ng(_96sk|b1N;+DJ4U1ie zO5r*XNQbwX8ENwlyzOroZ)0M`+ulj4GqjOkqB7d?KJd0J5LJJJT;z{Eb{P5>LtudQ z|D52#trWC9AJa5XpO47^u)q5>99+y-bI_PVXXa7aP5T9YminMpu@w%%wsdL5pv`?J zO*z7*6ftw{9!+2~IwUsZ>v^*o?}*KU+bK57+1$<(up0aM&7962zfnQpH*-3_A%3H0 z?!6Vg?QvGH*#&FS-cr^Qv7Rq$nOC}$wY)z|Su6KS&%s*DKwf4F&On1HOlTlv6dY1U z+r@lGX_Tn}9hRO^X4KP)jJOtSMcR~qg?8 zDK_s3P$-{bklB;lPMnP9&V3iPpE57h5J=u;VUHWZ9!m%TAb=y_^nyNByfR-=-p+R+A?W#ellSiud zdEcSQ-Amrcan$lCm!>YMSrJb{eT3{~KU#YeozI1C&~%4v28SS=VWG_Z-O3}f9BHg| z2imdqB3{B)YYoIYqP^{(BBJUxrfLT{;KG~50U({y0X|wktmV4YDnwG=M0>O^GMs6P z4h;>MPCR;yZ)OvXo&>xN51J~oRZ^NY^HBmZsbrTxAv(#nIk1IB(IH3*Hg93i5F-b+ z55pquPYDHtR1k&FLU7_yC{tXoV{@4gfCwU(uN~X~#v6qPzsm0ytzw4LCpv4#S`s zQdQUI%c>ziG>LabR~CLRw)(w*0iGIGe~>nK2dnRInAK+;wglb5HGT!_3K&oZtFK;p zpA6QXN9&JUK7yO5hmrl{{)>^>;3;1#GgaR~`=i$(5%k7f1Gk?hY)G@12~6d_r!;_A z-4hQq?_q2ioKc`!>M__5%Z$UaY`Ls6Y6Go4wlrtddu?n96mmwL@A83`c??28?u^=F zCm#e1J@(jBu10&_ryNbwkA+s%IIIr=VEY^JKCNP@Fheagv;p3tin(Xl7C%d;iSZUQ z7#)xn zv%|10MzZ96GC&G834P_>r*Corr8UO^2j#vL5YU++0Rp{(_sL*5c%L!eCzJU^LlgHt zQEP?wiDxVCGx8~pN-=8eaJnY!Decnddzy#4$oI77wX>a^U;i4it}f$xV#ZJp=6WWD z>q(Y)a6Mtt-1THdXUX+U-1U^)(1N+1)}DH;W@!&qs7R0@#>1YFfh$2~o~Prd)p}5y zwW0z@i_F>@yvT2qJ=L;F4ZZnOH7AZh#0kx<;h(bMS+wjC;FWkMwV_$VcnVhY_s2!EnnfQ%uV&v>bJ* zIlz-cM97)SF%m^RYRrPH6yS(};1sBLB2f`h>GNBEBrxy^aJaJ?yI&g zj@rK<51@sdRFrB|9Yu1K;~@@;T1~#&KSv&MLqAqTtuNKexu394@t-AVYn?rF#q16U zLy;C`q4w-&$sTS0nmr=Nz%Mj8{3wf4Bnfu{mraJ%wU#iTdQ*kZ z^LlmA6)X4KAL7U>c5>MwN5*R3!qJXW(rg(+gAoN7LeNd!|1^1pZ(T%BU#NXe-_TNlsr6a)h%k|+nRi+m^OHHxw5y&+)Lyrzy`{cbCXx$os z04SY?q&gD@Uurd&r$GxI)^+#>q+h*TFvuuvf3yG8Cr) zNmiIYa+vgtw!}{0i4C$U>}Sd96tbo(8z5lz6l51kz&N0BwcUS5mOxi!43xB*nNY`dzm!1|OO!wJd7}mF=HbHkFkfgMQHAl@ND9R5!Hq72RZ;Q*islXq0n#k9!`lvU(+I{Yot! zcp&?rD?}3qXBA&dtHYF`7925Xb&KdQI}ulYWq$>lk&6Vq0#Sub?t?T+G;>qQ?Wzc- z6M1bpYtdg_4|uKNnNzDkjDYg-PU787;h{iB4JxfEZ49U(z1RWy%3eXjhE|;mmfW2B z{$wIO)*C#(VyA_OAnmi4!Mr_dJ*;RI4onSDnr&J+8t<(SHL>@n_`Vk{i8_k2kNmf< z{&i)3`4TZO%e0>_yuv~*>73;q@VNynOkZ-7zB4f&R@X4{fE zp%$~lV=A^W6Kkq?8;P=4HQ}P#0M_4|Y8h9Vb3sW_5JiqlgQtqc5NwK`z-DsUsDr)a z23oJOvouq60CX6fcqjtHh9seB0~ag+PdBfFsl6#hek-ltXmD(sdQDH0EY)PQ(VAM- z3ot`{wvz_UT5q})@s!tBqY$iSrC5bZc^HaPa8+Ik$F5w8&7u_2fm^& z!Ox0qj=Li{-pFRTxTUHzMXADk**soV>9*W}>QdXbzqy`6eS4mS=YHNb&nW6a}p^1iSvwrxJ7$m{vf(QI8@VI?~ zK)p2-6xmZ^f8ZP1t~fy*jbs|uQ`0G-F~cvLWK6%1>q zMk*Mw3Ra57vXV|ft<$ufGN~o>O7%tY)eh$+QEfZE6Zf`6!`DS@HK}qVJE9SQftUie zeYn-Z3M-4#HqBN?+jJCL(%0pNLrl)NL);X^YXz}}U#kW2h(SCOARab|S5v*J!aK!G zVa?INm#{Y_3@W3+GmQc?If@*6LUl}!**u-+(waQy%bpvBxe+J~b^JMB_S~i{)qvvy zVQ9U3z~xu8?1<-)56jo%2U1wopew;|;G}k{D1=9TA{X<>jPK5%E4{AO!U=2%NkmE{ z)ublBB}dPeMC352@+p-^J-EzMfomQ~D@qjMRAEyO;x{XtD+nvB?)4WoErEUW!nvNX z!j&b3O<71iAajmOfI@ZTyOo*8F6|&i5A*p7GU(2vsUOVuAuP4DA$W>Z2BCF zqQ{xK;*kN<%ao2T9k`Z<7P{!TMOGk9r5k&5nHrsj?TLio(hi z*TFXB*9CW4AVLT+{&M`%Cxy%%zYS~#Kx>qrEC9E)E5E=zXOm3Bgz0m$pz1RRdxPA* zvhW^?QeLn9VsLBe95{+{UhQ7n!^4zYqZQ|NkCVIEcTn%HR}?Ik>5zsr3xYkdFoPpn z4oL#2nP8T`Q1!vP=1%QI3##ei*rmaok3^_W0#`H(!1J<&blUqSdiKlY%6_q?-MY0Y zVv#%J8NIVySh?H2AKQbS!63kPh`)A^vM-`^x>5!JUjiK7 zkucvJ7(>zKj6q|N03h-`4krbJ_ z%2eww6LUi$Cgr*nnG|UORUtL1`_ilGinj@e0j0DC#CA}z9j2gpF`;3SdZmErF12*a zwu~XyQxl6uY3uKiXoSwgfWdPOO$yS!d3jRj=oW#5FrLLPP1_< zxD^u^g6PXsYX#z(efgJ&QN`?@rpq|{GcMUBfsH2Y^3QeI(&eM-Fr#&Noxl#rkUi}t zT0s*LCiqPS7h*g&CIv)HjLrf&fEiqEp3kfmE*f!j(Kx%9j6ImOX1H<f!5uX-8P zzD6V@f~$>UWh<#g36$;MLJ>0DhZuaJ>zR}a`?ho0F#?HG0ME<=^2yc)JGntq4toUb zz-u!F8Ks7}dglkVa|(d_9!kn+%s$LL-$RMYY!9WM6$0oYiUS1^Yh31$4-XT-F>=2h zH0CBu0{BA&tG8Da6lhP#KvI-?GjP~GXacB`Os5vRN?A#US}=qBN13}!(H$|Ce#b2U zX-ZRR45fujo_K6UqZYv08R61Q>aj>79bo3HM=%WMv(O1L>i`k{n$gVZlf^8xB)}Z@ z)f0h~1tt@UiPcpmEWaDXJ}wOnX>BiqWu$D>aHs6P}=LD_O;Ep}MUwu%No^7NpvJ~X>K5mSu>OrbLX zh6`kUJc`o(ZQ~xS89GmHE4D;(sn)vO2$5ZBa6i_^M-LVzkEI|9ze+@?9?7b*Cojs* zen~rl4K?Suku?$TNpiHu2=^n>%xr^g7c+sV2~IGmu?erLFl@_y3w7t)-wV5JZ*`Rj zz4VGHF1!-T@Tcl0&m^X?Qlh=aVMxB84TB!o(1BAoCYPbGlTpf9UQ6r_XR?IBku+m) z9gVBVmKs8N$;X8@AtwUCOQo54rWh`WIctiu4QtWV8oedn*RT<^f)YQpS^^`xqxwMS zRF>G12#sN|MT;vjOylX1=<+L{ix^3FYfK>lUvfD6d+uP$x?zWX-lm*`NeG7>rli>o zL7YkXFix!wKd4tnD~6}bbiDzR3rZ#|^R5V}0L2;s&tp!f!w&WJKxT=i)O~-w)D2wS zq8o+;t4H3R7);J zoThrWN(Fvh2UmG4oIt$z!2fgJN2yQ)I=mxIMj)YKHFJVQP?2_rPvVI)teX&2Pz3%PTXdFbqIS!%8W4 z-bjpFm4{W8b!_j#d*PdTaA-w9R1QKV0L+)v+*18b`C`|qs#v=i5s&Q1*L18n)eeoTE)wadX)fn*6T|Y^^2{lP;G%blh(z!vuPezIB>P2PsUY~OrY_5 z;sT8(3LpV4q$FDoXwcc5(qK(!$E&n~YvP(alVQPER(b|OI0z}JvoBOchB~uKB!NzK zWz(XkvP+$L9@X!Me>E`A`vW!cJbW85HlNa|y;P~;py}Ksd+Jki9hJVp{UIm594_^- zYdAJ_eu`b`++-V`EKtEOVHybmB7alPX=!*P69HhWuC+;R8b2 zf6Qzfx*AzrZ5^vvJd_mJD+iWIwPB>S>9jE-ZkjcAT3rrL!J6m2UyUfY}O;~ z@GGIbN>6nLvnP&s;>su}8$8T!PMqN<28f-6^b6NcH^r(?{I7DK*w90UOG9m1Qb-G9 z(aQetV?dz`d^S1@zS8Q=1j-bJ6-e0=6bR>L!ZkcVbDiPEYpDY;-WpQxy)dwofp3|*f+RDDlZr=Q-$z{gb%r^??%`pWNxC=z9?9ZD>p zhnS66TW1Jt)FsxccPF(wew=_gsELi}eobdvRPU$fFd6|{Nsdi1x{^BsqeY!qbku*w zZ|=9#U1iItb6wRZnhuN&-p`i4>EP+H=yvfQE2+eKnoxkW9Kh6H3Y0Tw$oc83J>nXh z%6nydU>KJQZ<8k<0yKOH5G!PDT9dbxNrZlr0}t8+Hkf_O(OavdW8~_*ZR~;X>5xe- z7n#v`7~`D6>(i_mw4-CUtka;DWGh?@2^E5fOc8dVS>npf@^afaHG2rDbRocPuKFPPg`}D&(%zH7JGS)A{3npz@)0=&b>R6h4K( z*>B%tG1-iL!lp1GXHGAzcjOI*-T1V!{37MMX~0%hXm${<7PtBr>!kWa6O(ZsnrAm> z6W7YDgryPFh8GyJ!C6Xx$HtI0LBR>uIv!R#0)PYW&93|EQH_Hu%-_puDjUGTDKe$icVJrl*1eO}{=H&H)-}e8*rn4qZKJ@k9 z8pN>C2;~ZW#DKtsZpcS4^fI4ok&#!=**@9wP$tod2sNz0uQVLx(nUA~?*WsD543%i(7S*L+ z%3M>m*f55vXji`0y1iM`i3EbE3mZxWkw{6Ql?whUjyj@QvK(s5bkOz9?h`dsuC1l+wyl?V{V8;oR{8NSiz!>h&@C15aL)* z^E}g>n$Dz=iHCE{!m^d>S3h}{!0MxaY+I==+S&M>q*`gN6CM9h_}TtL3pnfan=EFK z|ISA1w>8^=UwjHI*+2m7OO|n1*LUGBpJT{U4KhpbnK6(99D%3=G|8*cmhQBM&&haO zQuBGPE7{<#bv{iXL&x*>F8);6rbASKH&0=_1ONxaV2?;NXwuc5`GO?TB3e6JK&x;f!G>uCco}!&H2HNm?*!+tdX7oG<^ZEno-o_R+6- z^G%$XB~Zllp$7%pi%3&|0>y?W!{7qH+BUKb!A?Reo0RAS;$VZdK25)opEjd!%3%Oz zL!X&~(9A5IaUGGM8krDV(B?`Udt8NC`9fnzycu#M!XCCGGQ?oOQKjh-uWH$P2w1Bg zCEj~II?q-0NEX?WVhx&4(RjVA)as?E6|);oHR4Ih*LM|ZM62$mZo`mpm$FQNDvV_O zDO1fNkeWVZ&<^D+j&&W%gN`N0DVnSOd5o7RyC(a{zcbO{chEjO5Mx-O4vI9<9@kd% z_f^ywA`~s2{F$DtP^tWhj+n6#z^TpIQ#@_|a>I_Dv3n11&ffD$zc)lVaPoO}C~UOe z-SSBVaw{xH*^#~6-!xvau^xwiNi~iu`9=A=sfz|kh&hphQK@;3B<^Ya#?q1o-UI83 ziGpPvj*Rb!Q4kBXI%Wb@!Z?`y8@~2Ct`sTQZFo|?rlA{5o>`W?&w@2>X0KzVnP99K zGNSB6K^VTO*gshea&pON(P+D<@$)sawLE3Oi&}e1O?7R=CK6{CoPZPc7sW=DU$19h z&B2lLcTAH#HfIM&%n2Npzu<#~?DO&k622HgxW~fwmhh$bP+pBf)=zz$CJ`d+c*^FO zFfTVXT(RM6-57uraVhU=*2zBiAM+tbjheG3^2-~CHKfoSj`VgVi>`~68uyP}j+k(c z9Lqim8@Rl#uv^s==>5{&VY}O0ba%+^5_{__E4fk*TmRibySrx5U7Zsf&)uCRC&0aB z6%6hk##WNy$AA&eFjJ#36cZW$_3vW^o9V+Paa|c~l1Iv}PQKUi|0@dxTn8`sguxWVRQNcUj)u@z7)2IP zLcpbEK4WDpqm$s~F?K)=5m04UAYD2To#9<%F0uzeZB@B`+Uy*=T>kFRRQA~qUAl{c zpZqC)*YI)U?8m;^n##V|(%t{?7(ah}^{zSH|BKIaF{0Z){%`oT!V2GiEc>x12X~Sh zT;;)C$Fj#iJ*aI^Wn;1r{23bLvh4K#$=Am?LFzHSf2-2|p@wGiq#-`^w}Vp|qJH2?YF zS1f6q4Q3Djr(BHtua@%8$HY6rm8~@RXuVi|MeG&-1{=#Cn4hH}{IV#F#&Uz%sryN* z)cs*x4!(wDRLxMyWD#QE-iqRtcmA%PTv( z6>U+$1JrH*gW5U;iBMvdb^d@0G?QQ0bm7g!Q{eXj#=Z8%gn}G}bSULrVlgRtdmV0z zY#DBf44-fOT@eo{-jblmrDvOXCrT(psUk)8*wXV9M1?!$Z~fa?YZUcHoOL;x+pHAl zHF7C~B&AA^=-SIAB?OI*)9_C&Zcjq=!I z;mWM*V~>U_7>)NngUhP-39ZCs|>2363PmO*A?ix|AcaDvacDAvFoy{#IB zO%b;@>g!021QJ(0()diTnDvJ%O!>qe^fsd+#sq1j^{*=-SJ{{%vE+wD+=2Bu$tqDs zRMk;f32~RH)Oq)KcH$5=qJnrb*>bkoQAAO3U65vCFKCi5IP?|I)#Akm=8u^>3U^o% zlHVe*;R{mmD==?e0voLK^k|fZy}|%P3dojesGF41E12LQr-55UQ>~!Fc-fM?3jAd& zRm!V~m*!P4i)N+Bsj#}VBkB(oyRVY6;;e&62qDl{N4{Gh8xuhgpaI>e0vMaG7>>QOxPot(^t= zb}Ac=g)%Jxh&aXW;lz4@jD|E~%OEcBuMxT(N~82mnKE~o)6Ss%Xls8}{sXYZ|KVJ| z>vQf;;nS?BL~(+{VVnYwkV`xkQ3-mM-SPEv(W3#jxL@`*%&Liz5P})5YxnSQ!v{Y! z{5Wh{!=%=-VbtMJqU0Cxrfm9q*h#%A)~sgle&98}+@PLa%s?M?IHb@Mhj|>!X0)vu z>$qvq|j`<^&?jVE(#(2 z96nvj(x)m(&5wW@WgvsGMiGHc%qn_OUp3iaOtBWJukSX=x>Xc`i#6F#D4g;h{$M7v zBxCHlP7m?{qK$ApXtm^S_T*=Hmpt5Zapoz+_d^5^OewPUW8TzHswtkAi*vEQgCorN zX-BjUjaf|#0+7zWb zqU-rJxSi}Pz052y#kOidPHgN+4Tm|-(O~y00uF>1aR zGEV4s87DsgDUB?PlR2g=W++YA?4*b9oEpFY{ppdN5KOk z`RbtHZs(^pZ)Rpqy(IXOAD5#(DZvRe5#sq(zgnqL-J1Ylqgaq3Vv_M_2x*H1Jx%yEun zKH;xJy_F9TW*`G3QUXJzDadO~oN{nAO}UjjNw$%N@`9IPJXh_*j{a@PQISR& z;tNVQ`67hHPS#@5c1qMldRaIyeXEFjEX~|tKxh2w4qqetVsVKUZe&k{%Lem7>v>&k zJEaE*Wa&uAM)oda_cx{uk?;WRv8!;I-EXp6In6#G78{kOZxG@#(FiDRKt+>_{5q}K zuauJXL`{9RXo|S`GELpKv?*^r4FG-CTGwt_4Wz8Z^w-#}Yhe1jc*FsX9O&^$Bx(%; zCz2TJ2W8ljD8S~%-AEp}-ak;)#&~$LwtE8P)8LBtIyQJ}`UVXk59^7`U?ze*FyzJW zLB8ClWS4&VlnPSe%-95y%0qj3mf4_AJb~HdP5I~pe?`7!6nslvFdpHR+^rnQzV99H z`)o8HTuJte$i2(uo)k_F#sKzbo+bD?G!T4E+&t)?;D&3E-&q8ncH%36r(*aOK$*W( z5pbH~_Wn>+rDHS9ibds?(yC|tfsDvORzxll`s&)-q(BDlq~wF0k=ZUm&46D{A|f9E zWt1jetb?WCg%#C9w5TCqD|?p=Le+MQKs9hrb3|07@mte}3cmBj;7&_ZONCUJ0E9Fc zb27?`(mLZzaS|Sa8x@+X%~2Onw|3i-2QdP%B{4!Jfr!#R*l+^^MeIN@DAHt90D|fm z-0!q_91ZeN1De*oRv%t~>cb0=1ST9=2-I9D|!tDclU1GZ_g z95CM3fXT~!SRs9Tr$lUEYyHL|I%aOJX|8ZAWxkDvgyNi#n#@M8NyrL%B4q^$gBf(P z<)wmc?UmB7!RcmIA?I=tUp(3^rW}M^mT*2tUSdI8{gFF{tQpiWUZ%IT1yc*`Mj)d4 zOdLC|K-ik>7o0l$4p?us{(Vi`c4HF)iE)jyP4aW$5%@g2)S{uPLtZ>lGS(yv0(Om6 z*>wmJJbQGKhDF@KIng)_k4Py1w#-a>7gE4~D+PdYC*?v4K)B8HzjBpglrBt026DHR z&(xy`OH=X=SInw(9wGhFoYLzxft+AST*QJL7V8twrSU3nK=C-+DbtSY^gsEFZdL) zI?*Bsu~l|Z$zllQ2^JlU08jvvMlLgB7SowQQBhl5m$%qoouPthG1&<|+EKxHUbXmI zHx26;CE@>kyv{a7)>rTmJQ!^0R9B03Q*cJ!jjv%Q4gOfCAv7hUKvvl)F7cm4(Xx}a z0M2tnF`CA-lwyRD^OzK6!J1r@n3geb@dTVA2?XGrV}U}|SO!C!7L`#-)nQaMpbxP} z(8`D&m~_5|EC&7<-c|qr9S4tV<_~OK7R8oCV>gLsg_}vZsklc1QNaKyfK_@^>EJjJ ztjo?qbDo~%Xfq}(g%eam!WMU+My^*?!cObilMRlpgAYuC30cU<+d`to31F|Em@~ib z7?WbM!RLCy**^Gv*)s321?DnOfI*Y?T}bCLFMpJd7!nmoWWw+1w>;Hgw_yK1oW12# zmE1SYz>@kS)M+~m8O5g*_6d{TO0hLCl!_lfrxC}foB{hp-K&cGEyZlSguYQ>?hrBY#^rWezTZg{Y z2R&Ek8G1HJS3>3Q_Mjg*C-fr@{fI-)etm*|FWqr=eZ*z-jP4- zb!7E9JF?n4vf4Yc+B>rPxpahG3ft+*bd~pMbzh&jI?sJt?S1<9y*^!d&OTk}eY(*5 zbfNd@!spqibalEWy&!#wckjZ!?s0XVyLX{??{WluIpyGE8T5hFLgmIC%qyZSq#i!e zLkOX1_XZYg90?d|MJ$RcyNl!9!w1SdUPk5l7)SbwDsUr%k znEUt@^NFlK=(##Q!up`>miC4aXtRTE&wE2z>rK#ria)rb3*)?=qO;y`S@fp&NZy6@ z<_fg7Q8N3<5Y&8DO;4w3+X8tk@A(4;jWt5LW)=ThR~F#?Qav6CEATJ}S=<>?4}gV4 zfv$e6?XJKwbw^~I)H}DWHe$&j)l{dA-$JZDq-fRUSgp)(aLkcSxa`6QQJ0+rdsFX> z9l9JrJD>?~?c~;%+64A-FEo#$ffRM)xiPxHYVu!N!@N?N&FE2Qj4_u9Y0?IX;*1Uk zvWt(gzbT%U-W|y9RDRd6GRRwVePyu@^@Ta!P(03x9>qsMwGLe@8)LiNHF;2E ziw`I}-71*Fw^P=OIJgen0Hc8v@8B)9|J>k~ZB#x6u8n?<=+6pIM6i1}pd5cp??Q^b z4z^D5Zk1AQdlk6!wqrw%+Vd$b^r^=yZ8%{AMRg2R7#Czu!np0zBo5L6^vumR)PdFd5Lc0B z>&SzNbR{$hFP@KYtKTDMG2#NkbwXH>pUid(le!W%9hEj!=`cXUKMVjEazQGQttrE- z4ZKK)=^7q8ta*3$g?(&4+4Ss51@T?05?7ZF)$E{gHTzNO`0Z37H`=}|I%VSvM=zI8 z+ZaS%6&GK(i&plJ3}@;Ey`hK#Uz&GAg|(T}Z)AV^`Oj$#Dp8X6S3E;nonz2t2w&Au zN*N|tGzmvFYhB!2D0gkw?F)Y=^gbf5|b5e!j`Mj|lNpmMGAv7Qx3 ziULh9Kw@EEfy&|nK-E`(Y|+q!)zHW^EP|1wmtbcxn@D9kP&mRa0IJLrr;EoHg#LE84L2G*(<^HA-Xc9Hv*sEmTSkg*@}KC(kM?d6q%fJkv(K z0)cD-H)96{=6tg!zM%OfrZ~rH+Y?RaYKHU780!pA*)-oFyOqxw*{!?m*2YlkNzK~4 z(Qa+XUwjF-ZnInY+>T}gZ&I#P1>PbS11y@N5(Mx4(;Nb(sFs1i>+XZV>&_wYy3v{_ zd$01LqEk#oEmNiUpsz}Ar97SKjpS2f-iS|@WM2T}_J305SJhWKyOKc<k5f$}zI zu8B0CFm53e5Fpm{><`DjXAOfnpPrQ@$uH_wvX|RnP$%kej*eMxfA0CYt}Mq^fIS8SYaRL6&oa!V6m?+8%{ck_te0C<~WE0?h0k zu{Tt*pwNY-lPj6Vrh%1SHl1geqi-RmC{dj!D6MBx1fn%xsKbDCw-N3(bhnr*l);xT zXVY^nv>=?u3?B;Jf-QM^3^6cBTYygh#K4En*i(Eo%@8VK%tWBq3r)x6JfGCl!B1pk1ELg!>z;j^% zx+Wbl$nqSSbH%oTS>>x$$lF4(LYC#8;Y$(VT>e>A&)C3mx%X;%2ELYihHHgpUjA7_ z&&YaXJkf*G&PV1f@;ST=r6$>gDyuZBjCKN8PBHuvfUGE zX^UwF@5FyU z)EUvR3tgPgxM>GC)uP~ZsRGK`FqqDW4Vj9E4O=+vL+cz-4=|_Lg3vl%17fhPjuC}G zhEh`KOTEjKB*YQ+>9W*`lCYtt7TeUg&`@oNxjfw&ptJIH#aSeVum)Yf2IRjFi%Dph zEl1Rdu)vvfN~IVSC~8sc(1Zp$2Qa4_b0BGxIUrx`q|8Ou3rgD)jnxq$i=h@f6;Q8O z4r)!YI@AMG&U9sY5Y*0a)@6<)5!3^HP!BH)wTWC1h5+?&4)yS2sDV*D#oi6O)*)!1 zt>KnXVj;1Dx-gHhGN_07oUI)L+7S1M` zr`kfoBjt{rOLu8!w2c%Q)G}AoYpE+c&cgB?@|Y6UfHJZvQNBjB%PR^KgH4DDMU_4F zCn$W|`31dDx{~aCSkGh(V1ioqDP5T(EYHTS>=`VYeYvOw_RO9tuKJ&;h2q)iDl?Vx z!#ML2=Hv$sNo6#FvBjs_nm}_U=8trnXS>khR?L4{4flS7<;CgTL#^x!46NmEC`ee_ zy$%s!nooODy?R(KSaO&}W{V49Snx}lnUb`XT8JDDE8xKXgo~vUcYFH9?L$MM9UZo`N0Z-zlfHJVHfPRuMj$buUO3|)cftrkUJu9VXTLi0a zDcU(?%8ztGy-Js6aNbaK@U(jg@M?s~ z$8=BWMr_E}J&~cpy&;u_AVgH)Ka8(D$CjSQ+4lA?Hd=qI{o+thD7a)awbcaF!Y)gP zQJ@SxzRtOh%@ZBHE5~~nEo58LSh6KUbUKG>!v&B&3}>FVw9LH;Rf!6x_>i8*LG{pC zK4~>&a@>uB`7E?*Q4g)1S3R@Ve;rE<9^}vI-X+=$Y?9^|4e#`xo z8`PiX>66{|Seu2(>l2@C+<%gTl}{1?$KMtOl$QxC z1hhmOrpM!!V3P4wcp55@wOzL{*?<_QttRVd#-5HJR4vkkn5uwWVPGt>P&(0Z8CD4} zWfoHH5ua5;Lpb!7|Fu zO6Ch!Yp0miFqXl9qeN4#DO#`4TuD?@Ar zc0yBRt8HiuE)b=P38MDZ(caUXxmAhcNNx+|w%}=k6`ao9I5!|t5TITK0UIfZy|ah~ zHIzvh`oXAeHAE*Xs(fij%|je?GUok7qMrVNU;ogboOyEijZ`F>(sBAHS<9ciL5@1- zUJWM{sZ6;s=bIciudfY7~Dt@nd^!^mr3La~~VO-9}hwg?0CqHW&zS`)r3g>D8cPQ@MHynDlcAuQ;^Zsp5q6*B2{1TUMi`3Aqhzej7~;=A z`gHw4RMhXi>qio{xVj;-e@{Npxj;+a+hd=3>#rs3suu2lP4`)THgHL0Yj@SyOHPhm z_Xdtj)%7)0B1Oi(_8YYFo5$Zl_g6iFL27@fa{)J^JHS4nmWAx}@35rpQhIQ~kGmt0 z9%j0J)gyZL1wCUigm&4Y;*HvAjIF6Isif#)Z-FMbwemwZ{LmlYQvdxYPu=k2kgNoI z8l#rfx3B->|N9UB_ni-_d;jiCpWPBk$8AI!9mNG`6en71@QY%*Pyw%dQeKtS7ttpv>#=tqj*S`Z)Ix=zD+eqiU! zr&8&$_@rJ~saLdl8q}sda{}f`5s>xKRvlyaFvhO20oNE;2NwC>di&A3Ih5{bGzfCa zf+@@}h&D$b=)cOShDO9NB!X-QBCE_7aiGAlT$3oqLQ;g<95|a^mBXfe{||RoaKEZ& z)Wo3Gj1Ui>W?L#It5Y^1CchP^aE0*_U|&W;a-XW{3bobKqBh9uYnru!5_1y*KwOE;UZ_cgD2kcRO9T51$9)lv@ojJd>7#YOmH2b zQ^<+a>Cg&;HoK}CpnEW9wmms}Dx!a@&&#s;-h+h0co*CVS1Yxv1j|OimO`D5DcLOr zW3gN04!CJo?x;+=!`er#7({`M06Tf7&rXb@gHqk*|A7!ZS{o?Z9-8ma_JPtk^gL{b z9VV!Bya6}mmRo27@6uzK3Kl36(y;}v2(8lbaWyjXNS{Ns9Jvr15+>Pu)l?Xm*`#n? z9yM5DRE_f@<`GC*qQQZVc8zt~5xre^8Po%eZH;EA$?d6`6sX9y_)dRH2}50`6e0{w z&zjS0A2@;>kJ-)Z50kS6#+31ie(hjX3&9Mdrwqv>JGBC8g>gKr2X*{TEVle zsGEx5nfZV}vq%O4_gqQ>=|X!W+3Ko%MZW#CN7ffmy_2(7Pd5$g*5*x!E73(G&RAibS%4`3OLNzr%1mV zwptZ+c{`)8`ulLkZ>Z7l?OCpvmu%uKVXdLIUM%zMTfW>Zdslc>q(U4af4nuPd z@G)_oWZ;H6l3nYBl zZH~l&K{MS1D{{CSv&a^c1<`F;DEN!`oW3xs!akm|3Fb>ZCL@Zpfm4np&Nm|0jc;a) zQ|$-O!NJ!kOn0)Dwp;mg`iFZWmsDq3Q{-AJ(rJrRD)vzNP=drZCyL4&%^9m(6DvVM zVyC?g-U!6-sHVDB0xU1^5Idk2sSc76rh^RpfRU+rr#Q9POro~a)&n!DhD}9wi25jj z9qoM)8yO@hcHo}cj#Ve$xgp*o-WGDvXQGGj00UJ8EiEcqq7#t;(E=!j;IRjUA|cs; zf|K-?AjeBOrawDbFA-_lSLoHl9%}KOgg2p9oQp#3N3E?}#R%r8rHE|-YjB&IK<5ax zIU*~DNO|ti%C^Djp^@5YBVZErH64$Na|(~zXiN&joZc!YNf;`bBMGQvP<~pd)Cj?} z#!^(eC?we__EdsvDTg3QRRLbuy|eKk?DqAB_5&^O-ekv5G@9g9n6?mwdn>rZ+uoM0 zeCVUye!m6mE^=iMaCtZ)-&v`i);kk|S@EJx2-0LlQpb_cVnmh>MW$al6@&`?5{VF> zxDpxMr4FDTIp@aMN!c$+)|3tuUqDEE3%4Xe>!Q4vsHPDh+{d8XxgRDdfOasZO z0upGb-U&;@qf|DnobjRdnY4L-cOcNCpfDLe+G{2qc%*Byq&86!x`qhh>qy7hqR?fl ziXCN%dJA8O$jWt3IW>%}c*BZSuI;c{) zJJz3;5|SXH?ePE)kTM?{(w=p244q)RD>Vdd;4$1h2_1nF^YH765U!OYD{9oU&$8{E zJe|6qXk>on*R&O$p*p+=Bt1;_*qaF@sz=ydrnpM0CJ{-_yU;|)53dj;0zI`HJq@9U zUE6>f?-Nbs=Uo zF?JkP$JvZn2gaI)^j@=`u;%MR1udS=%YBLK*u$TR_EbkxW-n-qKH-f?>q2mxD%e#8 zPIa65y8q3ODC9+CGJ7JLq2uvF_Bd;b4)+d67E@(bNb6<+Y^VkFQjzMua)qP24-eUEfHJhO|8uZtI$?1bp@>CHa^CpPnao7X` zC=LUidH=JQ<0G@VDc4)2or~x*8z>gPS<}Bkxx7ll=}NROKHg0j%uSu)x1AkCY7d)I zD6UEoE;|{ z-{L2AH+YYHkCm~gg+IfkvYg0U(7E$0?Dyl3R9P1GkK%A6RufwSo#}{;zyUxy8VXrM zV@OU?ZnA|(#kE7->3v&~_f$pBz>frsv7@AmOa}y&zP58Kplye`@g?jy!Q-%(A>;-+ z@syn^p`>qrr9p*cL((r3T3`_Y6mr&KsqKH11X-T=_r~RSa+?>pjo0Dhd{YR+l02k{y~*j1W)jBKJt(U!HsCK4t@c}WtB(AyaGZ=hWUb#OMW2iI zR}~z$jm%$DAOh9J_{RkfSj0;jUsi!YvR$JKTGXxXpls-`;q*az5|$E#Jy#%|PE=b| zm2xl3s4}jt3XjyShvmBKy}CnU|6WId*X=-x5*@X}nAD)9mL4e<*PjDU5MxQ@yUvA! zOrgfbSjcNy4h0JZm|!#D5+)GE905){TL2QbzlV4M^+SsV3+jMkRc=oWy_NQVOwMcO}r2Hk89)L?cY4;blqDZj{0|NI|e)U$dX znZqmCn7m(e2dHBXSSY{Z7uomQE3K^BG0lLo+elOF;Iu(XYDct&FVf1}u0^%nhV7QM z+=h~j>#|R?4@)9WirC%|wXU#%okUt^aR`c~^oZ?sbawfT6xzV%E!po8b@s!|N!HsD znTFmG$*1Fx^~-3fVvqOmtA0r|wmtf09$n6xmqf2qsIRUKf$G``CRC$au!2;3`wIf@ z@d!K4Km(Oz2U_xDtNl1sh=VvQFwhUi;!v!TF{%VCYOgh}RRFQd@>o>19pz@$L5q(R zXyoXn4hP9 zJLc_Q$GsivYm!m)bElF;ou~r#G?k}q=(Q0g-X7b~V^o#s7j~hC_otA>iX2ZrN1&~( zVUSUFdhb^F>+a#H@^0_4D`8i9Yk;B|4F|`KD?GO)V6nyUKLfBHUW_f%UtkJ9%Q0me z_Ai5}iZBHSE!wYNC}P=rK$N~q+v1lHW%WCvau3%Lb)#!&#s@A32sIkhsbA56)=nJC zwj4f_#tddto>ef<(g%`k1VqEDr>jcvwaAn0KNnf{hR)zF{U^3{*0sQtsiq;#V#Gvo zWq_-yVGRiie6?+}S+)u#J(8S@i%?0Nm@VZxpezlAD>*;1t2s`qXbt;NtYaR)US&#} z!5letsrESLoxx&}4f{ju5^Tb##Ex4X-SE104c8Oq*A$Z~ z!wro)w02&=s1#pH>M`}%YYFc|FIi&QGIjEJh%_OsXtJRDk_yfJD1(l>t5g=|F$UTn zs}ULn8?50#2S8|4WNV$$Ta@CV1h$rfrIeNcahsj^)!IiNU|pG2;^2~eMg&e1Pt10< zKs_08Mdc>!mkBu=m_g<%r2)RygEPL?nvv13W>>k71Ll$A`YLe;*&noshhS8e83v`z z7i&I-_%fF|k|jYEDG^OMX9h38)qM5DAVyY(F)XIYFDu1UXit{1T^=mh*gbdCn(&kA zXCgw4qPnHhs(y@?ZkNx^+Q@SvT(Zv!+N8P+d~Pb<_t*PXtph*^+1Q>{jW!bqGa$cE znw>#(-p?SOGV=~Fu6DII{wBSX0%RF>eUjVyHN;W@QX17O(pwd`3p3yYVlOt{Rr=9@ z+-`87>e9Fqp6oORB?#(lrKZ@(o>>I`!m)%^^d12jJ?ZUbKR~?zqI3!|FW4vRQNqW6 zF+14^QybaYEAA^4QM5O^M{Mp;Y{>s7; zl#xJ8MG5b zFg>$A;e>7+8s_Dv=k1{Qw0!u5C`{e)m(1ft>vFphi~4NMS?2C--W`HcouXkhzQk#Z?jg#k-r zqk*|mP6Gz5(lKU;m|)?D(SU8FEEiie;CK1BbXYE@0SU6G1gF7y>VPQlj2$ovyciw$ zVC-X-XQRL~VqYV5u+PypicEyVuNPxIYihQ&gmz@(8%6uiC52j8rEz)5Ss3--=1-!P zRy5aHI%VvAhv2E$)SKLtWBi+`xO-|zTjkIVN zy1t;FLvqfDpUw|56n7IWha(yLtN!a6!tl$ZohcJ51YN*`PpGv{6dXZ-F-Kl9nwgGa zlP|IW!B0S41sO8&sb>QcA5F`k5C-)d=2S?{?xSuS9y(DxO-qT2cv^@I{#m6stU~RM z24Te&9O{}E-_~+QRIPi5xD95TH$`i^OuDXCE(?PhidQ@G9&81_PH*aPP>nesmJ2lq z1uztvXt7CRi(zV8xLW(|mgS>eik0?(fxv00WEwxSur9iYoD638QDSxiE-t*nj1^fV z-|N4o!Y%40-5+=H}c)I>16oixIw{4uHtM4hZsF1oZA>Ol}6Sgdkfg0Jia&EkTGu1O1h& zjxEHOb{V(`Qo(RoZg>S|a~Ba%8xVOq^8^uxK$B@kn%^~;GM z<@{=&FJsC_v`c)lEa{D5|L(HFgx1)fC-W)3ZW+rA}7UPR=7~I#CYu?qX`32$N zrgEjP4wbGyAK>mR*L-8I<`)F+4dqH-6)I&LmKToQv2x8>ujUs7?r6EvSB6T-uzTU) zetWs*SM+LrLEv6ruJpQ4={KDZaCekzzP4BM3j+6=a;4itrNp9NICift*L+p4<`)F+ zwsNIchDt9yAK+e5uKDs_%`XVtt>sF$gi2q+C=;{OB|&7S`?_rKs11YoF+J6Jog@A> zwyegQU~q0@8F;ihy^WJCnfJieye(~6r6V#KDC8$1tuS_ka!c zT0FW9&r0ENOGn@_?j259H zR+mEmY&?`(3+3uyEr#guG94N$IyB%NGO%|IuUgyzlDt+2lo8MmD7ynV9A$fi%?g;~ zE9u;RP6RfK_8KJwD(fRh;2i}5b$1yA-mwe-h%Ezm_Sl*g(8Qu;lpVTp7GS}LQkpH z*Y&r`diA0fO6J|ARd-((w;CGkk_Vh~NCJ3tCg&+*q@J{VI36+wa`oh88 zP_Fr9y_#PTxZQH4olq(1%}c?3zI02=HD4U)M$LWTKHo}TTCVh)L#43sQgELy-PV_D zUKbES&3)iL-%2kkSNct%QkF8laB$a_Yre2o^9us^CFM#l2$iz_{)L0Prd;#tUd=BE z+*RdDSB6R%xV><2+vS=^dNscwa95No9S)T;%k)2%lS7A}hm#X8_ynk+dVPbys`Se$WdX89%z|^3B(7-fHh~wRivQ+{EU&`6yZ&wWEEs)#Wq7C+4Gn zZ{m~xeg|dr`@7O8dLO?Neh>2bV7UMKJ8ryv%fgYPTNdUf?i`<<9G{<+w?b&_%V2;nf zZ%-xeSV0`jGdSLSI$%XXb z?D3fc6b=t(jvv{_OAE8J=`_T;^6Z{K{GN0CO;Y0lrkBad{)H{WF5Wcn2hLfV`H~EO)^6U5V zdvodf7x?{6rR)EV-y2HTpXB#T_m4rwb>FN$9iE?^xf5g@8DCg{DD-SawQUf+ zjIty?NBQ*?{C*vuJ0|8PA>4P5@0*_312T4km6`D)6Gz7v4lRE6+R2%zX+DeZ-!M4` zE6>i|w|^G)m|2)#T;SH(16HvpBebic;-v%m+v2Uc8RT|C+_)p9rinS^{rJq>#Q6S0 zf-v1rP3J?Y%}>l7n7C8uLalAxe9h&i*SIU``v-7#7r40&H7fk(*ROzut}k6*$@M7L zXqmlx_w7BncV_S0-UV*(FXy&3{Fa95=`PnT_Z*s~JNu3wJUB7;{#rX)Pniq(NHczd z>u*%U%r6`;{W3Yb<;d&-^(KlQqrP2y|1|v(w~9lh1tbk>b1ffn^|<6Huui%#H!cZ1 za&&s)2$UF?s!Hc37LL!&K$Gzqr&4;)AvE#Ap$VvTU}A3iKDbUoKQVp;Rd4{I1RuB6 z+tC}SKZj!*YDqXbJ~MIeQ8%`sp z&+kMFnI#ckrDgRIeh)O-(IlVad`|KCSA3{tdVZ4xVSdx>ru~~XP29VG`uKr~P4f%m zGY7`!4)9cpY17=M1DiHU8aK_(Oy76YjoA&<*wfD98EF}P0*L8}apZYsVMofnA-n-; zGZr?FA77ZImy`R)r|%iRZ+>QiF3`lL{j*1osLko=c_Vc$jFS`d69*=dX^F`6o7Wg z8Qds(sBecR4;+BOXJ;nnair)J@-a=nRKbCX`J-|ZAm`-WJef%6Crs_mZ%$vnY5e8s zA<%GW^6o>JKHiwcr?_u7bOh#k-tILhJ2-oM;pp)NH}kJTe5lua55QA5r2u(l{^<1h zePDWSV*dE_!es{e_yI7V2IEOhm}Y>RJ!qXv#XT~l*mj67rv}=&SEEOp)19jQ-f_t} z_2u<+w_VXqk4%iu2s`Qgp$U-XZ*?d1NL|}E0cQ3atOquyw;!LG5yt%aJ(Ik!fBZN& zvj*qqXZKIi`~ioGHuL`9C+M)_=F;6Wxo{{A&Q7|KQsZFx;5dC1FWo(dRuMK-rATLP z1H?(cgYM1VGk?itsl5}pI-N(mOdgyRYfjGsn^nJXXmTEYG`@e;?ptojZoOf*AwPZ1 z9lLJ@QS%EE;|GL5$sll!tKHY`x@Fg%*Gdq8=qOO?Ibc|s9{t|-snl7Q8EeFuV{>{} zA;xzF;+Xn1c2om$SW~J#GKm?zOt8^q2;uxJ>xmT3Uzg4T`P@B|^5+m%m4LN^eN~C? zxar1QUp+B1p+Nz9*rhhzIKFRwcKZ0j#3i9)#+arha$en>j@_423~q8qJ{1?tO-!SH zPEeiUM6d2cS|l1MQ;F5geqrIJ%{PqCOioOvHynrYu0LQGqX)QP@bc|jH*ed#b&tpr z2#Bm6k(QY_u=#wLiuvjBeVf$C)n+Mh+p!7H)h~%w47a0yfe!l9ird)y`b`Wmf zA9-rxzViXBjohALU>5y4@a&`AZ{zbaKIhY?cq#SeKE%cRPWg2ByjVWOJ65<4v6XN6 zGPw`2*sqdIx>tqNA3(S$TODZ|Z1Q!!Q5;|`p3}%}8*ORi_Pcyu&S%}5wrxGK?oC(f z&$ey)r9a!Q&@cVjcDa7(&$g@eOMkXqrC<89?MnU9pKaUqYx|M&!8peHA&|1|a(TX#(A_+Nv*|m>=l4%e_TE{~ zI~r=`b-bVJ6{YK63fD{P?97eN+^vw{{GAr(>DBp3-cdj)uk)|D7FqM_OW`98Df8>E zaJ`P}@r87HVjR~OZ#s9MaAYn}v=?0uExO*owb=T(!yuu95avhD9rp-ddJlmNxh&#`108%=g~yK1 z`nCJis_!V5p3bX9o1ph3#mj1n18!g6q$@zN+**W=uX-y57X~ zb*1YExGwYd2e{tM^H&Ah@zeAYx1&q=yuP5Jp7frH2My=;=kmU1GKqHkiaW+nOw3Qu zE?AJ^wX?HR(|r2MUdGj{4vo+4x4XUi$tQ_!Hvx4q)nmb=kKi4X>L8pj7s649XrvEw z`O!oO^XBChU_KxEZ~PF!jM=&I`N{oLIMLhlc+1Seao2(08?bA^G**WbVB`rTZcehuxtWzqFda4p>kDIf?27$rE4F0e5nfikZ7Jt2%csUT{?>)e@ zkG8%K80329*N=0(x^z8;JjyN1pMQnt;(`47zi=)4o?rjvqW6b+U!lqT`4+C_x8&FC zd(~I}w{a~Q$)8`a=>3bhF1NofT!)FN`9lQJi3RnG)IkD96GsRfO=9_QW^dS;<@G1L zFCCFzpXOTaznC;QijYnm*gJl7(uV;XUh4K$xD>AbxyjEbfKT$X1Kh}7<=0>4_w}Xg zT)y(>xqRig{WxXIyjG#VybuD33_zJAelw&?mgu18Dne+Sp=xPCG4F*!r@8BBaCZAW`) zT^5<9c`^A9u=;YMIi6cSgyFT>aM_a6mdcy*`X%$5D7pcWk`m#X#!3&EOeQ?|Yf!RC+=>J--(H z%h&3cY)~=w-=MMoCm8$xQT4?DF}JxX?R+Qgej79r&GYLkxHi8sJQq#n)926M!?kov ze*Mvk)BL&GiTu6av^R8&+{RA{JJXk=7WSg5F&sFYMxl&GMnsHmt| zSeR&3RA^LGRH&#}SXij2sHCW~Bo%=bzbKl+TS?lLo zm-E`gFf$CB`Lp-_?#*<^pKpPt?KRCckN3tml4BnCk8rMZ`@gRVKejeId6rwB_G;#> zx%M>ab`$;g7dtyQv$2^zv#Yn;V6O9c7L?iR&HwgmXJT67XzoX!e*Q<_ar60um3ZUE za&L}3j^VhS`+7I0_wzv5d}Q+ivy7v@oc2@y?tINwA+AjZ^b#KAKbB97h26Xzua&Ob zyNchdeXje@uh-TjvONpyOr5vD&%$lo%yqhM<63URekS|pN%nI^P=6X^+pe&Lba`2X^brBBvg=EdE| z*}Q1;&Huo>IBSy40bG}NcjxMu(vzIaL!3)8oNuo9^3nSoh5IG*ieYE+&-FMA!F?u; zPMSQ`arV*khcbD`O8-!lx`n$uLr=U@BEv9Cqrfm0_>w@oB`kDY%f(}P&hXG@y+JNbwC$X=Ih>67E@wtUboaHaj%%g#D_w_FRQT=&7ApNHF` zB{t(q>^~{NP8`!QiD{`!+sV+$sU3fP9o@&4Q2*)cj`QqB|JAZC`|ZVOviAqfwvP7+c52W6XOO*5u-E3;%e~!3QW8y}GUoL(P9LT`(&taM z8=1~Z;u(o-*)ejoV^bKGWU;+WTo4=haXtU>ADnAju4%KTT``S6xhou3d&Q*5BT|#t z>>^>B^KWn-w_`t}-Dmrm{?7L^t=yK)H`{qKvDaDGbmO0<%a3!e{&anP0n;HJE`J&C zOS*NKo}kxt*X8fi>-yjEv*`89t)hqXwP_Fc{Q~ZbYkCv+)xX2^R;DlOFuj}UfDY4p znLew-^m|O(XCK$~#qhJ*@(b7WV5aT;s^c^1^(?ou-=+Vc2wQD1nb#XzsK;B}(JTZ_ zOJWlm-iiMm4@1i2$;plxXh%=y<6zH`r;+`0{cYK*O8e)UzSlWxhw}tuB?%&_?*mc;*J?zSV+{pd5N#ktu zUi*oT&R-+(U%jr4;(XWZ{Ald0?@8b^X`JIF^XPThHU8gTub77i@iuD|e-njbk&0p_3;$FUQIQ#~V23t88MbUGuT)9_O4q`u*dX9?N!G366Je#|9-#;C#o` zbogbv9_wVjrnA|ymSq=?cLmP33yx{q$adJ&VUrS_7{Vr(ObnZ9aJ)Hi-U-+BO=Plv z+Q`wV$+P;TM%kKY$Gb^ewe0xky4)nD?DgNC`|R)QR4QiPEV;_tZ6j?V`+Kmke6n&*lKUKj#UTt!r;(-I>jR!^VtZiaYoyx9^%~AH)Cd=e>lh zoy)iT@Jl<3?{iHDF@0u->Df$Q(P4TK(_K1DA7r{$hv_4Ky8H<|m)f!f*Y%&wbjRzn z_XZbr_7dR-ZOMb92%zw6uYlc38l z>mJyxYnOmaJ9i58zvSYJ{Qk%-d^)S(g_Q>n&A+c{*M|)?_0=2JzPYOCjjE5fK413Q z18JLI-15rC#fzSK>xoBREm^mGeah<<<@wo9-ajwnsYe%1J^bv?bze9C_VNBte|os| z+s}V&{p_(HzW?>hos}&g^bF(I7 zPMnlJ`PSqak58F1bN15dapQ+aj=rbQuw`E@*|F)!ySumVJMi`wZ7+S}`mFVzo<=*? zx9~vl&-HhnjsI~5axUNOc$vpLTxJ?iE~A*)c;$Bdv%dlB37YJf0Uc)_z5XYebY1_n zn3Xgj%3>2Uj) zYx-uUZ9a8PKf!c(hv`zL?Rs5b-@>$g-u>tIM0|4dzmYdn_JPyCYga}ECHRN+w$=Tv z@9lAd^Lg7feIwJ||MI$=zY+gVz5Rpjsx;}mwqy6@1-_T7_vDPc?|lAe><-WS&JVf?H+Z|*`>`TAn_Sbc;4?Z*ufykdm|l;2(%*SM z|Ga+JE9@WF??!1$i~-}OPUF3ZbF+*n#w4(!WyA=3q@5r2Sd741yD{U&b{LH5dfs`C zpMecGM>~EY*meH%uJcFmNikv8h%qCb?>1atxB1!eeIrKBu=f=9&-MGu$1(O@w~ib& zZqne9Q&WaJHWf*n%Cb-HhU>C+T`!Vm*l91}0J7_OnWoyePvF~e0l7X0F2c@@PevU5 ziCp(sk-E#Yg0*ug}!v68{>u3e1(avEO z(?-o2F)o2+iEQ;eGHrx@0?taEoH{c3=(Ig6Pjg$x@6B%P8<86T5mKa}INSIT62pJ)GE_qQ0^>%7gkRu;GWG!>HV z?8*MQE^B{__RlqKf7^fcw`qTi|L*&rzw>W__j0byz#Ok3zBhTh+2?_Qp3ZeS|NI=^ z$?@QK*wpmzynFgnJ@(YQmiuSVyEoIx^w0Otv2CtnHqys)UNWX%dCm3L59t%@&$g4( zr;WQW(am)|gLOTwX?xDPoLtlPKE!UvHEn-C_FC$i-iN!;Ki?16U!U#;FN;_HFFaC5 z|F-#U9trn$e7+gL{rl_3$~EWPi}sanuFFU2@~&xntq&sCbSyrP98W_%?0M+V8?idZ zZcVe%Y_3PaF?h+wp-tx#f@5r#n_EdAZ^!#z*Y(!Ik)b;-R0IIB|5+)E>RqXk5EiNSw%daYsM*#EoI8pl#yk_)~I= z>&voeZrk4DU-dWNhpBwna{ggXoz}qZCUJW)WRHz&Iu4)mr|CeZ|Ns8^qvJNIX%Wul z2Y=`Mk~(uT<9eO*NH(`;^YA8KXze|@YkD)&mvor6?Qkz-`hV+w1@w2`uh+QE?&O+& z6Nhw|-eCUIw0#D1U49ep{HJOATX22d-Y3}mJ=b(S?s$7gnC^IcO-$SS71!l$+Ma)1 z)9>T|srQf0?a)}6lR7euZKSX1*~>Xrgk_d-u5Hp> z+)|=rA3CF1&Ch~reu?_P>lh^9xMJr6_`mtS{=fRYyPlg`Zgzeax6gb2-)C4zTV-RU05c?ba^N|2J1s9lh<{e9ynLma3Y|{j0TTCoYVep0k=430{b{; zzZ3fx!g*%4NJ(ZZFMt0)HourYagu*`+iYd>^s!0K^X=_*B$wq~i(53OHnZKysV&-a zO(*HPT=&iXSk5QcbThWMt*+^lxZ#_a9>A{VZex>w$Adn~v6Rm3L(X^2jCI)YGjMAE zTu&;t7-b}lqS0iJhdr~|B7w1#MB`{Y+1r=PI=MN9-P)p{No0!(?B&fqZcin9fq9Vo zWKV0;X$H+CUdxWIrtO3KQa_5I{xpCFQX~zcn`toF?L~1qgocvMOVM---AcpBZZC$@ z+vs+>gJS7Ux{LCUXZQ&<;3M=AeN2t?30=-@e9Gx()I^`t7xX3B9!vBpVWR8TFtb;@Hw|J?Sd4ApuuY2wh7yB;b0wj%=uq4F|fBdQ&*vM19GI4Mk8t z8bCJmCXxoyV7i%xP!tWLp>zvH({Q?#Zlf5oAx5{;ofJ!V(_M5A#nA}5mqt=NjiynQ zNC`BS#?UxQq6svfCQ>p@rb#q~QfL}YrRkJPGie6>!LRc^PG?a%+2-R9&}_25i)qyF zI81Xn?;)B;nH0l$S)4vhx8pk~8$U(|$@ZyvH!Z{qC?1cdAMrR&lju2|N4@c6no9mO zofdI^0WG1$w3G@dgRd2Fx}4_Xm7Ern4KFO=^mTd^KSrhaO0PR&_viz9pX%sC+E4qao(|9x zbeIm&5o(~1=_C4t8tF6ols=~>`jWn&uc(>6p|9yX`kub+aBAoMK&|vNZKj{8jeezH z=r?MoKj?RI=P`4mb-#?L3 zXb#^$->!omr6(zeUS00|=w8feF4K>5`U*XZpP|?AD87Fsr}<1z!Y^|AG9}<;oNnW5 zD>z-n>1&)uaNDameS`YrwPwCnLbeIZI@-jt$SItr&@`G#Gie6>M!(Y^^gR{RO0wNM zyiV1$hu)@D^aj4(+2lIzapBAl1`hIz&gPfj*{> z=o4zB&*)S7oSNuM`hvcqX8MM{Cj0sA_hmny{XTxC2g!B6>@l;)ay7NlPxKxAO25$k zluolL+Jo0Xx|N1g4BbYz(;XB`chX&SH^tFCbT5sdV7iiQI9-Mxf5)7L&>Vah3m;Sp$VhjbR#{)WpCm%ochpQru%Z5$>}`mha;#z4WNN!i&Je8sx3C1&t(R4 z8bw2BC=DZTI+M;KyKiT6>O*$l&f)Z2I*)wme7b-xBtN={E+)HgmvHJ&oyhK6XHH%B z?NS^-U8pN{qd@9TmyzAK%Q+1q+r>&xx`N!uosOg9$%9Uy6X_)Kq?73sI+eWWG&-Hm zppg_$qv>I8W0X!4IZdFkG=|1e5>24-G?9{NGEJf>ltR;JDov+Unn^Qg7NybsbRW&8 zbh6#UJV0|OgC3(t>2b=YC+P`VKsodjEu^O@m!73(=sC)x7wCC2-RIR#6GPNpH|w2O99HSMOiX%AJ?WBe(j=Np zDKv$q(lkn?=`@38QX0)78=`YRrPFMBfF7g_nnMrKT*{<*G@q`dUUU_O(A9JeT}z>K z9ocSuZlEygO}3iGcHqX_Cx185*c(jdB-22&Ibp`kR4qUjd8m4;Ic-A1>Q zjY)Q=_nG(AJlQXV}=&(jN(PcPC-^fDFDB3evK zsF0S@GFnbWw1QrtSE-m*(rffOmC!1BgWjZ4T1{(cEtSzaT2C8k6K$rHSDBY+DovwQ znoculCZ*9Vx{vOsbec^M(1VmgbLb(OOPMr}=F`KJMUT*<^cZE+73{y+kil0WG4%w1f(2DJ`SrR75N26?&D5X(hczuTu%FqBrPG zDy7x5hSpLUt)um{fy!wkZKBQ8b~evd^b7q;?erV9(6{s*eNV0Q1D(ZlS1p8A5$ZJLZ8xS)I^`t7xX1H(^vF0eM2quEqzDdQ!D*IKhjUsMnBUp^c($7 zf6#0`XN=~v$#zcNSw3a!$B(Du=mhehljuY`nLO!KI)zRnFFJ!xr!&c$&Ze{I9P**_ z=v+FVeCa~EfG#3Gx`ZyKPUKIQQfKNy0o0AUQg;fZ%jq)eK|yo{^`t8)n69E;bTx(0 zwR8<#N1=2BT~EC!jBcVEsSkxyKk7^UDS`&l02)M*G?;FtArwW!Xeix6(KMWHrQ0Zm z?x5T0PKu?w=`Om5;%EfjOC#w8ir49APDfE9CD2$JL*pokCeV1ANXayrCeaj1p=mUg zrc)}-q!~1e(&&D=k7iRkJxCAG9Lk`%^bpOXOnR8+(<78ckI|#_IAzn5^aL%S9D0ft z($kbn_H)_Kc$nF25vK*Tgcj3MDx~GKj8;$)y-KgpN-Cz;=`~tKCG;k}L93~h*3ueU zM`g5u*3(8Rr_Hp9-l7WHN?T|fRniXHPCKcJcGE7}L)G*Sy-n{@4ZTNu>3yoD59tHi zM|E_7_R~SCr^9rJj!*-AOdruF)JUJvr}Q~B(UITI+0EyUpk*IpbN>5 zE+TI_lg^^E$%oFNKi}D1!Raopd+dLnG)G8cw&-9h5}lXgp1z zWSU5mXfnmqNE$_>DS;Ac42`Arw1KKq)9ZHGHEW=1n~3H zUV4ve>3#ZuKBPL@NBijj)zd*bM2D$?j?hQ+F*VXB^eKHtP4qdfp|w;->u5b~pmN$s zn`kpt&|9>Hwo)Z+qwTbVs%R(eqTN(Yd+2R?hk|+EaV7Plt0;u7rfcY03Z?7ldb)wa zs5jk6H&HnCp}y3QBB(zNpn()ggXm@&Oi?t1hSD&Krd#M%8cs2E8{JNKP%Pa^chTJx zNB7XZWZPuB({Xe>dC&=TBArB@bTXYnr;-<)MyJym8{dYW?SS$c+^qdatV4Q$OlU{V9S5(f}Gnku;cYrXdtX z!)PeoLeVswZl&8OhVG!-=}wBJyXh{vhvH}i-Af}Wo<`FsN~8oDOJispCD8;LPZKGb zCetLkk7iLi-EZc3@Ig)=pgEL5bLkl9qpt2bb#vVARVH^)Idk*Bl?&c=@a^tKBFf3 zoW7thshPf_ujw1=^9O$?)Q=*lKMkOP6iI{VW*SUUG=zrIFp8#I=vEp|F?1WQUG{&&x|*(`Yblhjqw6Wq!<}_l z?ko>;XZ@8s>#y8df91~lD|gmkxwGESo%Me1EMs$Lou50)*xXs)=g#^*ch>j0v%b%r z^?mNF?{jB;pF8XO+*#k}&N4W6*7dowuFsw2aPBOFb7%dYJL~t{S--OAPx985fJ$Kgax$}n1-OZhjqvOegPM{O%B=V$_=@dGZyy!GK zoz5U{I+M<#v&o0fp>ydx@}=|X0=kg==pwq9E+K#FM4jnU3ZO33mAX+K?W6s4fa>WW z9iqe3Ku72!`j{H&6Z(`sqbB;CzMwCunZBa0=^JXHZ|OVwo?7V#`jLL3Hu{-uCY91^T0?88jMmY5+Cb&Bkv7q0s-U-M3vH!J+D6-H2UXEd+C{smn)cA!^bXa~ zyR?_yqY5vskG9ZOs-$hSopw+a?WA3_o2qFKy-n{>4ZTZy={>5Y_vr)rkm_h3?WY4& zPY3A`9i|34LLbq`)JUJur}P;$(dYC9eM!yq6@5+LPz!xa-%$q5p@(QLWzsyFPY+WT zJwlJtW0Xyg(-ZV0<~t)OQ?{R(lT03MYMump;xJxR?=(qI+f5WdV}7i zQd&)GXf2h|I$BQ~sGK&^CfZE#lib}#(kL2D36w}`g;-gG0~MB&tj`cgl#jpy9yI69s@=ma{EP9je_nNFco$%{^- z)9DQIrZed*I-7jx96FcIBVRh7E}#p^k1nE%=@Rm%PSl4*0dBWCxBc!5J>-7aQ;xu1 za)0bC55PY1Km=E>!%mh*;uLul zPL)UFG&upM%ZWHc9)mOGu{cXk!rAgToFk9Nxw0+a%ft3_B~yXUpNI?PNw`R!jEm(I zTp~}wrSeo`h$n`i@w(aEODV6gPbpL9e}=Q< zCY&vQj&tNMaIX9%&Xb#QzWfy~kiW)-@;A6hZo$R!x41<94wuT`<1*RCHk8Xh;0pOi zTq(EVD*0zzE&qaRWE%@nE4Sl1`8QlI|Bf4EK4Q2v%5Lt==dwF)mXE_N^6|J;=Ix_f zn|uOpmrulQG0yq?B?NOqz2#G}kIdU3H(&WQ>?fa&{pB-ofb5L}j!C~^bI9xstN65S_af_7C$5HYHI9k3C$H;y-R=x>OqlW~?j z5ogQ1-FC~7C*xc>1?S0AaK1bh7s%6ap`40~{QJ#yN?<$8e)2->FF%C?Awy}VXvW*RFl5K2YvutApTVxw6 z*ecuD!8X~(4z|lSme4KMIS<=dLJ!%-7JABF*h{vthTgJ`HT02f?4hr0V-Njg8;j^K z+gQW^*~TUY$~HDJNVc(x!Lp5243TZ@VyJ9m7sF&5%NQ=(SjGt1#x_REHnuTJwy}=U zvW<0&k!|c_tn82DWE%q+FWZ>N1lh(!CdoENGFi4Uk}0x{nM{=fahhynDAQ#dLzyAl zn958!2xrMQ#xh&BF_t;9jk(N~ZOmn!Y-2F>?TV)$F+9ul=(stRlk8!)xIse->Gaj;SGvg@_$6m6H!S9PB~Og!eR0_94^~><_Oug z6^fK?9dwjD8Ar>ueNc=%701dp7CcV2ZH?mP44fd_I_M;ME>4zh9e0YHg;V86aGLxm zPM06U8FDtxlo#SG+18n7%eEdpN49Mbb1^55v9<*|e+p+5%2RQXY-4eY&D48<~ClJv9Y^J zI^V|dCd;)9xdCU(M{tg8W4d!?8{?fP+ZgYB*~WYq z$TsG?P_{APMY4?nFP1;YC9;hPFO_YKc$sWt#LHzHGhQLvnDI*4#*kOZHio_$+hhAJ zu9a=9c)c$3J#LU~yn7?%34MVJ4HGum_+8*kn&|7;hGbN()D+_{JREB2Is!(Q_5 z*jxSs`^at{yjIHY*iSwV`^(4U0NDcv$|v9;`9vHnpM*nXPaG3MH9{;m(lFqj=YsotQ9Gt52&&6r-c{pA6#ToMX zI8(j=XUP}hY}pUz$QR*U*~ZA_VY@$<-~yfRj|=5axJZ}jj7u=TDz<@P-qU3QaE06j zSIS*+mD~+i%YnE??v86^8;e(m?fzVj8+3jUZj^iACb=hWmao7qaxiX{uf%P#jSp{;emGW_iNJAke;h9lzzOm|oFqr$WO)!yk!>7gDz^JG z7^my}D4Zb=!I|<W__k#E7d@~t>e9**8r5J-AZ77gxz6aJ3wdYvhr*Rvv}xusuGbaf6(In{=5(+$@j5E%I30 zDktGKc^qz+$78p9o%7@b>>(#(PkAEtk|$wrc{28qQ?Rc*1^dZUvA;YG2gs>7P@ay1 zY8ciEI)x$=X8 zmtkLd9rlygV}E%A4v@=npu7EI?4Y*7`g3INPaE1Iau9O>b zmHY{=mOsTc@@KeKZo+l)=eS<}0yoHC;zqd{H_2b&X8CK}B7cKhGxd&sTWQ~m*a$v;TYNWFB2=<{$}E2+uuyQZ2O-{kZu1nNwV#a zCRw)q(WJ<>f0|U;_D_>0+x}|OW!qm(hHU$<$&_vXHCeLl&n8>8{n_Nmwtt&k+4gUf zC)@sR@@3oKO@VCtzbTY$|2IXl?GL9|w*BFh$hLo+QrRDu$(?Yy+!K@F{qHo&w*Q?b+4jfNEZhEgT4dWlPpfSE!fBIj zpE&KZ?Hk8!q~4Qb583vW<0;!dbG&5RcaFDg`_S=`ZC^URvh7pHPquyQ_{+ABodDVP zwG$}YK6ip-+xJee9F9ZeJ~&jiee#6Kwr`$r+4j*BA=|!sB4yiWPn2x??unLdA3ia% z?aL=twtf1<$+mBwc-i*xlOWr^ev)L{=TEY1`~FFhZ683Xvh52fO}2dkrOUQ&pbXje z5tJ$0zJju3+h_GxITQQI^RT}> z9|y<<-pv2egmh-Z{k$B6sO6nak{()XUJ=Drd)=z z0D%%*;GTFwWmdiFKwL-SB zsg<&gQLU0~tZKDvV^(Wq8@pO7+Zfh5*~YTg%QmL9LAJ52jk1k#ZIW%QYqM-)URz`v z``Rko7}z%1#=^GCHYV0B!8!li*jNwQ#>jfgHdfY4wlTBbvW=bfk!=jEuWVy!{bUo42b+5p+c*apfr);37CF}K08jlB(#Z47RxY-4f5WE+zkF5B4L2-(KyM#?r;H%hiK zyV0_Z-HnlL3~#J#V|n9b8`B#v+t}U&*~a)L$u`zES++61DYA|IO_gm7aGGpmfzxFh z6PzL2*x*dr#t3K0HdZ)WwlTvwvW*?im2C`ho@`@@^JN=TTp-)n;zHTR7#GPl*0@-< zF~=pcjXf@vZ47dmY-5qjae&hu^mx}LJ_kIx(1@@?BspPy{|)D6^SY~Q!R zvh5=xRJQ#@hGSa~X#0zdkZr$_k+SVSGD^1nNJh)HKgk%`_A41H+x{ivWZTbVylnfM zOptBAlS#7ee==FN{ZOXJwm-^L+4f7BCfoig(`DOFWrl3~tIU*bzm-|C?Y}Zxw*6S< z$hJSrT-o+(nJ3%+E%RmD&t-vZ`@1ZZZNHaAvSa_3vh4@6M7I55mddtY%re>bk6A9; zelja$+h1m-Z2Qful5PK))w1nJvqrZ4Y1YcNU(Gt%_ODql+kQ41WZU0nqip-#Y?5vN zo6WNAhqFbt{c*O+wqJ-g+4hywF5CVR+{QTPA2;@=<{`V=zSZR8u$O#1_Le=ck9-35 zl~2Te@=4fV_QV15$v99x1qaEe;$YbehsdYlQ2BHmCZB=BWp5lIpNS*ovv8DrHjb8k zaEyEoj+M{Faq@XMUiQTa^7%MPz5pl77vdDz52wl(;WYVToGxF2Gh~09DR;tIa%Y?^ zUy5_&0Gum#!Fh65oG*971#%!Rl)K|1`7&HAUye)UAY3ZE=S`C`4${0--@H;;W%23!7=h}I99$L$H{l#csUj)$amr-`7WF+-;Gn`IGifq zgVW@Dak@MLXUOq56Wi$q4h!6ou4Tq?hT%j7q4xm=1XzK8}z-z>)HYI7+U= z(egeVBk#wt@&Ozt*W-BkAWo1E;UxJmPL>;RihKm8${*o0`D2_eH{uNW6Pzi3inHX; zaJJlpbL7u)uKWeglfT6Iax*TFzruy`*SJXj1{cdMxJ3RIm&)JaGWmO4F1O+e`3GDn z|A?#PpK!I@hHK=XajpCdu9JVo^>RCIkblFC^6$7w{sTA5ZkI6s%kH>UJ`T6Z$K!U{ z1G|lP&i^N15BWswDW8PBWKZlZpNxIvQ?RdmD)y7Tu)lm74v5a#x%tcf;v&AkL7x<4pN7oF!k5v*jS1Blp0$a!;HmUxD-GU|b+yi3{akxJbSV z7t0~IM7|oA%GcmB`C42qhvEwPI$SAVkE`SxaJ3wUYvkUzR?PlVz2)K9N4^dF%6DKt z`A+OF-;D$0dvKsU0tdlWiZ^`LgZ%xS94~&c$u=)3{xJ2D>FY z=l^H1hn$B!<>#=M{5gboP}+9?^c|v^Q&;4yc6fkyKsTL8yCvexJa(S#qztjM6Sc7 z@;+Q9@5klx0bC(B;7a)ju982&)p8TAkw3?^@)x*H{u0;A&A37S9yiKuxJmvQH_N}^ z7Wr4)D!1b{xoaopb8Mf{F2f!ZoxU7<$-S@-cIPrfv9BDD{p69@Umk@6HB4Ps2%a zDo&QC;}m%YPL*fkG&v2Y%d>EXd>_t~@5fnkI?k47;~e<`oGU+w^W?cWU(Un@@|pnV zZFwy&lFM+hybhPh>v5^P0hh_;xLn?dE96bMQr?WK>?6O2 zedSv0C%=#VmM>u`{~4+qQpafo~XhsyOhOg@Oi$$I6X3PW}YP%b(%|`7@j(H{oRYbDSc(1u_52?l?_84yVh<;|$pYXUZqwEcry7 zEuVyQWKWzcpN#Y5Q*gd~DlU+{aG`t}E|O2j#j+i9p+vT0FOi^wb_|C)*^cEZjkT6jq<&?Nsh?2RWzH&15lP6+-c@hqgC*wdl1qaDfaj-lMhse`$s5}FQ$q(Rg`9T~ZXW&SA4vvx^ z!qM_v93yAqSa}|fljq}j`C*(OXW=CI5u7YPic{praH^b*)8xl-y8Hyrke|evat_Xt z7vOApAP--c?E8kU%@T%tGHDz#%=OS+%CU{ z-KIF_|JSjHT!KC2RoF{@1AEJFVjsB_`^u}apS%Y9%WH9fT!sVXbvQ^~kAvk6I7BYT zq4Gu?CU3&w@@5<%SKvtbEgU6p!O`+o93xlaSa}E+4`b@?l&lH{dGy2(Fet!Zq^8xK{oW*U8PeUj7O<$Y0||`8(Vs ze~+7GJMM6cY{wsNmF+mhZL%GYxLvm661z=x&i{6NVh`DlQ|u|*@ru1?S><06O4 zc6{Ur*^ZMODckXqqhvd7aW z?sAH3$6rpB?KsS7vK@~(UAE&gXUKMZ=1kd+)0`#S@tU(`JJwT-7+-m^9rG(+wqt%3$aV~{LfMW1RwUao!HQ)&CRmAV z#|SHx?HFNYvK=$5T<*M_d0xI0SIPmnO74QI<*v9!?uKjSKwKwx$Mv!ubF4wOV~{n< zb_}v6*^WupEZZ^3T4Xy$S*vWvC~K4Lm}Tv<9ka|W)j9v$G0Z&VYp|zm$29Yj?U-iX z@^#opz8?F^H()S`{M|C0FIOg z;wU*1N6Uk7jBLkPi7WqEhD&LRWP&Lbl`5Mas|M zDA|s!7cJYd^? zDKEuY@-mz)FUL7@5zduY;5_*ioG-tM3*=&4D6hmt@@u$QF2N=8DqJeRfy-n&o?p3K ziYsJ0hG3<<23N^;Ou=f|jwx6pufw(SdR!-O!1Z!DZjd+PMtKu%k~iaKc?)ilx8hd0 z61U0QaJ#%6yUlRU|2wdUT!lU5o!Cp>g}r4vwxN&wBleZ;c#3{<3ig+$-~f3l4wR?i zAUPEW%hPd)JOhWyGjW)lhQsAqI6}S;N6Po(C^;QR%d>He`~Z%XAH;ET29B5K-~{<0 zoFvc1$#N!6k>}x5c|J~)AI9l&7S50#!I|=-I7@yEXUo|*M}8dV%1_`t`AM8F=imZ) z0WOpm;v)GeTrB6}68ULdDnEnEB%$do| zB#-)1e5Lv)@H^B$iQlFEDf}MwOYl|dpT-|h{|x@H`e*US)i1?cMRxmNhOeuBIlh7V z=kSfyufWHue;(gl{R{XO>R-gSQeTFTQ~wgao%)sdj_O~=cUJ!jK3@H+_+IK?!}nAF zI)0$~Rrmz;Z{U;Ezll##{}z6f`qlV!^>5?Hs$YYjsD3SeiuyLyw14%N;@#@o;&auv z!~4`bu|(md%Z%{u3 zzfpZ6zCwKx{&V$1@mtjo!*5rgjIUImg5RNjIDVJ<5%@joN8+p0kHQ~NpNc=Mel-5L z`ZT;X!*2iS_`2$^!8cGp2H#kH20m8(SbTH!h|`bqeX>L=qn ztGDWs>rQX*)rIOMpXws@l2^4E>$o2R#&Kx z!sJ# zZ>+u_K308yd~@{!@GaC|iEpKTAU;n0Rrq%5uf}&&KM3DheF8pS{a}1A^+WLe)F% zaD(b4A8tgwLt%_rFzNtyF;`h9q}`u+G^^}pkN>JQ+9>JQ>0>JQ;(sQ&{$OZ{Pd ziTWe>Tht%L&sBd6KTo~nLSCR=aw0#VUUDNZR4+M_7pa$A$))NgXYvyDk~?{+ddZ=@ zLcQctE>kZ#m0wXWxs_L`mmJHh)l07Ba`lpPd7XO6y}UuaLs`HVfB*Z`M7$?^=w^l zw|~j`Tvxs1er}*%azHm$FS(#&)k{w3=ISLkbPM&8Bf6D($rT-^UUEjaQ!lxrJF1r) z(w)^yF6nsnl2f{uddV%_Prc-r9;jY&O(&?AoYP6_CHHiSddWdOO1Oa6o)UU_SP`?2`OZ|uV67?V9Z&Cj- zey;kB_<8C#;TNdijDJA=7W_i>75GK!Kf#x({}jJOz2r1ss$O!NuTU>J&dbzGuJc#a zOV0CE>LvI2YW0!>y4{g3!v>UZGxsQ(+jO8rj!0rfxO53ApWKd$~~yfw>i|GV*Z)&GKTpnea&vHD-} zvFd-rH&?$G-$H#AzLolY_&D|Z@$J-09`cUrB_DZb^^%u7UcKZe@1Lq`9l6uKwo}ymznU7L0dCk++OMdgQ>Lt(lMD>#Ie2RL>d!DIY@}IlaOCI!G z^^yT}ggKJ|I(C9nDd^^#xx z0riq+eW7~Ex4uZdLs83M)i`{zCyj^xBpzd^r(W{VcT_L==sT;Iy!7$vB|m*H^^&K)pL)qxKTy5otxr%d`RkL^ zOCI|a^^(tilzPc)pRQi=+mBT*dG05wmwfkA)Jxv`O!aAaxB7H^uKH{6KJ{bpLG>B< zi2AYk8S2O3XQ>~LFHt`Me~bEw__^vQ;peHJj9;MsTKog*r{EW=zYf1h{ZxFZdIx@q z`b_*%^-lZ>^;!5b^)CD?>fQKN>OJ_?>a+3X>T~ex)aT+isQ2PGs-K3hP@jkYT)hv! zRee5wyLvyqQhflwLwyjxOZ{~G9`zx7mHIILfcgmju=)c0arK3G>ju017vbxwpMh_n zz8K$F{Y-qU`s?w{)z8AWP(K^rO8pJ^IQ4Vz?bKT&7wo7$2H#nI9elj{Gw{9C*Twf! zUk^V}eSLg_`ZMuK>Kouw)SrbPrM@9PU40|`SoMwZ6V;!MpQ64AK2!ZUc(?jke6ISY zc%S-n@j>;?@DcUR@iWw)ho7bXe0+)e3-Gt7Z-Jky{zCjb^)2xW)L(>uKz%FxLiHEp z7pZTJFI9gDeu?@x{8II8@GI0`iZ4^&7XOO+cKB85FT<}^-yUDCz5{-p`i}Sw>MzG{ zRDT7&LVYLv=juD-x2o@g->$wZzEXWR{0{Z;_+9F|eh|K$`UHGO^@H)9 z)ephPt53xDGJe36abZs=JjFlLJH7Xmt}bUNCom=C$?=9Gq2ejwkZX$9@Ak~->Iyj{ zo^V%hpi7_Z?tR@odSqoeyZ4Td@18AVduDVA7yBd58C~ML_UYQAcXYx6ztP}Ta>yCX_2hdTiN1nx#1nE133;4(86H0)xIA_=ArNxg zj%OguzdsCy$>30&=uB9yyow5MD&^>xuoVu$VR(m^(>{Ptpb~b#9_2Swu=rAB1SAh# z5zK_yFh{u!6(pyeaYXqdiOHd96 z;i&Q_Dp(CHs|zH+wU7zZpcGz#*I+$-2H(Sv;G!{PLjb13&2THsgZZ!k?uVtY9Liv& z@*4UEtcG>49yY+ouo=Emwxi#`ckm4XH|~2MysIh=pd*5w3uE=m9;U zH}rvi&>sdWSEEB98B$;*q{21IByS+S9zKMRVG~p+mFSPK6ZXOpsD_wEY%kP<#&8bALNn+HS3o@UfS%AB`olm-f@Da6 zk&p`GU;<2m>%ajn$c6w+S8hUYhFjrIxCa)%eef4}7#@K|%H!x_cnX%lQdkZzz#Fgz z-h~ff1AGLVphEcy6?Vd2up09pnm{a^3mxGK=nq#x5)6YB7y+p;4#vYom<*ZVf@}yt z3ET{~!aTSK7QlV56qduw@G86kt6?2{02|;V*aTm|m+-ApiT(&XVK3~1{a~HVc0dz| zg>xYZhCvF9fYC4(CV&H6kPQKt33K2^xEXGR2jLNT30{V`;BBQG{Qy2vwxFNGm&#W3 zJJ<<(VL$v1F-rbk--dEn2OlUK&`nSQU&D6z z4y2M3&1`ol*uo^y4EPjW1IHbd4Aiv4}KCD+Z zp+W^5h2xNNF7*MakPhQvqB0r14l-db+zEHX0w{x(@G7i=HBhd+i@pyV;7iyFvHYg% zxo{q|fXQ$jIG_aPgZy^1{D!RjcC7pcY)o^u`+V92%z+!>5h#V-@EaTk>jK&vG=b(2 z2fZKxG9VLt;D;cDAPgn&8GNN|N56qe_!%0tpeaKvTnKS614>{yl)*u;F0`!H5C@$g z9;x|kCLIMnjRG1C&o4WG5xAJ?p^4q8Ko2T;orWNohd=5v!;`dCCz%e-Q66y^u zhBz1sDUb^3Faahh*P_C8iu`WNY$$C=1X5uU zIx6xT30I(5N6*6H5`~vd57WqDld@rJd zBHx7&;vokD${h4TD1~QWDZBt>@EWXwHBb&8zy{b174Ri&g>Rt}s-as~n|kr=4`>73 zpgZ)2elQRQ!-McJJOYowVt4|M!f~jEdfk~Gy2CwC3TvSXs=?|-oQjTSn#E`-ed`j| z5B>z}Y3lYFjyvcC@;#6cL|`_|fqihnv*etFOJOd^JE!vApu8_A@AS#Ld>xju+m!?~ z3?=YBRKV9z34g#b zF&qQy2>sDfrh~7+I>vIL8C(DtLr1s*`anMz2v;i!=wL{MBp3!S!Dn#QpKLeGhx=eX zRKYQ@PH^gjIOqmFp%W2VtLaif-qRWYgA{rHXfkBO8h97h!$+_MK83Gf z8*B&mtknq4hW5}A2EahL3I;(cq{DSk0!JYshI<_Fr&3afdk;_w6;P>IXT(^SKo=MR z=`a&Y;4vtL_h18TfluHIuz2?Q7?i>?koODZ`L#T^mgk~Yy%?(l#Dfd0`Y~3YGg&Vf z2bquqR)ZL;9yCxIqP?Ln^n-!QAaopLLLrpE<4_6v;Q$;2>#P{-Jcxt-Py(;R8dwWf z!x%n?uuP~AjiDKw2N%GF&>Q-}02riXqO+g`7C||zhYw*VSdEwt5?~x;LI_IWUa)w^ zk^&_l&-CP3o;-K4&SpPBJoJZ>ChSjm4pu-Jyad)c+`E7dN<5klWv~t^;SgA{G1f51 zh5*cgH=zP{K@}VUt10&|pbrd!BuIvI2t%P#g06!PVIypYZLnRj&W*8}LNn+KS1Tpx zZ7^546TKVe!(*@*mO>fqhAKD$Rx|1c>Oo^T2V$Wabc8D)9(q7e=nehhN=SlaNP&@% z3hBxORJaaYkPSWvLIkYlw0}s4NiY?hPy+A6dZhyW8cNQKv0jB$P!3z+8?er&4M38T zj!uFSSOw+qAy^m0SS{gV=mhc5A1t0l3;=l!_cK&O{R?BPvy{eYGdK^R>p}B0!G`0n%LMC{j0)B-mH~>~2>kSEz z2`ei z(MtIb^nYOOVx6D@z65z5GZNBa5?H^{KSDjY1lqu*&`#-q3YS9<=mmYDzj7ri3{jF% zVYo696;dG$u7NQyR+)eblay;w;X1{E3QouZw~~WS10RGS0!2^^v)~4$1ib_9f=A&A zcnY3|W$+xl1@Ze>XGjMx1mO;-I>vqkJ{?)#Ji`s-XX{wKUaw;%z{RWTSaI;g<~mjx zRQ^KwVTK>IZ#0i+#!X^wsO*Kan8Vo+r`(DPrAi5(*##M)A#{Yxp_}4Bh3E})K2PvJ zdfz;=zI}hV3OxelXYx53%zaw9f4UdszGVQ+eMNJh&)jD-_r=V8t87*_0OtOXxesLS z-pZZX#@6-_x0gSl=n=WTO-Hs@V) zzBT99NE})VV2;}=JzmXmY1*CBU+fIKyk7H6hOXC2pza4} zBn}@wI2`uo_&x5y{$f-99_4&=wVXK~XRc>PbTmhbXNDumo8yf*eZgGkVEL2fiFjSn z&~~y6#&^qDS*{^ox0fe4JSNJ*X&CTFLIGcNKuyWXVfoQ%QoW&2Amnk&SoweFz5bjW zUvV(E)~F0}B+D?FBIxwWv>~S}&l8D`lpY3rp5@CM;tRO) zvZ8%_I^# zhS^>QQwf2PGt1|R77RC$i+>*G7Yu~G^01A^WGagoh?hT2RbG& zlxJ=B(pc`PoI!R$i#oVG7)dY z=lS~ujI9}5YXJqU^FLUbaW#WoUe~ldr^^*6@JHCe{(^i@$m_}*Tr*^}J%q8SxS%uQ z&GP!Zk>WyU$m{e+@? z6{OTIm{zM`MD2pSV6Bpo>8BLcE~#CRU#lRsc0ssSK}PL@NUeggwF?UJYL$!|c}h|3 zlG+7@wF<`96a*rR8e*xINj<0$-%&n3YH3!GPBvNwNzZHODV&@Af#-rHoOMJVDwJkHFmo#?fgx zle|tIh|`_o)#SS)9_LVJIN}%_rhPglc-`z(VyA>f(I|^!b7+2Gn%9vUaC@`8@~oUe z(XFzFM|YlI9-Ze0+^3GpkZIoNps0)P9UXI;m$9Ssix!zc78f1Bx`&x3M@zsTor5F2 z))3jWuxEOK*X;=mMGBohMs`rMtfAX6oWVKKNBlKqRKFC-1a`@cpwsUT2mJnQ*HGI# z()^Cm!xB9wOWdcFB-JX(J9VOwwWrEEb+VC67m2=l;P!;Dyt?3V2feO{y&_)bWDj$s z*BYoJ$^YZyX0K7r==NHhLZ8>4S5q{KASWa<&yn@d2}!A(9}0Zo zVxLb=LDJ|`qC*@RIw*QNAR^<94gKASI-7`HQZs>{ zD-d(+bKcfHJzNHJaN4KVT5qTDdW_d)?+q_!HM?HyvF#ngWQjW1>kqoTey)AOuHhMJ z(p%-z+NU}51L532DB^eKdqxmAG9+@0CY+Wtg8qQ+$B`Tg6a=RcxMWClw{dwC9bjJ- ziDkqbGag-PmbqXIc{ zDdtEEaRAHJktZm#688PNTlvIvIOT1H-UAtO&)3PVqhQ)~TePHO&$o~onm zP0!-e4As)V7kJDl<0bGH2BMz}qSpcJ9`j)#K%Y7a>D+QX!h19GWy@*WQ$pws0s<4%wvjtm*ZI7Q*0E1y#{RmEvd`WNZU{L%9^2U94IGqqhtKYg-@i?zJz z^5>d@fPIpWjy&B&QWSF1MLK}4>1AdMO={Tj&9-{*s(Oy%AguLObuq*7!&hX|3 zeZ1Vq8OVG93P;}twEsqTYxF(9uxm!xoe{{6IFbTvyIU?fG2ANj_%*U(M@* zV|73{+ZB#3$$ToI!?Xv~REZw%xxB*VOB&W7pJg&DcIy zm@T9E$c9OE)vCF0#3d*A{BVIQ;`+MXs}Bt3N4!$&{b zMf8)F3~*%VkV1K{l(xm0pBj&D+jt#BH(xWXFi;pS$~t)n6w%p7n+C0({W*h!a$>FS zL1Mia!G@(M+DS+tN9&9LJ+l09%b&cc&2ukp)zsn+oYnXYTc0DYOZ+0r>p|8Uv>y5% z%B?YLld6foB9?o0X8aw*a%XR+j#q`s^as(#Xw1b;qxbntc|+nxwaU*UmhoGnGT#oU zOlRVr#Jm<{4Mlm)hvybet)}QSlvjVO+30!beW<)*vmBM}dmfefu2ePg>soH+_ol{X zes61R=2uR90rU9^l~-`8(CGH59z|t)>b17lyD2K$(Hd=nc1C4=%=F!eWq)-?WxX3x z4-%W{hw1QZQCV(C4k!Eo&vAvVTl{O(d4%#njIfjZOVz5=;9q_2D6w`Zx8JtFft{JdI8L_=#oy zA=N@umVYNI^|2V0^)ExEzTQQp{{MXjLQD0L}mFV{u{Bh<2|VCuLf=HdN%Q;#L_OiqOv{% zHBQlZJSxj~p|buVjpt~54=VffUbF%FFe>%;JSz3~t`0Zl9}&y?nDS4ErTu+{%KUet zvOE+2PAvVLX`hYS+4Xs#j=lfSCYI&Lozc{iM<=nwG9OcZ39)QnCsgL!50&*ZUJ&v4wZg)H!AJi#0Q9_JssBaGcL2oGjS7QS$l7E%0JcElz&Mq>-RM( z+qVOi{k{*C`moyD^<4**;pd>T|C^&yPjRSBXW~ve+>GB>%ZKRj(WorX%>No<=^spa z2C;0PIX`%aWqZu|VJ5Nc4|9IFkyw^*&JXi6Hs^v*qk4Z6U%-y=ZCX8*!$U>A6gJg`)aBE>7~T7 zf7b2q-R-I-UO+7Us+oT&v9zBh zs!LH>pXD0AfXeb-LghGKtHVwCd&IJwji_wbm#8fNuc)lwevSV?rM=bfXzw2rHzStu zTcA?jLCa0ti&*x5f(}nb<@hymhQ^an*)A_C>uKU5EuXFBcWb$cA0?LkXV$ljShjy9 zD$8AiO8YbMhdTTVRO)4q{oq-Keb3QB?W`bNto0+}@w{&`TNK0hRH)pt2rA zP^ph$sMP-ijju&zyS%83A3$Y)-GIveyBU@Jf42@d%U?v?n&D=7ZxTztWR|x{$2ZH{ zPAuDPmbZ&omTQ)Gh*;{|EU#M2&%VN5pH`@>pNTKkxFag_>4VCCGjSrZZ0A^1)++~< z?J=>BSlV9zmGkRes9Z;x_-P$~IV$sCh06R*{64YtCmU5iLuGk8Q0a#bp;CV)KCE#c z&UZ4uqZ-#GmhC!DEbCK^%KDz$$sTUXTM$dVpTqdFoQ}jYzKJ^#%ksLQ(yscUvc6_{ zLy2Yjai~n6jn-bCSBIPB&m@-f@&Z)O<4ZMOqw$v-@6ot!XM28T{4T zd{ox2jgD{T*G|jL`dzN&X8xUtW&66Kvi^fmY0rtMobM)}vfoTRjaatVj6aiDrk{n% z^mn7OKKE(-6e{i0^hYle%Y03L`W~^&&y4>Wu}r@em3I5Rs)={&_-1)WiDiGA`Ta>O z>(Qi(-Cp8QS^u7>EH@dI^)>Nujm`KYHBO>E$bL>G7B%~K0BucqB5U*Q0Z?>{2;Mxzq$T=RAY1fSxPL+GuNNbXl$-OyLatAzPqD) z_xP^y`?(9|rbubmt4U2m^Z}J^NDD*Ad?j>F0>=kMwuM zkMr}A0goI#?t&Uu*gZbJuzPp@BRvFs&-g+t4%3srJqmlp7xwC2*gL+kH-CE+_K7d- z)4i|{re|T__`-hih5h5%NAs?-+s1rU>g0aahfvwai!?6P_-T!oY5ao5D>Z&ySMgdramTXZ0cjG#-={9h-=q}M`KeTxf+}L$kW)=hhJk;AJa89^%2q7 z)JKuVraoqBZ0cjS#-=_>G&c2dv&N=AZqwM*#~m7*`k1G&sgL;@oBFsb~{Ezz01Yjb9s4bSRlk*e0i?xsdcAS9{Tc}|KzP#m*2(cJoM#lheB?; zJNQaIPe1JUh2#c$DsV&6AH4}$droH9DRZ-z?FwfU@N!fR^K)Ui8D1PN&d&kqZ(#v2a2km2L;O_nFb+YJ&pcz{C`eR+%dvN_x@m-QTKg6K1V?9=Wr z50kj|ytAXbhsTopfrgfjqXcceFe*(w&^|lE*Ca z7*?t>-;?j>>7U$st{J57P}mDIFHz`x%=;R4h57Bh?|1useqCc7QZq|g4}16URNG&x zc6m(huf1EN&zGWq>;*@yPALzYYEK${_>_LK)kep)*Dx(wX0Kkb)+kaF(MMo4m6C3T za0g%ODd-BigPve^&>IZ!kXH_X0>%$VmtAWG!uI@YW>qtTa9)@v&CwhACky4a{>f$N zu9p46`xf?5VXu14BO7}M)I5c-!WRv7&GZ9^W&Q(ExfU9V$~AljDxa0IRHvh|UN@pL|9emwZxJf%W8x>Y z`~@vvjmmTzQQ4kvP}xqiy+0DmXNrTUTq8C}wD;dxsElVm+nfD&jt)2F=Ml?(ZG*~s zbyd9*mGv8r%Jz*!Wj(Id_&QX!&!@2;mHEun;b#0hwEQkqrhio9$25K(mHIaO`vqdT z&N1;yVmS}5Mx}n%qq069qO!a%G&cL|D~-QKW&L)cvK?l94{2OC$u4h(%JQ3|vcFoQ zGJjJatu!|Kr?tj$s4TxTD)TqX8$c}cG4o3xmi0(OW&0hd)VFEhZerOkv;P7boB7Yw z>Fz|O{vXxyXHZ%GN>tYWWgWf-mG)49N_+SbmF+R@_iq}T_V|;==6Ly8W7FP#(b%-F zUo|%CvzJ)vr{?(4aDVp;#jsO&fM+1DID=Q3Q5tBX|Ip|U-u z{@QD7+DAu?&HlN9Sn8)AD)o?z%KkR(XAH5--yFZ!63cp+^>ONSrv09NJs8w-)1K!L z%l4S{Eg_cmHOJFU8k_pLMPsvmu2A9_Pu5WTmBHu>Va}O$2)I0k2Pz2ul&G%bh7DZ$L5X`_7EqlWnkM~(LtMn;Vv8w~2J z2>RB6o<8O585vtRe#Q(YnLJ@cO+RY-z0>=_xg+fDyi;|a>OH9JPxB1L#1AlBJ~J*t zrTsjE%5|@aml4Z;drr$=MWvohyhh8*QJMb-swUn@Ec4rfO8tL>%JE`i(@*})aH+4| zs4Q=f>Tjx5s{2uy-$B*WkK@BS-ceM}4>2QcHSxc@2V~lD1E!PqY1*lYn=xG0v$^Vd zs^_a-fXe!te&s@9S>INwPPfmQKUn_Y@|`)kS&7a9F017&*1^6kryt|Y4df37TqMBj zQ~q3DUJXRw><zY05z`G0+3MuwhvB?4%)8t^2P5V?Wz2lP zv(Urieg9xvoQ2^?7O$xckyll?tQ2o+e!&oDK9|7upKzELF2hd8cxNsLM%Y;>8gb?g zkw3V+ERR2D2r#`^kzA*j3z0nU5M#1(^TJtyU|X3A zy*?kWw%AgT;~fIgRjbil_mF~IuRBZrxSV12CS0ETk1YVr9{{};m#9}T20})q&-{X}J2#LnHw4gY|)_Yxvs;=UY z&rS7&JiJjI6}P9*nFM}k4l6H_Iuie^YxD2b+Dn0C_p%8ZZ#YUw#f2glmTAD{ClItA`0p1Gs zsOESAp=8KmcH*PzbLJ!iEua0AbJ7L;Imre7X-=QhksRP%s+@p7Kb2+Cp3Q(rZZcQt zOlAKKIsLpG=a1ydMY$~=4{!VOhxh05atfv~am1UfO3Z7S(Iqf%7Eln%FUZTK+*aZO zUIymvUwI|iehFAyfsemlA=?`YHIjj+jToXXoc`0tw1>)cmdH3(#~2-{y z@9;STqnrW$0xyD(l0P`V&l7Zwf?U245dG`T=S|=ItOB3?$M2L6_|A~LQR|Ps1B@Rc zT{QJ(OP0?YE*J&AVwZOmIQ`<}ubWtULUB%iJ`HFZEi_e?cv?OUB^5ZJ#74!(ZsSyy z%Acs=l;lnYT8UU&mPd%hSfS% z%5WKvTSR6w32XIb^x%P1$fw(q>pHn#^=geJBy0*GriwaM}})m|Y&I*)v>D~(l6k2-shT+!$-u?!3c za-{9azzo|)2Nu-K%Pt`{TT6MQAe3j%d~DQl9xrzCqGPc$Aje<`4f9>hH2D(<3;E78 z;A@>?5&A1S%jgydoxc2ZDCX`UcVlWyfh*lv;7H_K1}V;hAg6x1Knz>M%h@^U5T=I{ z&wZ63{Rjlp!%m-E*K5}o%=OPm&kb@1Mxu2*(UxW*BP=Q5KeK=pqg>qx}48^w{ultkBZ(kwUL0BE!a`oE}4C zfju1k!)-8L(vLXvy}q&X2Pele%iuiE*!JH-?tuFW#sUNFzuAn#8K3pcjpX=pSd?=t zaJg>&dWoqKz7Op5kF|v;5;0SGL%Cytg-2{D;LsZI9m#x-tlaY z)9a->aODOjME@31;S+!hf<&f~kgws2W0V;|Phdv4U`DZLrgsv!z2f-modjO*OjbF| zInx;mPcLwWJd;i6$cV-iXU(Jq%q%W0p2@$;QTBa>zp3s<<-U=Lf75tBD)&R`rrPBV zR2!pmUoQ@o`+B`~cz;wrPYzNw@laysN6qUq-x?PwESsQJ{P}$%6v@xnvVaLYB?(FYvOepZ$M=|x2T%< zOJbStcdENkncl>EG_FErxrbFvY>l?ZuZzn5Y^ZADSS@dk%JMH#HSwid-X4|tcU3iU zA1xn%%KjOoYT_gHSz7la{tY=r-fQ>=Knac z?4Ku9pHW?o%KEQVHSwFoa^GW}>Sk1?H}R*$vL0Jizt!>|G~T6Z;@`A{y{Oce zU)986EjP<6()fB**7Ign6W^uf^HDjDpF*WxP5hdczlq9rzoTm64O+fYhkvGO;%!>~ zEh@|3scPciw0yq~KdNftI_dWQtdGk6id8jnOD%7W%6<1v8h6uppvDQPw1Z))CLX2b z>8Nbq1XUAHC6@i{Qq4uBeogEnmhFnD&eC!dmk`VSGP8d3bi4;t7wPyWE+v-xO;4#l zqvgv{S^qLs6ThbAX8bpaVad-_A;W2mhE8DnfUaU){cFHKc1KxO)i zbiB42chI;SD*L&Q>Qy@2ln*7A{?lyV1Rc-JZz{3OKMR%h^QoG+kXZW9+fg}AA3>#k zE>>NF%Je2)s__a`wqvELiB}QJ{(DFDBUGk0^WUto*`7}|Hv8jCjklq)|9(KF{r*jL zmzJA&53#K8KGj27ZsMaFpFm}O>t@($;)cYseoauBPcu~$x6txdsH{&rjXP=_k4pWR z^1d3I@~d_HA*#bvN1(Dk>8d6kujP|vgNDiRTeZ z{rpAsaa5*%Qpa1SYT`02e+8BHvqsg#8?<~QD$Dy!)x_I~<+wEc=T2fd5A9Puj>_^) zY>lb+@d{#TuP>^uL}mR={F=sQ``*-e4J!NZeN_{0)c7;iZK%x8 z#NQIjdiCYDu%lexB z_z7aEf3v-1TK)zq?fE^`O{i?&R*iqq_*Yb>KaR@&I(xi5|MO9qJ`R=byiD~9RMyXw zch%UG_t5eBst(k06DMe#gvxf0R5kG!Vp&gfzPnDxccQZ0(^O3y*771$rn^bYO?;P@ zoBc6g5)c>6+Qb3Xl=SgtqB z{C?7Mb3Ofw#^(IImstAIgQ~~0+{D!yo9mY|CfN1WK=o`?>dVAUiDf^wRBfx}ChnlI zX%C$=?uN?t_E$A=qLwG4vj4}RvOg!OW~%0>`cYXQ6NfZ5;}>c?Q^&ti)x>j&WjSVf z_v`rPeEg8ckLq+!s+xG2mOrn%UIpUZ`y628}nOvb;}KO}tghx2sm7GTl$A zzv*xj?hD`!g1m=~}3oI8Mj!pxPCc^HF!zUZ_lO;(o-k z9apO+X?Y4N?I;74t<<@x{hs@=JQ2v{BJF zIiv4^`gs_@vk$L}mmNhYmbZ8_w%=FP!~?bbY8{@aYU0!1P5F24j-=@P%sY0czjHT2%SWNoCQpBN#Jm%iq3dD3 zA7|o;I{jpw-l=NhT#e2APk-0MydxE0Jn743sG9gjVrdIEqta$?Q#J7&T7H-6-Kz6Z z*}vxdHYR>R%OBKo^ZgbRpZ@L%4-%!02iwiS9Vp=EtK@e|JV{Z@ui@a`)9qK5XdaAb zzqmvjVN&}!v^@{|$+W)qo9oMS=4YjP-S#y3Ubj6GLzsoMM6a7!*dy4U5%PUJu#)GL zJgyRvcc^uJc(Q=C*C#x^h+p4|zT7$?!;>TLL3!90qXKpvXQ-aumL@Y?j&Bbt=Z)#8 z?0XacpL!1}tjjey(WG}V{_l&^!o_r*fIO_ z^kZkKPQM(Lw*9i|YSs5q>Hj`f{X~bG@wXAn`k3*}`=Dn0?Uc(g`=hFPzthD3?$|v2 zSp0YIb?s(3(moEN(mrB>_WGIl3}V^N#;T_uOQ*lb)%Xnim|n>DB;uLQd?$V`?-8aG zoA1EK@!pqwchP)Du#En@A1{!Z?*y9IdtH=>fRAA#RKPFr8ytkga0F`S`*YA4I^lM>Ln%YwfVbd1F!}we z@CTqVjZ?Ttxdav3zyL^qF^~!Q5QNv^O;`ivuo)`gS1`Z-977{H1L{G47znA54r5^= z1mQ;bf1AH=HPfzv)ARUkV%WdR<9C$uI$Ycc^`IgAuk-f(qkMf4mQy=l-(AF#v+sYM zx37|Un%~#{Z}au_;ovv<`V#S{=j$8Ku+#JPITep{!9UB_*ORi|AbI<)hJTf}FOza7nBOJ83IE^Z>s!P4|7pIy?-|$p?s*+f zR%bvxI6YrqM}}Pi{o!gzgkfOv_od<`cb||6PB6ct&QHKc^Xd&kuZ0_-c0Rq^iRXgk z)D!Mj9zY+0hhZ^10jKBNlbn0Y;W>C7-hj8@Kh4AU4da$_u`hY?BoE#pIHt%=CQb>K z1D=GXa0KLw`;R~=9FZ^aU-G}thi3Ah)y{kN4a?aJwey~xAhzOo_6zYa45mR4B5)6s z!g8p9@4;%rJy^(qn_vO#2KnKGePFe8h=Lyfn*_b?LC#uOW0w=2LpmoqQ&@<4wXkD}(S`V#{)<@4o&qN!b z4bZdDv(ScUL$ndv2yKiuM$bmiMw_6q)(Vy{9A{gFLopop(1L5aOW;!I3CrMl_)gi4 zO5WvRT!W2xWmGUMk z`ApZqM%bdr&6zgP7COM?a0PUR9?%E+Ljp_!c_>>S8o)4+9H+v6lIQd`#+$3u&Ug9( z!zAbFf13AnGvii($$$DAz6zQ&V#QP3I{;)p%(Jsy95?N zDO5?!5Bx~((n^rLrSbzLO~B+OiNhB`2`qzdaW*MvDm)J_!VmBx^yl0#0B%-(L4Svs zwl>$J!fbd1E^EiB0IDwI89ZFr-X@4n2NLgD)lkxvz8W5d-@)p}cNL)uj)CNv8~|4< zrS#daOTXQV@3^L-rL_Ge^e6BHEPa-IB*7^YoLO@cCX|m zBo|+6h=aBe50b~vsvBcn1|1<4tP1kuf%OSFiQo$O2L2a$p32Gb^zQ!;`JSF4r<3G+ z`mlC>CaaG1rR4R|yge~I?GfT&jwnS!8v96aK>)VG*KkO=vo8HQybmA1hwu?>g3Vyj z7o7u=$2|a&n_c*WWAiY`4^o|;ueT4w65wCu>rIa1`~st43`|fQs0*emW#~(=19rnz zZMgn`15ge7FGXQiTboDG&G1V*`bT*1GOickFjT|&?OA0A!E7jjJ0Q0MpXZ?het{~e z2DwR4eFfidjAz;K7m&QEk}I_oBuA=HMcb~1YkF|a2`|A~cybBnR(M5u2Nm8|;<@IS z2FGc`g2}Hrlym$r2rCZSd?vJ^PK9332VQ^|VJ~nxC2uAB60QRW`~k8r0>pukf}a`Rh#%d&y%zPx&5|{O|je-h8$aOg{GC@kc@O zk-rU+n^~xWBOpJ-*9zjGcHZR#Vj&4?=U=WQt_I0#oCg_kTtmT?vpTNb`RclCBW}&lTBW!`9o?K7Ex9}ZQE9LZM)$k{ECnQr}DZpOh zzSw`Cuhfc(vFgB?&=dN?ASj_PlRTu0mG<;y9bh!n&OiF!DleRdg zUjVJ(VkoC?+X6TAuz6-NpVh&7mOd4%r5s9N@)5^!3|t5awB0+Qly+gdvk- zc{+T=wSwex46-l6PzXh^MY)}QA~a`zw1xWhxvvT5Lrb_427&)f_6tmB--O^A`gfr~ zNoqvj3|ZiU3gxQCoG)P_OoA+M!3>xKSDkH>gbG>Uf*=$?G0cHH`UD?rRz5{PhfC=j zgpNulROku4VE_z*$?z~d4vS$q*UUl*b-5f~0LkAc4-@*rl`tGqVGevu9q)uit(hK< zLN&OlbD>H}quzyEVJ+|3k zRD;x$ zEcvMiDVK9CE?8CM1BQ6GAKKAIF9Ug*p$o*r)ewESM7tcVj6;QDmDnJ^3HK<)gHrNqxe z1#M_Q{7D-UUW?;1GNjW+#=srQuD0Bpfydj^&fslW3+rGLY=Q6LM`agU4HG)pjHAs= zf*@@~xB=$CFR%}~(?*0O`tLMYN89)qDwZ%GD1CayKGb2>OG00rT_CX13f-Ueh zd<)+}CUt#1l)$_2SNIOfpW}W8RDtBNKRtha-ci~(BybHP`OGJP16tA!E`m(@_&L(g zH?s4I_eUk4_(YI=;xk|ln0(@yO~{=JC9zz`Kuvz*edODPSm+Afm8(!;kTL`nhAAV^ z(J(=AphB^7Jvs~KD0iZF!ve+H&pJRXbcX~;0h5QdJ#D!I#MQTPph7|e?z6*GWx!eV zNsy+DM<+lSiXhYoh0EzHg#pTFRG3GbpATQdHn@&!pQ%tzpZ7Z)hiXyUrtlZq<|24Q z`I$EPJ8W)m^8+gEfS;fq?N4Y3ji9443Kd2x8R$50KqmYJ9)dDuEh=n=EfDNtGY1t` zb?4j-na^036YhSN`@ygP?uAlV21k_`+FX4&3z|SvI3MDmJ#>Vwu<{t6$3XJMr@|PJ zeDNk9w&b0Tfzm2+JHtz`2Ht@!@Ckee@zlG}0|vs?N&-3<5@9GLgXHT?gYhsCra~r| z{Jk^qGnLus4NwA-*Y_Tn5BI_&uoJ2whPG7)dcXikhikz4J;sWIc<2p%VHT9Y{ZI<) z-~;#wDxnIj18f5%C_~Uc;0PQCd1!tWq(crIgKCI5M4N|mp*ftdv_OTHN-MNA#KC3I z5jsH^B_8bwy&(aHLK>97`(XXS^$wVP#`8Irgu3-@N;!UnCt(HbfD=&F(B|7F^i!~& zbAhl)`4i=~vGp9s#Pjebtc7y=@b&OJ9D<57YL=Sb2~@8&8Djg9O@P zQ{_BVxInoO6)sXPL523v0Xi#P(QeR7d6RxuXhk~~vhiM+bB0Yv+ITm(8}5O6j3Ycj z+ZLXOmB6EtC^I-m2qjANC7s6HKT>W)g_yH#cA|S>AJ;yI;bN|LT0>b&?&ZT_+Wryv ziF3t4c#Cy=8xC-eI0{w=o77I6vtTlWp%DH83*ilT8#cg4@Cgj$*cbu}pW*rp9-!?n zhUegUD1(>a52bP$$1}|0*q8(H&v9-6H+Y}}*PdPAF0MJ}L8(&7_2)6TgwLZwI?M#C z9`yq8;DUf+)#q3`lX{17kO?`WT&p||&%%pP!nMj`D2JW!3mk$Hu2JrVhhY&cgBM{A z$EuLdu~`V4lx?W+Jsbe*T-q2kgR7tnc7w_H9n*}@(NGT>!#NNO&7dP(0rAiSdO~mL z4+9|yk|6~~LMlv9u0vgr4L%4$1WKC6SnI*$7cV(4#(EW2!G~a-&wRn;9WN!%_CeoD(1&Cc(Af1Q!&+Y?u!g ziN~iw5N1IM%!LK;Ff4+nz}m%m5Z1$&u(ryk5t$&_|h#3J<_ycwhM# z-3*_@cd!rsfI*x)g~7^URQMB4z|{vSha?yQxljz(!&C4y9EHL37egQ&=D-KA1u9_= zRKf31!a4GDunw~g5DUqW4wE1gZifZ%JiJW5@e2H?9BIh$4wLC41P6VCaFAoyYScur8o~hl`;T#KRzXm^Lkx(4G@7W4t6jQw)o-zWs#rG+0|>th=`H znHUzs6YwH*p>1@78(fzRMDR135XVI*~*28q;d5>zO$Jk)LhC2$LrD{-spSWj%O zW4%Uwz73zl4^To~3Tf1(Fc!wcM3@SNFat{H>*vBT`uZsJ@h2dWzB&nBpbmxim)hJ- zKYI_9)n)x*D;$HX*_VRVoOTD-D%YVx=K1t9V6}>|8bCwn1N~qqq=OHFFdy!NXJHw< z29;d12v(5xe>*yt`o9ycjIruN184ykK^tfb?Vvqe0oKnPZ;%d?U@AD^(S0%23b=B= z%}n;autfQU{r@Q(fJ1O0`@J>9K?jIedZJfD0*r)omo?1z`AFF3Z6?PLFW;4}8o z=kNy{28(TP1eYis(QeQkdcY{ff#$(|@DNnMPAH>oSN>AR%H&!|n5*nXg+I?^zrbhg zTj2!zRw!iO3UxUKgjFK!g?Y+7=>4!zDMf{)unblxZ=%9c>QeZSx)Z9Ew664n@FsP&7T$#qAp1E! zzd~n70NGRKSH$<--|vCh6d{htZG*rc!>HE(y6O4@D|71T6irLg({A{d9Wyk{til-(Ei~$cpl2&CDC(ueger&Z8oD@U@~)*o^#LtTzH<>^O?m=CX*?9_F8+b@6Kj&l6N3K3ZM{bpcZPQ z9-1K>oe|IbLcZfQmoqqv^L%%GIf?t9%r+Rgc-``#9|mBt+0W~D09SDh@$ADbL(a>7 zgGhM>L-7vY#Ud=mCuRt*g^b1vcn$Lrk5x#(RwQCSysK=B@d`f18C=Ez=A<0ayc92k z*XoW8|8?GwLW2XmKz_`fho#Uk|N0Gg-j7SP^;7P=A6bV7c+b*y=lw{G3GhnMcIW*# zGcv%dN86qEW7p^akC)$b=luwJA;9ZE+nx6#X?%dk*Q4jo`*CSPfY+I}JMTxrqyVoA zZFk;}X;TBdzO>zWKa!^VZ|~0gG5=M6y<&IXk9gX8{O-IT3A88EcIW*lH_QKc-FZK} z*#Vjg<+<~$#LWrN)GE)NS0(99|Lxs*Ro27>c=fs7omXWBlbU%tJ$GJ}INEwX8bW_Z zPdtZ}CV||KgZLGfu#P*}fXm-z!;h31o_J#OfZtGaQB7c#It#(4bRdKb;l()^Q= z9B0%#BaK_Q^(XGTI*ze6&EHNt4yXCtng`&<<1}wBb$`R{m!|!m)_jnAp*bPX;91Oq z=6&Zc&etUFMj)D^1==7S9nslzC8fKGAcrFcA7B+WV3XNOx_RH9ayb#H=YJ>B{u!y~ ze_x}WzJy;EQnKR?BYy74Q z)DP4)+VumytBm904irQQAICV*5M7}8ePKx3-$>gJ)HuXZX#XY}f5m*i5BJgEN2V{C zuY>H!g*#CIccB>SpdNw|iY91gT9M&+0Gh|3d437lim!1PS8xq?9^iga9W~Jw;pmSj zjK@UG$3kqyHfSDz`ZtYHo~KN@o8hF?w;KkTS(&E6KJJIZOpo9xv(#3QmrH9GJXGt2E?xbkWp*&(DJjQC~kg0X8MSdm*1Hm znkywmOkGmPdqT}!yrvRlGwrJk~XY%rz zOFmRV8@z{Q=40|lT);(KF&^)c{3v2dky6ftlAYkj!{WHC@o0@-s(+}t$aT=bXnn9~ zeQ-}`o|=wzjm0EP#WcK(`B;c}EH|sjwb*Ff{M5s=kKibd;SA0~<8zWJJD(fe>N?=g z{7g6WFoQ^~^Bs#@S=YOf+e@O+8eYx8cH{M#*hc0=9^}OxD2ECN!hNWQ8mNN?rW@HE z5$Fjwe|t2SWh^FQ3Z`K?Ud2qz!ff*<8H;!DF6Lt)mS8Os%^$71)q301^9XhP!L6@# z!z?Vr3arOQlR)kO)2qE8+=priMKg@VD2y>0@6vi&jdQ(&_l(xe#$!2FV53PO zw_%4lOlp2ZN>Lp4=|bVw^JzZicxY~r)?;b?mF7xHINGBNx}&G*P4+>5MByon#1!-Q z`f-}e{b$#0Y0XyZ^;+??mt!T?U=tF|R&qOb!L85Inyl38v9$h5^S-AdZ9h`$u%2W; zcK|fsZzN_x>#=@>I}V-+75&xo{;O2x`y82q*yTf2)IdGdM?+}+(;UR&EnLAhXdRT+YwI|O zTd%Eke;S{4>!UR2rEyxXEk6@W#<3lG*FO*SI;l=U&be%sP#hKD<}df>ax^qQBn~G~ za2~gV#vR5(;|*!Y8Pd&XpBI^s1=*1k_dxUO2V)dg;2eH~=Dv!KP3zcA_679)5QJuk z#4wD(a%f(xB;h-pL^7^G^Hj9+SPr3RgeGW>NIZ?_%m{KRmYJ30Dy+puBpA)Lb@OeH za5)J-;v6pE&(42z<1XD6(NBWLU5>+hpYNRmY-g|opWrII%l>)0Zk*H$UqzmnHT5tb6nEIPv%9mCWZh zn#c7GZgt*P1CIZSn~$P-T0Nn871hxkt)OF+IzAPHrPzk;(A+K2ysafTh(pl4tt!ym zEs4QGxZ|9f@8XU#-^)0v8&B1|uD^Hut4d*xCz^(&q&{w%Nc))imK4oTkQ}%Vb&cjL zNH!NuU zI#w*2_oCy)n)j0WxS{5+YaT}03TF~)z9ak3}SN{oa zo}e2~cgNRn&zJVkmu64efBbh|dawHG^#3(K-_1jF^L1R^0=_^~juZbvUrY5bB1`z| z8jU5#BMbYKQUc}S>Pnns-!B=V={RnUhJ2@rYCgzbq^vV7<)2?#E|C2Z^kf(2Ik<7W zqg?(Km%y%r$6cl1$34kpvXH`8WQrW5@YR$e4=MUe5N(o0n^s}-nL?X3DQeiHXp`hI z1f8M;DJ4y5Qp%e0q}*#Nky6D}C8e6FK}s#uMqN{%lwcD|N+ZMOOPerHn=omCmS}C- zkP>Fvk@BEvPfADAnUt=kJ1G&SCn=AZ-lRNg9w+4q(~pz^W*{kp%~Pa2W1b^rm>EIF zV6+)a3Y*UqHub`rPFr3zGs!pbrg@8$cg%aF%r^_kMObXu9BY&8ePC9RvKH&G5u35Y zd_>Bp<}*?f&F7@-Gy6$7Xuc-pFpl7;IY!F2<^(CY%;}Aw!|{=hED?B&D@!LrNG@&$AfFn7?R^wrGvExcL^-xGe9( z)eqgv^iMNjhx zDZS03q&#k(Af=xfK*~Tfn3Si?Go(Cgo+o9vi6&*FQ4JfJY^IX(l6jewSIz6B%rtM1 zGRMS{@|Jmrl=sX$QWls+q%1Z|Nm*uAkh0ROCS|QzPs&EKnUt+&8!4*MBdYZ(s?{T^ z`6{Z}vj=<47o>b?4v_MdIYi14bCi^0=37!unD0sX!TdzZX_HLKS#zG0i{>{{E}N^Q zTsJ;a(s7JRGMG%HWHH%D$zgJllE(y)qM8qq-xMUJuqjH)-KIDxB}_?DN*k@&mGb6Z zQYx7$q(nkJ!i}%~-h8EW#rXS?!DJ#Oi^)bx4wH+NJSKpYJ4}93 z3Yx;C6g78~QrwgvrKBlMN?B8$lzUAjQmUA$q*OCCNU3G&kW$YyASJ{!B&D%wN=kFn zl9bk_4Jl!!9Vri*_M~()ok{6xx|0%NdXn;p=}pR`=5bPpIz1c|0X0wHq56yN`cAAe!`NZrdWsliQ$`|HKQVy7}NI7JVkaE-`t_~j<^;0{xT zl10X;zc6 z)~qLGquET#7V{w~+s#f=J~E$>vfJz-Wv}^ylrPNzQob^WNI7DTl5)&^OX_&l&qi}a z<-Ga5`JxT!vrA*sl$7SCB`K{<8&bkdJ5nAr?MdlqI+N1XbSEXksCI-rVtSMEsCk@} zCyeH{%1ASsl(A+UDHF_#q)awbNqNbk!Y^6yku09;Z?kDW|H!TnL|pf zd5e^H%zLEFGYd#rYF3i6+N>pIz1c|0X7eE_yNu>ii`KZvtigyu=7o*#XTcIx@jMGyS#{OI_+%Ug~K2A`|cu`|=yH*=!-VLbbBDW2ecRnZp)n4b}6BGW*HHIEwG^Jx<|A z=sXw!S^R>?R+x);{Dkw+Iz}mwmHl=UMM;!KS(JzBVs(b<2WhS2F=!pP&a0t1LiG_0 z)e>q4)e(9ak61a`f*WQ9tc-Q zZX}mSV}sd5ZpTi1gio*=$Dul-ZhdUJ9Q=K#Z-PnHqf2`piuU|pN4Pq5qqr=auoXM7 z3m;=Q+<79roE)k}Fq)tlTA&r$pglU^VW_^HYH8?v4;#!TavOGF7e2;re2M)y4%Hjf zI$xc?!L9QR=5iA>!_Cgq;Oga#3U@`=%4?hMkU>qjH)rVId@Et}q`hw8`ozVl4co@C#DEeU_ zhF}yXW2%`&&VlM!sitSXf*kt9eW;EHpt{3@Fc=@;3%Gi-Ihbpe3uEyDR6|<=nNyXz z?rcHkQK|lCd!()Nrdn^Rhobd}st=hF)zJh`U@%l)a1`Ex>Ij{L>TQ)`u9WHwsxI8; z*oRX%Z7z_aHQuVTl5jT(t-V*h$;3d$Uy)pq{s&xrtfWd@j|xHTpF`(Sn1umz{qw?A zZ)iAFgCQ1Ya2Dz3`(-92hbc*xg)Kk#`BN4!~1et^|jgH70sE#@aO85g1YNZ&4ETZ*4?8ai)-csJ<3 zAP}l2p&Epe#M}*eIs@~{k&ZbEY3q^Z;r~+C9}S^>0;=y)DwluVw$_clk7ju|#tPLD zOOM)U2Gw{Og?Oxk4i2S9S*T7^Q)pfHV553Xqp$)AaCIx(`qPT}I5r7aPvIz+RS!l7 zn^Xrz>%&#sB^ZBH-{oPhzgc~k8h7$|;MSMNbNNFo&HvwZUJ|%`7^;I2RDfgHSOnFT za`iAOvfoe_L52V4`qyCoFVr+58)Glr`spMtYYnxeE5f=eR6`xqLok|~c4Svf#7tDV z>%Z$pgm5`+ortP;|9%~Vrd-$DOeE8;mw%oAJI}HIU!giQ7ZAh&shV)>xZ4fzuj5u7 zt?AI3UUBPs=WJm94SMgT-W&R15T3^U;YmDY#*p#`Qr8pt zvvn`Dj=Uy*=Gb;J5>NT--!x$#NcAu@VL2K1@==od2*xlof|U2oGExqh-$-%w<}+ue zgeRH=`aM9(a~Ot+n1n(l{6fhlXlc|f$!?qO(W%+)`PMp9Q_~4ai`;VD8fWx?o8}Lmy^`%^G(;`~WB5oZ@D6hG=btMjd}sE>Q1b?<`N;!$k4dzdM$X1CzEg+8&8tm4A69c>Q_qLh zoLJ3+eG{7hdIS06{4TxAcMUX`RWxr^W<&E=3(jM#9Z^PeSLG5e!_6l>xxhb{G>Y#y z(OgeC56$z`yiL_T)7;IJ`J224qVOhS;pP|p-n=0<&&ADS>EZFdLZsoV-IJx}15(zQ zt-L3;<8vIv3H*f9CYki%Dc%dB^COPM#^QdP$t~E8Jvf4+IE`dn#|^x}b2}Rz&rJaY zq68*jBD(VTOJAtIgRAQq>|=X{Q1dM*SI@KN4<3(2=fzMzZ`}XS`+4d4oT#7Y`g-c` zHAD;OT#9nDexLe&uHUzX%j);-HaF|%={$(8pVyGfx7yDe#m~5Y-WD#qe%>xFtB?14 z{XF&cTt6>_%hC|)@3k@N=XF5ZeqI9qC+gdY`gN{v=lXY{{NJDH->Hx1`gfbTEb8CM zr%?Ycb-ykh{Vvz9Ysh8w>vYaNN!^cAU(WU8KId}ke%xQ(Z&QD51Y+=K`fZi+@|^{p zqp23^pe`Cf{kcv^-JeU{e^VcBEM9>6a-u$*+)6)gCH=V7*oYnGBl6Go@9v?GR~F@P zpQ%IEgZg`gpgx~;Fr7%(|BK}E!=^X+BnHFP|91Vtjr^ahSEK%62B?21HBlG!O(RlL z_ZvsjejD#$J{G{$qg6jrPT>cfHp%2!ROCCa8fqeKKQoE{JC2+6H(g!NoAoyj2eL0@ zPLO}E|5+*MZ~LF>gWhWYv$Xn@aQ)A1T>g9g&UOp@{mxOO`kk^0Yq0?vk-8sRc_H8D zxDPc@6RG>9>YENTf3{!xGq*nt^-1N#BEM6lsBike**{H3A5>EJPe;;TfmK+GwEfh3 z16U6a^;c8(Q%BNXg-vk%RMkk5D)dRKqPnR`rtP(d%aXSKXl?qU zA!vjqP+v85e{}`zHCSghlL^=g^<$Uk_xEErkQ=cXsr$3l3eayw0~12J{;m4Bi%mSa z66*81esA%Dj31*k%0hJ^tI!9og*w(BR{f{?P#;*-_mzEc{og}eRv%bW_kU{_xq1J$ z1OML{t{?mwmuEoz;he0EXNA0gz72&*?zLCC-*9SV^JU3^^-6B zK|eWd|Je15AKmNk7yrBWhuOq=b+8;Ou-0rKHz6`J`{Ou+%Sgz=I5zrZV}BDTk&Fwt zj6T`{|?g&Z9B{Cy@+Sx3drX4XWFD5~|}IPM@hW67dxR z`M$4)P`-OxVj5=RamG@0enK}7JBjaAoqy1spUa(puo>T#VMv6|g%QJdUF!2*g!3KL z8S&70RYLi`(fL%u(HT*JenZG-5rYW`r$0UlV=)1drP$}kkI*^1bROB4alNA7@68LJ zUX|l@(0O6YqXl%n3wK_&7%oqMJ3m|CTy6(9pIqm^sDVVd^PXf|KpS7-3@#&lA%73f zETWCP^eGC%owqAA9rf0rb04V&^|AEy!x6|>qs~wGd-K)fI0m->owBlq2hSoJuFkZp ze_J4%|2!GLR|hwgF-p~#9F7r~1J$QiUFu}$JQ@*j=h1L=sa?HXSC7)2SL5zHtd~MN zJcR8~eLQ!*1Xq8)CfoiHxO(%)xU4$Xu3mLG+hEmyO~h9SXZzV13HS)AqgxM2Y%f(e z+SSQ(^Rv9wVl2fns1By;Dpo=jsJ^0i)?X*u)x#_2vA>C~=6O=;@)?x+<_*?9 zNRdFlVx%-R!%3NJvX*2V4cSe3QXbql5)!YNXpOV7g9!- z_Zv&fI5UBi7tLf+rka;XdD*;5%IoGJDPNmwq})^4uM{a|OgT~-nXExPFUW3kl9Jox zCFM?2fRsX}2q||Poy%DY-tenIN-a}|lzOHCDIumIDUD5YQaYQiq;xk~*@j3x)0LD6 z^Drs;R~*rZ#bPrw1KU-^U^HGdlSz5o1ZAQ>hmPok7cmLb%r0^de!?%fh)jHs-G#g1 z>i^`+FoeD7v7Imp}yKt7Z=RY|FCYLQYG_0YgH zCYzxpTA?k%@c=rZyNMus;~B(YjG02pbhChzW#$7?)?qz%n2$;M412H_NAVp_;2bW2 z#m^}+l9CI#5rBLsZ>o|~-P9%Pp(&c7C0d~^9zrK{MGw=9?2Vxqi81Cyaxz{ruaPtG zhM7Z39Nxxzn1@AJjCI(E53wB|na{{Q*o*x*h!eO9A9As;Bmt&8DRogFO-)Nu+TtN} zG+oIE^g?e$;b}}ZFOjmqd_c-NtjBiq5hh!9Z~|v=78l{=<~@O6bVCeAo3W(4 zXx=4duGvIx#&)xll+UmSU*iyx;6n?(FQp%%FvDylWw$v*`miIf-!Ae~e1<(}na{5+ z8HSFgGbud~feB^`ITg#yDsnY8n=Pd5z)l=60qj#t0Te`6bi;5&V-{lZD}KWb_%Mfk zfmmFI54qSEm;5M>S_r{Ih(JFxkdz^a#y2>MACZhJ@If`&@}LNc<5@&w5tiat_)wgE ze5r^ksE-gdL}T>F06c|gypN^$7<+ICM{pPYgu4-8hLa;O5mPY>u~>qo*a9E!FUsqK z;fTfsTt#jA5_QoE_hSO4Vm&rs7xv&Pe7JJAUje=}3!)f`qZyi`EyB>rbRngi=|Rc} zL}R7dPRc%fiNod$c@`IqkCYsNJnyK0%80}O48mYcHFL;VBw!ED!iPyExDCqECkjDp zL}19hyass9RH?}8g$Q$jyo559{K}CPQ5jY682V!%M&NbCVxCz_%4)Njl$~Y|DF@6^ zQXZ_#^MzUF0_ns4D!dC=Va5`0LQ$9oE&-~uYm=kG>cgkUJ5u>-sDHICw;1-$MUj%a*lz9x^rXKF3ve$Wwum37}wyt#A|nj+v98a zkmV}h<0yo?P|GwRCB!r$rK#CUevVM~dBZRbFJTvwaRWXSVSlwa9yE`V@+1b}DRZ6l ze7sk%1-tMO60sKt@fD8XD84tz>*hRVZufkrHg$l40n9Xk3L48R&awMs?K0 zR5OQ+#aq~e8;GWVJ_oVbi=(&(A4<_@uZY$N!}Ey7n`Rri6Z_%Q|Ivq!#X>B_J{-U` z_)snreMa;`e?-BDT3P5nqXQ!F7<|ag7(fv z@q=Qhi(rHz8f&l~iP(#bj1@>0YNcY{q$9M!8%(kEn}?+}y@2BxMPfVmW*$$CyPGbiq=5 zilg`qKD1^0yB(r10SkGOkh$;w$5A_-Q ziN$%`Ko-Wrvm!fk;7(JJl$xdvSr^R_hAxQ3d@R60e1#M6p#@{)VR#3daT&g%e9jmH zms+M78HRosfN6LM^UZ3~hb)YLOLkL>tb=+cn3NU>Ll;D#k9nMwsb)GUGZBl0ILf&C zWh`afYZ*4<9ByD%Ngf9Vl=6Fuj7F2v{C^dmw;9bnad@MHWNZDYvk&^jKzZ_&v)3nZnaDNU9^ zIa7_4+NLfk_0bTG(F`q2D^l(^;iNoh+LIm7$#fy5o9RJHql7w_lp(?Ll;C~Jf>m^mSQ=4c=od2r=&b| zh1;V)2H+_?gXa;AahQq)Sc=uyj1RE~2jIiY6cLe6kc=zv`S^a}+%i7Yptev5igA9s z;&_|$fGx!_CZG9!xXh5t*&6L?n=xYi6?L%x)%CBv0LCR5^J|4R2uBBWGF`~-h{SmOv+7&_v+G%>u4CPZ z@xdneXV$aMRFwG&Xo_2{WBm-{et)lCb&V2?CBoHHj$zE|HN;^q=3@!su?lOj2?^MN zUHA-%*pGww2CAJb^-V)kb(3SwTcqkH`^-O5H~G#u#+5ON@vcPt2Jbz_80WIBLvgtJ z$*P?!u5R*F#=zt^bCvv8)JaZayzD!Ck3U-rJ71MxJTGyh1P!4~ zx96w-cd2uHyT0-NTYclSb&XZ9Q|G;P^^E^%b&DCdP#xdjt=~)kI|DMII7;9ilrm*W zDUbV59ko!$)FY*lX--N@)0&hv2tzwOfQL*+QaYQiq;xkCr1ZqY=w%)y`{GFq!Vo-z zXE6*TObj^zFX9cng?I2C7GM$9;~%ZpyPTg~fwg7>xe0DQtDCoaCWn9Cs++Is=BY;I z^3PMPkjFnC)y+S3^G!9kRH6d?ZZ=;ug8jA$=I_lHz14Z4ZXT$c&-qk3#(eO5^Ev;w z=W9mh=C#Kk&C~3imwBiG{`r`73-bQOkA?j6EW6yrdkStoWmm>=dm^U)&F4+J`H{Ce zFOrwbD~Zx5iwcHA)1Gi>*yC_8`yk9IK?p+8&AdelyQ?Wyk*l%Uj9`A7j5A%Bw-$j3 zCV`X>%??t|;{vi}W*QiBA{UC9Vq|gjML+B_UKVbL-*6d0jN1gGhv~)mOK(J(>!i5z z&!5T8TpH*c=Q74z;PWA2^oOMjx*{W=mwdR>j3p%z`|uUMMytI19Il#3=9D~!{>&wj zpKuyA3bO76`>-De@ijd9b(xR_+0lg0Vp9|=!t;PQ%*A{xMi=^Lk+=pQ>e2TK!3abn z0Xy-9DG(&f>0av5R8UsjOJ*E2Tgmj2QKqwxrQ6?A&Nei=na$(nUNJaOm4CO z3ZXEHnqp*eR6u0}p$_UJ1Px7NG7LKBxTFhWT^AadtEAkZ59ULzxr{ksuo*$hIsAqp z^Lf4T8TQ~3uHc%fynxREBFq+YH@?A9bffPQfp2gWXK)rj(NB@Q9Ct5(!X}86rf7zi zxF6wo01u%fBG40$nZD!`Nay44MJ8lHc9WBo+{l9>D2n0;M19kflwRl!k8Nps#AfhI zBxL~o0O`nnz7)^q7eY#ScE<1#ZO)LtqD~I3$4tyd`#gNNqB+~VHdv1h*n}+zWjojy zL+})~V;6RtL!=zRQPj>ye+Uaq>pS^ght37x72VAaQnuu0EE^3A@Ou!6CsChmZm_n! zYnQ5cBdIR1ADK92cG6vz06pnqSUKU_4mp5XVO ziFuvv`79h~A53C5_>KFTeFgO3xJ?9ji>BbM=E)KhPs*r_ev{c|PC@R>y#Dyc{6NZe z+`zAF8|6wizbN(#Y`D`DAPb@x zN}{wWOG_#H?;tTU7c^>)_ z&VrmMj(boJ_u_dB$1Hq+LpY8yrFc%z3bXM8^hLf3Ymk7g_zesuc>NKDN6T_d1)HJ8 z5I%VKvVB8SG(#H<#?yEeufvBEY}DSmyf&yfu<%| z3&9A%w5rT&!fS{{0=|WJAFmlIpgF=#BpHo~h(`i^)yOs^roGF41j@1fz85u73w6vh zY@46Ob>>dVcWeXYlsQfQf@`>rT5KCb@GK@^5~g4pW+TodlGpGI+sdKXmEA9dZH#=$ zw&5_2;VkO29SA{FGn>!9=!60n;q7G{2<6cWeeonlV+xNy6A@?cp9TI7B3*|nBV&xCzi?_BNm-x;9dmbWyE0#mSHotU=Q}CO~A_fPMgrDGDV!RA_ z(H!CEj7W^bG%Q9umO&>*7>eic33lVbE8HIa5QQNaisul67cdR;5sy_!z*Zz;KXj6X z>39VnqkJIS6nIIzA1{%d`186ZKzn(~yj}?|@e$U?HD#ZhkJL@~v%B*D-4S7)CuO*K ziIlq(GCxy2Zmz=CSwY;CM^fF7Oeub7VRl$ec29ZZCNt3eryJ`*6R?o#_Kx% zXusa=pWkdhTx-4ppmklv5oFx{c^qx|ciT@7=DR@a%e23)eRb`lyZv$Phr9E^|Iz-q z_QkaiezX1Wdi;L_gqW_RbT<*?zhZxUac;JYxV>NQ-#7n9_sjW+c@k%0*fxm%Gds#b z-vd=l1SuZxebGgUGiiVR_kJ!zHuiN<&!~=UC|crvw1w)*j>2fDery7EVi!Kar#N6T zWas`6j8Kd=o5%!wWK{R{Q>4$q?GbE3Nl9Jj^?uqN%_ed)wqPrEz}0vCl*H9SHCqq{S(z~4Mr%M!PRTMpUWN1C{lG=_h2v5)@5~d zRHOOM5YqhPb=}n2v{x~Eo0^ zdAK^LRk>UZwNaQco+3~^ROx7XlJW?8p&tf8HBqI8sYgl!G(=;lUg{|G7AbQv4-3ur zr2L4V@ryY}x_YYjGNx1=HE_(ReyUUs;l6$AWS{m@agMRh}0Vlz}fRCPl|bwexTK2$>ulSCdz`a3ut0@V!-K|}nR z`k|^9S_`3Qh^9t$LziQ%Sx;`l7NdHi%diIPvB{{O=zXY%`Up1fld=R$vC0G%Vm3^E%%!GWH5S|NK%HG5v070x!|pxGJf+u zDNC>nY3ukM;Q!<|^N-f`b9Fvbj}J{{Ki}2;%#oS>L;TtCq8nN0&){4(KJU=@(N&zy z?w5KTNn=RAH+~e7n|&bstH+TJv2B&VH=eYyIP>zb8C$R$dvF9taT>|EjvHta==T6A z&tVuQViMx88S40@!yk=P72^70xRr6LP;TD@tmhQ+D5-1 zbsg1F{S-TUS;!G9}b>Bc+E)B2Pl&RsXDUs(z-W`%f7E+MbU6S?n^OkaEt9FV4O&W*`>xu@oE3r=(mn z|I9inKE4lCLq$|SMgHpgDXN(wx9g_duA6eZZVJca>2u$%n?nDbv4z`pQ~vR~DXN)r zyKc(AzHUly`Z6*IgE7_2A!Ct%Jva*=CY9hexLqfO;~^ZYz8=f-g8$QXQW)U)cdnCi zgZ`Q4^V>|`YQ2<8{LBsbaJya#>)x3Ual2j$W5GH9b@ftIC*@OohTHX0Zr4lsPpFro znkjYgf2nTDyBqj>_x#VgDYxsT@Vq45u9tGVUJCC6<^%pG)=ObT(o2uxh{1o?Psz>x zWghk~^N@K{>ZvqjceM)=upbBU4ZL)I=}F0GGLyotSqi4BdcrPB3Z@8o!tO%~4o!Q) zVdE4W_Vt9ryD2yv>j{TiQ*cPtlR$G1DNKz|QHGRqrUEGyO=VJo%zdP=`A<=klscv! zDGf{rDGg0yQkt6Pq_i^klhW3Nlk$Lhh?EYd6DeIxH&S|-NKzg)y-4X}9wVi%d6Ja= zCW@3nW(X-yo1x^hc-{;rWh6#njCp|^hY5HQQ}7aA#w&OYGcX%-5Q{jxZQdniF6Lo@ zd7qReSc+v>ft6-8xdt1|Hd1z)k4f2W_==CA-N!^~E&$4-#lwPI}DUX@Hq&#W*lM-bHkutp95i2(a@c%BN|HHF%6H}@DW}Yjr2K4t zA?1uYN6H2BD=C-E6;iI58>Dy~gOv0pBPp3pR#LK?oTTJ7c}dA(PSni ztI1AEPLrFIye1zhcbWpE6f#9fxyuwICD7bMN-0x@lyas5DHTm+Qi9BVq*OOGNvUn> zl2YFUlM-qgk6O{654t)y%-J4o4OJ|^W;^BF0L=5tc^nf;_3 zG+&c)*nC4uk~vPwcjhE1r_7I}{A_+9<%~H;$_4W)DVNL@Qm&aBq+~75@i`R2-6)4D zsErV`KpS*6T}kO~B1m}*1F#0`u?wHzAP(Uae#RwSMfwtcSxCu&T*!-j$ZrahccYXk zLrOVQfvkieR6{UA(A113Ma2>-Bhoxf_QIp)aZ;Wz{m3W`GEb2*0x=k6#*p%Y8BfYY zGl`TbW*RBe%`2q5W@eBw%giR_O%q4T+vZ(T=9>AWEHv+vvc$xbvfO+?$||#llyznU zDVt0JDO=4pQg)bKqhIxqgjE zX=0j@(!#VN<$lwalyLI^DG!+rq;xV}Na<#JkP>MgCZ(6@L&{^OFDXx&7*a-=F{Hd; z#*;G9Od@59nMTTV^9m`inHi+aGWRf_Qc9UJq?9uiNU3NllX9P_PD)Kvo0PhyJ}JQ_ zl$1uM2`SA?3sPE{`$=hQ!by3+JVZ(d(}|QWrW+|eOe84}n_i^!F^`eb*E~r|fAcIU z&zs@o2*j9Cq>M2ykn*CLOv*Gfos`$i3{qy9*`&N_;z)Vhyi3YlGoO@&Sb}(bfK_G< zDeKGzQZ|{bq-?`Zd}JAg&O{&k)+5x(M+0rSl4-I@;hd zjKpm7CK-#j&3oirEWrC%f|W?b56H+MLndTFcI3jHD1f_A8+A|*!3aeYG&8Npa6E~z zh{Ia!!)avQ&-w_|M|(tJ0_GzD$8iOBG0;&R9nc@sFdrWq?+5M&3mOJ+Y?<%B_X4~z z$8wUY13Wz9^`taAbI0y>vjWav%BsEEe`PV zkyB_hP2U?|B!K#Zyyn(U;CgoVy-#WD_no565&&-#_pjemdr3gb(%Fk#&u+hWkai9- zTVwzAK}!R?{ycyZw3!O##clQf9rbAI_jw-%c)Yq^Yub7|S!s{u_L;dqb(ew;1f+~3 zZs2;|Z)j407fN=gt-mMqxc~8HY~pX1`!2v^cf|Y3t}k>VAZ6U|POjJE4NvC&$uQdb zeM8R&c&*8q{5|?R6E6mM^Z5P!`FTCxS##vmOW*}^d$q%hg7k_4<3(RLkd`AYbHq{XI!_^QF8#wSxVxQ&7Ep-h2E# zbL{#~6v!PxTYpq*xbtkf`XgRJ>eb_J=se0gFR1DncujckHzWC_8KHG0T2GP-MWFK& zit05&^N);xCU3BOM`wHkO}{n>(06P?XDl+nK!-a0jQpg)(hRi^IH&J4%Vu{ z)%Wp=`s)DeJj1HP5;vD|GiXq|c3-xuIE^z<4V(mSqjiF=E|qGcYklfi+)7>a4cvYk zQm<$IjJ8|PdYH>ca1`G{=XbsV9hAt5?5K&_P#qt4KHDGp3{bM(%T$$q3gWOCI{2Zw zMeh8%(Oed<9PdMTtg$Q#SC1={HAW9Y8^LJS1IIH@@gm~V^PC_k6X!F4tFPn*u)T-Q z*V`N_ieD3<(0WF9eq&c>%8jR7VqYH5YZw95%Gm>-=~Ru&aP@M$dHksu zkBLydMXhsE-80!^(yn*!V~bBbnM#&q8>t_+6St45M|yZW08c^>zgjq zRvjKMoxe_*s{`rk^0+!YuKvz3K4Ut+w`yvAi?|Kc+r-W4>S%qZ>gwqHGrw0?$DOCz z)zgXOz?9Bct^Lo3&;i=#{4@KTYq{NevyuD|+wn*HoyFL9{4@KV4{*Ep*niaiZi+$$S>iOuvn5*aG<8r!lf4;8If5Lhucm8nB^2L5zZZ8ng&@rZD z#4sjs9;%n3`iDB;J+mb5k5cTv!_|X};d0~B{C`$nZ)7#u$r`AI+Nf_rNYPI37>q*| zzK>(ro{h)7cl!+`C8-j>AE9&k9HBCwyDCtBDh%403`cuBfV!fNx(!VHjdC9@8)rs&S=ScRH|NxjNs6s11+r zMAaQn;(P2@s1x$Pc^-%Ee76om3{;QquR0&WpRIErm-pt!Qxf_AE4T)xe*DklD!d0u zqpYb!ipP6X+O|&i_kC)17<-eefirFht2`Y%rd}Gk6Ze;f^bh;j;YE@nv^h`53o5 z10TxpnW=#8=!rh)i_L~fH(q`eg2t}{(G+gnI-JWL@kis=!?`{NA7B->VF$jzerWvq z2$FFQ7w{{zuH21B_h!dULizqv-MKiUdT*-rHZnW=(HM)#n2MM1GUj6;;;|enuo7#r z0o$eDnrbF@Hfv_U)5ne2uhrVpvwzQ0$eFjEkZ30X`D zvOH>|9=z(j7ut|*`K-l~mszuQh5Z$L1y?76qYd5>&V!{vg6fK>}j;Rr-7U^@iwedb26(;kl<_ykuG z=VR;zTd@-#V-Nnv`6Y6(eMJ!JAg~~RB9i!yIfo0lh^z47CBAERBK7&VRF_%j)2NBs zsE=S1N;X7eG(j_jp&`$u&bKlLu}Bxs`A(Pd*~bHL3xh-Xo$aAovk~BF@&;fm-+M2h zHGPNnh%)W??s^FE^t}?0$amuB*oPz>$0?jP7f88;%ShmJei>KcL(V|PE|7>bsK8^b zgqfHHkMGhv2t*}Z=W{4Y>}yIrwpH@zUd|hd=P?Rn@gf#tF}!rSy<|kvmmY+nh(;*d zqZ1+!!)vZO!-@C`uHJA=UTU{sw~5I~{~1#-4bw3n3$X$#u@)Pk`bj(B>L=~y@|W0; zZ%h*TElwgCXK@a1@f=*ib@*_G_o@$xyhm@qtH$;aeR%H;fII(*$LlScPCs8{| z^@~gX`C!WJXvyPMm zxOtnua`_V2gz(G}!6Gz(BufQl?=xDwJTq5%-z4 zq(ox8vLd&~J@f^~LB|(1Lu2MjKeegIuKJ%I3#`7EUUg!dk&s;62 z9(hZ&K^QzYax{lT~YG;d6rah{U7N1lND$yg52glMnI5c@H3l z&#=y;6PS(dBmS$-bpW+ekyOlI=UIc+IguNAkq=Ffy55-TB|n5m&BL3OiLPkJh*V;)q)XcauZLo*{QvLOd*qOPe=Hb4lPBOINf<0Pstox~gMSLnP+ zr*Q_C^*Wv6JgC@-{fOglUX2adgU{hZ3}WHV7ZS#2Z5*Z|7McXy1mWlm)vHg3j3zUg z8+lO}fpF(3TgYWsk2|z4HLnqg$KmQ{$MBha0pra?ax$i34q~BN;9g$7Uy#H$sD+(xz8J?^6g(&gZ;kO?{QXV1e}pW8M;>iT|d zXt#%I{B=WjMBowh!835j?+()Uyowm;{8DjP0PhL*UlESZaOb&5d!Cv|UbAQlf0z}1~!z~!X~;=Q1HauFtu=lnnf?a=uE zzCsM2ebt@U`LUuAlb_>;P`$JxP`w$|Ykvc=cneE0lFz*A435QXn1y9nf%VvE6389+ z*r+byKI}KHKH*8)$v6j{kK!1Q=>mdytyNz?k^O;FID^XwFXFFPA5)a=HxhV{>AVjr zL{5{(#Mn`L0v(W{G4=sYAkDA*h=@gxS~ zb-8eZwPIkE^iHO?LLjR>vviEb=q`iyo1($ zk9IcNr>wo+uD@jMU9@$7Ss%~G=pXM{yZunw`h90;r~H1}bX&ZPZT*ig-r9H4*3a*v zt;b)6wr-zDTaT|UZ9SeOyFQXO!%p5QyZ(9F`g;8jiD=X2~^-;8S|FvoB_YI}3pAV~+~&$;#>|MBq5;r4iF>wZFM>-mkRt@{h7 zt^Z#`n~#w92yH!%puzdPQsfZYdVJwS{O^Ziv~$r;pso9P#jZa?o81!c9ol-{qn^r_ z^13dht=naN+W+&rXzTY3rLFhFA=>)=<7w;hoVMFfqpkb7ZteNB^}fy3&i{DM(AMMZ z%==Nlx6m{G`07B+TOGN`+u0WUjMwbb-Qu2_5KdG>tku_aYxeD`{RAudVXT; z`Yp6|ztgOJg0>!49BsXi&f3pkq8&*4hW-4d=lqX9_k;fX&-=Xp`MHa>9!G83x}S2^ z4yUcZs}XHIj`6hhdbFag$1{VrUXL!;j{(&pN{Y{KU}K>z&uyk8*oGKZR)PeoxcZ^B+W8k1sd34qz*Xt2PTd)5!wDovuTl;0&`g=pIy^(gx5pS7#d*8RmWKRa!w;^jO zBUvhCtWoxTpa1Lae7@bMbI&l`)!py$_jq_d-shSbvz+BR*Y&wR-|yGHK7?)EUyIn* z@AH&>eXM={2lglWd>q?)+&bCUr|#$deR{C1kLR%Mw`@B<+j^h=z`oxiw)OKrwe6j3 z>+jlR+hzNE|K43}>+3?<*5CUJ+xmUO*j6rMTffg>w)Oj7v(HD_*9SKBem>f^i?OY* zi(y-jPi3}se{8VN*JfLf$4=YsVxK?6w*KF1Z0q;%4DkLwBiPpdB#>==zfiuJB-%&D z=Uktd>kIok`@U48RbRlJ{x6QpkNtbyQP=;adioP^eL0cb{yY1#RKIsMeAV%{VLNsj z*XQ#q+v4i_r?@R=p?;r})4W_iS3odz54d$nv=)`tC2{qAw?2t_Y()Ju;@<~W;~M8~ zXiY8i`Z^t)!}|7pxjq@Uj$+`gh+{5pD;g9XcQa|I7ZVszrF8gnu8E>!ngZmDV2<^-_t} zACuZ#vuK6BW)8U$o1lKFZd}XgiAd~*dZv8)rczI(#tqjum6ZOd>O6mH!L2Kk)IO7`&;l4Z%HQQV5bGlJ~(*>?= ziR*LHI?wSb>9>0v&8i|y8b7-~WHzPvrid zNcKGmt$*r{H`QCDb@1HrW-e~4pTzfgQ~liTcymNCu3sPq`w+x2NG(Jn8Zr0^@kV{z z5qJ%K5r=E|kG>_2QBuLbf64!N*7Y-~zquRSI-UP*f0MgE{ExrY_vCupeUH0~@wX3y zhrjb7grkpg`i=Xb{QsV$_C?)n+`{kc%hNOE-#=BF`~Uv_eesF)P3h#k3aX(xYN8FERZzJkZ<3T`i*_xU;X=-{9osh6h;1yz9!%IKb?2}VBC47>l@SSz7%ft@z&$4 zb!+rk->7fO_wm;_h=ls4)Gwue%;RwTA^(0Rx1V*N_wR42!nbaQ*64{DW(g@V*p8hz zhYRrSLu$)&%eODjJ#KE?&aL(-6%C@cjc%qdDI+irCrrUyN$XqEcoyyNZq~o##<$#R zA5(jt$CA{(B{yE>&+cDJ?6}+iI5vzP0rfAr$H_fERAjxKJ|_42(DSP}RP(zo^&k72 z+{gXJRRUTkS7$&zm@2i@tqE?(cGalNygE zZa?D2q3QS6ek8FzqyZfBi|g<4f874=J|6dYyT8MK9G>gPagTRmeK`6%WC!<&d~bG< zKS4da;`(je{rPwG(YW8=_0zbY@9KB1Z^rj{L3M2ZagP3d%AQm=?z3^{wf_A!u8!z3 zvHqLTKyO{qzYoX#{_geS-(TbZy!v1F+qmc1X*`^W1nAkv#tD+c|aBOJmZ-|Mzy^@At>cuMfxf=V*+rd*1#2bLg!} zsNY7%E6L!FzqKy+{cz_Uo~S?e&Myow)c8fQu}c(@bwIx_}lt%J{Xq8b00r1 zv3{IR!@bwnlG=~6fv@Kf=imJ}Z0ow$?e^oG;Qy z66?o#mCw^=_t-sIp;{=cK_TRXEoDFQ};q$H^ z=g@~)ynSZ$Tj=`uh_T-P@A`2zupPk1liH6H%hw0;^@;W4gpKoFA5LmNP8?sa$HVpG zTwq(zFV~NgW4!nGcl|gqZ0qlE{WxVm^8Ws}+m92<|JToR{W#&aomf9kB%jaE*C*DG z6EnfvFXj4iPOz=-@A`29qrClEx7&{s&i~i_l~_N{t9)M9yz5C}s zs~;zr@0W$Y|F7!DiQ)U}@k^{9XD6T6G^TH{W$q2dHa)GKh6hi>;3R{ z`*Ei6|MmB~ew-M#_4;%DI5|G?e%|%t1hcLC!}a5Y+2@nmkJHKizw5^t%(mV?66?na zo9x|RyMCNlw)OsTyZtz+r+DxGKdT?7EZ+FT)qm!5TT}y*82HzLR`I~E!xqFrF~p;)?liug@ej z&buCUn#9I=NAS6qaJ$#Fmh*qt!gn0}Cbs>@!E5~c72Iz9r4l1C8ezPYue)CrAP>GG>()g{@@EylfGb8&A(~nH*_~XTV z?NTH(4q0Q6#f?9{eiFcmKq&mj3-#k;gW)@FNGC0&QPxx-LlB1H_z>d}g@opP_noJt zHV0IXp+3U!G@6)ZWDA62Fos|#IPGO@HuF|sJ{DmGV$5oCEjC~~b|Nq<0H9j{EE-SZ#Py(*MFR{8@BwsTR3$Ot@ z%q~*=$HBUJ;u5;9P?iH0|N34eAM+irsv?N`5rd%dcdgL_Q_V^;2Aa381WKVAYM?GO zPH;Lt#cV9W0sMlK(4djhaO1X{al5zbwa|P-Bd`Q+e*c8#V^bf_C8O&^nrr13oPoxz z|Jn1cXifPQW;N;NU(x#VvGARTC5~;)Bkns7i`Jm;7UboBT`F0wKh86rmhG&_X6_{) zL>`lul>A25vkIdq%Aq3M{Ni=E-N1yCgRvkF@Bi@c2hw=`{m@+1$Dlc?H6N9yaKiHd z`HuV3*uO};k0?yRG<=3=EWjeHKn&Jl1HM5lwqqxLMjSN%RM8?{Zf=!a!QOdQijle= zuK87TExZbR=LMO_w&s_(0$nF{{kN_kz|F^ag5ChlJMkZV4pH7ZrpEPOg~lnSpTa%? zIZ+TAx2S%x7tjN*p)Zaj`&7OTx^AeR&V=SYNHL9Ti^vCE_vnsDe1Wy*6nP$(%~ewK zYo(pe?*NTQegfgpye^TLi_ftVu8&yPmyY8Sbe%~D>ZK71%?lZhm(dd|5Mwl^){U$E ziQ92Fj#D^`q|QI(dtFrXIz-@Ccs@;d9vc7t5;qTon?F?Z#^gsqBz69nIehJn=6Ah( zmEY?ck0spvuKx2*Xg-o8&5z@`y?G=;>3{5jNX8au{)i}Oo=*>BW^+R0_BDT&yPg-x zZH=dmf*ZHLncG`%ef&OS%r#ElfBd|gAI;4ln&|c9Tj;ygd^;Ln|1#V>331%^oexOk z?6V;VnioU!L1>ZA;?e=3< z;u@NNKW05Xme_o3n)jj#s-XsI;W4y==E2Z-@l{xZwb0mc@tr4O1@k2Abn_)Jw!bn$ zjphy!U7wr}%>f|3^G+AkeAA36FAI$`-wlm1zt#B)D>BbV2&y8X>+iey_#U&5)Vv@X zpI#iLP#Kz6VKl}YH!np(^9xsI{+3YlBKhCW?^1=HiE5@Msrg=#(ogw5U#B_QMDy63 zgPZrp6ZFUVDu17+GT1vm4rGB4xW!a7ApZti=%RhPkR;>rH8b4qc zv@XCE+|7Kh_dx3dltu%DLF)uWU@(S2>jlifYOI0ggH39mxSO}8%pUK&HJYzRG~dH- zaPtOfoL@E6GMYPH?#!#s9KXkSpE=2VKM2FKh`^h;-F{m2nn=bV`ZG}wMbH7yBERSQ zRMVb{q*OM|NoiqTBc->|A)PEW<*5Ty!dT9QH9t|gAg+a@25O==`d}!AAvBj)KyJo& zA~iA~v&lx@gZuCxaw0eKn7pJELJ5>J707yc0*%lL;b>#pk_7ay39$w`=k zMOcBA*odzYi!IoWqd0+hq<)w~5d56wltM*RMq@NVJG94h=z^|@KzH=Ozc2|?FblJ>9lOlWr0m5(9KkW1Hs{I9 zxN5Ey;(Q0mIFC$$G)Rl|$bbj%Ac9Z;{(UV?ITvV&c4&{(9RH`m1Lh%8G!MB{GR;Y8 zVOo(Ich?4O@gw_R$;Q4^8k#pr`NHr}dxT%@y7Hv7G~uLhN_gEYQf8aaNm+b1(LA0>xh|r)J;lR5M)Uc*>mqKy6UxU#{cXBF z;^yJp&TWk)-3?tI`4zfGqIsnxvk4|O&(st|<2U$T7tuUwa!+bX7ibF2m#1|bimETyyiT>6$?sXudUF zACMTMIjuzXd%4S0CPR_f{8MfCoaUYCXEa}^tTgLLQSDvxhVI2asLmdM3aE%GP<_3= zX+x@x-p{ys&c0>acb>Ci8M(HHlFH34F2czQ{ z5BX8tlp{6YW_D`BIiMP{JZ+kgZa%kgZnrV*$oaL^ng596pgPO47*DD~wMP_0_?jlK%isWr~yTYLxg z8Q*MvV9m3t`M@=|zKn(MxS8cSd0em(tMD~8L-Tp>#!+Zq@2k*!-syt8$89;tdy&WF zBc&jUARO(`0bS9}^d-fOi-_g+3G{lDzYoW85~}Hno6jwwx~yumZvF#Tm#x6ZMB`OH zg6go>kS)sV0yS0DRaH|JjXix4s-yOX>Zmdf6L112;no+4n96$w+<5s5+`fop)4WoW zlFmFr=7r`elr>O|H4d8NK{Zv$JDt}oYT7Utkq0CQX)(*QliaV@^dW2BB&O-603}AuyO=PaT;f!Iax*X2DE}|tk2_sIYf%) zY?X&Dd(9=a?v)#-m6c;0(Y(}J??H15NF(FcUr7~D?HU=)eWX-2p``eaJKM*{MC-6z zhX1_RFH^VFJfs2C@ciq5nfRFRyv>@s`2aNUZ62%JX?{S}>uP4=TnPcx-lQyQLTfGc z!#pg&Vl2UOne3Os?+tu0<6GBY=UZaQk0rnF{m~trJ)*~tIzG` zw(NuEi&p(j{pqeRJ(SzxzkWekYGEO$it4CoT9Pski?GD3BxA4|UtlhEGtD=;49l?+ zG1vvoKU(4*<^o0~6GE!CHq*=^B^s))Ei_usEhlp05#)o`cPmO=tqjVcJhaY->SmQq zHB!EVn?LtQZpWDb>SAe80%cJFs+(z!M|m7iqbZtW2;RpB7=vKyWNv+~O56@HZeHXW zY)4}*=3zcGPjWG8TZzq!T!YW4Rwizpf>GR-(dINYu`_V%k!anrGYF=JRa$i{sJ^B7 zkHyV@>|4LmJmlk-dFxAV-61z_vip{V=Yy~MEzb*he&FYz0y^U*^ExU1^UEf+p5x{p zK0@v0IARZZ=X}r~!HF| zxy&eNJYfu0Ar9&z^X(hcdLMsP-&i>3IO-RR3grC+{_EAdzJ;rNPV+YS_YEX=z1v;S z{{Q(pcF9~EFPn;F2x_1X8klghF9zUs{8`tvbzQd$A~7Dm<3ERSoG}6`u^L}O^Vpw* zjzccN_j+e1-fwliQ|s#aU&r*nzUbjvoz_?Kzh38moyuLe_`M$f-9LBzu)n1K%>G98 z;>7BrRk*9QpK<$@7;bOJPV5FdsOyrE!d-qH%K~_W%a+%1XrW7zx?Ff2hZY{;aN#<= zbqjB;*YS4f5#H*qyN?v!Qm*4I!6QK?Hz|2cUQ+U#f}}iZijWd)ijz{(lqRK|sX$64 z6GBQAQ;n1wrWPr6@EGcu2Bd_UCrEk9JWWay(~Oj7OiNP2O&e0$nGU3MGS89H*}OnX zgn5ya9_D3IUd6xgn(0kSU(=85kJrr`w=fLvU?kqd`}hFkFdh>Sg^$fAq)fq7 zOgEpB@)>4h4(4ILSx7E|-p^zW)?z(2;7fdkugzvsc-y~jD=FK|4pP21Ka%pZi6dpN z*-y$rbBL5*%@Ijr!P!^L6iFA|_!bR-4V_7Hq?I>@+`+vdjETN}SnC%6@Z@ltboM zQjVBoq-fo0w?b2DE-CMs_euG{d`QYT^ARag=3`PmF;hsHW@eD`srihQXfv0T z&&>i-7MUfaEHf)eiNPv-Vb+qe-fSf0EAurevF2M+zBAiN*=c?tWtaJxlsL1Ol>O!) zDTmCjq#QBFNI79nk#feIBjtj*M9LL&jT8^Z+>*@PMM_GOnv}FAJt-MYASqeQ-K5-O za*%SLd4QCMOb{u#O&(J6n*5{`G>?)}#JF)MgV>hD&L3QVaiZr54{<*rnYoLUlqNMP zX-#@kGMYeAvY5L`xyR%nXFjGgpu-ud5V;$O%qa@nP*68X~IcqW7?6@!E_?!In$Yx z7fb{xFPa{tylh@2rKjmdN*@zRN`Lb@DQ}p;qzo}{lQPVVAmv^29w{GUEIu+(qEHDJh?sXj0~y&q-Ne7Ll^VEF)!wi6LdRSwqS?vw@T^%_dU5F|nk4YrZ38 zyV*&~4`vrBKbtsG_L}{q95jbW`PCdD<(N4^$|-Y(lyl|+DVNL@Qm&cQIjQ%`pwm6E^W{b9nG_(Ja4*?5qQzOL`ok-qQ7~alsC*^Qihnf zNf~BFkn*m1kCgY#2c&#x#*y-oi6Z4=^9dR=q zY=)5Xwi!ms2=gu}@0s^W`M`Wgit0;}$K)j?zbQz{qoxQc#Z5_4N}IBzls6Sgscb?? zscNc|Qq$BXubVeW(KrklYE;LQcg_2xd|*B#Wt{nllqmBtDW8}rq)an2$j=as&#}NP zB4vqLM#>7anv^wIkBvrkM!8u%QN^r$aCJmiKUCdtB~&+T1@&F#LKSw+zIFM8>SpKo znhPkye^Y(wZ4ASQ7zfopRP$I2)ijo4rCCD;aUQJm@ei5>A@Ch<-ufoT{kMDFK+ZEae4T9UJXkYRkv=4Ew`-H9&Jjt~Hx!LQu zN<6Pi-1c<=UfZgZSK(Xe^&JCO2mhJd9$uG{%&^P2QwQfhsAV1_rJiX(%Kz0m_?`MU z$E-Yl`^}yDx3>na+PC~w^>5X@|IE6#>fQ2J*SS^S7S*=z)VJ@{x9`-qIWOhdHL3OO z#Om6v55|9<2OXzMGIJLxDNSlp(wg+7WHf=KWHEP>a*xSD%6;YmQXVovq~tbvNXcvR zlTy$;N=gwEOiFQ6l9bY>EGgwpMN%r8P*SRz>ZH^(wMlu*)FY*V2_xkR^Asshn9^^ls+bsl>X**Qr<9wNf~0^ zCS{lzLCU-4JyJe0QKWoqJ|Sg_nMTSC^C>BxnP^hxn$JmDU>1?G#4ICag^3|$wOK>T zI?+d~3cVWxLr)$`582DLF~UsbAlzU#o_F zr+)3NVgFtAYuERBt99zu93HA~+|{RdbKBLWgQVm%xk!1~JVHu7Q-G90rZ6c*O)*kRm{O#u<}T$;MN%r8 zP*SRz>ZH^(waGfDYwDBI&^%7clco_VjZIThnwu7+v@)$pX=~b(($PFi%JZfRDP2uB zQo5U$NO{HdB&C<>Lq=kN8A!@tqiYlLt{Fwj80dP%M`j`^lgwmNrkPo!M4Qh^Szs2E zvfTJy?^wgf)?qz1;!A8Y-;fe(z9r>5vz?Tk<_A)C;V0}idq~-54v_MTIZVoL<|rx0 zaT2G^SyC>V%cNX2@uUP$Ba-AM1u3aa8dB1k45VZ-nMuiNvXPSA+)K*+=0Q?&nukew z#N;ETfGI>uVN;ZpVn)}Vq@oESLs8Y#BBhS0OG;7M%Tn7nCoG!(Au;m zrM>A$%CqKqQo5L~q;xagNqNb zHPjdC-~XA|_1yr@uO+!jK}srT`6Y@}p2_mXnId61NxCKo9Wn@32= zX9|!~$P^}}s3}HD2~&!cGNv3U6-*^kLQEA>s+k(3)G~EQscY(!($G9k%9ExMDUD52 zQkt6ZV{EL*=Om9;9ntr4VFat>$WZop@ zEi;sq;pQDuMw(INSWGmNNSSP=k}}=QBxRPFP0AcIkCgdlAt{T^Qc{+im87gPUy!oa ztS4oo`HGaU&1O=zn60F2GdoE6-uy_)Pi8kMd(1vk4wzp^Ic$C-<)}GM%1LvYl(XhM zDHqLUQm&eKG8HwdK&Ve62>B3i1lLg-B>V z;iSA{Mv^khj3#A_8B5A|Gl7(eW)dlr%~VpRo0+7{GP6mU zW9E@E-z+3$u~|yWa@i0foBgkh8lTwAA8L4J!kW$OkA*HUVPfA1cI4Mt>Mx-=0O-X5PT9DGp zv?iskX-`T=^DHUP8}<4~KQn-ofo2dXZ<@DA8ES@;@{Sov$|y6Mlrcs zBc*^TL`q?!9waGYN|92=lq02rsYFVMsX|IMQ-hRRrVc4}O?^@tn#W0b(ljEav1v+5 zbJK#9R;D#6ZB2VpI+|xmdERs(MLk#2)AS;xujxn105g!3LFR2z-Z3Ld^=pkbV@Mfm z#*;F^OeAHJnM}%5Go6(AW+5qy%~Dd9o0X(|VK$KRr8!5+&HBY$pIH98yyM4rl9v&a zp81y%L(iw?xeb58JAZ0!iUR5jYkjAlcD<%{r=IrDuBWXH@Yd2ckQ?z8R7?9O)X`4x zduVL5YH4@sXx>`dojRJgmUgF(=B=f@Lrq3Tno*>THe*N`YsQl@!Q82%-KnFgmUg>! zH2?7wcj{{1+FCj43{t^VA|=FBA*GtBK}s!Chm^XeJ}C{&K0w+h7V*42FLXX-JN#Oi43J(Hx?)6|nDcj{{1+S;AE+MT+ZYHN4uYTnwKYHD() zuJ+Hat5Nz^N!&ApV^&#VJggHcDVaxI0)u!T!jtATQrTFMK+Fzf33y zH_v!iZnrDu<>6;!LcEFM=gA3N(CuXbo=MO=wmrcJ4o`fhjMsbA>af{8rPnLWp)db3 zlbDs03lcKdSWFZzIntq-J{Jmjlj238v#MZ|c z!1?GPxOFkK9>zpWLSpM;tl@K7=i&)8MiXd#i#Qy>LHvp%2u{V=4opEbe#2ShNX_+k z?87x^%?j~dui`1T-8vOon?l^W6mI>A`f2$;aO+99^&_tGF|8Zn){Cg0j;})_^ED~; z(|au=FOm3iDl&>z0*Ex7d+w5EdZx(aRC zZii>l1%sfq6ST&#TW5GIx81r4Zv6wd?txps;HCSxt^ln;AX5?UwV5bFaRHD^dUkBe~Y0<2+-{$`wo)&;nVcr4H9wUSKAx&X%?<=7Z*-BiuX zUlf{$e;lruu2XpZpci_>cfS4cZ2Ql*KX@wpF&4XU@K7LQQdCxVsxw!evt3JrjMRjO?ayJjT|GeXFo^iJ>o|{j+%NEw5 z#B1n}fp`luFbkUZyEGD-_q!(7k!s^HJj^~-3L2hno^s%!zwR?qDh7GgAtiS%uX3ck zhcTFr8Mu#cdOz};&7>U0XLC=VICwU z$mAv;MqX2plp-jKvM7&GQPofbTo3>;-jKXM4G|{B2G$jjgJsc?talViH@c_b1BU0S) zQYD_KGP=0e7*g)y;*M-KT6eD-`k*g{nRmz!aS-tcIK}!AxX%jdCFm zM&f;p#u$vnM>v7gIE(YRdWN5YN?dHJg9ZpgM|4F5x}zrsnIYs*j4-3f_wflPW15*m z&c!mbnp}e|*os~F8GFn=QVyBpq?|UF$cEX0+=Qw;&ec#8 zVd#KY(aZEB2VfuuVYqpRlo_T6kHbsQb3*)|2Q|2lYoRXmcug{&lM4`IHj$#oK{A;f zWKQHY!DKn;ajJ}0%zSbI7GW`#8a-~Cu?0WD?eDdJKY|lR`+B)*`*F9wcKcWDGi9XF zK2qHN(SN_F{h??dDB1_gDV&D(g`$0-@BYy32lY6ngWIp&Z2#r3@qtju#O)aZG71#Z7o zm*<%8e#t%WeD^!r_gseW{=q%JVtJ1F?kC)S;S3-DJNE~F_HoN#p1bmA9KWRCIhhJs zpx41bjDVh-dVl`A-j6%-v)uFguYN!F@ID-m47|r?LQ&J1ywUseEIxk#dW~dCv|Ht;-hR*#ND>Bvl#sr}d6}*EiDo z+!Z;es06Jar1J>gUOjyfg-@Y#g?R3Vh~(6P&=Z;~U+a|)!P{mSIT4x{zd!XE|M~V* zuTdRtD2Bt;<6^iiUzl~I#Nt;Rht@Go$>Wd-_nU{v#}JOL=!R|h*|@sSVYcNMGVu5X znk-~d)W>AZF)`$?I0HT2*N`nW=RYP7Dfvw>Ss9^df|e$nd=63g91E}>$YscVkm~= z9gM^@%s@2eVjkvWF_t3+8_iebCd8UJat{vTBrcj{>G=DQ0_l+nfyj#dD2QMbM+uZd zIaD&Cq|`!f)I~i!gBECo*64s&Fu)8XhhP{+;9ZQu7<`Cv<|A?fCgBrI!wh_e#aL-p zk*l!|8}KDIA=VruFCid3e=kxXJu)H?S&$zEQ4W<%6|y>-pc%r^8XeFTuOJfr@ivBG z1m49o%)mU%$6_qU3dCR)zQ7u+#|C_fukf>pBlqASj^iXwAz21~e`G`;vYd;}p(-W!F5x zD2@^cf!;S7qB;7ZKVCO)kVEh`CSkIfN=9QY=3%*sA=kjY55;o(d+fq)c&OWE$9*V? z(xxmaS|7d^>Yy|Fnt`MY#@kqdwOEf$_y#|~6G#me#Y|aJDxe}l&=}3o0<95&m(ULb z@H$i{ejCFu4j&=0_1tP_;qgR$gyCs4G0n&p2*+Ry!BC7qH0EMH7GVWq%xZEiHefq; zB2er4A{%m`8N$&Ekr)FvkCy9a(zT^=_waFCfQM@(>5&nc5rkqWh0+Mc;|ND*ynqNq zVjdQl735m1#|C_dU5LYBoWMnR>^LNlyca=u6_I!ygD?#ZI{G!|eHRv-rJumRs77Td8CKf_am>w$>G z7>vbfc#3iyi4(XCPcW|qs7@JzDtI4b5swsHZ!L;q7={tphZA_HICm?qOyK)Ov48u7 z&tn~8QD_SH7hXVj(}&dcpC}y1DV&FAD)%=uC;68+i-2jomm>vIAuZA)5AvZ9f>92k zcmY~00Bb(wGxNB9jxjo0sCl_EbmLtaKT9*8X-*60P5ipZ;2c$tp zWX3%RLSE!Y5d=f)HAi4S4&oOahOUL3z(we!XwnXzZ&-(~a2cM9?7J@U|M5Ni*O`3q zGPQW*L}`>oMN~GSWEE6Hb<~8`h2DygtL)b>9PeU1PT(p6se#^$U_61R&;gzBJR;Bo zFXIXV;(2~Sy#On)8td^THsf3Dzz^7kI2^eb&4jGUa`B5GfQ3)Zak1(`A zBrd@dKwTcGPy%Hz3?ncOQ6`qWf=I3*jzbh;u?LsoNlvX8h4C1|@Dd_19ux2dHeee( zjKvy{C`^Z&m*0)k@}%JUB!bZvU5zIt*WFT4XG0@|qa(C9WeTJ=X~|M3gR-b-LdZsF zjE^uCvk`|=ID@mejQi72!$moSm`HLVmSHo#g%-pNL{?-&cHE0n2t{p#p$Wn<0WsK* z-*66^fToDWdTe;&2XbfzM=t+^498`gj6e(I0cM5R0%B%di5g5Q{@Nfs06< zndd1UHKoZ~2*Zo$ftS%A^RW^e@HM_cEOuiL&OnQfW=2*NL2;CTu2)N0R6-=)z+f|k z9E#x>j|rHLX#9*g?8OOOL^A3*$&mu-kqLpwiu@>uU=&9QltMXFG9jc?L3PwZZPbOX zpNARMjoLzssFpz}s-T9cMK(tZ(~4}3NX*6@%*A4}lw5`tW)&%GupY7a9+A|jK0`F- zU=fyLg;_=Z2rcSb92HOzl}#10I>OKt;pmJ=%)qDSGjcX`-Cq`&7;+;t!PtEWLN4Sr z!DI-um~0W0H5EwFdLE|`kCgWYc+!~kWL9LuJ;;HgD27rfgR)S+frOwcs-q^t&=gUa ziW%67UD%C1*pKUr+fv_4hvF!Q@(4jqgqg-<6Fh@AG1`1cevBAgfELM3jkG9=$|jVo zfiQGN1cqa}nM2CwMw7CoL~5i#Is~Jp2_u^#9PQB&o$wrnVI>;0M84EKo3Ns+9P~Cn8&juS)JcWleBf>@pz8sJz63h&*BAi zMJ$futkFbjMNtMd5Qe5`j@D?4SI`^7q4i!qgeF{j3}G0Ak(dD0WmS)LeIZ(C_xvEf zelYJ}Z<9m0FQJLh9-71d#}jCWj)=hJxqN;Z_aP$C3y~O%5g3DUW&$ai0PQTasBK;p zKs$6W&yng)8GzUEHm2h<9D?Ut_7kXK;>gp`;+$KnJoBHn0m-!)i|&CsN98vk9_ zgpp0r60Okf2(Kjs9OdUg3jrrb3gkpCX^Eu)JH=+ zjwkSxX-rB})0~tRrWGlz(FW~INAfvz#*65ISMV?NLLU=JzKORm785ZElQA7Lu@on8 z61omm2*DVMD13%FScz3o&&U>>g(ln6H7NB9s4pZC6%dNraQz_R+-?ug>3{b}xPAy- z_w<~nw*!&b3D*~)#hB9}5Va77rU=I%jKC~JV-7UY->dNLn|SgPUym+`!0q%;XwtxU z@gBa!30wpfQ_oLRxR5h7nWyB!WS&qwxG0$?2ot|a=7~n!Z+!j&AHPI;l6xM@%EcW1 zb%pwF--P;Y6YH~G%jedcz?8f-p)Oh>!fYpZLH)P;@e2;&R~$v=R9*@7;hyGmSIs@C zIq$*!co>f$9}1u_nxZ+jVh_}}n=B3WPE(PTDyR+LKHkP`w?SLVOEiA;QD)a za9j3bAFi2zwESFDG*!r|sD;|73-tp(ZX(ETc**o5`(v3|MXtqqY=G+@-plQMxCHeP z2c+|I{lt~o4nY-EhkA>p5gMZn+M>T%K}w8K@3HJKp7cCLaF?k}hN32F<1wgLxe=a5 z8?;3~H34CNk&hki=!EzdU`AS1fq~u7A95VXnm>4)O5qBmXd%eex6@EA&8b ze1r)&fs;r!%_}7->C7W!UOZ~lL%tTSk362+l6N}$QPjfYh(v$5zVZd!UW{c}jsvE^ z4C-kphTWANKie}+l5+#j#%s>Zz{|*H_zxk8}HJG(~d^!TV4Tj>ZcF zKR`VZWl;%k{J^{1o{AZW#$3$9d@MjQ&Us6tys1c5LI^b8pq3dyzJpQ5jYBxiIr16! zk4I?8Ij3k`!n@dS#xLU>4ehshbtIp~3%JoZg{t53Jb@<5E{zK4jF-&oq>RM`OvG$> z;&|O5HFDs7i92r6F_7rkM%?(S zn~kf|F@Y>GdQX>fyw8@0-djcQt@5pL?`v-SlCDMSy~kZ|bo+g`-}c>4YhSHvG7@9l z{?P6J+?9=HF|K1ll=apP@bGV{8Gt5<3tA*uaSE&-W5t_dAI*(DlDlI1S(5s~JD1mC^6l6TB^5=hj77$hIsoG30ja z#5r8RDo(T3L4AgC*pDOT7%4jc(pbos;rj3V*Tqe&56`WG+mG`$H*PYazC88jg<~+1 zdVc5IpLdG?=g#+nQZn`rFJLRwljqL&+cdkHUJNwe()C-q^F2>$ z9%qC?=XK#osK3tld{5_Z9ncjTmpK5p+CQgrKAq?J_RXnh&Ykb=;Q_2EKiEI+xUWAcgOZ>qOWeRbM*#v1k2 z>AX{Yb;qH;I(Pn=oc-yo_SNZpRp+O^{dC$tyYtj%xb6DtbiS&-x~}MEbpAR3e^!5; z&Vg6Mx35m`6Rxk$oe!(O?l^Q#e6zkf_0uJGp6uIar}O0wP@i2S24EnP(r2ghYxULX zT-x>3`JPYv_SfmW`XGG!>vW#&-(RQm>zZ)=bn2y3ADzy#TS4d99ncj$(HH%2EB$o7 z=jXoXZhxNFzB2;3W@c>UE*_B@W1SbbM=I0>4ocNeR0DR z=!*-WFRnBFa9zi*kRNgr!nPm zP=B1OQzXo1IZr4Oo`rSO#B2?1|f~#Y=dWCO4n;ReC#s=kg z^|3YOxX`z5p?)+EHH0z&Fx6|_oJ=kW4`qX^_;2S%+(+MiR;gY1o5}wDbtOV zzGehD4yu>z!X9&gRQ)7bF0WLiq(xR_Gdaiyk;mjECBG?1mP18^pa$xofe9xE!}BP0 z4*2%7?PvQpsGm&-r8nzmQ%{?Y_uoep{+oWbIR3xtL>gO?3b~+p2i!Q5vfQqSDp3EL z<|CMZiMWI-NT{DJsu*<`sGlt!o|0_WCmZm8CXi9yzBcu^d?;BG%9)#;}Q?1I? zsrqtT^{MPr>4idW48~jV?{8BNn>+te|5|sbe@*qOSg3zZb*uBZY_5{3TLnYsN#Ric zn(9|NXL5aNaol$OX{t|!LOp07D{ce2V9*mk~*Jn|Cp=$sedddeEY{#2Xy^oQQUU@W1G3X1-H{j z_Gk5vg{S6PG$NrsGXMTDEvlCdK~Vpg>l<6a?Uhi^n16jUq5d)ddZ+rwdLa_ypgywo z*ocF0ePp5OynSThr25Drp+2(2`o^^ApXLK`ePfZ-P}MKy>Z#G(cKu=xWa4X$`o_Yb zez7(1?H5zMqXX0*rkckR`1gUS?y5Sg`oBU@9j*^dwO93kiR!Ow;OegG0s8^FjBo#! zZ{0O1{a(|kv#8%o^%mFXrTXmc^m(bCd!xQCSJ!p@UHw0Q zwfy_FRJT>1Rt$DR^;!?LAk}Bpi{;yo70I@GtzzKYXQeu=YDem?DhKsfm52JN4kIc3 zRK9&ws^hA5n^51BtK+I?Y9CzRlyBWueNw8=jyDPQL%F)GdZE+@)f6v6eNe7`t9~fe zYZK~!O00gX+U?Eyp8eNp~>Q0IL5pFBZ-?0dS^eka%Gomwn@ zz%E?E72Lgp{wI_~X*56>UO)r}V+f{U23BJYe(!tY_Fq-6cl}bT+xz!Rsb@<4QtFd( z{ZX-pmx;V6|7877|7|~yT^FgspuXbYkPgzvOdn zoVahjT6O9hjTcw_TI0kMt6$%hhVxHUG8zjmZalc^*cuN$5Vtc9JhAcKC-{E8b?X#q zZ?8`6Uw?Mvy9e_9hT>Mnb8AeuZ=HD$+o~_it=5&@cx~VMaqD#dt{ban{AbpUU41yI zq7@MTldo`|FeCxV<*mmQk@5=C>^<3Za(yHaUdalMrtDf5$u8y13@zAQr z2E&baR$W%(oo}Tc8_n0>Y@D<2_-55(L;dQkZrrjbkaJ>a9I~jc+6c|i0veAj?a=`* zAOdcDvc@Az6#mI|SdB;iv+AzC?ZY8)loHWSasB= z;OeC*?)Q%WtwE|zIsj47c;4Aq0*&ico%CU7oNhxj!;R{s360Y|$N%{|#_1+Df4%>_ z^%}pcbs&$xcl@sAtM3++aGf++uK#^K)OVb3QtP6Th5wwosBb+~<9HLRhmPfQe|0@H z=M?ruaCK3Q`&B*Ecf4;>>Y|B_`^`=5)744)b9){%zSqA#s`0*Qr+dfys!m!H;ZU9Q zb8{Wyr@xCB=>%|F9iH?2xmhsN=S!_`eyJMDv89lz`9tiSSqRcAee|EA8m zmpZHG)Bk?l?q5+~^{=0*zeRP^zq?-QUnliY@AR*a`i`%S;`2AEkKSy2?LVn5s@iB` z<7sbH|I~O|Pda+25DJZ>4M$SzpBgvo>Yg{McWRuhf4ws~wM~tS9e~+Bbxt?VRdr2Q z+jR9!jdOMN%>mq=i&apaQ?<>+>YIhAQ{GBlQ{z}~cf6|ac+}R^HdUW235`Ehozj2Y zsm7D~)+yb1Qq?8hxY45b{JSoxdZfmMy78ZG+^6b~g{=Olbvlz$f7EzRjoXwe#&^7C zEFV+N(bXMQd-NZ#sj-^k#%a3onK!CK7NNeV8l<@TV?y=DU}}YKyk$b;EZ?+RqUwom zJf#~)dAoH)S3h*)BVFC_X7xgihm?`Tnvj z=<0C(;}h@H-@NrVj;3#G99>F|FWq%{9f#_Ae0luG_4JE>oJYjA zId8}Sou^la>w}ul`Po7&G4nYFTY$x8DY*=-`4f7Ao7ef*4|ntNb5Or4hc%u6o?^n` z!*xuvp{X}Kno>h_sZw|wy^gm?T`KfsGQ3Uc5}q!XU8hS=lHF(*EB70AZQ3<@7!H12 zE>a#g8VWA?OaW2~nZl$LHN{9NVM>uw24zv+R3xRc2_>bfVc5Bbo_jR(Txz2Z>YDnb zG&GNs@}y}*N@LTMl;)-dDXmOvQrepKq;xdTlJdOiLW*|1(#>=yT%WOJuz5?IHqoFH zpW++DVhgrm2fjBylJb-JE7u#o!p{h%m%kNSo3^C1HyufN);v#27t@uLZl*gaFPT?J z`ImW(l-{N*ieyc!<9j$xRAUQkgWQ zq%#>v$z(E5ztq~tWYNO{;iLP|bUfRsX}Feyb%F;YsHQlykIu4UY?_kN+_WI2m1#{%ThpGDj^1w)>(%rm7$}8qyq`YQ&lhW7pBV~XYNXj7dCMj>3p`;8q?~pRmj3UQlf|*FlBr}KJ zJt;q$pGetl_K>pA93bTvbC{Ih%u!N~o0FuRHfKpWZ!VH@*<2+h9;tHDhm6}@XLu0* zcLYWw3R4jc-}Q$RTX#5?uXFRR?%=kr+x!CG>o(`v?iS?Lmy{7ue|y?oUKzX1^`)F-8(d7P9dO(Rkoo2I1v73&zk%J=PQ zdXduC^dn_}8A!??^EN5N%sZrv#3+n5V@Mfm#*;F^OeAHJnM}%5Go6&#W*raCE4 znAT)F^h6&F!7#+ae_Yx@KK2`qBN^|*qOobB_j$dyXEQm-2a(6*Ckxl}CHjr7hN8OxZq{cdPvdcoMXus;Ej~G!oV<&?i%dbLAXAbl$y8)2GBuf+ zOhcw2(~@b)bYwa*J(-@&KxQCWUme%tGm)9dKr-<6dSrA8-e0iNtRh!KYnQLZdgJEV z(7cLT%e*OCA;P%%75A{cA8vj{&8_G^zhX!##+)J=nolu15}Hr(Q9k}1c4Hq7;{=kY z;d%!upfcS0RSmh_2#w)8kKzEfHGiW2d>UGZ%FUAeML|I+ zHdGKSC{@1SGxKhoGY1sU`Od#x;o`oYS<^Fn_MY9=yE<_FpVdoLor?|F0@X=$>sDwy zDE~T%=V=EOh=Fw{I&fV#T&X@{U|op!xUX9e!YRb_qA6OUHQJ&*I^c435mnz| z12$tTw&NYVhs)JL%+2|^O%Yg^LE{`lgN?9gBe&0{?o3s$b|oe*A3OC2rt% z6SYwXcR}?5+E^R6o!i zQ$}?IUxn%hY8)BW2Q1GyqpA(~O=*5pvC_7;4^?M*1NDO*3AbLKTc^*h&v)wrwkx21 z&f~Bg8m~irp2fdDUzLUY&fzYkLt}I-$42*T4fziRrcK3*%Rj=y9=b^LX3*R6|Jo6D`x8tRWZ9?PKG z{OXUXT6on;_-f#(52k-VOx3fHtQlkC8CZvV*sTvq-2dLh2L_btd)P<=bq ztyj%Dx8I{`)4O%*La(RZ71Z}pRG&`u=+wWl3aYWruA1?xH5b@lQFZ4cjB3BjZn*sw zRp(uO6~(PPSMMhJOTw)?r+Ra4ojKKXSIu^}pQ38F2lh++vpRCkO0&*w+UXGqesU+={(h<>=l1VY4LP~m`fhDl=aU-tD7tkM z^*s`|E}vVE&#im6ioa4O^BIX-mqlZ7iMu>3$@;$3FgpKv7MRVw-XtZHW2S$09983i zN;Q^s_hPu2Np8eYkIz_ArehY8d0p+7boWP&s^;6DIE!VY_O~R@_tAFr8K`bTKiuQ^ z{Mq)L>YiQCYe?XBTr}6kVl>9!5&ZwyZo84cr8NG|c3U|2Zv}0?J&oru3v)0RFJc~E zhPLV4?Yh^voQb9I->%z9I~%+4q4|j1kI#&|z2|P{Ex+~h+jZKe3*4?-d7E#$E{puT z+jUp7J(pO4-?)lAH@?OROsMQQGq4Z)aUK_-?KyGl__^D4f!lHaleg3U6X*AN$1&I& zlrvrc+q@btAd2sO60{z+3s?GG;Vv5bjWMj)=YZbOvL?!mB*$Pb=3}8@k>uU)^g1b- zSc;WqEh!t#UQ&KD#XPLP`Qa&CtV+8E%TENc%+8H` z@Id3#Nz)7LOGYc^k=Dr1L--kTJZ2IpMYy6UDxor*YuWdL&rH$0+>RspeAcs$COZwg zj2z)@dFk^I_wO$0;aE2sq7j<&o~01)u_#KT44UyCTO!v*pS+~>M-0+=%;m=E`}#+= z-=XOz+|4VTl&RPF+``{e278Rd-;@hyOnv@7X=s{|8rM0N4=xVvi?NRl{pn{X12G7R z)GZTtJkQ+J5|jK!<7BqN0=6j@qu0%Rw{Q>oLE}k=VGPFVvWMdUXoGgB!5<`HCKsQT zT%6}q4xqI;S3S_-;1_z$Kh&LoOMcU!B%KIE%_W8PfO!uHAG{CL1SUb9jtSA zz$VtU-^LE?g~oeojxg4(o1!J_LZUH~q&e%rEieqsRT`(>*tE9w$CExtL$C zLB7A3Z~OYqx8Z+dzHP<_Cml>DvNN>&*8Kdt&Ci9Icis8<&*tN80rT-e=3xn(pCg%v zH9vQO|NLBt`B&We`X(;ljKKLjmg_|0DN44{c!r|!3dLOxoMc&W3XKZVF9z;7g8s_~ zjpO%smJfl;g^nS7pP}*Sw0zite|7mVmt};;Khtue1%?`TdEt&5cDdz7L%-$5vjNME z$t*J-Lg4xRMb0vPQQQQRAt+MsY%R@>zQ=XIx zrV=StOf^z!m{3w`o4TajZW@x(*fb#}+%zMlg=s}f8`GYY4yF?+k>)N^x|nXH^f0|h z>0|C8CCcd=z4@u#t z%1fI#@`>3`%ID?~DM!qgqN7M^b(@%N|a=?5} z${}-vlrPQKq#QNhk#fxZK#I-_kl)N1@+>Z(ChKugroYzd5NigIGRWLZN`grwCE28q zl4kBBWw?2Olu>33Dd|Rakz|^Al$7b_2~wUi&yX_1JWt9j^8zUu=0#HGnO8_zU>1?` zs(GE1O!EdQ%gstsR+~3TS!Xtol7+YMw%J0;HnW42cg;>xvdssi>@gpcvd?@<$^r8^ zDTmAvQob}_lXBF2N6Int11TrXPo(@}ekJ9!IZMiU^E)XH>&lYL9&;@z`Ah*)3Yj9L6f-4A2{G4`QqtT+N-1*-DIQafl=7wmDV0nWQmUC6 zq=cHgOfZlv@uy-4X}?ja@0 z^d}|O3?OBYxtEj#lSoRkNg*Z8+(*iA^8hKM%otMA&3IBKng>alVjd!8nt7Cz>E;Pi zo-!|xl3`vXWuAG3lm%uHDX*H>Ny#*Ckh0vYBxSXElazI411VW%6Dga`R#LW`cSw29 zyiZED`GAx?=3`R!nNLYMU_K}1kU2uim*#6yj+*aCIc9z!<)rzElwZuRq?|TqNjYzR zCnaAQwtG+#rBMkr(E#CSi;n1NdXv)E^dn^ulCTpS+|L zL}3&|30!AxBuk^bsX$64Q-!RKP}D(Fgrk*-B9kz|xci&6(?oURqfCD?76VN@DTB=r zG8rjm7%5|rj`3z9DG!<{q&#G%k@BdSPRbMJDN>#>Ge~*f%p&CllR?UhW*#Z8m<6OP zGOv>Iy2&Kv4YQn-m1Z?5Z<=+aY%p1*Y%-fk*=n|v@{W0rl=n?GDIb_Uqju zZ(>OqU(h! zlw`j*A`;nu4ITHr5p~fKgD?&nd;V(2pI^a!v+*tRu;by+#+`4#?N>AId;<5Igbb{~ z9vnx$kJ;CbFmy#Srb6S>>p1ZdsNQoac6zAJb2q5I^K_`L^E*aG1{|A6>wB!CEpM7E(%sMaE0<5>E%pQa-SO>4vVA=o z{`(28ratflww)&9A*dg)yB(sj?Ia3Q@HnpKJlnu}!tQyuo@@ENMk3sL!Uwo~5J&MH z&f}sfmX~D;I$|lZa0+M51yY=RtY07kIpf>0KehnNV+4+m9#~&^0QVV&obl~Aho~UO z$niX8nHR`8cnR~c0E_TC)O%jw#*5`X!!&Tdz51d^`4)upi=As7`aZhu?T~F*>(H#v1qh*lgMdaM*lB zo7kSF&c88Fu40K+Htv)(SD36aM+gBev44tgD89nZS$&6`IY*U zhgN6b1~j&vjKzP~_;$~;Qac;}>AKEUU-518Cz0ykF&e7t{3C9d&#`@!!xU(HO#O$o zt@94FZId(39sBV1vcC?_8T$X6Wgi$mL0~`W(&yMmfPZD2yT0ey=EjxAyE}7%*R$;+ z4_Om+P!}E18ADAfDfgQZq>MD9Ng0dtD0Y!LKybHX!?`TY&sd(r!PSoN@8~s86ka zW;$srXIwn?Bi_rou!urD+`85|K>M?47+;ZaP-6Zlv5H|LCt z$1&_8>@UE-Ixe2Z##?W)$j#Vla>m7DUl{vmOQIKY#>L}&eEKZqjEm>n$Lj81{hzQO z^#}H&>YSm!vp@B}dR)B!iv6cKwG!Zy5vUHAZd@hJ{Ko#YClFe;!D8X*i#5RQ(BL|>%iEFyx~mO*+h zwv&;8Y&f}d#?z};fc+^Lg>=k97Pesra>mo6Z+3|wXEx?w0Wy&@o*s2#**BRpo*v5= z`W&}F4DQEhJO-WjI2IbLsXcPW)8jK>AK`y`KVi;zdjH;jyMJ|m-I7wpHSD`HD6<56 z@aQKrOATcBP+6I6b*Nq>S(WC-Ve5_tK8A zb_5%ugK4LfE$)3EGpYtV*YmvlX{*~?+iJm1aq=u}z5i_5oC4|umn-hA*;A}~u(zhr zG}?N9(`yGiGspq7_4h~C5B5H81a1928MOIxoKCda{B;)4u0Xy|y9BwfL9lZt`P!|; zo$JV`#=%Y}@^RXF-Rvg8j)$yT-uHQBHw|{0^8xpwt=Bu$BiP&5eVE;z5fkj(&h_hP zv%AcRj0<+yrRaQ2TbWKGELGI5kCFdyZPq{;JZrA%+ zJu28qq`Y&s-Sn{an7QRNN`X^%0ALov+DjDi?Rkk;zMgz3;0!ZGB$bX;aR}X-!+xZTcI* z-skO2Tc3ZXwUcP;^U9{JzjFd@eGbXXf}ID+!c}~?XRHeLPS;Ab_4w_y^}Xmq+dKVM z`)*I7t?RRC>vLUX_jlF=d%xH3(bnHRh_>d3FKKIfr_+kbq1$+OFeYEv?&Y(Sk&$CE%-}7hg@x9*l+^*+qaFg%v zyqDWG|83{?!`y!oZ9P8w`(S4n?ZR9Z{nPb&tnRPRK<{TP=HN9`ia%P4P@hE#dVGqI zMNtVg5QQXM z@3kKS>oV&+asRr^I$!)aiZk&f6gpqrt;_s9mw$$Pp1A5X--yfAY1aAUJ)!f*Kg40E zUUM!!VAW}sFw=}|i;m__GO%9rIIde~RJU2)g6cQ#G;Y1jBecK3??&~Tb0N$$Bb(z& z=XED@+fe9SZufld@myYK-XgbP8@6Mo@vrAh`E74KXVr8LGfl~GG=u6pcQjo|)%EO; z7>qYMA6l}E&V?4Y?x*)l$`>_{QGMqK_}6#tNV_Y#p+90U&a5M4qjBqqs@}7x*7Ht$ zgpY9qUqCZU5E>&4ZoScFTvq+(j>fG&+Mjj|#+i3WaqE(Pz-9kB&~Ba5!1~W^m?1mC zzy7o8K5vKWK9^)6cO$NJez597k3l*n;z3MCV4di#Tqo682#2CJ>Z2hVp$Swsx(EF0 zM*G)^9?xx)@E}w(T2w1q`m!+X2i1)Zf$B!rMPS`%x1Q`OZd;G7W(WBpJ~M7V8n>S6 zLY7J5;m4sIDxwlsVwyuwCe1JVTgd;eL zDJS}b^&z*;MUc?jms5K&1@#O;1GUUun1-^soe+Qv4!r<0fj^MJm z=Yb92asrZ(h6W-0?P!jcXl?Ex#jVf0jLWO>rg7^vZ={`tO?Vq_{pL5W^VJbwN3O?4 zWWlW`Ugvr~cQi5Kq+3^9wZ&gEnWXBBuQIAPUIyiG8!DnIYSJgNJ{qDC-1^at*`K2N z<4sKqQue^DKfa&Khm2c)ybkAwHGo@xybYH{b;!G+C)|4E&v1DLoys~{oryQF3@fk_e^#%&RcT(^xb?}OrY+AJ)hYi4?s;3G>?^q)Zr$?7*jJ)@QCgEW$!fR;$0pAm7FzDOS7zr3=CXzA}b1)Z6aJ6;O zLl5)3ICdn+If3k>LC(i$Nng+QIQKJkP~l;HcC6N-tzV~B;=Q%fSx${Y0msLAl?y0k z8j#Y(B$G1DEFfjGIYi2NQ}Q)_*HG6)l9FJikTTC?k#fMCCMD!`pHNadm_ejWG#R9< zGy6#S#S~k@IoGIW+L97$(n*9RQqs(HQeHLNN%_(^%b5NsWg3vu#Uzt5%`6~g zvpGb{c~f#Z(;szBBq<4I3MunU7AXhJX;MNs(Mm#12T}%^iKJwhb)@VwzmQUFrB5|d z+L~BW(#RkJW{gE0a8wzkaw8=2sIr@8Du7s zl3~`7vd{cNO0jo+s*%#x#FCP3W|6Ym>>=f(DfAxGAC*i?QliW#Qf8Rtq-2|8q~zP_ zQ=XIv(}$Gd<|$G#&3mLAHF@4=`om+wNa;s=_ zq_j1$q@t+2$B2`S$pfCndu4A!WFEij++A z9w|pno{yOR@R%@CdYCj)rkhtu*>1ih#e4Gl$4qXfJvBxxmb(!*o#l_GftuC5_WH( zDypLm+93vU7>jY3iP>0%HTV!8;RJp}!Ay4dq9Q7z1zMpWqA?Pq@hqOhGOWNZ?8f&v zj=W1bwt`!68^X~Hz0nu5rPIg*(s@0}+o2n1nf)i?vvfz4!z_;}nXnWcs5j zs-q3sAqH_6i*cBV*;s`&_z)lA1b#%pRZM?WL}j!-heQ`fV;7L4 zunjx#1-`;X1hK7fGfJaA8sctrMG}VMVLXEQSctc=1qX2$=Wqcxu+4BI>YyGv<4z35 z5KP8Yyo8sr5pQ8XKErP~gJ8B7u0u`K!X4;{fr!ThOu`(@#agV#UVMU|aSBD*W+;xT zsE#&hhZw|REXH9bW@8oB;6r?b6ZjDY*6Dvv>~6umZcV8{gwN z^0Lj4AGhK*grgaHqc85q2t0|Wu>?!;E_UJ@e2d&!On;O?Su{oybVpC5Vi+F7<5-N> zunjx#1-`;X1hK7fGfJaA8sctrMG}VMVLXEQSctc=1qX2$=Wqcxu+4BI>YyGv<4z35 z5KP8Yyo8sr5pQ8XKErP~gJ8B7u0u`K!X4;{fr!ThOu`(@#agV#UVMU|aSBD*W+;xT zsE#&hhZw|REXH9bW@8oB;6r?b6ZjDY*6Dvv>~6umZcV8{gwN z^0Lj4AGhK*grgaHqc85q2t0|Wu>?!;E_UJ@e2d&{FI6=u1LaAJd8&$9}Dp|w%{NR;~XyF2DTY)L><&aXWWUw z7=p=|ikI**HsUSp$7lErXAsQx!gZ*LTDSupF%a>XfJvBxxmb(!*o#l_Gftr>+YH4~ z71hxO?GS@FjKw(2#B8j>8hnV4Z~{M~;CoDeR77R8Kr8e^G)7`Hp2c%mh85U_-S{5I zk#{H4AGhK*grgaHqc85q2t0|Wu>?!;E_UJ@e2d)gGyPEpWziT-&>cOIieY#Rk7F@j z!#3=|7x)Sn5wwfxkJ6}*hPWGDk%Xam7>{5+7UFGe!9g6xIb6UE*-U@bK|OTFofwQE zn2f1-2`^(K-ok!-hTm`o!MmCMsEJy*1069C@tA-~n1i`ki}l!xPw+ENq38!pe^fAP!?O4l^+utFQ(i;v<~Ek0|&d(;pR487#G~9F}1Pc40TZ$8qG{ z!}Q0kxDDZGhTiCl`!NDf;%O|wQoM_u_y*r1_eV^BltEcEMiX>LPo!cP9>e2UjMuOY zJMaa*!bJpq%=AZT)JH?yjjl+-P&|xBFdqx?Hn!j(4&xjy;D)_Sf7C%ebjF<+j3Jne zsdx#_wfqhE%oNSb^um#RKAj44o&y5Mx7$>l<97(>IG8jujc($28YW^YT64Tfa_8ss zg2qI5$3>6eay$5sk3OFE1Z+eWwqZNog~mhI*yqv|5tv{$kXhJa-X%4zd9H%o9}%Vv z*%o&|NdfDI;#d<$=5Gq%AUpZr}e=i;-|c;w-T zKx?!`duTlJ@zD6=+1QPJ_#8h$j(V!l3cPyJMnRc?11t zumM}J4I2OZ)*CtQkIHbz{jSC3I?(vvH{Qg#q0so>(%lRpQ=qZGrLk#3HiO0jZ;A0{ zE-9~IJ{B2`3ohT`7=AE6kv~J@g;zyg)Wc!(8z~wOygXDRN&?3PziT1$4>b0-JO1|y zF29Mj*nlk5T*N*V)InWn3~Xgu#4sEs*L%S3AV-Fn1;tsu!>!{L#pU_P z+{>~Cg*`qGwJ+}EVsYFccZd^2u4?8xZ#9B;FzqaEXA#Z#J|Rv|?(i*b-7lj^i1%^F z?D3hjb^S?eucrMNSDd1qo9jbw_O;K_W-;$9s2Jj~nE9vkV)NbMJ8!jEr4aA=rXjTT zy!op8UhjHqm$Y^%+Is#mdKTbs_p(!#QRqic~%1hs@8Uc=+(!Bd0zD>t^{`A29Eel2ado?|MPj)64`? za_U2{PQn7FAENO9#$pnl!Sh&(Wmt>#CX3t(?@9Ko>qMXp+93f`Fb!84Pbr)ApR+iR zwk4Q%(Gij8h90ID*%wimf`{-3rh_gs&Kp>P)!2Y6vx(e-?f4k`P>cn23H*1~S@4wP zmat?s{CqI#(UE!X21^47`qHASP43eWVF-uD&1r{DCW=(uS&f_XEu3ncPm9adpZ)Kwn^3a`>(aO; z)Tc2SrpvXs9<}f&GO!U&2J`PcwtH{^&dVH6e1&-kS5x;O-+Z12{`F#m*bc~zYmgTO zPzdD^fmDpgGW>+!aL!yHe@B6Z>=QsJS|bWNKX4-6z%HYenM#O2bF{=AIE3%;6MjL^ zVm7gnA4O0c*TaJfsDv5_MLd#m1Ud&%+vo0jqPzYWSobyZ9LrC9h%41^J$HfU{hi~V zxDTqk8dwJ)r~m(dzMiVXdE&(ojO%a%ZbVN1e?AkoVXGn?4`PaWh-+z+En5{D zkLMsR;##&<^P56sFs{S(D2bW~+`pE=b@P$a@1M_y^VR>q_4{8(-9;p06w)yT)A1ZM zZc-O?!_|(H^uM{zXHNh9f3N@kmByJW$4|RxXUYGSeze-J@Ajc>%H__uT)$cE*Z1!? ztNyb7`}fs%_RspwYQMkRZ&v&No8#~Fo7J%bx8JOe7i@w0&FYweju)u!?B)8+<}S$V z8ugo1e_8+I2pwtvS-;u9;|e>uzkk2kJcZb=4;^1UhOLxW_AMag0Lh zq7nYxezNZI4)vG4ntrlX+1^)wSRDuP?+@Fbb}R;B2!hkCjGr#go6KcWAr zj^pU~jobg!|2WQH^+VP19rZ)i@g4O;)$ttvey4%`Om$pmBt}DhOy#fond%sjd;CXz zO}|+D$MK&33H?iTyh+EI{QH->$D0ECm8w6fd%VfNU#WZCNynSqex*9*q<*D3?iARM z)a^g2<4ykkM=y80$?Zq#9(M}tPg*a;*N4=<|ESw9bOpzgbbQIbAE=Hmx&1!X$5Z_~ z)t^(xjof~m{>O{dpHqD~{f`%^Kj&_^{W;Z_Q#Jm@zdxsr8(pqHr`wP7Id0c6q}$N| z>bvRo+tl%-ztd0CJtQa?@i_)}niP4{?|f4@!j*VJ*T6#Q@N zui1}PCaLN12`3}a#RQH=K}$EP!osTIm`a?HdmWZ*2$<04M7&+Q_z zYqOsVP91*hq49N8|Ix{08wasV8E*!SxJp);$*iwRKaPdTFQ%f00Yniz&ow$jzn(uOlUS?2RaI?&AKE zm-|T(!>X9Ws**FwRO0@X!AIsaL=^8!8w}yk2@E6GtY}mtU(07|LqWop76ZF>mZxo;!of#WS=Fn@d-}i3?dhC zf1F%Q8}9f`8H_!=5TS)R-i`tMCMDq{&fxaqEFY1LPjHgol{1KB`QH=S_ymzG(|aNd zI}pmUy&(>K5T*Yg=dS6qvHD1d&(`vnQ*9Frv9adf9fh;u8)s{@bY$8kH8*(n+B zJ1*`X$M?{#z$}+)w@0=Oarinp8#wOI*UOngn?p&?v)sto6-)fmvxH! z>+i|z;QMo*>TA?*YV+bs5$!?a`rQ5rp?*UzkqLtXcv!9?K%PuK` zqNsuzh(as|APN8O{(@-d&(EVh$nC%4G+6y}f>`yF+~yimG?c95Hw8&ylg+CrDQu#7 zv5QZo;v9Cvd9f+x2%BJDHkAxy@80rLw6?N_A6{lv<_^DfLW!vH=>I zFjAVD2vVAxmZY>cZOL}H!*nF2v$>O$yG>V8x|^P)^frA->1U!zi7|1c3^ehi3^qeZ zNisu8Nj1Yrx!*iM$|y62OveN>iIgd38u5p7~fi8BL9i8q5u8Df%18ER5V8D{P$WrP_?%4jo|lyT-^QXVmnk@C2C zl9Z>-v!py{W|A`7%pqm2d5M&l&3sZ8n#H8NW|ok$)GQ-qg;_<)8nc#^^=2a}o6KfX zwwmpvykp)Y<$dhJZu222ADO+Rd}8*K@|ihE%3<>bDPNgyNcq-$Ps(v~f|MW4&!n6( zzmamroFnCexkyUTH9omXxyIxrCBG?1N?}u!l;S3sl?1e0=| zxq*}$&CR5gHf2aDYi=dwHdB$5%BCtQ)lE%OYMDBu)HC%-X=oag(!_+5(#*6VrIl$z zN;`80DIHB`QtmW&lhW06C#9$9O-f(WkCbQ=LrR<(NJ_jJOv(_GM9NT;O3E;EKPe;3 zNK!_dv80SM6G)k4CX+JNJWR?X<}p$pH&2rCG-hLtnM=w`=4Ddmn}wt-Hm{Mg#4IIc znOQ-~Dzk=^wPrmj8_ip!ylu9Svd!!uwDIc1TNZD&XA!Wb$jFf}sFezV{ zuSogEd`rsr<~S)Q%#Wn}Y)+B#n>jLUWJ5Q*-H!ayWr zG}18{)A1}aFdvy%j+I!24Q3O$8C$Up+4vA2V=oTj8~lV{@GE}9P>;`8Ql?`T3Y7IJ zLKa1^QU436YZ{Ugh9+nY|Na=sw8vti$u7_54Yxl=bT#Hd#9;sinR`h|Fhfa6MH=qI zXpA!xNSS0NlQPvjOv)qXF;X5kPm=Pqd6tyt%uG^dn>nP+H7}9!vYAiHLbI5Z*US=9 zmYQXxtT3xcS!33cvfgYYzYIk7G&W602{+A1X<=HC(#EtSL=9;eJ}{> zFSQYY{i59QO)GIuLTBv5Ib;X+ zc634{x*{1<@DLuuB5cBD?7+LG96Lc;fJ4v!bY4rswd@N)&Ur2W_s(ls8^k<^EWC}U z*f%3jL-^yx$PML*=!L*O$h z?Bmwa>O%Y9sfQ3$gx^5ahH67apf$!}JSLh4$%ilvFX3e~pUlJ?P(7*jCX3vRt>yrE z5PwyFL4!k9LAZ$|yP_BRBHF}}1CWSh48u4)YO=|*_@7d*At;1xHO?nX!dQ&M^T@z= z_yMP(!B7jK2#UjlT8O}%h(ZDqk&JXK!(MZMl)qcIA(C@EhaeegNXKGiVh7y14j#?} z?SlE{->vg7oqc_8Vm&tETO7j=_!+10E6$pFWjS7lbd1L&OhG8yN&}H((#dC#fmg5q zuOkyHu^JnYg{|0*_mPc{u@9fazYam(Q1%C+GHOBRM>jwin&BDD#vIIr|M}8as$1Zm zNA1+*@9)Ux+==h(95UnT>KP=m?IUAN26+NEux?uhQ_N$e{ASLP|CRL(4lQK+7hmH9 z&f<4msqR4(=LFw}2h13936`1_~%o3qR} z_yqsXdH4TH-39l2`;3cxpRozs@D6t21MJ18H~^-)QxJtw0hQ1QVQ7MIbVMZjA{}QD z5yW_HNY6!oWn>^5PHx6SLv^%AB!(d!vyp+fu^qdx8y_K(ZKv6Au3-!{gdzscwQQ5* z<@L}NQ5Xm(UyySR@|gl;J=8}7gqd)%E23~8((wWg;V1lpQ_u+u*TI8^NXIH{z(%OH z!hc151)U^uE7FT_zBw|n6gp|56e^lfvK2D18HeyIau?$>zyvHoHjW~9ai%X?nl_|F zA_e!E3FI4i3!Cw&IY5e2BFHI@|MT?}ZU}O2g2Q&a>MG>aQ=m@4t$ZHk8Iup`XmK0u zQ0ghxC0o+ZPA9<(V*b0A`4#sd8^@s&QvR%-f=*Crk4W<*IR}Su7+)ACImr2KGS4@K z<%XSnlJ61Pnd}=`%Hwet+(x3Bw)`U{8Y~ZaK_Zn$G&1TG)>5+h|SM_ShO$3zF+j`n6?bWASAMmFZEbQza6>xJ0-tq$+~tc zEMWb5F?!w1K49E~erU{ka2Up5tSd6TYsST1$im0ihtI((nU_|a zW@?ZUYHE|BpA@;>G$f_5X+lc4X+}y5(~6WfradVgOeazz&0VB)G2KY%VS16$$J|3o zl<7}OtQkPcAagG%2_})0WRpTlnz@gZ;TVCDW;7||Fdh@lgQR{Ir{ZBeipTLJp29Pj zfmxW1Imp0^W*#Z8U_KU_S4nvtORyBnu)?e&SA(y<*Jg4HwqZNo!MoULc9F8%d`QYi zW-lq9nEj-DZVr)h#C%E0*XAfG-3SMoH@n)9UmZuog)hT^};L&~)# zA1MV)AySH%Vx*KXA*5VyN|JJuDMiXH#zRUuQ=XIxrV=StOf^z!m{3w`n?__~G(l4| zGcCy0XlvS&(!q2hMfH*;#oR~ASfg6WSE`r%7`Hu+xp)bSvCDiw?!i9uDJcic=cF7m zM@ae7d`-$x^BpP2%nzjeVtym#49?;LYUW{nHvLJ7H3LW)WbP#;!6cHBY*I)`Gxw1) z+&n!f6w zH%M7-R+6&Xyh+MBvw@T>yoI;T7E-pE9i+T#c9N29J|Ja}`IwY_=2KD*n9oT$WR8&X zrTLnaqvktOj+q}wIca_(k9 zTuVwmQ-G90rU)s;ObJp#%=M&{G&hk_%G^SV$CM+bys1D+B~yizYNiG$p{6z|b&CNQpB2Nr^QBNEu}A zB_+Wml9FsvNJ%sIkuuyoK*}gHhLm(Oo|K8^K~koehe(-b9wlYEd4iOu%nPJsm={Tz zXI>#?fmuY#tLAl5GR+&LEH^7jS#91VWu4hTN|xC~%4V~blBYK+Nr1UlYNEw7AOu=KAfjL-!C0LDh*pBzG5BqTx$8Z|wk*lmvUQ!C8 zFp8lBt}{21rBU8gAf=M2LRLp8>YypY(aJ=TNtj?(mS^1sZoTX%&fAmzh{Zq?Ps(63 zgiJIYi14^F1lY%}=C6ux~_~o0g=sHf>31Z#t0D$wZQJm+3-EH`9ZZUZxKz_n0VB z`kPo%2ADyl+-nj@NjKw3nP?s)Wr}%-lxgNsQl^_HNO{UUL&^;EJSpYo`;;f8f~iDG z6;q9r8m2ZWb&C zNQpB2Nr^QBNEu}AB_+Wmk}|@KBxN+lAl-~7WukeIl!whDq)azYkn)U~LCW)H7AY^7 z3{qY+^GJEcEFfhOUPmUDW2IS5%9~~#DI3ftQZ{27c9>J7l)cDwg?3z3L?%8&dLfQS zA)_S6;SiC?er>2D=Z&a~ju?b-Q0?Tat)IMt`)1=?kY zh(JrUHtoqsBw!LUum*c@9Qi)x7y-i270H;21<1k?oJA>ie$+)bBw{)i;2opRre$%Z z`oFcQuf%G)ldn^Vqs@-MdQna7_DbB&;_TA6Pg6RFc>7Sh^`SC*ggBg{;sn-zy4xNf z*)znM%KiYip3{sWzIsj_tiIEfB9oWbPU&dViKZLQ{5*R6gNCNHZCT9NOXcHHhy4y+OWiwxR|7YiSZBc zpt#hS=;Sz0YTVFaafvZ;vAkMBeBwaQfQ0CQp2WC;(P{B~Hc836Qd&|O5ye5dC`fnZxV=X0dfo>{r>6B8k`!Ab zC6({XMgGMNkBN(mP}+ zOglb5-kd(LGS%BuluD>&o>FLFaZa#)#Hn$qHTyHm4~|P?S~3l1&I<7!6Ahe}ese^O zW|ym(IDU^AIxIRdEq*{e-y+}N$NZqrlBJVPt%Rhc!PTRg*Aru_@g0dt7{&}T(Br#$ zP+W8@OV?Omvwz$mzVO`3H;pdMP=om%YWb?;Gz?eeTxzr2F6Y<2)7sGqe6gbwk_Sac zr^dv`_fLpU92}FFmXhFI#tme-J}4pS{SrR7-%-y+!mw$(IRX!)xv`KSBK z8Z=9c8I+X51^&6$zscq9ELofD!($2Wf7@CbcU@Yp>6Skpw~otgv~=}e`^WX`X}3s9 zWFhUl!F`<#G@B)O7g}0Kc1lW&yE|z}ocB)deGbt|ONrM4B#9-NejL3^OwWLnq#+(Y zoz^KV$*bu*-N?gzOU()K)(6pnGxdD^n0F zzbUDeD%Tk1TNSBP*?rtStQ%@N|MTO@UjBi8uc`hqdTb~fq8W7TKN=5Qrp;B(Sm-h0 zF@#eFx=q~YE6e3EaG%d(ZC$U=x)CDK8&Mbu-QRuw0$diI)8L-hP>9P~Hx`d+M(TaL zuj{t^ah*g%e~4TxSOh-Z~0Wkk)Gq?EXttp3(yJ-DW= zXlYHh!^EBWV6x39VEK1Um_ zEKmDC`Fo|6a#qk%^;_k<654b4%0*J@kZq!lXsLz7!8*4N6SO_yT!TyFbD+U2>~w>{{6W!vT8u8I3^eE;!09v-K8SpQhu zczvUWy-sPn{R)4p-;^GH*(p8jve$OKG%afc{2h1EuEoob_InS{1l%Xx?&H44l>zN< zXzROQp~4m3b^l>QlKaIEs8p^(g>seu_*;MFahiv!SO2TWRj=;^6Z*6%x!eA%fVS@DnOI&1I$($d-Y1&)kMNw7^mckfNb ziiKWh`~)6alhk+BeLr{e{z~|@$J5rblAjsx`Ug$#I!rOrrRAIlEFzp9&_7+4qiXQa zZGY=)UTPl>XlDhqzYAz@q^(_8?5fZf{k=)-zT>wqi9M6-2#@)H#C-)^R9n~gnH~mF zK`>EAMM0%o5M?MqDG3|tl9UiJQS89(_S)Tz-2q;^yA!+h`>%86z<}N-?&E#G;kVd( zpR+sGUbXjOIgy;itOR8;HilNf#}ElSIr*tNr9iaPik^bTTFc4O|1O;ek$W15JdV%< zO=OGwyiuWYX`~f|C26zr2ew%*O&-DBS;3eRnr0+-` z!O{@O4`UKdmc1tcOWWG#nqUjId^1s;I;N zx-L`^u58V+>LV@T53VA<7xUR-~vc1&|lRd3wztP>M6~oR*??YXHF$s<(X;D1S zzLl<>62ze&%@cxG0F$PnS#gdm=fJN1@a**PtTep9kB|2nepbdG&Mt>?@7^HvPtLV$ z)Q;teHs~|aC~G_Vg8I@|9o~X4?V)^_$xBy{SjWF4&Qoelr{RnqJ_~$i2(*9PUsaUNCs3{7Aio*2a)0#;* zlg^*hsu{WlE=o%!lB$DT>awy4S0W20Co(xHCK1}FOo(N};~-KB&&-92AO)m8i`>hp ztVqe3l>oVWIz*{)X&EVQp>2?q*bil9LRxlm3=!q2X{l!HD*hc4TU|jjYjYcOYgT6k z_MaUlrtxOT6VQfDSkJVFvXzM;jT_Wx;b>LnuPTKxQl}$5EA1bAnC!}FeEIM+ggrFE zsR+CC<$w#Ju1QZz=cKZ1gSoEY)6YSC!q05IlA*05Aw>cgCzGGc(8)z>lrax!8X-)> zVMfF8la}MBF))wV!s*gk6#gG56rGf?pFtYhTYkq7mDbhF${e~yc961DlTy=iQrUqz zin5|m7SS(+do0Y&&7+euGF>d4lA~Q18=J098PP5&PSMG1pq*1}Zx>4|XB%s$%y<_Y zOJ`dfr_5{@8wY1wE2o%5_LZ$uW)}Oz)+sH=#m3gz*4ilx9z?cwN={|t*gHkVupS$y zXx6mLLAHF5)qRrw^Ym7IM)m0B8Af}f#5XwHJ-|00D3}om1VW)upd}Lg z@3^MCtm-SuBU#lR;9Upmo8K%8>$dHm&3{*g{C~%M%8KosMT#RRs;%tIE!p{$1N~Nb zCQJuNotnw5f5YwiOd|ShAHW2_hY!F{c$g0#gx>-{`x^hO2!4w5Pt}+97OLe*)RAP& z)iAzI;qu{z2vhk#0Q{avjDY|k1Vk!564BhqTxB9@np2>ytt}{PB+FOyB;Hec>IAX-~CF ze)?5(&AcKZxFHrz!?wg+8JHXk6#|$xC=gAVQ@lLR(htB zg$3xngzPADG}MCaf{aYowSWmsc5EhJzdjIH(Y~u$=e~HRgJ%&mToIYd2(yF;DmD%z z7EBCSRxu*NT%ia73z@(gCh<{0KxAZ@LcEuptc-|Gi7|(ri-{^D-pL7S43mbGVZ)}_ zI+{k9gSRNuXK61LTouaW>of%A*U|`2LYVe={{3Nfow;el(lRNq=81%XR9XgWGr`U? z5Se5E6AxWWDlB%Q)I)BP*|aPW9O~vC;OD3E_Xt7MvggX21Q=6s^OesV408;(p0RfL zF;l3=(q%U{w*6YRVmhn+UDPgL??QAm^)>xypQ2wL;;5#7!+KvT`W1aV9q<1M`gjxa zB|4U;kNGf9AM;_JKIX$beawe>`j`*%^f4d)JM=N1_V3cie0rWfmSC`W{49l^5bOVh zpO5C9Wwa+LXb#Bn@9*N!U*YG#z5ghFW>z78qE&dknr65Gp7UW|uf`&Djpw}XjE~3D zJbj~Lfz@NpXyx_q8I zNG`#@Qw6mNc2WcchWG^d!&8RC5#Z~71!>s!q9dNE{r}D0?t(svLYeDDSl@8bg^cY% zjz-|$ZBoA@yVm~P6jwXtXSI6vs|9oY*?G_XuMm%25PY=qD}fF5FP)O;LDtAMGC8w< z*{+q@Ut^7wTaXN2XG07)?d_q#sy3cbUQvhfxKW$@fd2_M-Wvtn_=7}=?6-0bomZxrJ@{WMmQvI(M_^8&>{zsk=CJ|5Cr+tKPj_+(XUR!r zLS$yDF&Si&Y89gt3)4o>m)Y>N@f; zN2hvYff4Usp0NC9jg~7`k5x``mJyIjXEG*7IGHBRJCegiWTk~Cr=`Y60Da^{=4MjQ zvSb`_qtYCctAf zr};3+%t(etdx*&~4&M`xWD7r%GHS6I%gK|rh?o#CvaDsldd>Wfnf({5l5A~h=Aa&^ zPZZpS0GikTV4)e2IfNp(axbA=!Ub>9*Ho^Cnv4lN&gseimcH$`AWN=}Gf)pr{Td&h zh5CYh`6v5I6Kyi$6Xo&d?--+B$(DG5azB*U9ql`zp2Kyz+FGX6>1sp&Y;DO$|7@+v zNB?ZC$VdNd?a4>~Z0*QL|7>l@NB?Xc$mfvqd+MK&0@W)BVhAP7ZP>krt3S$dbhdLw zNt}a_H5amW{!cL-=(&?zA1sw{dLebLj?@Cmmpp7aR%|!WBi6?~W4nue#`YQcTJR~! z!^L8|l8wdoC+lN7tJKHEW4o7q#`ZDmW4l-Ff-&Oxdz`aQzn4qLv}P zMZGm;h%6lzkP7Kb9NSKgs)y2pNFr{Wz#GyY0d^{z#Gqd6DI$#rkhdg)M9SgFC|(vy zo0w)Uuv=iIJ&;8a4p5a7*l?m2PGs_T(MLldzvd5 zM1?0#xIpZN6Di#Bshk8*b5PDD;*cEnICZlyq?AzIR=!15LBY#|M z&M$IQZ|_h7vX*(QxQ}g3hLWv=y5+24fwGh$D;?X+0O}oeTy@8zmFkg)_z+8gJ(rc9 zk=6@>%$Rb+h~6(vLxV&G(-^UOIzEBM$kIDLBd&T`kVqm~G&jf<8pE1cLl)0<5aQsOwhaK3&Kth^mgT+WZ647i?7OXX3$gkv4 zKZlSo?wBdCXUoCR<3MW~#ZaSR_LMM1)5u1h+LW!FF;)a?bWjex8auI)&T=T{-=SIR ziZ~eXrR7iqOOYl&Hori$P8yYp)Z9C{cKwWK*@;xv#VqzOMXy|YDzv6Nel4AdEQ)03 zI;Jb5VCR<;PzXsp2^0!1e#g+z4zd#v@i|S&k00wULRWHhE$Esxy8i_J<75-)K=s)h zV)u@s%mmcoEP#0A|DBHN6&r2A9oKffgflhB^DSs!9k{=vO*pq2+dBmsPb>2lYPCB; zP~71A8ULQ_8h#hw_%G_%4U9I+z`9=M&H?A6 z+}Z#>ya0ZxCtok({i^`z$M28TfmHc9^E>*qB14dp6q}1qW$RgjdJ?~x3Qz+0a@Fes zC^j1^?p`=Du8fRkDLI^g2l1M4MW2oTwP=`nq z-2_l^Zqz_Mh=!pb={^W*RS47F#J{7Szmik@$_B>dT6r57K70UmBU+CSAB3ND5wz#? z&x+uuIO-<+U&tCYxRw8VHe7uwvRfIJ<|caFb$uos{XllcB-{KQ<5zLrbNd5d1I~>J zM@=y89;wUsL)nC%3{elBpRWslJpl3Z|3tkwix#dPU@`tL#LZ0J4URv!0pkQ#R*Xs6 z=_W_})BKEqAI)WyoWij*egO~>$va5SGeR9_q}pwRdtK=IlbBMEUp5_giwT8j9cc)E zk^Y6&>};f24A`trOK*tp5W=PRv=>lZCBPMs2Vf)cFMfJSwI$$FyTYHx%eo_@as3NX z`XMZGRr;oZc~b`CE*!Et;V9CWY}h!(6Z^rj5iz)?BO{wVUcspH_JM5KDxd;rivC?P zg2(zCj<>*>3hwy9h+CXmAGckxXjciBpMDMCZwUCG#7TSiqy9U|l7eZ3e}A|BL^hWm z13_;Q!uG!X3vm+4p&!4U{*GnyOLPnq#qh}F_%sOV5>hx+vJLg=fwJ49owSAV;dTfU zxxuMUIfA{bS_>Vf>}qC)f25iY`#)HKzoS1YqBpe_0;_4JaXEU26LS*zOXgS9L}g2^ zp)HC3Z&{{!S9WFlqcqJE#3waW7@*T#4lSg^rTL>a3n`5|0S`^^oG)(^!bF-H!R6<0 zWB8i@{--%SP5lQnL}?njR)i%bk&ed)d+&o4ymSKN zd0m$;djjykGvfS?ZU^ShOiUr;WlJ>|#VKeWpp5en`XfvsE`0##&jS&8C#I%TB%7!*WdOk0@ipCx9es!#| zIlcQ0_rv`s^Jw;?@~Z3q9S4?)GxQ&G;*2REv8dnv!8VnfKj|np7UdB|M~Nfi4*FlfQp;2~Ue9rm5vQ$gd{y^MSh@N2#d~pbYTy58#fVs6_%G zfRaE+mMQ~r@``T!iouy8@a_Mwf_Vw*N8*Z3m~(`eNu)zRqKXM8nBut^fPVZl^WQW- ze@TD+;z&r#ryM&x6Lt7q^XOM)^D?n*D36YJ&{0O(Kj}wvg!+SysagW80M`F_Kg42p zr(K<+Lp`2xbm(H#!xX@W*TPTql6Pb#jLNtxCL?jFT_P^lgwlXL-gz2nf7kv53#^2w z3>*Zb?a*3n8;9MAzjX2~%8EvPBGmP2g?{4cws&}@877rEJxh45&wh5v6>;f^XluAC zz~9A3G?uJ542v-;4SK8`oF2py10DPG=}H`&p!;9>3oj^IVrpX6BGf4ube>8Jj2yXxL6Q(Aj0|}F$-+v3;o}7geE#RIoX0VmPB=9Z6aS1BM|-T#;EpQ2bD9m z4qp>@Jf$BW_CWYQH4XW@y<5h$m0^4F%ktR%-%%T$sOMi%8(w(F?~HBW=Vy;M{62uT z0L|ybiTMKjDm9j7;jCsJ^F@8EmcQ^uO;E5pYFtC9 zP6AXMjIshyM#Z|QxqVJ+P`16rtK}s)J(h@jd)4_UeLS3$QHk6=m$vyQ z65_9dOGb~oF@dN(DUpe(Oi*ZWNVuEIyxz9s3teqbLmoC0Vu$u34PnO<0BR?O zmi_&!^mHD9%OEo$F@;-&%xg}$+8L?oFcKf`2QN|Ae0Tu7mKxz4_*ssp?CuOE9eJ@B zMV%)ZT{lHM;1fdHWZS@MTQC{e8;Ws4J0><27Afe@RP_ZNxP_R^G0Hu`9K$iCEQ~*U zV=Zk3sj*oQF(+w0(ntc+bFxvT0@Y7()pJY?Yr248Ljin^@N(4#$Xe`PLKq% znDoSSLWflS$Yh%FxtMA=9-YbE5sgEA${g-2Ing_8ZkQ!dhhTflg|<1eEL8fK?FiP4 zlrl79mkS-A<`1)HfJEX1ZYj8VIXgw;9j=&7XBGdcTy9i;a$*Wp!6vch@#f0R+!PFQ z65TzU-V_uU2tvN6C>K~6r^Y15^5X2oRI&%4%{T@2Adu>D^O?-HXsP42s%#u?C9|$R zxH|z?YVq}A@0QJsjZK0k7ehckc7LWaG-}&3J1r{`{l#6=%vONRad0OD%wl4D;obwZ6^(=B5jO%;oq1CrdR%$~IORZZ zQ3`8>g+!P;Y{4+NE*m#?H_6CO$3#IB_?xaZICk|t#*`mAf-Ip@V6Kpn%UJ}mNFEpM zLU2oBHTHIK!j=JgE|tU_3hN|7RtkFQrDY@iOSaU*+YF^QC6+u)=`x>cwLmA?lr z;ZZ)H?np=Y1r^4C;6J+I7wxIIe{fS+lRZKnS|7?dBm~)VOz^A(WfC6bIU5+bu%~!o z*n|pZL}ID^+f&Z0L0uN?7I4QgE?CN?q~&)I?A<7<1Ippcvz2jN9UpeWpxfa+w?_GE z@Nq?onIm%=X{mn*|5t2(TBb!@j0F%_EFJo-_%=Nfm#(sizw$@!62-5`gCv-7*~!U2 z$IeQi$So0<_NH?fj0SM|@Hd1>`N)UAAWRfIAI`(PApFmV2O->CBRmyhQuOif3o3+X zSBQVG!u!Gs;SK8e|4u0_{=_MzE4CL1_%C(Lrbt6=qj^np@aMG9O{|nZ;hRp~V6{cO;*c$1!t%&kemkZ6b2-eaGW^%C^QFH*gG+%QChhtg8Bj8rr z;DC79%4I4!grV4n`VgIU0WL`i%e_UIfBzQmiT115b1a>YzS94~t$`>Y%U_KtyIO#_ zNqys%*1Kg)ZmLq1n%k-+EXB~9F|9a)l?<}DsMN1nN++B-WKxhf;q7d=RL6X{)R#ly z5^m9{J_ekUjH zFjF{7f0;BjRk9xHKoY=ETKXk?<-Wn7P<*x9)nn5s8bq%--Z&!T0182!^Y zBX3-!rzUAVSc=xYl%fsd2wKetpl7{7&xV$fv;G`8tMQ~PzKSDeQIh%@Oo>6u`lLc# zOdh;Y@f55&9}nPvH-z{?dnt;Yp{RfsYysTP>Y_W6ePuB8HZch@qvIn0Thep(O!vek@%WfGs~G zRFfjae8W~v%Wxs!S15+Iobou1E+SWL>VY#qrPv8i;i!C0f9Rq<;)zFVeOR-qw z6;XD%eoEu|=_t}RL^^i>DdUL5BDy#nCljzA;R7c4?jhn3dBew5!B1NP{RkZs#GyRM zyJFH(!sBthv^wp-tN|Hwmfr2tR$#!g%9+TkF(819@^MZQ0&jTeU?)1NS7KUrCamMw zqq8`}lL@o?7<{7)X`3MpLT0RZg~L3_iG8@eF9o;iq=H9{0xE*Y6Qn5i7!7N?ZAkA( zZTOXpCL@QXEa)FnAu)SM2dGhj?|2)qq!;x)jV<*N`3Z=$q%idpZC$k0k|;@A?Wb@R z0KKEQL~c+Wh-@Y@k>b)^C!A0D(KC8S@hMLtEoiKX)u3k-r#gW0r83A*@yJj4Plh;Q z5nwam2;d^%A>cEh(i@QL0AoN)fHxo*kO1fp7z3CISPeJ}(0;4W7y+CCZ2*CQE`T0@ zL4cWnWq{3qV}L&a&j6nR3b0a2fE~aU&;bw)NCi-Ps2$Xo)HejwhZN@fgWgk{s9&gk zyi4!-F`)jS_VfKs`BGm}Is(3b={@C7?G?G=WYGPt!g0Mgvu8D3f#-zGoeF5>|gxJyaQrr@cwXSBn zgG1fjJ%fX--F(`p$fxq~2=eg{4fZ6De?W+;gUZKO<>em`92yuH5EP6Zf~gdrU=N=l-++KXKQA9&Pd{HD|8}Tbuum6HKV<0R9T4cR^79M{ zz!h=+ZTwM-fR6rfke6o&Ty;tQl-NJOEz~R6KfuGYgMR>y`QTqCPj~+SU-x$Shm8FL z{5+xTL;n5&s1Py@M5N$A#0l<YAP;MdU zS^UTQPCfzj*2_1bBWmUuM7%8;*icAk#8COS@eB&^3J#{2!9nic z=vQCQ5FbBJkATpSkWL|P!JRv?O$l*V1+t~5si`^sM47oVn7c)iVSHRp)~WjSGzc^TQKmSma}MMfrcoS3mRNI1My&RF_1E;1z%djh>I6+oHuWDTST zr776cK4qdS4UwaH8KGDzp+wmrqVWxl%uI7Pe2uEY=FC1*F9LIpF5+Zr8WK740Bkqh z76fh@nj44{{OKAjTq?#>==gq{X5k!}s`*GQ%Ps#1#BW&>c_E)#h{_HLs+0+73s*QV zr{&LmnETP;BiN)SMialOmhh>?bJ)R2Di3}!j=q2e-jPbeJ-MhnQF&_7E!%!|#@usO zI7lR=Inm{GbVozfZ0-XzqW&NlcU~#R+y|PqcvwcVpG@MvCaBS8nj@e=M3&V{O?#F$ z!Q96pfSZ@*!L(hom5An;2-M!EoFv&Cq(P>{A2 z&UCY^on<+&(fu%0$ilNM0#6l}3Qo<{1U~f+3CJ}^RV{Bvcktro(%70ESz0JfNYt7> z(14!eSPGh6oTdYZEg@mhST1;j#h8F4MnYhU$OhSI4Wfn+Y5dZ}k&g#{jhY%@y-nHGQ9KvRu0bOx-IZTYb!DXB&b^HOe&ErnGpn1dk$?@Bp? zR3woS$qv}o;ye^vG8-txITg?gB`keM?NO)kNsUYgVu8GtvZon~if3h@KT1&(^`ORB zvGwOLqIn0p1gUI>Q9D4@l1c&Hi)lb=2fmv*a#=}YOd4OTfHHhUwF7eE~6y?_pLV)(Kb%XaEzV6M=@zJu@;= z(}c{-8e(>n@_0Q8Or5&_Y3a_Je- zth}FiCrU@p`Df&(@~8|-$NMQAz2oC+`Zb^N@%Vh`9Z%y@UVL0CkDgQA$3z!aA09Xpx0N4!J z0oVgL2sjEj3%Cfl26zB?0(c2{1^58?3SguLj0B(n=mKg1i~!96HUJlZ8^9aj2M7Xm z0)zpg0SSNYb(GC&_t6F_`6@gT%|5WhjZ3aOth0QCXH+tJ*kvnj-jXaey#Bn#o=^YfJFT_`QZ zr#uOWAEY!iR`ia_BYt10_EQ}w4|0jOqP!^{xnxL7@yVs~C|`<8`B6Qo4OB;RNnC0T zptMvj@k+J;BLJmu2B3EopRX&WqkJeoJ`L4@%Ha89s#jw`L-boGKpJ2WU_4+6-~iw? zKv!jMzEN)^j0V-pRNOyFo>RJKvME`z zsXPtBKt4&N45wA0W|V2&8BNNRBf@ZMJ2|;57JW+vmIxWdq-by>NXS_V(B{Ydw2>kG zFLq4k7laCZLa@y61DpX-kTAH&(CE6-4YYh@)=Gr=1-Z_Y=fD^Z0)Z(dvP(N!ZC8M< zR5Jt>-XK_xAY;l?;!OEX9iLx}jaDm+IjXa?t9V|8`86lW1Z&doto;T%_^j5BrOH98 zFr@@EOFDB@bSVK%HD^iUGO}NT)@6Rd2vUl2932~p?+AA8l`;fnWwQ(hC9ObBmra{r zadpfuX;KE)iLjDU4N^~I?0MFcDMv|{>fa$iMKv@Cc1>cP`I&8FNbJuFWLYU}CYUGC zo~VPGs^^wEb(A_!WKW~dQHG4izu-%mpE#(pY=22-mc1sNQp!t|e_Tq0vlS@|@l*U) z@&k4WsasUK7Rr}VfsA(D%sI(IMo&~vv|n&TBxhDh7(tBil^|AP zD;y&%7Mh8C#djt1gdfF*61il(u${y}*qaFwwiLY*-D3`j`ioC8D@3^xBVno_MbuEd zQtZKe5v*bIMG?$>flNGE++Exprt2*P6Pf*zSps*Vm*BkwgnwFwZzL`>;XeM!eP@&C z5u#_4zylrNOS zZ$S}xbgGL<`(+uhq*2=~d)F~wslpG4M^xj>J%vA4iEb)DopKPDdNWfUm;JV_`pz5n zb^)acq$y2#!&$JyE$PEK+*72RkMu-cZc)1@;ZhyBOE}3k;xBSxzrVv~!#qM7qF%qk zC90LrgRgX{NjW|+4`M3XIxabj+(dkC9!+3O4LR*rd!#i6@ZtXO6IIQJ7r?L72ycU* zs9*m5efWto=EE=Hr}4s1E|81l(yCfjb*k#stWmRWO(SJIL_XonbmL%RZ| zkytJkYsu78RDjov9JNCik>(o{OC}Zy#d3*y=E?+&M2rferwGqrrpaaaoRCQMRA((X38AvUZN@YTf7`Fzo^u%IJcT6uV4iR+;r5A}X zA>``yBM=A}OnycvrnM}QO3*Qs0|r?RW?j9kB$zh>0k8lqWSLwj!vSn$f#F7UiCDeZ zgjiG(j3g#HOF$2Frz8+;aG&0!&0qEOvU!Xd+566&RF*VnkB)k}t#8WIU#c@5z9f zH27G4S~^v$)u>&!fst`@dey z7tOjuE>2_J*i)y-Rff+Oy1{+a%iDq6g_CQiz;(Sp+j1e?@%0Ywx&YU<$-AUV?o8e- zhui}ycV_;jp&e~|xid%o<5TvnbZ1;9MBM9i+ue1{=H7MJ8h8Z0ymR4R?RFj$&-+P> zOY%Gz)rcb?1YTiaxgUw1=oiB|%p{ zMi2$TT??SWQCq&UF+dx@G#&EuxQw(E^|jS7k%9R~B5&wVA4>$$1~X+uCKF}61Q`%T zhjn;EeUj71AsQm!6MtkNLlSe1SeYOclK*8awYri!M!?G2Q(>q_XA0Q7sDA9l^cnaX zMsNDMrxPxZf*uZ6__4)8U&4OmQW??J+Ei&{9~PlBQ&$^peuqA22^Zhnv9z+bv9+^z zaBLA76^*YtxUom%Sjw66;-VEc#B&(XS+Zy7oRlz2Y|NPo@$X=C3$+O>b~NG)K^zhZ z;`a6!>O3b@40R@*7iZ)$__#|%niP)l#_gdftLqZyRgViO( zLlu~Tm`)^qYzUAy;fOun<>#bRSDv&DU_X24 z!>2P+=f}IHW|uHoRWPa{r!e!U15xAL68>?7rCPDdeZ-Ouec=cODeW?0kqf~Rg}I1$ zf)6&L1USqpxFr0fA2BBcxyaMSrGbn3TA?!AvsMGLiY1FB`^h?J(c7?*vGgW=? zvM-lt(m@4`!``6U9V&X$&zR+iS5 zHkP)Qc9!;*4wjCVEvzi9tgNi9Y^-dp?5ymq9IPCzT3B0JTUlFM+gRIL+gaONJ6Jnf zx3ICav9htYv9YnWv9qzaajtO3>+rrM$&dSc(&c@Ex z&d$!>&cV*nu7$m&y_LPSy^X!Cy`8x?q->aBZfKV-sSdAH3`w zAT}rtpYp&rYqMkVjE_4I5u0d)M<7hA?5A>AE)2^iB|3r5z*TL^&9`}oOJ(uleE5km z<&XyK@bJYjZkqC6vgF>71eMK_B&3+v@vv48M4mKvqu|miqII}`HOCA1YdC4#b&gFK`F({9eL&E@#0Nr{s%q~15Jixyj2!C?`(-l{ag+;|; z^Q05iG$BmL(-hb90wdBiz~+gYauM|g@*ok!Gq{BNO5oC*VN5xU&RUJACnOLjE1aV* z%w=$23y#dlb*9^0@d}JSu8vkJP1tX?pfF6-2*wEckaE=mZWFknaA}Q&!9~+c%b^^~ zVQ?;aY5FmUPxF$m*Dw1^y{>m5F5xmFjc7jp6c>kc$>7d{JlT_2y7Z?a@2y5vWO6tn%3ycIk#7V-n zqV>XE5VQR$JXh(w)&=23;T6Fx$!+07@gw02Wr_Hs@U!TPppvn3EB}CTbLYNT~pb@KG`Y3m;l z6WeXe);fkVxk6jNhJ6dCWy>#J)^Zp>VVO+f+$t_{+(g~9@I5bHc8PlX^+#~X%vt6Z z#wMY2<}dhT(b8qBckDVS)vjbv*QvE<`z1?Ho|-SKRl8y1R;?dCd->zgVX?AN<0d9H zj!xcfeFK9-J9O&Ot$RdtY+O=i@BRZvEn2a5-QLq{)~2TIp47czUx`R;CW;dYEX?x; z*A-b+F%%nV)sr-rc!(=E%UdBe5*vw4h(sw?C*ojqHKqUBna)g=u?btD2; zM{zreg;)U=*HvjOuB2rza+1`Ri7UwheH?6bY-Hwg#h@lZ?V8J*Rj=K|P``$jKML^B zsU=fLz2(MQ+1hTcnn|4{3TbzD~siW#*7pvNpwV7vZ@m!+Gu69%zLlMl&2eb_0g}SU#X*3t-Rrb+K7g_RWTS6 zSYIm5JKtQ=s(~QgOjKJe9OPPG*GVE6bh_E#2YDZw`id1|VZN@1uS?$kmSC|$C3S3t zgDRVfV=8q}Y^_8 z^2&&+CCfX}STO`#G_l9v)1-2lmaf83yH=&zI#nxIsv@o`($lM^Rb5a6V&+<++Oj$V zLt*{uN>Ou>nYOvWQfwu(7AzGm7p@Smlz$d}k$e+=7yZy$-8*;m*oBrIJB=PQ-tc$IipY zi;C~vXG*8LGtKwzF|k7?%$jqos8~n0sgtv(Psgs^x`)Taj-9X^Ne&&mdGCISj;<#( zDtSXT?ApEO{Kb-2`9nu9TC#i3p(Djtu6j=|JaxFJ*vCJhW9RPSBMZi@-?DYjzQac@ z>Q=AOwcGm--+$z#^t^Gia{bga!@A-92dr5;aObY-HR{#(f(z*UU7jMpFT&GR999RF$xuPHb0bRPvqsLDFdFk@Q??1pMHXM9YJlI2CM=aGHw5oF6N=bdKL3Kp6z=~UlZ6THs$fPn| zMPL;@St$5rLj|~S2xK6F5LJSBLR%`RY#{NM)sc0CD4|BBK(V{X4ERY`TBVYcxNhTc zWs0~*6Gls4GT^y8g+9*vwu&fUhds>>VI zsq-ykVDEK3#-tQ{P*%SGuEg?tz`Uv5hQ5?6#cQhl`5$+ZmvPdNKds*%+4(e`VrUG~&zX0*HQ&ED6Cwu^ccd|7AhLfh3T zbuT8Zut{_2d2V>Z>ie!^VlswFr!XhRj6Jq|f6e;s*M6&<;Jst-x0fZ(=U(54Yh0&L zPneQ5{ri+&i-&Y<7xBSzOFO}c39SY=pDS8y*4@#r@Q=BwCw4_)ZAZElZ_ge!c$Kd- zXv6LKeTt@x95hL5@}Ey%x@Xp}?NiI`%hLrPwLcwt@KnF*l89OJ^ghQOfA61@bE`@1 zbEh2#x0$w$`L?NH=#=T}lp_a6uOHJrQ#p5?U1(T%>ZZ`BUDqw_$1ginH-Clghmj4Q z_HBNCr~4+o5BD0K7i2$syx7b+Hgv_hq?xJqjT;=Z+0f?W$lXuQ&6e&{3`tGgxp(f2 zUZ$yy6&~KNbQ&Lbf08cUd;Drl$6?J*O*QG*y~jkU*m0L$tLMhqdAnXedna~~OAaSZ z8~do|#Q9In6KoE9v>o>0j{%*mhIjRtRJXycFFjst?BhFk&9{UMgKaTQFYS;#iRgUO zv$l(y0G=eC?(JayQv;X7U(+?ZT5XZpxR-s4&> zTiLX!`IcM5Z%qEa@>Fe`#y;9RE??_8Mqj(`z|nh4=B3psFsT|+u=cXwz3yvDp2^xS zTyL%axaZZt$T{yXn?5?0Dp@;km6h?xGu;|G$qlV`A3r?vNR995E2VE&cq^g{Q~LKF zw0(|?-v#;l^H)ypG}ZEdS~6*{SIN-D1&8Dj?{+qB(B!#eqfW_7{a?RVYJ?b`iyea??QRd!aJ{peBS^;-5HT#8rBTlF|(Oyq?1Id#W~ zvUT#O9I0W{IxWJ=oQ9O{uDRrG9@^)rS0r}(@6=X-e? zeGxp`-+Jk(Ngq_R8;&~H;d!ob;hQSD`+8>wxhGxl=wLfWB zoX}x+@c9mhlct|+H15P<-6Z>G&zFsQwsqL9Yn zKkC-@;FIfGUq1Qn%CUys#u=^d^eExS>~U3GH~zVM%8bkQ$qo}1)Zf2dOJ22+*_R*V zJlYK1JZh=6NhQU(m7hNS*k~~0!JXvxt*ysZI#%8J>%j4=>z^KbcVhg&%S&C>wEZ&g z?Q~<0^|NzSH;Z*o&8YkNh}A%=DcAGQ>t1y4;OZLm)o|d;R{ck1G){_pVrSwV=X|gG z$^ygH#V;gGth@CU*S2%)J8X!)G`NS%wbi-Z;}iTF-pLMVHGINC@uMXkIbDQzR&)uz ztFzqxgk<4q1B0IVGefORy0t$mYBl`0N7pVo6Y|d2n{ioh$o^rIzbkS(J=$_>RNRko zH5O+qYq8sJT58nY>1M7!GQ*0-=^Zs|;G+0aFwk(sz=Y3vGqmUIvW*(ydSUHZ9cYS^|)0% z=Pcjk5^g_;Pjq8xj}cY@EX~@Mon2T z@mRfD&qkj5tZg5rr~mx3&(^+i_2ZxAeJUFAwtDAfxrX;^yFSb_zP)wunNDjQv`$)$ zt2$!*x^2%k{3&}mW2koP?;8wOY`XSfY5ifxdNA=tMTIwKp1VEi)`X?;g>DgyYQcrk zw~SJ{neIG#Dja;ZYig#B$o%m5b0_bFspH>u9e8E#$R2^&i(0HT6LjyBJ7e4k z(NwpfW6~ihy$8L!baCLu75UC*m-Ln2KYHP|b@8e2i1RUu5#wjJt@owLseub_Id>a6 zP#QXO{)^Y$()QjwcB$>gCH1_Y?Dbw@@pkmOj$aGvMx1VP#put7sZF?qRATT9y@B<#Cy zzc6<@=TB#EFS*}jY{=)iYg1~s6&&h&aAwtc>FXYEJ6uO=!EDu*nRa{69Ufz76#p@* z-7(RbXu*Mx9$zm`=;b=AZgH4f^o?7&_8q?X*-x&z|DM}By{`tHryp$I=eGOy$*<>3 z+EAl!*R)n$x;{%j{$};2H6ld0ny^m-X~^h`S{|H~-ADGk%9oT^NBoMO-kxl7 zSg*6sqqBwg-p?+Huo>I!^3IhP&3eW>n`3*>v_;;!jm0ab`sI!-j6bA$m(yncwfXs> zU*}&ec@|N}=hF()dm}wEHqSXYtoqv)QM0z5cL-Z`zNq1$Y!gGPBTj=GpBS2TarEFM z`$^W({ddLm{4n?IvSHJ#M8erW!qz-3^xHg49=z=9w|rs#z;~D9%oao~J05?g?>D0Z z(KjTz8uscu6_EWuDPd1*Pobd zY(75z{Y`7Ho|lvIwgg}OD5~gGjD^?FB4xJdNbNgqFZA|TSGrHgX?v&x0Jl-?RCD}p0Mcoy}O)? zI&*JTvl`PCwl8h_9j)GT>QDw zHS*%BdBZxLnf|!lvDWF1i~ejbJ=rKEC;!KU;_Jpj3}`x5WC!F@%efSHkV zA6wNw@b=T7!#B=Nes+iXEQuNL=96Pf-Ik-p*Uyf1-Iaf%d%9zr(FWRUJkNQr4_s+9 zwbvMFtru6uUhb$h>$=f})y~IiEGj;??BnnY_wy7N7yI7dRd=jNarXUk-}((s`4-RX z-aIya$jRYZ=jz8NGRgyOdO5c~eCFo4qeC)pshGEypEcDg&N)&;@n!M&PC-o1stIpT z?hoBQ=VWg2rWbLpWAz93+%x0+q&xLj4YCY%^}gi$>aYcK!tttcjfMSs1a_%BfAu!! zz2Br~Ud=vkIP_kLuKeyv#kmMK7tFQoZfC@#d|189bZacJBA#)?)vH&NFwM zI$PV=gD-I!L_C(kVERLk;X*3Q8X zFIZa^=sWEbtgYYDKB&jt1!G$8T0djNt9>(#PaJsQaqa%rr3O_Z-c8-U_hWabsw2{t&idnD zoL?sHAMUlyZRrcwfc9Z7pA|{sjZHf}&}-jJ_m9P!DqVZ9|4xPil!cDH!^=~f%TXjqmu%3 z-wo=wY3|CHSnJjn%TuKbLo*i6iX3*K@cZ}5eS;N8hh`7=6nv{T%sxE)v1yjH@L|y7 zsj9Ejmx>*>HgeSUHl4rpkFV{W2mX0Tyx4S@L6;8)y&t$#8~Sqamxd3oX8KK^`R+=% zPN%q)f9!aA>&)qhR{J*oxwYzx)>BU|YcfM7`83w5{^9$R9~bZZ5tKgA$1CU6x3jaV ze0vpnexA*em(NE(+4BA9;NX6#JB}aOJ1*(5`Qn)GeWMfVC=v@lt;;<8N1vi^E@rJ7 zv|kcgeYU^6+mcEPc1yR7O}t;_bDaZGiZ{gpKB?YKULCkG>EoR@pHIF#@W<7WUAFde zO6qnsWxC<5>@HqSr+$pp*BWLMG;(*NPSsvb+qm=nz|N!N_bzGv!qmLe^ZxUDWWB7h z)z#7a>f~#N9XI(e+Q01S^?QL{we@yXyN4^r{N7BAGpKj};{2(PYScaYX@_!MPQ)qe zm&1&@PcYZ3do4@9NU<&N$BJdEH*en2!Km8A8H02lMC>`QSF6$8#N_AG-v78=b=>S} zhgQCPH+En2+j^f{k3GII|J#{l?X>)9*L-TXnDU z``tRG3r8g_cXI1faw=)g#Es^X?g$ZFJ4TW*s^F-f4O9tV=FB_okoEwH=(>d(+6X2lo4qty=d-+Y=G5 z+MTFsKV(OX_MMt#+${RO?RmZLlie4ajEH@)$$#4ZR>sShxb&G^Wc}oO)2N0nnZvg= z9T9iZa8P(q>n{E6r1E7=Y@6l%h+goaN%6XC`(?+2Ece+){MdDDbBXZ!q>UrL#`k-r za%^q-_0B5ybG?SwNSZI?S6UGenpPKfu>iLhd9!^iznrwO5 z%5_(sm=Ae!GHaD*^R#0DUP)_?PMkAQk2yA4+xf)KyEUX&`fT-ZsNuRZwMeUQ#kD!Z z$9KMOAgNomhr;dTmM6>ihkWih&a9DM+reJT=f%W^ym|c5Y~!buQ?E6gKB-ONfTrn2 zIiGHR=&);2^8vj(+rO-JxYv^}qq}SgZF$xIX-84g{2cxJpVz!x{k$tfJa-#e{)^Vf&hn=ETvyX5?{ zO>b&z+izLpSkF4>x-wbYb2N{kI9}^_dX^WRN3>fL_X?Ar#dkw<`&dBbmhzod$ZB2 zT3a-98Q_(1CuhR&6+=F*zF1{vkCSyTRqpy^$K)qLJ5LUKylMYDy*7`hFMix&vGJ3E z%Z#Enwz)XHQR~VvBMR2vn|Efl)BIXG1D_R)Y-RB2#fv}kR~d;d6N-atH81G0b;Xl0 zi!Pc;TDl!r7QV&GDmJw7x>J6+(i3`bCpzfvX%!w?qag3J_PyPsFYUZ@A+_?>W^>lh zKUjIrnl(i|x{g+yiOCkg(WT2^&)4Q-rMo8%HTa?zf4-#T&V?5)H4kp-oB4cp zQpC`y7yP_Jed}c}>T=rT;IM5?TKe9ew&G^&M8BS5n|I6NEZfby>~enPz`mys-)TLg zsq6Ow(K4_5Q^RKt>3wzF9-GsJ8RDSnH~M|pyST%d%$KenDdUF5wVJwm=5*s;(aWYR zYr8178uRda=Y0d#2lvz485E||spj5@(6v2p%t@$o@$r&PRa5JgY+IotTN%}$XOoGK z(vOR)P2G6>&!eF`6Lr>YX{ht<(6qi0E)wVF%??)WcCSZZzpedeZX0t~+;wK3QQHgL zHmsgl5b-9*@bD|wTF>J*oUPZ{VS{5y=pPQ|6T%+}ZjOkvICR4+IqC47T|1nuB1ap{ zcX4jFs!^kyI?2mN^>4AJwp>TiecH2?p$(4&KfiY5a)Y+x$JiAUyANlMTe{D$*6CiVmd9%XL*!^vmUB75rl3p%sEeUkFCR7fBL?{=!EuCSB0mKw6dJ?afBkl>T6Nt5Z#=UD_iy3Vc%S5|F>OkeeR#1yyt>nokVf3 z@zySz6O-3U3LS=3UB7R?&&<|K8VzYvr_HKEOGD~r*j&piuF^cV)}2l@w*I+%k-uxT z$OC7cZw8E=ma3Qkq=}V$m0_0{#l=6;UGQ%a`#;^~r22PC?Lx##zdS}YZNhm*TQHwd zEoD7N8P!(S^O;c{CXdi{Hlw=0`T`Fyst2sk=q;mqM?MjmGO316B(HMUZbmhQ^_nET zU{s4)?FUfnWe6X2OyN)Y#hO;w46Pn+=X%m1^C4*lWZ2X0l<|fh{*0$d2_bnzok>SDn{RdDVMo?fr!%Z1~); zdT&SQYz~~!Ybu5FJoKwsJq^6GsI~qs3eOL{T;p5g`?U)KYCWZ}d}VRiZinL2+x~nx zk;3SGA6~A6~b0>V1SyOHR#BN$d8cZ;|zYaR@JL#0&_qtxGWtCG#Z<_bIG=e$W<4dAq#NuG)#mg;| zDz9Yvc=i$NJSj-Xd%SXy&1w7BLeGXXYcw$q zm^VIlvZ-6tMZtv?d2?QtG(7Td!1k?Yoc!EIpT9Mv`Rb=1H{4hnJACA=GdV*m*+7#p z%i`&Xd2d5cMxS3&{KKby@BLpICmrdTw5R2$@dpMP8drbQ=cQ*0f3KILJ2+h_?s@6? zv{jo=+$|ZMJ?+`i)9wZSj|*%3vD@(Ziy#-{F9*+AEsTDCz1@rGWh<8Yel+}I6z%cj5Htl`E6z-wE?c0?{n`W#k z8TLod=Po-<<|ppbZPak@#Z}8H6(#6Av6dffeqm*^bvl>Mj29djzo@n1-PPEYwF~4& z@;~3oy>d9dNp4W<4hz;F-?qrHbIl3c1nC`{6tC3k{_Vl3VQJkrHxc?i?;WXqxJ&nS zd7C6%tvU?~2)WRrAm>%~wfPN>tan+14+{7m?Rh?BQnh1`9qXN{<+Mu_?o`y)r+23> zjgG{+&i7s^?t5=)oA7EX0da*MTt1~GlHtSt( z%-sRcJjNYYhCkZbV^6}26ZQOytBsy9;8CwTJv?9T-!ouIg9DeIx1PIDf7YSuD>uHZ zSM|vo|Hs9L?mx?Oe$n>y6uq_?o&J2aU}t@k$m7eyJa$gIR9Yy{udFkHi|Kp+_&s;F z=FU{pqG_LLp?%-2?POOU0=k|Se?{xWIo4sb%o6m180xJTw48p!1b5~iFv^TPU z7uM9Vxh8o-?b+ThfoCO3PQ}qZUi9_u3zzrnM=#UU9`Wa`7yD4|o^8wjI*@ zXiTHm{e`BpcP%TK^7MqqpyPs?jE{{s|LN*^Du165UM71y?6|SovD!1@iRas?cS9Sx zC=L^$Hw=%t6evzfs&tHhl^`?WIIwlchX&uQKz~_3$#?6#Qm33<@@41tTJJdrwm)3r zv}qvg*r~NAa|bQOP1an0tLR#a;@HfGcXS!eH@=-&?W-+==Ph|S{{2V&J%fnWi0v;I zq1zHCj*n)ww~fCK)Kpp~L}t$&?}B*R^6}1{<^HFcwzu}a_%Y2^zIf|ORh}2aG1z0p z`z-h1^S%3GqD(CI9IZ3Z6W%-M zIGSfvS6YuujG@!~0B%j@i@F)bJxePlw%9%{n&a7b{qdy~DPGU1H>tgG_vcn0u|OBh z!%WuSi2dJaWS@u(FoI4sqDPyVCbL4#L8XDl-7 zlQ+q>Zx(hhzceOMm+5f5S}SeM@)!4&LOQoRAO8J(t=3nitEL*qox4)m0q$M}-N$6R zd(j1l_wwft?9l(w;90xI)6Z6kD^zKV;EjH@iwcjf-tM&VEH!;kk&EKy`A+nZ;McFj zUOJ4H9uD&5=Dtd%Ql1|^ytHNHd4=sv&xEF8hg)~DR~=4Tl~i8rP<>b}g=Jj1Ysfrk zs8CtDC1_Jw*!~GWwR86PK;yJlwq1G)!o&D|5e9s&RXc>b_j=v36cqO(mx! z`_<4a&y4yzE@t)j%6ih$b{$@y`t|Dc$|Bp*pIlzGmD;9BU7-Yb!^Tig8@p? z#C-R${_CSJ8b-xk$4U|cZ+Plgm-JgU#Q${Bu1+t{J36}hl6HE$U??_nWm@~2-LtGB z1yR-AKl`&JHvCNEeoCF&ctx_;v#JES{bRAEU$W|v>ZQ^{(=QS?T|0crO1STK=m=#h znBI$wLNjAmq~*TxigwC*%c{y7Pu#xp^R`=`#(K}#>}NzIT$eiFF0FX+-4;K&rVI54 zrk;IKzRu&VSKhIj6OOO14xeq^@AY7P{|su}bG5#dMuEf5c+B=`df23P@Cgdz9 zt5DwUTz)QHbK(c5mHIL*ZkbR=AxV|Gc_OPM*;d4Ju*rVxpr($)iW@fR#V+$B%NR1# z&4!|6^b8JjkyuQ+O0l*M{Z;% z9y+P{;CEXCCF(%zwwQDHd$Wh-zh*zJvv-boxw`a>;5@o9kXz_C8X~n@WV(#p7R6g< zL+?BpuX2zrNfB9fBJBw{hMR}R2cIod6rQwS>u>koBj$GH@rk_d6ji2+z3e?|7}B z_geIX=d5Ip&Fo*Q6DvM_EOc$8UuGA-c$nNCH6e3kX!kQ)^)H3Y$Jcw8yWD82H29R_ zvi7qCd#Ap-w&p-{&*{dBeO^KLo3?_ybTdR^Pj z`xYUt8dm#$gm-YIW52p|T}|{!ud=Jka!lRd_b4WEZTgX`)dkA~Y~0V4YhXtk>$g~j z1V8D$u}uHfaiiK_wAf?xE*sS$?(nbO6y8Y9+diKC%BGV3c7vIvbR(wTE{8t$+ve^-PlSKx@(_9b|qx0Ttr=+r^v`LhKd)Hofpx;gtX|It^Q zOF#Be`ivfDnAF?iS`!qy59>Dd3P!% zw$|A}u*<@Xt^adZ%9}@SS>c5bw_dOn-n*84sDfo3?Om|@_bbmMdw!PQGRqfxa%7|- zC}I0L7!iE<*+%oMQ3*U+GEu> z?<6Zqe6XOlKdRU_TAwFMaQI%Vo~L*CK0 z%XwW&&&3n`&f4p%Z;yCgydi&IQ_r5J-+dofpYi0lN$(fEFxN{rd3Mp%NZF{g&|_bg zw##k$p}APnpwZy|%(oL6&ME6lvRcDKYj(wsvD$9Td|$?LMVv)*;FVy9`}XqkV;#kZ?n8e5A*7YS_&tz>s>%~Lcja^N&C&0|VR z%zLf8sQVCqkIu(Mc3d zd^qNDZ~WP&I5}_I(5*TxHx0SA-RdhDLf(jE(yH$Z%YWrKE1flTy01}jG;qkISN9Q@;ZwzZUyA#ZD?*6otiMF)i zf%D%O0}B`YYH!V{;1RP%()a)Lo5DF)Ghf_3zi{Eg=&N5WuFF4_Uz;oCy06jejmyW+ zch;)x5!5H>x{h>ZhejU0l-+&l+stv}O(7Mpb|pzv3U4W?nxtNvGliCaSnb2J?)fIC zKh8NqjASvJtipB?#K*R-a*JLZkd@~NTf z#fuKf=U7(^>@VHBfBBDF6?>k@^Xs0RD&3fI_JY>s2=%fA;fLYdsczykUn)nQJgC>w zbAN;E7&l{&|L()P{kLo_FxbBD_0Qa~Puoi>KmN{CIC!<)$So#uv_Scp|LNH~R3o)r zUz>#Z3=%tZ-Abt1rXKob7s)(T-1r}d|hO4#rr06EBDBuk6o+Rqooez%E(aSFX z9vJdXYFETBEioUh89BCIU(ubR%##OVFCD5Lc8ZtUw81voV9vvcEEV(Oa7Fc&r=ra+ zV`9HKs3g8QRqZqV^ao#Q&-=$qtmhk3EzQ5qd)&3v<5KM1XHVK@)9%_`c)3%dZM{%_ zgrKGEPpV97*EBlR+mp}9o))htcWG$rgN@t1`SKn=y*YTwmnSe#9B*hFnpueE5A~(a z478fzdksC{CW+XrJ1X@ev4cXp{%qH^+`{>dPBpTN3t!kL=`A>^lejF`A*b)SN~75G z_ap5NGlrdam3AJXT(-U6bMWc|E^+?7kIc&|JD(#ncu^sAo zu4Lq}O%QVMj{4q!IGr(#m%TO_Z9fw(egCW%=l%WXg=KzCS6wU%IwOLu@y_7AcTN-C0@kj}QHb3cZ6|R=16DVjfuwZKA8Sd=)w` zUfGjNJls)F?Jd^&I>V=xuUTgQPtA!@2jAr;UmjG8YZP_WAXv#U4A7 zJm)=nRJ#AOQ+R5>le8hPD01b*4Y#47)u{#{tL1)8YmzXUSl_1~A5rOftM!1Vdwl8k zi90UiM)gy_89y10)X#Tav!k+T>+I_F<#TQuN>2ahlbKgflfq-o#D>BxYZlnYUEH~< z!M8DPb3olPIrBBHc|0HEx@)w~7HiXj6LptE>I+AI59`cr-M94Sfn-zP#L;C}eh+@n zTyml5#g(Vnnj<;QCMVpoZZxiAEcw9PX;xKNkIn6iGe{!peS8*n+7^5rt##KBT-Ere zW?N0equ%$KIWb486rWkf>9&_qth-fi)VbBX^CjkX#7JjSmwJBek1Px8`1QzL_96QX z?!3i0z5bIOTRF}`e7qqe{+(=Lb@jXD2c~+{n#bd}s`KA0?G5H@59?Rmox8p1ADPI# zO^0mYhY=-{wuMS_cPcK^pIhPFJ94Ibj#NiarqH+N=Zm)mYMWZy#bwRQ3*%ww`oHW2$yxXXN0W=|L2`yf(cs!INK4}S zfB6hD4WL%OQDLOq9mzTYx(@=A@Jx?CPc|TB_@Y6{c_X>5{%;xl)l)DlDB~7D1Wu9| zzE%b^mEqM|R;XJ$V7mOpG(+#jm?__-b`jrgU%s`QXhED?ehan&`)Td7ZnVQ^_BiGn zhu`$KV04DWiR}!>6os2Rl!g1V)H;tGG_XlGH0?~s>}@jUItnwepqm+1A)Oi4>(J4W z9?)GMs`&wkDjc+u)2x`Qg18Ht5GV?t1Yjz zk*CWWAObK{8W-^pMrDi9fDuM+NE`TB9Dviw1^oy~BNwz+qyS9=l37bb43gmRLa;EG zs>GsMB8FH10*IALA%Ohm7>fGKssO5rXtKDJlpKRalSOn1ZGuf<&=(>OFs|aFQUHkK zxC~I*a0nzTY$T-%P&18al_`cjZM zbqa9U|CLK#nJgDt0^dau2O3X-<-gEGX#an!gn>4O%8;fgl)^NXal>u}eNm68?Z3tjqFdY(+#6_o*sJaPRCk@HM zyA+fR>@ciNrt;Ao5u{F)0z^XH&H{4LIM%RuecB|xtOKMn@Y|4sifh5H^52m-sEJT< zyQv(G8xYbME`j7}3n(mxG;0bhT_)RwvrTa+G3ZyjKTDW-h)rd3m2n!mh}m3`ItQ0F zMqHdlF)~HsNW?@NrxLn|C1xQ*A=H6W*TE@TRA?etl~$`E#=>wqJ`HveXbrjXaI?vt zg9X??;M1w1z=AU(5!hJNA8LgTgthXd0brvd7IYtg*AiNw#MT3f0XX~59a=IFhsy+R z{eND315gBzV={oPrn&*#y%LlFbkG_Jz9C>Y)|j0>u>KqZmo@;RdxHiO55%o$lh&1$ zMk=zVYx3%G0`v&s5(kQhA{ zWX)iuHK6VxlPj&+a6=?ZPL9AZ6-?3^H`ioG(onKG_zla0GMO8vsIiee^eT?TaWU0c z2Qv)V4gjX>cDH$w2w>vg*(_Rus1ns|9;wGlcWb7X(Ofs3@oHO$*pqg>t!1#Kc2R$LhCe|_>l-yuDN#>laS znyJzhWn0oqtITnR99?w|$@94c=LO$xJ)`-7H1+t|1m&{Nt>3_=Bzf&pFvehh#KsOn7O zB?JfnxT3jG71=~8Vngc~$OilgbPSLp)Jt;xpq+rrAvuVN|GSG|0G~W#0MJC1PW!{4 z5Dd_oQI^yNy&VQQ_`#ZYX4sQq0a~E|$K*dU$ihY<|C1Z|=;Zl7N0VR4@CKL31O$=* zkD?(73`QCqmfZ6(`fD6GG;#9wC)eJS>YnjbK6Z%ajd@DtVUk=vkInby4d~|SXdCi% z*B5l?;zizi%46R8*l)i1@dXh(0Xx80I1>lExvvlBuC==qd_5ZaePq-KlwfK&*J;e;zdc?emEf#o4oB6TJT zn2drrE{9Vo9I7a^j}F}nwx=lJ%J8xVjSd*_EEv>KUKFm1q9GtMVWN2jMu66m{slfk zCvarQGol*8F%4-l**G6=5`?JWB4ngY2hYo-K)itoj#NOoYmK2g6^ybEc|+F+gE$5v z`1n#B7$j)B984fbad}BmG)+W~rB5-0d&6-JWCxbVaW>qS0WyJ7LCOX0TN{RUKWR3Y zP%sXM14tz5Lg}Q=2838m&>%St8_K(i?7puI91Jj;{` za})9+r%$i~j&fm|oHA)y1XHmXD2>#CmIZ=I6s!t;MW#deCukc4He3OBh3J6r5YirS z)t>^LN`q*Ce}kSUr-_459~JQlcvb+}Q}Dz9eK0uq6r^^Rne;e(3mMtL<}ljGs=!TI zxap+e2Zre47|=EtnnQ(Wr{b7C&IQnx0%|Xy0isMzqhJiwGq~*(y@rVx2Ner3KujGM#cAvI6;~ ziYf|Ac|rwDU7+Y4(y17?PDQD?RL>PfY5Q8DLmhgsij_||=M*=jX zC<6o?CJc;-W1WU?6@(k)rxP%q=yc+)38=2jTr2~iHH;BCrWk0>q!7v?NSse-h-1Vx z0;6XU)1W>X$Ojs(1g6KflE5(qb*d7Kwj|mE0uzyAXfPMRUqN{|%&q#?OjBH$vVayO zA}gZB!03hq#yd`EQ^Ofa%5lU@;vm709-C}GMg$N6Y)s0Nz?9ySttA3LGZmX`A*iu% zF#xi{hGuLvl*xPl9%0#EcK1_jrp2E zk&)pM(+vzjg(4`*M<1SBU=S7-{pU>&GKRo2NcqO*0wX_jb3-FPVEqMF<^iTA@ZHeQ z64U~G%mk*!7UqTme?wm_+D53*SIJ1<5*~id*E9(*3-Gh_^E2gx7J;drp{1UoxfW(6 z{zn1CE5Kh636Ix_py-JIQOWSv3k+ND18Bbv%O@% { + // If I don't reset memory, I get some kind of error. + wasi.args = ["tre", ...args]; + const memory_view = new Uint8Array(inst.exports.memory.buffer); + memory_view.set(memory_reset_view); + wasi.start(inst); + }, "tree"); + + postMessage({ ready: true }); + } +}; diff --git a/examples/wasi_multi_threads_rustc/worker.js b/examples/wasi_multi_threads_rustc/worker.js new file mode 100644 index 0000000..d6fe3ae --- /dev/null +++ b/examples/wasi_multi_threads_rustc/worker.js @@ -0,0 +1,115 @@ +const { promise, resolve } = Promise.withResolvers(); +import("../node_modules/@oligami/shared-object/dist/index.js").then(resolve); + +let tree; +let term; +let rustc; + +self.onmessage = async (e) => { + const { wasi_ref } = e.data; + + const { promise: depend_files_promise, resolve: depend_files_resolve } = + Promise.withResolvers(); + const { promise: tmp_dir_promise, resolve: tmp_dir_resolve } = + Promise.withResolvers(); + + const depend_files_manage_worker = new Worker("depend_files.js", { + type: "module", + }); + depend_files_manage_worker.onmessage = (e) => { + depend_files_resolve(e.data); + }; + + const tmp_dir_manage_worker = new Worker("tmp_dir.js", { + type: "module", + }); + tmp_dir_manage_worker.onmessage = (e) => { + tmp_dir_resolve(e.data); + }; + + const [depend_files, tmp_dir] = await Promise.all([ + depend_files_promise, + tmp_dir_promise, + ]); + const { wasi_ref: wasi_ref_depend_files } = depend_files; + const { wasi_ref: wasi_ref_tmp_dir } = tmp_dir; + + const wasi_refs = [wasi_ref_depend_files, wasi_ref_tmp_dir, wasi_ref]; + + const { promise: tree_promise, resolve: tree_resolve } = + Promise.withResolvers(); + const { promise: rustc_promise, resolve: rustc_resolve } = + Promise.withResolvers(); + + const tree_worker = new Worker("tree.js", { + type: "module", + }); + tree_worker.onmessage = (e) => { + console.log("tree onmessage"); + tree_resolve(e.data); + }; + + const rustc_worker = new Worker("rustc.js", { + type: "module", + }); + rustc_worker.onmessage = (e) => { + console.log("rustc onmessage"); + rustc_resolve(e.data); + }; + + tree_worker.postMessage({ + wasi_refs, + }); + rustc_worker.postMessage({ + wasi_refs, + }); + + console.log("Waiting for tree and rustc to finish..."); + + await Promise.all([tree_promise, rustc_promise]); + + console.log("Sending run message..."); + + await promise; + + tree = new SharedObject.SharedObjectRef("tree").proxy(); + + term = new SharedObject.SharedObjectRef("term").proxy(); + + rustc = new SharedObject.SharedObjectRef("rustc").proxy(); + + // tree -h + await term.writeln("$ tree -h"); + await tree("-h"); + + // tree / + await term.writeln("\n$ tree /"); + await tree("/"); + + // rustc -h + await term.writeln("\n$ rustc -h"); + await rustc("-h"); + + // rustc /hello.rs --sysroot /sysroot --target wasm32-wasip1-threads -Csave-temps --out-dir /tmp + await term.writeln( + "\n$ rustc /hello.rs --sysroot /sysroot --target wasm32-wasip1-threads -Csave-temps --out-dir /tmp", + ); + try { + await rustc( + "/hello.rs", + "--sysroot", + "/sysroot", + "--target", + "wasm32-wasip1-threads", + "-Csave-temps", + "--out-dir", + "/tmp", + ); + } catch (e) { + console.error(e); + } + + // tree / + await term.writeln("\n$ tree /"); + await tree("/"); +}; diff --git a/examples/wasi_workers/echo_and_rewrite.wasm b/examples/wasi_workers/echo_and_rewrite.wasm old mode 100755 new mode 100644 diff --git a/examples/wasi_workers_single/echo_and_rewrite.wasm b/examples/wasi_workers_single/echo_and_rewrite.wasm old mode 100755 new mode 100644 diff --git a/package-lock.json b/package-lock.json index 67a7fd4..7967411 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,9 @@ "name": "@bjorn3/browser_wasi_shim", "version": "0.3.0", "license": "MIT OR Apache-2.0", + "dependencies": { + "@bjorn3/browser_wasi_shim": "file:" + }, "devDependencies": { "@swc/cli": "^0.1.62", "@swc/core": "^1.3.37", @@ -16,13 +19,15 @@ "eslint": "^8.50.0", "playwright": "^1.40.1", "prettier": "^3.0.3", - "typescript": "^4.9.5" + "typescript": "^5.6.2" } }, + "node_modules/@bjorn3/browser_wasi_shim": { + "resolved": "", + "link": true + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", "dev": true, "license": "MIT", "dependencies": { @@ -36,9 +41,7 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", - "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", + "version": "4.11.1", "dev": true, "license": "MIT", "engines": { @@ -47,8 +50,6 @@ }, "node_modules/@eslint/eslintrc": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "license": "MIT", "dependencies": { @@ -69,21 +70,8 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/@eslint/eslintrc/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "license": "ISC", "dependencies": { @@ -93,10 +81,17 @@ "node": "*" } }, + "node_modules/@eslint/eslintrc/node_modules/minimatch/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "version": "8.57.1", "dev": true, "license": "MIT", "engines": { @@ -104,14 +99,11 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", - "deprecated": "Use @eslint/config-array instead", + "version": "0.13.0", "dev": true, "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", + "@humanwhocodes/object-schema": "^2.0.3", "debug": "^4.3.1", "minimatch": "^3.0.5" }, @@ -119,21 +111,8 @@ "node": ">=10.10.0" } }, - "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "license": "ISC", "dependencies": { @@ -143,10 +122,17 @@ "node": "*" } }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -159,16 +145,11 @@ }, "node_modules/@humanwhocodes/object-schema": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", "dev": true, "license": "BSD-3-Clause" }, "node_modules/@mole-inc/bin-wrapper": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@mole-inc/bin-wrapper/-/bin-wrapper-8.0.1.tgz", - "integrity": "sha512-sTGoeZnjI8N4KS+sW2AN95gDBErhAguvkw/tWdCjeM8bvxpz5lqrnd0vOJABA1A+Ic3zED7PYoLP/RANLgVotA==", "dev": true, "license": "MIT", "dependencies": { @@ -187,8 +168,6 @@ }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "license": "MIT", "dependencies": { @@ -201,8 +180,6 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, "license": "MIT", "engines": { @@ -211,8 +188,6 @@ }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "license": "MIT", "dependencies": { @@ -225,8 +200,6 @@ }, "node_modules/@sindresorhus/is": { "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", "dev": true, "license": "MIT", "engines": { @@ -238,8 +211,6 @@ }, "node_modules/@swc/cli": { "version": "0.1.65", - "resolved": "https://registry.npmjs.org/@swc/cli/-/cli-0.1.65.tgz", - "integrity": "sha512-4NcgsvJVHhA7trDnMmkGLLvWMHu2kSy+qHx6QwRhhJhdiYdNUrhdp+ERxen73sYtaeEOYeLJcWrQ60nzKi6rpg==", "dev": true, "license": "MIT", "dependencies": { @@ -270,9 +241,7 @@ } }, "node_modules/@swc/core": { - "version": "1.7.25", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.7.25.tgz", - "integrity": "sha512-EWTWdb0GD+Z9CByvW5j5b9d1cFr9P6hy7TkGgAwnhKxGwzGu8BHTG3ou28KY6P57yZXDVKB0exWmSNRIv6LYCg==", + "version": "1.7.26", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", @@ -288,16 +257,16 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-darwin-arm64": "1.7.25", - "@swc/core-darwin-x64": "1.7.25", - "@swc/core-linux-arm-gnueabihf": "1.7.25", - "@swc/core-linux-arm64-gnu": "1.7.25", - "@swc/core-linux-arm64-musl": "1.7.25", - "@swc/core-linux-x64-gnu": "1.7.25", - "@swc/core-linux-x64-musl": "1.7.25", - "@swc/core-win32-arm64-msvc": "1.7.25", - "@swc/core-win32-ia32-msvc": "1.7.25", - "@swc/core-win32-x64-msvc": "1.7.25" + "@swc/core-darwin-arm64": "1.7.26", + "@swc/core-darwin-x64": "1.7.26", + "@swc/core-linux-arm-gnueabihf": "1.7.26", + "@swc/core-linux-arm64-gnu": "1.7.26", + "@swc/core-linux-arm64-musl": "1.7.26", + "@swc/core-linux-x64-gnu": "1.7.26", + "@swc/core-linux-x64-musl": "1.7.26", + "@swc/core-win32-arm64-msvc": "1.7.26", + "@swc/core-win32-ia32-msvc": "1.7.26", + "@swc/core-win32-x64-msvc": "1.7.26" }, "peerDependencies": { "@swc/helpers": "*" @@ -308,163 +277,8 @@ } } }, - "node_modules/@swc/core-darwin-arm64": { - "version": "1.7.25", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.7.25.tgz", - "integrity": "sha512-cbLNV4vsqSbll7kehJ58hZ9lt+nLlUPF+fmSRVsb4Qasnr0IRDtpT+3Rc87bDNXfkc15Ii80xdp7sU2MVgHn7A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-darwin-x64": { - "version": "1.7.25", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.7.25.tgz", - "integrity": "sha512-kZswLBI8KWWV8VuGIJZd8GM7eWFY5srmlomiWw7j/OtRyRgr8qfX3EmxBAYYZqTEvWdooSc/y3I61lHn/a1tRg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.7.25", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.7.25.tgz", - "integrity": "sha512-DV/8BHwdtymoelC1KvefOoyXraIDK0rJIBqjPvtzW9YbkN1hepF7au1deiieJ6+A0smP+4fxtYhrnJ5EjPvylA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.7.25", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.7.25.tgz", - "integrity": "sha512-lIx8BeKzpulL2PbLyMUln5Hk164M/PHXquHt6y86sD7Spza6zbCme+/Zr17PRiElqrP8byKC09UZj0K6hONDqQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.7.25", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.7.25.tgz", - "integrity": "sha512-+/I7AzzY4066bvKLTyAZXLL0dPpWhRUh0ja4cZNZ+0Gpn8FmtWDwZKCriIWkDlD1gSuXm8+iOaaLGhEwIquOpQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.7.25", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.7.25.tgz", - "integrity": "sha512-BPtnKyiBVMZyN6ml7oHGX9wuSLHN06nT1x1TM9wcSKSx6y+BEKb8jSmzrKzM7K5LnfOiy4+ARCb4HrMkXIQjUg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-x64-musl": { - "version": "1.7.25", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.7.25.tgz", - "integrity": "sha512-ZlZztuvy2hvfoYg5gYHYuc2mssgzGq1kKanF9kPdICsTmze6t7AvkSfmlTN7/YGuO//yDDJR1GR0EuXwOAJqPw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.7.25", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.7.25.tgz", - "integrity": "sha512-k3QsHJ+53BVhRUeC7NJOMxdMGexBIhFmL8Ex39vqWVvDZgnOepMFu9/G1pm04xBHSqcb0lioDj5WirAoy4VusQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.7.25", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.7.25.tgz", - "integrity": "sha512-3PW8LDgS7eIdjeGLNYhO1XLXyZJZ+aLjf79am8+HqfzVkmz+uIK39FcFxeF6A/LUsuQBMa3Geg++rS38kviMEA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" - } - }, "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.7.25", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.7.25.tgz", - "integrity": "sha512-iYpJNfIzPwahwPgddb9PHYichdFoS/2NR4Gaemv9s6nzTguS4vx/YT1oFGwuGMP0RyOdmAN2rEfPh7sJktqWfA==", + "version": "1.7.26", "cpu": [ "x64" ], @@ -480,15 +294,11 @@ }, "node_modules/@swc/counter": { "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", - "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", "dev": true, "license": "Apache-2.0" }, "node_modules/@swc/types": { "version": "0.1.12", - "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.12.tgz", - "integrity": "sha512-wBJA+SdtkbFhHjTMYH+dEH1y4VpfGdAc2Kw/LK09i9bXd/K6j6PkDcFCEzb6iVfZMkPRrl/q0e3toqTAJdkIVA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -497,8 +307,6 @@ }, "node_modules/@szmarczak/http-timer": { "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", "dev": true, "license": "MIT", "dependencies": { @@ -510,15 +318,11 @@ }, "node_modules/@tokenizer/token": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", - "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", "dev": true, "license": "MIT" }, "node_modules/@types/cacheable-request": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", - "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", "dev": true, "license": "MIT", "dependencies": { @@ -530,22 +334,16 @@ }, "node_modules/@types/http-cache-semantics": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", - "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", "dev": true, "license": "MIT" }, "node_modules/@types/json-schema": { "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true, "license": "MIT" }, "node_modules/@types/keyv": { "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", - "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", "dev": true, "license": "MIT", "dependencies": { @@ -553,9 +351,7 @@ } }, "node_modules/@types/node": { - "version": "22.5.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.4.tgz", - "integrity": "sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==", + "version": "22.5.5", "dev": true, "license": "MIT", "dependencies": { @@ -564,8 +360,6 @@ }, "node_modules/@types/responselike": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", - "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", "dev": true, "license": "MIT", "dependencies": { @@ -574,15 +368,11 @@ }, "node_modules/@types/semver": { "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", "dev": true, "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", - "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", "dev": true, "license": "MIT", "dependencies": { @@ -617,8 +407,6 @@ }, "node_modules/@typescript-eslint/parser": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", - "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -646,8 +434,6 @@ }, "node_modules/@typescript-eslint/scope-manager": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", - "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", "dev": true, "license": "MIT", "dependencies": { @@ -664,8 +450,6 @@ }, "node_modules/@typescript-eslint/type-utils": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", - "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", "dev": true, "license": "MIT", "dependencies": { @@ -692,8 +476,6 @@ }, "node_modules/@typescript-eslint/types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", - "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", "dev": true, "license": "MIT", "engines": { @@ -706,8 +488,6 @@ }, "node_modules/@typescript-eslint/typescript-estree": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", - "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -735,8 +515,6 @@ }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "license": "ISC", "dependencies": { @@ -751,8 +529,6 @@ }, "node_modules/@typescript-eslint/utils": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", - "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", "dev": true, "license": "MIT", "dependencies": { @@ -777,8 +553,6 @@ }, "node_modules/@typescript-eslint/visitor-keys": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", - "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", "dev": true, "license": "MIT", "dependencies": { @@ -795,15 +569,11 @@ }, "node_modules/@ungap/structured-clone": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", "dev": true, "license": "ISC" }, "node_modules/acorn": { "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", "dev": true, "license": "MIT", "bin": { @@ -815,8 +585,6 @@ }, "node_modules/acorn-jsx": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -825,8 +593,6 @@ }, "node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "license": "MIT", "dependencies": { @@ -842,8 +608,6 @@ }, "node_modules/ansi-regex": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "license": "MIT", "engines": { @@ -852,8 +616,6 @@ }, "node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -868,8 +630,6 @@ }, "node_modules/arch": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", - "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", "dev": true, "funding": [ { @@ -889,15 +649,11 @@ }, "node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, "license": "Python-2.0" }, "node_modules/array-union": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, "license": "MIT", "engines": { @@ -906,15 +662,11 @@ }, "node_modules/balanced-match": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true, "license": "MIT" }, "node_modules/bin-check": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-4.1.0.tgz", - "integrity": "sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==", "dev": true, "license": "MIT", "dependencies": { @@ -927,8 +679,6 @@ }, "node_modules/bin-version": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-6.0.0.tgz", - "integrity": "sha512-nk5wEsP4RiKjG+vF+uG8lFsEn4d7Y6FVDamzzftSunXOoOcOOkzcWdKVlGgFFwlUQCj63SgnUkLLGF8v7lufhw==", "dev": true, "license": "MIT", "dependencies": { @@ -944,8 +694,6 @@ }, "node_modules/bin-version-check": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-5.1.0.tgz", - "integrity": "sha512-bYsvMqJ8yNGILLz1KP9zKLzQ6YpljV3ln1gqhuLkUtyfGi3qXKGuK2p+U4NAvjVFzDFiBBtOpCOSFNuYYEGZ5g==", "dev": true, "license": "MIT", "dependencies": { @@ -962,8 +710,6 @@ }, "node_modules/bin-version/node_modules/execa": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "license": "MIT", "dependencies": { @@ -984,10 +730,8 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/bin-version/node_modules/get-stream": { + "node_modules/bin-version/node_modules/execa/node_modules/get-stream": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, "license": "MIT", "engines": { @@ -997,10 +741,8 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/bin-version/node_modules/is-stream": { + "node_modules/bin-version/node_modules/execa/node_modules/is-stream": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, "license": "MIT", "engines": { @@ -1010,10 +752,8 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/bin-version/node_modules/npm-run-path": { + "node_modules/bin-version/node_modules/execa/node_modules/npm-run-path": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "license": "MIT", "dependencies": { @@ -1025,8 +765,6 @@ }, "node_modules/brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "license": "MIT", "dependencies": { @@ -1035,8 +773,6 @@ }, "node_modules/braces": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "license": "MIT", "dependencies": { @@ -1048,8 +784,6 @@ }, "node_modules/cacheable-lookup": { "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", "dev": true, "license": "MIT", "engines": { @@ -1058,8 +792,6 @@ }, "node_modules/cacheable-request": { "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", - "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", "dev": true, "license": "MIT", "dependencies": { @@ -1077,8 +809,6 @@ }, "node_modules/cacheable-request/node_modules/get-stream": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, "license": "MIT", "dependencies": { @@ -1093,8 +823,6 @@ }, "node_modules/callsites": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, "license": "MIT", "engines": { @@ -1103,8 +831,6 @@ }, "node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -1120,8 +846,6 @@ }, "node_modules/clone-response": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", "dev": true, "license": "MIT", "dependencies": { @@ -1131,10 +855,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/clone-response/node_modules/mimic-response": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1146,15 +876,11 @@ }, "node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT" }, "node_modules/commander": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true, "license": "MIT", "engines": { @@ -1163,15 +889,11 @@ }, "node_modules/concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true, "license": "MIT" }, "node_modules/content-disposition": { "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1183,8 +905,6 @@ }, "node_modules/cross-spawn": { "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "license": "MIT", "dependencies": { @@ -1198,8 +918,6 @@ }, "node_modules/debug": { "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1216,8 +934,6 @@ }, "node_modules/decompress-response": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1230,30 +946,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/deep-is": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true, "license": "MIT" }, "node_modules/defer-to-connect": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", "dev": true, "license": "MIT", "engines": { @@ -1262,8 +961,6 @@ }, "node_modules/dir-glob": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "license": "MIT", "dependencies": { @@ -1275,8 +972,6 @@ }, "node_modules/doctrine": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1288,8 +983,6 @@ }, "node_modules/end-of-stream": { "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, "license": "MIT", "dependencies": { @@ -1298,8 +991,6 @@ }, "node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "license": "MIT", "engines": { @@ -1310,17 +1001,15 @@ } }, "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "version": "8.57.1", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", @@ -1367,8 +1056,6 @@ }, "node_modules/eslint-scope": { "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -1384,8 +1071,6 @@ }, "node_modules/eslint-visitor-keys": { "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "license": "Apache-2.0", "engines": { @@ -1395,21 +1080,8 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/eslint/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "license": "ISC", "dependencies": { @@ -1419,10 +1091,17 @@ "node": "*" } }, + "node_modules/eslint/node_modules/minimatch/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/espree": { "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -1439,8 +1118,6 @@ }, "node_modules/esquery": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -1452,8 +1129,6 @@ }, "node_modules/esrecurse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -1465,8 +1140,6 @@ }, "node_modules/estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -1475,8 +1148,6 @@ }, "node_modules/esutils": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -1485,8 +1156,6 @@ }, "node_modules/execa": { "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==", "dev": true, "license": "MIT", "dependencies": { @@ -1504,8 +1173,6 @@ }, "node_modules/execa/node_modules/cross-spawn": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", "dev": true, "license": "MIT", "dependencies": { @@ -1514,10 +1181,8 @@ "which": "^1.2.9" } }, - "node_modules/execa/node_modules/shebang-command": { + "node_modules/execa/node_modules/cross-spawn/node_modules/shebang-command": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "dev": true, "license": "MIT", "dependencies": { @@ -1527,20 +1192,16 @@ "node": ">=0.10.0" } }, - "node_modules/execa/node_modules/shebang-regex": { + "node_modules/execa/node_modules/cross-spawn/node_modules/shebang-command/node_modules/shebang-regex": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/execa/node_modules/which": { + "node_modules/execa/node_modules/cross-spawn/node_modules/which": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "license": "ISC", "dependencies": { @@ -1552,8 +1213,6 @@ }, "node_modules/executable": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", - "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", "dev": true, "license": "MIT", "dependencies": { @@ -1565,8 +1224,6 @@ }, "node_modules/ext-list": { "version": "2.2.2", - "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", - "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", "dev": true, "license": "MIT", "dependencies": { @@ -1578,8 +1235,6 @@ }, "node_modules/ext-name": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", - "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1592,15 +1247,11 @@ }, "node_modules/fast-deep-equal": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true, "license": "MIT" }, "node_modules/fast-glob": { "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, "license": "MIT", "dependencies": { @@ -1616,8 +1267,6 @@ }, "node_modules/fast-glob/node_modules/glob-parent": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "license": "ISC", "dependencies": { @@ -1629,22 +1278,16 @@ }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true, "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true, "license": "MIT" }, "node_modules/fastq": { "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, "license": "ISC", "dependencies": { @@ -1653,8 +1296,6 @@ }, "node_modules/file-entry-cache": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "license": "MIT", "dependencies": { @@ -1666,8 +1307,6 @@ }, "node_modules/file-type": { "version": "17.1.6", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-17.1.6.tgz", - "integrity": "sha512-hlDw5Ev+9e883s0pwUsuuYNu4tD7GgpUnOvykjv1Gya0ZIjuKumthDRua90VUn6/nlRKAjcxLUnHNTIUWwWIiw==", "dev": true, "license": "MIT", "dependencies": { @@ -1684,8 +1323,6 @@ }, "node_modules/filename-reserved-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-3.0.0.tgz", - "integrity": "sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==", "dev": true, "license": "MIT", "engines": { @@ -1697,8 +1334,6 @@ }, "node_modules/filenamify": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-5.1.1.tgz", - "integrity": "sha512-M45CbrJLGACfrPOkrTp3j2EcO9OBkKUYME0eiqOCa7i2poaklU0jhlIaMlr8ijLorT0uLAzrn3qXOp5684CkfA==", "dev": true, "license": "MIT", "dependencies": { @@ -1715,8 +1350,6 @@ }, "node_modules/fill-range": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "license": "MIT", "dependencies": { @@ -1728,8 +1361,6 @@ }, "node_modules/find-up": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "license": "MIT", "dependencies": { @@ -1745,8 +1376,6 @@ }, "node_modules/find-versions": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-5.1.0.tgz", - "integrity": "sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==", "dev": true, "license": "MIT", "dependencies": { @@ -1761,8 +1390,6 @@ }, "node_modules/flat-cache": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, "license": "MIT", "dependencies": { @@ -1776,37 +1403,16 @@ }, "node_modules/flatted": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true, "license": "ISC" }, "node_modules/fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true, "license": "ISC" }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, "node_modules/get-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", "dev": true, "license": "MIT", "engines": { @@ -1815,9 +1421,6 @@ }, "node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "license": "ISC", "dependencies": { @@ -1837,8 +1440,6 @@ }, "node_modules/glob-parent": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "license": "ISC", "dependencies": { @@ -1848,21 +1449,8 @@ "node": ">=10.13.0" } }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/glob/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "license": "ISC", "dependencies": { @@ -1872,10 +1460,17 @@ "node": "*" } }, + "node_modules/glob/node_modules/minimatch/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/globals": { "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1890,8 +1485,6 @@ }, "node_modules/globby": { "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "license": "MIT", "dependencies": { @@ -1911,8 +1504,6 @@ }, "node_modules/got": { "version": "11.8.6", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", - "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", "dev": true, "license": "MIT", "dependencies": { @@ -1937,15 +1528,11 @@ }, "node_modules/graphemer": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true, "license": "MIT" }, "node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "license": "MIT", "engines": { @@ -1954,15 +1541,11 @@ }, "node_modules/http-cache-semantics": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", "dev": true, "license": "BSD-2-Clause" }, "node_modules/http2-wrapper": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", "dev": true, "license": "MIT", "dependencies": { @@ -1975,8 +1558,6 @@ }, "node_modules/human-signals": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -1985,8 +1566,6 @@ }, "node_modules/ieee754": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true, "funding": [ { @@ -2006,8 +1585,6 @@ }, "node_modules/ignore": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "license": "MIT", "engines": { @@ -2016,8 +1593,6 @@ }, "node_modules/import-fresh": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "license": "MIT", "dependencies": { @@ -2033,8 +1608,6 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, "license": "MIT", "engines": { @@ -2043,9 +1616,6 @@ }, "node_modules/inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, "license": "ISC", "dependencies": { @@ -2055,15 +1625,11 @@ }, "node_modules/inherits": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true, "license": "ISC" }, "node_modules/is-extglob": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, "license": "MIT", "engines": { @@ -2072,8 +1638,6 @@ }, "node_modules/is-glob": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "license": "MIT", "dependencies": { @@ -2085,8 +1649,6 @@ }, "node_modules/is-number": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, "license": "MIT", "engines": { @@ -2095,8 +1657,6 @@ }, "node_modules/is-path-inside": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, "license": "MIT", "engines": { @@ -2105,8 +1665,6 @@ }, "node_modules/is-plain-obj": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true, "license": "MIT", "engines": { @@ -2115,8 +1673,6 @@ }, "node_modules/is-stream": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", "dev": true, "license": "MIT", "engines": { @@ -2125,15 +1681,11 @@ }, "node_modules/isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true, "license": "ISC" }, "node_modules/js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "license": "MIT", "dependencies": { @@ -2145,29 +1697,21 @@ }, "node_modules/json-buffer": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true, "license": "MIT" }, "node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true, "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true, "license": "MIT" }, "node_modules/keyv": { "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, "license": "MIT", "dependencies": { @@ -2176,8 +1720,6 @@ }, "node_modules/levn": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2190,8 +1732,6 @@ }, "node_modules/locate-path": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "license": "MIT", "dependencies": { @@ -2206,15 +1746,11 @@ }, "node_modules/lodash.merge": { "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true, "license": "MIT" }, "node_modules/lowercase-keys": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "dev": true, "license": "MIT", "engines": { @@ -2223,8 +1759,6 @@ }, "node_modules/lru-cache": { "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, "license": "ISC", "dependencies": { @@ -2234,15 +1768,11 @@ }, "node_modules/merge-stream": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true, "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, "license": "MIT", "engines": { @@ -2251,8 +1781,6 @@ }, "node_modules/micromatch": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "license": "MIT", "dependencies": { @@ -2265,8 +1793,6 @@ }, "node_modules/mime-db": { "version": "1.53.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.53.0.tgz", - "integrity": "sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==", "dev": true, "license": "MIT", "engines": { @@ -2275,8 +1801,6 @@ }, "node_modules/mimic-fn": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, "license": "MIT", "engines": { @@ -2284,19 +1808,18 @@ } }, "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "version": "3.1.0", "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/minimatch": { "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { @@ -2311,22 +1834,16 @@ }, "node_modules/ms": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, "license": "MIT" }, "node_modules/natural-compare": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true, "license": "MIT" }, "node_modules/normalize-url": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", "dev": true, "license": "MIT", "engines": { @@ -2338,8 +1855,6 @@ }, "node_modules/npm-run-path": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", "dev": true, "license": "MIT", "dependencies": { @@ -2351,8 +1866,6 @@ }, "node_modules/npm-run-path/node_modules/path-key": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", "dev": true, "license": "MIT", "engines": { @@ -2361,8 +1874,6 @@ }, "node_modules/once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, "license": "ISC", "dependencies": { @@ -2371,8 +1882,6 @@ }, "node_modules/onetime": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "license": "MIT", "dependencies": { @@ -2387,8 +1896,6 @@ }, "node_modules/optionator": { "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "license": "MIT", "dependencies": { @@ -2405,8 +1912,6 @@ }, "node_modules/os-filter-obj": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-2.0.0.tgz", - "integrity": "sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==", "dev": true, "license": "MIT", "dependencies": { @@ -2418,8 +1923,6 @@ }, "node_modules/p-cancelable": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", "dev": true, "license": "MIT", "engines": { @@ -2428,8 +1931,6 @@ }, "node_modules/p-finally": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", "dev": true, "license": "MIT", "engines": { @@ -2438,8 +1939,6 @@ }, "node_modules/p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2454,8 +1953,6 @@ }, "node_modules/p-locate": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "license": "MIT", "dependencies": { @@ -2470,8 +1967,6 @@ }, "node_modules/parent-module": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "license": "MIT", "dependencies": { @@ -2483,8 +1978,6 @@ }, "node_modules/path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", "engines": { @@ -2493,8 +1986,6 @@ }, "node_modules/path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, "license": "MIT", "engines": { @@ -2503,8 +1994,6 @@ }, "node_modules/path-key": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, "license": "MIT", "engines": { @@ -2513,8 +2002,6 @@ }, "node_modules/path-type": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, "license": "MIT", "engines": { @@ -2523,8 +2010,6 @@ }, "node_modules/peek-readable": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.2.0.tgz", - "integrity": "sha512-U94a+eXHzct7vAd19GH3UQ2dH4Satbng0MyYTMaQatL0pvYYL5CTPR25HBhKtecl+4bfu1/i3vC6k0hydO5Vcw==", "dev": true, "license": "MIT", "engines": { @@ -2537,8 +2022,6 @@ }, "node_modules/picomatch": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "license": "MIT", "engines": { @@ -2550,8 +2033,6 @@ }, "node_modules/pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, "license": "MIT", "engines": { @@ -2559,13 +2040,11 @@ } }, "node_modules/playwright": { - "version": "1.47.0", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.47.0.tgz", - "integrity": "sha512-jOWiRq2pdNAX/mwLiwFYnPHpEZ4rM+fRSQpRHwEwZlP2PUANvL3+aJOF/bvISMhFD30rqMxUB4RJx9aQbfh4Ww==", + "version": "1.47.2", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.47.0" + "playwright-core": "1.47.2" }, "bin": { "playwright": "cli.js" @@ -2578,9 +2057,7 @@ } }, "node_modules/playwright-core": { - "version": "1.47.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.47.0.tgz", - "integrity": "sha512-1DyHT8OqkcfCkYUD9zzUTfg7EfTd+6a8MkD/NWOvjo0u/SCNd5YmY/lJwFvUZOxJbWNds+ei7ic2+R/cRz/PDg==", + "version": "1.47.2", "dev": true, "license": "Apache-2.0", "bin": { @@ -2592,8 +2069,6 @@ }, "node_modules/prelude-ls": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, "license": "MIT", "engines": { @@ -2602,8 +2077,6 @@ }, "node_modules/prettier": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", - "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", "dev": true, "license": "MIT", "bin": { @@ -2618,15 +2091,11 @@ }, "node_modules/pseudomap": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", "dev": true, "license": "ISC" }, "node_modules/pump": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.1.tgz", - "integrity": "sha512-2ynnAmUu45oUSq51AQbeugLkMSKaz8FqVpZ6ykTqzOVkzXe8u/ezkGsYrFJqKZx+D9cVxoDrSbR7CeAwxFa5cQ==", + "version": "3.0.2", "dev": true, "license": "MIT", "dependencies": { @@ -2636,8 +2105,6 @@ }, "node_modules/punycode": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, "license": "MIT", "engines": { @@ -2646,8 +2113,6 @@ }, "node_modules/queue-microtask": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "funding": [ { @@ -2667,8 +2132,6 @@ }, "node_modules/quick-lru": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "dev": true, "license": "MIT", "engines": { @@ -2680,8 +2143,6 @@ }, "node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "license": "MIT", "dependencies": { @@ -2695,8 +2156,6 @@ }, "node_modules/readable-web-to-node-stream": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", - "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", "dev": true, "license": "MIT", "dependencies": { @@ -2712,15 +2171,11 @@ }, "node_modules/resolve-alpn": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", "dev": true, "license": "MIT" }, "node_modules/resolve-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, "license": "MIT", "engines": { @@ -2729,8 +2184,6 @@ }, "node_modules/responselike": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", - "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", "dev": true, "license": "MIT", "dependencies": { @@ -2742,8 +2195,6 @@ }, "node_modules/reusify": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, "license": "MIT", "engines": { @@ -2753,9 +2204,6 @@ }, "node_modules/rimraf": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, "license": "ISC", "dependencies": { @@ -2770,8 +2218,6 @@ }, "node_modules/run-parallel": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "funding": [ { @@ -2794,8 +2240,6 @@ }, "node_modules/safe-buffer": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, "funding": [ { @@ -2815,8 +2259,6 @@ }, "node_modules/semver": { "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, "license": "ISC", "bin": { @@ -2828,8 +2270,6 @@ }, "node_modules/semver-regex": { "version": "4.0.5", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-4.0.5.tgz", - "integrity": "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==", "dev": true, "license": "MIT", "engines": { @@ -2841,8 +2281,6 @@ }, "node_modules/semver-truncate": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-3.0.0.tgz", - "integrity": "sha512-LJWA9kSvMolR51oDE6PN3kALBNaUdkxzAGcexw8gjMA8xr5zUqK0JiR3CgARSqanYF3Z1YHvsErb1KDgh+v7Rg==", "dev": true, "license": "MIT", "dependencies": { @@ -2857,8 +2295,6 @@ }, "node_modules/shebang-command": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "license": "MIT", "dependencies": { @@ -2870,8 +2306,6 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, "license": "MIT", "engines": { @@ -2880,15 +2314,11 @@ }, "node_modules/signal-exit": { "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true, "license": "ISC" }, "node_modules/slash": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "license": "MIT", "engines": { @@ -2897,8 +2327,6 @@ }, "node_modules/sort-keys": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==", "dev": true, "license": "MIT", "dependencies": { @@ -2910,8 +2338,6 @@ }, "node_modules/sort-keys-length": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", - "integrity": "sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==", "dev": true, "license": "MIT", "dependencies": { @@ -2923,8 +2349,6 @@ }, "node_modules/source-map": { "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -2933,8 +2357,6 @@ }, "node_modules/string_decoder": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "license": "MIT", "dependencies": { @@ -2943,8 +2365,6 @@ }, "node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", "dependencies": { @@ -2956,8 +2376,6 @@ }, "node_modules/strip-eof": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", "dev": true, "license": "MIT", "engines": { @@ -2966,8 +2384,6 @@ }, "node_modules/strip-final-newline": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, "license": "MIT", "engines": { @@ -2976,8 +2392,6 @@ }, "node_modules/strip-json-comments": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, "license": "MIT", "engines": { @@ -2989,8 +2403,6 @@ }, "node_modules/strip-outer": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-2.0.0.tgz", - "integrity": "sha512-A21Xsm1XzUkK0qK1ZrytDUvqsQWict2Cykhvi0fBQntGG5JSprESasEyV1EZ/4CiR5WB5KjzLTrP/bO37B0wPg==", "dev": true, "license": "MIT", "engines": { @@ -3002,8 +2414,6 @@ }, "node_modules/strtok3": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-7.1.1.tgz", - "integrity": "sha512-mKX8HA/cdBqMKUr0MMZAFssCkIGoZeSCMXgnt79yKxNFguMLVFgRe6wB+fsL0NmoHDbeyZXczy7vEPSoo3rkzg==", "dev": true, "license": "MIT", "dependencies": { @@ -3020,8 +2430,6 @@ }, "node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { @@ -3033,15 +2441,11 @@ }, "node_modules/text-table": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true, "license": "MIT" }, "node_modules/to-regex-range": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3053,8 +2457,6 @@ }, "node_modules/token-types": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/token-types/-/token-types-5.0.1.tgz", - "integrity": "sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==", "dev": true, "license": "MIT", "dependencies": { @@ -3071,8 +2473,6 @@ }, "node_modules/trim-repeated": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-2.0.0.tgz", - "integrity": "sha512-QUHBFTJGdOwmp0tbOG505xAgOp/YliZP/6UgafFXYZ26WT1bvQmSMJUvkeVSASuJJHbqsFbynTvkd5W8RBTipg==", "dev": true, "license": "MIT", "dependencies": { @@ -3084,8 +2484,6 @@ }, "node_modules/trim-repeated/node_modules/escape-string-regexp": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, "license": "MIT", "engines": { @@ -3097,8 +2495,6 @@ }, "node_modules/ts-api-utils": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", - "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", "dev": true, "license": "MIT", "engines": { @@ -3110,8 +2506,6 @@ }, "node_modules/type-check": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "license": "MIT", "dependencies": { @@ -3123,8 +2517,6 @@ }, "node_modules/type-fest": { "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -3135,9 +2527,7 @@ } }, "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "version": "5.6.2", "dev": true, "license": "Apache-2.0", "bin": { @@ -3145,20 +2535,16 @@ "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" } }, "node_modules/undici-types": { "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", "dev": true, "license": "MIT" }, "node_modules/uri-js": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -3167,15 +2553,11 @@ }, "node_modules/util-deprecate": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true, "license": "MIT" }, "node_modules/which": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "license": "ISC", "dependencies": { @@ -3190,8 +2572,6 @@ }, "node_modules/word-wrap": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, "license": "MIT", "engines": { @@ -3200,22 +2580,16 @@ }, "node_modules/wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true, "license": "ISC" }, "node_modules/yallist": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", "dev": true, "license": "ISC" }, "node_modules/yocto-queue": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, "license": "MIT", "engines": { diff --git a/package.json b/package.json index f9610a1..5684b24 100644 --- a/package.json +++ b/package.json @@ -5,12 +5,13 @@ "description": "A pure javascript shim for WASI", "type": "module", "scripts": { - "build": "swc src -d dist -s true && tsc --emitDeclarationOnly", + "build": "npm run worker && swc src -d dist -s true && tsc --emitDeclarationOnly", "prepare": "swc src -d dist && tsc --emitDeclarationOnly", "test:node": "./test/run-testsuite.sh node", "test:browser": "playwright-core install && ./test/run-testsuite.sh browser", "test": "npm run test:node && npm run test:browser", - "check": "tsc --noEmit && prettier src -c && eslint src/" + "check": "tsc --noEmit && prettier src -c && eslint src/", + "worker": "spack --config ./src/wasi_farm/shared_array_buffer/worker_background/spack.config.cjs && node src/wasi_farm/shared_array_buffer/worker_background/minify.js" }, "repository": { "type": "git", @@ -39,6 +40,9 @@ "eslint": "^8.50.0", "playwright": "^1.40.1", "prettier": "^3.0.3", - "typescript": "^4.9.5" + "typescript": "^5.6.2" + }, + "dependencies": { + "@bjorn3/browser_wasi_shim": "file:" } } diff --git a/src/fs_mem.ts b/src/fs_mem.ts index 261743c..dcfaf7d 100644 --- a/src/fs_mem.ts +++ b/src/fs_mem.ts @@ -128,7 +128,7 @@ export class OpenDirectory extends Fd { super(); this.dir = dir; } - + OpenDirectory; // eslint-disable-next-line @typescript-eslint/no-unused-vars fd_seek(offset: bigint, whence: number): { ret: number; offset: bigint } { return { ret: wasi.ERRNO_BADF, offset: 0n }; @@ -151,10 +151,10 @@ export class OpenDirectory extends Fd { ret: number; dirent: wasi.Dirent | null; } { - // if (debug.enabled) { + if (debug.enabled) { debug.log("readdir_single", cookie); debug.log(cookie, this.dir.contents.keys()); - // } + } if (cookie == 0n) { return { diff --git a/src/index.ts b/src/index.ts index d50418e..a3ed42a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -2,6 +2,7 @@ import WASI, { WASIProcExit } from "./wasi.js"; export { WASI, WASIProcExit }; import { WASIFarm, WASIFarmRef, WASIFarmAnimal } from "./wasi_farm/index.js"; export { WASIFarm, WASIFarmRef, WASIFarmAnimal }; +export { thread_spawn_on_worker } from "./wasi_farm/index.js"; export { Fd, Inode } from "./fd.js"; export { File, diff --git a/src/serialize_error.ts b/src/serialize_error.ts new file mode 100644 index 0000000..0672412 --- /dev/null +++ b/src/serialize_error.ts @@ -0,0 +1,23 @@ +export type SerializedError = { + message: string; + name: string; + stack: string; + cause?: unknown; +}; + +export const serialize = (error: Error): SerializedError => { + return { + message: error.message, + name: error.name, + stack: error.stack, + cause: error.cause, + }; +}; + +export const deserialize = (serializedError: SerializedError): Error => { + const error = new Error(serializedError.message); + error.name = serializedError.name; + error.stack = serializedError.stack.replace(/.wasm:/g, ".wasm\n"); + error.cause = serializedError.cause; + return error; +}; diff --git a/src/wasi_farm/animals.ts b/src/wasi_farm/animals.ts index c0c06cb..96e5d40 100644 --- a/src/wasi_farm/animals.ts +++ b/src/wasi_farm/animals.ts @@ -1,24 +1,43 @@ import { debug } from "../debug.js"; -import { Options, WASIProcExit } from "../wasi.js"; -import { WASIFarmRef, WASIFarmRefObject } from "./ref.js"; +import { type Options, WASIProcExit } from "../wasi.js"; import * as wasi from "../wasi_defs.js"; -import { WASIFarmRefUseArrayBuffer, WASIFarmRefUseArrayBufferObject } from "./shared_array_buffer/ref.js"; -import { FdCloseSender } from "./sender.js"; +import type { WASIFarmRef } from "./ref.js"; +import type { WASIFarmRefObject } from "./ref.js"; +import type { FdCloseSender } from "./sender.js"; +import { WASIFarmRefUseArrayBuffer } from "./shared_array_buffer/index.js"; +import type { WASIFarmRefUseArrayBufferObject } from "./shared_array_buffer/index.js"; +import { ThreadSpawner } from "./shared_array_buffer/index.js"; export class WASIFarmAnimal { - private args: Array; - private env: Array; + args: Array; + env: Array; private wasi_farm_refs: WASIFarmRef[]; private id_in_wasi_farm_ref: Array; - private inst: { exports: { memory: WebAssembly.Memory } }; + inst: { exports: { memory: WebAssembly.Memory } }; // eslint-disable-next-line @typescript-eslint/no-explicit-any wasiImport: { [key: string]: (...args: Array) => unknown }; + wasiThreadImport: { + "thread-spawn": (start_arg: number) => number; + }; + private can_array_buffer; + private can_thread_spawn: boolean; + + private thread_spawner: ThreadSpawner; + + async wait_worker_background_worker(): Promise { + await this.thread_spawner.wait_worker_background_worker(); + } + + check_worker_background_worker(): void { + this.thread_spawner.check_worker_background_worker(); + } + // Each process has a specific fd that it can access. // If it does not exist in the map, it cannot be accessed. // child process can access parent process's fd. @@ -26,7 +45,9 @@ export class WASIFarmAnimal { // [fd, wasi_ref_n] protected fd_map: Array<[number, number]>; - protected get_fd_and_wasi_ref(fd: number): [number | undefined, WASIFarmRef | undefined] { + protected get_fd_and_wasi_ref( + fd: number, + ): [number | undefined, WASIFarmRef | undefined] { const mapped_fd_and_wasi_ref_n = this.fd_map[fd]; if (!mapped_fd_and_wasi_ref_n) { // console.log("fd", fd, "is not found"); @@ -37,7 +58,9 @@ export class WASIFarmAnimal { return [mapped_fd, this.wasi_farm_refs[wasi_ref_n]]; } - protected get_fd_and_wasi_ref_n(fd: number): [number | undefined, number | undefined] { + protected get_fd_and_wasi_ref_n( + fd: number, + ): [number | undefined, number | undefined] { const mapped_fd_and_wasi_ref_n = this.fd_map[fd]; if (!mapped_fd_and_wasi_ref_n) { // console.log("fd", fd, "is not found"); @@ -54,15 +77,107 @@ export class WASIFarmAnimal { exports: { memory: WebAssembly.Memory; _start: () => unknown }; }) { this.inst = instance; + try { instance.exports._start(); + + if (this.can_thread_spawn) { + this.thread_spawner.done_notify(0); + } + return 0; } catch (e) { if (e instanceof WASIProcExit) { + if (this.can_thread_spawn) { + this.thread_spawner.done_notify(e.code); + } + return e.code; - } else { - throw e; } + throw e; + } + } + + /// Start a WASI command on a thread + /// If a module has child threads and a child thread throws an error, + /// the main thread should also be stopped, + /// but there is no way to stop it, + /// so the entire worker is stopped. + /// If it is not necessary, do not use it. + /// Custom imports are not implemented, + /// function because it cannot be passed to other threads. + /// If the sharedObject library someday supports synchronization, it could be used to support this. + async async_start_on_thread(): Promise { + if (!this.can_thread_spawn) { + throw new Error("thread_spawn is not supported"); + } + + await this.wait_worker_background_worker(); + + if (this.inst) { + throw new Error("what happened?"); + } + + const view = new Uint8Array(this.get_share_memory().buffer); + view.fill(0); + + await this.thread_spawner.async_start_on_thread(this.args, this.env); + + const code = await this.thread_spawner.async_wait_done_or_error(); + + return code; + } + + block_start_on_thread(): number { + if (!this.can_thread_spawn) { + throw new Error("thread_spawn is not supported"); + } + + console.log("block_start_on_thread"); + + this.check_worker_background_worker(); + + console.log("block_start_on_thread"); + + if (this.inst) { + throw new Error("what happened?"); + } + + const view = new Uint8Array(this.get_share_memory().buffer); + view.fill(0); + + console.log("block_start_on_thread: start"); + + this.thread_spawner.block_start_on_thread(this.args, this.env); + + console.log("block_start_on_thread: wait"); + + const code = this.thread_spawner.block_wait_done_or_error(); + + console.log("block_start_on_thread: done"); + + return code; + } + + wasi_thread_start( + instance: { + exports: { + memory: WebAssembly.Memory; + wasi_thread_start: (thread_id: number, start_arg: number) => void; + }; + }, + thread_id: number, + start_arg: number, + ) { + this.inst = instance; + try { + instance.exports.wasi_thread_start(thread_id, start_arg); + return 0; + } catch (e) { + if (e instanceof WASIProcExit) { + return e.code; + } + throw e; } } @@ -81,27 +196,30 @@ export class WASIFarmAnimal { override_fd_maps?: Array, ) { this.fd_map = [undefined, undefined, undefined]; + // console.log("wasi_farm_refs", wasi_farm_refs); for (let i = 0; i < wasi_farm_refs.length; i++) { // console.log("fd_map", [...this.fd_map]); const wasi_farm_ref = wasi_farm_refs[i]; // console.log("override_fd_map", wasi_farm_ref.default_fds); - const override_fd_map = override_fd_maps ? override_fd_maps[i] : wasi_farm_ref.default_fds; + const override_fd_map = override_fd_maps + ? override_fd_maps[i] + : wasi_farm_ref.default_fds; // console.log("override_fd_map", override_fd_map); const stdin = wasi_farm_ref.get_stdin(); const stdout = wasi_farm_ref.get_stdout(); const stderr = wasi_farm_ref.get_stderr(); - console.log("stdin", stdin, "stdout", stdout, "stderr", stderr); + // console.log("stdin", stdin, "stdout", stdout, "stderr", stderr); if (stdin !== undefined) { if (override_fd_map.includes(stdin)) { this.fd_map[0] = [stdin, i]; } } if (stdout !== undefined) { - console.log("stdout", stdout, i, "override_fd_map", override_fd_map); + // console.log("stdout", stdout, i, "override_fd_map", override_fd_map); if (override_fd_map.includes(stdout)) { - console.log("stdout defined"); + // console.log("stdout defined"); this.fd_map[1] = [stdout, i]; } } @@ -120,6 +238,7 @@ export class WASIFarmAnimal { // console.log("fd_map", this.fd_map); } + if (this.fd_map[0] === undefined) { throw new Error("stdin is not found"); } @@ -196,18 +315,28 @@ export class WASIFarmAnimal { } } + get_share_memory(): WebAssembly.Memory { + return this.thread_spawner.get_share_memory(); + } + constructor( wasi_farm_refs: WASIFarmRefObject[] | WASIFarmRefObject, args: Array, env: Array, - options: Options = {}, + options: Options & { + can_thread_spawn?: boolean; + thread_spawn_worker_url?: string; + thread_spawn_wasm?: WebAssembly.Module; + } = {}, override_fd_maps?: Array, + thread_spawner?: ThreadSpawner, ) { debug.enable(options.debug); let wasi_farm_refs_tmp: WASIFarmRefObject[]; if (Array.isArray(wasi_farm_refs)) { - wasi_farm_refs_tmp = wasi_farm_refs as unknown as Array; + wasi_farm_refs_tmp = + wasi_farm_refs as unknown as Array; } else { wasi_farm_refs_tmp = [wasi_farm_refs as unknown as WASIFarmRefObject]; } @@ -223,17 +352,47 @@ export class WASIFarmAnimal { this.wasi_farm_refs = []; for (let i = 0; i < wasi_farm_refs_tmp.length; i++) { if (this.can_array_buffer) { - this.wasi_farm_refs.push(WASIFarmRefUseArrayBuffer.init_self(wasi_farm_refs_tmp[i] as WASIFarmRefUseArrayBufferObject)); + this.wasi_farm_refs.push( + WASIFarmRefUseArrayBuffer.init_self( + wasi_farm_refs_tmp[i] as WASIFarmRefUseArrayBufferObject, + ), + ); } else { throw new Error("Non SharedArrayBuffer is not supported yet"); } - this.id_in_wasi_farm_ref.push( - this.wasi_farm_refs[i].set_id(), - ) + this.id_in_wasi_farm_ref.push(this.wasi_farm_refs[i].set_id()); } // console.log("this.wasi_farm_refs", this.wasi_farm_refs); + if (options.can_thread_spawn) { + this.can_thread_spawn = options.can_thread_spawn; + + if (thread_spawner) { + if (!(thread_spawner instanceof ThreadSpawner)) { + throw new Error("thread_spawner is not ThreadSpawner"); + } + + this.thread_spawner = thread_spawner; + } else { + if (options.thread_spawn_worker_url === undefined) { + throw new Error("thread_spawn_worker_url is not defined"); + } + if (options.thread_spawn_wasm === undefined) { + throw new Error("thread_spawn_wasm is not defined"); + } + + this.thread_spawner = new ThreadSpawner( + options.thread_spawn_worker_url, + wasi_farm_refs_tmp, + undefined, + undefined, + undefined, + options.thread_spawn_wasm, + ); + } + } + this.mapping_fds(this.wasi_farm_refs, override_fd_maps); // console.log("this.fd_map", this.fd_map); @@ -272,12 +431,12 @@ export class WASIFarmAnimal { argv_buf += arg.length + 1; } // if (debug.enabled) { - debug.log( - "read args_get: args", - new TextDecoder("utf-8").decode( - buffer8.slice(orig_argv_buf, argv_buf), - ), - ); + debug.log( + "read args_get: args", + new TextDecoder("utf-8").decode( + buffer8.slice(orig_argv_buf, argv_buf), + ), + ); // } return 0; }, @@ -311,12 +470,12 @@ export class WASIFarmAnimal { environ_buf += e.length + 1; } // if (debug.enabled) { - debug.log( - "read environ_get: environ", - new TextDecoder("utf-8").decode( - buffer8.slice(orig_environ_buf, environ_buf), - ), - ); + debug.log( + "read environ_get: environ", + new TextDecoder("utf-8").decode( + buffer8.slice(orig_environ_buf, environ_buf), + ), + ); // } return 0; }, @@ -351,7 +510,7 @@ export class WASIFarmAnimal { BigInt(new Date().getTime()) * 1_000_000n, true, ); - } else if (id == wasi.CLOCKID_MONOTONIC) { + } else if (id === wasi.CLOCKID_MONOTONIC) { let monotonic_time: bigint; try { monotonic_time = BigInt(Math.round(performance.now() * 1000000)); @@ -383,11 +542,7 @@ export class WASIFarmAnimal { } return wasi_farm_ref.fd_advise(mapped_fd); }, - fd_allocate( - fd: number, - offset: bigint, - len: bigint, - ) { + fd_allocate(fd: number, offset: bigint, len: bigint) { self.check_fds(); const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); if (mapped_fd === undefined || wasi_farm_ref === undefined) { @@ -436,13 +591,21 @@ export class WASIFarmAnimal { } return wasi_farm_ref.fd_fdstat_set_flags(mapped_fd, flags); }, - fd_fdstat_set_rights(fd: number, fs_rights_base: bigint, fs_rights_inheriting: bigint) { + fd_fdstat_set_rights( + fd: number, + fs_rights_base: bigint, + fs_rights_inheriting: bigint, + ) { self.check_fds(); const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); if (mapped_fd === undefined || wasi_farm_ref === undefined) { return wasi.ERRNO_BADF; } - return wasi_farm_ref.fd_fdstat_set_rights(mapped_fd, fs_rights_base, fs_rights_inheriting); + return wasi_farm_ref.fd_fdstat_set_rights( + mapped_fd, + fs_rights_base, + fs_rights_inheriting, + ); }, fd_filestat_get(fd: number, filestat_ptr: number) { self.check_fds(); @@ -467,15 +630,31 @@ export class WASIFarmAnimal { } return wasi_farm_ref.fd_filestat_set_size(mapped_fd, size); }, - fd_filestat_set_times(fd: number, atim: bigint, mtim: bigint, fst_flags: number) { + fd_filestat_set_times( + fd: number, + atim: bigint, + mtim: bigint, + fst_flags: number, + ) { self.check_fds(); const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); if (mapped_fd === undefined || wasi_farm_ref === undefined) { return wasi.ERRNO_BADF; } - return wasi_farm_ref.fd_filestat_set_times(mapped_fd, atim, mtim, fst_flags); + return wasi_farm_ref.fd_filestat_set_times( + mapped_fd, + atim, + mtim, + fst_flags, + ); }, - fd_pread(fd: number, iovs_ptr: number, iovs_len: number, offset: bigint, nread_ptr: number) { + fd_pread( + fd: number, + iovs_ptr: number, + iovs_len: number, + offset: bigint, + nread_ptr: number, + ) { self.check_fds(); const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); if (mapped_fd === undefined || wasi_farm_ref === undefined) { @@ -483,8 +662,16 @@ export class WASIFarmAnimal { } const buffer = new DataView(self.inst.exports.memory.buffer); const buffer8 = new Uint8Array(self.inst.exports.memory.buffer); - const iovs_view = new Uint32Array(buffer.buffer, iovs_ptr, iovs_len * 2); - const [nerad_and_read_data, ret] = wasi_farm_ref.fd_pread(mapped_fd, iovs_view, offset); + const iovs_view = new Uint32Array( + buffer.buffer, + iovs_ptr, + iovs_len * 2, + ); + const [nerad_and_read_data, ret] = wasi_farm_ref.fd_pread( + mapped_fd, + iovs_view, + offset, + ); if (nerad_and_read_data) { const iovecs = wasi.Iovec.read_bytes_array( buffer, @@ -501,7 +688,7 @@ export class WASIFarmAnimal { } buffer8.set( read_data.slice(nreaded, nreaded + iovec.buf_len), - iovec.buf + iovec.buf, ); nreaded += iovec.buf_len; } @@ -530,7 +717,10 @@ export class WASIFarmAnimal { return [undefined, wasi.ERRNO_BADF]; } // console.log("fd_prestat_dir_name: fd", mapped_fd, "path_len", path_len); - const [path, ret] = wasi_farm_ref.fd_prestat_dir_name(mapped_fd, path_len); + const [path, ret] = wasi_farm_ref.fd_prestat_dir_name( + mapped_fd, + path_len, + ); if (path) { // console.log("fd_prestat_dir_name", new TextDecoder().decode(path)); // console.log("fd_prestat_dir_name", path); @@ -539,7 +729,13 @@ export class WASIFarmAnimal { } return ret; }, - fd_pwrite(fd: number, iovs_ptr: number, iovs_len: number, offset: bigint, nwritten_ptr: number) { + fd_pwrite( + fd: number, + iovs_ptr: number, + iovs_len: number, + offset: bigint, + nwritten_ptr: number, + ) { self.check_fds(); const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); if (mapped_fd === undefined || wasi_farm_ref === undefined) { @@ -547,15 +743,16 @@ export class WASIFarmAnimal { } const buffer = new DataView(self.inst.exports.memory.buffer); const buffer8 = new Uint8Array(self.inst.exports.memory.buffer); - const iovecs = wasi.Ciovec.read_bytes_array( - buffer, - iovs_ptr, - iovs_len, + const iovecs = wasi.Ciovec.read_bytes_array(buffer, iovs_ptr, iovs_len); + const data = new Uint8Array( + iovecs.reduce((acc, iovec) => acc + iovec.buf_len, 0), ); - const data = new Uint8Array(iovecs.reduce((acc, iovec) => acc + iovec.buf_len, 0)); let nwritten = 0; for (const iovec of iovecs) { - data.set(buffer8.slice(iovec.buf, iovec.buf + iovec.buf_len), nwritten); + data.set( + buffer8.slice(iovec.buf, iovec.buf + iovec.buf_len), + nwritten, + ); nwritten += iovec.buf_len; } const [written, ret] = wasi_farm_ref.fd_pwrite(mapped_fd, data, offset); @@ -564,7 +761,12 @@ export class WASIFarmAnimal { } return ret; }, - fd_read(fd: number, iovs_ptr: number, iovs_len: number, nread_ptr: number) { + fd_read( + fd: number, + iovs_ptr: number, + iovs_len: number, + nread_ptr: number, + ) { self.check_fds(); const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); if (mapped_fd === undefined || wasi_farm_ref === undefined) { @@ -572,9 +774,16 @@ export class WASIFarmAnimal { } const buffer = new DataView(self.inst.exports.memory.buffer); const buffer8 = new Uint8Array(self.inst.exports.memory.buffer); - const iovs_view = new Uint32Array(buffer.buffer, iovs_ptr, iovs_len * 2); + const iovs_view = new Uint32Array( + buffer.buffer, + iovs_ptr, + iovs_len * 2, + ); - const [nerad_and_read_data, ret] = wasi_farm_ref.fd_read(mapped_fd, iovs_view); + const [nerad_and_read_data, ret] = wasi_farm_ref.fd_read( + mapped_fd, + iovs_view, + ); if (nerad_and_read_data) { const iovecs = wasi.Iovec.read_bytes_array( buffer, @@ -597,14 +806,20 @@ export class WASIFarmAnimal { } buffer8.set( read_data.slice(nreaded, nreaded + iovec.buf_len), - iovec.buf + iovec.buf, ); nreaded += iovec.buf_len; } } return ret; }, - fd_readdir(fd: number, buf_ptr: number, buf_len: number, cookie: bigint, buf_used_ptr: number) { + fd_readdir( + fd: number, + buf_ptr: number, + buf_len: number, + cookie: bigint, + buf_used_ptr: number, + ) { self.check_fds(); const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); if (mapped_fd === undefined || wasi_farm_ref === undefined) { @@ -612,7 +827,11 @@ export class WASIFarmAnimal { } const buffer = new DataView(self.inst.exports.memory.buffer); const buffer8 = new Uint8Array(self.inst.exports.memory.buffer); - const [nerad_and_read_data, ret] = wasi_farm_ref.fd_readdir(mapped_fd, buf_len, cookie); + const [nerad_and_read_data, ret] = wasi_farm_ref.fd_readdir( + mapped_fd, + buf_len, + cookie, + ); if (nerad_and_read_data) { const [read_data, buf_used] = nerad_and_read_data; buffer.setUint32(buf_used_ptr, buf_used, true); @@ -626,14 +845,19 @@ export class WASIFarmAnimal { const [mapped_fd, wasi_farm_ref_n] = self.get_fd_and_wasi_ref_n(fd); const [mapped_to, wasi_farm_ref_to] = self.get_fd_and_wasi_ref(to); - if (mapped_fd === undefined || wasi_farm_ref_n === undefined || mapped_to === undefined || wasi_farm_ref_to === undefined) { + if ( + mapped_fd === undefined || + wasi_farm_ref_n === undefined || + mapped_to === undefined || + wasi_farm_ref_to === undefined + ) { return wasi.ERRNO_BADF; } const ret = wasi_farm_ref_to.fd_close(mapped_to); self.check_fds(); - if (ret != wasi.ERRNO_SUCCESS) { + if (ret !== wasi.ERRNO_SUCCESS) { return ret; } @@ -641,13 +865,22 @@ export class WASIFarmAnimal { return wasi.ERRNO_SUCCESS; }, - fd_seek(fd: number, offset: bigint, whence: number, newoffset_ptr: number) { + fd_seek( + fd: number, + offset: bigint, + whence: number, + newoffset_ptr: number, + ) { self.check_fds(); const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); if (mapped_fd === undefined || wasi_farm_ref === undefined) { return [undefined, wasi.ERRNO_BADF]; } - const [newoffset, ret] = wasi_farm_ref.fd_seek(mapped_fd, offset, whence); + const [newoffset, ret] = wasi_farm_ref.fd_seek( + mapped_fd, + offset, + whence, + ); if (newoffset) { const buffer = new DataView(self.inst.exports.memory.buffer); @@ -677,7 +910,12 @@ export class WASIFarmAnimal { } return ret; }, - fd_write(fd: number, iovs_ptr: number, iovs_len: number, nwritten_ptr: number) { + fd_write( + fd: number, + iovs_ptr: number, + iovs_len: number, + nwritten_ptr: number, + ) { self.check_fds(); const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); if (mapped_fd === undefined || wasi_farm_ref === undefined) { @@ -688,17 +926,18 @@ export class WASIFarmAnimal { const buffer = new DataView(self.inst.exports.memory.buffer); const buffer8 = new Uint8Array(self.inst.exports.memory.buffer); - const iovecs = wasi.Ciovec.read_bytes_array( - buffer, - iovs_ptr, - iovs_len, - ); + const iovecs = wasi.Ciovec.read_bytes_array(buffer, iovs_ptr, iovs_len); // console.log("iovecs", iovecs); - const data = new Uint8Array(iovecs.reduce((acc, iovec) => acc + iovec.buf_len, 0)); + const data = new Uint8Array( + iovecs.reduce((acc, iovec) => acc + iovec.buf_len, 0), + ); // console.log("data", data); let nwritten = 0; for (const iovec of iovecs) { - data.set(buffer8.slice(iovec.buf, iovec.buf + iovec.buf_len), nwritten); + data.set( + buffer8.slice(iovec.buf, iovec.buf + iovec.buf_len), + nwritten, + ); nwritten += iovec.buf_len; } @@ -723,7 +962,13 @@ export class WASIFarmAnimal { const path = buffer8.slice(path_ptr, path_ptr + path_len); return wasi_farm_ref.path_create_directory(mapped_fd, path); }, - path_filestat_get(fd: number, flags: number, path_ptr: number, path_len: number, filestat_ptr: number) { + path_filestat_get( + fd: number, + flags: number, + path_ptr: number, + path_len: number, + filestat_ptr: number, + ) { self.check_fds(); const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); if (mapped_fd === undefined || wasi_farm_ref === undefined) { @@ -732,13 +977,25 @@ export class WASIFarmAnimal { const buffer = new DataView(self.inst.exports.memory.buffer); const buffer8 = new Uint8Array(self.inst.exports.memory.buffer); const path = buffer8.slice(path_ptr, path_ptr + path_len); - const [filestat, ret] = wasi_farm_ref.path_filestat_get(mapped_fd, flags, path); + const [filestat, ret] = wasi_farm_ref.path_filestat_get( + mapped_fd, + flags, + path, + ); if (filestat) { filestat.write_bytes(buffer, filestat_ptr); } return ret; }, - path_filestat_set_times(fd: number, flags: number, path_ptr: number, path_len: number, atim: bigint, mtim: bigint, fst_flags: number) { + path_filestat_set_times( + fd: number, + flags: number, + path_ptr: number, + path_len: number, + atim: bigint, + mtim: bigint, + fst_flags: number, + ) { self.check_fds(); const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); if (mapped_fd === undefined || wasi_farm_ref === undefined) { @@ -746,25 +1003,68 @@ export class WASIFarmAnimal { } const buffer8 = new Uint8Array(self.inst.exports.memory.buffer); const path = buffer8.slice(path_ptr, path_ptr + path_len); - return wasi_farm_ref.path_filestat_set_times(mapped_fd, flags, path, atim, mtim, fst_flags); + return wasi_farm_ref.path_filestat_set_times( + mapped_fd, + flags, + path, + atim, + mtim, + fst_flags, + ); }, // TODO! Make it work with different wasi_farm_ref - path_link(old_fd: number, old_flags: number, old_path_ptr: number, old_path_len: number, new_fd: number, new_path_ptr: number, new_path_len: number) { + path_link( + old_fd: number, + old_flags: number, + old_path_ptr: number, + old_path_len: number, + new_fd: number, + new_path_ptr: number, + new_path_len: number, + ) { self.check_fds(); const [mapped_old_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(old_fd); - const [mapped_new_fd, wasi_farm_ref_new] = self.get_fd_and_wasi_ref(new_fd); - if (mapped_old_fd === undefined || wasi_farm_ref === undefined || mapped_new_fd === undefined || wasi_farm_ref_new === undefined) { + const [mapped_new_fd, wasi_farm_ref_new] = + self.get_fd_and_wasi_ref(new_fd); + if ( + mapped_old_fd === undefined || + wasi_farm_ref === undefined || + mapped_new_fd === undefined || + wasi_farm_ref_new === undefined + ) { return wasi.ERRNO_BADF; } if (wasi_farm_ref !== wasi_farm_ref_new) { return wasi.ERRNO_BADF; } const buffer8 = new Uint8Array(self.inst.exports.memory.buffer); - const old_path = buffer8.slice(old_path_ptr, old_path_ptr + old_path_len); - const new_path = buffer8.slice(new_path_ptr, new_path_ptr + new_path_len); - return wasi_farm_ref.path_link(mapped_old_fd, old_flags, old_path, mapped_new_fd, new_path); + const old_path = buffer8.slice( + old_path_ptr, + old_path_ptr + old_path_len, + ); + const new_path = buffer8.slice( + new_path_ptr, + new_path_ptr + new_path_len, + ); + return wasi_farm_ref.path_link( + mapped_old_fd, + old_flags, + old_path, + mapped_new_fd, + new_path, + ); }, - path_open(fd: number, dirflags: number, path_ptr: number, path_len: number, oflags: number, fs_rights_base: bigint, fs_rights_inheriting: bigint, fs_flags: number, opened_fd_ptr: number) { + path_open( + fd: number, + dirflags: number, + path_ptr: number, + path_len: number, + oflags: number, + fs_rights_base: bigint, + fs_rights_inheriting: bigint, + fs_flags: number, + opened_fd_ptr: number, + ) { self.check_fds(); const [mapped_fd, wasi_farm_ref_n] = self.get_fd_and_wasi_ref_n(fd); if (mapped_fd === undefined || wasi_farm_ref_n === undefined) { @@ -773,18 +1073,36 @@ export class WASIFarmAnimal { const wasi_farm_ref = self.wasi_farm_refs[wasi_farm_ref_n]; const buffer8 = new Uint8Array(self.inst.exports.memory.buffer); const path = buffer8.slice(path_ptr, path_ptr + path_len); - const [opened_fd, ret] = wasi_farm_ref.path_open(mapped_fd, dirflags, path, oflags, fs_rights_base, fs_rights_inheriting, fs_flags); + const [opened_fd, ret] = wasi_farm_ref.path_open( + mapped_fd, + dirflags, + path, + oflags, + fs_rights_base, + fs_rights_inheriting, + fs_flags, + ); if (opened_fd) { if (self.fd_map.includes([opened_fd, wasi_farm_ref_n])) { throw new Error("opened_fd already exists"); } - const mapped_opened_fd = self.map_new_fd_and_notify(opened_fd, wasi_farm_ref_n); + const mapped_opened_fd = self.map_new_fd_and_notify( + opened_fd, + wasi_farm_ref_n, + ); const buffer = new DataView(self.inst.exports.memory.buffer); buffer.setUint32(opened_fd_ptr, mapped_opened_fd, true); } return ret; }, - path_readlink(fd: number, path_ptr: number, path_len: number, buf_ptr: number, buf_len: number, buf_used_ptr: number) { + path_readlink( + fd: number, + path_ptr: number, + path_len: number, + buf_ptr: number, + buf_len: number, + buf_used_ptr: number, + ) { self.check_fds(); const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); if (mapped_fd === undefined || wasi_farm_ref === undefined) { @@ -792,7 +1110,11 @@ export class WASIFarmAnimal { } const buffer8 = new Uint8Array(self.inst.exports.memory.buffer); const path = buffer8.slice(path_ptr, path_ptr + path_len); - const [buf, ret] = wasi_farm_ref.path_readlink(mapped_fd, path, buf_len); + const [buf, ret] = wasi_farm_ref.path_readlink( + mapped_fd, + path, + buf_len, + ); if (buf) { const buffer = new DataView(self.inst.exports.memory.buffer); buffer.setUint32(buf_used_ptr, buf.length, true); @@ -811,30 +1133,66 @@ export class WASIFarmAnimal { return wasi_farm_ref.path_remove_directory(mapped_fd, path); }, // TODO! Make it work with different wasi_farm_ref - path_rename(old_fd: number, old_path_ptr: number, old_path_len: number, new_fd: number, new_path_ptr: number, new_path_len: number) { + path_rename( + old_fd: number, + old_path_ptr: number, + old_path_len: number, + new_fd: number, + new_path_ptr: number, + new_path_len: number, + ) { self.check_fds(); const [mapped_old_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(old_fd); - const [mapped_new_fd, wasi_farm_ref_new] = self.get_fd_and_wasi_ref(new_fd); - if (mapped_old_fd === undefined || wasi_farm_ref === undefined || mapped_new_fd === undefined || wasi_farm_ref_new === undefined) { + const [mapped_new_fd, wasi_farm_ref_new] = + self.get_fd_and_wasi_ref(new_fd); + if ( + mapped_old_fd === undefined || + wasi_farm_ref === undefined || + mapped_new_fd === undefined || + wasi_farm_ref_new === undefined + ) { return wasi.ERRNO_BADF; } if (wasi_farm_ref !== wasi_farm_ref_new) { return wasi.ERRNO_BADF; } const buffer8 = new Uint8Array(self.inst.exports.memory.buffer); - const old_path = buffer8.slice(old_path_ptr, old_path_ptr + old_path_len); - const new_path = buffer8.slice(new_path_ptr, new_path_ptr + new_path_len); - return wasi_farm_ref.path_rename(mapped_old_fd, old_path, mapped_new_fd, new_path); + const old_path = buffer8.slice( + old_path_ptr, + old_path_ptr + old_path_len, + ); + const new_path = buffer8.slice( + new_path_ptr, + new_path_ptr + new_path_len, + ); + return wasi_farm_ref.path_rename( + mapped_old_fd, + old_path, + mapped_new_fd, + new_path, + ); }, - path_symlink(old_path_ptr: number, old_path_len: number, fd: number, new_path_ptr: number, new_path_len: number) { + path_symlink( + old_path_ptr: number, + old_path_len: number, + fd: number, + new_path_ptr: number, + new_path_len: number, + ) { self.check_fds(); const [mapped_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(fd); if (mapped_fd === undefined || wasi_farm_ref === undefined) { return wasi.ERRNO_BADF; } const buffer8 = new Uint8Array(self.inst.exports.memory.buffer); - const old_path = buffer8.slice(old_path_ptr, old_path_ptr + old_path_len); - const new_path = buffer8.slice(new_path_ptr, new_path_ptr + new_path_len); + const old_path = buffer8.slice( + old_path_ptr, + old_path_ptr + old_path_len, + ); + const new_path = buffer8.slice( + new_path_ptr, + new_path_ptr + new_path_len, + ); return wasi_farm_ref.path_symlink(old_path, mapped_fd, new_path); }, path_unlink_file(fd: number, path_ptr: number, path_len: number) { @@ -858,7 +1216,7 @@ export class WASIFarmAnimal { }, proc_raise(sig: number) { self.check_fds(); - throw "raised signal " + sig; + throw `raised signal ${sig}`; }, sched_yield() { self.check_fds(); @@ -902,6 +1260,24 @@ export class WASIFarmAnimal { self.check_fds(); throw "sockets not supported"; }, - } + }; + + this.wasiThreadImport = { + "thread-spawn": (start_arg: number) => { + self.check_fds(); + if (!self.can_thread_spawn) { + throw new Error("thread_spawn is not allowed"); + } + + const thread_id = self.thread_spawner.thread_spawn( + start_arg, + self.args, + self.env, + self.fd_map, + ); + + return thread_id; + }, + }; } } diff --git a/src/wasi_farm/farm.ts b/src/wasi_farm/farm.ts index cca48fd..7966339 100644 --- a/src/wasi_farm/farm.ts +++ b/src/wasi_farm/farm.ts @@ -1,9 +1,9 @@ import { debug } from "../debug.js"; -import { Fd } from "../fd.js"; -import { Options } from "../wasi.js"; -import { WASIFarmPark } from "./park.js"; -import { WASIFarmRefObject } from "./ref.js"; -import { WASIFarmParkUseArrayBuffer } from "./shared_array_buffer/park.js"; +import type { Fd } from "../fd.js"; +import type { Options } from "../wasi.js"; +import type { WASIFarmPark } from "./park.js"; +import type { WASIFarmRefObject } from "./ref.js"; +import { WASIFarmParkUseArrayBuffer } from "./shared_array_buffer/index.js"; export class WASIFarm { private fds: Array; @@ -52,10 +52,17 @@ export class WASIFarm { // Failed to execute 'postMessage' on 'Worker': // SharedArrayBuffer transfer requires self.crossOriginIsolated. try { - new SharedArrayBuffer(4); - this.can_array_buffer = true; - } catch (_) { - this.can_array_buffer = false; + new SharedArrayBuffer(4); + this.can_array_buffer = true; + } catch (e) { + this.can_array_buffer = false; + console.warn("SharedArrayBuffer is not supported:", e); + + if (!crossOriginIsolated) { + console.warn( + "SharedArrayBuffer is not supported because crossOriginIsolated is not enabled.", + ); + } } if (this.can_array_buffer) { @@ -92,7 +99,7 @@ export class WASIFarm { // console.log("fds", prop, value); this.fds[prop] = value; return true; - } + }, }); return fds; diff --git a/src/wasi_farm/index.ts b/src/wasi_farm/index.ts index 9dc3946..76b6389 100644 --- a/src/wasi_farm/index.ts +++ b/src/wasi_farm/index.ts @@ -1,4 +1,5 @@ +import { WASIFarmAnimal } from "./animals.js"; import { WASIFarm } from "./farm.js"; import { WASIFarmRef } from "./ref.js"; -import { WASIFarmAnimal } from "./animals.js"; -export { WASIFarm, WASIFarmRef, WASIFarmAnimal }; +import { thread_spawn_on_worker } from "./shared_array_buffer/index.js"; +export { WASIFarm, WASIFarmRef, WASIFarmAnimal, thread_spawn_on_worker }; diff --git a/src/wasi_farm/park.ts b/src/wasi_farm/park.ts index 94e7600..03e6119 100644 --- a/src/wasi_farm/park.ts +++ b/src/wasi_farm/park.ts @@ -1,7 +1,7 @@ -import { Fd } from "../fd.js"; -import { WASIFarmRefObject } from "./ref.js"; -import * as wasi from "../wasi_defs.js"; import { debug } from "../debug.js"; +import type { Fd } from "../fd.js"; +import * as wasi from "../wasi_defs.js"; +import type { WASIFarmRefObject } from "./ref.js"; export abstract class WASIFarmPark { abstract get_ref(): WASIFarmRefObject; @@ -49,12 +49,12 @@ export abstract class WASIFarmPark { const len = this.get_new_fd_lock.push(async () => { let ret = -1; for (let i = 0; i < this.fds.length; i++) { - if (this.fds[i] == undefined) { + if (this.fds[i] === undefined) { ret = i; break; } } - if (ret == -1) { + if (ret === -1) { ret = this.fds.length; // console.log("push_fd", this.fds.length) this.fds.push(undefined); @@ -68,17 +68,20 @@ export abstract class WASIFarmPark { } // If it's assigned, it's resolved. - resolve([async () => { - this.get_new_fd_lock.shift(); - const fn = this.get_new_fd_lock[0]; - if (fn != undefined) { - fn(); - } - // assigned and notify - await this.notify_set_fd(ret); - }, ret]); + resolve([ + async () => { + this.get_new_fd_lock.shift(); + const fn = this.get_new_fd_lock[0]; + if (fn !== undefined) { + fn(); + } + // assigned and notify + await this.notify_set_fd(ret); + }, + ret, + ]); }); - if (len == 1) { + if (len === 1) { this.get_new_fd_lock[0](); } }); @@ -86,44 +89,40 @@ export abstract class WASIFarmPark { } protected fd_advise(fd: number): number { - if (this.fds[fd] != undefined) { + if (this.fds[fd] !== undefined) { return wasi.ERRNO_SUCCESS; - } else { - return wasi.ERRNO_BADF; } + return wasi.ERRNO_BADF; } protected fd_allocate(fd: number, offset: bigint, len: bigint): number { - if (this.fds[fd] != undefined) { + if (this.fds[fd] !== undefined) { return this.fds[fd].fd_allocate(offset, len); - } else { - return wasi.ERRNO_BADF; } + return wasi.ERRNO_BADF; } protected async fd_close(fd: number): Promise { - if (this.fds[fd] != undefined) { + if (this.fds[fd] !== undefined) { const ret = this.fds[fd].fd_close(); this.fds[fd] = undefined; // console.log("fd_close1", fd); await this.notify_rm_fd(fd); // console.log("fd_close2", fd); return ret; - } else { - return wasi.ERRNO_BADF; } + return wasi.ERRNO_BADF; } protected fd_datasync(fd: number): number { - if (this.fds[fd] != undefined) { + if (this.fds[fd] !== undefined) { return this.fds[fd].fd_sync(); - } else { - return wasi.ERRNO_BADF; } + return wasi.ERRNO_BADF; } protected fd_fdstat_get(fd: number): [wasi.Fdstat | undefined, number] { - if (this.fds[fd] != undefined) { + if (this.fds[fd] !== undefined) { const { ret, fdstat } = this.fds[fd].fd_fdstat_get(); if (fdstat != null) { return [fdstat, ret]; @@ -134,23 +133,28 @@ export abstract class WASIFarmPark { } protected fd_fdstat_set_flags(fd: number, flags: number): number { - if (this.fds[fd] != undefined) { + if (this.fds[fd] !== undefined) { return this.fds[fd].fd_fdstat_set_flags(flags); - } else { - return wasi.ERRNO_BADF; } + return wasi.ERRNO_BADF; } - protected fd_fdstat_set_rights(fd: number, fs_rights_base: bigint, fs_rights_inheriting: bigint): number { - if (this.fds[fd] != undefined) { - return this.fds[fd].fd_fdstat_set_rights(fs_rights_base, fs_rights_inheriting); - } else { - return wasi.ERRNO_BADF; + protected fd_fdstat_set_rights( + fd: number, + fs_rights_base: bigint, + fs_rights_inheriting: bigint, + ): number { + if (this.fds[fd] !== undefined) { + return this.fds[fd].fd_fdstat_set_rights( + fs_rights_base, + fs_rights_inheriting, + ); } + return wasi.ERRNO_BADF; } protected fd_filestat_get(fd: number): [wasi.Filestat | undefined, number] { - if (this.fds[fd] != undefined) { + if (this.fds[fd] !== undefined) { const { ret, filestat } = this.fds[fd].fd_filestat_get(); if (filestat != null) { return [filestat, ret]; @@ -161,29 +165,36 @@ export abstract class WASIFarmPark { } protected fd_filestat_set_size(fd: number, size: bigint): number { - if (this.fds[fd] != undefined) { + if (this.fds[fd] !== undefined) { return this.fds[fd].fd_filestat_set_size(size); - } else { - return wasi.ERRNO_BADF; } + return wasi.ERRNO_BADF; } - protected fd_filestat_set_times(fd: number, atim: bigint, mtim: bigint, fst_flags: number): number { - if (this.fds[fd] != undefined) { + protected fd_filestat_set_times( + fd: number, + atim: bigint, + mtim: bigint, + fst_flags: number, + ): number { + if (this.fds[fd] !== undefined) { return this.fds[fd].fd_filestat_set_times(atim, mtim, fst_flags); - } else { - return wasi.ERRNO_BADF; } + return wasi.ERRNO_BADF; } - protected fd_pread(fd: number, iovecs: Array, offset: bigint): [[number, Uint8Array] | undefined, number] { - if (this.fds[fd] != undefined) { + protected fd_pread( + fd: number, + iovecs: Array, + offset: bigint, + ): [[number, Uint8Array] | undefined, number] { + if (this.fds[fd] !== undefined) { let nread = 0; let buffer8 = new Uint8Array(0); for (const iovec of iovecs) { const { ret, data } = this.fds[fd].fd_pread(iovec.buf_len, offset); - if (ret != wasi.ERRNO_SUCCESS) { + if (ret !== wasi.ERRNO_SUCCESS) { return [[nread, buffer8], ret]; } const new_buffer = new Uint8Array(buffer8.byteLength + data.byteLength); @@ -191,18 +202,17 @@ export abstract class WASIFarmPark { new_buffer.set(data, buffer8.byteLength); buffer8 = new_buffer; nread += data.byteLength; - if (data.byteLength != iovec.buf_len) { + if (data.byteLength !== iovec.buf_len) { break; } } return [[nread, buffer8], wasi.ERRNO_SUCCESS]; - } else { - return [undefined, wasi.ERRNO_BADF]; } + return [undefined, wasi.ERRNO_BADF]; } protected fd_prestat_get(fd: number): [wasi.Prestat | undefined, number] { - if (this.fds[fd] != undefined) { + if (this.fds[fd] !== undefined) { const { ret, prestat } = this.fds[fd].fd_prestat_get(); if (prestat != null) { return [prestat, ret]; @@ -212,8 +222,11 @@ export abstract class WASIFarmPark { return [undefined, wasi.ERRNO_BADF]; } - protected fd_prestat_dir_name(fd: number, path_len: number): [Uint8Array | undefined, number] { - if (this.fds[fd] != undefined) { + protected fd_prestat_dir_name( + fd: number, + path_len: number, + ): [Uint8Array | undefined, number] { + if (this.fds[fd] !== undefined) { const { ret, prestat } = this.fds[fd].fd_prestat_get(); if (prestat) { const prestat_dir_name = prestat.inner.pr_name; @@ -238,17 +251,23 @@ export abstract class WASIFarmPark { return [undefined, wasi.ERRNO_BADF]; } - protected fd_pwrite(fd: number, write_data: Uint8Array, offset: bigint): [number | undefined, number] { - if (this.fds[fd] != undefined) { + protected fd_pwrite( + fd: number, + write_data: Uint8Array, + offset: bigint, + ): [number | undefined, number] { + if (this.fds[fd] !== undefined) { const { ret, nwritten } = this.fds[fd].fd_pwrite(write_data, offset); return [nwritten, ret]; - } else { - return [undefined, wasi.ERRNO_BADF]; } + return [undefined, wasi.ERRNO_BADF]; } - protected fd_read(fd: number, iovecs: Array): [[number, Uint8Array] | undefined, number] { - if (this.fds[fd] != undefined) { + protected fd_read( + fd: number, + iovecs: Array, + ): [[number, Uint8Array] | undefined, number] { + if (this.fds[fd] !== undefined) { let nread = 0; // console.log("fd_read: park: iovecs: ", iovecs); @@ -261,7 +280,7 @@ export abstract class WASIFarmPark { for (const iovec of iovecs) { const { ret, data } = this.fds[fd].fd_read(iovec.buf_len); // console.log("fd_read: park: data: ", data); - if (ret != wasi.ERRNO_SUCCESS) { + if (ret !== wasi.ERRNO_SUCCESS) { return [[nread, buffer8], ret]; } const new_buffer = new Uint8Array(buffer8.byteLength + data.byteLength); @@ -269,24 +288,24 @@ export abstract class WASIFarmPark { new_buffer.set(data, buffer8.byteLength); buffer8 = new_buffer; nread += data.byteLength; - if (data.byteLength != iovec.buf_len) { + if (data.byteLength !== iovec.buf_len) { break; } } // console.log("fd_read: park: nread: ", nread); - return [[ - nread, - buffer8, - ], wasi.ERRNO_SUCCESS]; - } else { - return [undefined, wasi.ERRNO_BADF]; + return [[nread, buffer8], wasi.ERRNO_SUCCESS]; } + return [undefined, wasi.ERRNO_BADF]; } - protected fd_readdir(fd: number, buf_len: number, cookie: bigint): [[Uint8Array, number] | undefined, number] { - if (this.fds[fd] != undefined) { + protected fd_readdir( + fd: number, + buf_len: number, + cookie: bigint, + ): [[Uint8Array, number] | undefined, number] { + if (this.fds[fd] !== undefined) { const array = new Uint8Array(buf_len); let buf_used = 0; @@ -295,7 +314,7 @@ export abstract class WASIFarmPark { // eslint-disable-next-line no-constant-condition while (true) { const { ret, dirent } = this.fds[fd].fd_readdir_single(cookie); - if (ret != wasi.ERRNO_SUCCESS) { + if (ret !== wasi.ERRNO_SUCCESS) { return [[array, buf_used], ret]; } if (dirent == null) { @@ -331,9 +350,8 @@ export abstract class WASIFarmPark { } return [[array, buf_used], wasi.ERRNO_SUCCESS]; - } else { - return [undefined, wasi.ERRNO_BADF]; } + return [undefined, wasi.ERRNO_BADF]; } // protected async fd_renumber(fd: number, to: number): Promise { @@ -351,51 +369,57 @@ export abstract class WASIFarmPark { // } // } - protected fd_seek(fd: number, offset: bigint, whence: number): [bigint | undefined, number] { - if (this.fds[fd] != undefined) { + protected fd_seek( + fd: number, + offset: bigint, + whence: number, + ): [bigint | undefined, number] { + if (this.fds[fd] !== undefined) { const { ret, offset: new_offset } = this.fds[fd].fd_seek(offset, whence); return [new_offset, ret]; - } else { - return [undefined, wasi.ERRNO_BADF]; } + return [undefined, wasi.ERRNO_BADF]; } protected fd_sync(fd: number): number { - if (this.fds[fd] != undefined) { + if (this.fds[fd] !== undefined) { return this.fds[fd].fd_sync(); - } else { - return wasi.ERRNO_BADF; } + return wasi.ERRNO_BADF; } protected fd_tell(fd: number): [bigint | undefined, number] { - if (this.fds[fd] != undefined) { + if (this.fds[fd] !== undefined) { const { ret, offset } = this.fds[fd].fd_tell(); return [offset, ret]; - } else { - return [undefined, wasi.ERRNO_BADF]; } + return [undefined, wasi.ERRNO_BADF]; } - protected fd_write(fd: number, write_data: Uint8Array): [number | undefined, number] { - if (this.fds[fd] != undefined) { + protected fd_write( + fd: number, + write_data: Uint8Array, + ): [number | undefined, number] { + if (this.fds[fd] !== undefined) { const { ret, nwritten } = this.fds[fd].fd_write(write_data); return [nwritten, ret]; - } else { - return [undefined, wasi.ERRNO_BADF]; } + return [undefined, wasi.ERRNO_BADF]; } protected path_create_directory(fd: number, path: string): number { - if (this.fds[fd] != undefined) { + if (this.fds[fd] !== undefined) { return this.fds[fd].path_create_directory(path); - } else { - return wasi.ERRNO_BADF; } + return wasi.ERRNO_BADF; } - protected path_filestat_get(fd: number, flags: number, path: string): [wasi.Filestat | undefined, number] { - if (this.fds[fd] != undefined) { + protected path_filestat_get( + fd: number, + flags: number, + path: string, + ): [wasi.Filestat | undefined, number] { + if (this.fds[fd] !== undefined) { const { ret, filestat } = this.fds[fd].path_filestat_get(flags, path); if (filestat != null) { return [filestat, ret]; @@ -405,16 +429,34 @@ export abstract class WASIFarmPark { return [undefined, wasi.ERRNO_BADF]; } - protected path_filestat_set_times(fd: number, flags: number, path: string, atim: bigint, mtim: bigint, fst_flags: number): number { - if (this.fds[fd] != undefined) { - return this.fds[fd].path_filestat_set_times(flags, path, atim, mtim, fst_flags); - } else { - return wasi.ERRNO_BADF; + protected path_filestat_set_times( + fd: number, + flags: number, + path: string, + atim: bigint, + mtim: bigint, + fst_flags: number, + ): number { + if (this.fds[fd] !== undefined) { + return this.fds[fd].path_filestat_set_times( + flags, + path, + atim, + mtim, + fst_flags, + ); } + return wasi.ERRNO_BADF; } - protected path_link(old_fd: number, old_flags: number, old_path: string, new_fd: number, new_path: string): number { - if (this.fds[old_fd] != undefined && this.fds[new_fd] != undefined) { + protected path_link( + old_fd: number, + old_flags: number, + old_path: string, + new_fd: number, + new_path: string, + ): number { + if (this.fds[old_fd] !== undefined && this.fds[new_fd] !== undefined) { const { ret, inode_obj } = this.fds[old_fd].path_lookup( old_path, old_flags, @@ -423,9 +465,8 @@ export abstract class WASIFarmPark { return ret; } return this.fds[new_fd].path_link(new_path, inode_obj, false); - } else { - return wasi.ERRNO_BADF; } + return wasi.ERRNO_BADF; } protected async path_open( @@ -437,7 +478,7 @@ export abstract class WASIFarmPark { fs_rights_inheriting: bigint, fs_flags: number, ): Promise<[number | undefined, number]> { - if (this.fds[fd] != undefined) { + if (this.fds[fd] !== undefined) { debug.log("path_open", path); const { ret, fd_obj } = this.fds[fd].path_open( dirflags, @@ -448,7 +489,7 @@ export abstract class WASIFarmPark { fs_flags, ); // console.log("path_open: park: ", ret, fd_obj); - if (ret != wasi.ERRNO_SUCCESS) { + if (ret !== wasi.ERRNO_SUCCESS) { return [undefined, ret]; } @@ -465,13 +506,16 @@ export abstract class WASIFarmPark { // console.log("path_open: park: ", opened_fd); return [opened_fd, wasi.ERRNO_SUCCESS]; - } else { - return [undefined, wasi.ERRNO_BADF]; } + return [undefined, wasi.ERRNO_BADF]; } - protected path_readlink(fd: number, path: string, buf_len: number): [Uint8Array | undefined, number] { - if (this.fds[fd] != undefined) { + protected path_readlink( + fd: number, + path: string, + buf_len: number, + ): [Uint8Array | undefined, number] { + if (this.fds[fd] !== undefined) { debug.log("path_readlink", path); const { ret, data } = this.fds[fd].path_readlink(path); if (data != null) { @@ -483,57 +527,59 @@ export abstract class WASIFarmPark { return [data_buf, ret]; } return [undefined, ret]; - } else { - return [undefined, wasi.ERRNO_BADF]; } + return [undefined, wasi.ERRNO_BADF]; } protected path_remove_directory(fd: number, path: string): number { - if (this.fds[fd] != undefined) { + if (this.fds[fd] !== undefined) { return this.fds[fd].path_remove_directory(path); - } else { - return wasi.ERRNO_BADF; } + return wasi.ERRNO_BADF; } - protected path_rename(old_fd: number, old_path: string, new_fd: number, new_path: string): number { - if (this.fds[old_fd] != undefined && this.fds[new_fd] != undefined) { + protected path_rename( + old_fd: number, + old_path: string, + new_fd: number, + new_path: string, + ): number { + if (this.fds[old_fd] !== undefined && this.fds[new_fd] !== undefined) { // eslint-disable-next-line prefer-const - let { ret, inode_obj } = this.fds[old_fd].path_unlink( - old_path, - ); + let { ret, inode_obj } = this.fds[old_fd].path_unlink(old_path); if (inode_obj == null) { return ret; } ret = this.fds[new_fd].path_link(new_path, inode_obj, true); - if (ret != wasi.ERRNO_SUCCESS) { + if (ret !== wasi.ERRNO_SUCCESS) { if ( - this.fds[old_fd].path_link(old_path, inode_obj, true) != + this.fds[old_fd].path_link(old_path, inode_obj, true) !== wasi.ERRNO_SUCCESS ) { throw "path_link should always return success when relinking an inode back to the original place"; } } return ret; - } else { - return wasi.ERRNO_BADF; } + return wasi.ERRNO_BADF; } // eslint-disable-next-line @typescript-eslint/no-unused-vars - protected path_symlink(old_path: string, fd: number, new_path: string): number { - if (this.fds[fd] != undefined) { + protected path_symlink( + old_path: string, + fd: number, + new_path: string, + ): number { + if (this.fds[fd] !== undefined) { return wasi.ERRNO_NOTSUP; - } else { - return wasi.ERRNO_BADF; } + return wasi.ERRNO_BADF; } protected path_unlink_file(fd: number, path: string): number { - if (this.fds[fd] != undefined) { + if (this.fds[fd] !== undefined) { return this.fds[fd].path_unlink_file(path); - } else { - return wasi.ERRNO_BADF; } + return wasi.ERRNO_BADF; } } diff --git a/src/wasi_farm/polyfill.js b/src/wasi_farm/polyfill.js index c468f91..bde01dd 100644 --- a/src/wasi_farm/polyfill.js +++ b/src/wasi_farm/polyfill.js @@ -33,111 +33,115 @@ * when possible. The worker communicates with its parent using postMessage. */ -(function () { - if (typeof Atomics.waitAsync === "function") - return; - - let helperCode = ` - onmessage = function (ev) { - try { - switch (ev.data[0]) { - case 'wait': { - let [_, ia, index, value, timeout] = ev.data; - let result = Atomics.wait(ia, index, value, timeout) - postMessage(['ok', result]); - break; - } - default: { - throw new Error("Bogus message sent to wait helper: " + ev.data.join(',')); - } +(() => { + if (typeof Atomics.waitAsync === "function") return; + + const helperCode = ` + onmessage = function (ev) { + try { + switch (ev.data[0]) { + case 'wait': { + let [_, ia, index, value, timeout] = ev.data; + let result = Atomics.wait(ia, index, value, timeout) + postMessage(['ok', result]); + break; } - } catch (e) { - console.log("Exception in wait helper"); - postMessage(['error', 'Exception']); - } - } - `; - - let helpers = []; - - function allocHelper() { - if (helpers.length > 0) - return helpers.pop(); - let h = new Worker("data:application/javascript," + encodeURIComponent(helperCode)); - return h; - } - - function freeHelper(h) { - helpers.push(h); - } - - // Atomics.waitAsync always returns a promise. Throws standard errors - // for parameter validation. The promise is resolved with a string as from - // Atomics.wait, or, in the case something went completely wrong, it is - // rejected with an error string. - - function waitAsync(ia, index_, value_, timeout_) { - if (typeof ia != "object" || !(ia instanceof Int32Array) || !(ia.buffer instanceof SharedArrayBuffer)) - throw new TypeError("Expected shared memory"); - - // These conversions only approximate the desired semantics but are - // close enough for the polyfill. - - let index = index_|0; - let value = value_|0; - let timeout = timeout_ === undefined ? Infinity : +timeout_; - - // Range checking for the index. - - ia[index]; - - // Optimization, avoid the helper thread in this common case. - - if (Atomics.load(ia, index) != value) - return Promise.resolve("not-equal"); - - // General case, we must wait. - - return new Promise(function (resolve, reject) { - let h = allocHelper(); - h.onmessage = function (ev) { - // Free the helper early so that it can be reused if the resolution - // needs a helper. - freeHelper(h); - switch (ev.data[0]) { - case 'ok': - resolve(ev.data[1]); - break; - case 'error': - // Note, rejection is not in the spec, it is an artifact of the polyfill. - // The helper already printed an error to the console. - reject(ev.data[1]); - break; - } + default: { + throw new Error("Bogus message sent to wait helper: " + ev.data.join(',')); } - - // It's possible to do better here if the ia is already known to the - // helper. In that case we can communicate the other data through - // shared memory and wake the agent. And it is possible to make ia - // known to the helper by waking it with a special value so that it - // checks its messages, and then posting the ia to the helper. Some - // caching / decay scheme is useful no doubt, to improve performance - // and avoid leaks. - // - // In the event we wake the helper directly, we can micro-wait here - // for a quick result. We'll need to restructure some code to make - // that work out properly, and some synchronization is necessary for - // the helper to know that we've picked up the result and no - // postMessage is necessary. - - h.postMessage(['wait', ia, index, value, timeout]); - }) - } - - Object.defineProperty(Atomics, 'waitAsync', { - value: waitAsync, - configurable: true, - enumerable: false, - writable: true, + } + } catch (e) { + console.log("Exception in wait helper"); + postMessage(['error', 'Exception']); + } + } + `; + + const helpers = []; + + function allocHelper() { + if (helpers.length > 0) return helpers.pop(); + const h = new Worker( + `data:application/javascript,${encodeURIComponent(helperCode)}`, + ); + return h; + } + + function freeHelper(h) { + helpers.push(h); + } + + // Atomics.waitAsync always returns a promise. Throws standard errors + // for parameter validation. The promise is resolved with a string as from + // Atomics.wait, or, in the case something went completely wrong, it is + // rejected with an error string. + + function waitAsync(ia, index_, value_, timeout_) { + if ( + typeof ia !== "object" || + !(ia instanceof Int32Array) || + !(ia.buffer instanceof SharedArrayBuffer) + ) + throw new TypeError("Expected shared memory"); + + // These conversions only approximate the desired semantics but are + // close enough for the polyfill. + + const index = index_ | 0; + const value = value_ | 0; + const timeout = + timeout_ === undefined ? Number.POSITIVE_INFINITY : +timeout_; + + // Range checking for the index. + + ia[index]; + + // Optimization, avoid the helper thread in this common case. + + if (Atomics.load(ia, index) !== value) return Promise.resolve("not-equal"); + + // General case, we must wait. + + return new Promise((resolve, reject) => { + const h = allocHelper(); + h.onmessage = (ev) => { + // Free the helper early so that it can be reused if the resolution + // needs a helper. + freeHelper(h); + switch (ev.data[0]) { + case "ok": + resolve(ev.data[1]); + break; + case "error": + // Note, rejection is not in the spec, it is an artifact of the polyfill. + // The helper already printed an error to the console. + reject(ev.data[1]); + break; + } + }; + + // It's possible to do better here if the ia is already known to the + // helper. In that case we can communicate the other data through + // shared memory and wake the agent. And it is possible to make ia + // known to the helper by waking it with a special value so that it + // checks its messages, and then posting the ia to the helper. Some + // caching / decay scheme is useful no doubt, to improve performance + // and avoid leaks. + // + // In the event we wake the helper directly, we can micro-wait here + // for a quick result. We'll need to restructure some code to make + // that work out properly, and some synchronization is necessary for + // the helper to know that we've picked up the result and no + // postMessage is necessary. + + h.postMessage(["wait", ia, index, value, timeout]); }); + } + + Object.defineProperty(Atomics, "waitAsync", { + value: waitAsync, + configurable: true, + enumerable: false, + writable: true, + }); })(); diff --git a/src/wasi_farm/ref.ts b/src/wasi_farm/ref.ts index aa5837c..1e86f03 100644 --- a/src/wasi_farm/ref.ts +++ b/src/wasi_farm/ref.ts @@ -1,6 +1,5 @@ -import { Options } from "../wasi.js"; -import * as wasi from "../wasi_defs.js"; -import { FdCloseSender } from "./sender.js"; +import type * as wasi from "../wasi_defs.js"; +import type { FdCloseSender } from "./sender.js"; export type WASIFarmRefObject = { stdin: number | undefined; @@ -8,7 +7,7 @@ export type WASIFarmRefObject = { stderr: number | undefined; fd_close_receiver: FdCloseSender; default_fds: Array; -} +}; export abstract class WASIFarmRef { abstract get_fds_len(): number; @@ -66,34 +65,122 @@ export abstract class WASIFarmRef { } abstract fd_advise(fd: number | undefined): number; - abstract fd_allocate(fd: number | undefined, offset: bigint, len: bigint): number; + abstract fd_allocate( + fd: number | undefined, + offset: bigint, + len: bigint, + ): number; abstract fd_close(fd: number | undefined): number; abstract fd_datasync(fd: number | undefined): number; - abstract fd_fdstat_get(fd: number | undefined): [wasi.Fdstat | undefined, number]; + abstract fd_fdstat_get( + fd: number | undefined, + ): [wasi.Fdstat | undefined, number]; abstract fd_fdstat_set_flags(fd: number | undefined, flags: number): number; - abstract fd_fdstat_set_rights(fd: number | undefined, fs_rights_base: bigint, fs_rights_inheriting: bigint): number; - abstract fd_filestat_get(fd: number | undefined): [wasi.Filestat | undefined, number]; + abstract fd_fdstat_set_rights( + fd: number | undefined, + fs_rights_base: bigint, + fs_rights_inheriting: bigint, + ): number; + abstract fd_filestat_get( + fd: number | undefined, + ): [wasi.Filestat | undefined, number]; abstract fd_filestat_set_size(fd: number | undefined, size: bigint): number; - abstract fd_filestat_set_times(fd: number | undefined, atim: bigint, mtim: bigint, fst_flags: number): number; - abstract fd_pread(fd: number | undefined, iovs: Uint32Array, offset: bigint): [[number, Uint8Array] | undefined, number]; - abstract fd_prestat_get(fd: number | undefined): [[number, number] | undefined, number]; - abstract fd_prestat_dir_name(fd: number | undefined, path_len: number): [Uint8Array | undefined, number]; - abstract fd_pwrite(fd: number | undefined, iovs: Uint8Array, offset: bigint): [number | undefined, number]; - abstract fd_read(fd: number | undefined, iovs: Uint32Array): [[number, Uint8Array] | undefined, number]; - abstract fd_readdir(fd: number | undefined, limit_buf_len: number, cookie: bigint): [[Uint8Array, number] | undefined, number] + abstract fd_filestat_set_times( + fd: number | undefined, + atim: bigint, + mtim: bigint, + fst_flags: number, + ): number; + abstract fd_pread( + fd: number | undefined, + iovs: Uint32Array, + offset: bigint, + ): [[number, Uint8Array] | undefined, number]; + abstract fd_prestat_get( + fd: number | undefined, + ): [[number, number] | undefined, number]; + abstract fd_prestat_dir_name( + fd: number | undefined, + path_len: number, + ): [Uint8Array | undefined, number]; + abstract fd_pwrite( + fd: number | undefined, + iovs: Uint8Array, + offset: bigint, + ): [number | undefined, number]; + abstract fd_read( + fd: number | undefined, + iovs: Uint32Array, + ): [[number, Uint8Array] | undefined, number]; + abstract fd_readdir( + fd: number | undefined, + limit_buf_len: number, + cookie: bigint, + ): [[Uint8Array, number] | undefined, number]; // abstract fd_renumber(fd: number | undefined, to: number): number; - abstract fd_seek(fd: number | undefined, offset: bigint, whence: number): [bigint | undefined, number]; + abstract fd_seek( + fd: number | undefined, + offset: bigint, + whence: number, + ): [bigint | undefined, number]; abstract fd_sync(fd: number | undefined): number; abstract fd_tell(fd: number | undefined): [bigint, number]; - abstract fd_write(fd: number | undefined, iovs: Uint8Array): [number | undefined, number]; - abstract path_create_directory(fd: number | undefined, path: Uint8Array): number; - abstract path_filestat_get(fd: number | undefined, flags: number, path: Uint8Array): [wasi.Filestat | undefined, number]; - abstract path_filestat_set_times(fd: number | undefined, flags: number, path: Uint8Array, st_atim: bigint, st_mtim: bigint, fst_flags: number): number - abstract path_link(old_fd: number | undefined, old_flags: number, old_path: Uint8Array, new_fd: number | undefined, new_path: Uint8Array): number; - abstract path_open(fd: number | undefined, dirflags: number, path: Uint8Array, oflags: number, fs_rights_base: bigint, fs_rights_inheriting: bigint, fs_flags: number): [number, number]; - abstract path_readlink(fd: number | undefined, path: Uint8Array, buf_len: number): [Uint8Array | undefined, number]; - abstract path_remove_directory(fd: number | undefined, path: Uint8Array): number; - abstract path_rename(old_fd: number | undefined, old_path: Uint8Array, new_fd: number | undefined, new_path: Uint8Array): number; - abstract path_symlink(old_path: Uint8Array, fd: number | undefined, new_path: Uint8Array): number; + abstract fd_write( + fd: number | undefined, + iovs: Uint8Array, + ): [number | undefined, number]; + abstract path_create_directory( + fd: number | undefined, + path: Uint8Array, + ): number; + abstract path_filestat_get( + fd: number | undefined, + flags: number, + path: Uint8Array, + ): [wasi.Filestat | undefined, number]; + abstract path_filestat_set_times( + fd: number | undefined, + flags: number, + path: Uint8Array, + st_atim: bigint, + st_mtim: bigint, + fst_flags: number, + ): number; + abstract path_link( + old_fd: number | undefined, + old_flags: number, + old_path: Uint8Array, + new_fd: number | undefined, + new_path: Uint8Array, + ): number; + abstract path_open( + fd: number | undefined, + dirflags: number, + path: Uint8Array, + oflags: number, + fs_rights_base: bigint, + fs_rights_inheriting: bigint, + fs_flags: number, + ): [number, number]; + abstract path_readlink( + fd: number | undefined, + path: Uint8Array, + buf_len: number, + ): [Uint8Array | undefined, number]; + abstract path_remove_directory( + fd: number | undefined, + path: Uint8Array, + ): number; + abstract path_rename( + old_fd: number | undefined, + old_path: Uint8Array, + new_fd: number | undefined, + new_path: Uint8Array, + ): number; + abstract path_symlink( + old_path: Uint8Array, + fd: number | undefined, + new_path: Uint8Array, + ): number; abstract path_unlink_file(fd: number | undefined, path: Uint8Array): number; } diff --git a/src/wasi_farm/shared_array_buffer/allocator.ts b/src/wasi_farm/shared_array_buffer/allocator.ts index 95f6ef4..8cd3edf 100644 --- a/src/wasi_farm/shared_array_buffer/allocator.ts +++ b/src/wasi_farm/shared_array_buffer/allocator.ts @@ -1,10 +1,10 @@ // @ts-ignore // import { debug } from "../../debug.js"; -import "../polyfill.js"; +// import "../polyfill.js"; export type AllocatorUseArrayBufferObject = { share_arrays_memory: SharedArrayBuffer; -} +}; export class AllocatorUseArrayBuffer { // Pass a !Sized type @@ -40,7 +40,9 @@ export class AllocatorUseArrayBuffer { // Since postMessage makes the class an object, // it must be able to receive and assign a SharedArrayBuffer. constructor( - share_arrays_memory: SharedArrayBuffer = new SharedArrayBuffer(10 * 1024 * 1024), + share_arrays_memory: SharedArrayBuffer = new SharedArrayBuffer( + 10 * 1024 * 1024, + ), ) { this.share_arrays_memory = share_arrays_memory; const view = new Int32Array(this.share_arrays_memory); @@ -51,9 +53,7 @@ export class AllocatorUseArrayBuffer { // Since postMessage converts classes to objects, // it must be able to convert objects to classes. - static init_self( - sl: AllocatorUseArrayBufferObject, - ): AllocatorUseArrayBuffer { + static init_self(sl: AllocatorUseArrayBufferObject): AllocatorUseArrayBuffer { return new AllocatorUseArrayBuffer(sl.share_arrays_memory); } @@ -64,7 +64,7 @@ export class AllocatorUseArrayBuffer { // ptr, len // Pass I32Array ret_ptr ret_ptr: number, - ): Promise { + ): Promise<[number, number]> { const view = new Int32Array(this.share_arrays_memory); // eslint-disable-next-line no-constant-condition while (true) { @@ -83,13 +83,13 @@ export class AllocatorUseArrayBuffer { continue; } - this.write_inner(data, memory, ret_ptr); + const ret = this.write_inner(data, memory, ret_ptr); // release lock Atomics.store(view, 0, 0); Atomics.notify(view, 0, 1); - break; + return ret; } } @@ -153,7 +153,9 @@ export class AllocatorUseArrayBuffer { // extend memory // support from es2024 // this.share_arrays_memory.grow(new_memory_len); - throw new Error("size is bigger than memory. \nTODO! fix memory limit. support big size another way."); + throw new Error( + "size is bigger than memory. \nTODO! fix memory limit. support big size another way.", + ); } let data8: Uint8Array; @@ -183,7 +185,7 @@ export class AllocatorUseArrayBuffer { // eslint-disable-next-line @typescript-eslint/no-unused-vars pointer: number, // eslint-disable-next-line @typescript-eslint/no-unused-vars - len: number + len: number, ) { Atomics.sub(new Int32Array(this.share_arrays_memory), 1, 1); @@ -191,10 +193,7 @@ export class AllocatorUseArrayBuffer { } // get memory from pointer and length - get_memory( - ptr: number, - len: number, - ): ArrayBuffer { + get_memory(ptr: number, len: number): ArrayBuffer { const data = new ArrayBuffer(len); const view = new Uint8Array(data); view.set(new Uint8Array(this.share_arrays_memory).slice(ptr, ptr + len)); @@ -203,12 +202,14 @@ export class AllocatorUseArrayBuffer { // Write again to the memory before releasing // Not used because the situation for using it does not exist. - use_defined_memory( - ptr: number, - len: number, - data: ArrayBufferLike, - ) { + use_defined_memory(ptr: number, len: number, data: ArrayBufferLike) { const memory = new Uint8Array(this.share_arrays_memory); memory.set(new Uint8Array(data).slice(0, len), ptr); } + + get_object(): AllocatorUseArrayBufferObject { + return { + share_arrays_memory: this.share_arrays_memory, + }; + } } diff --git a/src/wasi_farm/shared_array_buffer/fd_close_sender.ts b/src/wasi_farm/shared_array_buffer/fd_close_sender.ts index 2f4ec40..a137e77 100644 --- a/src/wasi_farm/shared_array_buffer/fd_close_sender.ts +++ b/src/wasi_farm/shared_array_buffer/fd_close_sender.ts @@ -1,5 +1,8 @@ -import { FdCloseSender } from "../sender.js"; -import { ToRefSenderUseArrayBuffer, ToRefSenderUseArrayBufferObject } from "./sender.js"; +import type { FdCloseSender } from "../sender.js"; +import { + ToRefSenderUseArrayBuffer, + type ToRefSenderUseArrayBufferObject, +} from "./sender.js"; export type FdCloseSenderUseArrayBufferObject = { max_share_arrays_memory?: number; @@ -9,7 +12,10 @@ export type FdCloseSenderUseArrayBufferObject = { // Object to tell other processes, // such as child processes, // that the file descriptor has been closed -export class FdCloseSenderUseArrayBuffer extends ToRefSenderUseArrayBuffer implements FdCloseSender { +export class FdCloseSenderUseArrayBuffer + extends ToRefSenderUseArrayBuffer + implements FdCloseSender +{ // Should be able to change the size of memory as it accumulates more and more on memory constructor( max_share_arrays_memory?: number, @@ -19,10 +25,7 @@ export class FdCloseSenderUseArrayBuffer extends ToRefSenderUseArrayBuffer imple } // Send the closed file descriptor to the target process - async send( - targets: Array, - fd: number, - ): Promise { + async send(targets: Array, fd: number): Promise { if (targets === undefined || targets.length === 0) { throw new Error("targets is empty"); } @@ -32,9 +35,7 @@ export class FdCloseSenderUseArrayBuffer extends ToRefSenderUseArrayBuffer imple } // Get the closed file descriptor from the target process - get( - id: number, - ): Array | undefined { + get(id: number): Array | undefined { const data = this.get_data(id); if (data === undefined) { return undefined; @@ -51,9 +52,7 @@ export class FdCloseSenderUseArrayBuffer extends ToRefSenderUseArrayBuffer imple } // Initialize the class from object - static init_self( - sl: FdCloseSenderUseArrayBufferObject, - ): FdCloseSender { + static init_self(sl: FdCloseSenderUseArrayBufferObject): FdCloseSender { const sel = ToRefSenderUseArrayBuffer.init_self_inner(sl); return new FdCloseSenderUseArrayBuffer( sel.max_share_arrays_memory, diff --git a/src/wasi_farm/shared_array_buffer/index.ts b/src/wasi_farm/shared_array_buffer/index.ts new file mode 100644 index 0000000..0e2d34a --- /dev/null +++ b/src/wasi_farm/shared_array_buffer/index.ts @@ -0,0 +1,13 @@ +import { WASIFarmParkUseArrayBuffer } from "./park.js"; +import { WASIFarmRefUseArrayBuffer } from "./ref.js"; +import type { WASIFarmRefUseArrayBufferObject } from "./ref.js"; +import { ThreadSpawner } from "./thread_spawn.js"; +import { thread_spawn_on_worker } from "./thread_spawn.js"; + +export { + WASIFarmRefUseArrayBuffer, + type WASIFarmRefUseArrayBufferObject, + WASIFarmParkUseArrayBuffer, + ThreadSpawner, + thread_spawn_on_worker, +}; diff --git a/src/wasi_farm/shared_array_buffer/park.ts b/src/wasi_farm/shared_array_buffer/park.ts index b242194..861b807 100644 --- a/src/wasi_farm/shared_array_buffer/park.ts +++ b/src/wasi_farm/shared_array_buffer/park.ts @@ -1,10 +1,10 @@ -import { Fd } from "../../fd.js"; +import type { Fd } from "../../fd.js"; import * as wasi from "../../wasi_defs.js"; -import { AllocatorUseArrayBuffer } from "./allocator.js"; import { WASIFarmPark } from "../park.js"; -import { WASIFarmRefUseArrayBufferObject } from "./ref.js"; -import { FdCloseSender } from "../sender.js"; +import type { FdCloseSender } from "../sender.js"; +import { AllocatorUseArrayBuffer } from "./allocator.js"; import { FdCloseSenderUseArrayBuffer } from "./fd_close_sender.js"; +import type { WASIFarmRefUseArrayBufferObject } from "./ref.js"; import { get_func_name_from_number } from "./util.js"; export const fd_func_sig_u32_size: number = 18; @@ -112,22 +112,20 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { default_allow_fds: Array, allocator_size?: number, ) { - super( - fds, - stdin, - stdout, - stderr, - default_allow_fds, - ); + super(fds, stdin, stdout, stderr, default_allow_fds); if (allocator_size === undefined) { this.allocator = new AllocatorUseArrayBuffer(); } else { - this.allocator = new AllocatorUseArrayBuffer(new SharedArrayBuffer(allocator_size)); + this.allocator = new AllocatorUseArrayBuffer( + new SharedArrayBuffer(allocator_size), + ); } const max_fds_len = 128; this.lock_fds = new SharedArrayBuffer(4 * max_fds_len * 3); - this.fd_func_sig = new SharedArrayBuffer(fd_func_sig_u32_size * 4 * max_fds_len); + this.fd_func_sig = new SharedArrayBuffer( + fd_func_sig_u32_size * 4 * max_fds_len, + ); this.fds_len_and_num = new SharedArrayBuffer(8); const view = new Int32Array(this.fds_len_and_num); @@ -159,7 +157,7 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { // received and listen the fd // and set fds.length async notify_set_fd(fd: number) { - if (this.fds[fd] == undefined) { + if (this.fds[fd] === undefined) { throw new Error("fd is not defined"); } if (fd >= 128) { @@ -185,7 +183,7 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { (async () => { await this.listen_fds[fd]; this.listen_fds[fd] = undefined; - })() + })(); // console.log("notify_rm_fd", fd); // console.log("fds", this.fds); @@ -206,9 +204,8 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { can_set_new_fd(fd: number): [boolean, Promise | undefined] { if (this.listen_fds[fd] instanceof Promise) { return [false, this.listen_fds[fd]]; - } else { - return [true, undefined]; } + return [true, undefined]; } // listen all fds and base @@ -232,12 +229,12 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { Atomics.store(lock_view, 1, 0); // eslint-disable-next-line no-constant-condition - while(true) { + while (true) { try { let lock: "not-equal" | "timed-out" | "ok"; const { value } = Atomics.waitAsync(lock_view, 1, 0); - if ( value instanceof Promise) { + if (value instanceof Promise) { lock = await value; } else { lock = value; @@ -248,7 +245,7 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const func_number = Atomics.load(lock_view, 2); - switcher: switch (func_number) { + switch (func_number) { // set_fds_map: (fds_ptr: u32, fds_len: u32); case 0: { // console.log("set_fds_map"); @@ -278,7 +275,10 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { // console.log("listen_base fds_map", this.fds_map); - break switcher; + // sleep 1000ms + await new Promise((resolve) => setTimeout(resolve, 1000)); + + break; } } @@ -292,7 +292,7 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { console.warn("notify failed, waiter is late"); continue; } - throw new Error("notify failed: " + num); + throw new Error(`notify failed: ${num}`); } } catch (e) { console.error("error", e); @@ -310,7 +310,10 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const func_sig_view_u16 = new Uint16Array(this.fd_func_sig, bytes_offset); const func_sig_view_i32 = new Int32Array(this.fd_func_sig, bytes_offset); const func_sig_view_u32 = new Int32Array(this.fd_func_sig, bytes_offset); - const func_sig_view_u64 = new BigUint64Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u64 = new BigUint64Array( + this.fd_func_sig, + bytes_offset, + ); const errno_offset = fd_func_sig_u32_size - 1; Atomics.store(lock_view, 0, 0); Atomics.store(lock_view, 1, 0); @@ -322,7 +325,7 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { let lock: "not-equal" | "timed-out" | "ok"; const { value } = Atomics.waitAsync(lock_view, 1, 0); - if ( value instanceof Promise) { + if (value instanceof Promise) { // console.log("listen", fd_n, 1); lock = await value; } else { @@ -335,7 +338,7 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const func_lock = Atomics.load(lock_view, 1); if (func_lock !== 1) { - throw new Error("func_lock is already set: " + func_lock); + throw new Error(`func_lock is already set: ${func_lock}`); } // console.log("func_lock", func_lock); @@ -345,13 +348,13 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const set_error = (errno: number) => { // console.log("set_error", errno, "pointer", errno_offset); Atomics.store(func_sig_view_i32, errno_offset, errno); - } + }; const func_number = Atomics.load(func_sig_view_u32, 0); // console.log("called: func: ", get_func_name_from_number(func_number), "fd: ", fd_n); - switcher: switch (func_number) { + switch (func_number) { // fd_advise: (fd: u32) => errno; case 7: { const fd = Atomics.load(func_sig_view_u32, 1); @@ -359,7 +362,7 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const error = this.fd_advise(fd); set_error(error); - break switcher; + break; } // fd_allocate: (fd: u32, offset: u64, len: u64) => errno; case 8: { @@ -370,7 +373,7 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const error = this.fd_allocate(fd, offset, len); set_error(error); - break switcher; + break; } // fd_close: (fd: u32) => errno; case 9: { @@ -381,7 +384,7 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { // console.log("fd_close", fd, error); set_error(error); - break switcher; + break; } // fd_datasync: (fd: u32) => errno; case 10: { @@ -390,22 +393,22 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const error = this.fd_datasync(fd); set_error(error); - break switcher; + break; } // fd_fdstat_get: (fd: u32) => [wasi.Fdstat(u32 * 6)], errno]; case 11: { const fd = Atomics.load(func_sig_view_u32, 1); - const [ fdstat, ret ] = this.fd_fdstat_get(fd); + const [fdstat, ret] = this.fd_fdstat_get(fd); if (fdstat) { - Atomics.store(func_sig_view_u8, 0, fdstat.fs_filetype); - Atomics.store(func_sig_view_u16, 2, fdstat.fs_flags); - Atomics.store(func_sig_view_u64, 1, fdstat.fs_rights_base); - Atomics.store(func_sig_view_u64, 2, fdstat.fs_rights_inherited); + Atomics.store(func_sig_view_u8, 0, fdstat.fs_filetype); + Atomics.store(func_sig_view_u16, 2, fdstat.fs_flags); + Atomics.store(func_sig_view_u64, 1, fdstat.fs_rights_base); + Atomics.store(func_sig_view_u64, 2, fdstat.fs_rights_inherited); } set_error(ret); - break switcher; + break; } // fd_fdstat_set_flags: (fd: u32, flags: u16) => errno; case 12: { @@ -415,7 +418,7 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const error = this.fd_fdstat_set_flags(fd, flags); set_error(error); - break switcher; + break; } // fd_fdstat_set_rights: (fd: u32, fs_rights_base: u64, fs_rights_inheriting: u64) => errno; case 13: { @@ -423,30 +426,34 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const fs_rights_base = Atomics.load(func_sig_view_u64, 1); const fs_rights_inheriting = Atomics.load(func_sig_view_u64, 2); - const error = this.fd_fdstat_set_rights(fd, fs_rights_base, fs_rights_inheriting); + const error = this.fd_fdstat_set_rights( + fd, + fs_rights_base, + fs_rights_inheriting, + ); set_error(error); - break switcher; + break; } // fd_filestat_get: (fd: u32) => [wasi.Filestat(u32 * 16)], errno]; case 14: { const fd = Atomics.load(func_sig_view_u32, 1); - const [ filestat, ret ] = this.fd_filestat_get(fd); + const [filestat, ret] = this.fd_filestat_get(fd); if (filestat) { - Atomics.store(func_sig_view_u64, 0, filestat.dev); - Atomics.store(func_sig_view_u64, 1, filestat.ino); - Atomics.store(func_sig_view_u8, 16, filestat.filetype); - Atomics.store(func_sig_view_u64, 3, filestat.nlink); - Atomics.store(func_sig_view_u64, 4, filestat.size); - Atomics.store(func_sig_view_u64, 5, filestat.atim); - Atomics.store(func_sig_view_u64, 6, filestat.mtim); - Atomics.store(func_sig_view_u64, 7, filestat.ctim); + Atomics.store(func_sig_view_u64, 0, filestat.dev); + Atomics.store(func_sig_view_u64, 1, filestat.ino); + Atomics.store(func_sig_view_u8, 16, filestat.filetype); + Atomics.store(func_sig_view_u64, 3, filestat.nlink); + Atomics.store(func_sig_view_u64, 4, filestat.size); + Atomics.store(func_sig_view_u64, 5, filestat.atim); + Atomics.store(func_sig_view_u64, 6, filestat.mtim); + Atomics.store(func_sig_view_u64, 7, filestat.ctim); } set_error(ret); - break switcher; + break; } // fd_filestat_set_size: (fd: u32, size: u64) => errno; case 15: { @@ -456,7 +463,7 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const error = this.fd_filestat_set_size(fd, size); set_error(error); - break switcher; + break; } // fd_filestat_set_times: (fd: u32, atim: u64, mtim: u64, fst_flags: u16) => errno; case 16: { @@ -468,7 +475,7 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const error = this.fd_filestat_set_times(fd, atim, mtim, fst_flags); set_error(error); - break switcher; + break; } // fd_pread: (fd: u32, iovs_ptr: pointer, iovs_len: u32, offset: u64) => [u32, data_ptr, errno]; case 17: { @@ -476,7 +483,9 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const iovs_ptr = Atomics.load(func_sig_view_u32, 2); const iovs_ptr_len = Atomics.load(func_sig_view_u32, 3); const offset = Atomics.load(func_sig_view_u64, 2); - const data = new Uint32Array(this.allocator.get_memory(iovs_ptr, iovs_ptr_len)); + const data = new Uint32Array( + this.allocator.get_memory(iovs_ptr, iovs_ptr_len), + ); this.allocator.free(iovs_ptr, iovs_ptr_len); const iovecs = new Array(); @@ -493,40 +502,58 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { Atomics.store(func_sig_view_u32, 0, nread); } if (buffer8) { - await this.allocator.async_write(buffer8, this.fd_func_sig, fd * fd_func_sig_u32_size + 1); + await this.allocator.async_write( + buffer8, + this.fd_func_sig, + fd * fd_func_sig_u32_size + 1, + ); } set_error(error); - break switcher; + break; } // fd_prestat_get: (fd: u32) => [wasi.Prestat(u32 * 2)], errno]; case 18: { const fd = Atomics.load(func_sig_view_u32, 1); - const [ prestat, ret ] = this.fd_prestat_get(fd); + const [prestat, ret] = this.fd_prestat_get(fd); // console.log("fd_prestat_get", prestat, ret); if (prestat) { Atomics.store(func_sig_view_u32, 0, prestat.tag); - Atomics.store(func_sig_view_u32, 1, prestat.inner.pr_name.byteLength); + Atomics.store( + func_sig_view_u32, + 1, + prestat.inner.pr_name.byteLength, + ); } set_error(ret); - break switcher; + break; } // fd_prestat_dir_name: (fd: u32, path_len: u32) => [path_ptr: pointer, path_len: u32, errno]; case 19: { const fd = Atomics.load(func_sig_view_u32, 1); const path_len = Atomics.load(func_sig_view_u32, 2); - const [ prestat_dir_name, ret ] = this.fd_prestat_dir_name(fd, path_len); + const [prestat_dir_name, ret] = this.fd_prestat_dir_name( + fd, + path_len, + ); // console.log("fd_prestat_dir_name: park: ", prestat_dir_name); - if (prestat_dir_name && (ret === wasi.ERRNO_SUCCESS || ret === wasi.ERRNO_NAMETOOLONG)) { - await this.allocator.async_write(prestat_dir_name, this.fd_func_sig, fd * fd_func_sig_u32_size); + if ( + prestat_dir_name && + (ret === wasi.ERRNO_SUCCESS || ret === wasi.ERRNO_NAMETOOLONG) + ) { + await this.allocator.async_write( + prestat_dir_name, + this.fd_func_sig, + fd * fd_func_sig_u32_size, + ); } set_error(ret); - break switcher; + break; } // fd_pwrite: (fd: u32, write_data: pointer, write_data_len: u32, offset: u64) => [u32, errno]; case 20: { @@ -535,7 +562,9 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const write_data_len = Atomics.load(func_sig_view_u32, 3); const offset = Atomics.load(func_sig_view_u64, 2); - const data = new Uint8Array(this.allocator.get_memory(write_data_ptr, write_data_len)); + const data = new Uint8Array( + this.allocator.get_memory(write_data_ptr, write_data_len), + ); this.allocator.free(write_data_ptr, write_data_len); const [nwritten, error] = this.fd_pwrite(fd, data, offset); @@ -544,7 +573,7 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { Atomics.store(func_sig_view_u32, 0, nwritten); } set_error(error); - break switcher; + break; } // fd_read: (fd: u32, iovs_ptr: pointer, iovs_len: u32) => [u32, data_ptr, errno]; case 21: { @@ -553,7 +582,9 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const iovs_ptr_len = Atomics.load(func_sig_view_u32, 3); // console.log("fd_read: park: iovs: Uint8Array", this.allocator.get_memory(iovs_ptr, iovs_ptr_len)); // console.log("ptr_len", iovs_ptr_len); - const iovs = new Uint32Array(this.allocator.get_memory(iovs_ptr, iovs_ptr_len)); + const iovs = new Uint32Array( + this.allocator.get_memory(iovs_ptr, iovs_ptr_len), + ); this.allocator.free(iovs_ptr, iovs_ptr_len); // console.log("fd_read: park: iovs", iovs); @@ -576,10 +607,14 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { Atomics.store(func_sig_view_u32, 0, nread); } if (buffer8) { - await this.allocator.async_write(buffer8, this.fd_func_sig, fd * fd_func_sig_u32_size + 1); + await this.allocator.async_write( + buffer8, + this.fd_func_sig, + fd * fd_func_sig_u32_size + 1, + ); } set_error(error); - break switcher; + break; } // fd_readdir: (fd: u32, buf_len: u32, cookie: u64) => [buf_ptr: pointer, buf_len: u32, buf_used: u32, errno]; case 22: { @@ -587,22 +622,30 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const buf_len = Atomics.load(func_sig_view_u32, 2); const cookie = Atomics.load(func_sig_view_u64, 2); - const [[array, buf_used], error] = this.fd_readdir(fd, buf_len, cookie); + const [[array, buf_used], error] = this.fd_readdir( + fd, + buf_len, + cookie, + ); if (array) { - await this.allocator.async_write(array, this.fd_func_sig, fd * fd_func_sig_u32_size); + await this.allocator.async_write( + array, + this.fd_func_sig, + fd * fd_func_sig_u32_size, + ); } if (buf_used !== undefined) { Atomics.store(func_sig_view_u32, 2, buf_used); } set_error(error); - break switcher; + break; } // fd_seek: (fd: u32, offset: i64, whence: u8) => [u64, errno]; case 24: { const fd = Atomics.load(func_sig_view_u32, 1); const offset = Atomics.load(func_sig_view_u64, 1); - const whence = Atomics.load(func_sig_view_u8,16); + const whence = Atomics.load(func_sig_view_u8, 16); const [new_offset, error] = this.fd_seek(fd, offset, whence); @@ -610,7 +653,7 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { Atomics.store(func_sig_view_u64, 0, new_offset); } set_error(error); - break switcher; + break; } // fd_sync: (fd: u32) => errno; case 25: { @@ -619,7 +662,7 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const error = this.fd_sync(fd); set_error(error); - break switcher; + break; } // fd_tell: (fd: u32) => [u64, errno]; case 26: { @@ -631,7 +674,7 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { Atomics.store(func_sig_view_u64, 0, offset); } set_error(error); - break switcher; + break; } // fd_write: (fd: u32, write_data: pointer, write_data_len: u32) => [u32, errno]; case 27: { @@ -639,7 +682,9 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const write_data_ptr = Atomics.load(func_sig_view_u32, 2); const write_data_len = Atomics.load(func_sig_view_u32, 3); - const data = new Uint8Array(this.allocator.get_memory(write_data_ptr, write_data_len)); + const data = new Uint8Array( + this.allocator.get_memory(write_data_ptr, write_data_len), + ); this.allocator.free(write_data_ptr, write_data_len); // console.log("allocator", this.allocator); @@ -654,7 +699,7 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { Atomics.store(func_sig_view_u32, 0, nwritten); } set_error(error); - break switcher; + break; } // path_create_directory: (fd: u32, path_ptr: pointer, path_len: u32) => errno; case 28: { @@ -662,14 +707,16 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const path_ptr = Atomics.load(func_sig_view_u32, 2); const path_len = Atomics.load(func_sig_view_u32, 3); - const path = new Uint8Array(this.allocator.get_memory(path_ptr, path_len)); + const path = new Uint8Array( + this.allocator.get_memory(path_ptr, path_len), + ); const path_str = new TextDecoder().decode(path); this.allocator.free(path_ptr, path_len); const error = this.path_create_directory(fd, path_str); set_error(error); - break switcher; + break; } // path_filestat_get: (fd: u32, flags: u32, path_ptr: pointer, path_len: u32) => [wasi.Filestat(u32 * 16), errno]; case 29: { @@ -678,7 +725,9 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const path_ptr = Atomics.load(func_sig_view_u32, 3); const path_len = Atomics.load(func_sig_view_u32, 4); - const path = new Uint8Array(this.allocator.get_memory(path_ptr, path_len)); + const path = new Uint8Array( + this.allocator.get_memory(path_ptr, path_len), + ); const path_str = new TextDecoder().decode(path); this.allocator.free(path_ptr, path_len); @@ -687,7 +736,7 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { if (filestat) { Atomics.store(func_sig_view_u64, 0, filestat.dev); Atomics.store(func_sig_view_u64, 1, filestat.ino); - Atomics.store(func_sig_view_u8,16, filestat.filetype); + Atomics.store(func_sig_view_u8, 16, filestat.filetype); Atomics.store(func_sig_view_u64, 3, filestat.nlink); Atomics.store(func_sig_view_u64, 4, filestat.size); Atomics.store(func_sig_view_u64, 5, filestat.atim); @@ -695,7 +744,7 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { Atomics.store(func_sig_view_u64, 7, filestat.ctim); } set_error(ret); - break switcher; + break; } // path_filestat_set_times: (fd: u32, flags: u32, path_ptr: pointer, path_len: u32, atim: u64, mtim: u64, fst_flags: u16) => errno; case 30: { @@ -707,14 +756,23 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const mtim = Atomics.load(func_sig_view_u64, 4); const fst_flags = Atomics.load(func_sig_view_u16, 12); - const path = new Uint8Array(this.allocator.get_memory(path_ptr, path_len)); + const path = new Uint8Array( + this.allocator.get_memory(path_ptr, path_len), + ); const path_str = new TextDecoder().decode(path); this.allocator.free(path_ptr, path_len); - const error = this.path_filestat_set_times(fd, flags, path_str, atim, mtim, fst_flags); + const error = this.path_filestat_set_times( + fd, + flags, + path_str, + atim, + mtim, + fst_flags, + ); set_error(error); - break switcher; + break; } // path_link: (old_fd: u32, old_flags: u32, old_path_ptr: pointer, old_path_len: u32, new_fd: u32, new_path_ptr: pointer, new_path_len: u32) => errno; case 31: { @@ -726,17 +784,27 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const new_path_ptr = Atomics.load(func_sig_view_u32, 6); const new_path_len = Atomics.load(func_sig_view_u32, 7); - const old_path = new Uint8Array(this.allocator.get_memory(old_path_ptr, old_path_len)); + const old_path = new Uint8Array( + this.allocator.get_memory(old_path_ptr, old_path_len), + ); const old_path_str = new TextDecoder().decode(old_path); this.allocator.free(old_path_ptr, old_path_len); - const new_path = new Uint8Array(this.allocator.get_memory(new_path_ptr, new_path_len)); + const new_path = new Uint8Array( + this.allocator.get_memory(new_path_ptr, new_path_len), + ); const new_path_str = new TextDecoder().decode(new_path); this.allocator.free(new_path_ptr, new_path_len); - const error = this.path_link(old_fd, old_flags, old_path_str, new_fd, new_path_str); + const error = this.path_link( + old_fd, + old_flags, + old_path_str, + new_fd, + new_path_str, + ); set_error(error); - break switcher; + break; } // path_open: (fd: u32, dirflags: u32, path_ptr: pointer, path_len: u32, oflags: u32, fs_rights_base: u64, fs_rights_inheriting: u64, fdflags: u16) => [u32, errno]; case 32: { @@ -749,11 +817,21 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const fs_rights_inheriting = Atomics.load(func_sig_view_u64, 4); const fd_flags = Atomics.load(func_sig_view_u16, 20); - const path = new Uint8Array(this.allocator.get_memory(path_ptr, path_len)); + const path = new Uint8Array( + this.allocator.get_memory(path_ptr, path_len), + ); const path_str = new TextDecoder().decode(path); this.allocator.free(path_ptr, path_len); - const [opened_fd, error] = await this.path_open(fd, dirflags, path_str, oflags, fs_rights_base, fs_rights_inheriting, fd_flags); + const [opened_fd, error] = await this.path_open( + fd, + dirflags, + path_str, + oflags, + fs_rights_base, + fs_rights_inheriting, + fd_flags, + ); // console.log("path_open: opend_fd", opened_fd, error); @@ -761,7 +839,7 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { Atomics.store(func_sig_view_u32, 0, opened_fd); } set_error(error); - break switcher; + break; } // path_readlink: (fd: u32, path_ptr: pointer, path_len: u32, buf_len: u32) => [buf_len: u32, data_ptr: pointer, data_len: u32, errno]; case 33: { @@ -770,18 +848,24 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const path_len = Atomics.load(func_sig_view_u32, 3); const buf_len = Atomics.load(func_sig_view_u32, 4); - const path = new Uint8Array(this.allocator.get_memory(path_ptr, path_len)); + const path = new Uint8Array( + this.allocator.get_memory(path_ptr, path_len), + ); const path_str = new TextDecoder().decode(path); this.allocator.free(path_ptr, path_len); const [buf, error] = this.path_readlink(fd, path_str, buf_len); if (buf) { - await this.allocator.async_write(buf, this.fd_func_sig, fd * fd_func_sig_u32_size + 1); + await this.allocator.async_write( + buf, + this.fd_func_sig, + fd * fd_func_sig_u32_size + 1, + ); Atomics.store(func_sig_view_u32, 0, buf.byteLength); } set_error(error); - break switcher; + break; } // path_remove_directory: (fd: u32, path_ptr: pointer, path_len: u32) => errno; case 34: { @@ -789,14 +873,16 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const path_ptr = Atomics.load(func_sig_view_u32, 2); const path_len = Atomics.load(func_sig_view_u32, 3); - const path = new Uint8Array(this.allocator.get_memory(path_ptr, path_len)); + const path = new Uint8Array( + this.allocator.get_memory(path_ptr, path_len), + ); const path_str = new TextDecoder().decode(path); this.allocator.free(path_ptr, path_len); const error = this.path_remove_directory(fd, path_str); set_error(error); - break switcher; + break; } // path_rename: (old_fd: u32, old_path_ptr: pointer, old_path_len: u32, new_fd: u32, new_path_ptr: pointer, new_path_len: u32) => errno; case 35: { @@ -807,17 +893,26 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const new_path_ptr = Atomics.load(func_sig_view_u32, 5); const new_path_len = Atomics.load(func_sig_view_u32, 6); - const old_path = new Uint8Array(this.allocator.get_memory(old_path_ptr, old_path_len)); + const old_path = new Uint8Array( + this.allocator.get_memory(old_path_ptr, old_path_len), + ); const old_path_str = new TextDecoder().decode(old_path); this.allocator.free(old_path_ptr, old_path_len); - const new_path = new Uint8Array(this.allocator.get_memory(new_path_ptr, new_path_len)); + const new_path = new Uint8Array( + this.allocator.get_memory(new_path_ptr, new_path_len), + ); const new_path_str = new TextDecoder().decode(new_path); this.allocator.free(new_path_ptr, new_path_len); - const error = this.path_rename(fd, old_path_str, new_fd, new_path_str); + const error = this.path_rename( + fd, + old_path_str, + new_fd, + new_path_str, + ); set_error(error); - break switcher; + break; } // path_symlink: (old_path_ptr: pointer, old_path_len: u32, fd: u32, new_path_ptr: pointer, new_path_len: u32) => errno; case 36: { @@ -827,15 +922,19 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const new_path_ptr = Atomics.load(func_sig_view_u32, 4); const new_path_len = Atomics.load(func_sig_view_u32, 5); - const old_path = new Uint8Array(this.allocator.get_memory(old_path_ptr, old_path_len)); + const old_path = new Uint8Array( + this.allocator.get_memory(old_path_ptr, old_path_len), + ); const old_path_str = new TextDecoder().decode(old_path); this.allocator.free(old_path_ptr, old_path_len); - const new_path = new Uint8Array(this.allocator.get_memory(new_path_ptr, new_path_len)); + const new_path = new Uint8Array( + this.allocator.get_memory(new_path_ptr, new_path_len), + ); const new_path_str = new TextDecoder().decode(new_path); this.allocator.free(new_path_ptr, new_path_len); set_error(this.path_symlink(old_path_str, fd, new_path_str)); - break switcher; + break; } // path_unlink_file: (fd: u32, path_ptr: pointer, path_len: u32) => errno; case 37: { @@ -843,21 +942,25 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { const path_ptr = Atomics.load(func_sig_view_u32, 2); const path_len = Atomics.load(func_sig_view_u32, 3); - const path = new Uint8Array(this.allocator.get_memory(path_ptr, path_len)); + const path = new Uint8Array( + this.allocator.get_memory(path_ptr, path_len), + ); const path_str = new TextDecoder().decode(path); this.allocator.free(path_ptr, path_len); set_error(this.path_unlink_file(fd, path_str)); - break switcher; + break; } default: { - throw new Error("Unknown function number: " + func_number); + throw new Error(`Unknown function number: ${func_number}`); } } const old_call_lock = Atomics.exchange(lock_view, 1, 0); if (old_call_lock !== 1) { - throw new Error("Call is already set: " + old_call_lock + "\nfunc: " + get_func_name_from_number(func_number) + "\nfd: " + fd_n); + throw new Error( + `Call is already set: ${old_call_lock}\nfunc: ${get_func_name_from_number(func_number)}\nfd: ${fd_n}`, + ); } // console.log("called end: func: ", get_func_name_from_number(func_number), "fd: ", fd_n); @@ -867,7 +970,7 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { if (n === 0) { console.warn("notify number is 0. ref is late?"); } else { - console.warn("notify number is not 1: " + n); + console.warn(`notify number is not 1: ${n}`); } } diff --git a/src/wasi_farm/shared_array_buffer/ref.ts b/src/wasi_farm/shared_array_buffer/ref.ts index 7405a7c..acae92b 100644 --- a/src/wasi_farm/shared_array_buffer/ref.ts +++ b/src/wasi_farm/shared_array_buffer/ref.ts @@ -1,8 +1,14 @@ -import { WASIFarmRef, WASIFarmRefObject } from "../ref.js"; -import { AllocatorUseArrayBuffer, AllocatorUseArrayBufferObject } from "./allocator.js"; -import { fd_func_sig_bytes, fd_func_sig_u32_size } from "./park.js"; import * as wasi from "../../wasi_defs.js"; -import { FdCloseSenderUseArrayBuffer, FdCloseSenderUseArrayBufferObject } from "./fd_close_sender.js"; +import { WASIFarmRef, type WASIFarmRefObject } from "../ref.js"; +import { + AllocatorUseArrayBuffer, + type AllocatorUseArrayBufferObject, +} from "./allocator.js"; +import { + FdCloseSenderUseArrayBuffer, + type FdCloseSenderUseArrayBufferObject, +} from "./fd_close_sender.js"; +import { fd_func_sig_bytes, fd_func_sig_u32_size } from "./park.js"; export type WASIFarmRefUseArrayBufferObject = { allocator: AllocatorUseArrayBuffer; @@ -35,7 +41,13 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { stderr: number | undefined, default_fds: Array, ) { - super(stdin, stdout, stderr, FdCloseSenderUseArrayBuffer.init_self(fd_close_receiver), default_fds); + super( + stdin, + stdout, + stderr, + FdCloseSenderUseArrayBuffer.init_self(fd_close_receiver), + default_fds, + ); this.allocator = AllocatorUseArrayBuffer.init_self(allocator); this.lock_fds = lock_fds; this.fd_func_sig = fd_func_sig; @@ -216,7 +228,7 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { const view = new Int32Array(this.lock_fds, fd * 12 + 4); const old = Atomics.exchange(view, 0, 1); if (old === 1) { - console.error("invoke_fd_func already invoked\n" + "fd: " + fd); + console.error(`invoke_fd_func already invoked\nfd: ${fd}`); return; } const n = Atomics.notify(view, 0); @@ -231,10 +243,9 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { Atomics.notify(view, 0, 1); console.error("what happened?: len", len, "fd", fd); return true; - } else { - console.warn("invoke_func_loop is late"); - return true; } + console.warn("invoke_func_loop is late"); + return true; } console.error("invoke_fd_func notify failed:", n); return false; @@ -263,18 +274,22 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { } private get_error(fd: number): number { - const func_sig_view_i32 = new Int32Array(this.fd_func_sig, fd * fd_func_sig_bytes); + const func_sig_view_i32 = new Int32Array( + this.fd_func_sig, + fd * fd_func_sig_bytes, + ); const errno_offset = fd_func_sig_u32_size - 1; // console.log("get_error: offset", errno_offset); return Atomics.load(func_sig_view_i32, errno_offset); } - fd_advise( - fd: number, - ): number { + fd_advise(fd: number): number { this.lock_fd(fd); - const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, fd * fd_func_sig_bytes); + const func_sig_view_u32 = new Uint32Array( + this.fd_func_sig, + fd * fd_func_sig_bytes, + ); Atomics.store(func_sig_view_u32, 0, 7); Atomics.store(func_sig_view_u32, 1, fd); @@ -291,16 +306,15 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { return error; } - fd_allocate( - fd: number, - offset: bigint, - len: bigint, - ): number { + fd_allocate(fd: number, offset: bigint, len: bigint): number { this.lock_fd(fd); const bytes_offset = fd * fd_func_sig_bytes; const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); - const func_sig_view_u64 = new BigUint64Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u64 = new BigUint64Array( + this.fd_func_sig, + bytes_offset, + ); Atomics.store(func_sig_view_u32, 0, 8); Atomics.store(func_sig_view_u32, 1, fd); @@ -319,9 +333,7 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { return error; } - fd_close( - fd: number, - ): number { + fd_close(fd: number): number { this.lock_fd(fd); const bytes_offset = fd * fd_func_sig_bytes; @@ -348,9 +360,7 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { return error; } - fd_datasync( - fd: number, - ): number { + fd_datasync(fd: number): number { this.lock_fd(fd); const bytes_offset = fd * fd_func_sig_bytes; @@ -371,16 +381,17 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { return error; } - fd_fdstat_get( - fd: number, - ): [wasi.Fdstat | undefined, number] { + fd_fdstat_get(fd: number): [wasi.Fdstat | undefined, number] { this.lock_fd(fd); const bytes_offset = fd * fd_func_sig_bytes; const func_sig_view_u8 = new Uint8Array(this.fd_func_sig, bytes_offset); const func_sig_view_u16 = new Uint16Array(this.fd_func_sig, bytes_offset); const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); - const func_sig_view_u64 = new BigUint64Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u64 = new BigUint64Array( + this.fd_func_sig, + bytes_offset, + ); Atomics.store(func_sig_view_u32, 0, 11); Atomics.store(func_sig_view_u32, 1, fd); @@ -404,20 +415,14 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { this.release_fd(fd); - const fd_stat = new wasi.Fdstat( - fs_filetype, - fs_flags, - ); + const fd_stat = new wasi.Fdstat(fs_filetype, fs_flags); fd_stat.fs_rights_base = fs_rights_base; fd_stat.fs_rights_inherited = fs_rights_inheriting; return [fd_stat, error]; } - fd_fdstat_set_flags( - fd: number, - flags: number, - ): number { + fd_fdstat_set_flags(fd: number, flags: number): number { this.lock_fd(fd); const bytes_offset = fd * fd_func_sig_bytes; @@ -449,7 +454,10 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { const bytes_offset = fd * fd_func_sig_bytes; const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); - const func_sig_view_u64 = new BigUint64Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u64 = new BigUint64Array( + this.fd_func_sig, + bytes_offset, + ); Atomics.store(func_sig_view_u32, 0, 13); Atomics.store(func_sig_view_u32, 1, fd); @@ -468,15 +476,16 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { return error; } - fd_filestat_get( - fd: number, - ): [wasi.Filestat | undefined, number] { + fd_filestat_get(fd: number): [wasi.Filestat | undefined, number] { this.lock_fd(fd); const bytes_offset = fd * fd_func_sig_bytes; const func_sig_view_u8 = new Uint8Array(this.fd_func_sig, bytes_offset); const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); - const func_sig_view_u64 = new BigUint64Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u64 = new BigUint64Array( + this.fd_func_sig, + bytes_offset, + ); Atomics.store(func_sig_view_u32, 0, 14); Atomics.store(func_sig_view_u32, 1, fd); @@ -504,9 +513,7 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { this.release_fd(fd); - const file_stat = new wasi.Filestat( - fs_filetype, fs_size - ); + const file_stat = new wasi.Filestat(fs_filetype, fs_size); file_stat.dev = fs_dev; file_stat.ino = fs_ino; file_stat.nlink = fs_nlink; @@ -517,15 +524,15 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { return [file_stat, error]; } - fd_filestat_set_size( - fd: number, - size: bigint, - ): number { + fd_filestat_set_size(fd: number, size: bigint): number { this.lock_fd(fd); const bytes_offset = fd * fd_func_sig_bytes; const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); - const func_sig_view_u64 = new BigUint64Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u64 = new BigUint64Array( + this.fd_func_sig, + bytes_offset, + ); Atomics.store(func_sig_view_u32, 0, 15); Atomics.store(func_sig_view_u32, 1, fd); @@ -554,7 +561,10 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { const bytes_offset = fd * fd_func_sig_bytes; const func_sig_view_u16 = new Uint16Array(this.fd_func_sig, bytes_offset); const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); - const func_sig_view_u64 = new BigUint64Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u64 = new BigUint64Array( + this.fd_func_sig, + bytes_offset, + ); Atomics.store(func_sig_view_u32, 0, 16); Atomics.store(func_sig_view_u32, 1, fd); @@ -583,11 +593,18 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { const bytes_offset = fd * fd_func_sig_bytes; const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); - const func_sig_view_u64 = new BigUint64Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u64 = new BigUint64Array( + this.fd_func_sig, + bytes_offset, + ); Atomics.store(func_sig_view_u32, 0, 17); Atomics.store(func_sig_view_u32, 1, fd); - const [ptr, len] = this.allocator.block_write(iovs, this.fd_func_sig, fd * fd_func_sig_u32_size + 2); + const [ptr, len] = this.allocator.block_write( + iovs, + this.fd_func_sig, + fd * fd_func_sig_u32_size + 2, + ); Atomics.store(func_sig_view_u64, 2, offset); if (!this.call_fd_func(fd)) { @@ -619,9 +636,7 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { return [[nread, buf], error]; } - fd_prestat_get( - fd: number, - ): [[number, number] | undefined, number] { + fd_prestat_get(fd: number): [[number, number] | undefined, number] { this.lock_fd(fd); const bytes_offset = fd * fd_func_sig_bytes; @@ -679,7 +694,9 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { return [undefined, error]; } - const ret_path = new Uint8Array(this.allocator.get_memory(ret_path_ptr, ret_path_len)); + const ret_path = new Uint8Array( + this.allocator.get_memory(ret_path_ptr, ret_path_len), + ); this.allocator.free(ret_path_ptr, ret_path_len); return [ret_path, error]; @@ -694,11 +711,18 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { const bytes_offset = fd * fd_func_sig_bytes; const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); - const func_sig_view_u64 = new BigUint64Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u64 = new BigUint64Array( + this.fd_func_sig, + bytes_offset, + ); Atomics.store(func_sig_view_u32, 0, 20); Atomics.store(func_sig_view_u32, 1, fd); - const [ptr, len] = this.allocator.block_write(write_data, this.fd_func_sig, fd * fd_func_sig_u32_size + 2); + const [ptr, len] = this.allocator.block_write( + write_data, + this.fd_func_sig, + fd * fd_func_sig_u32_size + 2, + ); Atomics.store(func_sig_view_u64, 2, offset); if (!this.call_fd_func(fd)) { @@ -736,7 +760,11 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { // console.log("fd_read: ref: iovs", iovs); // console.log("iovs.buffer", iovs.buffer.slice(0, iovs.byteLength)); - const [ptr, len] = this.allocator.block_write(iovs, this.fd_func_sig, fd * fd_func_sig_u32_size + 2); + const [ptr, len] = this.allocator.block_write( + iovs, + this.fd_func_sig, + fd * fd_func_sig_u32_size + 2, + ); // console.log("fd_read: ref: iovs", iovs); @@ -787,7 +815,10 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { const bytes_offset = fd * fd_func_sig_bytes; const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); - const func_sig_view_u64 = new BigUint64Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u64 = new BigUint64Array( + this.fd_func_sig, + bytes_offset, + ); Atomics.store(func_sig_view_u32, 0, 22); Atomics.store(func_sig_view_u32, 1, fd); @@ -854,7 +885,10 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { const bytes_offset = fd * fd_func_sig_bytes; const func_sig_view_u8 = new Uint8Array(this.fd_func_sig, bytes_offset); const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); - const func_sig_view_u64 = new BigUint64Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u64 = new BigUint64Array( + this.fd_func_sig, + bytes_offset, + ); Atomics.store(func_sig_view_u32, 0, 24); Atomics.store(func_sig_view_u32, 1, fd); @@ -880,9 +914,7 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { return [new_offset, error]; } - fd_sync( - fd: number, - ): number { + fd_sync(fd: number): number { this.lock_fd(fd); const bytes_offset = fd * fd_func_sig_bytes; @@ -903,14 +935,15 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { return error; } - fd_tell( - fd: number, - ): [bigint | undefined, number] { + fd_tell(fd: number): [bigint | undefined, number] { this.lock_fd(fd); const bytes_offset = fd * fd_func_sig_bytes; const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); - const func_sig_view_u64 = new BigUint64Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u64 = new BigUint64Array( + this.fd_func_sig, + bytes_offset, + ); Atomics.store(func_sig_view_u32, 0, 26); Atomics.store(func_sig_view_u32, 1, fd); @@ -934,10 +967,7 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { return [offset, error]; } - fd_write( - fd: number, - write_data: Uint8Array, - ): [number | undefined, number] { + fd_write(fd: number, write_data: Uint8Array): [number | undefined, number] { this.lock_fd(fd); // console.log("fd_write: ref: write_data", new TextDecoder().decode(write_data)); @@ -947,7 +977,11 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { Atomics.store(func_sig_view_u32, 0, 27); Atomics.store(func_sig_view_u32, 1, fd); - const [ptr, len] = this.allocator.block_write(write_data, this.fd_func_sig, fd * fd_func_sig_u32_size +2); + const [ptr, len] = this.allocator.block_write( + write_data, + this.fd_func_sig, + fd * fd_func_sig_u32_size + 2, + ); if (!this.call_fd_func(fd)) { // console.log("fd_write: ref: error", "wasi.ERRNO_BADF"); @@ -975,10 +1009,7 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { return [nwritten, error]; } - path_create_directory( - fd: number, - path: Uint8Array, - ): number { + path_create_directory(fd: number, path: Uint8Array): number { this.lock_fd(fd); const bytes_offset = fd * fd_func_sig_bytes; @@ -986,7 +1017,11 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { Atomics.store(func_sig_view_u32, 0, 28); Atomics.store(func_sig_view_u32, 1, fd); - const [ptr, len] = this.allocator.block_write(path, this.fd_func_sig, fd * fd_func_sig_u32_size + 2); + const [ptr, len] = this.allocator.block_write( + path, + this.fd_func_sig, + fd * fd_func_sig_u32_size + 2, + ); if (!this.call_fd_func(fd)) { this.allocator.free(ptr, len); @@ -1011,12 +1046,19 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { const bytes_offset = fd * fd_func_sig_bytes; const func_sig_view_u8 = new Uint8Array(this.fd_func_sig, bytes_offset); const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); - const func_sig_view_u64 = new BigUint64Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u64 = new BigUint64Array( + this.fd_func_sig, + bytes_offset, + ); Atomics.store(func_sig_view_u32, 0, 29); Atomics.store(func_sig_view_u32, 1, fd); Atomics.store(func_sig_view_u32, 2, flags); - const [ptr, len] = this.allocator.block_write(path, this.fd_func_sig, fd * fd_func_sig_u32_size + 3); + const [ptr, len] = this.allocator.block_write( + path, + this.fd_func_sig, + fd * fd_func_sig_u32_size + 3, + ); if (!this.call_fd_func(fd)) { this.allocator.free(ptr, len); @@ -1042,9 +1084,7 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { this.release_fd(fd); - const file_stat = new wasi.Filestat( - fs_filetype, fs_size - ); + const file_stat = new wasi.Filestat(fs_filetype, fs_size); file_stat.dev = fs_dev; file_stat.ino = fs_ino; file_stat.nlink = fs_nlink; @@ -1068,12 +1108,19 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { const bytes_offset = fd * fd_func_sig_bytes; const func_sig_view_u16 = new Uint16Array(this.fd_func_sig, bytes_offset); const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); - const func_sig_view_u64 = new BigUint64Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u64 = new BigUint64Array( + this.fd_func_sig, + bytes_offset, + ); Atomics.store(func_sig_view_u32, 0, 30); Atomics.store(func_sig_view_u32, 1, fd); Atomics.store(func_sig_view_u32, 2, flags); - const [ptr, len] = this.allocator.block_write(path, this.fd_func_sig, fd * fd_func_sig_u32_size + 3); + const [ptr, len] = this.allocator.block_write( + path, + this.fd_func_sig, + fd * fd_func_sig_u32_size + 3, + ); Atomics.store(func_sig_view_u64, 3, st_atim); Atomics.store(func_sig_view_u64, 4, st_mtim); Atomics.store(func_sig_view_u16, 12, fst_flags); @@ -1106,9 +1153,17 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { Atomics.store(func_sig_view_u32, 0, 31); Atomics.store(func_sig_view_u32, 1, old_fd); Atomics.store(func_sig_view_u32, 2, old_flags); - const [ptr1, len1] = this.allocator.block_write(old_path, this.fd_func_sig, old_fd * fd_func_sig_u32_size + 3); + const [ptr1, len1] = this.allocator.block_write( + old_path, + this.fd_func_sig, + old_fd * fd_func_sig_u32_size + 3, + ); Atomics.store(func_sig_view_u32, 5, new_fd); - const [ptr2, len2] = this.allocator.block_write(new_path, this.fd_func_sig, old_fd * fd_func_sig_u32_size + 6); + const [ptr2, len2] = this.allocator.block_write( + new_path, + this.fd_func_sig, + old_fd * fd_func_sig_u32_size + 6, + ); if (!this.call_fd_func(old_fd)) { this.allocator.free(ptr1, len1); @@ -1138,12 +1193,19 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { const bytes_offset = fd * fd_func_sig_bytes; const func_sig_view_u16 = new Uint16Array(this.fd_func_sig, bytes_offset); const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); - const func_sig_view_u64 = new BigUint64Array(this.fd_func_sig, bytes_offset); + const func_sig_view_u64 = new BigUint64Array( + this.fd_func_sig, + bytes_offset, + ); Atomics.store(func_sig_view_u32, 0, 32); Atomics.store(func_sig_view_u32, 1, fd); Atomics.store(func_sig_view_u32, 2, dirflags); - const [ptr, len] = this.allocator.block_write(path, this.fd_func_sig, fd * fd_func_sig_u32_size + 3); + const [ptr, len] = this.allocator.block_write( + path, + this.fd_func_sig, + fd * fd_func_sig_u32_size + 3, + ); Atomics.store(func_sig_view_u32, 5, oflags); Atomics.store(func_sig_view_u64, 3, fs_rights_base); Atomics.store(func_sig_view_u64, 4, fs_rights_inheriting); @@ -1180,7 +1242,11 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { Atomics.store(func_sig_view_u32, 0, 33); Atomics.store(func_sig_view_u32, 1, fd); - const [ptr, len] = this.allocator.block_write(path, this.fd_func_sig, fd * fd_func_sig_u32_size + 2); + const [ptr, len] = this.allocator.block_write( + path, + this.fd_func_sig, + fd * fd_func_sig_u32_size + 2, + ); Atomics.store(func_sig_view_u32, 4, buf_len); if (!this.call_fd_func(fd)) { @@ -1201,16 +1267,15 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { return [undefined, error]; } - const ret_path = new Uint8Array(this.allocator.get_memory(ret_path_ptr, ret_path_len)); + const ret_path = new Uint8Array( + this.allocator.get_memory(ret_path_ptr, ret_path_len), + ); const ret_path_slice = ret_path.slice(0, nread); return [ret_path_slice, error]; } - path_remove_directory( - fd: number, - path: Uint8Array, - ): number { + path_remove_directory(fd: number, path: Uint8Array): number { this.lock_fd(fd); const bytes_offset = fd * fd_func_sig_bytes; @@ -1218,7 +1283,11 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { Atomics.store(func_sig_view_u32, 0, 34); Atomics.store(func_sig_view_u32, 1, fd); - const [ptr, len] = this.allocator.block_write(path, this.fd_func_sig, fd * fd_func_sig_u32_size + 2); + const [ptr, len] = this.allocator.block_write( + path, + this.fd_func_sig, + fd * fd_func_sig_u32_size + 2, + ); if (!this.call_fd_func(fd)) { this.allocator.free(ptr, len); @@ -1246,9 +1315,17 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { Atomics.store(func_sig_view_u32, 0, 35); Atomics.store(func_sig_view_u32, 1, old_fd); - const [ptr1, len1] = this.allocator.block_write(old_path, this.fd_func_sig, old_fd * fd_func_sig_u32_size + 2); + const [ptr1, len1] = this.allocator.block_write( + old_path, + this.fd_func_sig, + old_fd * fd_func_sig_u32_size + 2, + ); Atomics.store(func_sig_view_u32, 4, new_fd); - const [ptr2, len2] = this.allocator.block_write(new_path, this.fd_func_sig, old_fd * fd_func_sig_u32_size + 5); + const [ptr2, len2] = this.allocator.block_write( + new_path, + this.fd_func_sig, + old_fd * fd_func_sig_u32_size + 5, + ); if (!this.call_fd_func(old_fd)) { this.allocator.free(ptr1, len1); @@ -1264,20 +1341,24 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { return error; } - path_symlink( - old_path: Uint8Array, - fd: number, - new_path: Uint8Array, - ): number { + path_symlink(old_path: Uint8Array, fd: number, new_path: Uint8Array): number { this.lock_fd(fd); const bytes_offset = fd * fd_func_sig_bytes; const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); Atomics.store(func_sig_view_u32, 0, 36); - const [ptr1, len1] = this.allocator.block_write(old_path, this.fd_func_sig, fd * fd_func_sig_u32_size + 1); + const [ptr1, len1] = this.allocator.block_write( + old_path, + this.fd_func_sig, + fd * fd_func_sig_u32_size + 1, + ); Atomics.store(func_sig_view_u32, 3, fd); - const [ptr2, len2] = this.allocator.block_write(new_path, this.fd_func_sig, fd * fd_func_sig_u32_size + 4); + const [ptr2, len2] = this.allocator.block_write( + new_path, + this.fd_func_sig, + fd * fd_func_sig_u32_size + 4, + ); if (!this.call_fd_func(fd)) { this.allocator.free(ptr1, len1); @@ -1293,10 +1374,7 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { return error; } - path_unlink_file( - fd: number, - path: Uint8Array, - ): number { + path_unlink_file(fd: number, path: Uint8Array): number { this.lock_fd(fd); const bytes_offset = fd * fd_func_sig_bytes; @@ -1304,7 +1382,11 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { Atomics.store(func_sig_view_u32, 0, 37); Atomics.store(func_sig_view_u32, 1, fd); - const [ptr, len] = this.allocator.block_write(path, this.fd_func_sig, fd * fd_func_sig_u32_size + 2); + const [ptr, len] = this.allocator.block_write( + path, + this.fd_func_sig, + fd * fd_func_sig_u32_size + 2, + ); if (!this.call_fd_func(fd)) { this.allocator.free(ptr, len); diff --git a/src/wasi_farm/shared_array_buffer/sender.ts b/src/wasi_farm/shared_array_buffer/sender.ts index 42b54d1..252e36b 100644 --- a/src/wasi_farm/shared_array_buffer/sender.ts +++ b/src/wasi_farm/shared_array_buffer/sender.ts @@ -1,7 +1,7 @@ export type ToRefSenderUseArrayBufferObject = { data_size: number; share_arrays_memory?: SharedArrayBuffer; -} +}; // To ref sender abstract class export abstract class ToRefSenderUseArrayBuffer { @@ -53,12 +53,10 @@ export abstract class ToRefSenderUseArrayBuffer { Atomics.store(view, 2, 12); } - protected static init_self_inner( - sl: ToRefSenderUseArrayBufferObject, - ): { - data_size: number, - max_share_arrays_memory: number, - share_arrays_memory: SharedArrayBuffer, + protected static init_self_inner(sl: ToRefSenderUseArrayBufferObject): { + data_size: number; + max_share_arrays_memory: number; + share_arrays_memory: SharedArrayBuffer; } { return { data_size: sl.data_size, @@ -121,7 +119,7 @@ export abstract class ToRefSenderUseArrayBuffer { const used_len = Atomics.load(view, 2); const data_len = data.byteLength; if (data_len !== this.data_size) { - throw new Error("invalid data size: " + data_len + " !== " + this.data_size); + throw new Error(`invalid data size: ${data_len} !== ${this.data_size}`); } const new_used_len = used_len + data_len + 8 + targets.length * 4; if (new_used_len > this.share_arrays_memory.byteLength) { @@ -135,7 +133,10 @@ export abstract class ToRefSenderUseArrayBuffer { header[1] = targets.length; header.set(targets, 2); - const data_view = new Uint32Array(this.share_arrays_memory, used_len + 8 + targets.length * 4); + const data_view = new Uint32Array( + this.share_arrays_memory, + used_len + 8 + targets.length * 4, + ); data_view.set(data); // console.log("async_send send", targets, data); @@ -145,9 +146,7 @@ export abstract class ToRefSenderUseArrayBuffer { this.release_lock(); } - protected get_data( - id: number, - ): Array | undefined { + protected get_data(id: number): Array | undefined { const view = new Int32Array(this.share_arrays_memory); const data_num_tmp = Atomics.load(view, 1); if (data_num_tmp === 0) { @@ -166,10 +165,18 @@ export abstract class ToRefSenderUseArrayBuffer { // console.log("this.share_arrays_memory", this.share_arrays_memory); const header = new Int32Array(this.share_arrays_memory, offset); const target_num = header[1]; - const targets = new Int32Array(this.share_arrays_memory, offset + 8, target_num); + const targets = new Int32Array( + this.share_arrays_memory, + offset + 8, + target_num, + ); const data_len = this.data_size; if (targets.includes(id)) { - const data = new Uint32Array(this.share_arrays_memory, offset + 8 + target_num * 4, data_len / 4); + const data = new Uint32Array( + this.share_arrays_memory, + offset + 8 + target_num * 4, + data_len / 4, + ); // なぜかわからないが、上では正常に動作せず、以下のようにすると動作する // return_data.push(new Uint32Array(data)); @@ -185,7 +192,10 @@ export abstract class ToRefSenderUseArrayBuffer { const new_used_len = used_len - data_len - 8 - target_num * 4; Atomics.store(view, 2, new_used_len); const next_data_offset = offset + data_len + 8 + target_num * 4; - const next_tail = new Int32Array(this.share_arrays_memory, next_data_offset); + const next_tail = new Int32Array( + this.share_arrays_memory, + next_data_offset, + ); const now_tail = new Int32Array(this.share_arrays_memory, offset); now_tail.set(next_tail); // console.log("new_used_len", new_used_len); @@ -199,7 +209,7 @@ export abstract class ToRefSenderUseArrayBuffer { } if (offset !== Atomics.load(view, 2)) { - throw new Error("invalid offset: " + offset + " !== " + Atomics.load(view, 2)); + throw new Error(`invalid offset: ${offset} !== ${Atomics.load(view, 2)}`); } this.release_lock(); diff --git a/src/wasi_farm/shared_array_buffer/thread_spawn.ts b/src/wasi_farm/shared_array_buffer/thread_spawn.ts new file mode 100644 index 0000000..dc3ba3b --- /dev/null +++ b/src/wasi_farm/shared_array_buffer/thread_spawn.ts @@ -0,0 +1,410 @@ +// (export "wasi_thread_start" (func $61879)) +// (func $61879 (param $0 i32) (param $1 i32) +// (local $2 i32) +// (local $3 i32) +// (local $4 i32) +// (local $5 i32) +// (local $6 i32) +// (local $7 i32) +// (global.set $global$0 +// (i32.load +// (local.get $1) +// ) +// ) + +// (import "wasi" "thread-spawn" (func $fimport$27 (param i32) (result i32))) + +import { WASIFarmAnimal } from "../animals.js"; +import type { WASIFarmRefObject } from "../ref.js"; +import type { WorkerBackgroundRefObject } from "./worker_background/index.js"; +import { + WorkerBackgroundRef, + worker_background_worker_url, +} from "./worker_background/index.js"; +import { WorkerBackgroundRefObjectConstructor } from "./worker_background/worker_export.js"; + +type ThreadSpawnerObject = { + share_memory: WebAssembly.Memory; + wasi_farm_refs_object: Array; + worker_url: string; + worker_background_ref_object: WorkerBackgroundRefObject; + // inst_default_buffer_kept: WebAssembly.Memory; +}; + +export class ThreadSpawner { + private share_memory: WebAssembly.Memory; + private wasi_farm_refs_object: Array; + private worker_url: string; + private worker_background_ref: WorkerBackgroundRef; + private worker_background_ref_object: WorkerBackgroundRefObject; + // inst_default_buffer_kept: WebAssembly.Memory; + + // hold the worker to prevent GC. + private worker_background_worker?: Worker; + private worker_background_worker_promise?: Promise; + + // https://github.com/rustwasm/wasm-pack/issues/479 + + constructor( + worker_url: string, + wasi_farm_refs_object: Array, + share_memory?: WebAssembly.Memory, + // 16MB for the time being. + // https://users.rust-lang.org/t/what-is-the-size-limit-of-threads-stack-in-rust/11867/3 + MIN_STACK = 16777216, + worker_background_ref_object?: WorkerBackgroundRefObject, + thread_spawn_wasm?: WebAssembly.Module, + // inst_default_buffer_kept?: WebAssembly.Memory, + ) { + this.worker_url = worker_url; + this.wasi_farm_refs_object = wasi_farm_refs_object; + + const min_initial_size = 1048576 / 65536; // Rust's default stack size is 1MB. + const initial_size = MIN_STACK / 65536; + if (initial_size < min_initial_size) { + throw new Error( + `The stack size must be at least ${min_initial_size} bytes.`, + ); + } + const max_memory = 1073741824 / 65536; // Rust's default maximum memory size is 1GB. + + // this.inst_default_buffer_kept = + // inst_default_buffer_kept || + // new WebAssembly.Memory({ + // initial: 1, + // maximum: max_memory, + // shared: true, + // }); + + this.share_memory = + share_memory || + // WebAssembly.Memory's 1 page is 65536 bytes. + new WebAssembly.Memory({ + initial: initial_size, + maximum: max_memory, + shared: true, + }); + + if (worker_background_ref_object === undefined) { + const worker_background_worker_url__ = worker_background_worker_url(); + this.worker_background_worker = new Worker( + worker_background_worker_url__, + { type: "module" }, + ); + URL.revokeObjectURL(worker_background_worker_url__); + const { promise, resolve } = Promise.withResolvers(); + this.worker_background_worker_promise = promise; + this.worker_background_worker.onmessage = () => { + this.worker_background_worker_promise = undefined; + resolve(); + }; + this.worker_background_ref_object = + WorkerBackgroundRefObjectConstructor(); + this.worker_background_ref = WorkerBackgroundRef.init_self( + this.worker_background_ref_object, + ); + this.worker_background_worker.postMessage({ + override_object: { + sl_object: this.get_object(), + thread_spawn_wasm, + }, + worker_background_ref_object: this.worker_background_ref_object, + }); + } else { + this.worker_background_ref = WorkerBackgroundRef.init_self( + worker_background_ref_object, + ); + } + } + + // This cannot blocking. + async wait_worker_background_worker(): Promise { + if (this.worker_background_worker_promise) { + const promise = this.worker_background_worker_promise; + + await promise; + + return; + } + return; + } + + check_worker_background_worker(): void { + if (this.worker_background_worker_promise) { + throw new Error("worker_background_worker is not ready."); + } + } + + thread_spawn( + start_arg: number, + args: Array, + env: Array, + fd_map: Array<[number, number]>, + ): number { + const worker = this.worker_background_ref.new_worker( + this.worker_url, + { type: "module" }, + { + this_is_thread_spawn: true, + start_arg, + args, + env, + fd_map, + }, + ); + + const thread_id = worker.get_id(); + + return thread_id; + } + + async async_start_on_thread( + args: Array, + env: Array, + ): Promise { + if (!self.Worker.toString().includes("[native code]")) { + if (self.Worker.toString().includes("function")) { + console.warn("SubWorker(new Worker on Worker) is polyfilled maybe."); + } else { + throw new Error("SubWorker(new Worker on Worker) is not supported."); + } + } + + await this.worker_background_ref.async_start_on_thread( + this.worker_url, + { type: "module" }, + { + this_is_thread_spawn: true, + this_is_start: true, + args, + env, + }, + ); + } + + block_start_on_thread(args: Array, env: Array): void { + if (!self.Worker.toString().includes("[native code]")) { + if (self.Worker.toString().includes("function")) { + console.warn("SubWorker(new Worker on Worker) is polyfilled maybe."); + } else { + throw new Error("SubWorker(new Worker on Worker) is not supported."); + } + } + + this.worker_background_ref.block_start_on_thread( + this.worker_url, + { type: "module" }, + { + this_is_thread_spawn: true, + this_is_start: true, + args, + env, + }, + ); + } + + static init_self(sl: ThreadSpawnerObject): ThreadSpawner { + const thread_spawner = new ThreadSpawner( + sl.worker_url, + sl.wasi_farm_refs_object, + sl.share_memory, + undefined, + sl.worker_background_ref_object, + // undefined, + // sl.inst_default_buffer_kept, + ); + return thread_spawner; + } + + static init_self_with_worker_background_ref( + sl: ThreadSpawnerObject, + worker_background_ref_object: WorkerBackgroundRefObject, + ): ThreadSpawner { + const thread_spawner = new ThreadSpawner( + sl.worker_url, + sl.wasi_farm_refs_object, + sl.share_memory, + undefined, + worker_background_ref_object, + // undefined, + // sl.inst_default_buffer_kept, + ); + return thread_spawner; + } + + get_share_memory(): WebAssembly.Memory { + return this.share_memory; + } + + get_object(): ThreadSpawnerObject { + return { + share_memory: this.share_memory, + wasi_farm_refs_object: this.wasi_farm_refs_object, + worker_url: this.worker_url, + worker_background_ref_object: this.worker_background_ref_object, + // inst_default_buffer_kept: this.inst_default_buffer_kept, + }; + } + + done_notify(code: number): void { + this.worker_background_ref.done_notify(code); + } + + async async_wait_done_or_error(): Promise { + if (this.worker_background_worker === undefined) { + throw new Error("worker_background_worker is undefined."); + } + + return await this.worker_background_ref.async_wait_done_or_error(); + } + + block_wait_done_or_error(): number { + if (this.worker_background_worker === undefined) { + throw new Error("worker_background_worker is undefined."); + } + + return this.worker_background_ref.block_wait_done_or_error(); + } +} + +// send fd_map is not implemented yet. +// issue: the fd passed to the child process is different from the parent process. +export const thread_spawn_on_worker = async (msg: { + this_is_thread_spawn: boolean; + worker_id?: number; + start_arg: number; + worker_background_ref: WorkerBackgroundRefObject; + sl_object: ThreadSpawnerObject; + thread_spawn_wasm: WebAssembly.Module; + args: Array; + env: Array; + fd_map: Array; + this_is_start?: boolean; +}): Promise => { + if (msg.this_is_thread_spawn) { + if (msg.this_is_start) { + const thread_spawner = ThreadSpawner.init_self_with_worker_background_ref( + msg.sl_object, + msg.worker_background_ref, + ); + + const wasi = new WASIFarmAnimal( + msg.sl_object.wasi_farm_refs_object, + msg.args, + msg.env, + { + can_thread_spawn: true, + thread_spawn_worker_url: msg.sl_object.worker_url, + }, + undefined, + thread_spawner, + ); + + const inst = await WebAssembly.instantiate(msg.thread_spawn_wasm, { + env: { + memory: wasi.get_share_memory(), + }, + wasi: wasi.wasiThreadImport, + wasi_snapshot_preview1: wasi.wasiImport, + }); + + wasi.start( + inst as unknown as { + exports: { + memory: WebAssembly.Memory; + _start: () => unknown; + }; + }, + ); + + globalThis.postMessage({ + msg: "done", + }); + + return wasi; + } + + const { + worker_id: thread_id, + start_arg, + args, + env, + sl_object, + thread_spawn_wasm, + } = msg; + + console.log(`thread_spawn worker ${thread_id} start`); + + const thread_spawner = ThreadSpawner.init_self_with_worker_background_ref( + sl_object, + msg.worker_background_ref, + ); + + const override_fd_map: Array = new Array( + sl_object.wasi_farm_refs_object.length, + ); + + // Possibly null (undefined) + for (const fd_and_wasi_ref_n of msg.fd_map) { + // biome-ignore lint/suspicious/noDoubleEquals: + if (fd_and_wasi_ref_n == undefined) { + continue; + } + const [fd, wasi_ref_n] = fd_and_wasi_ref_n; + if (override_fd_map[wasi_ref_n] === undefined) { + override_fd_map[wasi_ref_n] = []; + } + override_fd_map[wasi_ref_n].push(fd); + } + + const wasi = new WASIFarmAnimal( + sl_object.wasi_farm_refs_object, + args, + env, + { + can_thread_spawn: true, + thread_spawn_worker_url: sl_object.worker_url, + }, + override_fd_map, + thread_spawner, + ); + + const inst = await WebAssembly.instantiate(thread_spawn_wasm, { + env: { + memory: wasi.get_share_memory(), + }, + wasi: wasi.wasiThreadImport, + wasi_snapshot_preview1: wasi.wasiImport, + }); + + globalThis.postMessage({ + msg: "ready", + }); + + try { + wasi.wasi_thread_start( + inst as unknown as { + exports: { + memory: WebAssembly.Memory; + wasi_thread_start: (thread_id: number, start_arg: number) => void; + }; + }, + thread_id, + start_arg, + ); + } catch (e) { + globalThis.postMessage({ + msg: "error", + error: e, + }); + + return wasi; + } + + globalThis.postMessage({ + msg: "done", + }); + + return wasi; + } +}; diff --git a/src/wasi_farm/shared_array_buffer/util.ts b/src/wasi_farm/shared_array_buffer/util.ts index bab95f3..4ed230f 100644 --- a/src/wasi_farm/shared_array_buffer/util.ts +++ b/src/wasi_farm/shared_array_buffer/util.ts @@ -1,36 +1,68 @@ export const get_func_name_from_number = (num: number): string => { switch (num) { - case 7: return "fd_advise"; - case 8: return "fd_allocate"; - case 9: return "fd_close"; - case 10: return "fd_datasync"; - case 11: return "fd_fdstat_get"; - case 12: return "fd_fdstat_set_flags"; - case 13: return "fd_fdstat_set_rights"; - case 14: return "fd_filestat_get"; - case 15: return "fd_filestat_set_size"; - case 16: return "fd_filestat_set_times"; - case 17: return "fd_pread"; - case 18: return "fd_prestat_get"; - case 19: return "fd_prestat_dir_name"; - case 20: return "fd_pwrite"; - case 21: return "fd_read"; - case 22: return "fd_readdir"; - case 23: return "fd_renumber"; - case 24: return "fd_seek"; - case 25: return "fd_sync"; - case 26: return "fd_tell"; - case 27: return "fd_write"; - case 28: return "path_create_directory"; - case 29: return "path_filestat_get"; - case 30: return "path_filestat_set_times"; - case 31: return "path_link"; - case 32: return "path_open"; - case 33: return "path_readlink"; - case 34: return "path_remove_directory"; - case 35: return "path_rename"; - case 36: return "path_symlink"; - case 37: return "path_unlink_file"; - default: return "unknown"; + case 7: + return "fd_advise"; + case 8: + return "fd_allocate"; + case 9: + return "fd_close"; + case 10: + return "fd_datasync"; + case 11: + return "fd_fdstat_get"; + case 12: + return "fd_fdstat_set_flags"; + case 13: + return "fd_fdstat_set_rights"; + case 14: + return "fd_filestat_get"; + case 15: + return "fd_filestat_set_size"; + case 16: + return "fd_filestat_set_times"; + case 17: + return "fd_pread"; + case 18: + return "fd_prestat_get"; + case 19: + return "fd_prestat_dir_name"; + case 20: + return "fd_pwrite"; + case 21: + return "fd_read"; + case 22: + return "fd_readdir"; + case 23: + return "fd_renumber"; + case 24: + return "fd_seek"; + case 25: + return "fd_sync"; + case 26: + return "fd_tell"; + case 27: + return "fd_write"; + case 28: + return "path_create_directory"; + case 29: + return "path_filestat_get"; + case 30: + return "path_filestat_set_times"; + case 31: + return "path_link"; + case 32: + return "path_open"; + case 33: + return "path_readlink"; + case 34: + return "path_remove_directory"; + case 35: + return "path_rename"; + case 36: + return "path_symlink"; + case 37: + return "path_unlink_file"; + default: + return "unknown"; } -} +}; diff --git a/src/wasi_farm/shared_array_buffer/worker_background/index.ts b/src/wasi_farm/shared_array_buffer/worker_background/index.ts new file mode 100644 index 0000000..eb3e67c --- /dev/null +++ b/src/wasi_farm/shared_array_buffer/worker_background/index.ts @@ -0,0 +1,10 @@ +import type { WorkerBackgroundRefObject } from "./worker_export.js"; +import { WorkerBackgroundRef, WorkerRef } from "./worker_background_ref.js"; +import { url as worker_background_worker_url } from "./worker_blob.js"; + +export { + WorkerBackgroundRef, + WorkerRef, + type WorkerBackgroundRefObject, + worker_background_worker_url, +}; diff --git a/src/wasi_farm/shared_array_buffer/worker_background/minify.js b/src/wasi_farm/shared_array_buffer/worker_background/minify.js new file mode 100644 index 0000000..eecb571 --- /dev/null +++ b/src/wasi_farm/shared_array_buffer/worker_background/minify.js @@ -0,0 +1,46 @@ +import swc from "@swc/core"; + +import { readFileSync, writeFileSync } from "node:fs"; + +const old_code = readFileSync( + "./dist/workers/worker_background_worker.js", + "utf8", +); + +const { code } = await swc.minify(old_code, { + compress: { + reduce_funcs: true, + arguments: true, + booleans_as_integers: true, + hoist_funs: false, + keep_classnames: false, + unsafe: true, + }, + mangle: true, +}); + +writeFileSync( + "./dist/workers/worker_background_worker_minify.js", + code, + "utf8", +); + +// \n -> \\n + +const wrapper_code = `export const url = () => { + const code = + '${code.replace(/\\/g, "\\\\")}'; + + const blob = new Blob([code], { type: "application/javascript" }); + + const url = URL.createObjectURL(blob); + + return url; +}; +`; + +writeFileSync( + "./src/wasi_farm/shared_array_buffer/worker_background/worker_blob.ts", + wrapper_code, + "utf8", +); diff --git a/src/wasi_farm/shared_array_buffer/worker_background/spack.config.cjs b/src/wasi_farm/shared_array_buffer/worker_background/spack.config.cjs new file mode 100644 index 0000000..2b498de --- /dev/null +++ b/src/wasi_farm/shared_array_buffer/worker_background/spack.config.cjs @@ -0,0 +1,15 @@ +// https://swc.rs/docs/configuration/bundling + +const { config } = require("@swc/core/spack"); + +console.log(__dirname); + +module.exports = config({ + entry: { + web: `${__dirname}/worker.ts`, + }, + output: { + path: `${__dirname}/../../../../dist/workers/`, + name: "worker_background_worker.js", + }, +}); diff --git a/src/wasi_farm/shared_array_buffer/worker_background/worker.ts b/src/wasi_farm/shared_array_buffer/worker_background/worker.ts new file mode 100644 index 0000000..9db336e --- /dev/null +++ b/src/wasi_farm/shared_array_buffer/worker_background/worker.ts @@ -0,0 +1,290 @@ +// If you create a worker and try to increase the number of threads, +// you will have to use Atomics.wait because they need to be synchronized. +// However, this is essentially impossible because Atomics.wait blocks the threads. +// Therefore, a dedicated worker that creates a subworker (worker in worker) is prepared. +// The request is made using BroadcastChannel. + +import * as Serializer from "../../../serialize_error.js"; +import { AllocatorUseArrayBuffer } from "../allocator.js"; +import type { WorkerBackgroundRefObject } from "./worker_export.js"; + +// Note that postMessage, etc. +// cannot be used in a blocking environment such as during wasm execution. +// (at least as far as I have tried) + +class WorkerBackground { + private override_object: T; + private allocator: AllocatorUseArrayBuffer; + private lock: SharedArrayBuffer; + private signature_input: SharedArrayBuffer; + + private workers: Array = [undefined]; + + private start_worker?: Worker; + + private listen_holder: Promise; + + constructor( + override_object: T, + lock?: SharedArrayBuffer, + allocator?: AllocatorUseArrayBuffer, + signature_input?: SharedArrayBuffer, + ) { + this.override_object = override_object; + this.lock = lock ?? new SharedArrayBuffer(20); + this.allocator = + allocator ?? + new AllocatorUseArrayBuffer(new SharedArrayBuffer(10 * 1024)); + this.signature_input = signature_input ?? new SharedArrayBuffer(24); + this.listen_holder = this.listen(); + } + + static init_self( + override_object: T, + worker_background_ref_object: WorkerBackgroundRefObject, + ): WorkerBackground { + return new WorkerBackground( + override_object, + worker_background_ref_object.lock, + AllocatorUseArrayBuffer.init_self(worker_background_ref_object.allocator), + worker_background_ref_object.signature_input, + ); + } + + assign_worker_id(): number { + for (let i = 1; i < this.workers.length; i++) { + if (this.workers[i] === undefined) { + return i; + } + } + this.workers.push(undefined); + return this.workers.length - 1; + } + + ref(): WorkerBackgroundRefObject { + return { + allocator: this.allocator.get_object(), + lock: this.lock, + signature_input: this.signature_input, + }; + } + + async listen(): Promise { + const lock_view = new Int32Array(this.lock); + Atomics.store(lock_view, 0, 0); + Atomics.store(lock_view, 1, 0); + + const signature_input_view = new Int32Array(this.signature_input); + + // eslint-disable-next-line no-constant-condition + while (true) { + try { + let lock: "not-equal" | "timed-out" | "ok"; + + const { value } = Atomics.waitAsync(lock_view, 1, 0); + if (value instanceof Promise) { + lock = await value; + } else { + lock = value; + } + if (lock === "timed-out") { + throw new Error("timed-out"); + } + + const locked_value = Atomics.load(lock_view, 1); + if (locked_value !== 1) { + throw new Error("locked"); + } + + const signature_input = Atomics.load(signature_input_view, 0); + switch (signature_input) { + // create new worker + case 1: { + const url_ptr = Atomics.load(signature_input_view, 1); + const url_len = Atomics.load(signature_input_view, 2); + const url_buff = this.allocator.get_memory(url_ptr, url_len); + this.allocator.free(url_ptr, url_len); + const url = new TextDecoder().decode(url_buff); + const is_module = Atomics.load(signature_input_view, 3) === 1; + const worker = new Worker(url, { + type: is_module ? "module" : "classic", + }); + const json_ptr = Atomics.load(signature_input_view, 4); + const json_len = Atomics.load(signature_input_view, 5); + const json_buff = this.allocator.get_memory(json_ptr, json_len); + this.allocator.free(json_ptr, json_len); + const json = new TextDecoder().decode(json_buff); + const obj = JSON.parse(json); + + const worker_id = this.assign_worker_id(); + + console.log(`new worker ${worker_id}`); + + this.workers[worker_id] = worker; + + const { promise, resolve } = Promise.withResolvers(); + + worker.onmessage = async (e) => { + const { msg } = e.data; + + if (msg === "ready") { + resolve(); + } + + if (msg === "done") { + this.workers[worker_id].terminate(); + this.workers[worker_id] = undefined; + + console.log(`worker ${worker_id} done so terminate`); + } + + if (msg === "error") { + this.workers[worker_id].terminate(); + this.workers[worker_id] = undefined; + + let n = 0; + for (const worker of this.workers) { + if (worker !== undefined) { + worker.terminate(); + console.warn( + `wasi throw error but child process exists, terminate ${n}`, + ); + } + n++; + } + if (this.start_worker !== undefined) { + this.start_worker.terminate(); + console.warn( + "wasi throw error but wasi exists, terminate wasi", + ); + } + + this.workers = [undefined]; + this.start_worker = undefined; + + const error = e.data.error; + + const notify_view = new Int32Array(this.lock, 8); + + const serialized_error = Serializer.serialize(error); + + const [ptr, len] = await this.allocator.async_write( + new TextEncoder().encode(JSON.stringify(serialized_error)), + this.lock, + 3, + ); + + // notify error = code 1 + const old = Atomics.compareExchange(notify_view, 0, 0, 1); + + if (old !== 0) { + console.error("what happened?"); + + this.allocator.free(ptr, len); + + return; + } + + const num = Atomics.notify(notify_view, 0); + + if (num === 0) { + console.error(error); + + this.allocator.free(ptr, len); + + Atomics.store(notify_view, 0, 0); + } + } + }; + + worker.postMessage({ + ...this.override_object, + ...obj, + worker_id, + worker_background_ref: this.ref(), + }); + + await promise; + + Atomics.store(signature_input_view, 0, worker_id); + + break; + } + // create start + case 2: { + const url_ptr = Atomics.load(signature_input_view, 1); + const url_len = Atomics.load(signature_input_view, 2); + const url_buff = this.allocator.get_memory(url_ptr, url_len); + this.allocator.free(url_ptr, url_len); + const url = new TextDecoder().decode(url_buff); + const is_module = Atomics.load(signature_input_view, 3) === 1; + this.start_worker = new Worker(url, { + type: is_module ? "module" : "classic", + }); + const json_ptr = Atomics.load(signature_input_view, 4); + const json_len = Atomics.load(signature_input_view, 5); + const json_buff = this.allocator.get_memory(json_ptr, json_len); + this.allocator.free(json_ptr, json_len); + const json = new TextDecoder().decode(json_buff); + const obj = JSON.parse(json); + + this.start_worker.onmessage = async (e) => { + const { msg } = e.data; + + if (msg === "done") { + let n = 0; + for (const worker of this.workers) { + if (worker !== undefined) { + worker.terminate(); + console.warn(`wasi done but worker exists, terminate ${n}`); + } + n++; + } + + this.start_worker.terminate(); + this.start_worker = undefined; + + console.log("start worker done so terminate"); + } + }; + + this.start_worker.postMessage({ + ...this.override_object, + ...obj, + worker_background_ref: this.ref(), + }); + + break; + } + } + + const old_call_lock = Atomics.exchange(lock_view, 1, 0); + if (old_call_lock !== 1) { + throw new Error("Lock is already set"); + } + const num = Atomics.notify(lock_view, 1, 1); + if (num !== 1) { + if (num === 0) { + console.warn("notify failed, waiter is late"); + continue; + } + throw new Error(`notify failed: ${num}`); + } + } catch (e) { + console.error(e); + } + } + } +} + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +let worker_background: WorkerBackground; + +globalThis.onmessage = (e: MessageEvent) => { + const { override_object, worker_background_ref_object } = e.data; + worker_background = WorkerBackground.init_self( + override_object, + worker_background_ref_object, + ); + postMessage("ready"); +}; diff --git a/src/wasi_farm/shared_array_buffer/worker_background/worker_background_ref.ts b/src/wasi_farm/shared_array_buffer/worker_background/worker_background_ref.ts new file mode 100644 index 0000000..4d570df --- /dev/null +++ b/src/wasi_farm/shared_array_buffer/worker_background/worker_background_ref.ts @@ -0,0 +1,311 @@ +import * as Serializer from "../../../serialize_error.js"; +import { AllocatorUseArrayBuffer } from "../allocator.js"; +import type { WorkerBackgroundRefObject } from "./worker_export.js"; + +export class WorkerBackgroundRef { + private allocator: AllocatorUseArrayBuffer; + private lock: SharedArrayBuffer; + private signature_input: SharedArrayBuffer; + + constructor( + allocator: AllocatorUseArrayBuffer, + lock: SharedArrayBuffer, + signature_input: SharedArrayBuffer, + ) { + this.allocator = allocator; + this.lock = lock; + this.signature_input = signature_input; + } + + private block_lock_base_func(): void { + const view = new Int32Array(this.lock); + // eslint-disable-next-line no-constant-condition + while (true) { + const lock = Atomics.wait(view, 0, 1); + if (lock === "timed-out") { + throw new Error("timed-out lock"); + } + const old = Atomics.compareExchange(view, 0, 0, 1); + if (old !== 0) { + continue; + } + break; + } + } + + private async async_lock_base_func(): Promise { + const view = new Int32Array(this.lock); + // eslint-disable-next-line no-constant-condition + while (true) { + let value: "timed-out" | "not-equal" | "ok"; + const { value: _value } = Atomics.waitAsync(view, 0, 1); + if (_value instanceof Promise) { + value = await _value; + } else { + value = _value; + } + if (value === "timed-out") { + throw new Error("timed-out lock"); + } + const old = Atomics.compareExchange(view, 0, 0, 1); + if (old !== 0) { + continue; + } + break; + } + } + + private call_base_func(): void { + const view = new Int32Array(this.lock); + const old = Atomics.exchange(view, 1, 1); + if (old !== 0) { + console.error("what happened?"); + } + Atomics.notify(view, 1, 1); + } + + // wait base_func + private block_wait_base_func(): void { + const view = new Int32Array(this.lock); + const lock = Atomics.wait(view, 1, 1); + if (lock === "timed-out") { + throw new Error("timed-out lock"); + } + } + + private async async_wait_base_func(): Promise { + const view = new Int32Array(this.lock); + let value: "timed-out" | "not-equal" | "ok"; + const { value: _value } = Atomics.waitAsync(view, 1, 1); + if (_value instanceof Promise) { + value = await _value; + } else { + value = _value; + } + if (value === "timed-out") { + throw new Error("timed-out lock"); + } + } + + // release base_func + private release_base_func(): void { + const view = new Int32Array(this.lock); + Atomics.store(view, 0, 0); + Atomics.notify(view, 0, 1); + } + + new_worker( + url: string, + options?: WorkerOptions, + post_obj?: unknown, + ): WorkerRef { + this.block_lock_base_func(); + const view = new Int32Array(this.signature_input); + Atomics.store(view, 0, 1); + const url_buffer = new TextEncoder().encode(url); + this.allocator.block_write(url_buffer, this.signature_input, 1); + Atomics.store(view, 3, options.type === "module" ? 1 : 0); + const obj_json = JSON.stringify(post_obj); + const obj_buffer = new TextEncoder().encode(obj_json); + this.allocator.block_write(obj_buffer, this.signature_input, 4); + this.call_base_func(); + this.block_wait_base_func(); + + const id = Atomics.load(view, 0); + + this.release_base_func(); + + return new WorkerRef(id); + } + + async async_start_on_thread( + url: string, + options: WorkerOptions | undefined, + post_obj: unknown, + ) { + await this.async_lock_base_func(); + const view = new Int32Array(this.signature_input); + Atomics.store(view, 0, 2); + const url_buffer = new TextEncoder().encode(url); + await this.allocator.async_write(url_buffer, this.signature_input, 1); + Atomics.store(view, 3, options?.type === "module" ? 1 : 0); + const obj_json = JSON.stringify(post_obj); + const obj_buffer = new TextEncoder().encode(obj_json); + await this.allocator.async_write(obj_buffer, this.signature_input, 4); + this.call_base_func(); + await this.async_wait_base_func(); + + this.release_base_func(); + } + + block_start_on_thread( + url: string, + options: WorkerOptions | undefined, + post_obj: unknown, + ) { + this.block_lock_base_func(); + const view = new Int32Array(this.signature_input); + Atomics.store(view, 0, 2); + const url_buffer = new TextEncoder().encode(url); + this.allocator.block_write(url_buffer, this.signature_input, 1); + Atomics.store(view, 3, options?.type === "module" ? 1 : 0); + const obj_json = JSON.stringify(post_obj); + const obj_buffer = new TextEncoder().encode(obj_json); + this.allocator.block_write(obj_buffer, this.signature_input, 4); + this.call_base_func(); + this.block_wait_base_func(); + + this.release_base_func(); + } + + static init_self(sl: WorkerBackgroundRefObject): WorkerBackgroundRef { + return new WorkerBackgroundRef( + AllocatorUseArrayBuffer.init_self(sl.allocator), + sl.lock, + sl.signature_input, + ); + } + + done_notify(code: number): void { + const notify_view = new Int32Array(this.lock, 8); + + // notify done = code 2 + const old = Atomics.compareExchange(notify_view, 0, 0, 2); + + if (old !== 0) { + console.error("what happened?"); + + return; + } + + Atomics.store(notify_view, 1, code); + + const num = Atomics.notify(notify_view, 0); + + if (num === 0) { + Atomics.store(notify_view, 0, 0); + } + } + + async async_wait_done_or_error(): Promise { + const notify_view = new Int32Array(this.lock, 8); + + Atomics.store(notify_view, 0, 0); + + let value: "timed-out" | "not-equal" | "ok"; + const { value: _value } = Atomics.waitAsync(notify_view, 0, 0); + if (_value instanceof Promise) { + value = await _value; + } else { + value = _value; + } + + if (value === "timed-out") { + throw new Error("timed-out"); + } + + if (value === "not-equal") { + throw new Error("not-equal"); + } + + const code = Atomics.load(notify_view, 0); + + if (code === 2) { + const old = Atomics.compareExchange(notify_view, 0, 2, 0); + + const code = Atomics.load(notify_view, 1); + + if (old !== 2) { + console.error("what happened?"); + } + + return code; + } + + if (code !== 1) { + throw new Error("unknown code"); + } + + // get error + const ptr = Atomics.load(notify_view, 1); + const size = Atomics.load(notify_view, 2); + const error_buffer = this.allocator.get_memory(ptr, size); + const error_txt = new TextDecoder().decode(error_buffer); + const error_serialized = JSON.parse( + error_txt, + ) as Serializer.SerializedError; + const error = Serializer.deserialize(error_serialized); + + const old = Atomics.compareExchange(notify_view, 0, 1, 0); + + if (old !== 1) { + console.error("what happened?"); + } + + throw error; + } + + block_wait_done_or_error(): number { + const notify_view = new Int32Array(this.lock, 8); + + Atomics.store(notify_view, 0, 0); + + const value = Atomics.wait(notify_view, 0, 0); + + if (value === "timed-out") { + throw new Error("timed-out"); + } + + if (value === "not-equal") { + throw new Error("not-equal"); + } + + const code = Atomics.load(notify_view, 0); + + if (code === 2) { + const old = Atomics.compareExchange(notify_view, 0, 2, 0); + + const code = Atomics.load(notify_view, 1); + + if (old !== 2) { + console.error("what happened?"); + } + + return code; + } + + if (code !== 1) { + throw new Error("unknown code"); + } + + // get error + const ptr = Atomics.load(notify_view, 1); + const size = Atomics.load(notify_view, 2); + const error_buffer = this.allocator.get_memory(ptr, size); + const error_txt = new TextDecoder().decode(error_buffer); + const error_serialized = JSON.parse( + error_txt, + ) as Serializer.SerializedError; + const error = Serializer.deserialize(error_serialized); + + const old = Atomics.compareExchange(notify_view, 0, 1, 0); + + if (old !== 1) { + console.error("what happened?"); + } + + throw error; + } +} + +export class WorkerRef { + private id: number; + + constructor(id: number) { + this.id = id; + } + + get_id(): number { + return this.id; + } +} diff --git a/src/wasi_farm/shared_array_buffer/worker_background/worker_blob.ts b/src/wasi_farm/shared_array_buffer/worker_background/worker_blob.ts new file mode 100644 index 0000000..8a1adf3 --- /dev/null +++ b/src/wasi_farm/shared_array_buffer/worker_background/worker_blob.ts @@ -0,0 +1,10 @@ +export const url = () => { + const code = + 'let worker_background;function _define_property(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}let serialize=e=>({message:e.message,name:e.name,stack:e.stack,cause:e.cause});class AllocatorUseArrayBuffer{static init_self(e){return new AllocatorUseArrayBuffer(e.share_arrays_memory)}async async_write(e,r,t){let o=new Int32Array(this.share_arrays_memory);for(;;){let{value:s}=Atomics.waitAsync(o,0,1);if("timed-out"===(s instanceof Promise?await s:s))throw Error("timed-out lock");if(0!==Atomics.compareExchange(o,0,0,1))continue;let i=this.write_inner(e,r,t);return Atomics.store(o,0,0),Atomics.notify(o,0,1),i}}block_write(e,r,t){for(;;){let o=new Int32Array(this.share_arrays_memory);if("timed-out"===Atomics.wait(o,0,1))throw Error("timed-out lock");if(0!==Atomics.compareExchange(o,0,0,1))continue;let s=this.write_inner(e,r,t);return Atomics.store(o,0,0),Atomics.notify(o,0,1),s}}write_inner(e,r,t){let o,s;let i=new Int32Array(this.share_arrays_memory),a=new Uint8Array(this.share_arrays_memory);o=0===Atomics.add(i,1,1)?Atomics.store(i,2,12):Atomics.load(i,2);let n=this.share_arrays_memory.byteLength,c=e.byteLength,l=o+c;if(n{let{msg:r}=e.data;if("ready"===r&&y(),"done"===r&&(this.workers[w].terminate(),this.workers[w]=void 0,console.log(`worker ${w} done so terminate`)),"error"===r){this.workers[w].terminate(),this.workers[w]=void 0;let r=0;for(let e of this.workers)void 0!==e&&(e.terminate(),console.warn("wasi throw error but child process exists, terminate "+r)),r++;void 0!==this.start_worker&&(this.start_worker.terminate(),console.warn("wasi throw error but wasi exists, terminate wasi")),this.workers=[void 0],this.start_worker=void 0;let t=e.data.error,o=new Int32Array(this.lock,8),s=serialize(t),[i,a]=await this.allocator.async_write(new TextEncoder().encode(JSON.stringify(s)),this.lock,3),n=Atomics.compareExchange(o,0,0,1);if(0!==n){console.error("what happened?"),this.allocator.free(i,a);return}let c=Atomics.notify(o,0);0===c&&(console.error(t),this.allocator.free(i,a),Atomics.store(o,0,0))}},a.postMessage({...this.override_object,...m,worker_id:w,worker_background_ref:this.ref()}),await d,Atomics.store(r,0,w);break}case 2:{let e=Atomics.load(r,1),t=Atomics.load(r,2),o=this.allocator.get_memory(e,t);this.allocator.free(e,t);let s=new TextDecoder().decode(o),i=1===Atomics.load(r,3);this.start_worker=new Worker(s,{type:i?"module":"classic"});let a=Atomics.load(r,4),n=Atomics.load(r,5),c=this.allocator.get_memory(a,n);this.allocator.free(a,n);let l=new TextDecoder().decode(c),h=JSON.parse(l);this.start_worker.onmessage=async e=>{let{msg:r}=e.data;if("done"===r){let e=0;for(let r of this.workers)void 0!==r&&(r.terminate(),console.warn("wasi done but worker exists, terminate "+e)),e++;this.start_worker.terminate(),this.start_worker=void 0,console.log("start worker done so terminate")}},this.start_worker.postMessage({...this.override_object,...h,worker_background_ref:this.ref()})}}let i=Atomics.exchange(e,1,0);if(1!==i)throw Error("Lock is already set");let a=Atomics.notify(e,1,1);if(1!==a){if(0===a){console.warn("notify failed, waiter is late");continue}throw Error("notify failed: "+a)}}catch(e){console.error(e)}}constructor(e,r,t,o){_define_property(this,"override_object",void 0),_define_property(this,"allocator",void 0),_define_property(this,"lock",void 0),_define_property(this,"signature_input",void 0),_define_property(this,"workers",[void 0]),_define_property(this,"start_worker",void 0),_define_property(this,"listen_holder",void 0),this.override_object=e,this.lock=r??new SharedArrayBuffer(20),this.allocator=t??new AllocatorUseArrayBuffer(new SharedArrayBuffer(10240)),this.signature_input=o??new SharedArrayBuffer(24),this.listen_holder=this.listen()}};globalThis.onmessage=e=>{let{override_object:r,worker_background_ref_object:t}=e.data;worker_background=WorkerBackground.init_self(r,t),postMessage("ready")};'; + + const blob = new Blob([code], { type: "application/javascript" }); + + const url = URL.createObjectURL(blob); + + return url; +}; diff --git a/src/wasi_farm/shared_array_buffer/worker_background/worker_export.ts b/src/wasi_farm/shared_array_buffer/worker_background/worker_export.ts new file mode 100644 index 0000000..9f831a8 --- /dev/null +++ b/src/wasi_farm/shared_array_buffer/worker_background/worker_export.ts @@ -0,0 +1,18 @@ +import type { AllocatorUseArrayBufferObject } from "../allocator.js"; + +export type WorkerBackgroundRefObject = { + allocator: AllocatorUseArrayBufferObject; + lock: SharedArrayBuffer; + signature_input: SharedArrayBuffer; +}; + +export const WorkerBackgroundRefObjectConstructor = + (): WorkerBackgroundRefObject => { + return { + allocator: { + share_arrays_memory: new SharedArrayBuffer(10 * 1024), + }, + lock: new SharedArrayBuffer(20), + signature_input: new SharedArrayBuffer(24), + }; + }; diff --git a/test/run-testsuite.sh b/test/run-testsuite.sh old mode 100755 new mode 100644 From 2a0189fa3beb4c31e633e3f3a21b3e26d909d674 Mon Sep 17 00:00:00 2001 From: oligami Date: Fri, 27 Sep 2024 22:26:48 +0900 Subject: [PATCH 03/12] Using LLVM's wasm-ld Change to use the first stdio fd_write can be async enabled move but wasm throw error: memory access out of bounds --- bun.lockb | Bin 89865 -> 0 bytes examples/bun.lockb | Bin 3008 -> 0 bytes examples/package-lock.json | 96 +++++------ examples/package.json | 40 ++--- examples/wasi_multi_threads_rustc/clang.js | 78 +++++++++ .../depend_clang_files.js | 80 +++++++++ ...{depend_files.js => depend_rustc_files.js} | 0 examples/wasi_multi_threads_rustc/index.html | 5 +- .../wasi_multi_threads_rustc/save_stdout.js | 54 +++++++ examples/wasi_multi_threads_rustc/worker.js | 153 ++++++++++++++++-- src/wasi_farm/animals.ts | 20 ++- src/wasi_farm/park.ts | 13 +- src/wasi_farm/shared_array_buffer/park.ts | 2 +- 13 files changed, 450 insertions(+), 91 deletions(-) delete mode 100644 bun.lockb delete mode 100644 examples/bun.lockb create mode 100644 examples/wasi_multi_threads_rustc/clang.js create mode 100644 examples/wasi_multi_threads_rustc/depend_clang_files.js rename examples/wasi_multi_threads_rustc/{depend_files.js => depend_rustc_files.js} (100%) create mode 100644 examples/wasi_multi_threads_rustc/save_stdout.js diff --git a/bun.lockb b/bun.lockb deleted file mode 100644 index 54a53eb6f94104e1f2b38e8878c2a6eefa79a7fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 89865 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ற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 SAI21!-(g~3Px&AC&;J2Hph)fj diff --git a/examples/bun.lockb b/examples/bun.lockb deleted file mode 100644 index d2ee58d33bf41e5168451d54469ae6874a1c428b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3008 zcmY#Z)GsYA(of3F(@)JSQ%EY!;{sycoc!eMw9K4T-L(9o+{6;yG6OCq1_lNmwan%T zH|I0i{;}^`!?o*HJhy>t-0vf6<2Ll241ZIqZ@>*y1O)65ih%=-Zh-Q$VG6)}DF%iH z10ahZNLQ4k7Ue=!fy6;f5Dml(VnCXik%561NNfJOyr8;?>@`lo$~!D4?{Rc; z@BaxChtaA_t_ghKa8`1H%Ax0fd*mhowNnH@p#TE*K6{y@8sGkK$ z3lpamtO}%_5&+Y$N2Vb#_wNAe_lEkPlrV+aPp0)?Z6Gs17-TOj>_Id$5F@8JkUS?4 z!vJ~u{_+1K#e*=*@XvDlAf5rkgs;{)XMM>1Qeg78*Xfb;Y3J*UahvY?{;Gd=z=P zRAv94TT5fJRWl@!%msxp)c}&Y)JPX_cOjVzOCKOP7GuHEfO``^wHi$Q7^Z(NjzQVR zxbxM@M^D}r*Qu=Y`pF<ccrxMwDbO^QxDRLe@Ubeo^skqgUdDGVc`+PCCDOh-5As z+%hUKfaVTmFbJJbvXe;GKyrjJZh%&LZ=f`nO>t4OUS?i#Nn%cp9<0XI3n@xXwNo%M zP$m zV=>eGoD_240BtZ4H5NQUiT!y&^M1$N2 z6wKgmGeivqSbG3gzcYahgac5E0oDRwVgWT|tblT`wgs%Mz{D75qGxEKXTSh!eZX21 zKp6u)Q=kNf9s!UZ1CR^|P|qG%y9U-yLAd%2G*n { + console.log("clang args", args); + // If I don't reset memory, I get some kind of error. + wasi.args = ["llvm", "clang", ...args]; + const memory_view = new Uint8Array(inst.exports.memory.buffer); + memory_view.set(memory_reset_view); + wasi.start(inst); + console.log("clang wasi.start done"); + }, "clang"); + + shared_tools = new SharedObject.SharedObject((...args) => { + console.log("tools args", args); + // If I don't reset memory, I get some kind of error. + wasi.args = ["llvm-tools", ...args]; + const memory_view = new Uint8Array(inst.exports.memory.buffer); + memory_view.set(memory_reset_view); + wasi.start(inst); + console.log("tools wasi.start done"); + }, "llvm-tools"); + + shared_wasm_ld = new SharedObject.SharedObject((...args) => { + console.log("wasm-ld args", args); + // If I don't reset memory, I get some kind of error. + wasi.args = ["llvm-tools", "wasm-ld", ...args]; + const memory_view = new Uint8Array(inst.exports.memory.buffer); + memory_view.set(memory_reset_view); + wasi.start(inst); + console.log("wasm-ld wasi.start done"); + }, "wasm-ld"); + + postMessage({ ready: true }); + } +}; diff --git a/examples/wasi_multi_threads_rustc/depend_clang_files.js b/examples/wasi_multi_threads_rustc/depend_clang_files.js new file mode 100644 index 0000000..969c184 --- /dev/null +++ b/examples/wasi_multi_threads_rustc/depend_clang_files.js @@ -0,0 +1,80 @@ +import { + PreopenDirectory, + WASIFarm, + Directory, + File, +} from "../../dist/index.js"; + +async function load_external_file(path) { + return new File(await (await (await fetch(path)).blob()).arrayBuffer()); +} + +const wasi_libs = new Map(); +for (const file of [ + "crt1-command.o", + "crt1-reactor.o", + "crt1.o", + "libc-printscan-long-double.a", + "libc-printscan-no-floating-point.a", + "libc.a", + "libc.imports", + "libc++.a", + "libc++.modules.json", + "libc++abi.a", + "libc++experimental.a", + "libcrypt.a", + "libdl.a", + "libm.a", + "libpthread.a", + "libresolv.a", + "librt.a", + "libsetjmp.a", + "libutil.a", + "libwasi-emulated-getpid.a", + "libwasi-emulated-mman.a", + "libwasi-emulated-process-clocks.a", + "libwasi-emulated-signal.a", + "libxnet.a", +]) { + wasi_libs.set( + file, + await load_external_file( + `./rust_wasm/llvm-tools/dist/lib/wasm32-wasip1/${file}`, + ), + ); +} + +const farm = new WASIFarm( + undefined, + undefined, + undefined, + [ + new PreopenDirectory("/sysroot-clang", [ + [ + "lib", + new Directory([ + [ + "wasm32-unknown-wasip1", + new Directory([ + [ + "libclang_rt.builtins.a", + await load_external_file( + "./rust_wasm/llvm-tools/dist/lib/wasm32-unknown-wasip1/libclang_rt.builtins.a", + ), + ], + ]), + ], + ["wasm32-wasip1", wasi_libs], + ]), + ], + ]), + ], + { + // allocator_size: 1024 * 1024 * 1024, + // debug: true, + }, +); + +const ret = await farm.get_ref(); + +postMessage({ wasi_ref: ret }); diff --git a/examples/wasi_multi_threads_rustc/depend_files.js b/examples/wasi_multi_threads_rustc/depend_rustc_files.js similarity index 100% rename from examples/wasi_multi_threads_rustc/depend_files.js rename to examples/wasi_multi_threads_rustc/depend_rustc_files.js diff --git a/examples/wasi_multi_threads_rustc/index.html b/examples/wasi_multi_threads_rustc/index.html index 58d58e4..8883c82 100644 --- a/examples/wasi_multi_threads_rustc/index.html +++ b/examples/wasi_multi_threads_rustc/index.html @@ -34,6 +34,9 @@ writeln(data) { term.writeln(data); }, + writeUtf8(data) { + term.writeUtf8(data); + }, }, "term" ); @@ -68,8 +71,6 @@ // sleep 10000ms await new Promise((resolve) => setTimeout(resolve, 10000)); - - console.log("lock_worker terminated"); diff --git a/examples/wasi_multi_threads_rustc/save_stdout.js b/examples/wasi_multi_threads_rustc/save_stdout.js new file mode 100644 index 0000000..4739ac3 --- /dev/null +++ b/examples/wasi_multi_threads_rustc/save_stdout.js @@ -0,0 +1,54 @@ +import { WASIFarm, Fd } from "../../dist/index.js"; + +await import("../node_modules/@oligami/shared-object/dist/index.js"); + +const term = new SharedObject.SharedObjectRef("term").proxy(); + +class Stdout extends Fd { + buffer = new Uint8Array(0); + + async fd_write(data /*: Uint8Array*/) /*: {ret: number, nwritten: number}*/ { + const new_buffer = new Uint8Array(this.buffer.length + data.length); + new_buffer.set(this.buffer); + new_buffer.set(data, this.buffer.length); + this.buffer = new_buffer; + + await term.writeUtf8(data); + + return { ret: 0, nwritten: data.byteLength }; + } +} + +const std_out = new Stdout(); + +const std_err = new Stdout(); + +const shared_std_out = new SharedObject.SharedObject( + { + get() { + return new TextDecoder().decode(std_out.buffer); + }, + reset() { + std_out.buffer = new Uint8Array(0); + }, + }, + "std_out_keep", +); + +const shared_std_err = new SharedObject.SharedObject( + { + get() { + return new TextDecoder().decode(std_err.buffer); + }, + reset() { + std_err.buffer = new Uint8Array(0); + }, + }, + "std_err_keep", +); + +const farm = new WASIFarm(undefined, std_out, std_err); + +const ret = await farm.get_ref(); + +postMessage({ wasi_ref: ret }); diff --git a/examples/wasi_multi_threads_rustc/worker.js b/examples/wasi_multi_threads_rustc/worker.js index d6fe3ae..708c718 100644 --- a/examples/wasi_multi_threads_rustc/worker.js +++ b/examples/wasi_multi_threads_rustc/worker.js @@ -4,20 +4,40 @@ import("../node_modules/@oligami/shared-object/dist/index.js").then(resolve); let tree; let term; let rustc; +let clang; +let llvm_tools; +let wasm_ld; +let std_out_keep; +let std_err_keep; self.onmessage = async (e) => { const { wasi_ref } = e.data; - const { promise: depend_files_promise, resolve: depend_files_resolve } = - Promise.withResolvers(); + const { + promise: depend_rustc_files_promise, + resolve: depend_rustc_files_resolve, + } = Promise.withResolvers(); + const { + promise: depend_clang_files_promise, + resolve: depend_clang_files_resolve, + } = Promise.withResolvers(); const { promise: tmp_dir_promise, resolve: tmp_dir_resolve } = Promise.withResolvers(); + const { promise: save_stdout_promise, resolve: save_stdout_resolve } = + Promise.withResolvers(); + + const depend_rustc_files_manage_worker = new Worker("depend_rustc_files.js", { + type: "module", + }); + depend_rustc_files_manage_worker.onmessage = (e) => { + depend_rustc_files_resolve(e.data); + }; - const depend_files_manage_worker = new Worker("depend_files.js", { + const depend_clang_files_manage_worker = new Worker("depend_clang_files.js", { type: "module", }); - depend_files_manage_worker.onmessage = (e) => { - depend_files_resolve(e.data); + depend_clang_files_manage_worker.onmessage = (e) => { + depend_clang_files_resolve(e.data); }; const tmp_dir_manage_worker = new Worker("tmp_dir.js", { @@ -27,19 +47,38 @@ self.onmessage = async (e) => { tmp_dir_resolve(e.data); }; - const [depend_files, tmp_dir] = await Promise.all([ - depend_files_promise, - tmp_dir_promise, - ]); - const { wasi_ref: wasi_ref_depend_files } = depend_files; + const save_stdout_manage_worker = new Worker("save_stdout.js", { + type: "module", + }); + save_stdout_manage_worker.onmessage = (e) => { + save_stdout_resolve(e.data); + }; + + const [depend_rustc_files, depend_clang_files, tmp_dir, save_stdout] = + await Promise.all([ + depend_rustc_files_promise, + depend_clang_files_promise, + tmp_dir_promise, + save_stdout_promise, + ]); + const { wasi_ref: wasi_ref_depend_rustc_files } = depend_rustc_files; + const { wasi_ref: wasi_ref_depend_clang_files } = depend_clang_files; const { wasi_ref: wasi_ref_tmp_dir } = tmp_dir; + const { wasi_ref: wasi_ref_save_stdout } = save_stdout; - const wasi_refs = [wasi_ref_depend_files, wasi_ref_tmp_dir, wasi_ref]; + const wasi_refs = [ + wasi_ref_depend_rustc_files, + wasi_ref_depend_clang_files, + wasi_ref_tmp_dir, + wasi_ref, + ]; const { promise: tree_promise, resolve: tree_resolve } = Promise.withResolvers(); const { promise: rustc_promise, resolve: rustc_resolve } = Promise.withResolvers(); + const { promise: clang_promise, resolve: clang_resolve } = + Promise.withResolvers(); const tree_worker = new Worker("tree.js", { type: "module", @@ -57,16 +96,27 @@ self.onmessage = async (e) => { rustc_resolve(e.data); }; + const clang_worker = new Worker("clang.js", { + type: "module", + }); + clang_worker.onmessage = (e) => { + console.log("clang onmessage"); + clang_resolve(e.data); + }; + tree_worker.postMessage({ wasi_refs, }); rustc_worker.postMessage({ + wasi_refs: [wasi_ref_save_stdout, ...wasi_refs], + }); + clang_worker.postMessage({ wasi_refs, }); console.log("Waiting for tree and rustc to finish..."); - await Promise.all([tree_promise, rustc_promise]); + await Promise.all([tree_promise, rustc_promise, clang_promise]); console.log("Sending run message..."); @@ -78,8 +128,38 @@ self.onmessage = async (e) => { rustc = new SharedObject.SharedObjectRef("rustc").proxy(); + clang = new SharedObject.SharedObjectRef("clang").proxy(); + + llvm_tools = new SharedObject.SharedObjectRef("llvm-tools").proxy(); + + wasm_ld = new SharedObject.SharedObjectRef("wasm-ld").proxy(); + + std_out_keep = new SharedObject.SharedObjectRef("std_out_keep").proxy(); + + std_err_keep = new SharedObject.SharedObjectRef("std_err_keep").proxy(); + + // llvm-tools + await term.writeln("\n$ llvm-tools"); + await llvm_tools(); + + // clang -h + await term.writeln("\n$ clang --help"); + await clang("--help"); + + // clang -v + await term.writeln("\n$ clang -v"); + await clang("-v"); + + // wasm-ld --help + await term.writeln("\n$ wasm-ld --help"); + await wasm_ld("--help"); + + // wasm-ld -v + await term.writeln("\n$ wasm-ld -v"); + await wasm_ld("-v"); + // tree -h - await term.writeln("$ tree -h"); + await term.writeln("\n$ tree -h"); await tree("-h"); // tree / @@ -87,14 +167,22 @@ self.onmessage = async (e) => { await tree("/"); // rustc -h + await std_out_keep.reset(); + await std_err_keep.reset(); await term.writeln("\n$ rustc -h"); await rustc("-h"); + const rustc_help = await std_out_keep.get(); + const rustc_help_err = await std_err_keep.get(); + console.log(rustc_help); + console.warn(rustc_help_err); // rustc /hello.rs --sysroot /sysroot --target wasm32-wasip1-threads -Csave-temps --out-dir /tmp await term.writeln( "\n$ rustc /hello.rs --sysroot /sysroot --target wasm32-wasip1-threads -Csave-temps --out-dir /tmp", ); try { + await std_out_keep.reset(); + await std_err_keep.reset(); await rustc( "/hello.rs", "--sysroot", @@ -108,6 +196,45 @@ self.onmessage = async (e) => { } catch (e) { console.error(e); } + const out = await std_out_keep.get(); + const err = await std_err_keep.get(); + console.log(out); + console.warn(err); + + // tree / + await term.writeln("\n$ tree /"); + await tree("/"); + + // If the glob pattern is used, + // it seems to be passed directly to path_open, + // so it is necessary to specify it carefully. + if (!err.includes("error: could not exec the linker")) { + throw new Error("cannot get lld arguments"); + } + // extract lld arguments line + const lld_args_and_etc = err + .split("\n") + .find((line) => line.includes("rust-lld") && line.includes("note: ")); + const lld_args_str = lld_args_and_etc.split('"rust-lld"')[1].trim(); + const lld_args_with_wrap = lld_args_str.split(" "); + let lld_args = lld_args_with_wrap.map((arg) => arg.slice(1, -1)); + // rm -flavor wasm + lld_args = lld_args.filter((arg) => arg !== "-flavor" && arg !== "wasm"); + // rm -Wl + lld_args = lld_args.map((arg) => { + if (arg.includes("-Wl,")) { + return arg.slice(4); + } + return arg; + }); + console.log(lld_args); + + await term.writeln(`\n$ wasm-ld ${lld_args.join(" ")}`); + try { + await wasm_ld(lld_args); + } catch (e) { + console.error(e); + } // tree / await term.writeln("\n$ tree /"); diff --git a/src/wasi_farm/animals.ts b/src/wasi_farm/animals.ts index 96e5d40..8818104 100644 --- a/src/wasi_farm/animals.ts +++ b/src/wasi_farm/animals.ts @@ -212,20 +212,26 @@ export class WASIFarmAnimal { const stderr = wasi_farm_ref.get_stderr(); // console.log("stdin", stdin, "stdout", stdout, "stderr", stderr); if (stdin !== undefined) { - if (override_fd_map.includes(stdin)) { - this.fd_map[0] = [stdin, i]; + if (this.fd_map[0] === undefined) { + if (override_fd_map.includes(stdin)) { + this.fd_map[0] = [stdin, i]; + } } } if (stdout !== undefined) { // console.log("stdout", stdout, i, "override_fd_map", override_fd_map); - if (override_fd_map.includes(stdout)) { - // console.log("stdout defined"); - this.fd_map[1] = [stdout, i]; + if (this.fd_map[1] === undefined) { + if (override_fd_map.includes(stdout)) { + // console.log("stdout defined"); + this.fd_map[1] = [stdout, i]; + } } } if (stderr !== undefined) { - if (override_fd_map.includes(stderr)) { - this.fd_map[2] = [stderr, i]; + if (this.fd_map[2] === undefined) { + if (override_fd_map.includes(stderr)) { + this.fd_map[2] = [stderr, i]; + } } } for (const j of override_fd_map) { diff --git a/src/wasi_farm/park.ts b/src/wasi_farm/park.ts index 03e6119..7eb8099 100644 --- a/src/wasi_farm/park.ts +++ b/src/wasi_farm/park.ts @@ -396,12 +396,19 @@ export abstract class WASIFarmPark { return [undefined, wasi.ERRNO_BADF]; } - protected fd_write( + protected async fd_write( fd: number, write_data: Uint8Array, - ): [number | undefined, number] { + ): Promise<[number | undefined, number]> { if (this.fds[fd] !== undefined) { - const { ret, nwritten } = this.fds[fd].fd_write(write_data); + const fd_ret = this.fds[fd].fd_write(write_data); + let ret: number; + let nwritten: number; + if (fd_ret instanceof Promise) { + ({ ret, nwritten } = await fd_ret); + } else { + ({ ret, nwritten } = fd_ret); + } return [nwritten, ret]; } return [undefined, wasi.ERRNO_BADF]; diff --git a/src/wasi_farm/shared_array_buffer/park.ts b/src/wasi_farm/shared_array_buffer/park.ts index 861b807..8cd30e7 100644 --- a/src/wasi_farm/shared_array_buffer/park.ts +++ b/src/wasi_farm/shared_array_buffer/park.ts @@ -691,7 +691,7 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { // console.log("fd_write: park: write_data", new TextDecoder().decode(data)); - const [nwritten, error] = this.fd_write(fd, data); + const [nwritten, error] = await this.fd_write(fd, data); // console.log("fd_write: park: error", error); From c19883825c264ef2b2ee04213f2a03117d331dc6 Mon Sep 17 00:00:00 2001 From: oligami Date: Sat, 28 Sep 2024 02:43:23 +0900 Subject: [PATCH 04/12] compile and run on web only!! --- .../depend_rustc_with_lld.js | 154 ++++++++++++++++++ examples/wasi_multi_threads_rustc/rust_wasm | 2 +- .../rustc_with_lld.js | 48 ++++++ examples/wasi_multi_threads_rustc/tmp_dir.js | 50 ++++-- examples/wasi_multi_threads_rustc/worker.js | 143 +++++++++++++--- 5 files changed, 364 insertions(+), 33 deletions(-) create mode 100644 examples/wasi_multi_threads_rustc/depend_rustc_with_lld.js create mode 100644 examples/wasi_multi_threads_rustc/rustc_with_lld.js diff --git a/examples/wasi_multi_threads_rustc/depend_rustc_with_lld.js b/examples/wasi_multi_threads_rustc/depend_rustc_with_lld.js new file mode 100644 index 0000000..fb302ce --- /dev/null +++ b/examples/wasi_multi_threads_rustc/depend_rustc_with_lld.js @@ -0,0 +1,154 @@ +import { + PreopenDirectory, + WASIFarm, + Directory, + File, +} from "../../dist/index.js"; + +async function load_external_file(path) { + return new File(await (await (await fetch(path)).blob()).arrayBuffer()); +} + +const linux_libs_promise = (async () => { + const dir = new Map(); + for (const file of [ + "libaddr2line-d2445d88f0df8258.rlib", + "libadler-6095b59b8443d84e.rlib", + "liballoc-19b196c8c1c1b105.rlib", + "libcfg_if-d04d665f43a7a5c9.rlib", + "libcompiler_builtins-f3e5bc67a3085e50.rlib", + "libcore-24518d8502db248c.rlib", + "libgetopts-4bb89b05e2b4cc6e.rlib", + "libgimli-85e2d283537da979.rlib", + "libhashbrown-1436b1713a4e6650.rlib", + "liblibc-a012fa771333437a.rlib", + "libmemchr-b50e0c33c9e9768d.rlib", + "libminiz_oxide-937a56bed56199f4.rlib", + "libobject-4e591f1863579f49.rlib", + "libpanic_abort-90cfe20cb97a5e4c.rlib", + "libpanic_unwind-9ad8c03a583f4dc7.rlib", + "libproc_macro-32b9efef039a24fe.rlib", + "librustc_demangle-ca292a161705fdb4.rlib", + "librustc_std_workspace_alloc-bba69521e853a996.rlib", + "librustc_std_workspace_core-3da34b7f5e59869a.rlib", + "librustc_std_workspace_std-c35ef78edc033606.rlib", + "libstd_detect-776a1ebea822ca12.rlib", + "libstd-6924b036e1bec7ce.rlib", + "libstd-6924b036e1bec7ce.so", + "libsysroot-0b7644c6027c414e.rlib", + "libtest-3d5766d8038a0e74.rlib", + "libunicode_width-dff2b02e7e936b79.rlib", + "libunwind-c99628283276f21f.rlib", + ]) { + dir.set( + file, + await load_external_file( + `./rust_wasm/rustc_llvm_with_lld/dist/lib/rustlib/x86_64-unknown-linux-gnu/lib/${file}`, + ), + ); + } + return dir; +})(); + +const threads_libs_promise = (async () => { + const dir = new Map(); + for (const file of [ + "libaddr2line-02cc3b87379ea949.rlib", + "libgimli-a80bd3f5fe54def6.rlib", + "libpanic_unwind-05c50d12758b6d01.rlib", + "libstd_detect-a196185ed7f17cfc.rlib", + "libadler-a6b90b86640ec179.rlib", + "libhashbrown-35a68b834152af94.rlib", + "libproc_macro-2aa22b2ed111e644.rlib", + "libsysroot-856cc79af2fd1ee2.rlib", + "liballoc-be9b2b68a2d6adbd.rlib", + "liblibc-374b1b6cc5790f18.rlib", + "librustc_demangle-710d955f336192eb.rlib", + "libtest-4fcaddbdfa4f37f9.rlib", + "libcfg_if-75a956684c8aceef.rlib", + "libmemchr-b8580e949eadd97a.rlib", + "librustc_std_workspace_alloc-9c960f87e9d5a453.rlib", + "libunicode_width-be3becba43cd1b78.rlib", + "libcompiler_builtins-3a0795e4489d8e8b.rlib", + "libminiz_oxide-0bc4b046969a6755.rlib", + "librustc_std_workspace_core-4e237761d66d6cde.rlib", + "libunwind-2e570680d1c4cd0a.rlib", + "libcore-3e70038323b3a06e.rlib", + "libobject-3d83ea5d7ed5636f.rlib", + "librustc_std_workspace_std-5aa56e0a1970dc72.rlib", + "libwasi-f7d0229d2fe97cfd.rlib", + "libgetopts-b3d0219ad62c74a7.rlib", + "libpanic_abort-431cc2501a123c59.rlib", + "libstd-c7f97b33ddfcbfbf.rlib", + ]) { + dir.set( + file, + await load_external_file( + `./rust_wasm/rustc_llvm_with_lld/dist/lib/rustlib/wasm32-wasip1/lib/${file}`, + ), + ); + } + return dir; +})(); + +const threads_self_contained_promise = (async () => { + const dir = new Map(); + for (const file of ["crt1-command.o", "crt1-reactor.o", "libc.a"]) { + dir.set( + file, + await load_external_file( + `./rust_wasm/rustc_llvm_with_lld/dist/lib/rustlib/wasm32-wasip1/lib/self-contained/${file}`, + ), + ); + } + return dir; +})(); + +const [linux_libs, threads_libs, threads_self_contained, components] = + await Promise.all([ + linux_libs_promise, + threads_libs_promise, + threads_self_contained_promise, + await load_external_file( + "./rust_wasm/rustc_llvm_with_lld/dist/lib/rustlib/components", + ), + ]); + +threads_libs.set("self-contained", new Directory(threads_self_contained)); + +const farm = new WASIFarm( + undefined, + undefined, + undefined, + [ + new PreopenDirectory("/sysroot-with-lld", [ + [ + "lib", + new Directory([ + [ + "rustlib", + new Directory([ + ["components", components], + [ + "wasm32-wasip1", + new Directory([["lib", new Directory(threads_libs)]]), + ], + [ + "x86_64-unknown-linux-gnu", + new Directory([["lib", new Directory(linux_libs)]]), + ], + ]), + ], + ]), + ], + ]), + ], + { + allocator_size: 1024 * 1024 * 1024, + // debug: true, + }, +); + +const ret = await farm.get_ref(); + +postMessage({ wasi_ref: ret }); diff --git a/examples/wasi_multi_threads_rustc/rust_wasm b/examples/wasi_multi_threads_rustc/rust_wasm index b3114df..a1f8a99 160000 --- a/examples/wasi_multi_threads_rustc/rust_wasm +++ b/examples/wasi_multi_threads_rustc/rust_wasm @@ -1 +1 @@ -Subproject commit b3114df16241f3f2d332bbf588f0ece0b7ddfe0f +Subproject commit a1f8a99027524f7e06e376f07cec653119f0c2d8 diff --git a/examples/wasi_multi_threads_rustc/rustc_with_lld.js b/examples/wasi_multi_threads_rustc/rustc_with_lld.js new file mode 100644 index 0000000..58633d8 --- /dev/null +++ b/examples/wasi_multi_threads_rustc/rustc_with_lld.js @@ -0,0 +1,48 @@ +import { WASIFarmAnimal } from "../../dist/index.js"; + +const { promise, resolve } = Promise.withResolvers(); +import("../node_modules/@oligami/shared-object/dist/index.js").then(resolve); + +let wasi; +let wasm; +let shared; + +onmessage = async function (e) { + const { wasi_refs } = e.data; + + if (wasi_refs) { + wasm = await WebAssembly.compileStreaming( + fetch("./rust_wasm/rustc_llvm_with_lld/rustc_opt.wasm"), + ); + + wasi = new WASIFarmAnimal( + wasi_refs, + [], // args + ["RUST_MIN_STACK=16777216"], // env + { + // debug: true, + can_thread_spawn: true, + thread_spawn_worker_url: new URL("./thread_spawn.js", import.meta.url) + .href, + // thread_spawn_worker_url: "./thread_spawn.js", + thread_spawn_wasm: wasm, + }, + ); + + await wasi.wait_worker_background_worker(); + + wasi.get_share_memory().grow(200); + + console.log("Waiting for worker background worker..."); + + await promise; + + shared = new SharedObject.SharedObject((...args) => { + wasi.args = ["rustc_with_lld", ...args]; + wasi.block_start_on_thread(); + console.log("wasi.start done"); + }, "rustc_with_lld"); + + postMessage({ ready: true }); + } +}; diff --git a/examples/wasi_multi_threads_rustc/tmp_dir.js b/examples/wasi_multi_threads_rustc/tmp_dir.js index 4086095..d243fff 100644 --- a/examples/wasi_multi_threads_rustc/tmp_dir.js +++ b/examples/wasi_multi_threads_rustc/tmp_dir.js @@ -5,6 +5,23 @@ import { Directory, } from "../../dist/index.js"; +const { promise, resolve } = Promise.withResolvers(); +import("../node_modules/@oligami/shared-object/dist/index.js").then(resolve); + +const root_dir = new PreopenDirectory("/", [ + [ + "hello.rs", + new File( + new TextEncoder("utf-8").encode( + `fn main() { println!("Hello World!"); }`, + ), + ), + ], + ["sysroot", new Directory([])], + ["sysroot-with-lld", new Directory([])], + ["tmp", new Directory([])], +]); + const farm = new WASIFarm( undefined, undefined, @@ -26,18 +43,7 @@ const farm = new WASIFarm( // ], // ]), new PreopenDirectory("/tmp", []), - new PreopenDirectory("/", [ - [ - "hello.rs", - new File( - new TextEncoder("utf-8").encode( - `fn main() { println!("Hello World!"); }`, - ), - ), - ], - ["sysroot", new Directory([])], - ["tmp", new Directory([])], - ]), + root_dir, new PreopenDirectory("~", [ [ "####.rs", @@ -55,4 +61,24 @@ const farm = new WASIFarm( const ret = await farm.get_ref(); +await promise; + +const shared = new SharedObject.SharedObject( + { + get_file(path_str) { + console.log(root_dir); + const path = { + parts: [path_str], + is_dir: false, + }; + const { ret, entry } = root_dir.dir.get_entry_for_path(path); + if (ret !== 0) { + throw new Error(`get_file: ${path_str} failed`); + } + return entry.data; + }, + }, + "root_dir", +); + postMessage({ wasi_ref: ret }); diff --git a/examples/wasi_multi_threads_rustc/worker.js b/examples/wasi_multi_threads_rustc/worker.js index 708c718..966297c 100644 --- a/examples/wasi_multi_threads_rustc/worker.js +++ b/examples/wasi_multi_threads_rustc/worker.js @@ -1,14 +1,20 @@ const { promise, resolve } = Promise.withResolvers(); import("../node_modules/@oligami/shared-object/dist/index.js").then(resolve); +import { WASIFarmAnimal } from "../../dist/index.js"; let tree; let term; let rustc; +let rustc_with_lld; let clang; let llvm_tools; let wasm_ld; let std_out_keep; let std_err_keep; +let root_dir; + +const blueText = "\x1b[34m"; +const resetText = "\x1b[0m"; self.onmessage = async (e) => { const { wasi_ref } = e.data; @@ -17,6 +23,10 @@ self.onmessage = async (e) => { promise: depend_rustc_files_promise, resolve: depend_rustc_files_resolve, } = Promise.withResolvers(); + const { + promise: depend_rustc_with_lld_promise, + resolve: depend_rustc_with_lld_resolve, + } = Promise.withResolvers(); const { promise: depend_clang_files_promise, resolve: depend_clang_files_resolve, @@ -33,6 +43,16 @@ self.onmessage = async (e) => { depend_rustc_files_resolve(e.data); }; + const depend_rustc_with_lld_manage_worker = new Worker( + "depend_rustc_with_lld.js", + { + type: "module", + }, + ); + depend_rustc_with_lld_manage_worker.onmessage = (e) => { + depend_rustc_with_lld_resolve(e.data); + }; + const depend_clang_files_manage_worker = new Worker("depend_clang_files.js", { type: "module", }); @@ -54,20 +74,29 @@ self.onmessage = async (e) => { save_stdout_resolve(e.data); }; - const [depend_rustc_files, depend_clang_files, tmp_dir, save_stdout] = - await Promise.all([ - depend_rustc_files_promise, - depend_clang_files_promise, - tmp_dir_promise, - save_stdout_promise, - ]); + const [ + depend_rustc_files, + depend_rustc_with_lld, + depend_clang_files, + tmp_dir, + save_stdout, + ] = await Promise.all([ + depend_rustc_files_promise, + depend_rustc_with_lld_promise, + depend_clang_files_promise, + tmp_dir_promise, + save_stdout_promise, + ]); const { wasi_ref: wasi_ref_depend_rustc_files } = depend_rustc_files; + const { wasi_ref: wasi_ref_depend_rustc_with_lld_files } = + depend_rustc_with_lld; const { wasi_ref: wasi_ref_depend_clang_files } = depend_clang_files; const { wasi_ref: wasi_ref_tmp_dir } = tmp_dir; const { wasi_ref: wasi_ref_save_stdout } = save_stdout; const wasi_refs = [ wasi_ref_depend_rustc_files, + wasi_ref_depend_rustc_with_lld_files, wasi_ref_depend_clang_files, wasi_ref_tmp_dir, wasi_ref, @@ -77,6 +106,8 @@ self.onmessage = async (e) => { Promise.withResolvers(); const { promise: rustc_promise, resolve: rustc_resolve } = Promise.withResolvers(); + const { promise: rustc_with_lld_promise, resolve: rustc_with_lld_resolve } = + Promise.withResolvers(); const { promise: clang_promise, resolve: clang_resolve } = Promise.withResolvers(); @@ -96,6 +127,14 @@ self.onmessage = async (e) => { rustc_resolve(e.data); }; + const rustc_with_lld_worker = new Worker("rustc_with_lld.js", { + type: "module", + }); + rustc_with_lld_worker.onmessage = (e) => { + console.log("rustc_with_lld onmessage"); + rustc_with_lld_resolve(e.data); + }; + const clang_worker = new Worker("clang.js", { type: "module", }); @@ -110,13 +149,21 @@ self.onmessage = async (e) => { rustc_worker.postMessage({ wasi_refs: [wasi_ref_save_stdout, ...wasi_refs], }); + rustc_with_lld_worker.postMessage({ + wasi_refs, + }); clang_worker.postMessage({ wasi_refs, }); console.log("Waiting for tree and rustc to finish..."); - await Promise.all([tree_promise, rustc_promise, clang_promise]); + await Promise.all([ + tree_promise, + rustc_promise, + rustc_with_lld_promise, + clang_promise, + ]); console.log("Sending run message..."); @@ -128,6 +175,8 @@ self.onmessage = async (e) => { rustc = new SharedObject.SharedObjectRef("rustc").proxy(); + rustc_with_lld = new SharedObject.SharedObjectRef("rustc_with_lld").proxy(); + clang = new SharedObject.SharedObjectRef("clang").proxy(); llvm_tools = new SharedObject.SharedObjectRef("llvm-tools").proxy(); @@ -138,38 +187,40 @@ self.onmessage = async (e) => { std_err_keep = new SharedObject.SharedObjectRef("std_err_keep").proxy(); + root_dir = new SharedObject.SharedObjectRef("root_dir").proxy(); + // llvm-tools - await term.writeln("\n$ llvm-tools"); + await term.writeln(`$${blueText} llvm-tools${resetText}`); await llvm_tools(); // clang -h - await term.writeln("\n$ clang --help"); + await term.writeln(`\n$${blueText} clang --help${resetText}`); await clang("--help"); // clang -v - await term.writeln("\n$ clang -v"); + await term.writeln(`\n$${blueText} clang -v${resetText}`); await clang("-v"); // wasm-ld --help - await term.writeln("\n$ wasm-ld --help"); + await term.writeln(`\n$${blueText} wasm-ld --help${resetText}`); await wasm_ld("--help"); // wasm-ld -v - await term.writeln("\n$ wasm-ld -v"); + await term.writeln(`\n$${blueText} wasm-ld -v${resetText}`); await wasm_ld("-v"); // tree -h - await term.writeln("\n$ tree -h"); + await term.writeln(`\n$${blueText} tree -h${resetText}`); await tree("-h"); // tree / - await term.writeln("\n$ tree /"); + await term.writeln(`\n$${blueText} tree /${resetText}`); await tree("/"); // rustc -h await std_out_keep.reset(); await std_err_keep.reset(); - await term.writeln("\n$ rustc -h"); + await term.writeln(`\n$${blueText} rustc -h${resetText}`); await rustc("-h"); const rustc_help = await std_out_keep.get(); const rustc_help_err = await std_err_keep.get(); @@ -178,7 +229,7 @@ self.onmessage = async (e) => { // rustc /hello.rs --sysroot /sysroot --target wasm32-wasip1-threads -Csave-temps --out-dir /tmp await term.writeln( - "\n$ rustc /hello.rs --sysroot /sysroot --target wasm32-wasip1-threads -Csave-temps --out-dir /tmp", + `\n$${blueText} rustc /hello.rs --sysroot /sysroot --target wasm32-wasip1-threads -Csave-temps --out-dir /tmp${resetText}`, ); try { await std_out_keep.reset(); @@ -202,7 +253,7 @@ self.onmessage = async (e) => { console.warn(err); // tree / - await term.writeln("\n$ tree /"); + await term.writeln(`\n$${blueText} tree /${resetText}`); await tree("/"); // If the glob pattern is used, @@ -229,14 +280,66 @@ self.onmessage = async (e) => { }); console.log(lld_args); - await term.writeln(`\n$ wasm-ld ${lld_args.join(" ")}`); + await term.writeln( + `\n$${blueText} wasm-ld ${lld_args.join(" ")}${resetText}`, + ); try { await wasm_ld(lld_args); + } catch (error) { + console.error(error); + const redText = "\x1b[31m"; + const boldText = "\x1b[1m"; + + const message = `${boldText}${redText}Error: ${error.message}${resetText}\n`; + const stack = `${redText}Stack Trace: ${error.stack}${resetText}`; + + await term.writeln(message + stack); + } + + // tree / + await term.writeln(`\n$${blueText} tree /${resetText}`); + await tree("/"); + + // rustc_with_lld /hello.rs --sysroot /sysroot --target wasm32-wasip1 + await term.writeln( + `\n$${blueText} rustc_with_lld /hello.rs --sysroot /sysroot-with-lld --target wasm32-wasip1${resetText}`, + ); + try { + await rustc_with_lld( + "/hello.rs", + "--sysroot", + "/sysroot-with-lld", + "--target", + "wasm32-wasip1", + ); } catch (e) { console.error(e); } // tree / - await term.writeln("\n$ tree /"); + await term.writeln(`\n$${blueText} tree /${resetText}`); await tree("/"); + + // run /hello.wasm + await term.writeln(`\n$${blueText} run /hello.wasm${resetText}`); + const created_wasm_buffer = await root_dir.get_file("hello.wasm"); + const created_wasm = await WebAssembly.compile(created_wasm_buffer); + const wasi = new WASIFarmAnimal( + wasi_refs, + [], // args + [], // env + { + debug: false, + }, + ); + + // Memory is rewritten at this time. + const inst = await WebAssembly.instantiate(created_wasm, { + wasi_snapshot_preview1: wasi.wasiImport, + }); + + wasi.start(inst); + + // all done + await term.writeln(`\n$${blueText} All done!${resetText}`); }; From aa6e32bf92b5392981129a9a551d466be6b273c6 Mon Sep 17 00:00:00 2001 From: oligami Date: Sun, 29 Sep 2024 03:34:44 +0900 Subject: [PATCH 05/12] add cargo --- examples/wasi_multi_threads_rustc/rust_wasm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/wasi_multi_threads_rustc/rust_wasm b/examples/wasi_multi_threads_rustc/rust_wasm index a1f8a99..7a33fac 160000 --- a/examples/wasi_multi_threads_rustc/rust_wasm +++ b/examples/wasi_multi_threads_rustc/rust_wasm @@ -1 +1 @@ -Subproject commit a1f8a99027524f7e06e376f07cec653119f0c2d8 +Subproject commit 7a33facbc2e89777ab4af0da4732ad5f19871a3a From 2f8c35e1c8ef3dc0da37cd66b5ba5db05c334bc3 Mon Sep 17 00:00:00 2001 From: oligami Date: Sun, 29 Sep 2024 17:05:20 +0900 Subject: [PATCH 06/12] patch --- examples/wasi_multi_threads_rustc/rust_wasm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/wasi_multi_threads_rustc/rust_wasm b/examples/wasi_multi_threads_rustc/rust_wasm index 7a33fac..ad30340 160000 --- a/examples/wasi_multi_threads_rustc/rust_wasm +++ b/examples/wasi_multi_threads_rustc/rust_wasm @@ -1 +1 @@ -Subproject commit 7a33facbc2e89777ab4af0da4732ad5f19871a3a +Subproject commit ad30340c81d4d08b693d2f186e64c58c318ecfcc From 04855e538d19951865f76683eae5e5091f4ae08d Mon Sep 17 00:00:00 2001 From: oligami Date: Sun, 29 Sep 2024 17:22:29 +0900 Subject: [PATCH 07/12] patch --- examples/wasi_multi_threads_rustc/rust_wasm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/wasi_multi_threads_rustc/rust_wasm b/examples/wasi_multi_threads_rustc/rust_wasm index ad30340..40d9641 160000 --- a/examples/wasi_multi_threads_rustc/rust_wasm +++ b/examples/wasi_multi_threads_rustc/rust_wasm @@ -1 +1 @@ -Subproject commit ad30340c81d4d08b693d2f186e64c58c318ecfcc +Subproject commit 40d9641b27089084fef56818884b0d48bfe0a93e From 9df3a046892417f36cf3fe6fd98ec3dc1fd7cd93 Mon Sep 17 00:00:00 2001 From: oligami Date: Sun, 29 Sep 2024 17:28:33 +0900 Subject: [PATCH 08/12] wip save --- examples/wasi_multi_threads_rustc/cargo.js | 48 +++++ examples/wasi_multi_threads_rustc/worker.js | 16 ++ src/wasi_farm/animals.ts | 175 +++++++++++++++++- src/wasi_farm/park.ts | 19 ++ src/wasi_farm/ref.ts | 4 + src/wasi_farm/shared_array_buffer/park.ts | 19 ++ src/wasi_farm/shared_array_buffer/ref.ts | 34 ++++ .../shared_array_buffer/thread_spawn.ts | 65 ++++++- 8 files changed, 373 insertions(+), 7 deletions(-) create mode 100644 examples/wasi_multi_threads_rustc/cargo.js diff --git a/examples/wasi_multi_threads_rustc/cargo.js b/examples/wasi_multi_threads_rustc/cargo.js new file mode 100644 index 0000000..c838a0e --- /dev/null +++ b/examples/wasi_multi_threads_rustc/cargo.js @@ -0,0 +1,48 @@ +import { WASIFarmAnimal } from "../../dist/index.js"; + +const { promise, resolve } = Promise.withResolvers(); +import("../node_modules/@oligami/shared-object/dist/index.js").then(resolve); + +let wasi; +let wasm; +let shared; + +onmessage = async function (e) { + const { wasi_refs } = e.data; + + if (wasi_refs) { + wasm = await WebAssembly.compileStreaming( + fetch("./rust_wasm/rustc_llvm_with_lld/cargo_opt.wasm"), + ); + + wasi = new WASIFarmAnimal( + wasi_refs, + [], // args + ["RUST_MIN_STACK=16777216"], // env + { + // debug: true, + can_thread_spawn: true, + thread_spawn_worker_url: new URL("./thread_spawn.js", import.meta.url) + .href, + // thread_spawn_worker_url: "./thread_spawn.js", + thread_spawn_wasm: wasm, + }, + ); + + await wasi.wait_worker_background_worker(); + + wasi.get_share_memory().grow(200); + + console.log("Waiting for worker background worker..."); + + await promise; + + shared = new SharedObject.SharedObject((...args) => { + wasi.args = ["cargo", ...args]; + wasi.block_start_on_thread(); + console.log("wasi.start done"); + }, "cargo"); + + postMessage({ ready: true }); + } +}; diff --git a/examples/wasi_multi_threads_rustc/worker.js b/examples/wasi_multi_threads_rustc/worker.js index 966297c..f9f9f04 100644 --- a/examples/wasi_multi_threads_rustc/worker.js +++ b/examples/wasi_multi_threads_rustc/worker.js @@ -9,6 +9,7 @@ let rustc_with_lld; let clang; let llvm_tools; let wasm_ld; +let cargo; let std_out_keep; let std_err_keep; let root_dir; @@ -110,6 +111,8 @@ self.onmessage = async (e) => { Promise.withResolvers(); const { promise: clang_promise, resolve: clang_resolve } = Promise.withResolvers(); + const { promise: cargo_promise, resolve: cargo_resolve } = + Promise.withResolvers(); const tree_worker = new Worker("tree.js", { type: "module", @@ -143,6 +146,14 @@ self.onmessage = async (e) => { clang_resolve(e.data); }; + const cargo_worker = new Worker("cargo.js", { + type: "module", + }); + cargo_worker.onmessage = (e) => { + console.log("cargo onmessage"); + cargo_resolve(e.data); + }; + tree_worker.postMessage({ wasi_refs, }); @@ -155,6 +166,9 @@ self.onmessage = async (e) => { clang_worker.postMessage({ wasi_refs, }); + cargo_worker.postMessage({ + wasi_refs, + }); console.log("Waiting for tree and rustc to finish..."); @@ -189,6 +203,8 @@ self.onmessage = async (e) => { root_dir = new SharedObject.SharedObjectRef("root_dir").proxy(); + cargo = new SharedObject.SharedObjectRef("cargo").proxy(); + // llvm-tools await term.writeln(`$${blueText} llvm-tools${resetText}`); await llvm_tools(); diff --git a/src/wasi_farm/animals.ts b/src/wasi_farm/animals.ts index 8818104..92f6f1a 100644 --- a/src/wasi_farm/animals.ts +++ b/src/wasi_farm/animals.ts @@ -16,6 +16,8 @@ export class WASIFarmAnimal { private id_in_wasi_farm_ref: Array; + private extend_imports: boolean; + inst: { exports: { memory: WebAssembly.Memory } }; // eslint-disable-next-line @typescript-eslint/no-explicit-any wasiImport: { [key: string]: (...args: Array) => unknown }; @@ -24,6 +26,19 @@ export class WASIFarmAnimal { "thread-spawn": (start_arg: number) => number; }; + extendImport: { + fetch_open: ( + url_ptr: number, + url_len: number, + method_ptr: number, + method_len: number, + serialized_headers_ptr: number, + serialized_headers_len: number, + body_ptr: number, + body_len: number, + ) => number; + }; + private can_array_buffer; private can_thread_spawn: boolean; @@ -121,7 +136,11 @@ export class WASIFarmAnimal { const view = new Uint8Array(this.get_share_memory().buffer); view.fill(0); - await this.thread_spawner.async_start_on_thread(this.args, this.env); + await this.thread_spawner.async_start_on_thread( + this.args, + this.env, + this.extend_imports, + ); const code = await this.thread_spawner.async_wait_done_or_error(); @@ -148,7 +167,11 @@ export class WASIFarmAnimal { console.log("block_start_on_thread: start"); - this.thread_spawner.block_start_on_thread(this.args, this.env); + this.thread_spawner.block_start_on_thread( + this.args, + this.env, + this.extend_imports, + ); console.log("block_start_on_thread: wait"); @@ -333,12 +356,15 @@ export class WASIFarmAnimal { can_thread_spawn?: boolean; thread_spawn_worker_url?: string; thread_spawn_wasm?: WebAssembly.Module; + extend_imports?: boolean; } = {}, override_fd_maps?: Array, thread_spawner?: ThreadSpawner, ) { debug.enable(options.debug); + this.extend_imports = options.extend_imports || false; + let wasi_farm_refs_tmp: WASIFarmRefObject[]; if (Array.isArray(wasi_farm_refs)) { wasi_farm_refs_tmp = @@ -1280,10 +1306,155 @@ export class WASIFarmAnimal { self.args, self.env, self.fd_map, + self.extend_imports, ); return thread_id; }, }; + + if (this.extend_imports) { + this.extendImport = { + fetch_open: ( + // i32 + url_ptr: number, + // i32 + url_len: number, + // i32 + method_ptr: number, + // i32 + method_len: number, + // i32 + serialized_headers_ptr: number, + // i32 + serialized_headers_len: number, + // i32 + body_ptr: number, + // i32 + body_len: number, + // fd + ): number => { + const buffer8 = new Uint8Array(self.inst.exports.memory.buffer); + + const url_buf = buffer8.slice(url_ptr, url_ptr + url_len); + const method_buf = buffer8.slice(method_ptr, method_ptr + method_len); + const serialized_headers_buf = buffer8.slice( + serialized_headers_ptr, + serialized_headers_ptr + serialized_headers_len, + ); + const body_buf = buffer8.slice(body_ptr, body_ptr + body_len); + + const url = new TextDecoder().decode(url_buf); + const method = new TextDecoder().decode(method_buf); + const serialized_headers_txt = new TextDecoder().decode( + serialized_headers_buf, + ); + const body = new TextDecoder().decode(body_buf); + console.log("fetch_open", url, method, serialized_headers_txt, body); + const serialized_headers = JSON.parse(serialized_headers_txt); + console.log("fetch_open", serialized_headers); + + const request = new XMLHttpRequest(); + // `false` makes the request synchronous + request.open(method, url, false); + request.timeout = 10000; + + for (const [key, value] of Object.entries(serialized_headers)) { + request.setRequestHeader(key as string, value as string); + } + + request.send(body); + + const status = request.status; + + const response_headers_str = request.getAllResponseHeaders(); + + console.log("fetch_open", status, response_headers_str); + + // Vec<(String, String)> + const response_headers: Array<[string, string]> = []; + + for (const line of response_headers_str.split("\r\n")) { + if (line === "") { + continue; + } + const [key, value] = line.split(": "); + response_headers.push([key, value]); + } + + const response_body = request.response; + + let response_body_u8: Uint8Array; + + console.log( + "fetch_open", + status, + response_headers, + response_body, + request.responseType, + ); + + switch (request.responseType) { + case "arraybuffer": + response_body_u8 = new Uint8Array(response_body); + break; + case "text": + response_body_u8 = new TextEncoder().encode( + response_body as string, + ); + break; + default: + throw new Error( + `unsupported response type: ${request.responseType}`, + ); + } + + const response_headers_u8 = new TextEncoder().encode( + JSON.stringify(response_headers), + ); + + // first byte is status le_bytes i32 + // second byte is headers byte length i32 + const ret_bytes: ArrayBuffer = new ArrayBuffer( + 2 + response_headers_u8.length + response_body_u8.length, + ); + + const ret_bytes32 = new DataView(ret_bytes); + ret_bytes32.setInt32(0, status, true); + ret_bytes32.setInt32(4, response_headers_u8.length, true); + + const ret_bytes8 = new Uint8Array(ret_bytes); + ret_bytes8.set(response_headers_u8, 8); + ret_bytes8.set(response_body_u8, 8 + response_headers_u8.length); + + // open fd on first wasi_ref + // lock input fd and call create_fd on it + self.check_fds(); + const [mapped_fd, wasi_farm_ref_n] = self.get_fd_and_wasi_ref_n(0); + if (mapped_fd === undefined || wasi_farm_ref_n === undefined) { + throw new Error("fetch_open: bad fd"); + } + const wasi_farm_ref = self.wasi_farm_refs[wasi_farm_ref_n]; + const [opened_fd, ret] = wasi_farm_ref.open_fd_with_buff( + mapped_fd, + ret_bytes8, + ); + if (ret !== wasi.ERRNO_SUCCESS) { + throw new Error("fetch_open: failed to open fd"); + } + if (opened_fd) { + if (self.fd_map.includes([opened_fd, wasi_farm_ref_n])) { + throw new Error("opened_fd already exists"); + } + const mapped_opened_fd = self.map_new_fd_and_notify( + opened_fd, + wasi_farm_ref_n, + ); + return mapped_opened_fd; + } + throw new Error("fetch_open: failed to open fd"); + }, + }; + } } } diff --git a/src/wasi_farm/park.ts b/src/wasi_farm/park.ts index 7eb8099..4e6b212 100644 --- a/src/wasi_farm/park.ts +++ b/src/wasi_farm/park.ts @@ -1,5 +1,6 @@ import { debug } from "../debug.js"; import type { Fd } from "../fd.js"; +import { File, OpenFile } from "../fs_mem.js"; import * as wasi from "../wasi_defs.js"; import type { WASIFarmRefObject } from "./ref.js"; @@ -589,4 +590,22 @@ export abstract class WASIFarmPark { } return wasi.ERRNO_BADF; } + + protected async open_fd_with_buff( + fd: number, + buf: Uint8Array, + ): Promise<[number | undefined, number]> { + if (this.fds[fd] !== undefined) { + const fd_obj = new OpenFile(new File(buf)); + + const [resolve, opened_fd] = await this.get_new_fd(); + + this.fds[opened_fd] = fd_obj; + + await resolve(); + + return [opened_fd, wasi.ERRNO_SUCCESS]; + } + return [undefined, wasi.ERRNO_BADF]; + } } diff --git a/src/wasi_farm/ref.ts b/src/wasi_farm/ref.ts index 1e86f03..4f0f773 100644 --- a/src/wasi_farm/ref.ts +++ b/src/wasi_farm/ref.ts @@ -183,4 +183,8 @@ export abstract class WASIFarmRef { new_path: Uint8Array, ): number; abstract path_unlink_file(fd: number | undefined, path: Uint8Array): number; + abstract open_fd_with_buff( + fd: number | undefined, + buf: Uint8Array, + ): [number, number]; } diff --git a/src/wasi_farm/shared_array_buffer/park.ts b/src/wasi_farm/shared_array_buffer/park.ts index 8cd30e7..8b7320c 100644 --- a/src/wasi_farm/shared_array_buffer/park.ts +++ b/src/wasi_farm/shared_array_buffer/park.ts @@ -951,6 +951,25 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { set_error(this.path_unlink_file(fd, path_str)); break; } + // open_fd_with_buff: (fd: u32, buf: pointer, buf_len: u32) => [u32, errno]; + case 38: { + const fd = Atomics.load(func_sig_view_u32, 1); + const buf_ptr = Atomics.load(func_sig_view_u32, 2); + const buf_len = Atomics.load(func_sig_view_u32, 3); + + const buf = new Uint8Array( + this.allocator.get_memory(buf_ptr, buf_len), + ); + this.allocator.free(buf_ptr, buf_len); + + const [opened_fd, error] = await this.open_fd_with_buff(fd, buf); + + if (opened_fd !== undefined) { + Atomics.store(func_sig_view_u32, 0, opened_fd); + } + set_error(error); + break; + } default: { throw new Error(`Unknown function number: ${func_number}`); } diff --git a/src/wasi_farm/shared_array_buffer/ref.ts b/src/wasi_farm/shared_array_buffer/ref.ts index acae92b..d0dfffb 100644 --- a/src/wasi_farm/shared_array_buffer/ref.ts +++ b/src/wasi_farm/shared_array_buffer/ref.ts @@ -1400,4 +1400,38 @@ export class WASIFarmRefUseArrayBuffer extends WASIFarmRef { return error; } + + open_fd_with_buff(fd: number, buf: Uint8Array): [number, number] { + this.lock_fd(fd); + + const bytes_offset = fd * fd_func_sig_bytes; + const func_sig_view_u32 = new Uint32Array(this.fd_func_sig, bytes_offset); + + Atomics.store(func_sig_view_u32, 0, 38); + Atomics.store(func_sig_view_u32, 1, fd); + + const [ptr, len] = this.allocator.block_write( + buf, + this.fd_func_sig, + fd * fd_func_sig_u32_size + 2, + ); + + if (!this.call_fd_func(fd)) { + this.allocator.free(ptr, len); + this.release_fd(fd); + return [undefined, wasi.ERRNO_BADF]; + } + + const error = this.get_error(fd); + + if (error === wasi.ERRNO_SUCCESS) { + const new_fd = Atomics.load(func_sig_view_u32, 0); + this.release_fd(fd); + return [new_fd, error]; + } + + this.release_fd(fd); + + return [undefined, error]; + } } diff --git a/src/wasi_farm/shared_array_buffer/thread_spawn.ts b/src/wasi_farm/shared_array_buffer/thread_spawn.ts index dc3ba3b..afff1b7 100644 --- a/src/wasi_farm/shared_array_buffer/thread_spawn.ts +++ b/src/wasi_farm/shared_array_buffer/thread_spawn.ts @@ -140,6 +140,7 @@ export class ThreadSpawner { args: Array, env: Array, fd_map: Array<[number, number]>, + extend_imports: boolean, ): number { const worker = this.worker_background_ref.new_worker( this.worker_url, @@ -150,6 +151,7 @@ export class ThreadSpawner { args, env, fd_map, + extend_imports, }, ); @@ -161,6 +163,7 @@ export class ThreadSpawner { async async_start_on_thread( args: Array, env: Array, + extend_imports: boolean, ): Promise { if (!self.Worker.toString().includes("[native code]")) { if (self.Worker.toString().includes("function")) { @@ -178,11 +181,16 @@ export class ThreadSpawner { this_is_start: true, args, env, + extend_imports, }, ); } - block_start_on_thread(args: Array, env: Array): void { + block_start_on_thread( + args: Array, + env: Array, + extend_imports: boolean, + ): void { if (!self.Worker.toString().includes("[native code]")) { if (self.Worker.toString().includes("function")) { console.warn("SubWorker(new Worker on Worker) is polyfilled maybe."); @@ -199,6 +207,7 @@ export class ThreadSpawner { this_is_start: true, args, env, + extend_imports, }, ); } @@ -279,8 +288,11 @@ export const thread_spawn_on_worker = async (msg: { args: Array; env: Array; fd_map: Array; + extend_imports: boolean; this_is_start?: boolean; }): Promise => { + console.log("thread_spawn_on_worker", msg); + if (msg.this_is_thread_spawn) { if (msg.this_is_start) { const thread_spawner = ThreadSpawner.init_self_with_worker_background_ref( @@ -295,18 +307,41 @@ export const thread_spawn_on_worker = async (msg: { { can_thread_spawn: true, thread_spawn_worker_url: msg.sl_object.worker_url, + extend_imports: msg.extend_imports, }, undefined, thread_spawner, ); - const inst = await WebAssembly.instantiate(msg.thread_spawn_wasm, { + const imports: { + env: { + memory: WebAssembly.Memory; + }; + wasi: { + "thread-spawn": (start_arg: number) => number; + }; + wasi_snapshot_preview1: { + [key: string]: (...args: Array) => unknown; + }; + extend_imports?: { + [key: string]: (...args: Array) => unknown; + }; + } = { env: { memory: wasi.get_share_memory(), }, wasi: wasi.wasiThreadImport, wasi_snapshot_preview1: wasi.wasiImport, - }); + }; + + if (msg.extend_imports) { + imports.extend_imports = wasi.extendImport; + } + + const inst = await WebAssembly.instantiate( + msg.thread_spawn_wasm, + imports, + ); wasi.start( inst as unknown as { @@ -364,18 +399,38 @@ export const thread_spawn_on_worker = async (msg: { { can_thread_spawn: true, thread_spawn_worker_url: sl_object.worker_url, + extend_imports: msg.extend_imports, }, override_fd_map, thread_spawner, ); - const inst = await WebAssembly.instantiate(thread_spawn_wasm, { + const imports: { + env: { + memory: WebAssembly.Memory; + }; + wasi: { + "thread-spawn": (start_arg: number) => number; + }; + wasi_snapshot_preview1: { + [key: string]: (...args: Array) => unknown; + }; + extend_imports?: { + [key: string]: (...args: Array) => unknown; + }; + } = { env: { memory: wasi.get_share_memory(), }, wasi: wasi.wasiThreadImport, wasi_snapshot_preview1: wasi.wasiImport, - }); + }; + + if (msg.extend_imports) { + imports.extend_imports = wasi.extendImport; + } + + const inst = await WebAssembly.instantiate(thread_spawn_wasm, imports); globalThis.postMessage({ msg: "ready", From da57d2f2a5b03b91754beeccdcd9432fc5cee2f6 Mon Sep 17 00:00:00 2001 From: oligami Date: Sun, 29 Sep 2024 17:53:39 +0900 Subject: [PATCH 09/12] patch --- examples/wasi_multi_threads_rustc/cargo.js | 2 ++ examples/wasi_multi_threads_rustc/rust_wasm | 2 +- examples/wasi_multi_threads_rustc/worker.js | 5 +++++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/examples/wasi_multi_threads_rustc/cargo.js b/examples/wasi_multi_threads_rustc/cargo.js index c838a0e..d15a2d5 100644 --- a/examples/wasi_multi_threads_rustc/cargo.js +++ b/examples/wasi_multi_threads_rustc/cargo.js @@ -26,6 +26,7 @@ onmessage = async function (e) { .href, // thread_spawn_worker_url: "./thread_spawn.js", thread_spawn_wasm: wasm, + extend_imports: true, }, ); @@ -38,6 +39,7 @@ onmessage = async function (e) { await promise; shared = new SharedObject.SharedObject((...args) => { + console.log("wasi.start"); wasi.args = ["cargo", ...args]; wasi.block_start_on_thread(); console.log("wasi.start done"); diff --git a/examples/wasi_multi_threads_rustc/rust_wasm b/examples/wasi_multi_threads_rustc/rust_wasm index 40d9641..bff31e3 160000 --- a/examples/wasi_multi_threads_rustc/rust_wasm +++ b/examples/wasi_multi_threads_rustc/rust_wasm @@ -1 +1 @@ -Subproject commit 40d9641b27089084fef56818884b0d48bfe0a93e +Subproject commit bff31e3be735bcb22fef2a9e24a5143a872f6f23 diff --git a/examples/wasi_multi_threads_rustc/worker.js b/examples/wasi_multi_threads_rustc/worker.js index f9f9f04..ca297a8 100644 --- a/examples/wasi_multi_threads_rustc/worker.js +++ b/examples/wasi_multi_threads_rustc/worker.js @@ -177,6 +177,7 @@ self.onmessage = async (e) => { rustc_promise, rustc_with_lld_promise, clang_promise, + cargo_promise, ]); console.log("Sending run message..."); @@ -205,6 +206,10 @@ self.onmessage = async (e) => { cargo = new SharedObject.SharedObjectRef("cargo").proxy(); + // cargo -h + await term.writeln(`\n$${blueText} cargo -h${resetText}`); + await cargo("-h"); + // llvm-tools await term.writeln(`$${blueText} llvm-tools${resetText}`); await llvm_tools(); From b66f826740a810e07fb3898c4712c72c4b2ee405 Mon Sep 17 00:00:00 2001 From: oligami Date: Mon, 30 Sep 2024 21:10:33 +0900 Subject: [PATCH 10/12] [wip] save --- examples/wasi_multi_threads_rustc/cargo.js | 10 +++- examples/wasi_multi_threads_rustc/cat.js | 47 +++++++++++++++++ examples/wasi_multi_threads_rustc/cat.rs | 20 +++++++ examples/wasi_multi_threads_rustc/cat.wasm | Bin 0 -> 1679997 bytes examples/wasi_multi_threads_rustc/worker.js | 49 ++++++++++++++++++ src/wasi_farm/animals.ts | 22 +++++++- src/wasi_farm/park.ts | 3 +- src/wasi_farm/shared_array_buffer/park.ts | 5 +- .../shared_array_buffer/thread_spawn.ts | 7 ++- 9 files changed, 157 insertions(+), 6 deletions(-) create mode 100644 examples/wasi_multi_threads_rustc/cat.js create mode 100644 examples/wasi_multi_threads_rustc/cat.rs create mode 100644 examples/wasi_multi_threads_rustc/cat.wasm diff --git a/examples/wasi_multi_threads_rustc/cargo.js b/examples/wasi_multi_threads_rustc/cargo.js index d15a2d5..b55ea3d 100644 --- a/examples/wasi_multi_threads_rustc/cargo.js +++ b/examples/wasi_multi_threads_rustc/cargo.js @@ -18,7 +18,15 @@ onmessage = async function (e) { wasi = new WASIFarmAnimal( wasi_refs, [], // args - ["RUST_MIN_STACK=16777216"], // env + [ + "RUST_MIN_STACK=16777216", + "HOME=/home/wasi", + "RUST_LOG=debug", + "RUST_BACKTRACE=full", + // This is made up of forced patches. Usually not available. + "RUSTC_SYSROOT=/sysroot-with-lld", + "RUSTFLAGS=", + ], // env { // debug: true, can_thread_spawn: true, diff --git a/examples/wasi_multi_threads_rustc/cat.js b/examples/wasi_multi_threads_rustc/cat.js new file mode 100644 index 0000000..fdd91d1 --- /dev/null +++ b/examples/wasi_multi_threads_rustc/cat.js @@ -0,0 +1,47 @@ +import { strace, WASIFarmAnimal } from "../../dist/index.js"; + +const { promise, resolve } = Promise.withResolvers(); +import("../node_modules/@oligami/shared-object/dist/index.js").then(resolve); + +let wasi; +let inst; +let wasm; + +let shared; + +onmessage = async function (e) { + const { wasi_refs } = e.data; + + if (wasi_refs) { + wasm = await WebAssembly.compileStreaming(fetch("./cat.wasm")); + + wasi = new WASIFarmAnimal( + wasi_refs, + ["cat"], // args + [], // env + { + debug: false, + }, + ); + + // Memory is rewritten at this time. + inst = await WebAssembly.instantiate(wasm, { + wasi_snapshot_preview1: wasi.wasiImport, + }); + + await promise; + + const memory_reset = inst.exports.memory.buffer; + const memory_reset_view = new Uint8Array(memory_reset).slice(); + + shared = new SharedObject.SharedObject((...args) => { + // If I don't reset memory, I get some kind of error. + wasi.args = ["cat", ...args]; + const memory_view = new Uint8Array(inst.exports.memory.buffer); + memory_view.set(memory_reset_view); + wasi.start(inst); + }, "cat"); + + postMessage({ ready: true }); + } +}; diff --git a/examples/wasi_multi_threads_rustc/cat.rs b/examples/wasi_multi_threads_rustc/cat.rs new file mode 100644 index 0000000..147cb14 --- /dev/null +++ b/examples/wasi_multi_threads_rustc/cat.rs @@ -0,0 +1,20 @@ +// cat alt + +use std::io::BufRead; + +pub fn main() { + let args: Vec = std::env::args().collect(); + if args.len() < 2 { + eprintln!("Usage: {} ", args[0]); + std::process::exit(1); + } + + let path = &args[1]; + let file = std::fs::File::open(path).unwrap(); + let reader = std::io::BufReader::new(file); + for line in reader.lines() { + println!("{}", line.unwrap()); + } +} + +// rustc cat.rs --target=wasm32-wasip1 diff --git a/examples/wasi_multi_threads_rustc/cat.wasm b/examples/wasi_multi_threads_rustc/cat.wasm new file mode 100644 index 0000000000000000000000000000000000000000..327892926d43db6290720b0127b3b924ba285a2c GIT binary patch literal 1679997 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

L%gOn>!ZkwZ>QlXKa(5G)tQNE9d+iIq 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�(xfxJOzR@?{nDqOw) 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

7gNd8M;msV*Fq^^Vo7!f!pr?6`0_zHe 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 z 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 z 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
    qp+OjC}-)rpFZ+u=A4cG%|ari7LOsP+i$T@@^ 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%0A9Jho`WPrywc+ z%v%9-g_bCcim-{2Dy7HAds4I1kuzt6Q47?8`77v{Ei>MZf*0nwn{_^`Vj)h9SWC_&f%EaCwfwj+1j*jMTe^Jdc$@TBzLnF z0cvStCGC^Eo5|rykROfMJ^|o;yM@e>eX=JNr|QZn+YwxvtFZ6*)%g_T6AGz>_3Z5E z_w7?W0ampfl+@WpRv6jg#w{^2K9ZcNu@L;~pKgU^u&(jC;Cvwx*@_yVib2Um_Nm_L zt#+p^@Kr&z$u>At%|h@Q4f`}t_Ax1j#`X(l%TelSYajWW23~7S>5!CuYM)-d`09dN z*9G^g*=R`BI$LjnJwwC?LG44k27_py;T3lBtY?=u2XBoML0y(a7#*FKeWoYLs-p3w z*X!d{h}%3(vD{)_+6c+AwsdjG2IP90_F3Nf$R?~lKs{(FI?CuPr}o+9^b?B|#!T0# z-$Xk>kMQu(-jV4?+W>S#B$c8jAMA5H(S$gEGXr%YC8ax96?QmtEMQQ#LPkX$HCX#x zPpcPd6DwYR1^i1IGN8Ug+9Z^Ee9J!X?A_!XBc2Ac$Q|LZi09g73ylPvP-vfjwx$EQ zRG-S7+S4~2@SjL8$c6f-5F!CjtqK*?Zr8rRlYH2AeSohl&e>E(3TMV3BB&n|VNpy* zG|s-zEA^)<4;?^ZF3xl<@XHp+z6SMX9qtoD9-xVRktdt0G~K$_-`H@wV^(C6bdqM} z^ts3aFsNvQfD%LU0g!}!v1?M!+o~ib=2nLLO7rHfLtxUy>cnA6MwhtXzNECSGNSw} z?9@bAZpYD)MXHT*9a%+$MmqMT^NS^C?RZ5as)n#8Kwfz%ypxx?mzxD9;xli*Y;AoG zP?gO%4nQ}uIa8w%+LwEUPw%{wd_S$G)CW!ozLv_5dN$M^IaP`VG9-LpzOZYV#28Y*JFj$IAYEPYhPqor<~&`UcV<(REg8oTYj08$j+xh_*CY?r%z|m!BWzcWQnuICAlc>2x%?&#_}GfD~qZbQsr;4To2| zf0jA%;lvt8L|zR(4;tgh<-+06oB;7Q3KpQ`BhVPwTKt+zmINFSU*y+1^_qX=VgR)` z!QjA;1ofb~T< { Promise.withResolvers(); const { promise: cargo_promise, resolve: cargo_resolve } = Promise.withResolvers(); + const { promise: cat_promise, resolve: cat_resolve } = + Promise.withResolvers(); const tree_worker = new Worker("tree.js", { type: "module", @@ -154,6 +157,14 @@ self.onmessage = async (e) => { cargo_resolve(e.data); }; + const cat_worker = new Worker("cat.js", { + type: "module", + }); + cat_worker.onmessage = (e) => { + console.log("cat onmessage"); + cat_resolve(e.data); + }; + tree_worker.postMessage({ wasi_refs, }); @@ -169,6 +180,9 @@ self.onmessage = async (e) => { cargo_worker.postMessage({ wasi_refs, }); + cat_worker.postMessage({ + wasi_refs, + }); console.log("Waiting for tree and rustc to finish..."); @@ -178,6 +192,7 @@ self.onmessage = async (e) => { rustc_with_lld_promise, clang_promise, cargo_promise, + cat_promise, ]); console.log("Sending run message..."); @@ -206,10 +221,44 @@ self.onmessage = async (e) => { cargo = new SharedObject.SharedObjectRef("cargo").proxy(); + cat = new SharedObject.SharedObjectRef("cat").proxy(); + // cargo -h await term.writeln(`\n$${blueText} cargo -h${resetText}`); await cargo("-h"); + // cargo new -h + await term.writeln(`\n$${blueText} cargo new -h${resetText}`); + await cargo("new", "-h"); + + // cargo new --bin + await term.writeln(`\n$${blueText} cargo new --bin helloworld${resetText}`); + await cargo("new", "--bin", "helloworld"); + + // cat /helloworld/src/main.rs + await term.writeln(`\n$${blueText} cat /helloworld/src/main.rs${resetText}`); + await cat("/helloworld/src/main.rs"); + + // cat /helloworld/Cargo.toml + await term.writeln(`\n$${blueText} cat /helloworld/Cargo.toml${resetText}`); + await cat("/helloworld/Cargo.toml"); + + // cargo run -h + await term.writeln(`\n$${blueText} cargo run -h${resetText}`); + await cargo("run", "-h"); + + // cargo run --manifest-path /helloworld/Cargo.toml --jobs 1 -- --sysroot /sysroot-with-lld + await term.writeln( + `\n$${blueText} cargo run --manifest-path /helloworld/Cargo.toml --jobs 1`, + ); + await cargo( + "run", + "--manifest-path", + "/helloworld/Cargo.toml", + "--jobs", + "1", + ); + // llvm-tools await term.writeln(`$${blueText} llvm-tools${resetText}`); await llvm_tools(); diff --git a/src/wasi_farm/animals.ts b/src/wasi_farm/animals.ts index 92f6f1a..15b3840 100644 --- a/src/wasi_farm/animals.ts +++ b/src/wasi_farm/animals.ts @@ -37,6 +37,8 @@ export class WASIFarmAnimal { body_ptr: number, body_len: number, ) => number; + + exchange_local_fd: (from_fd: number, to_fd: number) => number; }; private can_array_buffer; @@ -326,9 +328,11 @@ export class WASIFarmAnimal { if (rm_fds.length > 0) { for (let i = 0; i < this.fd_map.length; i++) { const fd_and_wasi_ref_n = this.fd_map[i]; - if (fd_and_wasi_ref_n === undefined) { + // biome-ignore lint/suspicious/noDoubleEquals: + if (fd_and_wasi_ref_n == undefined) { continue; } + // console.log("fd_and_wasi_ref_n", fd_and_wasi_ref_n); const [fd, wasi_ref_n] = fd_and_wasi_ref_n; for (const [rm_fd_fd, rm_fd_wasi_ref_n] of rm_fds) { if (fd === rm_fd_fd && wasi_ref_n === rm_fd_wasi_ref_n) { @@ -357,6 +361,7 @@ export class WASIFarmAnimal { thread_spawn_worker_url?: string; thread_spawn_wasm?: WebAssembly.Module; extend_imports?: boolean; + hand_override_fd_map?: Array<[number, number]>; } = {}, override_fd_maps?: Array, thread_spawner?: ThreadSpawner, @@ -426,6 +431,9 @@ export class WASIFarmAnimal { } this.mapping_fds(this.wasi_farm_refs, override_fd_maps); + if (options.hand_override_fd_map) { + this.fd_map = options.hand_override_fd_map; + } // console.log("this.fd_map", this.fd_map); @@ -1454,6 +1462,18 @@ export class WASIFarmAnimal { } throw new Error("fetch_open: failed to open fd"); }, + + exchange_local_fd: (from_fd: number, to_fd: number): number => { + this.check_fds(); + + console.log("exchange_local_fd", from_fd, to_fd); + + const tmp = this.fd_map[from_fd]; + this.fd_map[from_fd] = this.fd_map[to_fd]; + this.fd_map[to_fd] = tmp; + + return wasi.ERRNO_SUCCESS; + }, }; } } diff --git a/src/wasi_farm/park.ts b/src/wasi_farm/park.ts index 4e6b212..97bc813 100644 --- a/src/wasi_farm/park.ts +++ b/src/wasi_farm/park.ts @@ -572,10 +572,11 @@ export abstract class WASIFarmPark { return wasi.ERRNO_BADF; } - // eslint-disable-next-line @typescript-eslint/no-unused-vars protected path_symlink( + // eslint-disable-next-line @typescript-eslint/no-unused-vars old_path: string, fd: number, + // eslint-disable-next-line @typescript-eslint/no-unused-vars new_path: string, ): number { if (this.fds[fd] !== undefined) { diff --git a/src/wasi_farm/shared_array_buffer/park.ts b/src/wasi_farm/shared_array_buffer/park.ts index 8b7320c..b7e8177 100644 --- a/src/wasi_farm/shared_array_buffer/park.ts +++ b/src/wasi_farm/shared_array_buffer/park.ts @@ -689,7 +689,10 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { // console.log("allocator", this.allocator); - // console.log("fd_write: park: write_data", new TextDecoder().decode(data)); + console.log( + "fd_write: park: write_data", + new TextDecoder().decode(data), + ); const [nwritten, error] = await this.fd_write(fd, data); diff --git a/src/wasi_farm/shared_array_buffer/thread_spawn.ts b/src/wasi_farm/shared_array_buffer/thread_spawn.ts index afff1b7..fcaa2cd 100644 --- a/src/wasi_farm/shared_array_buffer/thread_spawn.ts +++ b/src/wasi_farm/shared_array_buffer/thread_spawn.ts @@ -14,6 +14,7 @@ // (import "wasi" "thread-spawn" (func $fimport$27 (param i32) (result i32))) +import { strace } from "../../strace.js"; import { WASIFarmAnimal } from "../animals.js"; import type { WASIFarmRefObject } from "../ref.js"; import type { WorkerBackgroundRefObject } from "./worker_background/index.js"; @@ -287,7 +288,7 @@ export const thread_spawn_on_worker = async (msg: { thread_spawn_wasm: WebAssembly.Module; args: Array; env: Array; - fd_map: Array; + fd_map: [number, number][]; extend_imports: boolean; this_is_start?: boolean; }): Promise => { @@ -400,6 +401,7 @@ export const thread_spawn_on_worker = async (msg: { can_thread_spawn: true, thread_spawn_worker_url: sl_object.worker_url, extend_imports: msg.extend_imports, + hand_override_fd_map: msg.fd_map, }, override_fd_map, thread_spawner, @@ -423,7 +425,8 @@ export const thread_spawn_on_worker = async (msg: { memory: wasi.get_share_memory(), }, wasi: wasi.wasiThreadImport, - wasi_snapshot_preview1: wasi.wasiImport, + // wasi_snapshot_preview1: wasi.wasiImport, + wasi_snapshot_preview1: strace(wasi.wasiImport, []), }; if (msg.extend_imports) { From 662478d3b6ecabeca1f760070abeb412638d3c2a Mon Sep 17 00:00:00 2001 From: oligami Date: Wed, 2 Oct 2024 12:58:22 +0900 Subject: [PATCH 11/12] patch --- src/fd.ts | 10 +++++- src/fs_mem.ts | 66 +++++++++++++++++++++++++++++++++------- src/fs_opfs.ts | 8 ++--- src/wasi_farm/animals.ts | 32 ++++++++++--------- 4 files changed, 85 insertions(+), 31 deletions(-) diff --git a/src/fd.ts b/src/fd.ts index 4e3b6f5..a9dd115 100644 --- a/src/fd.ts +++ b/src/fd.ts @@ -78,6 +78,7 @@ export abstract class Fd { mtim: bigint, fst_flags: number, ): number { + console.warn("path_filestat_set_times not implemented"); return wasi.ERRNO_NOTSUP; } path_link(path: string, inode: Inode, allow_dir: boolean): number { @@ -117,11 +118,18 @@ export abstract class Fd { } export abstract class Inode { + file_stat: wasi.Filestat; + constructor(file_stat: wasi.Filestat) { + this.file_stat = file_stat; + } + abstract path_open( oflags: number, fs_rights_base: bigint, fd_flags: number, ): { ret: number; fd_obj: Fd | null }; - abstract stat(): wasi.Filestat; + stat(): wasi.Filestat { + return this.file_stat; + } } diff --git a/src/fs_mem.ts b/src/fs_mem.ts index dcfaf7d..fad93bf 100644 --- a/src/fs_mem.ts +++ b/src/fs_mem.ts @@ -119,6 +119,16 @@ export class OpenFile extends Fd { fd_filestat_get(): { ret: number; filestat: wasi.Filestat } { return { ret: 0, filestat: this.file.stat() }; } + + fd_filestat_set_times(atim: bigint, mtim: bigint, fst_flags: number): number { + if (fst_flags & wasi.FSTFLAGS_ATIM) { + this.file.file_stat.atim = atim; + } + if (fst_flags & wasi.FSTFLAGS_MTIM) { + this.file.file_stat.mtim = mtim; + } + return wasi.ERRNO_SUCCESS; + } } export class OpenDirectory extends Fd { @@ -199,6 +209,31 @@ export class OpenDirectory extends Fd { return { ret: 0, filestat: entry.stat() }; } + path_filestat_set_times( + flags: number, + path_str: string, + atim: bigint, + mtim: bigint, + fst_flags: number, + ): number { + const { ret: path_err, path } = Path.from(path_str); + if (path == null) { + return path_err; + } + + const { ret, entry } = this.dir.get_entry_for_path(path); + if (entry == null) { + return ret; + } + + if (fst_flags & wasi.FSTFLAGS_ATIM) { + entry.file_stat.atim = atim; + entry.file_stat.mtim = mtim; + } + + return wasi.ERRNO_SUCCESS; + } + path_lookup( path_str: string, // eslint-disable-next-line @typescript-eslint/no-unused-vars @@ -471,7 +506,12 @@ export class File extends Inode { readonly: boolean; }>, ) { - super(); + super( + new wasi.Filestat( + wasi.FILETYPE_REGULAR_FILE, + BigInt(new Uint8Array(data).byteLength), + ), + ); this.data = new Uint8Array(data); this.readonly = !!options?.readonly; } @@ -496,12 +536,20 @@ export class File extends Inode { return { ret: wasi.ERRNO_SUCCESS, fd_obj: file }; } - get size(): bigint { - return BigInt(this.data.byteLength); + path_filestat_set_times( + flags: number, + path_str: string, + atim: bigint, + mtim: bigint, + fst_flags: number, + ): number { + this.file_stat.atim = atim; + this.file_stat.mtim = mtim; + return wasi.ERRNO_SUCCESS; } - stat(): wasi.Filestat { - return new wasi.Filestat(wasi.FILETYPE_REGULAR_FILE, this.size); + get size(): bigint { + return BigInt(this.data.byteLength); } } @@ -549,7 +597,7 @@ export class Directory extends Inode { contents: Map; constructor(contents: Map | [string, Inode][]) { - super(); + super(new wasi.Filestat(wasi.FILETYPE_DIRECTORY, 0n)); if (contents instanceof Array) { this.contents = new Map(contents); } else { @@ -562,10 +610,6 @@ export class Directory extends Inode { return { ret: wasi.ERRNO_SUCCESS, fd_obj: new OpenDirectory(this) }; } - stat(): wasi.Filestat { - return new wasi.Filestat(wasi.FILETYPE_DIRECTORY, 0n); - } - get_entry_for_path(path: Path): { ret: number; entry: Inode | null } { let entry: Inode = this; for (const component of path.parts) { @@ -576,7 +620,7 @@ export class Directory extends Inode { if (child !== undefined) { entry = child; } else { - debug.log(component); + debug.log("no such entry", component); return { ret: wasi.ERRNO_NOENT, entry: null }; } } diff --git a/src/fs_opfs.ts b/src/fs_opfs.ts index 7cdde8d..91f602c 100644 --- a/src/fs_opfs.ts +++ b/src/fs_opfs.ts @@ -28,7 +28,9 @@ export class SyncOPFSFile extends Inode { readonly: boolean; }>, ) { - super(); + super( + new wasi.Filestat(wasi.FILETYPE_REGULAR_FILE, BigInt(handle.getSize())), + ); this.handle = handle; this.readonly = !!options?.readonly; } @@ -56,10 +58,6 @@ export class SyncOPFSFile extends Inode { get size(): bigint { return BigInt(this.handle.getSize()); } - - stat(): wasi.Filestat { - return new wasi.Filestat(wasi.FILETYPE_REGULAR_FILE, this.size); - } } export class OpenSyncOPFSFile extends Fd { diff --git a/src/wasi_farm/animals.ts b/src/wasi_farm/animals.ts index 15b3840..5465f42 100644 --- a/src/wasi_farm/animals.ts +++ b/src/wasi_farm/animals.ts @@ -882,26 +882,23 @@ export class WASIFarmAnimal { fd_renumber(fd: number, to: number) { self.check_fds(); - const [mapped_fd, wasi_farm_ref_n] = self.get_fd_and_wasi_ref_n(fd); const [mapped_to, wasi_farm_ref_to] = self.get_fd_and_wasi_ref(to); - if ( - mapped_fd === undefined || - wasi_farm_ref_n === undefined || - mapped_to === undefined || - wasi_farm_ref_to === undefined - ) { - return wasi.ERRNO_BADF; + if (mapped_to !== undefined && wasi_farm_ref_to !== undefined) { + const ret = wasi_farm_ref_to.fd_close(mapped_to); + self.check_fds(); + if (ret !== wasi.ERRNO_SUCCESS) { + return ret; + } } - const ret = wasi_farm_ref_to.fd_close(mapped_to); - self.check_fds(); - - if (ret !== wasi.ERRNO_SUCCESS) { - return ret; + if (self.fd_map[to]) { + throw new Error("fd is already mapped"); } - self.map_set_fd_and_notify(mapped_fd, wasi_farm_ref_n, to); + self.fd_map[to] = self.fd_map[fd]; + + self.fd_map[fd] = undefined; return wasi.ERRNO_SUCCESS; }, @@ -1181,7 +1178,12 @@ export class WASIFarmAnimal { new_path_ptr: number, new_path_len: number, ) { + if (old_fd === new_fd) { + return wasi.ERRNO_SUCCESS; + } + console.log("path_rename", old_fd, new_fd); self.check_fds(); + console.log("path_rename", old_fd, new_fd); const [mapped_old_fd, wasi_farm_ref] = self.get_fd_and_wasi_ref(old_fd); const [mapped_new_fd, wasi_farm_ref_new] = self.get_fd_and_wasi_ref(new_fd); @@ -1342,6 +1344,8 @@ export class WASIFarmAnimal { body_len: number, // fd ): number => { + console.log("fetch_open", url_ptr, url_len, method_ptr, method_len); + const buffer8 = new Uint8Array(self.inst.exports.memory.buffer); const url_buf = buffer8.slice(url_ptr, url_ptr + url_len); From 91d549d0df9e363bccb4030717854e7646caf8e1 Mon Sep 17 00:00:00 2001 From: oligami Date: Wed, 2 Oct 2024 13:20:25 +0900 Subject: [PATCH 12/12] patch --- src/wasi_farm/animals.ts | 14 -------------- src/wasi_farm/park.ts | 7 +++++++ src/wasi_farm/shared_array_buffer/park.ts | 1 + 3 files changed, 8 insertions(+), 14 deletions(-) diff --git a/src/wasi_farm/animals.ts b/src/wasi_farm/animals.ts index 5465f42..c835c3c 100644 --- a/src/wasi_farm/animals.ts +++ b/src/wasi_farm/animals.ts @@ -37,8 +37,6 @@ export class WASIFarmAnimal { body_ptr: number, body_len: number, ) => number; - - exchange_local_fd: (from_fd: number, to_fd: number) => number; }; private can_array_buffer; @@ -1466,18 +1464,6 @@ export class WASIFarmAnimal { } throw new Error("fetch_open: failed to open fd"); }, - - exchange_local_fd: (from_fd: number, to_fd: number): number => { - this.check_fds(); - - console.log("exchange_local_fd", from_fd, to_fd); - - const tmp = this.fd_map[from_fd]; - this.fd_map[from_fd] = this.fd_map[to_fd]; - this.fd_map[to_fd] = tmp; - - return wasi.ERRNO_SUCCESS; - }, }; } } diff --git a/src/wasi_farm/park.ts b/src/wasi_farm/park.ts index 97bc813..31e760a 100644 --- a/src/wasi_farm/park.ts +++ b/src/wasi_farm/park.ts @@ -496,6 +496,11 @@ export abstract class WASIFarmPark { fs_rights_inheriting, fs_flags, ); + console.log("path_open: park: ", path, "fd_obj", fd_obj, "ret", ret); + + // print self dir path + console.log("path_open: self: ", this.fds[fd]); + // console.log("path_open: park: ", ret, fd_obj); if (ret !== wasi.ERRNO_SUCCESS) { return [undefined, ret]; @@ -507,6 +512,8 @@ export abstract class WASIFarmPark { this.fds[opened_fd] = fd_obj; + console.log("path_open: park: ", path, "opened_fd", opened_fd); + await resolve(); // console.log("path_open: park: len: ", len); diff --git a/src/wasi_farm/shared_array_buffer/park.ts b/src/wasi_farm/shared_array_buffer/park.ts index b7e8177..0096397 100644 --- a/src/wasi_farm/shared_array_buffer/park.ts +++ b/src/wasi_farm/shared_array_buffer/park.ts @@ -691,6 +691,7 @@ export class WASIFarmParkUseArrayBuffer extends WASIFarmPark { console.log( "fd_write: park: write_data", + "fd: ", fd, new TextDecoder().decode(data), );

Id(|nwX;7E6(mjc5MiQefndtktqEcSA)-O0i44_~I5s*8OEUeL1Q?4c zJZX1?TrD{&-tc2EnUMyDf{ze{XJc9r(FpUnZQYh=Xuo1?=5XRtx58QCY#2X251affWcCr-+?;W@XmKpD-!A^_AUDbNJxua4c5l s*%nb|AXzyBG4G`PtPW4=uCJT{W`_eO5#zL)HfPpX=IWq2tD#~2H}y%AWdHyG literal 0 HcmV?d00001 diff --git a/examples/wasi_multi_threads/thread_spawn.js b/examples/wasi_multi_threads/thread_spawn.js new file mode 100644 index 0000000..3761fb9 --- /dev/null +++ b/examples/wasi_multi_threads/thread_spawn.js @@ -0,0 +1,5 @@ +import { thread_spawn_on_worker } from "../../dist/wasi_farm/shared_array_buffer/thread_spawn.js"; + +self.onmessage = (event) => { + thread_spawn_on_worker(event.data); +} diff --git a/examples/wasi_multi_threads/worker.js b/examples/wasi_multi_threads/worker.js new file mode 100644 index 0000000..913a976 --- /dev/null +++ b/examples/wasi_multi_threads/worker.js @@ -0,0 +1,32 @@ +import { WASIFarmAnimal } from "../../dist/index.js"; + +self.onmessage = async (e) => { + const { wasi_ref } = e.data; + + const wasm = await WebAssembly.compileStreaming(fetch("./multi_thread_echo.wasm")); + + const wasi = new WASIFarmAnimal( + wasi_ref, + [], // args + [], // env + { + debug: true, + can_thread_spawn: true, + thread_spawn_worker_url: (new URL("./thread_spawn.js", import.meta.url)).href, + // thread_spawn_worker_url: "./thread_spawn.js", + thread_spawn_wasm: wasm, + } + ); + + await wasi.wait_worker_background_worker(); + + let inst = await WebAssembly.instantiate(wasm, { + "env": { + memory: wasi.get_share_memory(), + }, + "wasi": wasi.wasiThreadImport, + "wasi_snapshot_preview1": wasi.wasiImport, + }); + + wasi.start(inst); +} diff --git a/examples/wasi_multi_threads_channel/channel.wasm b/examples/wasi_multi_threads_channel/channel.wasm new file mode 100644 index 0000000000000000000000000000000000000000..369c3b58a3eda171ef32db01fae02f5968559616 GIT binary patch literal 116487 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%0DLu1CU<{8fwP^%k$}a6L6Th5q9DL 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 P^6MMA>JXq!$e{lhugCeG literal 0 HcmV?d00001 diff --git a/examples/wasi_multi_threads_channel/index.html b/examples/wasi_multi_threads_channel/index.html new file mode 100644 index 0000000..44539a0 --- /dev/null +++ b/examples/wasi_multi_threads_channel/index.html @@ -0,0 +1,28 @@ + + + + + +