From 7930d45ec21a5d2fc76658eea26a57595a31368d Mon Sep 17 00:00:00 2001 From: Asad Date: Wed, 14 May 2025 12:19:47 -0400 Subject: [PATCH] first commit --- .gitignore | 5 + .npmrc | 1 + .vscode-test.mjs | 5 + .vscodeignore | 14 + CHANGELOG.md | 9 + LICENSE | 201 +++ README.md | 71 + eslint.config.mjs | 28 + image.png | Bin 0 -> 144899 bytes package.json | 92 + pnpm-lock.yaml | 3316 +++++++++++++++++++++++++++++++++++ src/excelDocument.ts | 6 + src/excelEditorProvider.ts | 299 ++++ src/excelUtils.ts | 51 + src/extension.ts | 14 + src/test/extension.test.ts | 15 + src/webviewContent.ts | 441 +++++ tsconfig.json | 16 + vsc-extension-quickstart.md | 48 + webpack.config.js | 48 + 20 files changed, 4680 insertions(+) create mode 100644 .gitignore create mode 100644 .npmrc create mode 100644 .vscode-test.mjs create mode 100644 .vscodeignore create mode 100644 CHANGELOG.md create mode 100644 LICENSE create mode 100644 README.md create mode 100644 eslint.config.mjs create mode 100644 image.png create mode 100644 package.json create mode 100644 pnpm-lock.yaml create mode 100644 src/excelDocument.ts create mode 100644 src/excelEditorProvider.ts create mode 100644 src/excelUtils.ts create mode 100644 src/extension.ts create mode 100644 src/test/extension.test.ts create mode 100644 src/webviewContent.ts create mode 100644 tsconfig.json create mode 100644 vsc-extension-quickstart.md create mode 100644 webpack.config.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0b60dfa --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +out +dist +node_modules +.vscode-test/ +*.vsix diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..37d1b60 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +enable-pre-post-scripts = true \ No newline at end of file diff --git a/.vscode-test.mjs b/.vscode-test.mjs new file mode 100644 index 0000000..b62ba25 --- /dev/null +++ b/.vscode-test.mjs @@ -0,0 +1,5 @@ +import { defineConfig } from '@vscode/test-cli'; + +export default defineConfig({ + files: 'out/test/**/*.test.js', +}); diff --git a/.vscodeignore b/.vscodeignore new file mode 100644 index 0000000..d255964 --- /dev/null +++ b/.vscodeignore @@ -0,0 +1,14 @@ +.vscode/** +.vscode-test/** +out/** +node_modules/** +src/** +.gitignore +.yarnrc +webpack.config.js +vsc-extension-quickstart.md +**/tsconfig.json +**/eslint.config.mjs +**/*.map +**/*.ts +**/.vscode-test.* diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..336c6c0 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,9 @@ +# Change Log + +All notable changes to the "sheetjs-demo" extension will be documented in this file. + +Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. + +## [Unreleased] + +- Initial release \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..5723c45 --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright (C) 2014-present SheetJS LLC + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README.md b/README.md new file mode 100644 index 0000000..bf0e972 --- /dev/null +++ b/README.md @@ -0,0 +1,71 @@ +# sheetjs-demo README + +This is the README for your extension "sheetjs-demo". After writing up a brief description, we recommend including the following sections. + +## Features + +Describe specific features of your extension including screenshots of your extension in action. Image paths are relative to this README file. + +For example if there is an image subfolder under your extension project workspace: + +\!\[feature X\]\(images/feature-x.png\) + +> Tip: Many popular extensions utilize animations. This is an excellent way to show off your extension! We recommend short, focused animations that are easy to follow. + +## Requirements + +If you have any requirements or dependencies, add a section describing those and how to install and configure them. + +## Extension Settings + +Include if your extension adds any VS Code settings through the `contributes.configuration` extension point. + +For example: + +This extension contributes the following settings: + +* `myExtension.enable`: Enable/disable this extension. +* `myExtension.thing`: Set to `blah` to do something. + +## Known Issues + +Calling out known issues can help limit users opening duplicate issues against your extension. + +## Release Notes + +Users appreciate release notes as you update your extension. + +### 1.0.0 + +Initial release of ... + +### 1.0.1 + +Fixed issue #. + +### 1.1.0 + +Added features X, Y, and Z. + +--- + +## Following extension guidelines + +Ensure that you've read through the extensions guidelines and follow the best practices for creating your extension. + +* [Extension Guidelines](https://code.visualstudio.com/api/references/extension-guidelines) + +## Working with Markdown + +You can author your README using Visual Studio Code. Here are some useful editor keyboard shortcuts: + +* Split the editor (`Cmd+\` on macOS or `Ctrl+\` on Windows and Linux). +* Toggle preview (`Shift+Cmd+V` on macOS or `Shift+Ctrl+V` on Windows and Linux). +* Press `Ctrl+Space` (Windows, Linux, macOS) to see a list of Markdown snippets. + +## For more information + +* [Visual Studio Code's Markdown Support](http://code.visualstudio.com/docs/languages/markdown) +* [Markdown Syntax Reference](https://help.github.com/articles/markdown-basics/) + +**Enjoy!** diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000..d5c0b53 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,28 @@ +import typescriptEslint from "@typescript-eslint/eslint-plugin"; +import tsParser from "@typescript-eslint/parser"; + +export default [{ + files: ["**/*.ts"], +}, { + plugins: { + "@typescript-eslint": typescriptEslint, + }, + + languageOptions: { + parser: tsParser, + ecmaVersion: 2022, + sourceType: "module", + }, + + rules: { + "@typescript-eslint/naming-convention": ["warn", { + selector: "import", + format: ["camelCase", "PascalCase"], + }], + + curly: "warn", + eqeqeq: "warn", + "no-throw-literal": "warn", + semi: "warn", + }, +}]; \ No newline at end of file diff --git a/image.png b/image.png new file mode 100644 index 0000000000000000000000000000000000000000..bb6c4c26c05655683f5d71c80d181d5a45ca7ed8 GIT binary patch literal 144899 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�#3V4tgy;~61+llelzBd1a$FZRjq0EyYAgDr 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 z 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%0AkZ(U21#6NcfsYHJ+Nxv~AMMmlGExwC$R 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 z z5Vt&sEt>cx5(C87RhKSFb!enu(b1HjlXJVjrxcsrioUjQmA=G$JEAv|fs?FyhF;1f zsGmLlGx}v2(T)adGVu^$RjvKaON#GBm}Q^l*_k`p^n>BN@wvWNAX8SVH}fve4I!=h zru}WUIbSdZP2h^elvA*oPf#?x@UMv zU#+T5n9Ym`H&K&F-@(Als1jC3k3~d7U`G^I6I3_eMg6iN2{5`74%f)qKRq%NxIZ{a zW=~%-8vd#mXiv_KrAuQ8`=;PkPRo??*doxZ83#;Xgv@_i?e^j`E4|$rfzQ{-1|KWg)sJz8IB6pSKA~!yyHQ@k^laJN#EFpZF($x z;ccHnJKBKm>`hfZI^v_pAJ48u7~es-@yAYY2%FO%3B@s}Jstqg>-o471|wto+x0wH zQ%YVQ3ko-iEmD`Q`I#dR^-MV0BvF0ekFZ^kYT|-0-8lX{~#r}(PR4yw*jPU z1WLH5U4TF;F4E$(FBN#svO6KeQ+u-UySdeUZ(WYx;Kcjx5UBBBOne$x1~(U1Shyb) z`^NxFfIsOm>&5QAUd|VfJOaGFEcyPdXDcWVKr}7#$K5}Y;-D8GyZZ}#UPO=+mXF0L z0E|$L-r6hh1(W^ZajU2Rc1%D7O6(G1%#h>=)He$l)Y7nF7~}x7K91wx5R>lnel+=OXB5qLz#$Szf9f8s31(B(yI>ots{%VU{2Qcof%;^&hh@&WUEU!0_+Sa$Der1ChlR%)d|T^wmo z9a3r74WCv1KEP^Q1w3xAKhVmX=|T8=n$5<=pl3LMW3Zw{Be|B&ooDiQyR)dFA4)vA zew=NasUpqm``neBbyKdgbhMU=h`=U4y(2(%mS;Ei<_rmjE!a8xr45+6x}Y1*F*eYj zGFe6@+?;tf)w{Q-op-ZTrv|Z1>hOq@&zY`huXxPC^=br_jlWz2h355?ze}MCEMCr` zx8!c+MrIaEa|FwZu4!;{dpVOQxTetJ6v}PPo@!-Fb??QWE@NAe&wZxFHH^lQt=g)HsZ^IAxF6Z;@v%5mjFJfAxh6D&f( zI8w2KgAr@bCm9w@HQJkdT)FA)ZSk9YY&P;=dRDI3N48O*xHL8sr~&4Jd`t^}tSs?^ zDj!u(Q*%a&zg>wetCwG^4-Q*_h%79pqNUx8I-5Q^Yy9mKS<)z+mHXhKFXtQ^?52Db zsAkt!M^@v;Q|Vvj zCikA=-UdXSa2id&i063cXj^hH`mF1_vXmLsm-{f?#oGrN=}82diMc1T28TCo5E03$ z$`PK*ziQazy9r);yQSY4kf2Q^eZIVY0MD|o!_@r&eFpWlTLJ?apYl+_kI@`~Mxu1W zjKC}BnEYDyVs!vc_p;V(T=tvZ0~!}v&;bnjm{~Y0Cd*Yc#@s$^&Yt_C%E$wJPKbx# z)k`dnBX62U$Ah(t-xId+gYQE7y^r65%q4d}tk?FRQ-OOOs}02SA*)u0Zph041Jv!| zFEXeqX+2`1q#nRE5pE8a64mmm2PvG?;_dkk!d%KghQuSpn1$K$!bCNen?DT%5FL~O zIpuLts$K%wZe9jlV8jnsSB^J8ArbmlgY*$;);Nv|hOPH|6m~$6#6Jt`7kDmA@M&Lq zd?5l{h%%Bafu1L{FXK+EYFq4RHy&iXcN%x!xv4)F*M_T&gGzWn!vXigTJSGF=$*WQ zxf-J+i)-Ays4n)&m6WO1EV*mw@Y_HOoh4t|G*GS7$3*HD3mOSMzx;jKNw*44jSYVf zm_bbE4c(#?nXm@{Tgb>1wZD8NGfT;xi`@n9;7E3OlXmQEu)i@7WbdOGXR`Pqbb`oh zDK15~4Uj1?Wc=ANW9E0^u`SnR*yfXvY`yghrO?sGEADtz`OycNcolTE)@V8(7@P=^ z(MgAp&7ykR30MDu)y(Tp5(&QMo0Xv!>Uf;#;=v3dL z&{I~&* zgU~-;Mx7><0KxeVR9UOw$@M1qcNyE-A-+$a5y1D1)pA{vTunZ%CSfpmidLg%VLvn| zW!Tj2Cm!0#e0|44mpVa^H%VZzlA zw)F#@%L$Ogp~}#Y@IP?BjdiY0jb<9U!xTLx85fH+C0W8{i?~dwq7RGHe}TX#dDyD5 zd&FLF_X72|%;+x<#eZ4{hlfUx7p_esD-qqOIn!`ehg&oOLDwSh>CCl)Ng&~<))HX( zNxT-~I#}D?a6qhxW7l8P^QF_}o*IJ6|^<`hD@%Yg+=fFlt-fG;X~A$|B2iSVRV2 z$gQ2HrX*&QV(ua3DV*@ws@FtdI_m~miV&$)yr1(gu6m5_lbEU z%f9jT*6eJ|*FwUy1+`poN+hgb>cr4-MThtBi#gnsgJ`JZW0e%{fdsG<*;2< zQE4HOg$lAXOCt}8738uFgg}RH$d?y*5=*m4s`vs284>Ue`{olCYrr*&*WvqBA5ydh z@7-g8V7Umrrx0mYZZ4BM-~F;N?I>5T7Z)bCHU zuRyp3+gOLwZk<}Mj>zY)qT<3({t%wMieT<*czB6xdF|?a(32lI#KaeRctbfu!(N$z zfdQv*NW{`@I`Bz=auqMVWZm#5*w{fL&zDl&RLIU0O=zgkQMm zbqH^Q(eL{T=EmN`fz?$he_^K0mg0{+E3jS@G%e29faQMg!Vis8vYL_}?Rxf8{g8 za8$GqH(9$+h(aU@e2}FfJ z;ufRM56gm5cnq=FB;qwB94LZWMX6?b6U6>~uZw((U)-xe`VhlUgJAs}!qLJy;s9P` zvEJes+OHI{!o6DdoyCJ%z6>S^1}slDE>sl5W4=@|{{)`bmbu0N`8}tS+igoaJ?%lq#*~hUc#Aa>Q5_X z`Kn+VtuZFwKHc{`oo*$)IZ8MAP>q8LbXVQ$gnp)dB{uAhu-ADw4Gtf4)g)%da`>}L zY^IT!Lqc?~FwrROVWXVHXT?DQ>O)=moT4i5blY#|I`#uY&YUREW=_@`e9E44;_hLScLN7{39+1hC0R=P zKl3TSprma+stauzN9?)GJU@8iMOqH4sDD^cLDUm;eZ@d7`zq}$_3#1I^iBfOiPpPc zpyZ7k4PDC}ZVWDr%O&_h!=H;!rz!bNVr_Cfe|Jq|SG=nvV@9AOqLND(gTAxPS0RPb zA`<)xs@af2sMZp;Ol_Ba(c@ln$O^jog{vE1pSXZVkbsfOlQt8?LzZRL^9=*eX28#f z1ea0*8VWW6MZ$ng8~$tIbDm{o=RgLjDYRNEy19$uKt%80;LB5%et3h~-oyv`c*{ca_Ry>^Yc^`Fc&%bgI z+tSIS#+`XaVGq%IIX0UY9N%`~#(wCo`HBS#XWHocB0y!2U&vko>eWy6e=od=bI z0LGQj1zi}NNvtIicy{<>hpgew-qd1;Mq_P>$y*I#wp(CP4F;H7n~l2t!FrE`#IfNS zY%KCH;Z?20UmkcN1S~DtvE0rV3r6dBL_EWZ(pZ*l{s(Js85GyLKxyOdu8nITK#<@P zT!UM1cXzko9tiFZ!JXh5+}&M*6WnI!%K1+2-1(+vYHI%psTAGW{q}xkt@SKJ9@6hJ zY?Sr#Iifr&X^FU&wjBMcCl^?{X&&DmAcH@aJbRQP>WkOV+yGrx#w5lIdOc*gaHRw4 zTJm^8TPTTU#R&qxVtaVSF}PnXSo`h9ps&CeV0#wv_b`(knWMwMF)JJboo*!^)%L#~uaZc>U>aM9@bchs5&~ot4c|tY75$FLRfooFr;|Qp<8Jh`Opa zdoUZ8T}s$8@O@lhF#1R|&tp@#J^a66QGCB1S)z^&$DS>-S)FslHwV)bTGfw8y z%n2hw!}>WjimB(dx-8B!EZuMCyxu1*rU)3|Q=)&cEFePkeN~T^7ZS}(SBYdD-*0+x z4Qmr%mNwb9CFPNWqslo%Elqvgk3##TF5z$?1EyciwD$|%DvdKjR^27dK{@NgJCxc8 zz+AAs?$o3E!5KkSl((BDcoA*{VxyU-eLSPJb25FIJ+5j3j2cfJFtOIbM<~TweD2c6 zXX4&T;U7b{WlxHQDdd!YE*G%pdK|)|Hv}^^oIDvIPvvv^v<|EYg}60(>9^%qV}7!z zJRqU=xy5X>*GQ`_Y`4prh|9T!bTM`L-&VvqUf^WRbrtu|vtj{fqf z)B0Xpxfjmtn_?%kcm?*Rd(e&B57fe%6X;w;@upSlg^2dYCaA&{UTX0smBNo#0*QrP zKE!fDH`;*)4bq;J1=Cwq({nqRQ2{g;3O_@sdiew3e!gjCYFh*>Y?+a%6&y>Nnx!_+w;2XtiM zpcKkw(96xCG+LkDSK$Rz6L#Hfc|ZJ$jb*mm^v`-7B7n)ud6+gdDKQ1ETxgCmQI6#8Xj9*R?QBx+^#kF~sxsm+L z&C%f0`Sso70*_T&#F~>^v6z$z2H@UinMspgya9+3VtG8#97Fy`${e1ms!-A!&EIsemvzMT2$>e$mq)iyzU? zgJ7own9QsRK;SZlWnJgO-2z<`k}(+I45 z;Z!nxn=ypZnWFqUG)@V1NAh&1%GDU-JsPH3%Ys8j?W}*BFk#e*!vQ}+#NKoy9fm_A zfXIZcA`UOVZ5SEmNf-SSY;6b%B}>phZlr1N#6e`??mZFfsKC0Vg+x;ALMATBGP12+ zSjm^F^&$sQ@aLS3G0fiO(s0Z;q$~C>E7rrT@AUTm>Mu#D3J_` zEf!)*=#ZJeefa4J&$v>f6>W^~JA^(ZZ&m)an}7yb4fc+w2TD^DM)wo>Kb>uEn)O}~ zA=r(Hub=`gIt34EzFnD*y3}q+A9)|iG-8MEgK>YgP5{<`p$Mom#M&s9q31pGOk2qs z*~}pW(@1QS_yOUxTK+UK@J$wjTnJWdv<6P@syivJM%MoL*jLioZb#IsZ)V@OjkCAD z?O{xXt@2vBcN*GV(iZhXdb_@LTWXFu*>Lg88k|@O4e3CB0oPrK!?|$LlP?&^{qjEG z1|u2n&9M@bSKlU{&6>nEKIHe^2Q{zmWlP3vzHw&`HU%#};qoIg=d)x&E8ZTWGYX!C zwAvngn$}-E_iJPL(WsC-3&Tr^kB$pY$S|y=oKspV*Id$&qtw{#r%ci^=>^p3*V*Yg zB$xcI?MY~6vm~595F(}QzbaqJ_piMq-X5>aGF8JsFSDVx#9$ooOQt^`K05^YMgd`r z(CxMv`v^*;@gQ=S$l_uK$2WcFa>Vv+r5*2kb?!dFD&j4>4Lz|3_QO!pnfAWV(vYv0W{+^qoIydII@ieW@y@+w)0vz`VM+V z<8sZ6VWym2RA9?7V!b)GREqIj{&~bsWWEUrLaMF-?{^U$>cVQ+0f&Sw#KcfQ%kMzt zzst6ghPt-s1M3>ZnsG#jRiy9aY%GQ4$RTx3K-|wl2o$$qwvRQS|3GXK)`T#CJ|*mS z7@VNW<^p|B9A0aJVH{M@OZTVmsj%|3S?`R)7kYYL2n5h@ND{bPffUWudadb4 z`wi-pd(`Vreho?Y6N7*!i!#QKOQ@w@M2V2>>>trh8bKpufSbMvFu=ksH|zVPNNT4w z1_}EZKU&F^jcvjc-=z)Uf)2V40wJ0LeKx|CokzZ%59!+(A(YwJ6r-?Zbd?#?+Tugh z@7JVT^GZdhO(%#9!EN$MOSAfHC+U`OmC9xGbm8S&$`1x;Zo@a)pbu*F^K4tL%IP+x z{48k>X$y9k#44Kz({lIesbu;F&MN!D>TI9)UtvftG$~rX^Si2e-OQe>V6dD|) z0vb8AYj}jlK6@Iw({mgw;=j|#RsUK)E1fE6g1{XL$y$cWkW?d!yLQU-_zaI0Ch7j7 zqiX)G~R6m^V!NLoa4S3!_wgKk>L5# z#lXL<(F)GiY1`HybB9s3oLI`E3o2gc7&A&6XUOsPZcVgH+E-C*42Rvy)_PRE^D*D% zb%;uH&GBN?ZS2K{lZ}<8(=)HMuDGAWl^(gl6mioU`_0{I{!Of^{hlFUsI?a<-LuBC z&BKnL2_TMdvzBwY+t*<(0W`4mYbW1X+8%PS_>HOu;*2wy#(h80wIz||zIG1dx$C;v zTz{eG?HB>1eWj3T6J~~3vp|;5`!=qZ;(W2kLg7g8Y`jjMhA68)IdschOiWB#n8o(k zUN{?-Vpd=L?gwxT&d;qHh;PMtRPfJFkw0z#-P>i=vDs6C-RmVvG>aA^N<82C)%76` z8TQgrnpK<^x}Y>M)StRC7u#{TI#=Esj_+pPI5a4Ie7rdkefJFqOPTQ5J?NQtrag_r zTFUOo#ANPyOyse4)486ZIJ2*MRTWg`i+!d;K|&Z72#PN^yJ_>#DaUVUS^Bv8_8)#} z`6Tpn6W4GKwM&R^5tx-ND{Nye+8D{LMRATw4mMaFzxNzCI-z0-6-@vkFCIeUz|hp0lCl{1pinjw1Kq>$ zfpszjoYpEWK7{X$+_18XL{N=8s#0+SU`zkY_}%#);zcjldp_InU&iw63R1u4`pqtF zbmbEL7;6`;!ma3#JizU(myq2}yjJ|CY~SYU$mswsd|u-(FZy{$1X!97RInKLO|i>+ z=)3ik`qPwu!2Ivj$iZlIfeL8MA~)c69xqKsFF?U)8k*sq6cMp28Fq|263kq_uP56I*kr`{KfD<+*=68v= z;LhjED#o9knmiYlN{0Dlt>!I_bSGNb9ar*NbqvRQfCVZoZ3S84@zbPr%skj)$daMS zntXc=a~}6lbE7ffSSZP*O}h{HRiJaC^F?!U-`@al>(Jxax@lXN`jkV*Jgs9L{$i`4NvVb^SNDv`eH zxZVOB$weO5M+(5$G`l{U_4y2rNDox2qSo84>)@~ejFCOXmp7HIAHc!E-|8Q2`NM*; z*)8YbzC=}9FV&TV$8Q7JZ*jmbh^g^z5(|wI|8KTt#g&vVbcH`D=~p}A5PUqB3pRXj z$o&+VygmoG4M(;yT^EH1I7xAz!G~LUzwNtD{?NQWnqQNyop9Bc$DWEm>|M$*!qMGj z1`Fg408c@Q*|HQuw6)A8jT7sZ(!dBVjK^#1Rf*9&y%gvYNz}Q?PwMt*1nG5Hti{k7 zW7Y-=T9n$H`avDM;^*Z5_k9>}vJHug! zF82@(1LK2=iVBEKyWPtjS@M^8QHGeky?q_PG9G00esI#y2D;FNYE4GTttQ#+HUyU% ztkZfwu}+Sa{>zYjC;n~jiHE((0{U~tL;(yYF_BW%Z>RU5kIqRc!_~sMU#yw_9ZE-lu^FER=0SZ<9YC%0Z z&CPxreIA|Z=fLJ@3r~LNK920b*EUf+GpAf$TU>0b1*&IwS!-dklJdg|+cOr(=eE3< zE;5J6!*>@|!07ilDUP4*AHKpfLc7fXKM(x~c2=nY4e!QyJ14SS=B5Q$VG`)IULj~H zo2j71ixf0Y-vU-Qou8N5!_#X2F{DEx1WD7BT+Y@q8f@3)zPs{tpf)oXgdbIqN7@zV zs@C9`TL1XOrw7v&DHx6roG8jFPFjQmjLTF?O21pR1`!~Y-=zq`Lb4JeTx z0beZ!wWfYqe-)4msad#Kw(U?bF)37Fn*vO{{u3q=5^b9y)!;Ac3@rO<(C&nW*jef6 z4Ajftks_b zuCSgOeo&RSgmPBLq<=ki{zjgo8y}Lgv=LM|@))e7;$AIf4|tn;D_H=uQM2A6F=#aH{YSie z{&*}362s2Hw&EA2MDp?3jrWV42^UK^(sL;UB`EI)2(O*MWB(M#ah#0qNeR= z9-~RIM8LFIZ^vTv0}cE5I`k3o3aFX^LWy6Tl5a^_ry0NtJ2Y7*yI7Fv5>v*8rXYrN z8-XvMQ9pwgl-v5e*&4;Nll!NH!)oP6}xoK;qy^H4QK2?IwdVjkT~Vy$-?Go_fY ztI|2wOL(JUW^*Axf`?IY3NnJ)f$Khj*WfF09 zfegU{8yTlI7Du{R;!tCTOd~83qV>?BK`BZ7;^sB|*dVD@_Sok1JC4d_`3W zkJ=51K8nc)ckQm10ll0Qt}FOfuE^BBJiYRKFZ~CG2%F>xGjKs$hx~ zE`Ml5{?tu)KBaUqnTy95_X)xn^GHT%_2i0oX#XDMKlX60O25<+fPbZmwUq5$jsuxb z`dswy^y0soW<=mt?0S%YC)MI=7`2*W#iEJmEEe^&elwj>1)iAwORVNAi2dOu|8j@% zxExEEW;lP9u$n}Zm?bTM66!8aHY@X>gnZQo*h$?+eq8Aj0bm(;b@#v-j5?`(Svc@%!GUhd4eUbyvomG`1H}e@eIg@dibQtv2 z-Tc`|P(}q+4UxW8-vKDo5=(vk9EP<{{8aKcGRoX#+pOcf6sbrOuq$%Bao!(Oe%SDt z$Rb`fm(VU3>7{oi2mtSg{Ii%?{hhL+A~_g z;z;LU($RL4eO58rSj{JPmrel~}*6J#pHRj83Cv4sT0YHqLEk>ElsTdLYD=s)cBdvTw7+e*F1# zjR-eo^oxwLIg#OQHVHZnaxO%FV`*yw3TMje1Ev5D_WkO(tI8^CboFW__JA4e+V`QH z{?R4yNn$Z2qhWBdRKE>oE>yUPoJ-*p@|?FzFNx@t|4Q-xwKa%FhN#N=ymT7%evNkI z4H3S-LY2$<#A8fJ35$qC78`Ic#!vA3|11^Kr#oMQf6}*-yp%;bv-l|0}u|ZRUa%Sa-vv+ zZbDbgLC3YDMT0OT*o3djO@|clIM+^JhxWg@saFUu zF5(sQcBE<~f$91(ForC(knWbo#X&~pWOKR}t(&DXTtuhU1A zQ!HinZ7T)R6PJRjn%C}qt?3GA^ES?M;oOJ*jQR$C7u_z1`(*^TDcj!Q~ zq?Hu?g16Q;RY<`DGJBkkO_h#i9#69*b>OA9(q9=aW{EVAE>b#$^N-#i_Y3JY@o_;Y zX_WWlaooh#=>TlpnOsrCZqS&WSyBG!ORq@%;Pi$1Y+wu7VF;z?=}I%XHAf??TUQw$ zQBMkhS@6zP@M9i0em|g@Zt8o1royZQC<`AHiDV218_pWdSQiP@#spp@4|{pHxxLDrEJJBDa5sy3z4o~tmX0|;4)-bSI(c&sT^I{MP zEG#`5*eckIzZ!h!wkjOmJ#_rf4w zt51j>!dl2Gz-KzWZ`Bs|fTu=s8Iczqa1nHYkJl_lNLz+ynj-}ybeCa{qB2=N)o1XY zqWp_J?ved9Uh}kRH=gzHu9YHPFrUzsW2&37j}sGnSJR~2t^4snv-|#}bLCKfniYZcVi-$Ml1LT$4WMRrS0xwA4M{9ng&+kPcV<$lte^Jvh z880|G@YdaT7|>*NbMz`$iz(V^VTM~dqj;w4^jfSGy;IU)D4kirq1W$xPT;-6cd@vR z-SMAhD#l7Gw8b*jP@t)0Wm=o&a{dL;u-qotJrdQ(J>a6EK!a>j`2K5EhSKw}`scuu zu45*mNZLyZlX62^kNqD5 z8dg+F&Y8wcd)f7e(e0-V&W8^5HcS`_Dg$RKnXziSG4 zZ@@{Z1hucDhecY=e?6mQJWTR`N)2<7`+q$Lc9@*R!0gX#goX-mSKB$xKOP5R@vdI&KcBxVU^|s^FWa|M9_<>_ ze#Th#ua&*Zex&s$Dm?;@Y?%76&NQS`A}Vw8$yjNf(|bywk}t?5_A{X1J!KjtvF3k@ zVN=R2Idph0HOKGBk&`P z$F5{;!Hwo<$-)b0WiS4V_NHztm3*_ND7C+}h1T3HT=r|i2ck|Tfb z8b$QR2>8pg@`e#j=u)jK^ym>mi_EQ+f5V=DUWD-D4+~?+SHm(#1dqC9jGM8#i~MQR zrH*bNU|;qCRIvy1LpIo{o@}(tE`KCNenVFrU2A1^;369?c$lNa<={x@OMjkHxu&%o zY zKoU3HP6wo8T^l*egpLO~jrW@MtgNilpIP1&T?{m5cpTrrjtDfM1%{Z`o-_$8l??g0 z+PXpLHri-MeTGVe!FT~sC4;JlnM?ZY{Ro&6rY!3tBju$%DAW`2om;3kBRBOw!1vnm zJ>TBeCDmqlEH&CP#p~B+XD=O$QylN-+#v6}{7vL}y{QSv`>8}FJ+8 zc~ZuS7*v93vnT`3kWy6hVMzCu+SuFUBe6}nP3m9Ul)uR&#bIE)-aUce$%_?xK!l*m z81bp!zoNcMOq(wDcKPkn1##n4rRJ@3(|n8hANTv8l%H1&2)oPK3T>W%mfJ$vG&3O7 zG~j#-2s2u!SvIZz?G-2Bh@_z)VvLPj{;6aAha~g+N1|~+b$M_D@vXZ2aWnpUea^z) z{~)=${LO#I5BYE7gAcr&$KmT-8^t0bD=A%2a#E4Z6phX!B%W*Hq59RFh~neM3gq&< zo!(q2w%}tr#+P;nDywLipm3M&$Bn`&h?Ieg5#Rq@%bt2}eSd>4ulzFy%YKS<(eisP zX<&^SZ||erD;?ECH~+=)03B&(^;@OPju_z4@&KoqQ)}@j66uMFjM=asX=rS$P#omm zd$t-L8k(J-Pq_rF5r#ptQ3UMqd@+0{8OOI`oQO!s$k?!&P2Y-(vw?Il#*OZra#ZI+ zwV^rS^68U_aBKo9KfIT*^m2_D7AI^S0xdM2j#xtai5$28qOSj+JB z7>M{PY+18RB3C|ULQr5tb=xWa+Anh2Xp>Y{@j0duaqE%8n#(8r%zpY1!!k*ir;~GD z$fw2JCA#-GKbaGCHVY@93El-Cg&$FY)fqw5brDs<=G}wNGHJhRn+?z-74Ew_0OS@4 zR_atdL{Hhk8tx6CEKngJ<;V77mc-*~0t2B=OgpLU?}s^^1pYw&ZW^ejm%Z8_FVgjW zp5^XQkejSAmd1tY%bHyUI^(;KSAJKa4l~U{6#SbsvtTfo6?EB|4G@Q6>J#V$36Bi&_8Wsnq)VEB96S~s$c7K-d+@>q-j^g+yMHs8eB*0j_SG*c+^v(4=;T6tj4l7?H>&fQ-&?=+h{QIK_rw3`W zWMT_vp{XBA%PP1nFf?psCegtUC>(*OIxR2niXp;3;V%si-Txc-i>a>{YvzYJZuIO2yxh(vL6az_n0xGK2cxJ2819XE!Bf|BfZ7~79)La7My zWeDE?wFxML@sXp-Dtj8TqySt-#la(lfJ5ZAu-)xjCziT~91syshL9;*K@sYo@$F4z zVJ;~2t5QdhwH|h}%erz&$s^idNdnFw?VoJunK-!t6}y++MACs7+gf|jxn)xi_A#~m zh5!Q%r$_OWgW+WDS4%M4z~^_zE6CNV+>M@N+edtODE z8D4ql55k?8izTpbqGDnMGL`hOk@q>mAqT*TRd!b(EauGp>LDQPxWY?GOXmTol&P@{ z9^+GRX){?reV+&O5O?~$9YEx<-l-iGA>>M@k-tW^?S9xCaYAPe@0z@(Ge3|)`6-5_ zTyEHIdm~6cx*+I3d7XTr^N~xJSBmUfE~l7dmL7!%RKZjLBUY#g2o`jl)T0G00J{MJ zGkxM!C;Y@E5xvoNtod8ZaZCKP-c(Wd>u$M693Xe-*X?%ZhAH3ezoW42?u4Z+J&`~N zm*VKY^l=NT5$ITN;*b9lq|>N)obp~CAdAxd{IXn7+{9{&C20%jDGDzS_ZToH@7&Lo zu-xBKcF2{|7DRsD{;i0@OB}eO-abmf&Jig#x#JV7dqLmUx}Zv!9)eI=hzAtx92~WWpf}T zs!`4M!oC1WWTr^Ud^do~gl)19fFiJpZN8sy9L<*Dw!OYQUJ|mJAhDZG2yT(GLw|wd zw%Y(}0|XF_~g$HAehxc?_3qWc3(Rgh*Axr9zm3lSz}UVzAF{B2!j zWlDXZQUHEtg#}>)lX=^9)j0`$2N9DZu5T~^8ZqdC{Wm27k?apjgfNb^a*BGLJR&YY zic{#)iD~L!9+3b`2hlgq=je> z@=~pQv-;G|D_aa8!HeNtFM#HivK>F*Lvw!o5HFYiuk?MxM;-co_=RzEe#ZBc_*R?B6>g{x^e|oST+!Cd3es^r4$}ZZ*oZcjPl|8TX^@=8l45{_ z@)_O5F)ST$7;0tM@kCN<+h|c6{RffJjsd-CGnlX#KxdO1e`>NLiz4DuoT=$*8cSgf z0r}kNLnti*3p@zS_{_|=NNjl43!VV@EpCkaCqvvq?rLnQkQ97CkOB*ky_bM_`Mwh` z9W)5$2tlU}%ohb~03Jm->SD;X+ko`_=Zm!( zV?^)Alg3;FBpU0kuC6+_3j_F`Zp8e1J2My{FQgaMhdY8Op^b=$XnX-PHUT)cbEh&)^hRaqMO^Z?Wrx=atZm(0tmgJba>ko)tPEA5P+s7u6SK;3_jN=HKR-;pUmmFsq7Zpgq#(ot60F~CrdW&ja@ zB3M?K#7n?q1862~l;XW_u(gW`g%ckE5*}Or0KGu|0O>~zv!EC}76{n5ViO}HI7k#R zqLYE{uG(?_Hy5!49{@somZ09(oOVmA4%!jl)&&t&)%m1G1&amsxPYfbr7d*w>n)=>V}&VjAMRr z4WlBkfazohy|$R#mMQW0B_*YOpg8hGLr9+{T_~{tx}jB3*q8u`jduSh%`Oe@Q_}78 z71p2(73CLr@6I1>;sExEYNSrea6goTz7Xs1O~e(F%0VdgYC-7J?CeNo#yh@3{j>w( z7>*mf&z(cL3?}&lN=rdhSa<}oKq|LZc{NAX|E@}`Xj4$Mg9pUmp#Knv(0Uo}(>+T4 z9nEAdaEl;W5kyk7Nplk)ELL|QPP3xe#vLZ;hBN;cj`p{pyRjY(maNPyMp_$$jbx;( zoB)nGle@`>7s;BR8>^Z+YY-KrBX>L(c>I4Ucqkm5(j()M)ViJm+OWK6*v?!j$oH4H zN~kERM36ozGB3#Um<8LIXp@f!iOuZk?n10dF$NYTe6B+K&92ZAs^Su~{N}BQOF!Or zi~Y9PMf~$YUQBo?KMtRs(zhR3$;I#Zh%J>+_g>@B*eI%)gSb9_hG)gb<*CcA?gYp7 z676gTpqCEjX<_~RU7otfJt-?ha`qDHnuLHI>np@8NwUpH<-tc<&%CL~sJh?T%F;_w ztm$2caDHbZQCA}2M;+qshVh?m#%1VlWoqf_hKzWK<~pmnRWiR1NPxp1PLhXQv5Ozt zn`&*7KUdH@BFW3kl#U-stDkVa?nA#dUwJ&h&=_F4oNw(%S=6##9Ikn(*e;(N{bRdq zcZ>%1Mb9K#zLw{U*ItS#0W#2?oK9BF24S7P@Q)a#-2X0y3HsV~o;*loigN30qY~5c z5Xd2T?K2op)t*YhvBi(+7OMOlyvhlO)JP+)M_)FJ*V7M*pBrZCNY|`06I$rOM>$ED zSp{wX-C8}i-F*T*Uj_R>Zw-Edf{OUckz-z3ZF0OB#CMNq&|Ijk+xecerQS< z1K9gVSj9n$t6ldq{z}}f+6E4o^En&9Lnx~JveE28IF3uk39r+ZiY6E9x zSc}B?5}^;FurEj(Fa_%1-)EaXSsH!I1Ml0qPUA~}4RQ44txQfy1L1)N9%c6<2)=Wz zc%ex0QNFCfZA+7F9)qV3PyR9Xv!f}%B;O`ea8?9Bsk6wOj)Iu={Fu4r(P4xUf6EWT zvzn7Y=kzYt-vx;O7UJ9NBdA-Ah^lUMxkIS@mj*H8(>8lJ`lX@q*WNiWR}S$HRdodm zzeW3p3c(!EOH4m0Pv?6;7J^^a9Jv(9!du$o1>{=oT!QbR_J|_$etQU75)u-6G>PQz zPi7!x;fj+UHF@QC-MK&HMtUM1U7kXHcU}nlOP5$M%^js`%D_ESmz{){HC{hZT$7`( z_=#;WjYOkQc0p5xb&uOfl*vS>bA?P*QR+HoU z0Mlq)!%Lmi8Go{l&SFS7pQNHoj@j4FL&~eO<(Bv644<#BO4HeDU-B)Bs22as3M9o# zR$G~0QtrdczO(DO85%kjG@U|h12hX5CS-NrP0>R6!lfFzvIx3Wb!VrDh;pwWI=cDV zw)5>{*4bj)mC5bN@klp6RP+ATVnzzj`|+q|8e4*btOugmq`ju&lzX!ZjwFTxWfwcu zzI|p$8iT90J&N$dcd5jYe6j^)3#tX}(YZWCV#dC2bC1de6fdUm6W%?j4sn`OV|yd> zY@vmpIIyuYEGLpgs@VTkS zvogH=Tdb1rJg;D|7*fUh*2i7?z=^FC*S`u*JN5-vrW~XW^j?`K@H!C8?mf#cI?Cm% z;`;Wj)s||zbKbk|r#S2ogQ|t^;3~m$P;(BZ-(gt0=VrMP zkGnq;Ns;gbZrz2JE!Y@pxnH2GB@${u*%nxTzZtR92H~5w-~wPwX(>YirO>``}vNYWzNNWu|NjrVhpyE)=t; zmLbFgY6GHcMov*UYRq`-vYidj*rUx<(Ua<;LSW7Y;s70a!N?kSp>gb!mkM zota7=?4yd*Y5yKv5V$Bkq%3NRjsjgc#Yz`{iCJYR% zkBWw;cFIJU)nuSb{(J=1;!kVAnDcDnt^wUyY-^;2lH}=tZp`KIaA(=B_2Z3Us_PM5 zC(Nv$PwCSP0Ypqevm2fY-is(US6>U=5q&(v5Ilsjd8C$y!4;?#nEyb)2J`pph8jsQ90tM}IM55eD#<7j zfWsm3gzCo1{N6@}w<}mP56~*@QD9J4ReN(>7xzq6##dIfP`iH+(cs<64cRY&&~`ch z)$Pz#Tr>pP%gyUwsnuKqPa)I?>{$WNo5M_UrN_c`bvJx|EuO8(mTKZA6wO3D*cGg) z$)llzU(?x-%wg}0-Q)c9Og_(WBXt%mW#T~h&oFQ^?VBqoK(j-y$9d?1-dq#@l@$M$ zM+1w^py|8uB8#th;-=R-j`a-sq7KbIW^ZPBA5DeIKVRE%r_xvN?vgU_TXPQNkyZt@ugQRdJyR!eJf_%)F z`w4G#`5Ga&+`Pgc572);k}LMR>a6qx1e3zayKa6K_JK4g~Yx-q=6?4uvH<%q%2yYVz-+=g&WP zFDNZp%T1tRfFxN?V3lNw^k?Kh$zJdBq*Gdcdb$@J zS3$Wfu*BkL49^#>qKiQPWE5fAhG7=v`dv?iDA}UeDmYMxidcB;xf#4|@mtpJo1L_~ zOiWtxa@N`7yB^a@hEM{#qIt_QVkE`7{96} z7G$J|-QUb6?p@k?3f?boGM*g3HZfi+f2!io_DZ9u(bi7O8_5`CC3p6f!uNoT=@Tev zFEul*SumZVyy1(9N6C^hF2i+5BfLp*c~v7Mh^rx?`o$G^gutQT?R;osZgQk>t6;T1 z`9vrhr?FaMK~cF#9eTo+iUBJZcN?mtmfF){r4+fba$4aKp!6wY*cTphy69sO;E$hF z)Ah#wWzyH%`-7{uprBx8Vxmc`(R@0%yQillH<$dtSko8}A77I3Q$v0)P@n*u#UCA6 zl$Mp%hPQtV2Dq?s6|I+2z#JO3QN$G+o0=*$I5-%@q8|*Dut-Tt#=QuUr1%2R*4D&t z?{i7qHvFBQE(Vl<^bZ|yQWw3`{b)xKoRxOo%aP!`7J`M7WYbIkcx^r8{Ybv;?z$$@ zcq*%K0;{OJ46dwnetXKWWUFz}M)L!v-K~$II&{O}F|=X6^~5hum@Jz7`OODHn`7h2ugP>TqTV;P*$RO;$=BZRQf!d%--vpI)! zBamaKS@@bQ+~FO-j7>B-Mx^2b60ifgd*EbBQ9i|5s>yZJF`U5}|U^qL%b zi$}W|_DO%oxBRlu-ZT5g?LzX9krxx%P?2{tW<)SC6B z_G`QVAG}V#2d0~=uM27i7aLm?*sI!ou^I;s)(Ci9zKOfZ$|Cck>OPn{0=@a zYSv}jthP)7f=ysJ8nd!Z`@PB0Vr>yK6VT$Z9rt>?SW8Dq*-IhAw*s*K>kRr3ASj@` zmve++ucaygQ}LT;!00;`dN2a-NXI~(;-Hf%h)wuaacS~ak=N0-tno>r?@i|Q4>wm{ zEN>oR4lj1-pDyC|El8L!o%N{j5liJFPDgRBlE|01>t>~cIv#`=QY8a?lu$;8Oo%VD zVnH#iM7d!sxd~mj)>&xq^_p`HV&$m@oO&}UYb*m+ikjQ?k2lYIa66OSW zWL&Y!Gk|#$>3&$9kRdcxrkQZq0v^e6jHq9|k=fa#h#<_CiVDmSjT`|I;9BKR{9N0|ab zcyRk#F$C=4bCs^9#KaV>n5_dybt0JnP zE#|@sd00co)A*9Mf|nNb63Pooi13Owo?7yLhY-GZ4tfH{xs?1Dfx#X|z5Ui$*vp!L z^PsO-1X)z>4*IH-Pr)Jm`BI+3ej(IoAJFl&HLT0to1Xn_dm|*FOfEeKYtL`Z=fJ$( z>!xp$*NwkV9A}@+BNb}w&J*RCXJ`68P6O8SCZpC!)-5qJ0eFJm#e!iO@S6n4(=$*{PhQP$#mp)v^%{ zyxXsagO<_yfzT_0QL6+i*RJDqXKv;L0u1r7-At!R?eW!xcUX`Eh?e{$M~s<=m8@wjDK<4PHzt(VjWR=Qq( zh?P-4qo=DWPcB$+RM6FZCk4n9;OT!1um^Q3aVwfd?z?e_*J(11*dL#IZ?DyVbu99v zzGa2srQq1mwsAE<>e3_6HuRHJ#4bePu>?E- zVr{-nY5V>Cy|TLc0V^K_nUIL55S%;YrJp7T*frmARZmdWMfCp8qAnMGTgOc?r_22B zj)XPeS8oqsjyTM4U5h&aatvR~y32E@9%WKRy&>UMgS#LtOq<4Q?X;SUxSkI}yy-o7p0P@$cVdU|FWwBQfp70?Ic&HjQa z^+h!Nb*NBhaX%enscu8GdBO%CzUSZrWt8I!3T;At$cpmv?DAl9P0Gox0J0sd{sSa^t55o%G?v=99MOGcGQ%4pV?t{=* zpQuC5t+DqzIFkLD*rD*ui+ZivA_rL_mB;!=JT;8o^JD$HqwLRJ>#hg~&>uWo=Jv74 z1Woe{8M#v5$oIZ!WZCaeLK>ykdbDEQD4IcVvlFP3|~exjt>w+?kK%5SUZFR<;q|Gfsbl z-fwqBtb}8XjjhIrUI}KAPc|}0vT?k^ZGPIe9NR4WlGD`hhvh7{qKhe-FF2OpCeC?@ zVK2Q}MItY_ZF6tMJO}c?hI<^aY-bv*Z+QrGEowE%5YTmlFi+m7Qd!7rbmDi7 zbZBGNyd;bs5EH;oM`b27lYb&2!ky9c+|ROf*u?Cs?sYG{!BQ3rtq7t8fqL7|v>ysQ znaE$a1?+FrpQ$ahi^!tpb;Mxfk(cX4laop1ziT#--cORS!riR=J3QC(-F_i!xp$7vS|v_ z=@Cr+Z07`N6J&E%+u%?L6*=TAK+)K&(Y)Mx%!90mbqbSCk|N zt6D8-g+DMYT+%*aoOe`}`UQ#4l0z6N@4!Tm?zW_QgD-!v5 z+5E_>I;m)l2tdFQv1-3dc%_t05(12SF^*9wv^&2CBMAO+KRB4T>J$Io^P&hlfz#KY z9ylr#b6Id=ze)ZFEzy!!AR7~cSQSmP$p-|VZUM{Lx2TpK@cm3Xq)Ip)>v8tQsi|zy zaK$1)!GFFfbDT(%0B*a3Aj7L(WWhXT1^)T2&}MwH>P);=+o(BR*9iW54U!r?BD^nO zB>t@_zpua$xd{QMw8$&-4)2gBX{vNXsY)uj6!OV`If*Sahi0#x9Rr@Ty4gKKBVm_t zTd=4yh(yKD>Rf9H zwjBBoOp6MajhCglu>*m$V;nP(hU1*7?BuAZ)cdgou76wv4oIWmb)@PGQPx zry&{AOK!?qXVKQ(Fh<5kvQlJAs*;APf;mNIKEfU zxR(WSmFr&olGhiyCoT#?2O9qtn7HUAcl2&CigYj3MNf(hR!u)rx%Ly)Rf|33s8)wcy(H_^hcPs z>CL|yzrLHHW$;?RSBG{4PXU1=vhf<$=73(zRZTjJ37q zuSCdN=oz7mE-5Q=4)g+q5K*BGp3vzRcjk1s&QERAgagj}U1K?#b?!*d!-z;H@Y2=? zk61=X818Rem>wRLBi&6uw#R=HmijfgkD-z+RVz@lX3{RYlcXLVHMonPKpz)I|AkS~ zzA~1)(TM+BS|KiznHQ#z+;BezMHv-1Sd*enAa%lH(xHO-u~qz!xp!KYslMBd?K`o<)(Ayxr||nhV?)irVjj zW3Mgg$vv_D+ZsclybiuW$&LkKwUZd-G_m>hV3ZDf2joI@d}Bk(afnf z8BbQ2Q71Nu{<3nSa~mD8OWf{YGO~F$l>1# zjyT*O@j4fRK#e*oCY3o~Ogcu!%8=R;_`77AFZ?tkxtn;wK{O`a+;PqW5XKmjCIg79 z@q?4uQA1q%eLNIdXV#s(t96VC_RB_z!H^6^2@{!unE*0K^?R9E%Va!7{2y(D63_2) zi(){-%li}76lJCA!Ef(+h%AyVZzigQrda#?_h@0U)%aX%PhbrQ9}T_(rPOl1-YV0~ z*zuU7MS}SX!~y*uWo2YyuRk7hzgIy4_y!@cVRy@wr?t`&#_;t5fQnG5cVcIlUNEQ` z;3dcsMUxm~Fp`K7tq1tIG(Fd_2V+u#CZ3%jvaw}6V4w*8{jidM5Z^A$6q>r{i<26d zss$bCbDXk#w5cL82jnwY#GsD*ohr|>Y2xMQ3vZL9+TC>k38k8u2b6+puov}ai!=W` z=rK-345A`$19(YANTs|Wk0 zv2wtz0QMtO625RhiNG`Yf}h3i5v&JC>pKBI=aZGE)Yxj7vW56~xY@ZXC6+HN5Q)s5(ooMh7o)bzwaGl2uHq{S? zg3$T4a-;q{?$b+usN@l#=~KN6q4-uUaoFXdU=8I|)JzT007{MKcHlR%e>XOsw>?zk zCeYI;;JQ)Bq$q%bEg2Un4;mZ8TNd^zcN-X^-4xX&yP$OM+h#R$_|tg$IJzJqsGNw@J0c#@D`$#|pyd9lGD z6+8rFrg)5{dCaC>Xk;`SbFOxRQ(_{zHsEd1!M*Ib*%xjiXb!2yo5A?2cg%&c4Da-$ z4bnmN$Y4puloz;7($t3=We(Bd5h5w`z$;Yk)Y8;SSbiV4vKS*o&nqTRA|#AA*Cswmlwn1ks9s0WkDa@jnb}tn~v1) zO;3lW!B?LIG;DTkka6K z5pW%?Mf9-qg zmEY-iTTK7vO1z?+_Xf1kE-QF3S9VEr(=t@#tgFV!jfjNA}K5kjHyh|_g_+x`=369T@WrQyd@rksWO5>rBv)} zZDFCfu)&K2v0)Sgp@n|K7Ajc3LxEKz+-b8Cr(<%_3|8=u2;*48r<#i6ztEz~BF!Ps z7%Ua~4p;yAs}xyu#4GiZ&46IT9K23y4~uu!iHGgtZf`66n?9|>^Z%j zn{Y0qlH-yzo#GGh#x>i}EvP2wT`6W0At~1QZKC7#H63$|G6}65Q5>32Zio=bB~HY1<7gUod$5!eVEbl*96qJVir&XYhQ?TMz8G+d zSFL9H(ShlYbZ<|H2NSJpPm5nH4SN3CebdVk>OSvlr=2}MqP*KUFG&mDzmnWUy(9$% za87ohPy`U# zfSPe%_~K<|U3c*gDRD9<^MNYE+Q%1e^Ho=p{;D}{zGimUptoK{5+Fa1peN;x5;1l> zEhWZVWCqMErL>tN-B72hXzF@WW1Y#YRElvQCe^2=LsiD*8qd%7`pe<0VNeWEV9y5@e4tfIqvQ`s7KaF>lPg;i7&vduYN;!ST8;IY%9k9Dp1==i{wdTaZLVCoB`~{r zTF|K}(Pgr+QVl?Q2nRudwW8mxL!GKo;VM?`w zhinNGkf@#ls`w&nAe#;`E6XGeA^4x!bXe0*Km$7(Dee<3SgsI|3K7NK>PH}U8{25! zbgjH<{hODjS0_0SBMV?!GT**I5dq@6N*5z7fYX9v+X7zYIC@ABVZe~#J3iiBhmmJI zyk;1@;5!+uX9kZJH$7hD+6*`CCi!zpkP8M!89C22eS^_;?^N`?<9x3=>A=QenF5#! zx{{bgjq*ePeujooxx@sU1Uk(UC4Z8(G?ej;l5GrphyTw1B@ST=L8qJj;svgvekDIa94tW{fwbjStyJG23txeE~) zDrdPHIx8ZW719YE@#m$B+6y}*rGqaGaop~F%j&A)?r~O?pTw^Y8rsd0xbRTOw9T%B zQG~mBih2YLkazB&A4k2czgP(}K6@&wM7&f5phjbxSnpo|19A$IAwJQ%7)vrF^O1 zfy`#E9Jr!RE{aUlbl()#9`$eyOdm+^o0*O+K3XkANd2wK?CJE`knranGsmdj3=ZI^ za{3%@x{LJNys*1`H;l3V)G1BJrsnZmP zm2y4C6mxKRzT!XcDvOgXum@V?NcQn0Rvq^O(wFAvpNUapNK{;f>j;;{;H{>$af_B~ zsk0X&{HLj<4Q01O5XM~a*8*+w*n*eB5W4igK+6T4qeotK!+J>ICI(FFOsvPMIM|Lq zO~MV(siTR-(aY|$kfv~*UM#*?KYFK=K&!Uu z1LxCjM0<0(s+0dT9&9)tPQSlgC~);UPh|-YRO@y31*;OEcC?NNYewCQ#=QM&Wv#=} zhxhs)teyF4gB-xx9pJtlH0nHjEAbw$05>1R9z8S?u~(M94|6Z=U5Cx zE!iMupBoWSW$FH->#_X7(3fw)WW z!UATbIZc~S_afU8Cc={$U9AJm{?eGwuh2mcf_l?88uBl*xj85Qns55t7{)Jkt;OmX zBg{-zL@?oPenLq8k9l40fZXEDFI8+0STwV*hlcdYyQ}NFX{IPM))BD+2hx#8Bgxo# zFW+u@@v~D1Duw5<5UNMM3I_G^6uE=!!mrBaZgMr>W)Oh0+b|iqn70t-s)Ohms?t!x zVcW^J%_5SO{DBSA^U^S1Ln)m##DV1B67~LW?9-8K9LVBE&PO~ME<6I1#S@ha!)vYf zH_m3CCR0C@1vG2vLEJ~#6=)7Qu;~yU$SrwHP)mxtc$h5f&7UNh8o=#c%Ew>N0hkv5$XgknDLz($l3g9q4=-6YMQs>|cr?rX^-kOoBmh?oU#`vym(-3a4laJ_02x)KN#jW#9 zRC7SGfnkshK8%=!AjT^=ZH9w}rL`Vn#VD9|^Gr0{x*Y~bjX4JPKJhfnnl@PQh7fSH zla*v%ij|WS<_L_7*~_SL`kxV#ufn-cpt&{<$U?OGuHcR+PmHJKRTxC}dI1Nc?=xL8 zMe}hK<}bV#iEN@|^JNBku4J^NyjT73u{+Q?%l{Aj2RgW;24rO7M}RZF}L zOj0K%(!dyC1nChOmnAUG1a@*mTy74oer z#295oj3T?HUK<;K6ye+Vj)t}yx6S$4aaAibueU&HwbV1W4n)KZ!`q@h(dW?COXME< zUbJ@GzLZXJ-zmgFSM{l%S;M;N6If&Wow)AsV@z(=l8m`ij7*Eh?t+llx38xvtOIYE zTO54F{JZz24bw&lN~l;_7UnVLK}G6Lw&aDMGP5tiU~&>N-Tz%6%B6JL^j zO|RSk`00Ffv5o526-??crq(PqI0G1mh)b}vu8Ep0IKqs!aWs0e>~X|nrORoHogk{v zLC#Qb3V(u)*Kv@l;s3btN=qWItB4le%ebUj(Bb3<&`#5Yt$RAyoQLekVE3GdKpbaF zfuF3FUVAq=tU@D^c|kt{EqXfKT_A6Svnjhmt=-1FFO~2`B1`-_cx%$QMxBBs_8cj!kUzRi4xW9~D#6~t{JP^7s`#ybDdA@Or zF7nk+WFqo;gTGw6+Q5WefvUk!49DZS z;vGW^laqsVB!|Nz-X$Ak0v?qCun`C$7kDoh=4XOF_5qlPArZHwQ(B14ipc-c7rg(6 zzJMCg7l0LV32W{73-}s~Wo^~r|A)Sy&7CgZLG=qZGd7?vAY`MQW1Wyu2ZO-p*fK5T z?1BNuW&q%unNDjyXyikt!pG}TMv9hl9!>+JNkN&2(e7yu_-`GcRPtJPD)f0A^ur-D zDO4LV|0imyC14_I6Fn+_hmZ(@ltQ9g3a!H#D_Mkn@ZcDfBlO7S`$C^Gz>!v~UFiiQ zT0cRsdaG5vZI&=M4l?2R*QNKX=I>aB9cg{bBi(xrCtCM;oB(4Kt+y~(cWpb(f7E7xm5f^_`GK{8Rv$9h}XXL6-9w-|3W^V{8AoC^=Xdm z0s}&1-`7L^N#wXLyj|Lt)yhfrutCN0$8=H5#X$Z%b{!pXQuSfQk^*=4j;;3lGqdTD zL{$=TXL%Etwm4ygUmZ^5nq3KsMR;UGF)^@{!==!{ELraOAwv89u2s>63Tw9Xd6zKi zuaMM(CkH?`8a zEj`lC%>4;ImoVa4qn{%=u83Ic?4UYUK<%mfJ8BYQ6%pg}GaM$pdTX_x)C{2|=<|I| zD%;+-CuuG-^5c1O1g8$rcjMZab0Pj-i6$@FLY4Zt` zZ`^dF68t)?O}7&`*BOX?fgJTCIWv7rCtq28AIEbvOnB!MZQG%VN*5GnQLd%Ph;V$l z7jb@Akhro_&T!}1YCk-@GO(OW#Jc`NV~TVb6c{&>=)c}{2;LR8eJ)4$7pdDtUHP(+ zZ=1R_=0X>P@ro%MY%7T66YnE-AF$@VYK(hRzEn^dab7Rp%EbfML-2n{-D8$Oh1n#n zg-hOO+l21T1 zqjz^kYsU0J2dvM2W~+FoN^V(Ll!CwvSzf&hH9kNWN^qa6zg;r_R&s;}c(1{8z(6hCKk%;9#98r3HXwCGs7!e>eQ>lVD9kf!!FpS<)r&nH`inv>~>?Qy0A9)ddaz`;%T0`lpBG zcia`z8?YG)^W0^^Q-0h-W{75Ha|uk}jb|M@7D74H-wld&!donwMrYT^u$v@1W+*9H z%xpay&F$>QKyd`HkAv;@@^CPjB$AVw{a#d#X>KU68ry^^BJ-;rM(mr#wk3Xoynl2z z8J#XI`R^o0OS*pHoQ960prKBl*mK^WclH;uVQ)&|S0A3Fl0H%Qq<3<1_4g!7!|$-u z1kUz9;7^`u@0*4Xu6!9@k-4-|^3CNRm;G($TXwElk4we3wZuesP^>zW4i~uBR^S!s zW;XE_C%Sea`(}^p`rim|nimy0ke8mf7@i*upQEcN(}=fWrFx~#4n6{5OL>s!Ma}qR zNk(&XGofEJw>;B%dfaXuKk>VbA2uIfs>Pu1cZGPEHrHPCN1)g=l?hD+U+U5I;ry#) z_)|%sHW6K#5KripF{Py{j=VL*S2!k5YvTq%NpMo!84-}LklH!3+G^V$%>0^VS5o+V6O)M1W%((p{N8d1;5Xz z?fWJREU8E2Et6dDZlF2V-GN^3lu7(QS^uI6n9#)BYBPMLTs&GJJ*xq*xoLe@#Q2Y! zrGNc7?pCH)W2E@Sb{B}@Ha{e*ar`9pVn@ErP1=1)D~B^Jl$yKx2SML!B5Y}h=KHlx zl4j%JB87Xm2ZL90&e!9#$e0u}PnBVN9oIvLdw<|UTX%5qH9=AWBtXgBY(cZEzHr>R z1qz0A9hbVk^!d4>HvAW#YyrIaYrT@Sk>99a?n}C9We)!*xLsAKM@&u|jd<`|gQCSi zp*W@@@PFhjx;*hAf!3W|No1RlMqu3h1Ms5jtnUEJCs%gpKl|+e3-|xu$!&atu9d2B zeQ2JP|CZeN?AsafB9NMj*jlH@r_j5w z(98%Pk=-C4f>I~B{=qQ&^k!+@;k8YT7ORvO7LiTxaFN*!>g6nnqflaBvXrY}tZIT92|6)a4S5Ts!U5>L#z63QRN*sWUl(n4+<13vvrDOOh<=rme z)?n^b+6)rDQ?=gzV}^a|ot|b@VqXfQ&o`Ulvd5GUm2N#mi+;~Ks;DPSrgmq1$g4uo zvpWyf$8jBzuCVM{4;;q7wx%@*u#SOtXYXr_RNfcSR;~v2!0a~PrpM2&RC$8>A4Mnj zxNH8=;g2CRyPi~#OkY~?Mjtl)2W&Chf8}{q93yL|9mV>OI(m43e zrpeZl=Vb`U;5SNTDKR!o_ZvU)uq~)ULVHHlijS464bp;My>GnRs3Wc>zpZJvh!Zd4 z8ZhQP!1N=rGS(7GYCZFh&oW%w_0F4LRcTt*!HoF=mBfxc_zFUutsa6pkDj%?u#e`7 z(Y2kn{n;GPwVr{R7D!ow*Q0b^$AXoWl`WGoZXNr1)jvnsfirTP>tdy9>=B2+MlFTI zd`XDQfF{Z7H76(M2&jOyj5*UZNf!t3<~!KR;^J(eTtDLrgVqshN2S2+*=pjyaPE4G zeeV8fA`B*?UeOv*UOWc~nDli3w0VH+1E@q-mXZpROmb;@yI=j)AA$)b0sGtlJl~Jw zwE$8}?HTwG{4{ie9yIoVk)`{!#Ze|2;GXlUmg*W85!WBkzUDp+` ztN^{@`MyXzLBw*a=s`y`$^~qxbJHQzzbgcAxU7lAB_&_RbmsSgF>iEkTGtr1fE$;# zb@!*bU$c}ynr-tZ|GX$|0c|k~1iTIi&)?O7!kB!(yq-!*O3DWi=uO)HcLKe|9?k84 zCD0}R0KH-Wfv(GVL9i;e7{9MLe_$ovQnwo(N^Yal`hHNeFTj^gQHo2{qtzcod4YnG zF_mJlLL?uZyk5Rb-jH3?;49|8W6;{>oiuHWjeUqK8MtNB`2n|)N1#LB9al2EKy&CZou(1K1^WO_0M&X?=?TcmA( zo2OwZZB%b+^-IU8P3tsC4zEWH4l0ZToo9#CXDap!%5i33H+H3#eF`7Oy(oLuI3C_j z9*r2{nj#SFGif!Xzj8u03diTYJOwTO08e8FAEW5D+r^Uv1<&fWOA4`m#c(CSB@00?qr)BnaP(a zy%v5?a0e}uPkXHC7hQRxjHuGq8?EZj;#CZT{P^aDHX^ar96_rdvF;l=jWlnCMQ&2Dy{_|(|0!d=>AX7$I5-TA>#Zl<2jz9v3 zBovN~t2DkBI?4QpMMBKM^JjqQnSQzGREQLO=lWNDgyw#GG;OQer0Oj6=DJj+AD59) z;S=TrAeU8A%c?K@q)kLqoW0445Au~eKklksBL8&pdk|B)cUSC)g+pq6Co+Y7grM37 z)76uA5(R+K;<7SX*v)V}PM6Mv!~b_!dUBIQ&g5x1WVimOxjnX(bFsWXIbRAVbE^zF zyL%jR{$bP-wbKXL{e4du>wjS*!yMa2N-{k?sP!L->ys`?{R_{m`e@$t8TP-nbVv75 zIS;YNu|2|%I6FhAmVNXLK@vqdEWT3G7U$C)en0qo6Yl7rDL5r&PYvL|Wg*TCrGF!` z%4T)9$7xraSmNkC7exIDIAo;*wFmCjCxO)CXyX_ zRA1ZsDvEocf-VFi2D_|-@%oQ%qs>TKX;F$Q5R*n>yAr zh^xvjsb1txh1@NwQgwqWyGr=68UIr8$up-1;J%g4Y#n1f9IyqyO%%qFT^LG_D%71dgTgtA zx&8uDw$z74{fsGtSFH?X0suKz4Ef6yH~2s|v#8iDOX!B#Z%-uiGXr91aQoCWZiwIeh|RM$0G_wv;c-H#;&tSo*(sR&K=Q6Nro5s~iW-!s6w;hE z!Gtwiz7ui|&q;d4KJ6n@0h^4xIna6G*(8BvvE=4%ilCPKe8GO(LOAOJeCz#VQHmtW zLP!vsF+5AGARB2w6(vpAkDotl#0hti_=GRP?U;oux&`CL?~1-IQ%>rQG^Dj@927w{ zeQ<1SCNG95gHr_ZUjf*#x5mcs0{{j)kUWi;RDkydzK1it%-^NO=8E&aUI9oMrzsr{t8F#LX zSH@%>@Raxprhz?tsCunXtLR{Yha$e`C+g7NCq?ZbVl#OG)#+Hzn;-8~)J^9tC#FMD zB)5R_VAu*MJ)0|0rE`WUE+(x2+OLEw+wW7nIXw6A9oKB2{$71%Y!jkNvxev%zyK3@ zT(g^G&l>?o<7G==c*)n}0FfYR)$vpSRZK^y_|AQpMz(#>X;#r30Jw90LkYh<{WF3A z{u}9~H15;UAd7Ut*Go|zpd10QEoqb)?WMVz4o3Q|{%{EtiAnnTzFJ>j|IbxF7GAzP zKqlS-d?ohe0bWs3=ARkqfLoWDJn8FKpsog`H3LJztURyW`S&k*i_|b)_mKY$ zJx5cCDq_n0h$m?36p$cgcL+mxgiiVVuZIbB51C4WJT(kW~CT zqAnIs%SM}=vwExFV_e=^heD}wcq38qpFpuwZ~74aieHCGb#3UGdF^9W=8t9_Oi#|( z;1wC_Xtx~$$BLmu( zGmDM6i9DzV;ecazkqg$My+N#Srz24mr}#D-=&Lm54jb_LOx^HhjYcZJe;oGlA9vV3 z#r~E_|0HP82wvKbz^|!%0PLr%cAv~}t*NF_d!oR%jgYc$=me7pGV|3;e}O4|A!7J$ zz!MoohYd@dlijZv`@&f%`qe)f%!G^EP60JIt&Dq6klgIsd;(?(td2=qxTfilmtLUU zMuVm#CrK6wiTsf(2d4WK@q9uH$2>KZ``S*KdVbq0^1I}GTLA@f$BeK3QC=kabJ~Rb zyoX`nA9gF9GXGvr`hE1RbI)ky-r#JU15Fz_%2UI1{dvq z$IKSoRVKA}rP?LN)0`|E{k0|3#Rb5&fkKi2C4-O8Mq0gNgm6AA3q-ix ziRid~8F7b4uL&u(Ff_H>wesNZmkyoPIndV?{uF9e@aRibV>}J!u;$1S|9a^rvCF7Yg`Ithy2~kF%KLvGaU9<=OmEkejYqz(pk+CqPM=p-%`AdSD z;|+CbGtucm;_UU?PTwy|SIst{fl?OVTDbnt`|A^%%bQRr$U0XMuKElK!GDxXAES*aBW!~6at`?Jr+SSK+^A^YI+{s8r>iMG0K zSK`egw2#0U@$*%3LIUOf2hdtW+bs2o#F-BW;e_+xFg`(xF~c4KA^M;_&d zkLSP8(Vs+YfTAx_lGoRpNkG-)WJNjST}l?g)sqI8+Vk+YW`S@I_W|}af}-Eo%QCQ% z6*aM2n!+^F=`2EX=v#1nv-aoX(mz093|^(z{~?a9efoclqnp9cl?#_h* zLGdSp-sUrI!m%+ZFBjwgVvr3Q12ki&*t^nV zb~z)S3E%JO!pD4|InU1y5}Wx-?}c{3q1ckJ^rXOh%H~WgtRw5Fse&ouiR)?(Gxbp{ zoM6DvY3y$;YJw|Q+SV|KKG>IEr;QH2%&lyj!r#!>s9Ht$Nf`by4v&dU>K@S2jZp4d zf&C^*5}6eerfSQvTM}jN|T5kI4b_Fz)4X++1rAyPo^5alHK=>99N9s2& z=Z1u<+j1%?4@8tHjN&pxu`QS$wwy*RqKIa0(=(EC?RxHJkuT7egUNFTF;<4!l_oy0 z7OPha;xWas>=>wLqc-!?n~wc(=Kv1IfHSWi-^_CR?C9ev-Ltu8K#2Tb@djm}d%PL_N5;4&Va?S9V35xl*G7Deyi0gEvs&v5t60=vJ)k8k ze?UwN7QP|BSU2;7v+}S~N7_-d`tZLNXi}5Mf(@68XHM(>A+{}DPC+O2*gdz&VaK*O z+rL)wb**hR*px}~ZJg1r^=+NEJGk@Kb+>i9Ea5YZ)};;tDR@Mf5V^2Fju;zx3{dJ( zk5W!diVA}Vh`qr7X;V|$_$MLp zmaHtV_tzT*Q5Sl~N8}lh7b6^7j{@IxzA9w!Z+UqnZ!j1#usfJtu;VE(Da7qtxQR?K z;soBB=L(#t33!04StQ)gLg4b3t0RqYkB6g#IfnVgd^+2`rvZp*B~@dhT6K#Kna!}0C%*pF8aV@dm;3_A|aWjKNS zn9bXI>S~0?HDykELhe7a7b3{k1bp{1E5E6Kxhh) zeZOXN1Faa%-=DS7BbPQX=Me-Wh3mjiL1YuY7U(BF#O?zJLa8(=-PD(Vb8dUuMrN0Z zC*G$uzE~ml0z)l(h5}-Xu@-vBiJOYI@1jP%U+-hkMxQH#RFkW^eW2(s-b#~0-F;Am zK80%SIG@DHZ5mGQhBu{36<1P6!4d~lJq3nvau9E%?H4p_1TJkOD&6SCfwUnPQ-!P} zZNMOaGO58bfwK{d#rN%WblN}P>hYT6E1wjDOs((7!Rl4mJ>Watq6jvdxkL}Rh-Vyi zpvP0NEKLleUVXBVF^)AuA(UL5ngVXVa7EH+3WUxt>c*C3O~Cwg6lyJ1A60!%5<&pc zw81cC$KE_YNlXQ}uHZg6+{lREE@m7#KvJYEpR|5Ebg%E_Kj88wWIP-9Fv?+$9DAZR zF>of@Fh%;pSPdKWyO-li7T<>(#{O~%G6LC{NQr%rDkTn$FRTnAa=^@JYwTijK zs2DXU-){~nCcY+ipyd~|skv7WK+Ef+Oam{kw}+p?Mpu*IY@$)76{G$B;Ngl)6@V{= zQ!J^8(B)iLPNpzPsH~@rfq2`zy&;11;S5^MlBx|LoX{O0}(-5cxxRsP;R` zV~0y=XfuQ4@9Wyxd*V!OZ_@=7h`O}8sUb>o7GT>*$&)wUzgeY;$m+1Q#0CWOPGL{w z7FL`!f_{-j$Kp|1Zp$K2+T@oyom~N=pRR6-tc(Y0Ou^3Ko5rNz5+1U`A+`3T?)P|M zAw0%+|5WXC-J%-wwAasaW(}mmc|J@KNfc$oMLRoAS}oxJKY{MwL#L#GFm@1KMWTLL6R;JJY4slw(j^!WG|JwZEi9RlX0r3ZI+d!e(~ z=iwHYQREWX4PxFGN^CfXYiKiJfeTQIm#dt2!SFy}OKrf~uQp_!$ercSoD2CDlgz!= zFA8!onxBA2&}s(38EZ(VEk^7ly-JahaXC&GzOMtqYeo_Y{d7GEXW&`I3vkoCTcg3A zJF2_-sv-qJv4Z=%{ePs|lcB-7LC`n6c1@i?9iY!V;T-r6NI-kq(0Lpb-n0oTpi|<| zYl#o$gLk~7rnfj)RUMdj*LE|J3uIC=tpjedgnh$6-N5Bv%0uer81Gv{3`p)?0FyAv zFV-FmFx|`F$b;6#T{zQI)L>kcIjYcGT7xVkU@u$1G-&v#N%bTV-o^{DX+3$=TF9S> zTz2b`60t=r$P_>E6POLSBm;wt*R0yU*ZqbiyOw&hp8SHV zmK{077bOCkMKqDF*48K)29uD_0%O-OcyXjK`b^%wo%FX{Mht#Cy`f?)KOJSl;dMks zC~t&*ym;fiR`O2~%t418P9`4T|Ha;0#l_WT>%LeBkl+@a;O_3h-Q6t^+}+(ng1fuB zySqc-8rMzOKVBg0y zhsFAEl65@frqy}A3Oi=;KhmDKgf|nzB&ZNvdEd}h(y@ts|w|a1;CcP=5Elv z?Fy{48tN3T?jwq!E0lFn`JH&k#}&5|FdL4ah+vfZOXeH6&S9JTlay!KnyGz!7=WZp zQ#mQK3KSw!0pVj&G;6P{>#Rl%@Fsdav{t!?Nnq@pF~|Xq99_Oz)gc^V(y1SPxcFV^ z<|it4I!u}7@LN4LgA=#D{pwFjFfWGO1jBbj^zz%j*T!CImtC$w8_;^bw<>92uXVmy z{+$ou+itB4KQ7nL68MA3PhnU^~j+ zS$#<``;c+fzCo11kexgK1X%kpfc0QNRuDYxoPV}?x&E^=W-KXnDWwC*jFXDKl{zo+ z!S74JINMK1dr4s-#ZTy(b4v3XZq*Gnj18sHmG^#sZ3K}#B~L+W8ZayW(!=jl^g`nx zG=s_WLOXohf4y1q+Kr4*^Aa5W;@o#%fAjcJ+52z2EuQ?$QT z8SI!ju?WXP;mW6vL-G5B0&L(9mD$NVdMG%mj~vN)t{pQey(brYjkpe?1sW!lRbYehcAV4A~%EjsK z#vYIq(h2IL)a4T5X){e@i5>jP?PkaiF)UPJ^ehc}i2*3O&ex*~9!XfxLp+ye&XG>6 z->We-e@m~#S>0kcY+R5bw6*rtV===t4yB#P`l=7BU((E-6R`%4SL(;5{3Z{QYdXwIF*T}pW z_`Q}=WQUeyhoM!R_el3`&E`SsM`U+NXzSu21CE~t7>^4%;wu3&2bW#@1iC0>sQ%`% z1VOIsFZ*5>VKm$X#@Xz}(Sa3fny-jS+XAzj7R*@Z4)uQWeUG+3?_=v z;S?41wocnzPs7~-H)1W=K^Cn-UB&sG`Zz!-EB~H^AU4EKfK6drqh5cAQ>??VLi`Mm zfBmI2X(bGjK7scW9F+#2(n4H9o2uVIFFr~3qz2D`js@a&UB>~nMrwBzWGo}m4j7b@ z74ky9Xx9_^n%yr?(`+Y5#9a=yPx>6F&kqR$P`WPvXg=XF@ai0Sz#5IdFM;(awOTfrl<+jZnl?oqTH>&>&zR&CJDNEcD*3 z3Q(5g;GNujmC^|5t^_l`F%!w#Y9h>CZ5iN?eaN4w7=a*$-ucAe2N@v2yVK_Qfn(s) ze-p;*({%N6j!|~JTuFtUX`|?<+5FM#I5XlTM?YHRm;o0Xu{1ibqLoeEzmktik|qHp z;08tPYPF|wL^h&3i1;>tAm@uA?#jx*X0oLDw&9K{06l#wsjl06t@c_V6%QFCz`r)7 zL}vQ~hYfRRD~*!o@en6ia{~+JA@E{rsWee)+RAjH_%U9<#q(_>T$1+Zj33A{4qTAf z^o@i}^4uUBOR4}DVy^mS3%;baV?+XrwcHH$ZF%QsdaErJx0rjJrtU>`AlSRDG=%NX z=K@F>CYV2yh`Hb?pE-KSg2HlDmH1+{`-dlAYK7+&Ae7&~cx|^{An}brQCWd;=w@%r zbPzwmu;Mb0^9~PcsUhW!K3Yyjj5{BXsv90br`;E)h4?X|t=ph{zaU!!!zVsaW2M`o zfiJ1%*oH%40L!a0xjlnMO7$K{SbMRb$>_;1Gx6@C_&P@TVL)Su17)K2%v!|^XO;T; zv+MAB^(N0q5=V$;#xIkKg$h(qWYHSrYcwMZqj~jm=+V!BHbHqx|{F0LpgQ8jpn=N$vjKP3#&9V%^&Kg(FjR z`li*#%HgS1@!(GQH}K9X;_}U%t|Szsg4mMAd-P=~LeEp%Ot<4f2L@EYmW^DlKcb zH=;Z1mw(W*v%|J+;OnVF=32g26fs6?Zx90wa^xY*vaW|A*X>cWIyjKzO_=NP_gt3l z(0*7b_!e{}ml^qfCb4in*P|HZXWB|X+l0=h5FRsHJEdUiED&+0f(E`fIheZ_8`!*$ zcsNgAnW_i)TcwC?NK!hM3InJIw&tEr(K8&(u$}fXX5Dy(GFbGJFACpe&bTBuW4U62 zS_%?ya2W*tM2_?i@&QC)pI~}l>;|wuS;*Hb9$%!+@%)2>wUHEpAP2u znhDpSPUa4j0BcjECtoCMeWW5H6PfXU@~ewAGt}(B`Gc?9ewq}chHe))cY>Re!xA$3FZhizJ0m4BpVdBO>?{rT zP>tS7&wo+egju*K+H#t#to@cS@-a6$ccxXIwX{C{M!I44hAFWchV-w3Iq}k4_N33{{DVArx zDtgJNiEQ>}d4}7|MR=O@Oxf&e+QjS>Ha+lHKkzn*tCQQlGyII{CM< z5$jPnMHZwYi-j`AG`UmhEkbp|X=nqu$+dN)NPEJi05mL=AFc-tL={)haA|#O3V>x6apE8*y3pO7Q`* zj4i|=%|L2$lgf9FZrD1Ku9xoQrMDzp!ZYrgeS1AqPHxIVz^0c7OZD>yl|g-71AfH% za|Aptq_mdgu-h!u>F%y)CqJtrlIwcd3*A+<_zeZd@=;%iacJgWqF00-0D>C>*Tj4DNxh`B zgzgzBYTwrmy@3Q3LA(ma3wpzU64EhCvm+M1z+gk`i`sU9e+(VxwyX@fMz+2XMhO0t zmYmF6^s#)(WDMriu3};>5`Afm&UP^T(ylUQBJcbA+kCJs}i(-p>Mx-y$S?=ZEj5a%i!HbRn$5{ZNE|SX>A%~9ip5HA}d zS=Pz_P_cKd2Y_=t9!=+laP(`nyR()9V#)L3w&)adqUDc@j=%noQg>ha&+0h5kKyIL z|EZDxudnY6KK~$cCphz5bBqH2A0K{Q3|V0ZT^IRA7N39okB^hyzx48atB);*|0n9Y zpF!6&vRZa^vashOcUE>m8g|L1gu}hSwr|8k*CaNTE+h3OME?4%iteCZAkswF4eaf$ zvR;OfJGvmCgU_uBOi*sV#3`Xww{hQZfsc~NO}Y!9py7+1Y}S^FU-35g&m0=FMw_<= zBk-vYFKKw2B0(g2w)Z57$tqF}kp~JY$`_Abo@C}7Dl9;d{C8RZMWvxW0GU;mmlptR ztz4##kx@~F%*@Q{oQ_pX_Ica=*{qi3-P|~L_s=`L?2V1{T(d>-j*gBf=;@;Ye7Q>e zO+2G-?yBfdTnRO8yASaR32dKa6_u1Isi?vmtXB4Z`p7EI%-mA1!5=w z?)V{dXoO!_gb+{!B&sPrym#C@6w06E7n;u>E6j9Qt(qF!+ai{1IPx=JJ`;2z+w_fV zxuVCvy@X$;E&9OaM|O<64#;f9coZF^l9PNE_LQQd=4mcRF1#uH5O=?>yaVtTMU4pn zTJjpj+b`x1{H>D0gD33%hKO7VKw0T$Gig-7pjb7R_|%?|rB zfM(~V64U@#?%_j8GEh6ttEjm8Py_?Mh-fLk5vIZ+}uv{`z{t~n~4LKMXE4+m8H)WC=lK}bTB(PKDURKXLCeN^H(@F_|n ze=1ac4<%3ul2gqmbnNNhmQ7ECLyw5qSA7{29 z!T~xuYE}-BVPBxD%qF^YRuSPhCWx5X8qU}K(xs!*rSvr{eJGty_tnF*BgxmhO=i7x zrNR`cr
8>aW-^V8=T$M|Q<3yPLDJrJKFuHPol*)v$T16sFE4;*?rCg;shnJgIwYX@svD_U)z1Kxt^M2}dYKNFPA>91jf<@A(&iGSs zo>;b4`r5HUh#w>(?hEy==O%#+p?0E@^U<6HoAoM%R>MK`g}X zVV#l0tH5W$$gXg>Z;FMoc$9h_ZPEFlhEEZAeMGDEiS&AB#0jUaTZ(|)Y`xPdGKO#{ zR-9I~VbC~$3-{X>^oqo!YpCKN2&1+&dtH>3^1#<3o3cAyu4e*TFO+CVNkt|AyzJp@ zVKnk|Lb+E6U^vYliwC%$#{xPPZkb%|Qq^)Oqu`)A5^q=b&FEni7q1n0iSxzvzbsP@ z2|!N;0sriA7etyZR`Bi@Kopo<^B~*t=AM1Y@dNqvjB*UsimukB!oG%> zn&nps<`~oVtOv7MkTv)kBOWe6zs<4X9;h(UI>h&9W$bGKt-ABcAxH zMKAKnwdh!lp5cxUx?dw#3_ct;Nl}>BY}xC$4b{dpA8JWFZi&PuX2#|pCng?g?qtVw z+&Q3UZ=onvM&!M{6f{Sh-jdA!f;3NVgjm)iFf-2&p6?KhUfG?JtA$!P!>tcAJ-vC8 z`zp`>woF4giJDFlPrslM57Cg^=|jGvhff1bo=zPP&HMG4uUQJg`@Kwwmxf4Gw#lGA z@AWS1k|9(DbbpXyHTK%)%*7~A*uq@>)8p7MmSBv#g3Gg^kLBR#CLmVFCUV|;@9__i z`~Ev{vWy{Yae_um>&>@6z5$I;W`QJSu0V$ci{XBPmNjG4s_RaaJ#Zh7rg1uqZ2 z^sMG{4EOr1LE?hT^%jY3j|KPav=vgvABmtAcCeUDhJZF2Qgx&7zs%RMfZPmmT%k-V z84~N+4KUFUai6yt)tn$>9{7xXc`er<(eZh`odG6ja?GArpg|@9kc1BW`OC*#bZ9b_ zT@J7V<_U>tB`CC~B=>vzHb0Y52$)QoFo8o%>|74*ChDEt+)axSB*P+-_c}pzBO+Us zg8*hb8z`1sj*TWZCPw-YI4+HZA`_2sKKb8bzY-b{LDFntSfkQZ+Um$kOV?=(1Yw=? z^YX6!iNE`)(BkdvlWwDTG&^$U zQW=AN)RWHR*fJbKvBrGv?trf`O?^>&UlIGqAtOFXlvjq2X554COJT51Tcc4ZhcYJ5fe>&JP9#~ba0sFa z3D~T)%&WiY^Y#UTL(KqI7@MIqF#QI-!C0TR0C#36i)gzI+L`VW3pKrfpQqHoELB^# ze+a6~tOjy+pC;J4Rd946-)5$=r@)A85uM4~Ak}j>TzB9PR~joFKBZM>;N9bUUVJms zX$M?}BQJDoO`>SDo2Ht+5Q}RG3kS9VEo5YfsPt8P#93I1SuUR!l03WbAyn0%41{oC zf=!eN$r`k?c6Orqt$DEI5mt{t^eibv^o!oB85m~{b#_g#Jykq5OMQ5G4CfgZ|75HCt7Ict*@gsU?$~_NwJ6%o6D0Jpf)Cyx2mpZ*sz~ zjqxp!eq&cNtYli$xwxN)zI@86hb3#_j>l;hp|Kpj41O?Q3=~AHa`s-ui9cs5a#00@ zgoLml>(bi@Cm8{e3JXjscTf=KH(g2oGk3p<>uZPI=>3*t@jqBvK6Ab%4x|MW#RDxJ z@1?_v)#tA6TF}0@c$U{{u#7}OI){S3AANR!MW?WLYX1_C>b9|mG zrR3r2j)a^Zt8H)?4?z^y{ddUy5&(lx=l|5W1_;mxLe-#{{Kfx*lShUIi(CQPOy(SP zA{0Rg{s#jEVPGoEgzAnXls0e^(Ps>;%b}F#Kf6LQvZbuls4e)5r@j{ou)i_S25fiV zP8&CHkE_cOj~Qe5Ke1d*at=PPU}4My-HF)X2w#6*8f|X^cuoOEBey^)W`F*#-)MTh zK z+x;+q&+T%(oE4wQal0?f1HO>#!}HIteP7YGM9(MV z@uPqluf09~?a5pP zNaCo8Wk#A2K}#>!d`W6I3d(!q5(7bO6i_h<+9Oyy!-u7yO##70S&#QbNL7v(xIEGA+g}DsS<3IIztthpmkR_&?i?!FW`BjI0F14H@_~QqT zQ8D8kByZTSQ)Xxh!_-eCx;m|;2tGO=uJnhc){gP~HLV+Y*Ftz zI;GX{>h;K#5_tg3;QkWo_UFVeNl1d}q0RHrg?;xU_oGwrXFIL3cD#g_=I7JV^zydN z@SkX^NE$r5gKByH9jW#@mGJ>bHTXL1QFe(N+?7)zxqlMcUHsh!i>cRR^AIqlv}^rP zKy{UQm0E-!G5P4Qv=X7rGwvn+y$$n)iUSj-3Pg@s>49sUeRyz68 zQf*l?O!p^EgIYl>5%SflhA3r^LFf5GTo$fA2nRA(kNwK9=0B`Vu?zVvRUbUax8V@D z!`XuEC@Bmb9dNOe*fNXf9>BwjX z(jwdnjudsJpmS&ICgA*in#5I9-w@koYa)N7)YV z#Vy(zVsiVC%mZa!9`)KeO z3ko%e){IWo9ZPUOjEya|jfEYRcge8PXjOB}8{+4_+i)*z4E+&}aUA(>j*L(H-03L~ zaT_3D-Cd9-%FTL9qcfre*R3APN>SqD%JZdFOwFGlFxqRjzt^Z=zNBEkH!@=@c#*;~mz3QoJJK*%f^-Abw(zLu}1ds#_0Xp3C^t@8Z$b@U5x(hHi&JZ*L6&LnH9xW&?XRmI=_%*DWH# zDpph)J}*Qtp~0u6NCqnfLw``mDTx%t$k^HTleOT=t0?)~jIRg_enZ?E!Qpj_JV;sjCFl2G2V*F4UGil;8i`#7ElGaXDGb)u2^XRw;rzHa3ncc8b=ef!f*5dMOBU@cay%KD7 zK1RJ3qsn!N=ekX@SFEZhMh1%SOxMdQbn8e_-DUi^LW0Gm)aNfywk4>(Z87()s!%L` z&y891j%-=)qy`Q#r^*A^*N}Srqz3v~)<+*ZY5AB##aG35aGR_x0QpB%3dl{9%c_9Qx`S%k>S|8}57;wVTx+D}wgW&CM zv1nW=R?H9I35RpBF7p_O_7El(6<|t5TKyylj&Tem)lz7Es@}_G{GO_JCAoU6@+M6U|$wUvDb!yjc895n#OcCxtSYMa_Y6irFW6rXnl2MGkN2fo9twsqB8I!#I zz3`=V1*QNJ|NKBWxA%)H>X&2jLDf3^h4h^@13VW1y*TCq=JmDPJsj%Zu+1gZ!jr#B z26e<}yaN5fZ=F#)1vwG{eCgt?N)-!3^9CN|lBb`XMYG()9bnqG1q7zwGr#}N*X2eh zvqmoiBIphJmuy@fvJ=)jsYX}`T#K&DG!axoB>kQbE6skK5Yb*`#=MkxVz1^SqRFJ8kxu0yB!3f@~&)BHy@XT|@ zC&ktHa#H<+(-o8O*O#0)qZlaI$%r4PcOGC7mrZs%WA3hHodX0YWCUg0p1}TJ$|sRd zM;eS>NrQh1ae-V5^AZS|jy3bqQx*LcCj#W5&%@qwcKDY34+u;90bM$c)_5hUfv2k% zulD2~QLmM!3ARNxAimboWd~uwk3RR$B2exyUU>{&UE5bH3w-{>3p=8Hq{q5L{pHbB z9Ac_`3gr`{k*pxS>naSfxLJK;3WqdQ?fM<;8%Dngrnd(P+WiiT7DgWRwOosO<`sJ^ zix!J#DsE48linRFEQ?kT`1*DNY5oRF2{CmLBj=_rj!vDW;qj;ZZQl@9^<~bMi4_ZY zdQE7M!EabHbN93Ea%=%>scNG9b|WP{ab?q5&?*RKfPhQ z!lC_I0LTydL)?ZxIMY{k{pnx^kw0fSlxVMAH6WlX6&3e0a*Gs7h{&_E-iqDXdi#pl zm*&yHZJvMJzo9;sUxQ&L&+2!wzZ6CRZnm$4UE1lkxnf-^Chb!E_$~{xp_ZnG~q7g3}k?uPls>sd8WjWqJ z5-~L!OZW5)yVv)IEUw5B8p*$h`Jdx0CIj}Z1Aw1=wY}E`Qh{X}wR=S?JQ?uv!US?p zC#nDSN`GCUt&g}PctoqV@~MMw{Who;vRm#|_o(^0Yj>Gg_Id3s-6r{GLy8im_O_V?!W_^B2| zRJG)nvDcPfw+8C{N#3X;uNL79+m>00g`-ANmwUS*3mRob2O#9^tGugOw{coO$zLjUoF<)L9$y;sWZH@m>y3`dl{`m`Jz zd?}XiXggVLm%6fdNWUvpDJMHTJhb231SdbAMJAmjiJ>sd=5@4czu-Yspt%t{l z?MB#t$m=cFn^B{XwaDGLKT6y~4tl-Ur<uhtCBfRKq@-sl92rQu5Vy)p z9W5y=)`(54P#CE;-6nB$SAj0q|Ac~}^Kd3*bY8qJ%33GZGXg>%md*}+tJURNA^rFA z>_-TbX4?a6KRxv6PkH0UZUmmeW=c3OXL?YyrPsS@YL`k5U`VlNZAwq28yr?0;$}`R|9{ z3w7(P=OqDNQ@&lV=+*2be-IiZnQ{e|OFRqrrSS0hXe=Y9-uCQUE+RjPfk8?5Yn~Xs zhqU+O_hfw{rb#!J zQB%FZhjMJ|4?|A;BzKVp1y5xGdAy@kbkP8^%< z$3-I2H2b<^t?~C)PK>1(;pt3~R-F|#0A97DCL9vv@nJbp&x;gi!RA-X?UCfZZ2DLr z^qt6?N~7yjVW9_sr@T3+j1-66>N91yC_K&xE&Cb;GBR>ZX6AY0>7$;vnQ+as$#DWL zDI=o-o7LNzv0T$G260xWW|O>0+e>&~|KR9hx?Jq|hx>pU;nakhSyGp0M2P*+liN)3 zo}kRILTB=J|K|!R%OE!rZQ7hitY=bw_BBxb5^AwXy`^_Wph%yj>#m7t+J3$@yN)Y= zj|$R)N_7T}TS!B({JQ31M+5EFhqInyQp>S&LHV#`KH*W1nAGAbokF?;vkE>qx!&!P zl)HB8MOQ9REgHtPPr>Bx)@#%Edj^CtTQsLrXGUAK&k@pbfY>iSgs-;KlzDPSJNf17 zqZ#*_ijXsYhP=?=$?vp{&S|y?TbSTigGdq@Cfy!tHU*3Ol${QqO@`p{oPVz;B(`HP zfgU_ZlFOpr8!ajgr4Kc*s!X8+Wi)!xQ$B$ z+9qOCSk1*16=VLYqG*+x$P_CT{ygEY((`_{ii&<_8VGXS-2BGOr&V}>jM0}sn=0*rB1Uu&0+mPdyzI?E?8mJqLGQ zVS__;h_~_#nCt!$UFM&mvLY54)MCM-MSX6sKec`~O69%fgq}ro?e7~XDZ15J)@oIy zm5`B&ZQMvEZuhwRh5gh{lVZ|#QzNHZ)8b+jV>FsjZZFX3p|4S?t3#Yr$ouY38S#S1 zmv%h&NmrO#rH$Op15}E0IjpNt+QUIp5#HzAD#pV)SHHOP8sZ;gW|Lk>H&9AS(@;aA zeba30#jU{;pAuTApjX%*x38J(5EsUO&k7rHzvg^A^{EgW8F$v8O}L?Bs5tTN4#r96 zZN7OxqNlmC)OR9wEK@HbsltWBNaEeK?T=;3d0Z6dE?3wO9)UrX>EY40!|yup&qWSi zEaZ%*bcsU^m{Jp0>?B^(UIoPmY>AS}A=IP}-E02!qvA-hj5_Brq0sH)^^fwHk2h{= zQWL778n=0klki_lDNSGZV-VEb(J!+l6=a}Ohd)R@krzj+V#?*r<~EUY%ScUqm|aZ-I1P-_VcLyZ#X z*xqbeEc1PA4jF)>C-ux!mGu% zU`Ht9bEe_YH<;1xv72&S;Zkur{2hRN6gqLu>!vhhdf#b0ZVl#>onH>V%%??yac z@0R&J;dFH2f!3mxn&V;xUbD>2CTDZC*o*T8X;nX@iS@sT5Q}lO8(3;N_Vnuc-(nGQ zaZxR=;=7;eV@-8tN_)JyalW@1n17IAc%-BZ`4e7R$+mxREVz44$w1Uo6Yg?9pk>3U z({<$@<*kM?r)aKJA)EJd99~Mo%-n1IuX>E77cS#^2pR9Tar{6ZCEBL($WAOgyGyl? zj$8cXUj>;sDJt^V8}5+vE-yqLic+8FaWj-y43lj^2lxApX4; z3Y7>a^Rrs#?TC&N4zP!z!j7(o3(>;@ig_>#y+@6+?_}CDP>o<>X%Op-z;c62E&co zkP3o?#2T6xt0lSN(bDu~tfiwpNKH?D#`UBpJxB^h%k7H6kI(7-K){BQ?K@)zh7`KyaD%dWs3;>RV2R z^eYwC8q<3zTsJH6t&16!%(SjA=E=Fn+rV7iPsFLMBH@C?X3Wv4~d- zP4yRhM4mrGft4yU(Y$0iAkJu68*|%pQHl(mfQ#|UGU&TqkU&G9(%9h3-iRedaafi? znLl(NUccGZ>*3{}dT{%X&DonJgpp_zN*UH#lUeMT+r8J}#<}!P0+`MH>U+l%F6Dv6m}c3V~|bN{B95yvm?zG z)0IE+L{eI+J5!dA4{=tb%?6!PAwNA(hDMD%1?;Hgzj00=Yrw)@+TUqFMg`eUv+Iqz zjqI#COxX2tEuVnyrF(nUI(QKaG6g1QYsFlQ*6MmN(yW$SthB<2-1XnV3l@7sbj$UR zBk`C;Yvyw|z0fTI3&Eh(wd(h-FgJa%*moN2yMZvIA5|3&>_pD-A;Z>06r@C zkoqQ>S-4-+fsNHCMqCAxKh1`x0omRVo@mV*eb;;4*DjM>XTZ{ zQ%L_LgOZv-iwyr9tSn5BGCwJ;-d9X6Fz~`n>JfE5CN*`E{u`5@F_xaoz&Fb=nV;VV z&KPiax;r^U(ddjeeq(8OCEfeG($mEsDS)Ztk(_HiihAA*3I*w@y->|&c!_e=@h^q` zXj0wqI`AvJ0Sj9k$?YxW)8*pRBo|6R zxBM-8t(Hl0&K_}+Hw14qy!>6D=0G*s)BBs3o54qsiInukIhcOH=MqcdvyDF~|I2|A zT*W>6YL3FFN|)2&>Jp40+80L8rs_KHq6AZms1S?GTaYfXP)M4E@Qnx;rC)s~!C1P* zI^&T+RP~BK_6hgTse730&|##PW}xJFR+FDjuW=RN(CT&_8y0_;VRXs>bCAdJlZ9UBKK&{!&^{re~6}qu^DVbf`na_r?e z)6LwOCE#Z6kSHv-^9sw>RZ%9>;y((8UHrfQQRta*M4w>$CNR+7za+JT@p>|6X1}}p z&emfwGAqZ8p;ahPN#1=IK(_wADI`{QvOw$m>x64RdhUCx7N~*@X4YrU{60i8cEf!i z&+ZeMQg&Rls~4T6&Q+12<@9_WTj8FZeR4P#Q3V~#XgI~DB{CdVW}_lR=1<1tYd1c<#}E`7$U55ySGU7vrRk{#f-eX?$UB-<%@@5j9UKH+iBIUW=fHd~Y# z+k5zN6yhhDLDU1O(O}Xr`MnFAl?hr?w~_tPj1M}tS7zo@TAkV2vLjAi=mcm}J7oP! zPW+X$$i0}WJu0gBSh}fBz?vJ!Dw)t{73ErT-Ng8!RqZ>p*gfR}bVZ z73zv(D(CHwQ{e_Jb47^-fCcc^n+D}opsehyLb>R(X6HOt6dFdMVRKwut5Y@TbXA3n z|M=JO(YaGf`w8pt+GWIKRy4?agD+t7!+-3&L|{&qY6mq|%tGSaDdsa$0O7!C`f+yv zG$)1>Idf>N{!=&KAlvS)yN{aIWjL>QB`*6q%%R_rd1UCOS}D$5VWt;ZWgFM1>L=H_ z(CX;sn-kb8`-DMr7_XUq2!z?s$zH)1cpDz^Y_uP@hE1=^^dGGBxjODn;YX!cJuF z_-n{HF=23LB3xBDp(^~0Pv%2DH*5#9SU$rcc$7`Yc z2LHPu`g;x*=Tn=w?aHL?xzE5D?@d(^2|PvNxl|`AX+FbRCoaZ2N^HkQ)dhtOHz~$8 z{NJgd2MeUd?1XPGMbRq9Cm{~|$wiBAqR{MXcjTFtL~tPZ&fI`&&OBRZ`v z$t5aq3$86Iunhz*=`#}soC5@Xi!$um^o1^mD0QKHd9jc%WkD3ft#D=2Yb@ccGbU?0 zoXUr`Pp~&UX4v3d3dHe=3HJ7qZ}3{0ysJVi&KC#M<)sx7_nJXkjpkPVk*8Fl>+tNx zWz=Vt;G_6HSHp%f_!HcswiRJ68^pVFBVPA-jj89TMEd8eyRQh@mjco!U{q#Et+~}` zA7>GHzUJIk)(t~)W(oWsJbdtNV;Sqzx3dRnZc%!7g%=Zpqm*(-N+5p(qIR|zcB)N8L6wviIc$&KoRL>2W;&wY-o4C|A={he@;5A7Q93V^_(|rRgpx>kawb5w#`|0)=>;4LmXFQdM z6)kwV-_L-lCbuBmQY-ECM(>q;w@pIcnC#>bDmiwy*numr7_Dq2Qh2tyU|Rh}Tccf#h8tf6B2f4Te+PWFPsm4}b9>lg!des7iD*Q6e;E(`7#jfR38bvu2@ z%AFKC5qgyNyz;T-`*bM^Q0GRqTIQ~T@YC!O^obi@YgEY5j6%cd#&LUW;Z+@&G2@_3 z$dSdexnjcP%Su>XT7QNXMrJ(mkFE8p{!``&@DQKoEJ$qL$s~MiBH^^tw}waQ7Q}|J z*7BftZx%zE8FZ|nz0B@VJS_H1s-ceHT1Izjfe%cU|Th{J@8NPPa?UoJl zj9@Pk)qtSnyamrtyS%dR%W?2Ai#+bN_ByT=E+Ru$qdH&W%9lfYE)VA@ z-M6=uZ&ar(I!~;=W+{Nd^(xi@?5=oi(%T z__Ui1wt(#r$@4$9kfFg^2t|+`OGbsxA=xGBxQ8i0dA0FetL!g(`Ri*Fi$yZ{&6b5` z6k52Kmg2aorBevhnUR$FcwZIwIIS&-Q4zQP#N)#yDvjn zHtM~X^xn^SM(3Wj&$!ne%2Y)AeuQd6g$Vgq1##5-4Io9H+;N}BtXQ`%L8S|Aa*~v# zA|Qe`CS&j}@Oo!_BnJ_gwqLGgbUd>Ngl!vD*MW*u#hQ7kWDR={>(vWs>lwj@MXLWP zxhiD%S0YZu$E#gs;T4QNm>-^*ZdZFim&c zQk6+m2IHD_H?M37bBbA>=v*0+KwDN9hEuu>ta8iTbCql``5aoA7T;=?VLsbQ3l_fK znx$1xebd5G@?(7XCHe=$Rh7HNwBS-4Poz$ zz_F%_W$Yfgh_VH}8>NA>0`PyVaPE%8qem>eVBayJ)utTl^BV zBNhu4*WCZ8Mh#C)#N6Vraj5>dU-UPCpbtyH{_52sYD{kxvy;(EmNImdJD_`V){_P- zOc2@qgM*x?aQ)b@-=Ob)4d|W%{_t^`^Q}g;Qsp7C!Xf%ugE?VIvGnZLdm5$dYM^UY zs+ZIw4CVWj+tuRAbQLnFqw38ezW=PB3d(IJQyy&ln3Z zmNyq3sw(tO;83-)x~@C1uTq@B9QlNp4qU(N2s;}0zM+(_m<{tE!3v5=0|pp$HA~4&$395OR=lc0iLgt z$F)H{#D8z}{`paXNnrkd>5F;Q%4O;j3uPMAf91jL5CcV_tCRYxRAh^=hPNUQ%8s{ZSn3uurDAnPP-&}BybJqi44&=14.17.0'} + + '@eslint-community/eslint-utils@4.7.0': + resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.20.0': + resolution: {integrity: sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/config-helpers@0.2.2': + resolution: {integrity: sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.13.0': + resolution: {integrity: sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.3.1': + resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.26.0': + resolution: {integrity: sha512-I9XlJawFdSMvWjDt6wksMCrgns5ggLNfFwFvnShsleWruvXM514Qxk8V246efTw+eo9JABvVz+u3q2RiAowKxQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.6': + resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.2.8': + resolution: {integrity: sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.6': + resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.3.1': + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} + engines: {node: '>=18.18'} + + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@istanbuljs/schema@0.1.3': + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + + '@jridgewell/gen-mapping@0.3.8': + resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/source-map@0.3.6': + resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@modelcontextprotocol/sdk@1.11.2': + resolution: {integrity: sha512-H9vwztj5OAqHg9GockCQC06k1natgcxWQSRpQcPJf6i5+MWBzfKkRtxGbjQf0X2ihii0ffLZCRGbYV2f2bjNCQ==} + engines: {node: '>=18'} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@types/eslint-scope@3.7.7': + resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} + + '@types/eslint@9.6.1': + resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} + + '@types/estree@1.0.7': + resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} + + '@types/istanbul-lib-coverage@2.0.6': + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/mocha@10.0.10': + resolution: {integrity: sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==} + + '@types/node@20.17.46': + resolution: {integrity: sha512-0PQHLhZPWOxGW4auogW0eOQAuNIlCYvibIpG67ja0TOJ6/sehu+1en7sfceUn+QQtx4Rk3GxbLNwPh0Cav7TWw==} + + '@types/vscode@1.100.0': + resolution: {integrity: sha512-4uNyvzHoraXEeCamR3+fzcBlh7Afs4Ifjs4epINyUX/jvdk0uzLnwiDY35UKDKnkCHP5Nu3dljl2H8lR6s+rQw==} + + '@typescript-eslint/eslint-plugin@8.32.1': + resolution: {integrity: sha512-6u6Plg9nP/J1GRpe/vcjjabo6Uc5YQPAMxsgQyGC/I0RuukiG1wIe3+Vtg3IrSCVJDmqK3j8adrtzXSENRtFgg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/parser@8.32.1': + resolution: {integrity: sha512-LKMrmwCPoLhM45Z00O1ulb6jwyVr2kr3XJp+G+tSEZcbauNnScewcQwtJqXDhXeYPDEjZ8C1SjXm015CirEmGg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/scope-manager@8.32.1': + resolution: {integrity: sha512-7IsIaIDeZn7kffk7qXC3o6Z4UblZJKV3UBpkvRNpr5NSyLji7tvTcvmnMNYuYLyh26mN8W723xpo3i4MlD33vA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/type-utils@8.32.1': + resolution: {integrity: sha512-mv9YpQGA8iIsl5KyUPi+FGLm7+bA4fgXaeRcFKRDRwDMu4iwrSHeDPipwueNXhdIIZltwCJv+NkxftECbIZWfA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/types@8.32.1': + resolution: {integrity: sha512-YmybwXUJcgGqgAp6bEsgpPXEg6dcCyPyCSr0CAAueacR/CCBi25G3V8gGQ2kRzQRBNol7VQknxMs9HvVa9Rvfg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.32.1': + resolution: {integrity: sha512-Y3AP9EIfYwBb4kWGb+simvPaqQoT5oJuzzj9m0i6FCY6SPvlomY2Ei4UEMm7+FXtlNJbor80ximyslzaQF6xhg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/utils@8.32.1': + resolution: {integrity: sha512-DsSFNIgLSrc89gpq1LJB7Hm1YpuhK086DRDJSNrewcGvYloWW1vZLHBTIvarKZDcAORIy/uWNx8Gad+4oMpkSA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/visitor-keys@8.32.1': + resolution: {integrity: sha512-ar0tjQfObzhSaW3C3QNmTc5ofj0hDoNQ5XWrCy6zDyabdr0TWhCkClp+rywGNj/odAFBVzzJrK4tEq5M4Hmu4w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@vscode/test-cli@0.0.10': + resolution: {integrity: sha512-B0mMH4ia+MOOtwNiLi79XhA+MLmUItIC8FckEuKrVAVriIuSWjt7vv4+bF8qVFiNFe4QRfzPaIZk39FZGWEwHA==} + engines: {node: '>=18'} + hasBin: true + + '@vscode/test-electron@2.5.2': + resolution: {integrity: sha512-8ukpxv4wYe0iWMRQU18jhzJOHkeGKbnw7xWRX3Zw1WJA4cEKbHcmmLPdPrPtL6rhDcrlCZN+xKRpv09n4gRHYg==} + engines: {node: '>=16'} + + '@webassemblyjs/ast@1.14.1': + resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} + + '@webassemblyjs/floating-point-hex-parser@1.13.2': + resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==} + + '@webassemblyjs/helper-api-error@1.13.2': + resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==} + + '@webassemblyjs/helper-buffer@1.14.1': + resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==} + + '@webassemblyjs/helper-numbers@1.13.2': + resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==} + + '@webassemblyjs/helper-wasm-bytecode@1.13.2': + resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==} + + '@webassemblyjs/helper-wasm-section@1.14.1': + resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==} + + '@webassemblyjs/ieee754@1.13.2': + resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==} + + '@webassemblyjs/leb128@1.13.2': + resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==} + + '@webassemblyjs/utf8@1.13.2': + resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==} + + '@webassemblyjs/wasm-edit@1.14.1': + resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==} + + '@webassemblyjs/wasm-gen@1.14.1': + resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==} + + '@webassemblyjs/wasm-opt@1.14.1': + resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==} + + '@webassemblyjs/wasm-parser@1.14.1': + resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==} + + '@webassemblyjs/wast-printer@1.14.1': + resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} + + '@webpack-cli/configtest@3.0.1': + resolution: {integrity: sha512-u8d0pJ5YFgneF/GuvEiDA61Tf1VDomHHYMjv/wc9XzYj7nopltpG96nXN5dJRstxZhcNpV1g+nT6CydO7pHbjA==} + engines: {node: '>=18.12.0'} + peerDependencies: + webpack: ^5.82.0 + webpack-cli: 6.x.x + + '@webpack-cli/info@3.0.1': + resolution: {integrity: sha512-coEmDzc2u/ffMvuW9aCjoRzNSPDl/XLuhPdlFRpT9tZHmJ/039az33CE7uH+8s0uL1j5ZNtfdv0HkfaKRBGJsQ==} + engines: {node: '>=18.12.0'} + peerDependencies: + webpack: ^5.82.0 + webpack-cli: 6.x.x + + '@webpack-cli/serve@3.0.1': + resolution: {integrity: sha512-sbgw03xQaCLiT6gcY/6u3qBDn01CWw/nbaXl3gTdTFuJJ75Gffv3E3DBpgvY2fkkrdS1fpjaXNOmJlnbtKauKg==} + engines: {node: '>=18.12.0'} + peerDependencies: + webpack: ^5.82.0 + webpack-cli: 6.x.x + webpack-dev-server: '*' + peerDependenciesMeta: + webpack-dev-server: + optional: true + + '@xtuc/ieee754@1.2.0': + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} + + '@xtuc/long@4.2.2': + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + + accepts@2.0.0: + resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} + engines: {node: '>= 0.6'} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.14.1: + resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} + engines: {node: '>=0.4.0'} + hasBin: true + + agent-base@7.1.3: + resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} + engines: {node: '>= 14'} + + ajv-formats@2.1.1: + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-keywords@5.1.0: + resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} + peerDependencies: + ajv: ^8.8.2 + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + body-parser@2.2.0: + resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==} + engines: {node: '>=18'} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browser-stdout@1.3.1: + resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} + + browserslist@4.24.5: + resolution: {integrity: sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + c8@9.1.0: + resolution: {integrity: sha512-mBWcT5iqNir1zIkzSPyI3NCR9EZCVI3WUD+AVO17MVWTSFNyUueXE82qTeampNtTr+ilN/5Ua3j24LgbCKjDVg==} + engines: {node: '>=14.14.0'} + hasBin: true + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + caniuse-lite@1.0.30001718: + resolution: {integrity: sha512-AflseV1ahcSunK53NfEs9gFWgOEmzr0f+kaMFA4xiLZlr9Hzt7HxcSpIFcnNCUkz6R6dWKa54rUz3HUmI3nVcw==} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.4.1: + resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + chrome-trace-event@1.0.4: + resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} + engines: {node: '>=6.0'} + + cli-cursor@5.0.0: + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + clone-deep@4.0.1: + resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} + engines: {node: '>=6'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + content-disposition@1.0.0: + resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==} + engines: {node: '>= 0.6'} + + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cookie-signature@1.2.2: + resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} + engines: {node: '>=6.6.0'} + + cookie@0.7.2: + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} + engines: {node: '>= 0.6'} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + cors@2.8.5: + resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} + engines: {node: '>= 0.10'} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + debug@4.4.1: + resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decamelize@4.0.0: + resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} + engines: {node: '>=10'} + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + diff@5.2.0: + resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} + engines: {node: '>=0.3.1'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + + electron-to-chromium@1.5.152: + resolution: {integrity: sha512-xBOfg/EBaIlVsHipHl2VdTPJRSvErNUaqW8ejTq5OlOlIYx1wOllCHsAvAIrr55jD1IYEfdR86miUEt8H5IeJg==} + + emoji-regex@10.4.0: + resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + + enhanced-resolve@5.18.1: + resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} + engines: {node: '>=10.13.0'} + + envinfo@7.14.0: + resolution: {integrity: sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==} + engines: {node: '>=4'} + hasBin: true + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-module-lexer@1.7.0: + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + + eslint-scope@8.3.0: + resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.2.0: + resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.26.0: + resolution: {integrity: sha512-Hx0MOjPh6uK9oq9nVsATZKE/Wlbai7KFjfCuw9UHaguDW3x+HF0O5nIi3ud39TWgrTjTO5nHxmL3R1eANinWHQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.3.0: + resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + + eventsource-parser@3.0.1: + resolution: {integrity: sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA==} + engines: {node: '>=18.0.0'} + + eventsource@3.0.7: + resolution: {integrity: sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==} + engines: {node: '>=18.0.0'} + + express-rate-limit@7.5.0: + resolution: {integrity: sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==} + engines: {node: '>= 16'} + peerDependencies: + express: ^4.11 || 5 || ^5.0.0-beta.1 + + express@5.1.0: + resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==} + engines: {node: '>= 18'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fast-uri@3.0.6: + resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} + + fastest-levenshtein@1.0.16: + resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} + engines: {node: '>= 4.9.1'} + + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + finalhandler@2.1.0: + resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==} + engines: {node: '>= 0.8'} + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + + flatted@3.3.3: + resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + + foreground-child@3.3.1: + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} + engines: {node: '>=14'} + + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + + fresh@2.0.0: + resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} + engines: {node: '>= 0.8'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-east-asian-width@1.3.0: + resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} + engines: {node: '>=18'} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + glob@8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} + deprecated: Glob versions prior to v9 are no longer supported + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + + http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + ignore@7.0.4: + resolution: {integrity: sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==} + engines: {node: '>= 4'} + + immediate@3.0.6: + resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + import-local@3.2.0: + resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} + engines: {node: '>=8'} + hasBin: true + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + inflight@1.0.6: + resolution: {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. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + interpret@3.1.1: + resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==} + engines: {node: '>=10.13.0'} + + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-interactive@2.0.0: + resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} + engines: {node: '>=12'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + + is-plain-object@2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} + + is-promise@4.0.0: + resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + is-unicode-supported@1.3.0: + resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} + engines: {node: '>=12'} + + is-unicode-supported@2.1.0: + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} + engines: {node: '>=18'} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isobject@3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} + + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + + istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + engines: {node: '>=8'} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + jest-worker@27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + jszip@3.10.1: + resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lie@3.3.0: + resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} + + loader-runner@4.3.0: + resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} + engines: {node: '>=6.11.5'} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + log-symbols@6.0.0: + resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} + engines: {node: '>=18'} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + media-typer@1.1.0: + resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} + engines: {node: '>= 0.8'} + + merge-descriptors@2.0.0: + resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} + engines: {node: '>=18'} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-db@1.54.0: + resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime-types@3.0.1: + resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==} + engines: {node: '>= 0.6'} + + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + mocha@10.8.2: + resolution: {integrity: sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==} + engines: {node: '>= 14.0.0'} + hasBin: true + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + negotiator@1.0.0: + resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} + engines: {node: '>= 0.6'} + + neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + ora@8.2.0: + resolution: {integrity: sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==} + engines: {node: '>=18'} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + pako@1.0.11: + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + path-to-regexp@8.2.0: + resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==} + engines: {node: '>=16'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pkce-challenge@5.0.0: + resolution: {integrity: sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==} + engines: {node: '>=16.20.0'} + + pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + qs@6.14.0: + resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} + engines: {node: '>=0.6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + raw-body@3.0.0: + resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==} + engines: {node: '>= 0.8'} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + rechoir@0.8.0: + resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==} + engines: {node: '>= 10.13.0'} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + resolve-cwd@3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve@1.22.10: + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + engines: {node: '>= 0.4'} + hasBin: true + + restore-cursor@5.1.0: + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} + engines: {node: '>=18'} + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + router@2.2.0: + resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} + engines: {node: '>= 18'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + schema-utils@4.3.2: + resolution: {integrity: sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==} + engines: {node: '>= 10.13.0'} + + semver@7.7.2: + resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} + engines: {node: '>=10'} + hasBin: true + + send@1.2.0: + resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==} + engines: {node: '>= 18'} + + serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + + serve-static@2.2.0: + resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==} + engines: {node: '>= 18'} + + setimmediate@1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + shallow-clone@3.0.1: + resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} + engines: {node: '>=8'} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + source-map@0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} + + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + + stdin-discarder@0.2.2: + resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} + engines: {node: '>=18'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + supports-color@9.4.0: + resolution: {integrity: sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==} + engines: {node: '>=12'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + + terser-webpack-plugin@5.3.14: + resolution: {integrity: sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + + terser@5.39.1: + resolution: {integrity: sha512-Mm6+uad0ZuDtcV8/4uOZQDQ8RuiC5Pu+iZRedJtF7yA/27sPL7d++In/AJKpWZlU3SYMPPkVfwetn6sgZ66pUA==} + engines: {node: '>=10'} + hasBin: true + + test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + ts-api-utils@2.1.0: + resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + + ts-loader@9.5.2: + resolution: {integrity: sha512-Qo4piXvOTWcMGIgRiuFa6nHNm+54HbYaZCKqc9eeZCLRy3XqafQgwX2F7mofrbJG3g7EEb+lkiR+z2Lic2s3Zw==} + engines: {node: '>=12.0.0'} + peerDependencies: + typescript: '*' + webpack: ^5.0.0 + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-is@2.0.1: + resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} + engines: {node: '>= 0.6'} + + typescript@5.8.3: + resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + update-browserslist-db@1.1.3: + resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + v8-to-istanbul@9.3.0: + resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} + engines: {node: '>=10.12.0'} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + watchpack@2.4.2: + resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==} + engines: {node: '>=10.13.0'} + + webpack-cli@6.0.1: + resolution: {integrity: sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==} + engines: {node: '>=18.12.0'} + hasBin: true + peerDependencies: + webpack: ^5.82.0 + webpack-bundle-analyzer: '*' + webpack-dev-server: '*' + peerDependenciesMeta: + webpack-bundle-analyzer: + optional: true + webpack-dev-server: + optional: true + + webpack-merge@6.0.1: + resolution: {integrity: sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==} + engines: {node: '>=18.0.0'} + + webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + + webpack@5.99.8: + resolution: {integrity: sha512-lQ3CPiSTpfOnrEGeXDwoq5hIGzSjmwD72GdfVzF7CQAI7t47rJG9eDWvcEkEn3CUQymAElVvDg3YNTlCYj+qUQ==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + wildcard@2.0.1: + resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==} + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + workerpool@6.5.1: + resolution: {integrity: sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + xlsx@https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz: + resolution: {tarball: https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz} + version: 0.20.3 + engines: {node: '>=0.8'} + hasBin: true + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs-unparser@2.0.0: + resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} + engines: {node: '>=10'} + + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + zod-to-json-schema@3.24.5: + resolution: {integrity: sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==} + peerDependencies: + zod: ^3.24.1 + + zod@3.24.4: + resolution: {integrity: sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==} + +snapshots: + + '@bcoe/v8-coverage@0.2.3': {} + + '@discoveryjs/json-ext@0.6.3': {} + + '@eslint-community/eslint-utils@4.7.0(eslint@9.26.0)': + dependencies: + eslint: 9.26.0 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.1': {} + + '@eslint/config-array@0.20.0': + dependencies: + '@eslint/object-schema': 2.1.6 + debug: 4.4.1(supports-color@8.1.1) + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.2.2': {} + + '@eslint/core@0.13.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.3.1': + dependencies: + ajv: 6.12.6 + debug: 4.4.1(supports-color@8.1.1) + espree: 10.3.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.26.0': {} + + '@eslint/object-schema@2.1.6': {} + + '@eslint/plugin-kit@0.2.8': + dependencies: + '@eslint/core': 0.13.0 + levn: 0.4.1 + + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.6': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.3.1 + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.3.1': {} + + '@humanwhocodes/retry@0.4.3': {} + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@istanbuljs/schema@0.1.3': {} + + '@jridgewell/gen-mapping@0.3.8': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/source-map@0.3.6': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@modelcontextprotocol/sdk@1.11.2': + dependencies: + content-type: 1.0.5 + cors: 2.8.5 + cross-spawn: 7.0.6 + eventsource: 3.0.7 + express: 5.1.0 + express-rate-limit: 7.5.0(express@5.1.0) + pkce-challenge: 5.0.0 + raw-body: 3.0.0 + zod: 3.24.4 + zod-to-json-schema: 3.24.5(zod@3.24.4) + transitivePeerDependencies: + - supports-color + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.19.1 + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@types/eslint-scope@3.7.7': + dependencies: + '@types/eslint': 9.6.1 + '@types/estree': 1.0.7 + + '@types/eslint@9.6.1': + dependencies: + '@types/estree': 1.0.7 + '@types/json-schema': 7.0.15 + + '@types/estree@1.0.7': {} + + '@types/istanbul-lib-coverage@2.0.6': {} + + '@types/json-schema@7.0.15': {} + + '@types/mocha@10.0.10': {} + + '@types/node@20.17.46': + dependencies: + undici-types: 6.19.8 + + '@types/vscode@1.100.0': {} + + '@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.26.0)(typescript@5.8.3))(eslint@9.26.0)(typescript@5.8.3)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.32.1(eslint@9.26.0)(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.32.1 + '@typescript-eslint/type-utils': 8.32.1(eslint@9.26.0)(typescript@5.8.3) + '@typescript-eslint/utils': 8.32.1(eslint@9.26.0)(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.32.1 + eslint: 9.26.0 + graphemer: 1.4.0 + ignore: 7.0.4 + natural-compare: 1.4.0 + ts-api-utils: 2.1.0(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.32.1(eslint@9.26.0)(typescript@5.8.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.32.1 + '@typescript-eslint/types': 8.32.1 + '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.32.1 + debug: 4.4.1(supports-color@8.1.1) + eslint: 9.26.0 + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.32.1': + dependencies: + '@typescript-eslint/types': 8.32.1 + '@typescript-eslint/visitor-keys': 8.32.1 + + '@typescript-eslint/type-utils@8.32.1(eslint@9.26.0)(typescript@5.8.3)': + dependencies: + '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) + '@typescript-eslint/utils': 8.32.1(eslint@9.26.0)(typescript@5.8.3) + debug: 4.4.1(supports-color@8.1.1) + eslint: 9.26.0 + ts-api-utils: 2.1.0(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@8.32.1': {} + + '@typescript-eslint/typescript-estree@8.32.1(typescript@5.8.3)': + dependencies: + '@typescript-eslint/types': 8.32.1 + '@typescript-eslint/visitor-keys': 8.32.1 + debug: 4.4.1(supports-color@8.1.1) + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.2 + ts-api-utils: 2.1.0(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.32.1(eslint@9.26.0)(typescript@5.8.3)': + dependencies: + '@eslint-community/eslint-utils': 4.7.0(eslint@9.26.0) + '@typescript-eslint/scope-manager': 8.32.1 + '@typescript-eslint/types': 8.32.1 + '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) + eslint: 9.26.0 + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.32.1': + dependencies: + '@typescript-eslint/types': 8.32.1 + eslint-visitor-keys: 4.2.0 + + '@vscode/test-cli@0.0.10': + dependencies: + '@types/mocha': 10.0.10 + c8: 9.1.0 + chokidar: 3.6.0 + enhanced-resolve: 5.18.1 + glob: 10.4.5 + minimatch: 9.0.5 + mocha: 10.8.2 + supports-color: 9.4.0 + yargs: 17.7.2 + + '@vscode/test-electron@2.5.2': + dependencies: + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + jszip: 3.10.1 + ora: 8.2.0 + semver: 7.7.2 + transitivePeerDependencies: + - supports-color + + '@webassemblyjs/ast@1.14.1': + dependencies: + '@webassemblyjs/helper-numbers': 1.13.2 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + + '@webassemblyjs/floating-point-hex-parser@1.13.2': {} + + '@webassemblyjs/helper-api-error@1.13.2': {} + + '@webassemblyjs/helper-buffer@1.14.1': {} + + '@webassemblyjs/helper-numbers@1.13.2': + dependencies: + '@webassemblyjs/floating-point-hex-parser': 1.13.2 + '@webassemblyjs/helper-api-error': 1.13.2 + '@xtuc/long': 4.2.2 + + '@webassemblyjs/helper-wasm-bytecode@1.13.2': {} + + '@webassemblyjs/helper-wasm-section@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/wasm-gen': 1.14.1 + + '@webassemblyjs/ieee754@1.13.2': + dependencies: + '@xtuc/ieee754': 1.2.0 + + '@webassemblyjs/leb128@1.13.2': + dependencies: + '@xtuc/long': 4.2.2 + + '@webassemblyjs/utf8@1.13.2': {} + + '@webassemblyjs/wasm-edit@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/helper-wasm-section': 1.14.1 + '@webassemblyjs/wasm-gen': 1.14.1 + '@webassemblyjs/wasm-opt': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + '@webassemblyjs/wast-printer': 1.14.1 + + '@webassemblyjs/wasm-gen@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/ieee754': 1.13.2 + '@webassemblyjs/leb128': 1.13.2 + '@webassemblyjs/utf8': 1.13.2 + + '@webassemblyjs/wasm-opt@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/wasm-gen': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + + '@webassemblyjs/wasm-parser@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-api-error': 1.13.2 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/ieee754': 1.13.2 + '@webassemblyjs/leb128': 1.13.2 + '@webassemblyjs/utf8': 1.13.2 + + '@webassemblyjs/wast-printer@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@xtuc/long': 4.2.2 + + '@webpack-cli/configtest@3.0.1(webpack-cli@6.0.1)(webpack@5.99.8)': + dependencies: + webpack: 5.99.8(webpack-cli@6.0.1) + webpack-cli: 6.0.1(webpack@5.99.8) + + '@webpack-cli/info@3.0.1(webpack-cli@6.0.1)(webpack@5.99.8)': + dependencies: + webpack: 5.99.8(webpack-cli@6.0.1) + webpack-cli: 6.0.1(webpack@5.99.8) + + '@webpack-cli/serve@3.0.1(webpack-cli@6.0.1)(webpack@5.99.8)': + dependencies: + webpack: 5.99.8(webpack-cli@6.0.1) + webpack-cli: 6.0.1(webpack@5.99.8) + + '@xtuc/ieee754@1.2.0': {} + + '@xtuc/long@4.2.2': {} + + accepts@2.0.0: + dependencies: + mime-types: 3.0.1 + negotiator: 1.0.0 + + acorn-jsx@5.3.2(acorn@8.14.1): + dependencies: + acorn: 8.14.1 + + acorn@8.14.1: {} + + agent-base@7.1.3: {} + + ajv-formats@2.1.1(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 + + ajv-keywords@5.1.0(ajv@8.17.1): + dependencies: + ajv: 8.17.1 + fast-deep-equal: 3.1.3 + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.0.6 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + ansi-colors@4.1.3: {} + + ansi-regex@5.0.1: {} + + ansi-regex@6.1.0: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.1: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + argparse@2.0.1: {} + + balanced-match@1.0.2: {} + + binary-extensions@2.3.0: {} + + body-parser@2.2.0: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 4.4.1(supports-color@8.1.1) + http-errors: 2.0.0 + iconv-lite: 0.6.3 + on-finished: 2.4.1 + qs: 6.14.0 + raw-body: 3.0.0 + type-is: 2.0.1 + transitivePeerDependencies: + - supports-color + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browser-stdout@1.3.1: {} + + browserslist@4.24.5: + dependencies: + caniuse-lite: 1.0.30001718 + electron-to-chromium: 1.5.152 + node-releases: 2.0.19 + update-browserslist-db: 1.1.3(browserslist@4.24.5) + + buffer-from@1.1.2: {} + + bytes@3.1.2: {} + + c8@9.1.0: + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@istanbuljs/schema': 0.1.3 + find-up: 5.0.0 + foreground-child: 3.3.1 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-report: 3.0.1 + istanbul-reports: 3.1.7 + test-exclude: 6.0.0 + v8-to-istanbul: 9.3.0 + yargs: 17.7.2 + yargs-parser: 21.1.1 + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + + callsites@3.1.0: {} + + camelcase@6.3.0: {} + + caniuse-lite@1.0.30001718: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.4.1: {} + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + chrome-trace-event@1.0.4: {} + + cli-cursor@5.0.0: + dependencies: + restore-cursor: 5.1.0 + + cli-spinners@2.9.2: {} + + cliui@7.0.4: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + clone-deep@4.0.1: + dependencies: + is-plain-object: 2.0.4 + kind-of: 6.0.3 + shallow-clone: 3.0.1 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + colorette@2.0.20: {} + + commander@12.1.0: {} + + commander@2.20.3: {} + + concat-map@0.0.1: {} + + content-disposition@1.0.0: + dependencies: + safe-buffer: 5.2.1 + + content-type@1.0.5: {} + + convert-source-map@2.0.0: {} + + cookie-signature@1.2.2: {} + + cookie@0.7.2: {} + + core-util-is@1.0.3: {} + + cors@2.8.5: + dependencies: + object-assign: 4.1.1 + vary: 1.1.2 + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + debug@4.4.1(supports-color@8.1.1): + dependencies: + ms: 2.1.3 + optionalDependencies: + supports-color: 8.1.1 + + decamelize@4.0.0: {} + + deep-is@0.1.4: {} + + depd@2.0.0: {} + + diff@5.2.0: {} + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + eastasianwidth@0.2.0: {} + + ee-first@1.1.1: {} + + electron-to-chromium@1.5.152: {} + + emoji-regex@10.4.0: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + encodeurl@2.0.0: {} + + enhanced-resolve@5.18.1: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + + envinfo@7.14.0: {} + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-module-lexer@1.7.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + escalade@3.2.0: {} + + escape-html@1.0.3: {} + + escape-string-regexp@4.0.0: {} + + eslint-scope@5.1.1: + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + + eslint-scope@8.3.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.2.0: {} + + eslint@9.26.0: + dependencies: + '@eslint-community/eslint-utils': 4.7.0(eslint@9.26.0) + '@eslint-community/regexpp': 4.12.1 + '@eslint/config-array': 0.20.0 + '@eslint/config-helpers': 0.2.2 + '@eslint/core': 0.13.0 + '@eslint/eslintrc': 3.3.1 + '@eslint/js': 9.26.0 + '@eslint/plugin-kit': 0.2.8 + '@humanfs/node': 0.16.6 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@modelcontextprotocol/sdk': 1.11.2 + '@types/estree': 1.0.7 + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.1(supports-color@8.1.1) + escape-string-regexp: 4.0.0 + eslint-scope: 8.3.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + zod: 3.24.4 + transitivePeerDependencies: + - supports-color + + espree@10.3.0: + dependencies: + acorn: 8.14.1 + acorn-jsx: 5.3.2(acorn@8.14.1) + eslint-visitor-keys: 4.2.0 + + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@4.3.0: {} + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + etag@1.8.1: {} + + events@3.3.0: {} + + eventsource-parser@3.0.1: {} + + eventsource@3.0.7: + dependencies: + eventsource-parser: 3.0.1 + + express-rate-limit@7.5.0(express@5.1.0): + dependencies: + express: 5.1.0 + + express@5.1.0: + dependencies: + accepts: 2.0.0 + body-parser: 2.2.0 + content-disposition: 1.0.0 + content-type: 1.0.5 + cookie: 0.7.2 + cookie-signature: 1.2.2 + debug: 4.4.1(supports-color@8.1.1) + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 2.1.0 + fresh: 2.0.0 + http-errors: 2.0.0 + merge-descriptors: 2.0.0 + mime-types: 3.0.1 + on-finished: 2.4.1 + once: 1.4.0 + parseurl: 1.3.3 + proxy-addr: 2.0.7 + qs: 6.14.0 + range-parser: 1.2.1 + router: 2.2.0 + send: 1.2.0 + serve-static: 2.2.0 + statuses: 2.0.1 + type-is: 2.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fast-uri@3.0.6: {} + + fastest-levenshtein@1.0.16: {} + + fastq@1.19.1: + dependencies: + reusify: 1.1.0 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + finalhandler@2.1.0: + dependencies: + debug: 4.4.1(supports-color@8.1.1) + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + + find-up@4.1.0: + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.3.3 + keyv: 4.5.4 + + flat@5.0.2: {} + + flatted@3.3.3: {} + + foreground-child@3.3.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + forwarded@0.2.0: {} + + fresh@2.0.0: {} + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + get-caller-file@2.0.5: {} + + get-east-asian-width@1.3.0: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob-to-regexp@0.4.1: {} + + glob@10.4.5: + dependencies: + foreground-child: 3.3.1 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + glob@8.1.0: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 5.1.6 + once: 1.4.0 + + globals@14.0.0: {} + + gopd@1.2.0: {} + + graceful-fs@4.2.11: {} + + graphemer@1.4.0: {} + + has-flag@4.0.0: {} + + has-symbols@1.1.0: {} + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + he@1.2.0: {} + + html-escaper@2.0.2: {} + + http-errors@2.0.0: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.3 + debug: 4.4.1(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + https-proxy-agent@7.0.6: + dependencies: + agent-base: 7.1.3 + debug: 4.4.1(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + + ignore@5.3.2: {} + + ignore@7.0.4: {} + + immediate@3.0.6: {} + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + import-local@3.2.0: + dependencies: + pkg-dir: 4.2.0 + resolve-cwd: 3.0.0 + + imurmurhash@0.1.4: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + interpret@3.1.1: {} + + ipaddr.js@1.9.1: {} + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-interactive@2.0.0: {} + + is-number@7.0.0: {} + + is-plain-obj@2.1.0: {} + + is-plain-object@2.0.4: + dependencies: + isobject: 3.0.1 + + is-promise@4.0.0: {} + + is-unicode-supported@0.1.0: {} + + is-unicode-supported@1.3.0: {} + + is-unicode-supported@2.1.0: {} + + isarray@1.0.0: {} + + isexe@2.0.0: {} + + isobject@3.0.1: {} + + istanbul-lib-coverage@3.2.2: {} + + istanbul-lib-report@3.0.1: + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + + istanbul-reports@3.1.7: + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jest-worker@27.5.1: + dependencies: + '@types/node': 20.17.46 + merge-stream: 2.0.0 + supports-color: 8.1.1 + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + json-buffer@3.0.1: {} + + json-parse-even-better-errors@2.3.1: {} + + json-schema-traverse@0.4.1: {} + + json-schema-traverse@1.0.0: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + jszip@3.10.1: + dependencies: + lie: 3.3.0 + pako: 1.0.11 + readable-stream: 2.3.8 + setimmediate: 1.0.5 + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + kind-of@6.0.3: {} + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lie@3.3.0: + dependencies: + immediate: 3.0.6 + + loader-runner@4.3.0: {} + + locate-path@5.0.0: + dependencies: + p-locate: 4.1.0 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.merge@4.6.2: {} + + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + + log-symbols@6.0.0: + dependencies: + chalk: 5.4.1 + is-unicode-supported: 1.3.0 + + lru-cache@10.4.3: {} + + make-dir@4.0.0: + dependencies: + semver: 7.7.2 + + math-intrinsics@1.1.0: {} + + media-typer@1.1.0: {} + + merge-descriptors@2.0.0: {} + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-db@1.54.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mime-types@3.0.1: + dependencies: + mime-db: 1.54.0 + + mimic-function@5.0.1: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.1 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + + minipass@7.1.2: {} + + mocha@10.8.2: + dependencies: + ansi-colors: 4.1.3 + browser-stdout: 1.3.1 + chokidar: 3.6.0 + debug: 4.4.1(supports-color@8.1.1) + diff: 5.2.0 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 8.1.0 + he: 1.2.0 + js-yaml: 4.1.0 + log-symbols: 4.1.0 + minimatch: 5.1.6 + ms: 2.1.3 + serialize-javascript: 6.0.2 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + workerpool: 6.5.1 + yargs: 16.2.0 + yargs-parser: 20.2.9 + yargs-unparser: 2.0.0 + + ms@2.1.3: {} + + natural-compare@1.4.0: {} + + negotiator@1.0.0: {} + + neo-async@2.6.2: {} + + node-releases@2.0.19: {} + + normalize-path@3.0.0: {} + + object-assign@4.1.1: {} + + object-inspect@1.13.4: {} + + on-finished@2.4.1: + dependencies: + ee-first: 1.1.1 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + onetime@7.0.0: + dependencies: + mimic-function: 5.0.1 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + ora@8.2.0: + dependencies: + chalk: 5.4.1 + cli-cursor: 5.0.0 + cli-spinners: 2.9.2 + is-interactive: 2.0.0 + is-unicode-supported: 2.1.0 + log-symbols: 6.0.0 + stdin-discarder: 0.2.2 + string-width: 7.2.0 + strip-ansi: 7.1.0 + + p-limit@2.3.0: + dependencies: + p-try: 2.2.0 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@4.1.0: + dependencies: + p-limit: 2.3.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + p-try@2.2.0: {} + + package-json-from-dist@1.0.1: {} + + pako@1.0.11: {} + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parseurl@1.3.3: {} + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + path-key@3.1.1: {} + + path-parse@1.0.7: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + path-to-regexp@8.2.0: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + pkce-challenge@5.0.0: {} + + pkg-dir@4.2.0: + dependencies: + find-up: 4.1.0 + + prelude-ls@1.2.1: {} + + process-nextick-args@2.0.1: {} + + proxy-addr@2.0.7: + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + + punycode@2.3.1: {} + + qs@6.14.0: + dependencies: + side-channel: 1.1.0 + + queue-microtask@1.2.3: {} + + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + + range-parser@1.2.1: {} + + raw-body@3.0.0: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.6.3 + unpipe: 1.0.0 + + readable-stream@2.3.8: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + rechoir@0.8.0: + dependencies: + resolve: 1.22.10 + + require-directory@2.1.1: {} + + require-from-string@2.0.2: {} + + resolve-cwd@3.0.0: + dependencies: + resolve-from: 5.0.0 + + resolve-from@4.0.0: {} + + resolve-from@5.0.0: {} + + resolve@1.22.10: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + restore-cursor@5.1.0: + dependencies: + onetime: 7.0.0 + signal-exit: 4.1.0 + + reusify@1.1.0: {} + + router@2.2.0: + dependencies: + debug: 4.4.1(supports-color@8.1.1) + depd: 2.0.0 + is-promise: 4.0.0 + parseurl: 1.3.3 + path-to-regexp: 8.2.0 + transitivePeerDependencies: + - supports-color + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + safe-buffer@5.1.2: {} + + safe-buffer@5.2.1: {} + + safer-buffer@2.1.2: {} + + schema-utils@4.3.2: + dependencies: + '@types/json-schema': 7.0.15 + ajv: 8.17.1 + ajv-formats: 2.1.1(ajv@8.17.1) + ajv-keywords: 5.1.0(ajv@8.17.1) + + semver@7.7.2: {} + + send@1.2.0: + dependencies: + debug: 4.4.1(supports-color@8.1.1) + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 2.0.0 + http-errors: 2.0.0 + mime-types: 3.0.1 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + + serialize-javascript@6.0.2: + dependencies: + randombytes: 2.1.0 + + serve-static@2.2.0: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 1.2.0 + transitivePeerDependencies: + - supports-color + + setimmediate@1.0.5: {} + + setprototypeof@1.2.0: {} + + shallow-clone@3.0.1: + dependencies: + kind-of: 6.0.3 + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + side-channel-list@1.0.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + + signal-exit@4.1.0: {} + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + source-map@0.7.4: {} + + statuses@2.0.1: {} + + stdin-discarder@0.2.2: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + string-width@7.2.0: + dependencies: + emoji-regex: 10.4.0 + get-east-asian-width: 1.3.0 + strip-ansi: 7.1.0 + + string_decoder@1.1.1: + dependencies: + safe-buffer: 5.1.2 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.1.0 + + strip-json-comments@3.1.1: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + supports-color@9.4.0: {} + + supports-preserve-symlinks-flag@1.0.0: {} + + tapable@2.2.1: {} + + terser-webpack-plugin@5.3.14(webpack@5.99.8): + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + jest-worker: 27.5.1 + schema-utils: 4.3.2 + serialize-javascript: 6.0.2 + terser: 5.39.1 + webpack: 5.99.8(webpack-cli@6.0.1) + + terser@5.39.1: + dependencies: + '@jridgewell/source-map': 0.3.6 + acorn: 8.14.1 + commander: 2.20.3 + source-map-support: 0.5.21 + + test-exclude@6.0.0: + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.2.3 + minimatch: 3.1.2 + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toidentifier@1.0.1: {} + + ts-api-utils@2.1.0(typescript@5.8.3): + dependencies: + typescript: 5.8.3 + + ts-loader@9.5.2(typescript@5.8.3)(webpack@5.99.8): + dependencies: + chalk: 4.1.2 + enhanced-resolve: 5.18.1 + micromatch: 4.0.8 + semver: 7.7.2 + source-map: 0.7.4 + typescript: 5.8.3 + webpack: 5.99.8(webpack-cli@6.0.1) + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-is@2.0.1: + dependencies: + content-type: 1.0.5 + media-typer: 1.1.0 + mime-types: 3.0.1 + + typescript@5.8.3: {} + + undici-types@6.19.8: {} + + unpipe@1.0.0: {} + + update-browserslist-db@1.1.3(browserslist@4.24.5): + dependencies: + browserslist: 4.24.5 + escalade: 3.2.0 + picocolors: 1.1.1 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + util-deprecate@1.0.2: {} + + v8-to-istanbul@9.3.0: + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + '@types/istanbul-lib-coverage': 2.0.6 + convert-source-map: 2.0.0 + + vary@1.1.2: {} + + watchpack@2.4.2: + dependencies: + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + + webpack-cli@6.0.1(webpack@5.99.8): + dependencies: + '@discoveryjs/json-ext': 0.6.3 + '@webpack-cli/configtest': 3.0.1(webpack-cli@6.0.1)(webpack@5.99.8) + '@webpack-cli/info': 3.0.1(webpack-cli@6.0.1)(webpack@5.99.8) + '@webpack-cli/serve': 3.0.1(webpack-cli@6.0.1)(webpack@5.99.8) + colorette: 2.0.20 + commander: 12.1.0 + cross-spawn: 7.0.6 + envinfo: 7.14.0 + fastest-levenshtein: 1.0.16 + import-local: 3.2.0 + interpret: 3.1.1 + rechoir: 0.8.0 + webpack: 5.99.8(webpack-cli@6.0.1) + webpack-merge: 6.0.1 + + webpack-merge@6.0.1: + dependencies: + clone-deep: 4.0.1 + flat: 5.0.2 + wildcard: 2.0.1 + + webpack-sources@3.2.3: {} + + webpack@5.99.8(webpack-cli@6.0.1): + dependencies: + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.7 + '@types/json-schema': 7.0.15 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/wasm-edit': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + acorn: 8.14.1 + browserslist: 4.24.5 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.18.1 + es-module-lexer: 1.7.0 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 4.3.2 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.14(webpack@5.99.8) + watchpack: 2.4.2 + webpack-sources: 3.2.3 + optionalDependencies: + webpack-cli: 6.0.1(webpack@5.99.8) + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + wildcard@2.0.1: {} + + word-wrap@1.2.5: {} + + workerpool@6.5.1: {} + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + + wrappy@1.0.2: {} + + xlsx@https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz: {} + + y18n@5.0.8: {} + + yargs-parser@20.2.9: {} + + yargs-parser@21.1.1: {} + + yargs-unparser@2.0.0: + dependencies: + camelcase: 6.3.0 + decamelize: 4.0.0 + flat: 5.0.2 + is-plain-obj: 2.1.0 + + yargs@16.2.0: + dependencies: + cliui: 7.0.4 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.9 + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yocto-queue@0.1.0: {} + + zod-to-json-schema@3.24.5(zod@3.24.4): + dependencies: + zod: 3.24.4 + + zod@3.24.4: {} diff --git a/src/excelDocument.ts b/src/excelDocument.ts new file mode 100644 index 0000000..0ade53d --- /dev/null +++ b/src/excelDocument.ts @@ -0,0 +1,6 @@ +import * as vscode from 'vscode'; + +export class ExcelDocument implements vscode.CustomDocument { + constructor(public readonly uri: vscode.Uri) {} + dispose() {} +} \ No newline at end of file diff --git a/src/excelEditorProvider.ts b/src/excelEditorProvider.ts new file mode 100644 index 0000000..a42400d --- /dev/null +++ b/src/excelEditorProvider.ts @@ -0,0 +1,299 @@ +import * as vscode from 'vscode'; +import * as XLSX from 'xlsx'; +import { ExcelDocument } from './excelDocument'; +import { getLoadingViewHtml, getErrorViewHtml, getExcelViewerHtml } from './webviewContent'; +import { parseRange, colLetterToNum, numToColLetter } from './excelUtils'; + +export class ExcelEditorProvider implements vscode.CustomReadonlyEditorProvider { + // cache workbooks in memory to avoid re-parsing + private workbookCache = new Map(); + private sheetCache = new Map(); + + public static register(context: vscode.ExtensionContext): vscode.Disposable { + return vscode.window.registerCustomEditorProvider( + 'excelViewer.spreadsheet', + new ExcelEditorProvider(context), + { webviewOptions: { retainContextWhenHidden: true } } // keep webview state when hidden + ); + } + + constructor(private readonly context: vscode.ExtensionContext) {} + + async openCustomDocument(uri: vscode.Uri): Promise { + console.log(`Opening document: ${uri.fsPath}`); + return new ExcelDocument(uri); + } + + async resolveCustomEditor(document: ExcelDocument, webviewPanel: vscode.WebviewPanel): Promise { + console.log(`Resolving editor for: ${document.uri.fsPath}`); + + webviewPanel.webview.options = { enableScripts: true }; + + this.setLoadingView(webviewPanel); + + // small timeout to ensure the loading view is rendered before heavy processing begins + await new Promise(resolve => setTimeout(resolve, 50)); + + try { + // process file in a non-blocking way + setImmediate(async () => { + try { + await this.processExcelFile(document, webviewPanel); + } catch (error) { + console.error('Error processing file:', error); + this.setErrorView(webviewPanel, error); + } + }); + } catch (error) { + console.error('Error setting up Excel viewer:', error); + this.setErrorView(webviewPanel, error); + } + } + + private setLoadingView(webviewPanel: vscode.WebviewPanel): void { + webviewPanel.webview.html = getLoadingViewHtml(); + } + + private setErrorView(webviewPanel: vscode.WebviewPanel, error: any): void { + webviewPanel.webview.html = getErrorViewHtml(error); + } + + private updateLoadingProgress(webviewPanel: vscode.WebviewPanel, message: string): void { + webviewPanel.webview.postMessage({ + type: 'loadingProgress', + message + }); + } + + private async processExcelFile(document: ExcelDocument, webviewPanel: vscode.WebviewPanel): Promise { + // check if we have a cached workbook for this file + let workbook: XLSX.WorkBook; + const cacheKey = document.uri.toString(); + + if (this.workbookCache.has(cacheKey)) { + console.log('Using cached workbook'); + workbook = this.workbookCache.get(cacheKey)!; + this.updateLoadingProgress(webviewPanel, 'Using cached workbook...'); + } else { + workbook = await this.loadWorkbook(document, webviewPanel); + } + + // setup the initial view with just the sheet selector + const sheetNames = workbook.SheetNames; + this.setupWebviewContent(document, webviewPanel, workbook, sheetNames); + } + +private async loadWorkbook(document: ExcelDocument, webviewPanel: vscode.WebviewPanel): Promise { + this.updateLoadingProgress(webviewPanel, 'Reading file...'); + + try { + const data = await vscode.workspace.fs.readFile(document.uri); + console.log(`Read ${data.byteLength} bytes`); + + // very large files, update the progress message + if (data.byteLength > 5 * 1024 * 1024) { // 5MB + this.updateLoadingProgress(webviewPanel, 'Parsing large file...'); + } + + // get file extension to optimize parsing options + const fileExtension = document.uri.fsPath.split('.').pop()?.toLowerCase() || ''; + + // parse with SheetJS with options optimized for the file type + console.log(`Parsing ${fileExtension} file...`); + this.updateLoadingProgress(webviewPanel, `Parsing ${fileExtension} data...`); + + // timeout to ensure UI updates before heavy parsing + await new Promise(resolve => setTimeout(resolve, 10)); + + const options: XLSX.ParsingOptions = { + type: 'array', + cellStyles: true, + cellDates: true, + }; + + // specific format handling + if (fileExtension === 'csv') { + options.cellDates = false; + options.cellStyles = false; + } + + const workbook = XLSX.read(new Uint8Array(data), options); + + this.updateLoadingProgress(webviewPanel, 'Preparing view...'); + + // cache the workbook + const cacheKey = document.uri.toString(); + this.workbookCache.set(cacheKey, workbook); + + return workbook; + } catch (error) { + console.error(`Error reading file: ${error}`); + this.setErrorView(webviewPanel, error); + throw error; + } +} + + private setupWebviewContent( + document: ExcelDocument, + webviewPanel: vscode.WebviewPanel, + workbook: XLSX.WorkBook, + sheetNames: string[] +): void { + // exit early if there are no sheets + if (sheetNames.length === 0) { + webviewPanel.webview.html = getErrorViewHtml(new Error("No sheets or tables found in this file.")); + return; + } + + // create a dropdown for sheet selection + let sheetSelector = ` +
+ + +
+ `; + + // setup up the HTML with JS to handle sheet switching + webviewPanel.webview.html = getExcelViewerHtml(sheetNames, sheetSelector); + + // handle messages from the webview + this.setupMessageHandlers(document, webviewPanel, workbook); +} + + private setupMessageHandlers( + document: ExcelDocument, + webviewPanel: vscode.WebviewPanel, + workbook: XLSX.WorkBook + ): void { + const baseCacheKey = document.uri.toString(); + + webviewPanel.webview.onDidReceiveMessage(async message => { + if (message.type === 'getSheetPage') { + await this.handleGetSheetPage( + baseCacheKey, + workbook, + webviewPanel, + message + ); + } + }); + } + + private async handleGetSheetPage( + baseCacheKey: string, + workbook: XLSX.WorkBook, + webviewPanel: vscode.WebviewPanel, + message: any + ): Promise { + const { sheetName, page, rowsPerPage, maxColumns } = message; + const cacheKey = `${baseCacheKey}-${sheetName}-page-${page}`; + + this.updateLoadingProgress(webviewPanel, `Preparing page ${page + 1} of sheet: ${sheetName}`); + + // setTimeout to ensure loading message gets displayed + setTimeout(async () => { + try { + let sheetHtml: string; + let rangeInfo: any = null; + + // check if this page is already cached + if (this.sheetCache.has(cacheKey)) { + sheetHtml = this.sheetCache.get(cacheKey)!; + } else { + const sheet = workbook.Sheets[sheetName]; + + // get the range of the sheet (e.g., A1:Z100) + const range = sheet['!ref'] || ''; + rangeInfo = parseRange(range); + + if (!rangeInfo) { + sheetHtml = '

No data in this sheet

'; + } else { + sheetHtml = this.processSheetPage(sheet, rangeInfo, page, rowsPerPage, maxColumns); + + // cache the result + this.sheetCache.set(cacheKey, sheetHtml); + } + } + + // send the sheet data back to the webview + webviewPanel.webview.postMessage({ + type: 'sheetData', + sheetName: sheetName, + page: page, + html: sheetHtml, + range: rangeInfo + }); + } catch (error) { + console.error(`Error processing sheet ${sheetName}:`, error); + webviewPanel.webview.postMessage({ + type: 'error', + message: `Error loading sheet: ${error}` + }); + } + }, 10); + } + + private processSheetPage( + sheet: XLSX.WorkSheet, + rangeInfo: any, + page: number, + rowsPerPage: number, + maxColumns: number + ): string { + // calc the range for this page + const pageStartRow = Math.min(rangeInfo.startRow + (page * rowsPerPage), rangeInfo.endRow); + const pageEndRow = Math.min(pageStartRow + rowsPerPage - 1, rangeInfo.endRow); + + // limit columns if there are too many + const effectiveEndColNum = Math.min(rangeInfo.endColNum, rangeInfo.startColNum + maxColumns - 1); + const effectiveEndCol = numToColLetter(effectiveEndColNum); + + // create a new range for this page + const pageRange = `${rangeInfo.startCol}${pageStartRow}:${effectiveEndCol}${pageEndRow}`; + + // create a new sheet with just this page's data + const newPageSheet: XLSX.WorkSheet = { '!ref': pageRange }; + + // preserve important sheet properties + if (sheet['!cols']) newPageSheet['!cols'] = sheet['!cols']; + if (sheet['!rows']) newPageSheet['!rows'] = sheet['!rows']; + if (sheet['!merges']) { + // filter merges that are in this page's range + newPageSheet['!merges'] = sheet['!merges'].filter(merge => { + return merge.s.r >= pageStartRow - 1 && + merge.e.r <= pageEndRow - 1 && + merge.s.c >= rangeInfo.startColNum - 1 && + merge.e.c <= effectiveEndColNum - 1; + }); + } + + // copy cells in range + Object.keys(sheet).forEach(key => { + if (key.charAt(0) !== '!') { + // check if cell is in our page range + const cellCol = key.replace(/[0-9]/g, ''); + const cellRow = parseInt(key.replace(/[^0-9]/g, '')); + const cellColNum = colLetterToNum(cellCol); + + if (cellRow >= pageStartRow && + cellRow <= pageEndRow && + cellColNum >= rangeInfo.startColNum && + cellColNum <= effectiveEndColNum) { + newPageSheet[key] = sheet[key]; + } + } + }); + + // convert to HTML + return XLSX.utils.sheet_to_html(newPageSheet); + } +} \ No newline at end of file diff --git a/src/excelUtils.ts b/src/excelUtils.ts new file mode 100644 index 0000000..1ead3b9 --- /dev/null +++ b/src/excelUtils.ts @@ -0,0 +1,51 @@ +// parse range like A1:Z100 and return information about dimensions +export function parseRange(rangeStr: string) { + if (!rangeStr || !rangeStr.includes(':')) return null; + + const parts = rangeStr.split(':'); + const startCell = parts[0]; + const endCell = parts[1]; + + // extract column letters and row numbers + const startCol = startCell.replace(/[0-9]/g, ''); + const endCol = endCell.replace(/[0-9]/g, ''); + const startRow = parseInt(startCell.replace(/[^0-9]/g, '')); + const endRow = parseInt(endCell.replace(/[^0-9]/g, '')); + + // calc dimensions + const startColNum = colLetterToNum(startCol); + const endColNum = colLetterToNum(endCol); + const totalRows = endRow - startRow + 1; + const totalCols = endColNum - startColNum + 1; + + return { + startRow, + endRow, + startCol, + endCol, + startColNum, + endColNum, + totalRows, + totalCols + }; +} + +// (A=1, B=2, etc.) +export function colLetterToNum(col: string): number { + let result = 0; + for (let i = 0; i < col.length; i++) { + result = result * 26 + (col.charCodeAt(i) - 64); + } + return result; +} + +// (1=A, 2=B, etc.) +export function numToColLetter(num: number): string { + let result = ''; + while (num > 0) { + const modulo = (num - 1) % 26; + result = String.fromCharCode(65 + modulo) + result; + num = Math.floor((num - modulo) / 26); + } + return result || 'A'; +} \ No newline at end of file diff --git a/src/extension.ts b/src/extension.ts new file mode 100644 index 0000000..fbebf34 --- /dev/null +++ b/src/extension.ts @@ -0,0 +1,14 @@ +import * as vscode from 'vscode'; +import { ExcelEditorProvider } from './excelEditorProvider'; + +export function activate(context: vscode.ExtensionContext) { + console.log('Excel Viewer extension activating...'); + + const provider = ExcelEditorProvider.register(context); + context.subscriptions.push(provider); + + console.log('Excel Viewer extension is now active'); + vscode.window.showInformationMessage('Excel Viewer is ready!'); +} + +export function deactivate() {} \ No newline at end of file diff --git a/src/test/extension.test.ts b/src/test/extension.test.ts new file mode 100644 index 0000000..4ca0ab4 --- /dev/null +++ b/src/test/extension.test.ts @@ -0,0 +1,15 @@ +import * as assert from 'assert'; + +// You can import and use all API from the 'vscode' module +// as well as import your extension to test it +import * as vscode from 'vscode'; +// import * as myExtension from '../../extension'; + +suite('Extension Test Suite', () => { + vscode.window.showInformationMessage('Start all tests.'); + + test('Sample test', () => { + assert.strictEqual(-1, [1, 2, 3].indexOf(5)); + assert.strictEqual(-1, [1, 2, 3].indexOf(0)); + }); +}); diff --git a/src/webviewContent.ts b/src/webviewContent.ts new file mode 100644 index 0000000..cda9c9f --- /dev/null +++ b/src/webviewContent.ts @@ -0,0 +1,441 @@ +const commonStyles = ` + body { + font-family: var(--vscode-font-family); + background-color: var(--vscode-editor-background); + color: var(--vscode-foreground); + margin: 0; + padding: 0; + } +`; + +const loadingStyles = ` + body { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 100vh; + text-align: center; + } + .loader-container { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + } + .loader { + border: 6px solid var(--vscode-panel-border); + border-radius: 50%; + border-top: 6px solid var(--vscode-button-background); + width: 60px; + height: 60px; + animation: spin 1.5s linear infinite; + margin: 30px auto; + } + @keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } + h2 { margin-bottom: 20px; } + .message { margin-top: 20px; max-width: 80%; } +`; + +const errorStyles = ` + body { padding: 20px; } + .error-container { + border: 1px solid var(--vscode-inputValidation-errorBorder); + background-color: var(--vscode-inputValidation-errorBackground); + padding: 20px; + border-radius: 4px; + margin-top: 20px; + } + h1 { color: var(--vscode-errorForeground); } + pre { + background-color: var(--vscode-editor-background); + padding: 10px; + overflow: auto; + border-radius: 4px; + } +`; + +const excelViewerStyles = ` + body { + padding: 0; + overflow-x: auto; + } + .container { + display: flex; + flex-direction: column; + height: 100vh; + } + .sheet-selector { + flex: 0 0 auto; + padding: 10px 20px; + margin-bottom: 0; + background-color: var(--vscode-editor-background); + position: sticky; + top: 0; + z-index: 10; + border-bottom: 1px solid var(--vscode-panel-border); + } + .sheet-content { + flex: 1 1 auto; + overflow: auto; + padding: 0 20px; + } + table { + border-collapse: collapse; + margin-top: 15px; + table-layout: fixed; + } + th, td { + border: 1px solid var(--vscode-panel-border); + padding: 6px; + text-align: left; + min-width: 80px; + max-width: 300px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + th { + background-color: var(--vscode-list-hoverBackground); + font-weight: bold; + position: sticky; + top: 0; + z-index: 5; + } + .status-bar { + flex: 0 0 auto; + padding: 5px 20px; + background-color: var(--vscode-editor-background); + border-top: 1px solid var(--vscode-panel-border); + font-size: 12px; + color: var(--vscode-descriptionForeground); + } + select { + padding: 5px; + background-color: var(--vscode-dropdown-background); + color: var(--vscode-dropdown-foreground); + border: 1px solid var(--vscode-dropdown-border); + border-radius: 2px; + min-width: 200px; + } + label { margin-right: 10px; } + .loader { + border: 4px solid var(--vscode-panel-border); + border-radius: 50%; + border-top: 4px solid var(--vscode-button-background); + width: 20px; + height: 20px; + animation: spin 1s linear infinite; + display: inline-block; + vertical-align: middle; + margin-left: 10px; + } + .loading-indicator { + display: none; + align-items: center; + margin-left: 15px; + } + .loading-text { margin-left: 8px; } + .controls { display: flex; align-items: center; } + .pagination { + margin-left: auto; + display: flex; + align-items: center; + } + button { + background-color: var(--vscode-button-background); + color: var(--vscode-button-foreground); + border: none; + padding: 4px 10px; + margin: 0 5px; + border-radius: 2px; + cursor: pointer; + } + button:disabled { + opacity: 0.5; + cursor: not-allowed; + } + .range-indicator { + margin: 0 10px; + font-size: 12px; + } + .nav-controls { + display: flex; + justify-content: space-between; + align-items: center; + width: 100%; + margin-bottom: 10px; + } +`; + +const loadingScript = ` + // set up message listener to update loading status + window.addEventListener('message', event => { + const message = event.data; + if (message && message.type === 'loadingProgress') { + document.getElementById('loading-status').textContent = message.message; + } + }); +`; + +function getExcelViewerScript(sheetNames: string[]) { + return ` + // config + const config = { + rowsPerPage: 500, + maxColumns: 100 + }; + + // Store sheet names and state + const sheetNames = ${JSON.stringify(sheetNames)}; + const vscode = acquireVsCodeApi(); + const cache = {}; + let currentPage = 0; + let currentSheetName = ''; + let currentSheetRange = null; + + // DOM elements + const currentSheetElement = document.getElementById('current-sheet'); + const prevButton = document.getElementById('prev-page'); + const nextButton = document.getElementById('next-page'); + const rangeIndicator = document.getElementById('range-indicator'); + const statusBar = document.getElementById('status-bar'); + const sheetSelector = document.getElementById('sheet-select'); + + // loading indicator functions + function showLoading(message = "Loading...") { + const indicator = document.getElementById('loading-indicator'); + const loadingText = indicator.querySelector('.loading-text'); + loadingText.textContent = message; + indicator.style.display = 'flex'; + } + + function hideLoading() { + document.getElementById('loading-indicator').style.display = 'none'; + } + + function parseSheetRange(rangeStr) { + if (!rangeStr || !rangeStr.includes(':')) return null; + + const parts = rangeStr.split(':'); + const startCell = parts[0]; + const endCell = parts[1]; + + // extract column letters and row numbers + const startCol = startCell.replace(/[0-9]/g, ''); + const endCol = endCell.replace(/[0-9]/g, ''); + const startRow = parseInt(startCell.replace(/[^0-9]/g, '')); + const endRow = parseInt(endCell.replace(/[^0-9]/g, '')); + + // calc dimensions + const totalRows = endRow - startRow + 1; + const startColNum = colLetterToNum(startCol); + const endColNum = colLetterToNum(endCol); + const totalCols = endColNum - startColNum + 1; + + return { + startRow, endRow, startCol, endCol, + startColNum, endColNum, totalRows, totalCols + }; + } + + function colLetterToNum(col) { + let result = 0; + for (let i = 0; i < col.length; i++) { + result = result * 26 + (col.charCodeAt(i) - 64); + } + return result; + } + + function numToColLetter(num) { + let result = ''; + while (num > 0) { + const modulo = (num - 1) % 26; + result = String.fromCharCode(65 + modulo) + result; + num = Math.floor((num - modulo) / 26); + } + return result || 'A'; + } + + // UI update functions + function updatePaginationControls(page, totalRows) { + const totalPages = Math.ceil(totalRows / config.rowsPerPage); + prevButton.disabled = page <= 0; + nextButton.disabled = page >= totalPages - 1; + + const startRow = page * config.rowsPerPage + 1; + const endRow = Math.min((page + 1) * config.rowsPerPage, totalRows); + + rangeIndicator.textContent = \`Rows \${startRow}-\${endRow} of \${totalRows}\`; + } + + function updateStatusBar(sheetName, range) { + if (!range) { + statusBar.textContent = \`Sheet: \${sheetName}\`; + return; + } + + statusBar.textContent = \`Sheet: \${sheetName} | Total: \${range.totalRows} rows Γ— \${range.totalCols} columns\`; + } + + // Sheet loading function + function loadSheetPage(sheetName, page) { + currentPage = page; + currentSheetName = sheetName; + + showLoading(\`Loading page \${page + 1} of sheet \${sheetName}...\`); + + vscode.postMessage({ + type: 'getSheetPage', + sheetName: sheetName, + page: page, + rowsPerPage: config.rowsPerPage, + maxColumns: config.maxColumns + }); + } + + // Event handling + window.addEventListener('message', event => { + const message = event.data; + + if (message.type === 'sheetData') { + // add the sheet to the cache + const cacheKey = \`\${message.sheetName}-page-\${message.page}\`; + cache[cacheKey] = message.html; + + // update range info if provided + if (message.range) { + currentSheetRange = message.range; + updatePaginationControls(message.page, message.range.totalRows); + updateStatusBar(message.sheetName, message.range); + } + + // update the view if this is still the current sheet and page + if (currentSheetName === message.sheetName && currentPage === message.page) { + currentSheetElement.innerHTML = \`

\${message.sheetName}

\${message.html}\`; + hideLoading(); + } + } + else if (message.type === 'loadingProgress') { + showLoading(message.message); + } + else if (message.type === 'error') { + currentSheetElement.innerHTML = \`

Error

\${message.message}

\`; + hideLoading(); + } + }); + + // UI event listeners + sheetSelector.addEventListener('change', function(e) { + const selectedIndex = parseInt(e.target.value); + const selectedSheet = sheetNames[selectedIndex]; + + // reset page to 0 when changing sheets + currentPage = 0; + loadSheetPage(selectedSheet, 0); + }); + + prevButton.addEventListener('click', function() { + if (currentPage > 0) { + loadSheetPage(currentSheetName, currentPage - 1); + } + }); + + nextButton.addEventListener('click', function() { + loadSheetPage(currentSheetName, currentPage + 1); + }); + + // init with first sheet + if (sheetNames.length > 0) { + loadSheetPage(sheetNames[0], 0); + } + `; +} + +// create HTML document with given components +function createHtmlDocument(styles: string, body: string, script: string = ''): string { + return ` + + + + + + + ${body} + + + + + `; +} + +// HTML for loading view +export function getLoadingViewHtml(): string { + const body = ` +
+

Loading File

+
+

Please wait while we process the file. Large files may take a moment to load...

+

Initializing...

+
+ `; + + return createHtmlDocument(loadingStyles, body, loadingScript); +} + +// HTML for error view +export function getErrorViewHtml(error: any): string { + const body = ` +

Error Opening File

+

An error occurred while trying to open the file:

+
+
${error.toString()}
+
+ `; + + return createHtmlDocument(errorStyles, body); +} + +// HTML for Excel viewer +export function getExcelViewerHtml(sheetNames: string[], sheetSelector: string): string { + const body = ` +
+
+ +
+ +
+
+

Loading sheet data...

+
+
+ +
+ Ready +
+
+ `; + + return createHtmlDocument(excelViewerStyles, body, getExcelViewerScript(sheetNames)); +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..cb35375 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "module": "Node16", + "target": "ES2022", + "lib": [ + "ES2022" + ], + "sourceMap": true, + "rootDir": "src", + "strict": true, /* enable all strict type-checking options */ + /* Additional Checks */ + // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + // "noUnusedParameters": true, /* Report errors on unused parameters. */ + } +} diff --git a/vsc-extension-quickstart.md b/vsc-extension-quickstart.md new file mode 100644 index 0000000..f518bb8 --- /dev/null +++ b/vsc-extension-quickstart.md @@ -0,0 +1,48 @@ +# Welcome to your VS Code Extension + +## What's in the folder + +* This folder contains all of the files necessary for your extension. +* `package.json` - this is the manifest file in which you declare your extension and command. + * The sample plugin registers a command and defines its title and command name. With this information VS Code can show the command in the command palette. It doesn’t yet need to load the plugin. +* `src/extension.ts` - this is the main file where you will provide the implementation of your command. + * The file exports one function, `activate`, which is called the very first time your extension is activated (in this case by executing the command). Inside the `activate` function we call `registerCommand`. + * We pass the function containing the implementation of the command as the second parameter to `registerCommand`. + +## Setup + +* install the recommended extensions (amodio.tsl-problem-matcher, ms-vscode.extension-test-runner, and dbaeumer.vscode-eslint) + + +## Get up and running straight away + +* Press `F5` to open a new window with your extension loaded. +* Run your command from the command palette by pressing (`Ctrl+Shift+P` or `Cmd+Shift+P` on Mac) and typing `Hello World`. +* Set breakpoints in your code inside `src/extension.ts` to debug your extension. +* Find output from your extension in the debug console. + +## Make changes + +* You can relaunch the extension from the debug toolbar after changing code in `src/extension.ts`. +* You can also reload (`Ctrl+R` or `Cmd+R` on Mac) the VS Code window with your extension to load your changes. + + +## Explore the API + +* You can open the full set of our API when you open the file `node_modules/@types/vscode/index.d.ts`. + +## Run tests + +* Install the [Extension Test Runner](https://marketplace.visualstudio.com/items?itemName=ms-vscode.extension-test-runner) +* Run the "watch" task via the **Tasks: Run Task** command. Make sure this is running, or tests might not be discovered. +* Open the Testing view from the activity bar and click the Run Test" button, or use the hotkey `Ctrl/Cmd + ; A` +* See the output of the test result in the Test Results view. +* Make changes to `src/test/extension.test.ts` or create new test files inside the `test` folder. + * The provided test runner will only consider files matching the name pattern `**.test.ts`. + * You can create folders inside the `test` folder to structure your tests any way you want. + +## Go further + +* Reduce the extension size and improve the startup time by [bundling your extension](https://code.visualstudio.com/api/working-with-extensions/bundling-extension). +* [Publish your extension](https://code.visualstudio.com/api/working-with-extensions/publishing-extension) on the VS Code extension marketplace. +* Automate builds by setting up [Continuous Integration](https://code.visualstudio.com/api/working-with-extensions/continuous-integration). diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 0000000..37d7024 --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,48 @@ +//@ts-check + +'use strict'; + +const path = require('path'); + +//@ts-check +/** @typedef {import('webpack').Configuration} WebpackConfig **/ + +/** @type WebpackConfig */ +const extensionConfig = { + target: 'node', // VS Code extensions run in a Node.js-context πŸ“– -> https://webpack.js.org/configuration/node/ + mode: 'none', // this leaves the source code as close as possible to the original (when packaging we set this to 'production') + + entry: './src/extension.ts', // the entry point of this extension, πŸ“– -> https://webpack.js.org/configuration/entry-context/ + output: { + // the bundle is stored in the 'dist' folder (check package.json), πŸ“– -> https://webpack.js.org/configuration/output/ + path: path.resolve(__dirname, 'dist'), + filename: 'extension.js', + libraryTarget: 'commonjs2' + }, + externals: { + vscode: 'commonjs vscode' // the vscode-module is created on-the-fly and must be excluded. Add other modules that cannot be webpack'ed, πŸ“– -> https://webpack.js.org/configuration/externals/ + // modules added here also need to be added in the .vscodeignore file + }, + resolve: { + // support reading TypeScript and JavaScript files, πŸ“– -> https://github.com/TypeStrong/ts-loader + extensions: ['.ts', '.js'] + }, + module: { + rules: [ + { + test: /\.ts$/, + exclude: /node_modules/, + use: [ + { + loader: 'ts-loader' + } + ] + } + ] + }, + devtool: 'nosources-source-map', + infrastructureLogging: { + level: "log", // enables logging required for problem matchers + }, +}; +module.exports = [ extensionConfig ]; \ No newline at end of file