From 316d75a7016019e27c33e839112b92e2e9754fed Mon Sep 17 00:00:00 2001 From: georgiebrown Date: Mon, 30 Mar 2026 10:00:38 +0100 Subject: [PATCH 0001/1526] tailwind added' --- assets/global.css | 597 + assets/tailwind.css | 1 + layout/theme.liquid | 1 + node_modules/.bin/autoprefixer | 1 + node_modules/.bin/baseline-browser-mapping | 1 + node_modules/.bin/browserslist | 1 + node_modules/.bin/jiti | 1 + node_modules/.bin/nanoid | 1 + node_modules/.bin/tailwindcss | 1 + node_modules/.bin/update-browserslist-db | 1 + node_modules/.package-lock.json | 1294 ++ node_modules/@jridgewell/gen-mapping/LICENSE | 19 + .../@jridgewell/gen-mapping/README.md | 227 + .../gen-mapping/dist/gen-mapping.mjs | 292 + .../gen-mapping/dist/gen-mapping.mjs.map | 6 + .../gen-mapping/dist/gen-mapping.umd.js | 358 + .../gen-mapping/dist/gen-mapping.umd.js.map | 6 + .../gen-mapping/dist/types/gen-mapping.d.ts | 88 + .../gen-mapping/dist/types/set-array.d.ts | 32 + .../dist/types/sourcemap-segment.d.ts | 12 + .../gen-mapping/dist/types/types.d.ts | 43 + .../@jridgewell/gen-mapping/package.json | 67 + .../gen-mapping/src/gen-mapping.ts | 614 + .../@jridgewell/gen-mapping/src/set-array.ts | 82 + .../gen-mapping/src/sourcemap-segment.ts | 16 + .../@jridgewell/gen-mapping/src/types.ts | 61 + .../gen-mapping/types/gen-mapping.d.cts | 89 + .../gen-mapping/types/gen-mapping.d.cts.map | 1 + .../gen-mapping/types/gen-mapping.d.mts | 89 + .../gen-mapping/types/gen-mapping.d.mts.map | 1 + .../gen-mapping/types/set-array.d.cts | 33 + .../gen-mapping/types/set-array.d.cts.map | 1 + .../gen-mapping/types/set-array.d.mts | 33 + .../gen-mapping/types/set-array.d.mts.map | 1 + .../gen-mapping/types/sourcemap-segment.d.cts | 13 + .../types/sourcemap-segment.d.cts.map | 1 + .../gen-mapping/types/sourcemap-segment.d.mts | 13 + .../types/sourcemap-segment.d.mts.map | 1 + .../@jridgewell/gen-mapping/types/types.d.cts | 44 + .../gen-mapping/types/types.d.cts.map | 1 + .../@jridgewell/gen-mapping/types/types.d.mts | 44 + .../gen-mapping/types/types.d.mts.map | 1 + node_modules/@jridgewell/remapping/LICENSE | 19 + node_modules/@jridgewell/remapping/README.md | 218 + .../@jridgewell/remapping/dist/remapping.mjs | 144 + .../remapping/dist/remapping.mjs.map | 6 + .../remapping/dist/remapping.umd.js | 212 + .../remapping/dist/remapping.umd.js.map | 6 + .../@jridgewell/remapping/package.json | 71 + .../remapping/src/build-source-map-tree.ts | 89 + .../@jridgewell/remapping/src/remapping.ts | 42 + .../remapping/src/source-map-tree.ts | 172 + .../@jridgewell/remapping/src/source-map.ts | 38 + .../@jridgewell/remapping/src/types.ts | 27 + .../types/build-source-map-tree.d.cts | 15 + .../types/build-source-map-tree.d.cts.map | 1 + .../types/build-source-map-tree.d.mts | 15 + .../types/build-source-map-tree.d.mts.map | 1 + .../remapping/types/remapping.d.cts | 21 + .../remapping/types/remapping.d.cts.map | 1 + .../remapping/types/remapping.d.mts | 21 + .../remapping/types/remapping.d.mts.map | 1 + .../remapping/types/source-map-tree.d.cts | 46 + .../remapping/types/source-map-tree.d.cts.map | 1 + .../remapping/types/source-map-tree.d.mts | 46 + .../remapping/types/source-map-tree.d.mts.map | 1 + .../remapping/types/source-map.d.cts | 19 + .../remapping/types/source-map.d.cts.map | 1 + .../remapping/types/source-map.d.mts | 19 + .../remapping/types/source-map.d.mts.map | 1 + .../@jridgewell/remapping/types/types.d.cts | 16 + .../remapping/types/types.d.cts.map | 1 + .../@jridgewell/remapping/types/types.d.mts | 16 + .../remapping/types/types.d.mts.map | 1 + node_modules/@jridgewell/resolve-uri/LICENSE | 19 + .../@jridgewell/resolve-uri/README.md | 40 + .../resolve-uri/dist/resolve-uri.mjs | 232 + .../resolve-uri/dist/resolve-uri.mjs.map | 1 + .../resolve-uri/dist/resolve-uri.umd.js | 240 + .../resolve-uri/dist/resolve-uri.umd.js.map | 1 + .../resolve-uri/dist/types/resolve-uri.d.ts | 4 + .../@jridgewell/resolve-uri/package.json | 69 + .../@jridgewell/sourcemap-codec/LICENSE | 19 + .../@jridgewell/sourcemap-codec/README.md | 264 + .../sourcemap-codec/dist/sourcemap-codec.mjs | 423 + .../dist/sourcemap-codec.mjs.map | 6 + .../dist/sourcemap-codec.umd.js | 464 + .../dist/sourcemap-codec.umd.js.map | 6 + .../@jridgewell/sourcemap-codec/package.json | 63 + .../@jridgewell/sourcemap-codec/src/scopes.ts | 345 + .../sourcemap-codec/src/sourcemap-codec.ts | 111 + .../sourcemap-codec/src/strings.ts | 65 + .../@jridgewell/sourcemap-codec/src/vlq.ts | 55 + .../sourcemap-codec/types/scopes.d.cts | 50 + .../sourcemap-codec/types/scopes.d.cts.map | 1 + .../sourcemap-codec/types/scopes.d.mts | 50 + .../sourcemap-codec/types/scopes.d.mts.map | 1 + .../types/sourcemap-codec.d.cts | 9 + .../types/sourcemap-codec.d.cts.map | 1 + .../types/sourcemap-codec.d.mts | 9 + .../types/sourcemap-codec.d.mts.map | 1 + .../sourcemap-codec/types/strings.d.cts | 16 + .../sourcemap-codec/types/strings.d.cts.map | 1 + .../sourcemap-codec/types/strings.d.mts | 16 + .../sourcemap-codec/types/strings.d.mts.map | 1 + .../sourcemap-codec/types/vlq.d.cts | 7 + .../sourcemap-codec/types/vlq.d.cts.map | 1 + .../sourcemap-codec/types/vlq.d.mts | 7 + .../sourcemap-codec/types/vlq.d.mts.map | 1 + .../@jridgewell/trace-mapping/LICENSE | 19 + .../@jridgewell/trace-mapping/README.md | 348 + .../trace-mapping/dist/trace-mapping.mjs | 493 + .../trace-mapping/dist/trace-mapping.mjs.map | 6 + .../trace-mapping/dist/trace-mapping.umd.js | 559 + .../dist/trace-mapping.umd.js.map | 6 + .../@jridgewell/trace-mapping/package.json | 67 + .../trace-mapping/src/binary-search.ts | 115 + .../trace-mapping/src/by-source.ts | 41 + .../trace-mapping/src/flatten-map.ts | 192 + .../@jridgewell/trace-mapping/src/resolve.ts | 16 + .../@jridgewell/trace-mapping/src/sort.ts | 45 + .../trace-mapping/src/sourcemap-segment.ts | 23 + .../trace-mapping/src/strip-filename.ts | 8 + .../trace-mapping/src/trace-mapping.ts | 502 + .../@jridgewell/trace-mapping/src/types.ts | 114 + .../trace-mapping/types/binary-search.d.cts | 33 + .../types/binary-search.d.cts.map | 1 + .../trace-mapping/types/binary-search.d.mts | 33 + .../types/binary-search.d.mts.map | 1 + .../trace-mapping/types/by-source.d.cts | 4 + .../trace-mapping/types/by-source.d.cts.map | 1 + .../trace-mapping/types/by-source.d.mts | 4 + .../trace-mapping/types/by-source.d.mts.map | 1 + .../trace-mapping/types/flatten-map.d.cts | 9 + .../trace-mapping/types/flatten-map.d.cts.map | 1 + .../trace-mapping/types/flatten-map.d.mts | 9 + .../trace-mapping/types/flatten-map.d.mts.map | 1 + .../trace-mapping/types/resolve.d.cts | 4 + .../trace-mapping/types/resolve.d.cts.map | 1 + .../trace-mapping/types/resolve.d.mts | 4 + .../trace-mapping/types/resolve.d.mts.map | 1 + .../trace-mapping/types/sort.d.cts | 4 + .../trace-mapping/types/sort.d.cts.map | 1 + .../trace-mapping/types/sort.d.mts | 4 + .../trace-mapping/types/sort.d.mts.map | 1 + .../types/sourcemap-segment.d.cts | 17 + .../types/sourcemap-segment.d.cts.map | 1 + .../types/sourcemap-segment.d.mts | 17 + .../types/sourcemap-segment.d.mts.map | 1 + .../trace-mapping/types/strip-filename.d.cts | 5 + .../types/strip-filename.d.cts.map | 1 + .../trace-mapping/types/strip-filename.d.mts | 5 + .../types/strip-filename.d.mts.map | 1 + .../trace-mapping/types/trace-mapping.d.cts | 80 + .../types/trace-mapping.d.cts.map | 1 + .../trace-mapping/types/trace-mapping.d.mts | 80 + .../types/trace-mapping.d.mts.map | 1 + .../trace-mapping/types/types.d.cts | 107 + .../trace-mapping/types/types.d.cts.map | 1 + .../trace-mapping/types/types.d.mts | 107 + .../trace-mapping/types/types.d.mts.map | 1 + .../@parcel/watcher-darwin-arm64/LICENSE | 21 + .../@parcel/watcher-darwin-arm64/README.md | 1 + .../@parcel/watcher-darwin-arm64/package.json | 30 + .../@parcel/watcher-darwin-arm64/watcher.node | Bin 0 -> 326112 bytes node_modules/@parcel/watcher/LICENSE | 21 + node_modules/@parcel/watcher/README.md | 136 + node_modules/@parcel/watcher/binding.gyp | 109 + node_modules/@parcel/watcher/index.d.ts | 49 + node_modules/@parcel/watcher/index.js | 42 + node_modules/@parcel/watcher/index.js.flow | 48 + node_modules/@parcel/watcher/package.json | 88 + .../watcher/scripts/build-from-source.js | 13 + node_modules/@parcel/watcher/src/Backend.cc | 186 + node_modules/@parcel/watcher/src/Backend.hh | 37 + node_modules/@parcel/watcher/src/Debounce.cc | 113 + node_modules/@parcel/watcher/src/Debounce.hh | 49 + node_modules/@parcel/watcher/src/DirTree.cc | 164 + node_modules/@parcel/watcher/src/DirTree.hh | 50 + node_modules/@parcel/watcher/src/Event.hh | 109 + node_modules/@parcel/watcher/src/Glob.cc | 22 + node_modules/@parcel/watcher/src/Glob.hh | 34 + .../@parcel/watcher/src/PromiseRunner.hh | 101 + node_modules/@parcel/watcher/src/Signal.hh | 46 + node_modules/@parcel/watcher/src/Watcher.cc | 241 + node_modules/@parcel/watcher/src/Watcher.hh | 73 + node_modules/@parcel/watcher/src/binding.cc | 268 + .../watcher/src/kqueue/KqueueBackend.cc | 306 + .../watcher/src/kqueue/KqueueBackend.hh | 35 + .../watcher/src/linux/InotifyBackend.cc | 236 + .../watcher/src/linux/InotifyBackend.hh | 34 + .../watcher/src/macos/FSEventsBackend.cc | 338 + .../watcher/src/macos/FSEventsBackend.hh | 20 + .../watcher/src/shared/BruteForceBackend.cc | 41 + .../watcher/src/shared/BruteForceBackend.hh | 25 + node_modules/@parcel/watcher/src/unix/fts.cc | 50 + .../@parcel/watcher/src/unix/legacy.cc | 77 + .../@parcel/watcher/src/wasm/WasmBackend.cc | 132 + .../@parcel/watcher/src/wasm/WasmBackend.hh | 34 + .../@parcel/watcher/src/wasm/include.h | 74 + .../@parcel/watcher/src/watchman/BSER.cc | 302 + .../@parcel/watcher/src/watchman/BSER.hh | 69 + .../@parcel/watcher/src/watchman/IPC.hh | 175 + .../watcher/src/watchman/WatchmanBackend.cc | 342 + .../watcher/src/watchman/WatchmanBackend.hh | 35 + .../watcher/src/windows/WindowsBackend.cc | 282 + .../watcher/src/windows/WindowsBackend.hh | 18 + .../@parcel/watcher/src/windows/win_utils.cc | 44 + .../@parcel/watcher/src/windows/win_utils.hh | 11 + node_modules/@parcel/watcher/wrapper.js | 74 + node_modules/@tailwindcss/cli/LICENSE | 21 + node_modules/@tailwindcss/cli/README.md | 36 + node_modules/@tailwindcss/cli/dist/index.mjs | 24 + node_modules/@tailwindcss/cli/package.json | 40 + node_modules/@tailwindcss/node/LICENSE | 21 + node_modules/@tailwindcss/node/README.md | 36 + .../node/dist/esm-cache.loader.d.mts | 5 + .../node/dist/esm-cache.loader.mjs | 1 + .../@tailwindcss/node/dist/index.d.mts | 256 + .../@tailwindcss/node/dist/index.d.ts | 256 + node_modules/@tailwindcss/node/dist/index.js | 18 + node_modules/@tailwindcss/node/dist/index.mjs | 18 + .../@tailwindcss/node/dist/require-cache.d.ts | 3 + .../@tailwindcss/node/dist/require-cache.js | 1 + node_modules/@tailwindcss/node/package.json | 48 + .../@tailwindcss/oxide-darwin-arm64/LICENSE | 21 + .../@tailwindcss/oxide-darwin-arm64/README.md | 3 + .../oxide-darwin-arm64/package.json | 27 + .../tailwindcss-oxide.darwin-arm64.node | Bin 0 -> 2939760 bytes node_modules/@tailwindcss/oxide/LICENSE | 21 + node_modules/@tailwindcss/oxide/index.d.ts | 48 + node_modules/@tailwindcss/oxide/index.js | 575 + node_modules/@tailwindcss/oxide/package.json | 75 + node_modules/autoprefixer/LICENSE | 20 + node_modules/autoprefixer/README.md | 57 + node_modules/autoprefixer/bin/autoprefixer | 22 + node_modules/autoprefixer/data/prefixes.js | 1139 ++ node_modules/autoprefixer/lib/at-rule.js | 35 + .../autoprefixer/lib/autoprefixer.d.ts | 95 + node_modules/autoprefixer/lib/autoprefixer.js | 164 + node_modules/autoprefixer/lib/brackets.js | 51 + node_modules/autoprefixer/lib/browsers.js | 79 + node_modules/autoprefixer/lib/declaration.js | 187 + .../autoprefixer/lib/hacks/align-content.js | 49 + .../autoprefixer/lib/hacks/align-items.js | 46 + .../autoprefixer/lib/hacks/align-self.js | 56 + .../autoprefixer/lib/hacks/animation.js | 17 + .../autoprefixer/lib/hacks/appearance.js | 23 + .../autoprefixer/lib/hacks/autofill.js | 26 + .../autoprefixer/lib/hacks/backdrop-filter.js | 20 + .../autoprefixer/lib/hacks/background-clip.js | 24 + .../autoprefixer/lib/hacks/background-size.js | 23 + .../autoprefixer/lib/hacks/block-logical.js | 40 + .../autoprefixer/lib/hacks/border-image.js | 15 + .../autoprefixer/lib/hacks/border-radius.js | 40 + .../autoprefixer/lib/hacks/break-props.js | 63 + .../autoprefixer/lib/hacks/cross-fade.js | 35 + .../autoprefixer/lib/hacks/display-flex.js | 65 + .../autoprefixer/lib/hacks/display-grid.js | 21 + .../lib/hacks/file-selector-button.js | 26 + .../autoprefixer/lib/hacks/filter-value.js | 14 + node_modules/autoprefixer/lib/hacks/filter.js | 19 + .../autoprefixer/lib/hacks/flex-basis.js | 39 + .../autoprefixer/lib/hacks/flex-direction.js | 72 + .../autoprefixer/lib/hacks/flex-flow.js | 53 + .../autoprefixer/lib/hacks/flex-grow.js | 30 + .../autoprefixer/lib/hacks/flex-shrink.js | 39 + .../autoprefixer/lib/hacks/flex-spec.js | 19 + .../autoprefixer/lib/hacks/flex-wrap.js | 19 + node_modules/autoprefixer/lib/hacks/flex.js | 54 + .../autoprefixer/lib/hacks/fullscreen.js | 20 + .../autoprefixer/lib/hacks/gradient.js | 450 + .../autoprefixer/lib/hacks/grid-area.js | 34 + .../lib/hacks/grid-column-align.js | 28 + .../autoprefixer/lib/hacks/grid-end.js | 52 + .../autoprefixer/lib/hacks/grid-row-align.js | 28 + .../autoprefixer/lib/hacks/grid-row-column.js | 33 + .../lib/hacks/grid-rows-columns.js | 125 + .../autoprefixer/lib/hacks/grid-start.js | 33 + .../lib/hacks/grid-template-areas.js | 84 + .../autoprefixer/lib/hacks/grid-template.js | 69 + .../autoprefixer/lib/hacks/grid-utils.js | 1117 ++ .../autoprefixer/lib/hacks/image-rendering.js | 48 + .../autoprefixer/lib/hacks/image-set.js | 18 + .../autoprefixer/lib/hacks/inline-logical.js | 34 + .../autoprefixer/lib/hacks/intrinsic.js | 61 + .../autoprefixer/lib/hacks/justify-content.js | 54 + .../autoprefixer/lib/hacks/mask-border.js | 38 + .../autoprefixer/lib/hacks/mask-composite.js | 88 + node_modules/autoprefixer/lib/hacks/order.js | 42 + .../lib/hacks/overscroll-behavior.js | 33 + .../autoprefixer/lib/hacks/pixelated.js | 34 + .../autoprefixer/lib/hacks/place-self.js | 32 + .../lib/hacks/placeholder-shown.js | 19 + .../autoprefixer/lib/hacks/placeholder.js | 33 + .../lib/hacks/print-color-adjust.js | 25 + .../lib/hacks/text-decoration-skip-ink.js | 23 + .../autoprefixer/lib/hacks/text-decoration.js | 25 + .../lib/hacks/text-emphasis-position.js | 14 + .../autoprefixer/lib/hacks/transform-decl.js | 79 + .../autoprefixer/lib/hacks/user-select.js | 33 + .../autoprefixer/lib/hacks/writing-mode.js | 42 + node_modules/autoprefixer/lib/info.js | 123 + node_modules/autoprefixer/lib/old-selector.js | 67 + node_modules/autoprefixer/lib/old-value.js | 22 + node_modules/autoprefixer/lib/prefixer.js | 144 + node_modules/autoprefixer/lib/prefixes.js | 428 + node_modules/autoprefixer/lib/processor.js | 709 ++ node_modules/autoprefixer/lib/resolution.js | 97 + node_modules/autoprefixer/lib/selector.js | 150 + node_modules/autoprefixer/lib/supports.js | 302 + node_modules/autoprefixer/lib/transition.js | 329 + node_modules/autoprefixer/lib/utils.js | 93 + node_modules/autoprefixer/lib/value.js | 125 + node_modules/autoprefixer/lib/vendor.js | 14 + node_modules/autoprefixer/package.json | 48 + .../baseline-browser-mapping/LICENSE.txt | 201 + .../baseline-browser-mapping/README.md | 467 + .../baseline-browser-mapping/dist/cli.cjs | 2 + .../baseline-browser-mapping/dist/index.cjs | 1 + .../baseline-browser-mapping/dist/index.d.ts | 104 + .../baseline-browser-mapping/dist/index.js | 1 + .../baseline-browser-mapping/package.json | 68 + node_modules/browserslist/LICENSE | 20 + node_modules/browserslist/README.md | 65 + node_modules/browserslist/browser.js | 54 + node_modules/browserslist/cli.js | 156 + node_modules/browserslist/error.d.ts | 7 + node_modules/browserslist/error.js | 12 + node_modules/browserslist/index.d.ts | 224 + node_modules/browserslist/index.js | 1335 ++ node_modules/browserslist/node.js | 502 + node_modules/browserslist/package.json | 45 + node_modules/browserslist/parse.js | 78 + node_modules/caniuse-lite/LICENSE | 395 + node_modules/caniuse-lite/README.md | 6 + node_modules/caniuse-lite/data/agents.js | 1 + .../caniuse-lite/data/browserVersions.js | 1 + node_modules/caniuse-lite/data/browsers.js | 1 + node_modules/caniuse-lite/data/features.js | 1 + .../caniuse-lite/data/features/aac.js | 1 + .../data/features/abortcontroller.js | 1 + .../caniuse-lite/data/features/ac3-ec3.js | 1 + .../data/features/accelerometer.js | 1 + .../data/features/addeventlistener.js | 1 + .../data/features/alternate-stylesheet.js | 1 + .../data/features/ambient-light.js | 1 + .../caniuse-lite/data/features/apng.js | 1 + .../data/features/array-find-index.js | 1 + .../caniuse-lite/data/features/array-find.js | 1 + .../caniuse-lite/data/features/array-flat.js | 1 + .../data/features/array-includes.js | 1 + .../data/features/arrow-functions.js | 1 + .../caniuse-lite/data/features/asmjs.js | 1 + .../data/features/async-clipboard.js | 1 + .../data/features/async-functions.js | 1 + .../caniuse-lite/data/features/atob-btoa.js | 1 + .../caniuse-lite/data/features/audio-api.js | 1 + .../caniuse-lite/data/features/audio.js | 1 + .../caniuse-lite/data/features/audiotracks.js | 1 + .../caniuse-lite/data/features/autofocus.js | 1 + .../caniuse-lite/data/features/auxclick.js | 1 + .../caniuse-lite/data/features/av1.js | 1 + .../caniuse-lite/data/features/avif.js | 1 + .../data/features/background-attachment.js | 1 + .../data/features/background-clip-text.js | 1 + .../data/features/background-img-opts.js | 1 + .../data/features/background-position-x-y.js | 1 + .../features/background-repeat-round-space.js | 1 + .../data/features/background-sync.js | 1 + .../data/features/battery-status.js | 1 + .../caniuse-lite/data/features/beacon.js | 1 + .../data/features/beforeafterprint.js | 1 + .../caniuse-lite/data/features/bigint.js | 1 + .../caniuse-lite/data/features/blobbuilder.js | 1 + .../caniuse-lite/data/features/bloburls.js | 1 + .../data/features/border-image.js | 1 + .../data/features/border-radius.js | 1 + .../data/features/broadcastchannel.js | 1 + .../caniuse-lite/data/features/brotli.js | 1 + .../caniuse-lite/data/features/calc.js | 1 + .../data/features/canvas-blending.js | 1 + .../caniuse-lite/data/features/canvas-text.js | 1 + .../caniuse-lite/data/features/canvas.js | 1 + .../caniuse-lite/data/features/ch-unit.js | 1 + .../data/features/chacha20-poly1305.js | 1 + .../data/features/channel-messaging.js | 1 + .../data/features/childnode-remove.js | 1 + .../caniuse-lite/data/features/classlist.js | 1 + .../client-hints-dpr-width-viewport.js | 1 + .../caniuse-lite/data/features/clipboard.js | 1 + .../caniuse-lite/data/features/colr-v1.js | 1 + .../caniuse-lite/data/features/colr.js | 1 + .../data/features/comparedocumentposition.js | 1 + .../data/features/console-basic.js | 1 + .../data/features/console-time.js | 1 + .../caniuse-lite/data/features/const.js | 1 + .../data/features/constraint-validation.js | 1 + .../data/features/contenteditable.js | 1 + .../data/features/contentsecuritypolicy.js | 1 + .../data/features/contentsecuritypolicy2.js | 1 + .../data/features/cookie-store-api.js | 1 + .../caniuse-lite/data/features/cors.js | 1 + .../data/features/createimagebitmap.js | 1 + .../data/features/credential-management.js | 1 + .../cross-document-view-transitions.js | 1 + .../data/features/cryptography.js | 1 + .../caniuse-lite/data/features/css-all.js | 1 + .../data/features/css-anchor-positioning.js | 1 + .../data/features/css-animation.js | 1 + .../data/features/css-any-link.js | 1 + .../data/features/css-appearance.js | 1 + .../data/features/css-at-counter-style.js | 1 + .../data/features/css-autofill.js | 1 + .../data/features/css-backdrop-filter.js | 1 + .../data/features/css-background-offsets.js | 1 + .../data/features/css-backgroundblendmode.js | 1 + .../data/features/css-boxdecorationbreak.js | 1 + .../data/features/css-boxshadow.js | 1 + .../caniuse-lite/data/features/css-canvas.js | 1 + .../data/features/css-caret-color.js | 1 + .../data/features/css-cascade-layers.js | 1 + .../data/features/css-cascade-scope.js | 1 + .../data/features/css-case-insensitive.js | 1 + .../data/features/css-clip-path.js | 1 + .../data/features/css-color-adjust.js | 1 + .../data/features/css-color-function.js | 1 + .../data/features/css-conic-gradients.js | 1 + .../features/css-container-queries-style.js | 1 + .../data/features/css-container-queries.js | 1 + .../features/css-container-query-units.js | 1 + .../data/features/css-containment.js | 1 + .../data/features/css-content-visibility.js | 1 + .../data/features/css-counters.js | 1 + .../data/features/css-crisp-edges.js | 1 + .../data/features/css-cross-fade.js | 1 + .../data/features/css-default-pseudo.js | 1 + .../data/features/css-descendant-gtgt.js | 1 + .../data/features/css-deviceadaptation.js | 1 + .../data/features/css-dir-pseudo.js | 1 + .../data/features/css-display-contents.js | 1 + .../data/features/css-element-function.js | 1 + .../data/features/css-env-function.js | 1 + .../data/features/css-exclusions.js | 1 + .../data/features/css-featurequeries.js | 1 + .../data/features/css-file-selector-button.js | 1 + .../data/features/css-filter-function.js | 1 + .../caniuse-lite/data/features/css-filters.js | 1 + .../data/features/css-first-letter.js | 1 + .../data/features/css-first-line.js | 1 + .../caniuse-lite/data/features/css-fixed.js | 1 + .../data/features/css-focus-visible.js | 1 + .../data/features/css-focus-within.js | 1 + .../data/features/css-font-palette.js | 1 + .../features/css-font-rendering-controls.js | 1 + .../data/features/css-font-stretch.js | 1 + .../data/features/css-gencontent.js | 1 + .../data/features/css-gradients.js | 1 + .../data/features/css-grid-animation.js | 1 + .../data/features/css-grid-lanes.js | 1 + .../caniuse-lite/data/features/css-grid.js | 1 + .../data/features/css-hanging-punctuation.js | 1 + .../caniuse-lite/data/features/css-has.js | 1 + .../caniuse-lite/data/features/css-hyphens.js | 1 + .../caniuse-lite/data/features/css-if.js | 1 + .../data/features/css-image-orientation.js | 1 + .../data/features/css-image-set.js | 1 + .../data/features/css-in-out-of-range.js | 1 + .../data/features/css-indeterminate-pseudo.js | 1 + .../data/features/css-initial-letter.js | 1 + .../data/features/css-initial-value.js | 1 + .../caniuse-lite/data/features/css-lch-lab.js | 1 + .../data/features/css-letter-spacing.js | 1 + .../data/features/css-line-clamp.js | 1 + .../data/features/css-logical-props.js | 1 + .../data/features/css-marker-pseudo.js | 1 + .../caniuse-lite/data/features/css-masks.js | 1 + .../data/features/css-matches-pseudo.js | 1 + .../data/features/css-math-functions.js | 1 + .../data/features/css-media-interaction.js | 1 + .../data/features/css-media-range-syntax.js | 1 + .../data/features/css-media-resolution.js | 1 + .../data/features/css-media-scripting.js | 1 + .../data/features/css-mediaqueries.js | 1 + .../data/features/css-mixblendmode.js | 1 + .../data/features/css-module-scripts.js | 1 + .../data/features/css-motion-paths.js | 1 + .../data/features/css-namespaces.js | 1 + .../caniuse-lite/data/features/css-nesting.js | 1 + .../data/features/css-not-sel-list.js | 1 + .../data/features/css-nth-child-of.js | 1 + .../caniuse-lite/data/features/css-opacity.js | 1 + .../data/features/css-optional-pseudo.js | 1 + .../data/features/css-overflow-anchor.js | 1 + .../data/features/css-overflow-overlay.js | 1 + .../data/features/css-overflow.js | 1 + .../data/features/css-overscroll-behavior.js | 1 + .../data/features/css-page-break.js | 1 + .../data/features/css-paged-media.js | 1 + .../data/features/css-paint-api.js | 1 + .../data/features/css-placeholder-shown.js | 1 + .../data/features/css-placeholder.js | 1 + .../data/features/css-print-color-adjust.js | 1 + .../data/features/css-read-only-write.js | 1 + .../data/features/css-rebeccapurple.js | 1 + .../data/features/css-reflections.js | 1 + .../caniuse-lite/data/features/css-regions.js | 1 + .../data/features/css-relative-colors.js | 1 + .../data/features/css-repeating-gradients.js | 1 + .../caniuse-lite/data/features/css-resize.js | 1 + .../data/features/css-revert-value.js | 1 + .../data/features/css-rrggbbaa.js | 1 + .../data/features/css-scroll-behavior.js | 1 + .../data/features/css-scrollbar.js | 1 + .../caniuse-lite/data/features/css-sel2.js | 1 + .../caniuse-lite/data/features/css-sel3.js | 1 + .../data/features/css-selection.js | 1 + .../caniuse-lite/data/features/css-shapes.js | 1 + .../data/features/css-snappoints.js | 1 + .../caniuse-lite/data/features/css-sticky.js | 1 + .../caniuse-lite/data/features/css-subgrid.js | 1 + .../data/features/css-supports-api.js | 1 + .../caniuse-lite/data/features/css-table.js | 1 + .../data/features/css-text-align-last.js | 1 + .../data/features/css-text-box-trim.js | 1 + .../data/features/css-text-indent.js | 1 + .../data/features/css-text-justify.js | 1 + .../data/features/css-text-orientation.js | 1 + .../data/features/css-text-spacing.js | 1 + .../data/features/css-text-wrap-balance.js | 1 + .../data/features/css-textshadow.js | 1 + .../data/features/css-touch-action.js | 1 + .../data/features/css-transitions.js | 1 + .../data/features/css-unicode-bidi.js | 1 + .../data/features/css-unset-value.js | 1 + .../data/features/css-variables.js | 1 + .../data/features/css-when-else.js | 1 + .../data/features/css-widows-orphans.js | 1 + .../data/features/css-width-stretch.js | 1 + .../data/features/css-writing-mode.js | 1 + .../caniuse-lite/data/features/css-zoom.js | 1 + .../caniuse-lite/data/features/css3-attr.js | 1 + .../data/features/css3-boxsizing.js | 1 + .../caniuse-lite/data/features/css3-colors.js | 1 + .../data/features/css3-cursors-grab.js | 1 + .../data/features/css3-cursors-newer.js | 1 + .../data/features/css3-cursors.js | 1 + .../data/features/css3-tabsize.js | 1 + .../data/features/currentcolor.js | 1 + .../data/features/custom-elements.js | 1 + .../data/features/custom-elementsv1.js | 1 + .../caniuse-lite/data/features/customevent.js | 1 + .../data/features/customizable-select.js | 1 + .../caniuse-lite/data/features/datalist.js | 1 + .../caniuse-lite/data/features/dataset.js | 1 + .../caniuse-lite/data/features/datauri.js | 1 + .../data/features/date-tolocaledatestring.js | 1 + .../data/features/declarative-shadow-dom.js | 1 + .../caniuse-lite/data/features/decorators.js | 1 + .../caniuse-lite/data/features/details.js | 1 + .../data/features/deviceorientation.js | 1 + .../data/features/devicepixelratio.js | 1 + .../caniuse-lite/data/features/dialog.js | 1 + .../data/features/dispatchevent.js | 1 + .../caniuse-lite/data/features/dnssec.js | 1 + .../data/features/do-not-track.js | 1 + .../data/features/document-currentscript.js | 1 + .../data/features/document-evaluate-xpath.js | 1 + .../data/features/document-execcommand.js | 1 + .../data/features/document-policy.js | 1 + .../features/document-scrollingelement.js | 1 + .../data/features/documenthead.js | 1 + .../data/features/dom-manip-convenience.js | 1 + .../caniuse-lite/data/features/dom-range.js | 1 + .../data/features/domcontentloaded.js | 1 + .../caniuse-lite/data/features/dommatrix.js | 1 + .../caniuse-lite/data/features/download.js | 1 + .../caniuse-lite/data/features/dragndrop.js | 1 + .../data/features/element-closest.js | 1 + .../data/features/element-from-point.js | 1 + .../data/features/element-scroll-methods.js | 1 + .../caniuse-lite/data/features/eme.js | 1 + .../caniuse-lite/data/features/eot.js | 1 + .../caniuse-lite/data/features/es5.js | 1 + .../caniuse-lite/data/features/es6-class.js | 1 + .../data/features/es6-generators.js | 1 + .../features/es6-module-dynamic-import.js | 1 + .../caniuse-lite/data/features/es6-module.js | 1 + .../caniuse-lite/data/features/es6-number.js | 1 + .../data/features/es6-string-includes.js | 1 + .../caniuse-lite/data/features/es6.js | 1 + .../caniuse-lite/data/features/eventsource.js | 1 + .../data/features/extended-system-fonts.js | 1 + .../data/features/feature-policy.js | 1 + .../caniuse-lite/data/features/fetch.js | 1 + .../data/features/fieldset-disabled.js | 1 + .../caniuse-lite/data/features/fileapi.js | 1 + .../caniuse-lite/data/features/filereader.js | 1 + .../data/features/filereadersync.js | 1 + .../caniuse-lite/data/features/filesystem.js | 1 + .../caniuse-lite/data/features/flac.js | 1 + .../caniuse-lite/data/features/flexbox-gap.js | 1 + .../caniuse-lite/data/features/flexbox.js | 1 + .../caniuse-lite/data/features/flow-root.js | 1 + .../data/features/focusin-focusout-events.js | 1 + .../data/features/font-family-system-ui.js | 1 + .../data/features/font-feature.js | 1 + .../data/features/font-kerning.js | 1 + .../data/features/font-loading.js | 1 + .../data/features/font-size-adjust.js | 1 + .../caniuse-lite/data/features/font-smooth.js | 1 + .../data/features/font-unicode-range.js | 1 + .../data/features/font-variant-alternates.js | 1 + .../data/features/font-variant-numeric.js | 1 + .../caniuse-lite/data/features/fontface.js | 1 + .../data/features/form-attribute.js | 1 + .../data/features/form-submit-attributes.js | 1 + .../data/features/form-validation.js | 1 + .../caniuse-lite/data/features/forms.js | 1 + .../caniuse-lite/data/features/fullscreen.js | 1 + .../caniuse-lite/data/features/gamepad.js | 1 + .../caniuse-lite/data/features/geolocation.js | 1 + .../data/features/getboundingclientrect.js | 1 + .../data/features/getcomputedstyle.js | 1 + .../data/features/getelementsbyclassname.js | 1 + .../data/features/getrandomvalues.js | 1 + .../caniuse-lite/data/features/gyroscope.js | 1 + .../data/features/hardwareconcurrency.js | 1 + .../caniuse-lite/data/features/hashchange.js | 1 + .../caniuse-lite/data/features/heif.js | 1 + .../caniuse-lite/data/features/hevc.js | 1 + .../caniuse-lite/data/features/hidden.js | 1 + .../data/features/high-resolution-time.js | 1 + .../caniuse-lite/data/features/history.js | 1 + .../data/features/html-media-capture.js | 1 + .../data/features/html5semantic.js | 1 + .../data/features/http-live-streaming.js | 1 + .../caniuse-lite/data/features/http2.js | 1 + .../caniuse-lite/data/features/http3.js | 1 + .../data/features/iframe-sandbox.js | 1 + .../data/features/iframe-seamless.js | 1 + .../data/features/iframe-srcdoc.js | 1 + .../data/features/imagecapture.js | 1 + .../caniuse-lite/data/features/ime.js | 1 + .../img-naturalwidth-naturalheight.js | 1 + .../caniuse-lite/data/features/import-maps.js | 1 + .../caniuse-lite/data/features/imports.js | 1 + .../data/features/indeterminate-checkbox.js | 1 + .../caniuse-lite/data/features/indexeddb.js | 1 + .../caniuse-lite/data/features/indexeddb2.js | 1 + .../data/features/inline-block.js | 1 + .../caniuse-lite/data/features/innertext.js | 1 + .../data/features/input-autocomplete-onoff.js | 1 + .../caniuse-lite/data/features/input-color.js | 1 + .../data/features/input-datetime.js | 1 + .../data/features/input-email-tel-url.js | 1 + .../caniuse-lite/data/features/input-event.js | 1 + .../data/features/input-file-accept.js | 1 + .../data/features/input-file-directory.js | 1 + .../data/features/input-file-multiple.js | 1 + .../data/features/input-inputmode.js | 1 + .../data/features/input-minlength.js | 1 + .../data/features/input-number.js | 1 + .../data/features/input-pattern.js | 1 + .../data/features/input-placeholder.js | 1 + .../caniuse-lite/data/features/input-range.js | 1 + .../data/features/input-search.js | 1 + .../data/features/input-selection.js | 1 + .../data/features/insert-adjacent.js | 1 + .../data/features/insertadjacenthtml.js | 1 + .../data/features/internationalization.js | 1 + .../data/features/intersectionobserver-v2.js | 1 + .../data/features/intersectionobserver.js | 1 + .../data/features/intl-pluralrules.js | 1 + .../data/features/intrinsic-width.js | 1 + .../caniuse-lite/data/features/jpeg2000.js | 1 + .../caniuse-lite/data/features/jpegxl.js | 1 + .../caniuse-lite/data/features/jpegxr.js | 1 + .../data/features/js-regexp-lookbehind.js | 1 + .../caniuse-lite/data/features/json.js | 1 + .../features/justify-content-space-evenly.js | 1 + .../data/features/kerning-pairs-ligatures.js | 1 + .../data/features/keyboardevent-charcode.js | 1 + .../data/features/keyboardevent-code.js | 1 + .../keyboardevent-getmodifierstate.js | 1 + .../data/features/keyboardevent-key.js | 1 + .../data/features/keyboardevent-location.js | 1 + .../data/features/keyboardevent-which.js | 1 + .../caniuse-lite/data/features/lazyload.js | 1 + .../caniuse-lite/data/features/let.js | 1 + .../data/features/link-icon-png.js | 1 + .../data/features/link-icon-svg.js | 1 + .../data/features/link-rel-dns-prefetch.js | 1 + .../data/features/link-rel-modulepreload.js | 1 + .../data/features/link-rel-preconnect.js | 1 + .../data/features/link-rel-prefetch.js | 1 + .../data/features/link-rel-preload.js | 1 + .../data/features/link-rel-prerender.js | 1 + .../data/features/loading-lazy-attr.js | 1 + .../data/features/loading-lazy-media.js | 1 + .../data/features/localecompare.js | 1 + .../data/features/magnetometer.js | 1 + .../data/features/matchesselector.js | 1 + .../caniuse-lite/data/features/matchmedia.js | 1 + .../caniuse-lite/data/features/mathml.js | 1 + .../caniuse-lite/data/features/maxlength.js | 1 + .../mdn-css-backdrop-pseudo-element.js | 1 + .../mdn-css-unicode-bidi-isolate-override.js | 1 + .../features/mdn-css-unicode-bidi-isolate.js | 1 + .../mdn-css-unicode-bidi-plaintext.js | 1 + .../features/mdn-text-decoration-color.js | 1 + .../data/features/mdn-text-decoration-line.js | 1 + .../features/mdn-text-decoration-shorthand.js | 1 + .../features/mdn-text-decoration-style.js | 1 + .../data/features/media-fragments.js | 1 + .../data/features/mediacapture-fromelement.js | 1 + .../data/features/mediarecorder.js | 1 + .../caniuse-lite/data/features/mediasource.js | 1 + .../caniuse-lite/data/features/menu.js | 1 + .../data/features/meta-theme-color.js | 1 + .../caniuse-lite/data/features/meter.js | 1 + .../caniuse-lite/data/features/midi.js | 1 + .../caniuse-lite/data/features/minmaxwh.js | 1 + .../caniuse-lite/data/features/mp3.js | 1 + .../caniuse-lite/data/features/mpeg-dash.js | 1 + .../caniuse-lite/data/features/mpeg4.js | 1 + .../data/features/multibackgrounds.js | 1 + .../caniuse-lite/data/features/multicolumn.js | 1 + .../data/features/mutation-events.js | 1 + .../data/features/mutationobserver.js | 1 + .../data/features/namevalue-storage.js | 1 + .../data/features/native-filesystem-api.js | 1 + .../caniuse-lite/data/features/nav-timing.js | 1 + .../caniuse-lite/data/features/netinfo.js | 1 + .../data/features/notifications.js | 1 + .../data/features/object-entries.js | 1 + .../caniuse-lite/data/features/object-fit.js | 1 + .../data/features/object-observe.js | 1 + .../data/features/object-values.js | 1 + .../caniuse-lite/data/features/objectrtc.js | 1 + .../data/features/offline-apps.js | 1 + .../data/features/offscreencanvas.js | 1 + .../caniuse-lite/data/features/ogg-vorbis.js | 1 + .../caniuse-lite/data/features/ogv.js | 1 + .../caniuse-lite/data/features/ol-reversed.js | 1 + .../data/features/once-event-listener.js | 1 + .../data/features/online-status.js | 1 + .../caniuse-lite/data/features/opus.js | 1 + .../data/features/orientation-sensor.js | 1 + .../caniuse-lite/data/features/outline.js | 1 + .../data/features/pad-start-end.js | 1 + .../data/features/page-transition-events.js | 1 + .../data/features/pagevisibility.js | 1 + .../data/features/passive-event-listener.js | 1 + .../caniuse-lite/data/features/passkeys.js | 1 + .../data/features/passwordrules.js | 1 + .../caniuse-lite/data/features/path2d.js | 1 + .../data/features/payment-request.js | 1 + .../caniuse-lite/data/features/pdf-viewer.js | 1 + .../data/features/permissions-api.js | 1 + .../data/features/permissions-policy.js | 1 + .../data/features/picture-in-picture.js | 1 + .../caniuse-lite/data/features/picture.js | 1 + .../caniuse-lite/data/features/ping.js | 1 + .../caniuse-lite/data/features/png-alpha.js | 1 + .../data/features/pointer-events.js | 1 + .../caniuse-lite/data/features/pointer.js | 1 + .../caniuse-lite/data/features/pointerlock.js | 1 + .../caniuse-lite/data/features/portals.js | 1 + .../data/features/prefers-color-scheme.js | 1 + .../data/features/prefers-reduced-motion.js | 1 + .../caniuse-lite/data/features/progress.js | 1 + .../data/features/promise-finally.js | 1 + .../caniuse-lite/data/features/promises.js | 1 + .../caniuse-lite/data/features/proximity.js | 1 + .../caniuse-lite/data/features/proxy.js | 1 + .../data/features/publickeypinning.js | 1 + .../caniuse-lite/data/features/push-api.js | 1 + .../data/features/queryselector.js | 1 + .../data/features/readonly-attr.js | 1 + .../data/features/referrer-policy.js | 1 + .../data/features/registerprotocolhandler.js | 1 + .../data/features/rel-noopener.js | 1 + .../data/features/rel-noreferrer.js | 1 + .../caniuse-lite/data/features/rellist.js | 1 + .../caniuse-lite/data/features/rem.js | 1 + .../data/features/requestanimationframe.js | 1 + .../data/features/requestidlecallback.js | 1 + .../data/features/resizeobserver.js | 1 + .../data/features/resource-timing.js | 1 + .../data/features/rest-parameters.js | 1 + .../data/features/rtcpeerconnection.js | 1 + .../caniuse-lite/data/features/ruby.js | 1 + .../caniuse-lite/data/features/run-in.js | 1 + .../features/same-site-cookie-attribute.js | 1 + .../data/features/screen-orientation.js | 1 + .../data/features/script-async.js | 1 + .../data/features/script-defer.js | 1 + .../data/features/scrollintoview.js | 1 + .../data/features/scrollintoviewifneeded.js | 1 + .../caniuse-lite/data/features/sdch.js | 1 + .../data/features/selection-api.js | 1 + .../data/features/server-timing.js | 1 + .../data/features/serviceworkers.js | 1 + .../data/features/setimmediate.js | 1 + .../caniuse-lite/data/features/shadowdom.js | 1 + .../caniuse-lite/data/features/shadowdomv1.js | 1 + .../data/features/sharedarraybuffer.js | 1 + .../data/features/sharedworkers.js | 1 + .../caniuse-lite/data/features/sni.js | 1 + .../caniuse-lite/data/features/spdy.js | 1 + .../data/features/speech-recognition.js | 1 + .../data/features/speech-synthesis.js | 1 + .../data/features/spellcheck-attribute.js | 1 + .../caniuse-lite/data/features/sql-storage.js | 1 + .../caniuse-lite/data/features/srcset.js | 1 + .../caniuse-lite/data/features/stream.js | 1 + .../caniuse-lite/data/features/streams.js | 1 + .../data/features/stricttransportsecurity.js | 1 + .../data/features/style-scoped.js | 1 + .../data/features/subresource-bundling.js | 1 + .../data/features/subresource-integrity.js | 1 + .../caniuse-lite/data/features/svg-css.js | 1 + .../caniuse-lite/data/features/svg-filters.js | 1 + .../caniuse-lite/data/features/svg-fonts.js | 1 + .../data/features/svg-fragment.js | 1 + .../caniuse-lite/data/features/svg-html.js | 1 + .../caniuse-lite/data/features/svg-html5.js | 1 + .../caniuse-lite/data/features/svg-img.js | 1 + .../caniuse-lite/data/features/svg-smil.js | 1 + .../caniuse-lite/data/features/svg.js | 1 + .../caniuse-lite/data/features/sxg.js | 1 + .../data/features/tabindex-attr.js | 1 + .../data/features/template-literals.js | 1 + .../caniuse-lite/data/features/template.js | 1 + .../caniuse-lite/data/features/temporal.js | 1 + .../caniuse-lite/data/features/testfeat.js | 1 + .../data/features/text-decoration.js | 1 + .../data/features/text-emphasis.js | 1 + .../data/features/text-overflow.js | 1 + .../data/features/text-size-adjust.js | 1 + .../caniuse-lite/data/features/text-stroke.js | 1 + .../caniuse-lite/data/features/textcontent.js | 1 + .../caniuse-lite/data/features/textencoder.js | 1 + .../caniuse-lite/data/features/tls1-1.js | 1 + .../caniuse-lite/data/features/tls1-2.js | 1 + .../caniuse-lite/data/features/tls1-3.js | 1 + .../caniuse-lite/data/features/touch.js | 1 + .../data/features/transforms2d.js | 1 + .../data/features/transforms3d.js | 1 + .../data/features/trusted-types.js | 1 + .../caniuse-lite/data/features/ttf.js | 1 + .../caniuse-lite/data/features/typedarrays.js | 1 + .../caniuse-lite/data/features/u2f.js | 1 + .../data/features/unhandledrejection.js | 1 + .../data/features/upgradeinsecurerequests.js | 1 + .../features/url-scroll-to-text-fragment.js | 1 + .../caniuse-lite/data/features/url.js | 1 + .../data/features/urlsearchparams.js | 1 + .../caniuse-lite/data/features/use-strict.js | 1 + .../data/features/user-select-none.js | 1 + .../caniuse-lite/data/features/user-timing.js | 1 + .../data/features/variable-fonts.js | 1 + .../data/features/vector-effect.js | 1 + .../caniuse-lite/data/features/vibration.js | 1 + .../caniuse-lite/data/features/video.js | 1 + .../caniuse-lite/data/features/videotracks.js | 1 + .../data/features/view-transitions.js | 1 + .../data/features/viewport-unit-variants.js | 1 + .../data/features/viewport-units.js | 1 + .../caniuse-lite/data/features/wai-aria.js | 1 + .../caniuse-lite/data/features/wake-lock.js | 1 + .../caniuse-lite/data/features/wasm-bigint.js | 1 + .../data/features/wasm-bulk-memory.js | 1 + .../data/features/wasm-extended-const.js | 1 + .../caniuse-lite/data/features/wasm-gc.js | 1 + .../data/features/wasm-multi-memory.js | 1 + .../data/features/wasm-multi-value.js | 1 + .../data/features/wasm-mutable-globals.js | 1 + .../data/features/wasm-nontrapping-fptoint.js | 1 + .../data/features/wasm-reference-types.js | 1 + .../data/features/wasm-relaxed-simd.js | 1 + .../data/features/wasm-signext.js | 1 + .../caniuse-lite/data/features/wasm-simd.js | 1 + .../data/features/wasm-tail-calls.js | 1 + .../data/features/wasm-threads.js | 1 + .../caniuse-lite/data/features/wasm.js | 1 + .../caniuse-lite/data/features/wav.js | 1 + .../caniuse-lite/data/features/wbr-element.js | 1 + .../data/features/web-animation.js | 1 + .../data/features/web-app-manifest.js | 1 + .../data/features/web-bluetooth.js | 1 + .../caniuse-lite/data/features/web-serial.js | 1 + .../caniuse-lite/data/features/web-share.js | 1 + .../caniuse-lite/data/features/webauthn.js | 1 + .../caniuse-lite/data/features/webcodecs.js | 1 + .../caniuse-lite/data/features/webgl.js | 1 + .../caniuse-lite/data/features/webgl2.js | 1 + .../caniuse-lite/data/features/webgpu.js | 1 + .../caniuse-lite/data/features/webhid.js | 1 + .../data/features/webkit-user-drag.js | 1 + .../caniuse-lite/data/features/webm.js | 1 + .../caniuse-lite/data/features/webnfc.js | 1 + .../caniuse-lite/data/features/webp.js | 1 + .../caniuse-lite/data/features/websockets.js | 1 + .../data/features/webtransport.js | 1 + .../caniuse-lite/data/features/webusb.js | 1 + .../caniuse-lite/data/features/webvr.js | 1 + .../caniuse-lite/data/features/webvtt.js | 1 + .../caniuse-lite/data/features/webworkers.js | 1 + .../caniuse-lite/data/features/webxr.js | 1 + .../caniuse-lite/data/features/will-change.js | 1 + .../caniuse-lite/data/features/woff.js | 1 + .../caniuse-lite/data/features/woff2.js | 1 + .../caniuse-lite/data/features/word-break.js | 1 + .../caniuse-lite/data/features/wordwrap.js | 1 + .../data/features/x-doc-messaging.js | 1 + .../data/features/x-frame-options.js | 1 + .../caniuse-lite/data/features/xhr2.js | 1 + .../caniuse-lite/data/features/xhtml.js | 1 + .../caniuse-lite/data/features/xhtmlsmil.js | 1 + .../data/features/xml-serializer.js | 1 + .../caniuse-lite/data/features/zstd.js | 1 + node_modules/caniuse-lite/data/regions/AD.js | 1 + node_modules/caniuse-lite/data/regions/AE.js | 1 + node_modules/caniuse-lite/data/regions/AF.js | 1 + node_modules/caniuse-lite/data/regions/AG.js | 1 + node_modules/caniuse-lite/data/regions/AI.js | 1 + node_modules/caniuse-lite/data/regions/AL.js | 1 + node_modules/caniuse-lite/data/regions/AM.js | 1 + node_modules/caniuse-lite/data/regions/AO.js | 1 + node_modules/caniuse-lite/data/regions/AR.js | 1 + node_modules/caniuse-lite/data/regions/AS.js | 1 + node_modules/caniuse-lite/data/regions/AT.js | 1 + node_modules/caniuse-lite/data/regions/AU.js | 1 + node_modules/caniuse-lite/data/regions/AW.js | 1 + node_modules/caniuse-lite/data/regions/AX.js | 1 + node_modules/caniuse-lite/data/regions/AZ.js | 1 + node_modules/caniuse-lite/data/regions/BA.js | 1 + node_modules/caniuse-lite/data/regions/BB.js | 1 + node_modules/caniuse-lite/data/regions/BD.js | 1 + node_modules/caniuse-lite/data/regions/BE.js | 1 + node_modules/caniuse-lite/data/regions/BF.js | 1 + node_modules/caniuse-lite/data/regions/BG.js | 1 + node_modules/caniuse-lite/data/regions/BH.js | 1 + node_modules/caniuse-lite/data/regions/BI.js | 1 + node_modules/caniuse-lite/data/regions/BJ.js | 1 + node_modules/caniuse-lite/data/regions/BM.js | 1 + node_modules/caniuse-lite/data/regions/BN.js | 1 + node_modules/caniuse-lite/data/regions/BO.js | 1 + node_modules/caniuse-lite/data/regions/BR.js | 1 + node_modules/caniuse-lite/data/regions/BS.js | 1 + node_modules/caniuse-lite/data/regions/BT.js | 1 + node_modules/caniuse-lite/data/regions/BW.js | 1 + node_modules/caniuse-lite/data/regions/BY.js | 1 + node_modules/caniuse-lite/data/regions/BZ.js | 1 + node_modules/caniuse-lite/data/regions/CA.js | 1 + node_modules/caniuse-lite/data/regions/CD.js | 1 + node_modules/caniuse-lite/data/regions/CF.js | 1 + node_modules/caniuse-lite/data/regions/CG.js | 1 + node_modules/caniuse-lite/data/regions/CH.js | 1 + node_modules/caniuse-lite/data/regions/CI.js | 1 + node_modules/caniuse-lite/data/regions/CK.js | 1 + node_modules/caniuse-lite/data/regions/CL.js | 1 + node_modules/caniuse-lite/data/regions/CM.js | 1 + node_modules/caniuse-lite/data/regions/CN.js | 1 + node_modules/caniuse-lite/data/regions/CO.js | 1 + node_modules/caniuse-lite/data/regions/CR.js | 1 + node_modules/caniuse-lite/data/regions/CU.js | 1 + node_modules/caniuse-lite/data/regions/CV.js | 1 + node_modules/caniuse-lite/data/regions/CX.js | 1 + node_modules/caniuse-lite/data/regions/CY.js | 1 + node_modules/caniuse-lite/data/regions/CZ.js | 1 + node_modules/caniuse-lite/data/regions/DE.js | 1 + node_modules/caniuse-lite/data/regions/DJ.js | 1 + node_modules/caniuse-lite/data/regions/DK.js | 1 + node_modules/caniuse-lite/data/regions/DM.js | 1 + node_modules/caniuse-lite/data/regions/DO.js | 1 + node_modules/caniuse-lite/data/regions/DZ.js | 1 + node_modules/caniuse-lite/data/regions/EC.js | 1 + node_modules/caniuse-lite/data/regions/EE.js | 1 + node_modules/caniuse-lite/data/regions/EG.js | 1 + node_modules/caniuse-lite/data/regions/ER.js | 1 + node_modules/caniuse-lite/data/regions/ES.js | 1 + node_modules/caniuse-lite/data/regions/ET.js | 1 + node_modules/caniuse-lite/data/regions/FI.js | 1 + node_modules/caniuse-lite/data/regions/FJ.js | 1 + node_modules/caniuse-lite/data/regions/FK.js | 1 + node_modules/caniuse-lite/data/regions/FM.js | 1 + node_modules/caniuse-lite/data/regions/FO.js | 1 + node_modules/caniuse-lite/data/regions/FR.js | 1 + node_modules/caniuse-lite/data/regions/GA.js | 1 + node_modules/caniuse-lite/data/regions/GB.js | 1 + node_modules/caniuse-lite/data/regions/GD.js | 1 + node_modules/caniuse-lite/data/regions/GE.js | 1 + node_modules/caniuse-lite/data/regions/GF.js | 1 + node_modules/caniuse-lite/data/regions/GG.js | 1 + node_modules/caniuse-lite/data/regions/GH.js | 1 + node_modules/caniuse-lite/data/regions/GI.js | 1 + node_modules/caniuse-lite/data/regions/GL.js | 1 + node_modules/caniuse-lite/data/regions/GM.js | 1 + node_modules/caniuse-lite/data/regions/GN.js | 1 + node_modules/caniuse-lite/data/regions/GP.js | 1 + node_modules/caniuse-lite/data/regions/GQ.js | 1 + node_modules/caniuse-lite/data/regions/GR.js | 1 + node_modules/caniuse-lite/data/regions/GT.js | 1 + node_modules/caniuse-lite/data/regions/GU.js | 1 + node_modules/caniuse-lite/data/regions/GW.js | 1 + node_modules/caniuse-lite/data/regions/GY.js | 1 + node_modules/caniuse-lite/data/regions/HK.js | 1 + node_modules/caniuse-lite/data/regions/HN.js | 1 + node_modules/caniuse-lite/data/regions/HR.js | 1 + node_modules/caniuse-lite/data/regions/HT.js | 1 + node_modules/caniuse-lite/data/regions/HU.js | 1 + node_modules/caniuse-lite/data/regions/ID.js | 1 + node_modules/caniuse-lite/data/regions/IE.js | 1 + node_modules/caniuse-lite/data/regions/IL.js | 1 + node_modules/caniuse-lite/data/regions/IM.js | 1 + node_modules/caniuse-lite/data/regions/IN.js | 1 + node_modules/caniuse-lite/data/regions/IQ.js | 1 + node_modules/caniuse-lite/data/regions/IR.js | 1 + node_modules/caniuse-lite/data/regions/IS.js | 1 + node_modules/caniuse-lite/data/regions/IT.js | 1 + node_modules/caniuse-lite/data/regions/JE.js | 1 + node_modules/caniuse-lite/data/regions/JM.js | 1 + node_modules/caniuse-lite/data/regions/JO.js | 1 + node_modules/caniuse-lite/data/regions/JP.js | 1 + node_modules/caniuse-lite/data/regions/KE.js | 1 + node_modules/caniuse-lite/data/regions/KG.js | 1 + node_modules/caniuse-lite/data/regions/KH.js | 1 + node_modules/caniuse-lite/data/regions/KI.js | 1 + node_modules/caniuse-lite/data/regions/KM.js | 1 + node_modules/caniuse-lite/data/regions/KN.js | 1 + node_modules/caniuse-lite/data/regions/KP.js | 1 + node_modules/caniuse-lite/data/regions/KR.js | 1 + node_modules/caniuse-lite/data/regions/KW.js | 1 + node_modules/caniuse-lite/data/regions/KY.js | 1 + node_modules/caniuse-lite/data/regions/KZ.js | 1 + node_modules/caniuse-lite/data/regions/LA.js | 1 + node_modules/caniuse-lite/data/regions/LB.js | 1 + node_modules/caniuse-lite/data/regions/LC.js | 1 + node_modules/caniuse-lite/data/regions/LI.js | 1 + node_modules/caniuse-lite/data/regions/LK.js | 1 + node_modules/caniuse-lite/data/regions/LR.js | 1 + node_modules/caniuse-lite/data/regions/LS.js | 1 + node_modules/caniuse-lite/data/regions/LT.js | 1 + node_modules/caniuse-lite/data/regions/LU.js | 1 + node_modules/caniuse-lite/data/regions/LV.js | 1 + node_modules/caniuse-lite/data/regions/LY.js | 1 + node_modules/caniuse-lite/data/regions/MA.js | 1 + node_modules/caniuse-lite/data/regions/MC.js | 1 + node_modules/caniuse-lite/data/regions/MD.js | 1 + node_modules/caniuse-lite/data/regions/ME.js | 1 + node_modules/caniuse-lite/data/regions/MG.js | 1 + node_modules/caniuse-lite/data/regions/MH.js | 1 + node_modules/caniuse-lite/data/regions/MK.js | 1 + node_modules/caniuse-lite/data/regions/ML.js | 1 + node_modules/caniuse-lite/data/regions/MM.js | 1 + node_modules/caniuse-lite/data/regions/MN.js | 1 + node_modules/caniuse-lite/data/regions/MO.js | 1 + node_modules/caniuse-lite/data/regions/MP.js | 1 + node_modules/caniuse-lite/data/regions/MQ.js | 1 + node_modules/caniuse-lite/data/regions/MR.js | 1 + node_modules/caniuse-lite/data/regions/MS.js | 1 + node_modules/caniuse-lite/data/regions/MT.js | 1 + node_modules/caniuse-lite/data/regions/MU.js | 1 + node_modules/caniuse-lite/data/regions/MV.js | 1 + node_modules/caniuse-lite/data/regions/MW.js | 1 + node_modules/caniuse-lite/data/regions/MX.js | 1 + node_modules/caniuse-lite/data/regions/MY.js | 1 + node_modules/caniuse-lite/data/regions/MZ.js | 1 + node_modules/caniuse-lite/data/regions/NA.js | 1 + node_modules/caniuse-lite/data/regions/NC.js | 1 + node_modules/caniuse-lite/data/regions/NE.js | 1 + node_modules/caniuse-lite/data/regions/NF.js | 1 + node_modules/caniuse-lite/data/regions/NG.js | 1 + node_modules/caniuse-lite/data/regions/NI.js | 1 + node_modules/caniuse-lite/data/regions/NL.js | 1 + node_modules/caniuse-lite/data/regions/NO.js | 1 + node_modules/caniuse-lite/data/regions/NP.js | 1 + node_modules/caniuse-lite/data/regions/NR.js | 1 + node_modules/caniuse-lite/data/regions/NU.js | 1 + node_modules/caniuse-lite/data/regions/NZ.js | 1 + node_modules/caniuse-lite/data/regions/OM.js | 1 + node_modules/caniuse-lite/data/regions/PA.js | 1 + node_modules/caniuse-lite/data/regions/PE.js | 1 + node_modules/caniuse-lite/data/regions/PF.js | 1 + node_modules/caniuse-lite/data/regions/PG.js | 1 + node_modules/caniuse-lite/data/regions/PH.js | 1 + node_modules/caniuse-lite/data/regions/PK.js | 1 + node_modules/caniuse-lite/data/regions/PL.js | 1 + node_modules/caniuse-lite/data/regions/PM.js | 1 + node_modules/caniuse-lite/data/regions/PN.js | 1 + node_modules/caniuse-lite/data/regions/PR.js | 1 + node_modules/caniuse-lite/data/regions/PS.js | 1 + node_modules/caniuse-lite/data/regions/PT.js | 1 + node_modules/caniuse-lite/data/regions/PW.js | 1 + node_modules/caniuse-lite/data/regions/PY.js | 1 + node_modules/caniuse-lite/data/regions/QA.js | 1 + node_modules/caniuse-lite/data/regions/RE.js | 1 + node_modules/caniuse-lite/data/regions/RO.js | 1 + node_modules/caniuse-lite/data/regions/RS.js | 1 + node_modules/caniuse-lite/data/regions/RU.js | 1 + node_modules/caniuse-lite/data/regions/RW.js | 1 + node_modules/caniuse-lite/data/regions/SA.js | 1 + node_modules/caniuse-lite/data/regions/SB.js | 1 + node_modules/caniuse-lite/data/regions/SC.js | 1 + node_modules/caniuse-lite/data/regions/SD.js | 1 + node_modules/caniuse-lite/data/regions/SE.js | 1 + node_modules/caniuse-lite/data/regions/SG.js | 1 + node_modules/caniuse-lite/data/regions/SH.js | 1 + node_modules/caniuse-lite/data/regions/SI.js | 1 + node_modules/caniuse-lite/data/regions/SK.js | 1 + node_modules/caniuse-lite/data/regions/SL.js | 1 + node_modules/caniuse-lite/data/regions/SM.js | 1 + node_modules/caniuse-lite/data/regions/SN.js | 1 + node_modules/caniuse-lite/data/regions/SO.js | 1 + node_modules/caniuse-lite/data/regions/SR.js | 1 + node_modules/caniuse-lite/data/regions/ST.js | 1 + node_modules/caniuse-lite/data/regions/SV.js | 1 + node_modules/caniuse-lite/data/regions/SY.js | 1 + node_modules/caniuse-lite/data/regions/SZ.js | 1 + node_modules/caniuse-lite/data/regions/TC.js | 1 + node_modules/caniuse-lite/data/regions/TD.js | 1 + node_modules/caniuse-lite/data/regions/TG.js | 1 + node_modules/caniuse-lite/data/regions/TH.js | 1 + node_modules/caniuse-lite/data/regions/TJ.js | 1 + node_modules/caniuse-lite/data/regions/TL.js | 1 + node_modules/caniuse-lite/data/regions/TM.js | 1 + node_modules/caniuse-lite/data/regions/TN.js | 1 + node_modules/caniuse-lite/data/regions/TO.js | 1 + node_modules/caniuse-lite/data/regions/TR.js | 1 + node_modules/caniuse-lite/data/regions/TT.js | 1 + node_modules/caniuse-lite/data/regions/TV.js | 1 + node_modules/caniuse-lite/data/regions/TW.js | 1 + node_modules/caniuse-lite/data/regions/TZ.js | 1 + node_modules/caniuse-lite/data/regions/UA.js | 1 + node_modules/caniuse-lite/data/regions/UG.js | 1 + node_modules/caniuse-lite/data/regions/US.js | 1 + node_modules/caniuse-lite/data/regions/UY.js | 1 + node_modules/caniuse-lite/data/regions/UZ.js | 1 + node_modules/caniuse-lite/data/regions/VA.js | 1 + node_modules/caniuse-lite/data/regions/VC.js | 1 + node_modules/caniuse-lite/data/regions/VE.js | 1 + node_modules/caniuse-lite/data/regions/VG.js | 1 + node_modules/caniuse-lite/data/regions/VI.js | 1 + node_modules/caniuse-lite/data/regions/VN.js | 1 + node_modules/caniuse-lite/data/regions/VU.js | 1 + node_modules/caniuse-lite/data/regions/WF.js | 1 + node_modules/caniuse-lite/data/regions/WS.js | 1 + node_modules/caniuse-lite/data/regions/YE.js | 1 + node_modules/caniuse-lite/data/regions/YT.js | 1 + node_modules/caniuse-lite/data/regions/ZA.js | 1 + node_modules/caniuse-lite/data/regions/ZM.js | 1 + node_modules/caniuse-lite/data/regions/ZW.js | 1 + .../caniuse-lite/data/regions/alt-af.js | 1 + .../caniuse-lite/data/regions/alt-an.js | 1 + .../caniuse-lite/data/regions/alt-as.js | 1 + .../caniuse-lite/data/regions/alt-eu.js | 1 + .../caniuse-lite/data/regions/alt-na.js | 1 + .../caniuse-lite/data/regions/alt-oc.js | 1 + .../caniuse-lite/data/regions/alt-sa.js | 1 + .../caniuse-lite/data/regions/alt-ww.js | 1 + .../caniuse-lite/dist/lib/statuses.js | 9 + .../caniuse-lite/dist/lib/supported.js | 9 + .../caniuse-lite/dist/unpacker/agents.js | 47 + .../dist/unpacker/browserVersions.js | 1 + .../caniuse-lite/dist/unpacker/browsers.js | 1 + .../caniuse-lite/dist/unpacker/feature.js | 52 + .../caniuse-lite/dist/unpacker/features.js | 6 + .../caniuse-lite/dist/unpacker/index.js | 4 + .../caniuse-lite/dist/unpacker/region.js | 22 + node_modules/caniuse-lite/package.json | 34 + node_modules/detect-libc/LICENSE | 201 + node_modules/detect-libc/README.md | 163 + node_modules/detect-libc/index.d.ts | 14 + node_modules/detect-libc/lib/detect-libc.js | 313 + node_modules/detect-libc/lib/elf.js | 39 + node_modules/detect-libc/lib/filesystem.js | 51 + node_modules/detect-libc/lib/process.js | 24 + node_modules/detect-libc/package.json | 44 + node_modules/electron-to-chromium/LICENSE | 5 + node_modules/electron-to-chromium/README.md | 186 + .../electron-to-chromium/chromium-versions.js | 87 + .../chromium-versions.json | 1 + .../full-chromium-versions.js | 2753 ++++ .../full-chromium-versions.json | 1 + .../electron-to-chromium/full-versions.js | 1751 +++ .../electron-to-chromium/full-versions.json | 1 + node_modules/electron-to-chromium/index.js | 36 + .../electron-to-chromium/package.json | 43 + node_modules/electron-to-chromium/versions.js | 242 + .../electron-to-chromium/versions.json | 1 + node_modules/enhanced-resolve/LICENSE | 20 + node_modules/enhanced-resolve/README.md | 190 + .../enhanced-resolve/lib/AliasFieldPlugin.js | 103 + .../enhanced-resolve/lib/AliasPlugin.js | 47 + .../enhanced-resolve/lib/AliasUtils.js | 172 + .../enhanced-resolve/lib/AppendPlugin.js | 49 + .../lib/CachedInputFileSystem.js | 677 + .../lib/CloneBasenamePlugin.js | 53 + .../enhanced-resolve/lib/ConditionalPlugin.js | 59 + .../lib/DescriptionFilePlugin.js | 98 + .../lib/DescriptionFileUtils.js | 200 + .../lib/DirectoryExistsPlugin.js | 68 + .../lib/ExportsFieldPlugin.js | 206 + .../lib/ExtensionAliasPlugin.js | 100 + .../enhanced-resolve/lib/FileExistsPlugin.js | 61 + .../lib/ImportsFieldPlugin.js | 223 + .../lib/JoinRequestPartPlugin.js | 75 + .../enhanced-resolve/lib/JoinRequestPlugin.js | 45 + .../enhanced-resolve/lib/LogInfoPlugin.js | 58 + .../enhanced-resolve/lib/MainFieldPlugin.js | 87 + .../ModulesInHierachicDirectoriesPlugin.js | 9 + .../ModulesInHierarchicalDirectoriesPlugin.js | 47 + .../lib/ModulesInRootPlugin.js | 49 + .../enhanced-resolve/lib/ModulesUtils.js | 83 + .../enhanced-resolve/lib/NextPlugin.js | 33 + .../enhanced-resolve/lib/ParsePlugin.js | 77 + .../enhanced-resolve/lib/PnpPlugin.js | 134 + node_modules/enhanced-resolve/lib/Resolver.js | 821 ++ .../enhanced-resolve/lib/ResolverFactory.js | 743 ++ .../lib/RestrictionsPlugin.js | 70 + .../enhanced-resolve/lib/ResultPlugin.js | 43 + .../enhanced-resolve/lib/RootsPlugin.js | 69 + .../lib/SelfReferencePlugin.js | 82 + .../enhanced-resolve/lib/SymlinkPlugin.js | 101 + .../lib/SyncAsyncFileSystemDecorator.js | 258 + .../enhanced-resolve/lib/TryNextPlugin.js | 41 + .../lib/TsconfigPathsPlugin.js | 606 + .../enhanced-resolve/lib/UnsafeCachePlugin.js | 165 + .../enhanced-resolve/lib/UseFilePlugin.js | 55 + .../lib/createInnerContext.js | 46 + .../enhanced-resolve/lib/forEachBail.js | 50 + .../enhanced-resolve/lib/getInnerRequest.js | 39 + node_modules/enhanced-resolve/lib/getPaths.js | 45 + node_modules/enhanced-resolve/lib/index.js | 229 + .../enhanced-resolve/lib/util/entrypoints.js | 577 + node_modules/enhanced-resolve/lib/util/fs.js | 52 + .../enhanced-resolve/lib/util/identifier.js | 77 + .../enhanced-resolve/lib/util/memoize.js | 37 + .../lib/util/module-browser.js | 8 + .../enhanced-resolve/lib/util/path.js | 250 + .../lib/util/process-browser.js | 23 + .../lib/util/strip-json-comments.js | 177 + node_modules/enhanced-resolve/package.json | 80 + node_modules/enhanced-resolve/types.d.ts | 1748 +++ node_modules/escalade/dist/index.js | 22 + node_modules/escalade/dist/index.mjs | 22 + node_modules/escalade/index.d.mts | 11 + node_modules/escalade/index.d.ts | 15 + node_modules/escalade/license | 9 + node_modules/escalade/package.json | 74 + node_modules/escalade/readme.md | 211 + node_modules/escalade/sync/index.d.mts | 9 + node_modules/escalade/sync/index.d.ts | 13 + node_modules/escalade/sync/index.js | 18 + node_modules/escalade/sync/index.mjs | 18 + node_modules/fraction.js/CHANGELOG.md | 38 + node_modules/fraction.js/LICENSE | 21 + node_modules/fraction.js/README.md | 520 + node_modules/fraction.js/dist/fraction.js | 1045 ++ node_modules/fraction.js/dist/fraction.min.js | 21 + node_modules/fraction.js/dist/fraction.mjs | 1043 ++ node_modules/fraction.js/examples/angles.js | 26 + node_modules/fraction.js/examples/approx.js | 54 + node_modules/fraction.js/examples/egyptian.js | 24 + .../fraction.js/examples/hesse-convergence.js | 111 + .../fraction.js/examples/integrate.js | 67 + .../fraction.js/examples/ratio-chain.js | 24 + .../fraction.js/examples/rational-pow.js | 29 + .../fraction.js/examples/tape-measure.js | 16 + .../fraction.js/examples/toFraction.js | 35 + .../fraction.js/examples/valueOfPi.js | 42 + node_modules/fraction.js/fraction.d.mts | 79 + node_modules/fraction.js/fraction.d.ts | 79 + node_modules/fraction.js/package.json | 81 + node_modules/fraction.js/src/fraction.js | 1046 ++ .../fraction.js/tests/fraction.test.js | 1806 +++ node_modules/graceful-fs/LICENSE | 15 + node_modules/graceful-fs/README.md | 143 + node_modules/graceful-fs/clone.js | 23 + node_modules/graceful-fs/graceful-fs.js | 448 + node_modules/graceful-fs/legacy-streams.js | 118 + node_modules/graceful-fs/package.json | 53 + node_modules/graceful-fs/polyfills.js | 355 + node_modules/is-extglob/LICENSE | 21 + node_modules/is-extglob/README.md | 107 + node_modules/is-extglob/index.js | 20 + node_modules/is-extglob/package.json | 69 + node_modules/is-glob/LICENSE | 21 + node_modules/is-glob/README.md | 206 + node_modules/is-glob/index.js | 150 + node_modules/is-glob/package.json | 81 + node_modules/jiti/LICENSE | 21 + node_modules/jiti/README.md | 243 + node_modules/jiti/dist/babel.cjs | 246 + node_modules/jiti/dist/jiti.cjs | 1 + node_modules/jiti/lib/jiti-cli.mjs | 34 + node_modules/jiti/lib/jiti-hooks.mjs | 124 + node_modules/jiti/lib/jiti-native.mjs | 121 + node_modules/jiti/lib/jiti-register.d.mts | 1 + node_modules/jiti/lib/jiti-register.mjs | 4 + node_modules/jiti/lib/jiti.cjs | 30 + node_modules/jiti/lib/jiti.d.cts | 8 + node_modules/jiti/lib/jiti.d.mts | 8 + node_modules/jiti/lib/jiti.mjs | 29 + node_modules/jiti/lib/types.d.ts | 363 + node_modules/jiti/package.json | 133 + .../lightningcss-darwin-arm64/LICENSE | 373 + .../lightningcss-darwin-arm64/README.md | 1 + .../lightningcss.darwin-arm64.node | Bin 0 -> 8516384 bytes .../lightningcss-darwin-arm64/package.json | 34 + node_modules/lightningcss/LICENSE | 373 + node_modules/lightningcss/README.md | 105 + node_modules/lightningcss/node/ast.d.ts | 9892 +++++++++++++++ node_modules/lightningcss/node/ast.js.flow | 10539 ++++++++++++++++ .../node/browserslistToTargets.js | 48 + .../lightningcss/node/composeVisitors.js | 450 + node_modules/lightningcss/node/flags.js | 28 + node_modules/lightningcss/node/index.d.ts | 494 + node_modules/lightningcss/node/index.js | 59 + node_modules/lightningcss/node/index.js.flow | 843 ++ node_modules/lightningcss/node/index.mjs | 4 + node_modules/lightningcss/node/targets.d.ts | 40 + .../lightningcss/node/targets.js.flow | 39 + node_modules/lightningcss/package.json | 110 + node_modules/magic-string/LICENSE | 7 + node_modules/magic-string/README.md | 325 + .../magic-string/dist/magic-string.cjs.d.ts | 289 + .../magic-string/dist/magic-string.cjs.js | 1594 +++ .../magic-string/dist/magic-string.cjs.js.map | 1 + .../magic-string/dist/magic-string.es.d.mts | 289 + .../magic-string/dist/magic-string.es.mjs | 1588 +++ .../magic-string/dist/magic-string.es.mjs.map | 1 + .../magic-string/dist/magic-string.umd.js | 1682 +++ .../magic-string/dist/magic-string.umd.js.map | 1 + node_modules/magic-string/package.json | 67 + node_modules/mri/index.d.ts | 21 + node_modules/mri/lib/index.js | 119 + node_modules/mri/lib/index.mjs | 119 + node_modules/mri/license.md | 21 + node_modules/mri/package.json | 43 + node_modules/mri/readme.md | 166 + node_modules/nanoid/LICENSE | 20 + node_modules/nanoid/README.md | 39 + node_modules/nanoid/async/index.browser.cjs | 69 + node_modules/nanoid/async/index.browser.js | 34 + node_modules/nanoid/async/index.cjs | 71 + node_modules/nanoid/async/index.d.ts | 56 + node_modules/nanoid/async/index.js | 35 + node_modules/nanoid/async/index.native.js | 26 + node_modules/nanoid/async/package.json | 12 + node_modules/nanoid/bin/nanoid.cjs | 55 + node_modules/nanoid/index.browser.cjs | 72 + node_modules/nanoid/index.browser.js | 34 + node_modules/nanoid/index.cjs | 85 + node_modules/nanoid/index.d.cts | 91 + node_modules/nanoid/index.d.ts | 91 + node_modules/nanoid/index.js | 45 + node_modules/nanoid/nanoid.js | 1 + node_modules/nanoid/non-secure/index.cjs | 34 + node_modules/nanoid/non-secure/index.d.ts | 33 + node_modules/nanoid/non-secure/index.js | 21 + node_modules/nanoid/non-secure/package.json | 6 + node_modules/nanoid/package.json | 89 + node_modules/nanoid/url-alphabet/index.cjs | 7 + node_modules/nanoid/url-alphabet/index.js | 3 + node_modules/nanoid/url-alphabet/package.json | 6 + node_modules/node-addon-api/LICENSE.md | 9 + node_modules/node-addon-api/README.md | 319 + node_modules/node-addon-api/common.gypi | 20 + node_modules/node-addon-api/except.gypi | 25 + node_modules/node-addon-api/index.js | 12 + .../node-addon-api/napi-inl.deprecated.h | 186 + node_modules/node-addon-api/napi-inl.h | 6607 ++++++++++ node_modules/node-addon-api/napi.h | 3201 +++++ .../node-addon-api/node_addon_api.gyp | 32 + node_modules/node-addon-api/node_api.gyp | 9 + node_modules/node-addon-api/noexcept.gypi | 26 + node_modules/node-addon-api/nothing.c | 0 .../node-addon-api/package-support.json | 21 + node_modules/node-addon-api/package.json | 480 + node_modules/node-addon-api/tools/README.md | 73 + .../node-addon-api/tools/check-napi.js | 99 + .../node-addon-api/tools/clang-format.js | 71 + .../node-addon-api/tools/conversion.js | 301 + .../node-addon-api/tools/eslint-format.js | 79 + node_modules/node-releases/LICENSE | 21 + node_modules/node-releases/README.md | 12 + .../node-releases/data/processed/envs.json | 1 + .../release-schedule/release-schedule.json | 1 + node_modules/node-releases/package.json | 22 + node_modules/picocolors/LICENSE | 15 + node_modules/picocolors/README.md | 21 + node_modules/picocolors/package.json | 25 + node_modules/picocolors/picocolors.browser.js | 4 + node_modules/picocolors/picocolors.d.ts | 5 + node_modules/picocolors/picocolors.js | 75 + node_modules/picocolors/types.d.ts | 51 + node_modules/picomatch/LICENSE | 21 + node_modules/picomatch/README.md | 749 ++ node_modules/picomatch/index.js | 17 + node_modules/picomatch/lib/constants.js | 184 + node_modules/picomatch/lib/parse.js | 1386 ++ node_modules/picomatch/lib/picomatch.js | 349 + node_modules/picomatch/lib/scan.js | 391 + node_modules/picomatch/lib/utils.js | 72 + node_modules/picomatch/package.json | 82 + node_modules/picomatch/posix.js | 3 + node_modules/postcss-value-parser/LICENSE | 22 + node_modules/postcss-value-parser/README.md | 263 + .../postcss-value-parser/lib/index.d.ts | 177 + .../postcss-value-parser/lib/index.js | 28 + .../postcss-value-parser/lib/parse.js | 321 + .../postcss-value-parser/lib/stringify.js | 48 + node_modules/postcss-value-parser/lib/unit.js | 120 + node_modules/postcss-value-parser/lib/walk.js | 22 + .../postcss-value-parser/package.json | 58 + node_modules/postcss/LICENSE | 20 + node_modules/postcss/README.md | 29 + node_modules/postcss/lib/at-rule.d.ts | 140 + node_modules/postcss/lib/at-rule.js | 25 + node_modules/postcss/lib/comment.d.ts | 68 + node_modules/postcss/lib/comment.js | 13 + node_modules/postcss/lib/container.d.ts | 483 + node_modules/postcss/lib/container.js | 447 + .../postcss/lib/css-syntax-error.d.ts | 248 + node_modules/postcss/lib/css-syntax-error.js | 133 + node_modules/postcss/lib/declaration.d.ts | 151 + node_modules/postcss/lib/declaration.js | 24 + node_modules/postcss/lib/document.d.ts | 69 + node_modules/postcss/lib/document.js | 33 + node_modules/postcss/lib/fromJSON.d.ts | 9 + node_modules/postcss/lib/fromJSON.js | 54 + node_modules/postcss/lib/input.d.ts | 227 + node_modules/postcss/lib/input.js | 265 + node_modules/postcss/lib/lazy-result.d.ts | 190 + node_modules/postcss/lib/lazy-result.js | 550 + node_modules/postcss/lib/list.d.ts | 60 + node_modules/postcss/lib/list.js | 58 + node_modules/postcss/lib/map-generator.js | 376 + node_modules/postcss/lib/no-work-result.d.ts | 46 + node_modules/postcss/lib/no-work-result.js | 137 + node_modules/postcss/lib/node.d.ts | 556 + node_modules/postcss/lib/node.js | 449 + node_modules/postcss/lib/parse.d.ts | 9 + node_modules/postcss/lib/parse.js | 42 + node_modules/postcss/lib/parser.js | 611 + node_modules/postcss/lib/postcss.d.mts | 69 + node_modules/postcss/lib/postcss.d.ts | 458 + node_modules/postcss/lib/postcss.js | 101 + node_modules/postcss/lib/postcss.mjs | 30 + node_modules/postcss/lib/previous-map.d.ts | 81 + node_modules/postcss/lib/previous-map.js | 144 + node_modules/postcss/lib/processor.d.ts | 115 + node_modules/postcss/lib/processor.js | 67 + node_modules/postcss/lib/result.d.ts | 205 + node_modules/postcss/lib/result.js | 42 + node_modules/postcss/lib/root.d.ts | 87 + node_modules/postcss/lib/root.js | 61 + node_modules/postcss/lib/rule.d.ts | 126 + node_modules/postcss/lib/rule.js | 27 + node_modules/postcss/lib/stringifier.d.ts | 46 + node_modules/postcss/lib/stringifier.js | 353 + node_modules/postcss/lib/stringify.d.ts | 9 + node_modules/postcss/lib/stringify.js | 11 + node_modules/postcss/lib/symbols.js | 5 + .../postcss/lib/terminal-highlight.js | 70 + node_modules/postcss/lib/tokenize.js | 266 + node_modules/postcss/lib/warn-once.js | 13 + node_modules/postcss/lib/warning.d.ts | 147 + node_modules/postcss/lib/warning.js | 37 + node_modules/postcss/package.json | 88 + node_modules/source-map-js/LICENSE | 28 + node_modules/source-map-js/README.md | 765 ++ node_modules/source-map-js/lib/array-set.js | 121 + node_modules/source-map-js/lib/base64-vlq.js | 140 + node_modules/source-map-js/lib/base64.js | 67 + .../source-map-js/lib/binary-search.js | 111 + .../source-map-js/lib/mapping-list.js | 79 + node_modules/source-map-js/lib/quick-sort.js | 132 + .../lib/source-map-consumer.d.ts | 1 + .../source-map-js/lib/source-map-consumer.js | 1188 ++ .../lib/source-map-generator.d.ts | 1 + .../source-map-js/lib/source-map-generator.js | 444 + .../source-map-js/lib/source-node.d.ts | 1 + node_modules/source-map-js/lib/source-node.js | 413 + node_modules/source-map-js/lib/util.js | 594 + node_modules/source-map-js/package.json | 71 + node_modules/source-map-js/source-map.d.ts | 104 + node_modules/source-map-js/source-map.js | 8 + node_modules/tailwindcss/LICENSE | 21 + node_modules/tailwindcss/README.md | 36 + .../tailwindcss/dist/chunk-F4544Y4M.mjs | 38 + .../tailwindcss/dist/chunk-TDNFF6A4.mjs | 1 + .../tailwindcss/dist/chunk-X4GG3EDV.mjs | 1 + .../tailwindcss/dist/colors-C__qRT83.d.ts | 347 + node_modules/tailwindcss/dist/colors.d.mts | 347 + node_modules/tailwindcss/dist/colors.d.ts | 5 + node_modules/tailwindcss/dist/colors.js | 1 + node_modules/tailwindcss/dist/colors.mjs | 1 + .../tailwindcss/dist/default-theme.d.mts | 1199 ++ .../tailwindcss/dist/default-theme.d.ts | 1199 ++ .../tailwindcss/dist/default-theme.js | 1 + .../tailwindcss/dist/default-theme.mjs | 1 + .../dist/flatten-color-palette.d.mts | 6 + .../dist/flatten-color-palette.d.ts | 6 + .../tailwindcss/dist/flatten-color-palette.js | 3 + .../dist/flatten-color-palette.mjs | 1 + node_modules/tailwindcss/dist/lib.d.mts | 378 + node_modules/tailwindcss/dist/lib.d.ts | 3 + node_modules/tailwindcss/dist/lib.js | 38 + node_modules/tailwindcss/dist/lib.mjs | 1 + node_modules/tailwindcss/dist/plugin.d.mts | 11 + node_modules/tailwindcss/dist/plugin.d.ts | 134 + node_modules/tailwindcss/dist/plugin.js | 1 + node_modules/tailwindcss/dist/plugin.mjs | 1 + .../dist/resolve-config-B4yBzhca.d.ts | 29 + .../dist/resolve-config-QUZ9b-Gn.d.mts | 190 + .../tailwindcss/dist/types-CJYAW1ql.d.mts | 128 + node_modules/tailwindcss/index.css | 944 ++ node_modules/tailwindcss/package.json | 89 + node_modules/tailwindcss/preflight.css | 393 + node_modules/tailwindcss/theme.css | 510 + node_modules/tailwindcss/utilities.css | 1 + node_modules/tapable/LICENSE | 21 + node_modules/tapable/README.md | 332 + .../tapable/lib/AsyncParallelBailHook.js | 87 + node_modules/tapable/lib/AsyncParallelHook.js | 37 + .../tapable/lib/AsyncSeriesBailHook.js | 42 + node_modules/tapable/lib/AsyncSeriesHook.js | 37 + .../tapable/lib/AsyncSeriesLoopHook.js | 37 + .../tapable/lib/AsyncSeriesWaterfallHook.js | 48 + node_modules/tapable/lib/Hook.js | 186 + node_modules/tapable/lib/HookCodeFactory.js | 454 + node_modules/tapable/lib/HookMap.js | 69 + node_modules/tapable/lib/MultiHook.js | 52 + node_modules/tapable/lib/SyncBailHook.js | 51 + node_modules/tapable/lib/SyncHook.js | 46 + node_modules/tapable/lib/SyncLoopHook.js | 46 + node_modules/tapable/lib/SyncWaterfallHook.js | 58 + node_modules/tapable/lib/index.js | 19 + node_modules/tapable/lib/util-browser.js | 18 + node_modules/tapable/package.json | 63 + node_modules/tapable/tapable.d.ts | 174 + node_modules/update-browserslist-db/LICENSE | 20 + node_modules/update-browserslist-db/README.md | 30 + .../check-npm-version.js | 17 + node_modules/update-browserslist-db/cli.js | 42 + .../update-browserslist-db/index.d.ts | 6 + node_modules/update-browserslist-db/index.js | 347 + .../update-browserslist-db/package.json | 40 + node_modules/update-browserslist-db/utils.js | 25 + package-lock.json | 1274 ++ package.json | 31 + tailwind.config.js | 14 + 1557 files changed, 125051 insertions(+) create mode 100644 assets/global.css create mode 100644 assets/tailwind.css create mode 120000 node_modules/.bin/autoprefixer create mode 120000 node_modules/.bin/baseline-browser-mapping create mode 120000 node_modules/.bin/browserslist create mode 120000 node_modules/.bin/jiti create mode 120000 node_modules/.bin/nanoid create mode 120000 node_modules/.bin/tailwindcss create mode 120000 node_modules/.bin/update-browserslist-db create mode 100644 node_modules/.package-lock.json create mode 100644 node_modules/@jridgewell/gen-mapping/LICENSE create mode 100644 node_modules/@jridgewell/gen-mapping/README.md create mode 100644 node_modules/@jridgewell/gen-mapping/dist/gen-mapping.mjs create mode 100644 node_modules/@jridgewell/gen-mapping/dist/gen-mapping.mjs.map create mode 100644 node_modules/@jridgewell/gen-mapping/dist/gen-mapping.umd.js create mode 100644 node_modules/@jridgewell/gen-mapping/dist/gen-mapping.umd.js.map create mode 100644 node_modules/@jridgewell/gen-mapping/dist/types/gen-mapping.d.ts create mode 100644 node_modules/@jridgewell/gen-mapping/dist/types/set-array.d.ts create mode 100644 node_modules/@jridgewell/gen-mapping/dist/types/sourcemap-segment.d.ts create mode 100644 node_modules/@jridgewell/gen-mapping/dist/types/types.d.ts create mode 100644 node_modules/@jridgewell/gen-mapping/package.json create mode 100644 node_modules/@jridgewell/gen-mapping/src/gen-mapping.ts create mode 100644 node_modules/@jridgewell/gen-mapping/src/set-array.ts create mode 100644 node_modules/@jridgewell/gen-mapping/src/sourcemap-segment.ts create mode 100644 node_modules/@jridgewell/gen-mapping/src/types.ts create mode 100644 node_modules/@jridgewell/gen-mapping/types/gen-mapping.d.cts create mode 100644 node_modules/@jridgewell/gen-mapping/types/gen-mapping.d.cts.map create mode 100644 node_modules/@jridgewell/gen-mapping/types/gen-mapping.d.mts create mode 100644 node_modules/@jridgewell/gen-mapping/types/gen-mapping.d.mts.map create mode 100644 node_modules/@jridgewell/gen-mapping/types/set-array.d.cts create mode 100644 node_modules/@jridgewell/gen-mapping/types/set-array.d.cts.map create mode 100644 node_modules/@jridgewell/gen-mapping/types/set-array.d.mts create mode 100644 node_modules/@jridgewell/gen-mapping/types/set-array.d.mts.map create mode 100644 node_modules/@jridgewell/gen-mapping/types/sourcemap-segment.d.cts create mode 100644 node_modules/@jridgewell/gen-mapping/types/sourcemap-segment.d.cts.map create mode 100644 node_modules/@jridgewell/gen-mapping/types/sourcemap-segment.d.mts create mode 100644 node_modules/@jridgewell/gen-mapping/types/sourcemap-segment.d.mts.map create mode 100644 node_modules/@jridgewell/gen-mapping/types/types.d.cts create mode 100644 node_modules/@jridgewell/gen-mapping/types/types.d.cts.map create mode 100644 node_modules/@jridgewell/gen-mapping/types/types.d.mts create mode 100644 node_modules/@jridgewell/gen-mapping/types/types.d.mts.map create mode 100644 node_modules/@jridgewell/remapping/LICENSE create mode 100644 node_modules/@jridgewell/remapping/README.md create mode 100644 node_modules/@jridgewell/remapping/dist/remapping.mjs create mode 100644 node_modules/@jridgewell/remapping/dist/remapping.mjs.map create mode 100644 node_modules/@jridgewell/remapping/dist/remapping.umd.js create mode 100644 node_modules/@jridgewell/remapping/dist/remapping.umd.js.map create mode 100644 node_modules/@jridgewell/remapping/package.json create mode 100644 node_modules/@jridgewell/remapping/src/build-source-map-tree.ts create mode 100644 node_modules/@jridgewell/remapping/src/remapping.ts create mode 100644 node_modules/@jridgewell/remapping/src/source-map-tree.ts create mode 100644 node_modules/@jridgewell/remapping/src/source-map.ts create mode 100644 node_modules/@jridgewell/remapping/src/types.ts create mode 100644 node_modules/@jridgewell/remapping/types/build-source-map-tree.d.cts create mode 100644 node_modules/@jridgewell/remapping/types/build-source-map-tree.d.cts.map create mode 100644 node_modules/@jridgewell/remapping/types/build-source-map-tree.d.mts create mode 100644 node_modules/@jridgewell/remapping/types/build-source-map-tree.d.mts.map create mode 100644 node_modules/@jridgewell/remapping/types/remapping.d.cts create mode 100644 node_modules/@jridgewell/remapping/types/remapping.d.cts.map create mode 100644 node_modules/@jridgewell/remapping/types/remapping.d.mts create mode 100644 node_modules/@jridgewell/remapping/types/remapping.d.mts.map create mode 100644 node_modules/@jridgewell/remapping/types/source-map-tree.d.cts create mode 100644 node_modules/@jridgewell/remapping/types/source-map-tree.d.cts.map create mode 100644 node_modules/@jridgewell/remapping/types/source-map-tree.d.mts create mode 100644 node_modules/@jridgewell/remapping/types/source-map-tree.d.mts.map create mode 100644 node_modules/@jridgewell/remapping/types/source-map.d.cts create mode 100644 node_modules/@jridgewell/remapping/types/source-map.d.cts.map create mode 100644 node_modules/@jridgewell/remapping/types/source-map.d.mts create mode 100644 node_modules/@jridgewell/remapping/types/source-map.d.mts.map create mode 100644 node_modules/@jridgewell/remapping/types/types.d.cts create mode 100644 node_modules/@jridgewell/remapping/types/types.d.cts.map create mode 100644 node_modules/@jridgewell/remapping/types/types.d.mts create mode 100644 node_modules/@jridgewell/remapping/types/types.d.mts.map create mode 100644 node_modules/@jridgewell/resolve-uri/LICENSE create mode 100644 node_modules/@jridgewell/resolve-uri/README.md create mode 100644 node_modules/@jridgewell/resolve-uri/dist/resolve-uri.mjs create mode 100644 node_modules/@jridgewell/resolve-uri/dist/resolve-uri.mjs.map create mode 100644 node_modules/@jridgewell/resolve-uri/dist/resolve-uri.umd.js create mode 100644 node_modules/@jridgewell/resolve-uri/dist/resolve-uri.umd.js.map create mode 100644 node_modules/@jridgewell/resolve-uri/dist/types/resolve-uri.d.ts create mode 100644 node_modules/@jridgewell/resolve-uri/package.json create mode 100644 node_modules/@jridgewell/sourcemap-codec/LICENSE create mode 100644 node_modules/@jridgewell/sourcemap-codec/README.md create mode 100644 node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.mjs create mode 100644 node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.mjs.map create mode 100644 node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.umd.js create mode 100644 node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.umd.js.map create mode 100644 node_modules/@jridgewell/sourcemap-codec/package.json create mode 100644 node_modules/@jridgewell/sourcemap-codec/src/scopes.ts create mode 100644 node_modules/@jridgewell/sourcemap-codec/src/sourcemap-codec.ts create mode 100644 node_modules/@jridgewell/sourcemap-codec/src/strings.ts create mode 100644 node_modules/@jridgewell/sourcemap-codec/src/vlq.ts create mode 100644 node_modules/@jridgewell/sourcemap-codec/types/scopes.d.cts create mode 100644 node_modules/@jridgewell/sourcemap-codec/types/scopes.d.cts.map create mode 100644 node_modules/@jridgewell/sourcemap-codec/types/scopes.d.mts create mode 100644 node_modules/@jridgewell/sourcemap-codec/types/scopes.d.mts.map create mode 100644 node_modules/@jridgewell/sourcemap-codec/types/sourcemap-codec.d.cts create mode 100644 node_modules/@jridgewell/sourcemap-codec/types/sourcemap-codec.d.cts.map create mode 100644 node_modules/@jridgewell/sourcemap-codec/types/sourcemap-codec.d.mts create mode 100644 node_modules/@jridgewell/sourcemap-codec/types/sourcemap-codec.d.mts.map create mode 100644 node_modules/@jridgewell/sourcemap-codec/types/strings.d.cts create mode 100644 node_modules/@jridgewell/sourcemap-codec/types/strings.d.cts.map create mode 100644 node_modules/@jridgewell/sourcemap-codec/types/strings.d.mts create mode 100644 node_modules/@jridgewell/sourcemap-codec/types/strings.d.mts.map create mode 100644 node_modules/@jridgewell/sourcemap-codec/types/vlq.d.cts create mode 100644 node_modules/@jridgewell/sourcemap-codec/types/vlq.d.cts.map create mode 100644 node_modules/@jridgewell/sourcemap-codec/types/vlq.d.mts create mode 100644 node_modules/@jridgewell/sourcemap-codec/types/vlq.d.mts.map create mode 100644 node_modules/@jridgewell/trace-mapping/LICENSE create mode 100644 node_modules/@jridgewell/trace-mapping/README.md create mode 100644 node_modules/@jridgewell/trace-mapping/dist/trace-mapping.mjs create mode 100644 node_modules/@jridgewell/trace-mapping/dist/trace-mapping.mjs.map create mode 100644 node_modules/@jridgewell/trace-mapping/dist/trace-mapping.umd.js create mode 100644 node_modules/@jridgewell/trace-mapping/dist/trace-mapping.umd.js.map create mode 100644 node_modules/@jridgewell/trace-mapping/package.json create mode 100644 node_modules/@jridgewell/trace-mapping/src/binary-search.ts create mode 100644 node_modules/@jridgewell/trace-mapping/src/by-source.ts create mode 100644 node_modules/@jridgewell/trace-mapping/src/flatten-map.ts create mode 100644 node_modules/@jridgewell/trace-mapping/src/resolve.ts create mode 100644 node_modules/@jridgewell/trace-mapping/src/sort.ts create mode 100644 node_modules/@jridgewell/trace-mapping/src/sourcemap-segment.ts create mode 100644 node_modules/@jridgewell/trace-mapping/src/strip-filename.ts create mode 100644 node_modules/@jridgewell/trace-mapping/src/trace-mapping.ts create mode 100644 node_modules/@jridgewell/trace-mapping/src/types.ts create mode 100644 node_modules/@jridgewell/trace-mapping/types/binary-search.d.cts create mode 100644 node_modules/@jridgewell/trace-mapping/types/binary-search.d.cts.map create mode 100644 node_modules/@jridgewell/trace-mapping/types/binary-search.d.mts create mode 100644 node_modules/@jridgewell/trace-mapping/types/binary-search.d.mts.map create mode 100644 node_modules/@jridgewell/trace-mapping/types/by-source.d.cts create mode 100644 node_modules/@jridgewell/trace-mapping/types/by-source.d.cts.map create mode 100644 node_modules/@jridgewell/trace-mapping/types/by-source.d.mts create mode 100644 node_modules/@jridgewell/trace-mapping/types/by-source.d.mts.map create mode 100644 node_modules/@jridgewell/trace-mapping/types/flatten-map.d.cts create mode 100644 node_modules/@jridgewell/trace-mapping/types/flatten-map.d.cts.map create mode 100644 node_modules/@jridgewell/trace-mapping/types/flatten-map.d.mts create mode 100644 node_modules/@jridgewell/trace-mapping/types/flatten-map.d.mts.map create mode 100644 node_modules/@jridgewell/trace-mapping/types/resolve.d.cts create mode 100644 node_modules/@jridgewell/trace-mapping/types/resolve.d.cts.map create mode 100644 node_modules/@jridgewell/trace-mapping/types/resolve.d.mts create mode 100644 node_modules/@jridgewell/trace-mapping/types/resolve.d.mts.map create mode 100644 node_modules/@jridgewell/trace-mapping/types/sort.d.cts create mode 100644 node_modules/@jridgewell/trace-mapping/types/sort.d.cts.map create mode 100644 node_modules/@jridgewell/trace-mapping/types/sort.d.mts create mode 100644 node_modules/@jridgewell/trace-mapping/types/sort.d.mts.map create mode 100644 node_modules/@jridgewell/trace-mapping/types/sourcemap-segment.d.cts create mode 100644 node_modules/@jridgewell/trace-mapping/types/sourcemap-segment.d.cts.map create mode 100644 node_modules/@jridgewell/trace-mapping/types/sourcemap-segment.d.mts create mode 100644 node_modules/@jridgewell/trace-mapping/types/sourcemap-segment.d.mts.map create mode 100644 node_modules/@jridgewell/trace-mapping/types/strip-filename.d.cts create mode 100644 node_modules/@jridgewell/trace-mapping/types/strip-filename.d.cts.map create mode 100644 node_modules/@jridgewell/trace-mapping/types/strip-filename.d.mts create mode 100644 node_modules/@jridgewell/trace-mapping/types/strip-filename.d.mts.map create mode 100644 node_modules/@jridgewell/trace-mapping/types/trace-mapping.d.cts create mode 100644 node_modules/@jridgewell/trace-mapping/types/trace-mapping.d.cts.map create mode 100644 node_modules/@jridgewell/trace-mapping/types/trace-mapping.d.mts create mode 100644 node_modules/@jridgewell/trace-mapping/types/trace-mapping.d.mts.map create mode 100644 node_modules/@jridgewell/trace-mapping/types/types.d.cts create mode 100644 node_modules/@jridgewell/trace-mapping/types/types.d.cts.map create mode 100644 node_modules/@jridgewell/trace-mapping/types/types.d.mts create mode 100644 node_modules/@jridgewell/trace-mapping/types/types.d.mts.map create mode 100644 node_modules/@parcel/watcher-darwin-arm64/LICENSE create mode 100644 node_modules/@parcel/watcher-darwin-arm64/README.md create mode 100644 node_modules/@parcel/watcher-darwin-arm64/package.json create mode 100644 node_modules/@parcel/watcher-darwin-arm64/watcher.node create mode 100644 node_modules/@parcel/watcher/LICENSE create mode 100644 node_modules/@parcel/watcher/README.md create mode 100644 node_modules/@parcel/watcher/binding.gyp create mode 100644 node_modules/@parcel/watcher/index.d.ts create mode 100644 node_modules/@parcel/watcher/index.js create mode 100644 node_modules/@parcel/watcher/index.js.flow create mode 100644 node_modules/@parcel/watcher/package.json create mode 100644 node_modules/@parcel/watcher/scripts/build-from-source.js create mode 100644 node_modules/@parcel/watcher/src/Backend.cc create mode 100644 node_modules/@parcel/watcher/src/Backend.hh create mode 100644 node_modules/@parcel/watcher/src/Debounce.cc create mode 100644 node_modules/@parcel/watcher/src/Debounce.hh create mode 100644 node_modules/@parcel/watcher/src/DirTree.cc create mode 100644 node_modules/@parcel/watcher/src/DirTree.hh create mode 100644 node_modules/@parcel/watcher/src/Event.hh create mode 100644 node_modules/@parcel/watcher/src/Glob.cc create mode 100644 node_modules/@parcel/watcher/src/Glob.hh create mode 100644 node_modules/@parcel/watcher/src/PromiseRunner.hh create mode 100644 node_modules/@parcel/watcher/src/Signal.hh create mode 100644 node_modules/@parcel/watcher/src/Watcher.cc create mode 100644 node_modules/@parcel/watcher/src/Watcher.hh create mode 100644 node_modules/@parcel/watcher/src/binding.cc create mode 100644 node_modules/@parcel/watcher/src/kqueue/KqueueBackend.cc create mode 100644 node_modules/@parcel/watcher/src/kqueue/KqueueBackend.hh create mode 100644 node_modules/@parcel/watcher/src/linux/InotifyBackend.cc create mode 100644 node_modules/@parcel/watcher/src/linux/InotifyBackend.hh create mode 100644 node_modules/@parcel/watcher/src/macos/FSEventsBackend.cc create mode 100644 node_modules/@parcel/watcher/src/macos/FSEventsBackend.hh create mode 100644 node_modules/@parcel/watcher/src/shared/BruteForceBackend.cc create mode 100644 node_modules/@parcel/watcher/src/shared/BruteForceBackend.hh create mode 100644 node_modules/@parcel/watcher/src/unix/fts.cc create mode 100644 node_modules/@parcel/watcher/src/unix/legacy.cc create mode 100644 node_modules/@parcel/watcher/src/wasm/WasmBackend.cc create mode 100644 node_modules/@parcel/watcher/src/wasm/WasmBackend.hh create mode 100644 node_modules/@parcel/watcher/src/wasm/include.h create mode 100644 node_modules/@parcel/watcher/src/watchman/BSER.cc create mode 100644 node_modules/@parcel/watcher/src/watchman/BSER.hh create mode 100644 node_modules/@parcel/watcher/src/watchman/IPC.hh create mode 100644 node_modules/@parcel/watcher/src/watchman/WatchmanBackend.cc create mode 100644 node_modules/@parcel/watcher/src/watchman/WatchmanBackend.hh create mode 100644 node_modules/@parcel/watcher/src/windows/WindowsBackend.cc create mode 100644 node_modules/@parcel/watcher/src/windows/WindowsBackend.hh create mode 100644 node_modules/@parcel/watcher/src/windows/win_utils.cc create mode 100644 node_modules/@parcel/watcher/src/windows/win_utils.hh create mode 100644 node_modules/@parcel/watcher/wrapper.js create mode 100644 node_modules/@tailwindcss/cli/LICENSE create mode 100644 node_modules/@tailwindcss/cli/README.md create mode 100755 node_modules/@tailwindcss/cli/dist/index.mjs create mode 100644 node_modules/@tailwindcss/cli/package.json create mode 100644 node_modules/@tailwindcss/node/LICENSE create mode 100644 node_modules/@tailwindcss/node/README.md create mode 100644 node_modules/@tailwindcss/node/dist/esm-cache.loader.d.mts create mode 100644 node_modules/@tailwindcss/node/dist/esm-cache.loader.mjs create mode 100644 node_modules/@tailwindcss/node/dist/index.d.mts create mode 100644 node_modules/@tailwindcss/node/dist/index.d.ts create mode 100644 node_modules/@tailwindcss/node/dist/index.js create mode 100644 node_modules/@tailwindcss/node/dist/index.mjs create mode 100644 node_modules/@tailwindcss/node/dist/require-cache.d.ts create mode 100644 node_modules/@tailwindcss/node/dist/require-cache.js create mode 100644 node_modules/@tailwindcss/node/package.json create mode 100644 node_modules/@tailwindcss/oxide-darwin-arm64/LICENSE create mode 100644 node_modules/@tailwindcss/oxide-darwin-arm64/README.md create mode 100644 node_modules/@tailwindcss/oxide-darwin-arm64/package.json create mode 100644 node_modules/@tailwindcss/oxide-darwin-arm64/tailwindcss-oxide.darwin-arm64.node create mode 100644 node_modules/@tailwindcss/oxide/LICENSE create mode 100644 node_modules/@tailwindcss/oxide/index.d.ts create mode 100644 node_modules/@tailwindcss/oxide/index.js create mode 100644 node_modules/@tailwindcss/oxide/package.json create mode 100644 node_modules/autoprefixer/LICENSE create mode 100644 node_modules/autoprefixer/README.md create mode 100755 node_modules/autoprefixer/bin/autoprefixer create mode 100644 node_modules/autoprefixer/data/prefixes.js create mode 100644 node_modules/autoprefixer/lib/at-rule.js create mode 100644 node_modules/autoprefixer/lib/autoprefixer.d.ts create mode 100644 node_modules/autoprefixer/lib/autoprefixer.js create mode 100644 node_modules/autoprefixer/lib/brackets.js create mode 100644 node_modules/autoprefixer/lib/browsers.js create mode 100644 node_modules/autoprefixer/lib/declaration.js create mode 100644 node_modules/autoprefixer/lib/hacks/align-content.js create mode 100644 node_modules/autoprefixer/lib/hacks/align-items.js create mode 100644 node_modules/autoprefixer/lib/hacks/align-self.js create mode 100644 node_modules/autoprefixer/lib/hacks/animation.js create mode 100644 node_modules/autoprefixer/lib/hacks/appearance.js create mode 100644 node_modules/autoprefixer/lib/hacks/autofill.js create mode 100644 node_modules/autoprefixer/lib/hacks/backdrop-filter.js create mode 100644 node_modules/autoprefixer/lib/hacks/background-clip.js create mode 100644 node_modules/autoprefixer/lib/hacks/background-size.js create mode 100644 node_modules/autoprefixer/lib/hacks/block-logical.js create mode 100644 node_modules/autoprefixer/lib/hacks/border-image.js create mode 100644 node_modules/autoprefixer/lib/hacks/border-radius.js create mode 100644 node_modules/autoprefixer/lib/hacks/break-props.js create mode 100644 node_modules/autoprefixer/lib/hacks/cross-fade.js create mode 100644 node_modules/autoprefixer/lib/hacks/display-flex.js create mode 100644 node_modules/autoprefixer/lib/hacks/display-grid.js create mode 100644 node_modules/autoprefixer/lib/hacks/file-selector-button.js create mode 100644 node_modules/autoprefixer/lib/hacks/filter-value.js create mode 100644 node_modules/autoprefixer/lib/hacks/filter.js create mode 100644 node_modules/autoprefixer/lib/hacks/flex-basis.js create mode 100644 node_modules/autoprefixer/lib/hacks/flex-direction.js create mode 100644 node_modules/autoprefixer/lib/hacks/flex-flow.js create mode 100644 node_modules/autoprefixer/lib/hacks/flex-grow.js create mode 100644 node_modules/autoprefixer/lib/hacks/flex-shrink.js create mode 100644 node_modules/autoprefixer/lib/hacks/flex-spec.js create mode 100644 node_modules/autoprefixer/lib/hacks/flex-wrap.js create mode 100644 node_modules/autoprefixer/lib/hacks/flex.js create mode 100644 node_modules/autoprefixer/lib/hacks/fullscreen.js create mode 100644 node_modules/autoprefixer/lib/hacks/gradient.js create mode 100644 node_modules/autoprefixer/lib/hacks/grid-area.js create mode 100644 node_modules/autoprefixer/lib/hacks/grid-column-align.js create mode 100644 node_modules/autoprefixer/lib/hacks/grid-end.js create mode 100644 node_modules/autoprefixer/lib/hacks/grid-row-align.js create mode 100644 node_modules/autoprefixer/lib/hacks/grid-row-column.js create mode 100644 node_modules/autoprefixer/lib/hacks/grid-rows-columns.js create mode 100644 node_modules/autoprefixer/lib/hacks/grid-start.js create mode 100644 node_modules/autoprefixer/lib/hacks/grid-template-areas.js create mode 100644 node_modules/autoprefixer/lib/hacks/grid-template.js create mode 100644 node_modules/autoprefixer/lib/hacks/grid-utils.js create mode 100644 node_modules/autoprefixer/lib/hacks/image-rendering.js create mode 100644 node_modules/autoprefixer/lib/hacks/image-set.js create mode 100644 node_modules/autoprefixer/lib/hacks/inline-logical.js create mode 100644 node_modules/autoprefixer/lib/hacks/intrinsic.js create mode 100644 node_modules/autoprefixer/lib/hacks/justify-content.js create mode 100644 node_modules/autoprefixer/lib/hacks/mask-border.js create mode 100644 node_modules/autoprefixer/lib/hacks/mask-composite.js create mode 100644 node_modules/autoprefixer/lib/hacks/order.js create mode 100644 node_modules/autoprefixer/lib/hacks/overscroll-behavior.js create mode 100644 node_modules/autoprefixer/lib/hacks/pixelated.js create mode 100644 node_modules/autoprefixer/lib/hacks/place-self.js create mode 100644 node_modules/autoprefixer/lib/hacks/placeholder-shown.js create mode 100644 node_modules/autoprefixer/lib/hacks/placeholder.js create mode 100644 node_modules/autoprefixer/lib/hacks/print-color-adjust.js create mode 100644 node_modules/autoprefixer/lib/hacks/text-decoration-skip-ink.js create mode 100644 node_modules/autoprefixer/lib/hacks/text-decoration.js create mode 100644 node_modules/autoprefixer/lib/hacks/text-emphasis-position.js create mode 100644 node_modules/autoprefixer/lib/hacks/transform-decl.js create mode 100644 node_modules/autoprefixer/lib/hacks/user-select.js create mode 100644 node_modules/autoprefixer/lib/hacks/writing-mode.js create mode 100644 node_modules/autoprefixer/lib/info.js create mode 100644 node_modules/autoprefixer/lib/old-selector.js create mode 100644 node_modules/autoprefixer/lib/old-value.js create mode 100644 node_modules/autoprefixer/lib/prefixer.js create mode 100644 node_modules/autoprefixer/lib/prefixes.js create mode 100644 node_modules/autoprefixer/lib/processor.js create mode 100644 node_modules/autoprefixer/lib/resolution.js create mode 100644 node_modules/autoprefixer/lib/selector.js create mode 100644 node_modules/autoprefixer/lib/supports.js create mode 100644 node_modules/autoprefixer/lib/transition.js create mode 100644 node_modules/autoprefixer/lib/utils.js create mode 100644 node_modules/autoprefixer/lib/value.js create mode 100644 node_modules/autoprefixer/lib/vendor.js create mode 100644 node_modules/autoprefixer/package.json create mode 100644 node_modules/baseline-browser-mapping/LICENSE.txt create mode 100644 node_modules/baseline-browser-mapping/README.md create mode 100755 node_modules/baseline-browser-mapping/dist/cli.cjs create mode 100644 node_modules/baseline-browser-mapping/dist/index.cjs create mode 100644 node_modules/baseline-browser-mapping/dist/index.d.ts create mode 100644 node_modules/baseline-browser-mapping/dist/index.js create mode 100644 node_modules/baseline-browser-mapping/package.json create mode 100644 node_modules/browserslist/LICENSE create mode 100644 node_modules/browserslist/README.md create mode 100644 node_modules/browserslist/browser.js create mode 100755 node_modules/browserslist/cli.js create mode 100644 node_modules/browserslist/error.d.ts create mode 100644 node_modules/browserslist/error.js create mode 100644 node_modules/browserslist/index.d.ts create mode 100644 node_modules/browserslist/index.js create mode 100644 node_modules/browserslist/node.js create mode 100644 node_modules/browserslist/package.json create mode 100644 node_modules/browserslist/parse.js create mode 100644 node_modules/caniuse-lite/LICENSE create mode 100644 node_modules/caniuse-lite/README.md create mode 100644 node_modules/caniuse-lite/data/agents.js create mode 100644 node_modules/caniuse-lite/data/browserVersions.js create mode 100644 node_modules/caniuse-lite/data/browsers.js create mode 100644 node_modules/caniuse-lite/data/features.js create mode 100644 node_modules/caniuse-lite/data/features/aac.js create mode 100644 node_modules/caniuse-lite/data/features/abortcontroller.js create mode 100644 node_modules/caniuse-lite/data/features/ac3-ec3.js create mode 100644 node_modules/caniuse-lite/data/features/accelerometer.js create mode 100644 node_modules/caniuse-lite/data/features/addeventlistener.js create mode 100644 node_modules/caniuse-lite/data/features/alternate-stylesheet.js create mode 100644 node_modules/caniuse-lite/data/features/ambient-light.js create mode 100644 node_modules/caniuse-lite/data/features/apng.js create mode 100644 node_modules/caniuse-lite/data/features/array-find-index.js create mode 100644 node_modules/caniuse-lite/data/features/array-find.js create mode 100644 node_modules/caniuse-lite/data/features/array-flat.js create mode 100644 node_modules/caniuse-lite/data/features/array-includes.js create mode 100644 node_modules/caniuse-lite/data/features/arrow-functions.js create mode 100644 node_modules/caniuse-lite/data/features/asmjs.js create mode 100644 node_modules/caniuse-lite/data/features/async-clipboard.js create mode 100644 node_modules/caniuse-lite/data/features/async-functions.js create mode 100644 node_modules/caniuse-lite/data/features/atob-btoa.js create mode 100644 node_modules/caniuse-lite/data/features/audio-api.js create mode 100644 node_modules/caniuse-lite/data/features/audio.js create mode 100644 node_modules/caniuse-lite/data/features/audiotracks.js create mode 100644 node_modules/caniuse-lite/data/features/autofocus.js create mode 100644 node_modules/caniuse-lite/data/features/auxclick.js create mode 100644 node_modules/caniuse-lite/data/features/av1.js create mode 100644 node_modules/caniuse-lite/data/features/avif.js create mode 100644 node_modules/caniuse-lite/data/features/background-attachment.js create mode 100644 node_modules/caniuse-lite/data/features/background-clip-text.js create mode 100644 node_modules/caniuse-lite/data/features/background-img-opts.js create mode 100644 node_modules/caniuse-lite/data/features/background-position-x-y.js create mode 100644 node_modules/caniuse-lite/data/features/background-repeat-round-space.js create mode 100644 node_modules/caniuse-lite/data/features/background-sync.js create mode 100644 node_modules/caniuse-lite/data/features/battery-status.js create mode 100644 node_modules/caniuse-lite/data/features/beacon.js create mode 100644 node_modules/caniuse-lite/data/features/beforeafterprint.js create mode 100644 node_modules/caniuse-lite/data/features/bigint.js create mode 100644 node_modules/caniuse-lite/data/features/blobbuilder.js create mode 100644 node_modules/caniuse-lite/data/features/bloburls.js create mode 100644 node_modules/caniuse-lite/data/features/border-image.js create mode 100644 node_modules/caniuse-lite/data/features/border-radius.js create mode 100644 node_modules/caniuse-lite/data/features/broadcastchannel.js create mode 100644 node_modules/caniuse-lite/data/features/brotli.js create mode 100644 node_modules/caniuse-lite/data/features/calc.js create mode 100644 node_modules/caniuse-lite/data/features/canvas-blending.js create mode 100644 node_modules/caniuse-lite/data/features/canvas-text.js create mode 100644 node_modules/caniuse-lite/data/features/canvas.js create mode 100644 node_modules/caniuse-lite/data/features/ch-unit.js create mode 100644 node_modules/caniuse-lite/data/features/chacha20-poly1305.js create mode 100644 node_modules/caniuse-lite/data/features/channel-messaging.js create mode 100644 node_modules/caniuse-lite/data/features/childnode-remove.js create mode 100644 node_modules/caniuse-lite/data/features/classlist.js create mode 100644 node_modules/caniuse-lite/data/features/client-hints-dpr-width-viewport.js create mode 100644 node_modules/caniuse-lite/data/features/clipboard.js create mode 100644 node_modules/caniuse-lite/data/features/colr-v1.js create mode 100644 node_modules/caniuse-lite/data/features/colr.js create mode 100644 node_modules/caniuse-lite/data/features/comparedocumentposition.js create mode 100644 node_modules/caniuse-lite/data/features/console-basic.js create mode 100644 node_modules/caniuse-lite/data/features/console-time.js create mode 100644 node_modules/caniuse-lite/data/features/const.js create mode 100644 node_modules/caniuse-lite/data/features/constraint-validation.js create mode 100644 node_modules/caniuse-lite/data/features/contenteditable.js create mode 100644 node_modules/caniuse-lite/data/features/contentsecuritypolicy.js create mode 100644 node_modules/caniuse-lite/data/features/contentsecuritypolicy2.js create mode 100644 node_modules/caniuse-lite/data/features/cookie-store-api.js create mode 100644 node_modules/caniuse-lite/data/features/cors.js create mode 100644 node_modules/caniuse-lite/data/features/createimagebitmap.js create mode 100644 node_modules/caniuse-lite/data/features/credential-management.js create mode 100644 node_modules/caniuse-lite/data/features/cross-document-view-transitions.js create mode 100644 node_modules/caniuse-lite/data/features/cryptography.js create mode 100644 node_modules/caniuse-lite/data/features/css-all.js create mode 100644 node_modules/caniuse-lite/data/features/css-anchor-positioning.js create mode 100644 node_modules/caniuse-lite/data/features/css-animation.js create mode 100644 node_modules/caniuse-lite/data/features/css-any-link.js create mode 100644 node_modules/caniuse-lite/data/features/css-appearance.js create mode 100644 node_modules/caniuse-lite/data/features/css-at-counter-style.js create mode 100644 node_modules/caniuse-lite/data/features/css-autofill.js create mode 100644 node_modules/caniuse-lite/data/features/css-backdrop-filter.js create mode 100644 node_modules/caniuse-lite/data/features/css-background-offsets.js create mode 100644 node_modules/caniuse-lite/data/features/css-backgroundblendmode.js create mode 100644 node_modules/caniuse-lite/data/features/css-boxdecorationbreak.js create mode 100644 node_modules/caniuse-lite/data/features/css-boxshadow.js create mode 100644 node_modules/caniuse-lite/data/features/css-canvas.js create mode 100644 node_modules/caniuse-lite/data/features/css-caret-color.js create mode 100644 node_modules/caniuse-lite/data/features/css-cascade-layers.js create mode 100644 node_modules/caniuse-lite/data/features/css-cascade-scope.js create mode 100644 node_modules/caniuse-lite/data/features/css-case-insensitive.js create mode 100644 node_modules/caniuse-lite/data/features/css-clip-path.js create mode 100644 node_modules/caniuse-lite/data/features/css-color-adjust.js create mode 100644 node_modules/caniuse-lite/data/features/css-color-function.js create mode 100644 node_modules/caniuse-lite/data/features/css-conic-gradients.js create mode 100644 node_modules/caniuse-lite/data/features/css-container-queries-style.js create mode 100644 node_modules/caniuse-lite/data/features/css-container-queries.js create mode 100644 node_modules/caniuse-lite/data/features/css-container-query-units.js create mode 100644 node_modules/caniuse-lite/data/features/css-containment.js create mode 100644 node_modules/caniuse-lite/data/features/css-content-visibility.js create mode 100644 node_modules/caniuse-lite/data/features/css-counters.js create mode 100644 node_modules/caniuse-lite/data/features/css-crisp-edges.js create mode 100644 node_modules/caniuse-lite/data/features/css-cross-fade.js create mode 100644 node_modules/caniuse-lite/data/features/css-default-pseudo.js create mode 100644 node_modules/caniuse-lite/data/features/css-descendant-gtgt.js create mode 100644 node_modules/caniuse-lite/data/features/css-deviceadaptation.js create mode 100644 node_modules/caniuse-lite/data/features/css-dir-pseudo.js create mode 100644 node_modules/caniuse-lite/data/features/css-display-contents.js create mode 100644 node_modules/caniuse-lite/data/features/css-element-function.js create mode 100644 node_modules/caniuse-lite/data/features/css-env-function.js create mode 100644 node_modules/caniuse-lite/data/features/css-exclusions.js create mode 100644 node_modules/caniuse-lite/data/features/css-featurequeries.js create mode 100644 node_modules/caniuse-lite/data/features/css-file-selector-button.js create mode 100644 node_modules/caniuse-lite/data/features/css-filter-function.js create mode 100644 node_modules/caniuse-lite/data/features/css-filters.js create mode 100644 node_modules/caniuse-lite/data/features/css-first-letter.js create mode 100644 node_modules/caniuse-lite/data/features/css-first-line.js create mode 100644 node_modules/caniuse-lite/data/features/css-fixed.js create mode 100644 node_modules/caniuse-lite/data/features/css-focus-visible.js create mode 100644 node_modules/caniuse-lite/data/features/css-focus-within.js create mode 100644 node_modules/caniuse-lite/data/features/css-font-palette.js create mode 100644 node_modules/caniuse-lite/data/features/css-font-rendering-controls.js create mode 100644 node_modules/caniuse-lite/data/features/css-font-stretch.js create mode 100644 node_modules/caniuse-lite/data/features/css-gencontent.js create mode 100644 node_modules/caniuse-lite/data/features/css-gradients.js create mode 100644 node_modules/caniuse-lite/data/features/css-grid-animation.js create mode 100644 node_modules/caniuse-lite/data/features/css-grid-lanes.js create mode 100644 node_modules/caniuse-lite/data/features/css-grid.js create mode 100644 node_modules/caniuse-lite/data/features/css-hanging-punctuation.js create mode 100644 node_modules/caniuse-lite/data/features/css-has.js create mode 100644 node_modules/caniuse-lite/data/features/css-hyphens.js create mode 100644 node_modules/caniuse-lite/data/features/css-if.js create mode 100644 node_modules/caniuse-lite/data/features/css-image-orientation.js create mode 100644 node_modules/caniuse-lite/data/features/css-image-set.js create mode 100644 node_modules/caniuse-lite/data/features/css-in-out-of-range.js create mode 100644 node_modules/caniuse-lite/data/features/css-indeterminate-pseudo.js create mode 100644 node_modules/caniuse-lite/data/features/css-initial-letter.js create mode 100644 node_modules/caniuse-lite/data/features/css-initial-value.js create mode 100644 node_modules/caniuse-lite/data/features/css-lch-lab.js create mode 100644 node_modules/caniuse-lite/data/features/css-letter-spacing.js create mode 100644 node_modules/caniuse-lite/data/features/css-line-clamp.js create mode 100644 node_modules/caniuse-lite/data/features/css-logical-props.js create mode 100644 node_modules/caniuse-lite/data/features/css-marker-pseudo.js create mode 100644 node_modules/caniuse-lite/data/features/css-masks.js create mode 100644 node_modules/caniuse-lite/data/features/css-matches-pseudo.js create mode 100644 node_modules/caniuse-lite/data/features/css-math-functions.js create mode 100644 node_modules/caniuse-lite/data/features/css-media-interaction.js create mode 100644 node_modules/caniuse-lite/data/features/css-media-range-syntax.js create mode 100644 node_modules/caniuse-lite/data/features/css-media-resolution.js create mode 100644 node_modules/caniuse-lite/data/features/css-media-scripting.js create mode 100644 node_modules/caniuse-lite/data/features/css-mediaqueries.js create mode 100644 node_modules/caniuse-lite/data/features/css-mixblendmode.js create mode 100644 node_modules/caniuse-lite/data/features/css-module-scripts.js create mode 100644 node_modules/caniuse-lite/data/features/css-motion-paths.js create mode 100644 node_modules/caniuse-lite/data/features/css-namespaces.js create mode 100644 node_modules/caniuse-lite/data/features/css-nesting.js create mode 100644 node_modules/caniuse-lite/data/features/css-not-sel-list.js create mode 100644 node_modules/caniuse-lite/data/features/css-nth-child-of.js create mode 100644 node_modules/caniuse-lite/data/features/css-opacity.js create mode 100644 node_modules/caniuse-lite/data/features/css-optional-pseudo.js create mode 100644 node_modules/caniuse-lite/data/features/css-overflow-anchor.js create mode 100644 node_modules/caniuse-lite/data/features/css-overflow-overlay.js create mode 100644 node_modules/caniuse-lite/data/features/css-overflow.js create mode 100644 node_modules/caniuse-lite/data/features/css-overscroll-behavior.js create mode 100644 node_modules/caniuse-lite/data/features/css-page-break.js create mode 100644 node_modules/caniuse-lite/data/features/css-paged-media.js create mode 100644 node_modules/caniuse-lite/data/features/css-paint-api.js create mode 100644 node_modules/caniuse-lite/data/features/css-placeholder-shown.js create mode 100644 node_modules/caniuse-lite/data/features/css-placeholder.js create mode 100644 node_modules/caniuse-lite/data/features/css-print-color-adjust.js create mode 100644 node_modules/caniuse-lite/data/features/css-read-only-write.js create mode 100644 node_modules/caniuse-lite/data/features/css-rebeccapurple.js create mode 100644 node_modules/caniuse-lite/data/features/css-reflections.js create mode 100644 node_modules/caniuse-lite/data/features/css-regions.js create mode 100644 node_modules/caniuse-lite/data/features/css-relative-colors.js create mode 100644 node_modules/caniuse-lite/data/features/css-repeating-gradients.js create mode 100644 node_modules/caniuse-lite/data/features/css-resize.js create mode 100644 node_modules/caniuse-lite/data/features/css-revert-value.js create mode 100644 node_modules/caniuse-lite/data/features/css-rrggbbaa.js create mode 100644 node_modules/caniuse-lite/data/features/css-scroll-behavior.js create mode 100644 node_modules/caniuse-lite/data/features/css-scrollbar.js create mode 100644 node_modules/caniuse-lite/data/features/css-sel2.js create mode 100644 node_modules/caniuse-lite/data/features/css-sel3.js create mode 100644 node_modules/caniuse-lite/data/features/css-selection.js create mode 100644 node_modules/caniuse-lite/data/features/css-shapes.js create mode 100644 node_modules/caniuse-lite/data/features/css-snappoints.js create mode 100644 node_modules/caniuse-lite/data/features/css-sticky.js create mode 100644 node_modules/caniuse-lite/data/features/css-subgrid.js create mode 100644 node_modules/caniuse-lite/data/features/css-supports-api.js create mode 100644 node_modules/caniuse-lite/data/features/css-table.js create mode 100644 node_modules/caniuse-lite/data/features/css-text-align-last.js create mode 100644 node_modules/caniuse-lite/data/features/css-text-box-trim.js create mode 100644 node_modules/caniuse-lite/data/features/css-text-indent.js create mode 100644 node_modules/caniuse-lite/data/features/css-text-justify.js create mode 100644 node_modules/caniuse-lite/data/features/css-text-orientation.js create mode 100644 node_modules/caniuse-lite/data/features/css-text-spacing.js create mode 100644 node_modules/caniuse-lite/data/features/css-text-wrap-balance.js create mode 100644 node_modules/caniuse-lite/data/features/css-textshadow.js create mode 100644 node_modules/caniuse-lite/data/features/css-touch-action.js create mode 100644 node_modules/caniuse-lite/data/features/css-transitions.js create mode 100644 node_modules/caniuse-lite/data/features/css-unicode-bidi.js create mode 100644 node_modules/caniuse-lite/data/features/css-unset-value.js create mode 100644 node_modules/caniuse-lite/data/features/css-variables.js create mode 100644 node_modules/caniuse-lite/data/features/css-when-else.js create mode 100644 node_modules/caniuse-lite/data/features/css-widows-orphans.js create mode 100644 node_modules/caniuse-lite/data/features/css-width-stretch.js create mode 100644 node_modules/caniuse-lite/data/features/css-writing-mode.js create mode 100644 node_modules/caniuse-lite/data/features/css-zoom.js create mode 100644 node_modules/caniuse-lite/data/features/css3-attr.js create mode 100644 node_modules/caniuse-lite/data/features/css3-boxsizing.js create mode 100644 node_modules/caniuse-lite/data/features/css3-colors.js create mode 100644 node_modules/caniuse-lite/data/features/css3-cursors-grab.js create mode 100644 node_modules/caniuse-lite/data/features/css3-cursors-newer.js create mode 100644 node_modules/caniuse-lite/data/features/css3-cursors.js create mode 100644 node_modules/caniuse-lite/data/features/css3-tabsize.js create mode 100644 node_modules/caniuse-lite/data/features/currentcolor.js create mode 100644 node_modules/caniuse-lite/data/features/custom-elements.js create mode 100644 node_modules/caniuse-lite/data/features/custom-elementsv1.js create mode 100644 node_modules/caniuse-lite/data/features/customevent.js create mode 100644 node_modules/caniuse-lite/data/features/customizable-select.js create mode 100644 node_modules/caniuse-lite/data/features/datalist.js create mode 100644 node_modules/caniuse-lite/data/features/dataset.js create mode 100644 node_modules/caniuse-lite/data/features/datauri.js create mode 100644 node_modules/caniuse-lite/data/features/date-tolocaledatestring.js create mode 100644 node_modules/caniuse-lite/data/features/declarative-shadow-dom.js create mode 100644 node_modules/caniuse-lite/data/features/decorators.js create mode 100644 node_modules/caniuse-lite/data/features/details.js create mode 100644 node_modules/caniuse-lite/data/features/deviceorientation.js create mode 100644 node_modules/caniuse-lite/data/features/devicepixelratio.js create mode 100644 node_modules/caniuse-lite/data/features/dialog.js create mode 100644 node_modules/caniuse-lite/data/features/dispatchevent.js create mode 100644 node_modules/caniuse-lite/data/features/dnssec.js create mode 100644 node_modules/caniuse-lite/data/features/do-not-track.js create mode 100644 node_modules/caniuse-lite/data/features/document-currentscript.js create mode 100644 node_modules/caniuse-lite/data/features/document-evaluate-xpath.js create mode 100644 node_modules/caniuse-lite/data/features/document-execcommand.js create mode 100644 node_modules/caniuse-lite/data/features/document-policy.js create mode 100644 node_modules/caniuse-lite/data/features/document-scrollingelement.js create mode 100644 node_modules/caniuse-lite/data/features/documenthead.js create mode 100644 node_modules/caniuse-lite/data/features/dom-manip-convenience.js create mode 100644 node_modules/caniuse-lite/data/features/dom-range.js create mode 100644 node_modules/caniuse-lite/data/features/domcontentloaded.js create mode 100644 node_modules/caniuse-lite/data/features/dommatrix.js create mode 100644 node_modules/caniuse-lite/data/features/download.js create mode 100644 node_modules/caniuse-lite/data/features/dragndrop.js create mode 100644 node_modules/caniuse-lite/data/features/element-closest.js create mode 100644 node_modules/caniuse-lite/data/features/element-from-point.js create mode 100644 node_modules/caniuse-lite/data/features/element-scroll-methods.js create mode 100644 node_modules/caniuse-lite/data/features/eme.js create mode 100644 node_modules/caniuse-lite/data/features/eot.js create mode 100644 node_modules/caniuse-lite/data/features/es5.js create mode 100644 node_modules/caniuse-lite/data/features/es6-class.js create mode 100644 node_modules/caniuse-lite/data/features/es6-generators.js create mode 100644 node_modules/caniuse-lite/data/features/es6-module-dynamic-import.js create mode 100644 node_modules/caniuse-lite/data/features/es6-module.js create mode 100644 node_modules/caniuse-lite/data/features/es6-number.js create mode 100644 node_modules/caniuse-lite/data/features/es6-string-includes.js create mode 100644 node_modules/caniuse-lite/data/features/es6.js create mode 100644 node_modules/caniuse-lite/data/features/eventsource.js create mode 100644 node_modules/caniuse-lite/data/features/extended-system-fonts.js create mode 100644 node_modules/caniuse-lite/data/features/feature-policy.js create mode 100644 node_modules/caniuse-lite/data/features/fetch.js create mode 100644 node_modules/caniuse-lite/data/features/fieldset-disabled.js create mode 100644 node_modules/caniuse-lite/data/features/fileapi.js create mode 100644 node_modules/caniuse-lite/data/features/filereader.js create mode 100644 node_modules/caniuse-lite/data/features/filereadersync.js create mode 100644 node_modules/caniuse-lite/data/features/filesystem.js create mode 100644 node_modules/caniuse-lite/data/features/flac.js create mode 100644 node_modules/caniuse-lite/data/features/flexbox-gap.js create mode 100644 node_modules/caniuse-lite/data/features/flexbox.js create mode 100644 node_modules/caniuse-lite/data/features/flow-root.js create mode 100644 node_modules/caniuse-lite/data/features/focusin-focusout-events.js create mode 100644 node_modules/caniuse-lite/data/features/font-family-system-ui.js create mode 100644 node_modules/caniuse-lite/data/features/font-feature.js create mode 100644 node_modules/caniuse-lite/data/features/font-kerning.js create mode 100644 node_modules/caniuse-lite/data/features/font-loading.js create mode 100644 node_modules/caniuse-lite/data/features/font-size-adjust.js create mode 100644 node_modules/caniuse-lite/data/features/font-smooth.js create mode 100644 node_modules/caniuse-lite/data/features/font-unicode-range.js create mode 100644 node_modules/caniuse-lite/data/features/font-variant-alternates.js create mode 100644 node_modules/caniuse-lite/data/features/font-variant-numeric.js create mode 100644 node_modules/caniuse-lite/data/features/fontface.js create mode 100644 node_modules/caniuse-lite/data/features/form-attribute.js create mode 100644 node_modules/caniuse-lite/data/features/form-submit-attributes.js create mode 100644 node_modules/caniuse-lite/data/features/form-validation.js create mode 100644 node_modules/caniuse-lite/data/features/forms.js create mode 100644 node_modules/caniuse-lite/data/features/fullscreen.js create mode 100644 node_modules/caniuse-lite/data/features/gamepad.js create mode 100644 node_modules/caniuse-lite/data/features/geolocation.js create mode 100644 node_modules/caniuse-lite/data/features/getboundingclientrect.js create mode 100644 node_modules/caniuse-lite/data/features/getcomputedstyle.js create mode 100644 node_modules/caniuse-lite/data/features/getelementsbyclassname.js create mode 100644 node_modules/caniuse-lite/data/features/getrandomvalues.js create mode 100644 node_modules/caniuse-lite/data/features/gyroscope.js create mode 100644 node_modules/caniuse-lite/data/features/hardwareconcurrency.js create mode 100644 node_modules/caniuse-lite/data/features/hashchange.js create mode 100644 node_modules/caniuse-lite/data/features/heif.js create mode 100644 node_modules/caniuse-lite/data/features/hevc.js create mode 100644 node_modules/caniuse-lite/data/features/hidden.js create mode 100644 node_modules/caniuse-lite/data/features/high-resolution-time.js create mode 100644 node_modules/caniuse-lite/data/features/history.js create mode 100644 node_modules/caniuse-lite/data/features/html-media-capture.js create mode 100644 node_modules/caniuse-lite/data/features/html5semantic.js create mode 100644 node_modules/caniuse-lite/data/features/http-live-streaming.js create mode 100644 node_modules/caniuse-lite/data/features/http2.js create mode 100644 node_modules/caniuse-lite/data/features/http3.js create mode 100644 node_modules/caniuse-lite/data/features/iframe-sandbox.js create mode 100644 node_modules/caniuse-lite/data/features/iframe-seamless.js create mode 100644 node_modules/caniuse-lite/data/features/iframe-srcdoc.js create mode 100644 node_modules/caniuse-lite/data/features/imagecapture.js create mode 100644 node_modules/caniuse-lite/data/features/ime.js create mode 100644 node_modules/caniuse-lite/data/features/img-naturalwidth-naturalheight.js create mode 100644 node_modules/caniuse-lite/data/features/import-maps.js create mode 100644 node_modules/caniuse-lite/data/features/imports.js create mode 100644 node_modules/caniuse-lite/data/features/indeterminate-checkbox.js create mode 100644 node_modules/caniuse-lite/data/features/indexeddb.js create mode 100644 node_modules/caniuse-lite/data/features/indexeddb2.js create mode 100644 node_modules/caniuse-lite/data/features/inline-block.js create mode 100644 node_modules/caniuse-lite/data/features/innertext.js create mode 100644 node_modules/caniuse-lite/data/features/input-autocomplete-onoff.js create mode 100644 node_modules/caniuse-lite/data/features/input-color.js create mode 100644 node_modules/caniuse-lite/data/features/input-datetime.js create mode 100644 node_modules/caniuse-lite/data/features/input-email-tel-url.js create mode 100644 node_modules/caniuse-lite/data/features/input-event.js create mode 100644 node_modules/caniuse-lite/data/features/input-file-accept.js create mode 100644 node_modules/caniuse-lite/data/features/input-file-directory.js create mode 100644 node_modules/caniuse-lite/data/features/input-file-multiple.js create mode 100644 node_modules/caniuse-lite/data/features/input-inputmode.js create mode 100644 node_modules/caniuse-lite/data/features/input-minlength.js create mode 100644 node_modules/caniuse-lite/data/features/input-number.js create mode 100644 node_modules/caniuse-lite/data/features/input-pattern.js create mode 100644 node_modules/caniuse-lite/data/features/input-placeholder.js create mode 100644 node_modules/caniuse-lite/data/features/input-range.js create mode 100644 node_modules/caniuse-lite/data/features/input-search.js create mode 100644 node_modules/caniuse-lite/data/features/input-selection.js create mode 100644 node_modules/caniuse-lite/data/features/insert-adjacent.js create mode 100644 node_modules/caniuse-lite/data/features/insertadjacenthtml.js create mode 100644 node_modules/caniuse-lite/data/features/internationalization.js create mode 100644 node_modules/caniuse-lite/data/features/intersectionobserver-v2.js create mode 100644 node_modules/caniuse-lite/data/features/intersectionobserver.js create mode 100644 node_modules/caniuse-lite/data/features/intl-pluralrules.js create mode 100644 node_modules/caniuse-lite/data/features/intrinsic-width.js create mode 100644 node_modules/caniuse-lite/data/features/jpeg2000.js create mode 100644 node_modules/caniuse-lite/data/features/jpegxl.js create mode 100644 node_modules/caniuse-lite/data/features/jpegxr.js create mode 100644 node_modules/caniuse-lite/data/features/js-regexp-lookbehind.js create mode 100644 node_modules/caniuse-lite/data/features/json.js create mode 100644 node_modules/caniuse-lite/data/features/justify-content-space-evenly.js create mode 100644 node_modules/caniuse-lite/data/features/kerning-pairs-ligatures.js create mode 100644 node_modules/caniuse-lite/data/features/keyboardevent-charcode.js create mode 100644 node_modules/caniuse-lite/data/features/keyboardevent-code.js create mode 100644 node_modules/caniuse-lite/data/features/keyboardevent-getmodifierstate.js create mode 100644 node_modules/caniuse-lite/data/features/keyboardevent-key.js create mode 100644 node_modules/caniuse-lite/data/features/keyboardevent-location.js create mode 100644 node_modules/caniuse-lite/data/features/keyboardevent-which.js create mode 100644 node_modules/caniuse-lite/data/features/lazyload.js create mode 100644 node_modules/caniuse-lite/data/features/let.js create mode 100644 node_modules/caniuse-lite/data/features/link-icon-png.js create mode 100644 node_modules/caniuse-lite/data/features/link-icon-svg.js create mode 100644 node_modules/caniuse-lite/data/features/link-rel-dns-prefetch.js create mode 100644 node_modules/caniuse-lite/data/features/link-rel-modulepreload.js create mode 100644 node_modules/caniuse-lite/data/features/link-rel-preconnect.js create mode 100644 node_modules/caniuse-lite/data/features/link-rel-prefetch.js create mode 100644 node_modules/caniuse-lite/data/features/link-rel-preload.js create mode 100644 node_modules/caniuse-lite/data/features/link-rel-prerender.js create mode 100644 node_modules/caniuse-lite/data/features/loading-lazy-attr.js create mode 100644 node_modules/caniuse-lite/data/features/loading-lazy-media.js create mode 100644 node_modules/caniuse-lite/data/features/localecompare.js create mode 100644 node_modules/caniuse-lite/data/features/magnetometer.js create mode 100644 node_modules/caniuse-lite/data/features/matchesselector.js create mode 100644 node_modules/caniuse-lite/data/features/matchmedia.js create mode 100644 node_modules/caniuse-lite/data/features/mathml.js create mode 100644 node_modules/caniuse-lite/data/features/maxlength.js create mode 100644 node_modules/caniuse-lite/data/features/mdn-css-backdrop-pseudo-element.js create mode 100644 node_modules/caniuse-lite/data/features/mdn-css-unicode-bidi-isolate-override.js create mode 100644 node_modules/caniuse-lite/data/features/mdn-css-unicode-bidi-isolate.js create mode 100644 node_modules/caniuse-lite/data/features/mdn-css-unicode-bidi-plaintext.js create mode 100644 node_modules/caniuse-lite/data/features/mdn-text-decoration-color.js create mode 100644 node_modules/caniuse-lite/data/features/mdn-text-decoration-line.js create mode 100644 node_modules/caniuse-lite/data/features/mdn-text-decoration-shorthand.js create mode 100644 node_modules/caniuse-lite/data/features/mdn-text-decoration-style.js create mode 100644 node_modules/caniuse-lite/data/features/media-fragments.js create mode 100644 node_modules/caniuse-lite/data/features/mediacapture-fromelement.js create mode 100644 node_modules/caniuse-lite/data/features/mediarecorder.js create mode 100644 node_modules/caniuse-lite/data/features/mediasource.js create mode 100644 node_modules/caniuse-lite/data/features/menu.js create mode 100644 node_modules/caniuse-lite/data/features/meta-theme-color.js create mode 100644 node_modules/caniuse-lite/data/features/meter.js create mode 100644 node_modules/caniuse-lite/data/features/midi.js create mode 100644 node_modules/caniuse-lite/data/features/minmaxwh.js create mode 100644 node_modules/caniuse-lite/data/features/mp3.js create mode 100644 node_modules/caniuse-lite/data/features/mpeg-dash.js create mode 100644 node_modules/caniuse-lite/data/features/mpeg4.js create mode 100644 node_modules/caniuse-lite/data/features/multibackgrounds.js create mode 100644 node_modules/caniuse-lite/data/features/multicolumn.js create mode 100644 node_modules/caniuse-lite/data/features/mutation-events.js create mode 100644 node_modules/caniuse-lite/data/features/mutationobserver.js create mode 100644 node_modules/caniuse-lite/data/features/namevalue-storage.js create mode 100644 node_modules/caniuse-lite/data/features/native-filesystem-api.js create mode 100644 node_modules/caniuse-lite/data/features/nav-timing.js create mode 100644 node_modules/caniuse-lite/data/features/netinfo.js create mode 100644 node_modules/caniuse-lite/data/features/notifications.js create mode 100644 node_modules/caniuse-lite/data/features/object-entries.js create mode 100644 node_modules/caniuse-lite/data/features/object-fit.js create mode 100644 node_modules/caniuse-lite/data/features/object-observe.js create mode 100644 node_modules/caniuse-lite/data/features/object-values.js create mode 100644 node_modules/caniuse-lite/data/features/objectrtc.js create mode 100644 node_modules/caniuse-lite/data/features/offline-apps.js create mode 100644 node_modules/caniuse-lite/data/features/offscreencanvas.js create mode 100644 node_modules/caniuse-lite/data/features/ogg-vorbis.js create mode 100644 node_modules/caniuse-lite/data/features/ogv.js create mode 100644 node_modules/caniuse-lite/data/features/ol-reversed.js create mode 100644 node_modules/caniuse-lite/data/features/once-event-listener.js create mode 100644 node_modules/caniuse-lite/data/features/online-status.js create mode 100644 node_modules/caniuse-lite/data/features/opus.js create mode 100644 node_modules/caniuse-lite/data/features/orientation-sensor.js create mode 100644 node_modules/caniuse-lite/data/features/outline.js create mode 100644 node_modules/caniuse-lite/data/features/pad-start-end.js create mode 100644 node_modules/caniuse-lite/data/features/page-transition-events.js create mode 100644 node_modules/caniuse-lite/data/features/pagevisibility.js create mode 100644 node_modules/caniuse-lite/data/features/passive-event-listener.js create mode 100644 node_modules/caniuse-lite/data/features/passkeys.js create mode 100644 node_modules/caniuse-lite/data/features/passwordrules.js create mode 100644 node_modules/caniuse-lite/data/features/path2d.js create mode 100644 node_modules/caniuse-lite/data/features/payment-request.js create mode 100644 node_modules/caniuse-lite/data/features/pdf-viewer.js create mode 100644 node_modules/caniuse-lite/data/features/permissions-api.js create mode 100644 node_modules/caniuse-lite/data/features/permissions-policy.js create mode 100644 node_modules/caniuse-lite/data/features/picture-in-picture.js create mode 100644 node_modules/caniuse-lite/data/features/picture.js create mode 100644 node_modules/caniuse-lite/data/features/ping.js create mode 100644 node_modules/caniuse-lite/data/features/png-alpha.js create mode 100644 node_modules/caniuse-lite/data/features/pointer-events.js create mode 100644 node_modules/caniuse-lite/data/features/pointer.js create mode 100644 node_modules/caniuse-lite/data/features/pointerlock.js create mode 100644 node_modules/caniuse-lite/data/features/portals.js create mode 100644 node_modules/caniuse-lite/data/features/prefers-color-scheme.js create mode 100644 node_modules/caniuse-lite/data/features/prefers-reduced-motion.js create mode 100644 node_modules/caniuse-lite/data/features/progress.js create mode 100644 node_modules/caniuse-lite/data/features/promise-finally.js create mode 100644 node_modules/caniuse-lite/data/features/promises.js create mode 100644 node_modules/caniuse-lite/data/features/proximity.js create mode 100644 node_modules/caniuse-lite/data/features/proxy.js create mode 100644 node_modules/caniuse-lite/data/features/publickeypinning.js create mode 100644 node_modules/caniuse-lite/data/features/push-api.js create mode 100644 node_modules/caniuse-lite/data/features/queryselector.js create mode 100644 node_modules/caniuse-lite/data/features/readonly-attr.js create mode 100644 node_modules/caniuse-lite/data/features/referrer-policy.js create mode 100644 node_modules/caniuse-lite/data/features/registerprotocolhandler.js create mode 100644 node_modules/caniuse-lite/data/features/rel-noopener.js create mode 100644 node_modules/caniuse-lite/data/features/rel-noreferrer.js create mode 100644 node_modules/caniuse-lite/data/features/rellist.js create mode 100644 node_modules/caniuse-lite/data/features/rem.js create mode 100644 node_modules/caniuse-lite/data/features/requestanimationframe.js create mode 100644 node_modules/caniuse-lite/data/features/requestidlecallback.js create mode 100644 node_modules/caniuse-lite/data/features/resizeobserver.js create mode 100644 node_modules/caniuse-lite/data/features/resource-timing.js create mode 100644 node_modules/caniuse-lite/data/features/rest-parameters.js create mode 100644 node_modules/caniuse-lite/data/features/rtcpeerconnection.js create mode 100644 node_modules/caniuse-lite/data/features/ruby.js create mode 100644 node_modules/caniuse-lite/data/features/run-in.js create mode 100644 node_modules/caniuse-lite/data/features/same-site-cookie-attribute.js create mode 100644 node_modules/caniuse-lite/data/features/screen-orientation.js create mode 100644 node_modules/caniuse-lite/data/features/script-async.js create mode 100644 node_modules/caniuse-lite/data/features/script-defer.js create mode 100644 node_modules/caniuse-lite/data/features/scrollintoview.js create mode 100644 node_modules/caniuse-lite/data/features/scrollintoviewifneeded.js create mode 100644 node_modules/caniuse-lite/data/features/sdch.js create mode 100644 node_modules/caniuse-lite/data/features/selection-api.js create mode 100644 node_modules/caniuse-lite/data/features/server-timing.js create mode 100644 node_modules/caniuse-lite/data/features/serviceworkers.js create mode 100644 node_modules/caniuse-lite/data/features/setimmediate.js create mode 100644 node_modules/caniuse-lite/data/features/shadowdom.js create mode 100644 node_modules/caniuse-lite/data/features/shadowdomv1.js create mode 100644 node_modules/caniuse-lite/data/features/sharedarraybuffer.js create mode 100644 node_modules/caniuse-lite/data/features/sharedworkers.js create mode 100644 node_modules/caniuse-lite/data/features/sni.js create mode 100644 node_modules/caniuse-lite/data/features/spdy.js create mode 100644 node_modules/caniuse-lite/data/features/speech-recognition.js create mode 100644 node_modules/caniuse-lite/data/features/speech-synthesis.js create mode 100644 node_modules/caniuse-lite/data/features/spellcheck-attribute.js create mode 100644 node_modules/caniuse-lite/data/features/sql-storage.js create mode 100644 node_modules/caniuse-lite/data/features/srcset.js create mode 100644 node_modules/caniuse-lite/data/features/stream.js create mode 100644 node_modules/caniuse-lite/data/features/streams.js create mode 100644 node_modules/caniuse-lite/data/features/stricttransportsecurity.js create mode 100644 node_modules/caniuse-lite/data/features/style-scoped.js create mode 100644 node_modules/caniuse-lite/data/features/subresource-bundling.js create mode 100644 node_modules/caniuse-lite/data/features/subresource-integrity.js create mode 100644 node_modules/caniuse-lite/data/features/svg-css.js create mode 100644 node_modules/caniuse-lite/data/features/svg-filters.js create mode 100644 node_modules/caniuse-lite/data/features/svg-fonts.js create mode 100644 node_modules/caniuse-lite/data/features/svg-fragment.js create mode 100644 node_modules/caniuse-lite/data/features/svg-html.js create mode 100644 node_modules/caniuse-lite/data/features/svg-html5.js create mode 100644 node_modules/caniuse-lite/data/features/svg-img.js create mode 100644 node_modules/caniuse-lite/data/features/svg-smil.js create mode 100644 node_modules/caniuse-lite/data/features/svg.js create mode 100644 node_modules/caniuse-lite/data/features/sxg.js create mode 100644 node_modules/caniuse-lite/data/features/tabindex-attr.js create mode 100644 node_modules/caniuse-lite/data/features/template-literals.js create mode 100644 node_modules/caniuse-lite/data/features/template.js create mode 100644 node_modules/caniuse-lite/data/features/temporal.js create mode 100644 node_modules/caniuse-lite/data/features/testfeat.js create mode 100644 node_modules/caniuse-lite/data/features/text-decoration.js create mode 100644 node_modules/caniuse-lite/data/features/text-emphasis.js create mode 100644 node_modules/caniuse-lite/data/features/text-overflow.js create mode 100644 node_modules/caniuse-lite/data/features/text-size-adjust.js create mode 100644 node_modules/caniuse-lite/data/features/text-stroke.js create mode 100644 node_modules/caniuse-lite/data/features/textcontent.js create mode 100644 node_modules/caniuse-lite/data/features/textencoder.js create mode 100644 node_modules/caniuse-lite/data/features/tls1-1.js create mode 100644 node_modules/caniuse-lite/data/features/tls1-2.js create mode 100644 node_modules/caniuse-lite/data/features/tls1-3.js create mode 100644 node_modules/caniuse-lite/data/features/touch.js create mode 100644 node_modules/caniuse-lite/data/features/transforms2d.js create mode 100644 node_modules/caniuse-lite/data/features/transforms3d.js create mode 100644 node_modules/caniuse-lite/data/features/trusted-types.js create mode 100644 node_modules/caniuse-lite/data/features/ttf.js create mode 100644 node_modules/caniuse-lite/data/features/typedarrays.js create mode 100644 node_modules/caniuse-lite/data/features/u2f.js create mode 100644 node_modules/caniuse-lite/data/features/unhandledrejection.js create mode 100644 node_modules/caniuse-lite/data/features/upgradeinsecurerequests.js create mode 100644 node_modules/caniuse-lite/data/features/url-scroll-to-text-fragment.js create mode 100644 node_modules/caniuse-lite/data/features/url.js create mode 100644 node_modules/caniuse-lite/data/features/urlsearchparams.js create mode 100644 node_modules/caniuse-lite/data/features/use-strict.js create mode 100644 node_modules/caniuse-lite/data/features/user-select-none.js create mode 100644 node_modules/caniuse-lite/data/features/user-timing.js create mode 100644 node_modules/caniuse-lite/data/features/variable-fonts.js create mode 100644 node_modules/caniuse-lite/data/features/vector-effect.js create mode 100644 node_modules/caniuse-lite/data/features/vibration.js create mode 100644 node_modules/caniuse-lite/data/features/video.js create mode 100644 node_modules/caniuse-lite/data/features/videotracks.js create mode 100644 node_modules/caniuse-lite/data/features/view-transitions.js create mode 100644 node_modules/caniuse-lite/data/features/viewport-unit-variants.js create mode 100644 node_modules/caniuse-lite/data/features/viewport-units.js create mode 100644 node_modules/caniuse-lite/data/features/wai-aria.js create mode 100644 node_modules/caniuse-lite/data/features/wake-lock.js create mode 100644 node_modules/caniuse-lite/data/features/wasm-bigint.js create mode 100644 node_modules/caniuse-lite/data/features/wasm-bulk-memory.js create mode 100644 node_modules/caniuse-lite/data/features/wasm-extended-const.js create mode 100644 node_modules/caniuse-lite/data/features/wasm-gc.js create mode 100644 node_modules/caniuse-lite/data/features/wasm-multi-memory.js create mode 100644 node_modules/caniuse-lite/data/features/wasm-multi-value.js create mode 100644 node_modules/caniuse-lite/data/features/wasm-mutable-globals.js create mode 100644 node_modules/caniuse-lite/data/features/wasm-nontrapping-fptoint.js create mode 100644 node_modules/caniuse-lite/data/features/wasm-reference-types.js create mode 100644 node_modules/caniuse-lite/data/features/wasm-relaxed-simd.js create mode 100644 node_modules/caniuse-lite/data/features/wasm-signext.js create mode 100644 node_modules/caniuse-lite/data/features/wasm-simd.js create mode 100644 node_modules/caniuse-lite/data/features/wasm-tail-calls.js create mode 100644 node_modules/caniuse-lite/data/features/wasm-threads.js create mode 100644 node_modules/caniuse-lite/data/features/wasm.js create mode 100644 node_modules/caniuse-lite/data/features/wav.js create mode 100644 node_modules/caniuse-lite/data/features/wbr-element.js create mode 100644 node_modules/caniuse-lite/data/features/web-animation.js create mode 100644 node_modules/caniuse-lite/data/features/web-app-manifest.js create mode 100644 node_modules/caniuse-lite/data/features/web-bluetooth.js create mode 100644 node_modules/caniuse-lite/data/features/web-serial.js create mode 100644 node_modules/caniuse-lite/data/features/web-share.js create mode 100644 node_modules/caniuse-lite/data/features/webauthn.js create mode 100644 node_modules/caniuse-lite/data/features/webcodecs.js create mode 100644 node_modules/caniuse-lite/data/features/webgl.js create mode 100644 node_modules/caniuse-lite/data/features/webgl2.js create mode 100644 node_modules/caniuse-lite/data/features/webgpu.js create mode 100644 node_modules/caniuse-lite/data/features/webhid.js create mode 100644 node_modules/caniuse-lite/data/features/webkit-user-drag.js create mode 100644 node_modules/caniuse-lite/data/features/webm.js create mode 100644 node_modules/caniuse-lite/data/features/webnfc.js create mode 100644 node_modules/caniuse-lite/data/features/webp.js create mode 100644 node_modules/caniuse-lite/data/features/websockets.js create mode 100644 node_modules/caniuse-lite/data/features/webtransport.js create mode 100644 node_modules/caniuse-lite/data/features/webusb.js create mode 100644 node_modules/caniuse-lite/data/features/webvr.js create mode 100644 node_modules/caniuse-lite/data/features/webvtt.js create mode 100644 node_modules/caniuse-lite/data/features/webworkers.js create mode 100644 node_modules/caniuse-lite/data/features/webxr.js create mode 100644 node_modules/caniuse-lite/data/features/will-change.js create mode 100644 node_modules/caniuse-lite/data/features/woff.js create mode 100644 node_modules/caniuse-lite/data/features/woff2.js create mode 100644 node_modules/caniuse-lite/data/features/word-break.js create mode 100644 node_modules/caniuse-lite/data/features/wordwrap.js create mode 100644 node_modules/caniuse-lite/data/features/x-doc-messaging.js create mode 100644 node_modules/caniuse-lite/data/features/x-frame-options.js create mode 100644 node_modules/caniuse-lite/data/features/xhr2.js create mode 100644 node_modules/caniuse-lite/data/features/xhtml.js create mode 100644 node_modules/caniuse-lite/data/features/xhtmlsmil.js create mode 100644 node_modules/caniuse-lite/data/features/xml-serializer.js create mode 100644 node_modules/caniuse-lite/data/features/zstd.js create mode 100644 node_modules/caniuse-lite/data/regions/AD.js create mode 100644 node_modules/caniuse-lite/data/regions/AE.js create mode 100644 node_modules/caniuse-lite/data/regions/AF.js create mode 100644 node_modules/caniuse-lite/data/regions/AG.js create mode 100644 node_modules/caniuse-lite/data/regions/AI.js create mode 100644 node_modules/caniuse-lite/data/regions/AL.js create mode 100644 node_modules/caniuse-lite/data/regions/AM.js create mode 100644 node_modules/caniuse-lite/data/regions/AO.js create mode 100644 node_modules/caniuse-lite/data/regions/AR.js create mode 100644 node_modules/caniuse-lite/data/regions/AS.js create mode 100644 node_modules/caniuse-lite/data/regions/AT.js create mode 100644 node_modules/caniuse-lite/data/regions/AU.js create mode 100644 node_modules/caniuse-lite/data/regions/AW.js create mode 100644 node_modules/caniuse-lite/data/regions/AX.js create mode 100644 node_modules/caniuse-lite/data/regions/AZ.js create mode 100644 node_modules/caniuse-lite/data/regions/BA.js create mode 100644 node_modules/caniuse-lite/data/regions/BB.js create mode 100644 node_modules/caniuse-lite/data/regions/BD.js create mode 100644 node_modules/caniuse-lite/data/regions/BE.js create mode 100644 node_modules/caniuse-lite/data/regions/BF.js create mode 100644 node_modules/caniuse-lite/data/regions/BG.js create mode 100644 node_modules/caniuse-lite/data/regions/BH.js create mode 100644 node_modules/caniuse-lite/data/regions/BI.js create mode 100644 node_modules/caniuse-lite/data/regions/BJ.js create mode 100644 node_modules/caniuse-lite/data/regions/BM.js create mode 100644 node_modules/caniuse-lite/data/regions/BN.js create mode 100644 node_modules/caniuse-lite/data/regions/BO.js create mode 100644 node_modules/caniuse-lite/data/regions/BR.js create mode 100644 node_modules/caniuse-lite/data/regions/BS.js create mode 100644 node_modules/caniuse-lite/data/regions/BT.js create mode 100644 node_modules/caniuse-lite/data/regions/BW.js create mode 100644 node_modules/caniuse-lite/data/regions/BY.js create mode 100644 node_modules/caniuse-lite/data/regions/BZ.js create mode 100644 node_modules/caniuse-lite/data/regions/CA.js create mode 100644 node_modules/caniuse-lite/data/regions/CD.js create mode 100644 node_modules/caniuse-lite/data/regions/CF.js create mode 100644 node_modules/caniuse-lite/data/regions/CG.js create mode 100644 node_modules/caniuse-lite/data/regions/CH.js create mode 100644 node_modules/caniuse-lite/data/regions/CI.js create mode 100644 node_modules/caniuse-lite/data/regions/CK.js create mode 100644 node_modules/caniuse-lite/data/regions/CL.js create mode 100644 node_modules/caniuse-lite/data/regions/CM.js create mode 100644 node_modules/caniuse-lite/data/regions/CN.js create mode 100644 node_modules/caniuse-lite/data/regions/CO.js create mode 100644 node_modules/caniuse-lite/data/regions/CR.js create mode 100644 node_modules/caniuse-lite/data/regions/CU.js create mode 100644 node_modules/caniuse-lite/data/regions/CV.js create mode 100644 node_modules/caniuse-lite/data/regions/CX.js create mode 100644 node_modules/caniuse-lite/data/regions/CY.js create mode 100644 node_modules/caniuse-lite/data/regions/CZ.js create mode 100644 node_modules/caniuse-lite/data/regions/DE.js create mode 100644 node_modules/caniuse-lite/data/regions/DJ.js create mode 100644 node_modules/caniuse-lite/data/regions/DK.js create mode 100644 node_modules/caniuse-lite/data/regions/DM.js create mode 100644 node_modules/caniuse-lite/data/regions/DO.js create mode 100644 node_modules/caniuse-lite/data/regions/DZ.js create mode 100644 node_modules/caniuse-lite/data/regions/EC.js create mode 100644 node_modules/caniuse-lite/data/regions/EE.js create mode 100644 node_modules/caniuse-lite/data/regions/EG.js create mode 100644 node_modules/caniuse-lite/data/regions/ER.js create mode 100644 node_modules/caniuse-lite/data/regions/ES.js create mode 100644 node_modules/caniuse-lite/data/regions/ET.js create mode 100644 node_modules/caniuse-lite/data/regions/FI.js create mode 100644 node_modules/caniuse-lite/data/regions/FJ.js create mode 100644 node_modules/caniuse-lite/data/regions/FK.js create mode 100644 node_modules/caniuse-lite/data/regions/FM.js create mode 100644 node_modules/caniuse-lite/data/regions/FO.js create mode 100644 node_modules/caniuse-lite/data/regions/FR.js create mode 100644 node_modules/caniuse-lite/data/regions/GA.js create mode 100644 node_modules/caniuse-lite/data/regions/GB.js create mode 100644 node_modules/caniuse-lite/data/regions/GD.js create mode 100644 node_modules/caniuse-lite/data/regions/GE.js create mode 100644 node_modules/caniuse-lite/data/regions/GF.js create mode 100644 node_modules/caniuse-lite/data/regions/GG.js create mode 100644 node_modules/caniuse-lite/data/regions/GH.js create mode 100644 node_modules/caniuse-lite/data/regions/GI.js create mode 100644 node_modules/caniuse-lite/data/regions/GL.js create mode 100644 node_modules/caniuse-lite/data/regions/GM.js create mode 100644 node_modules/caniuse-lite/data/regions/GN.js create mode 100644 node_modules/caniuse-lite/data/regions/GP.js create mode 100644 node_modules/caniuse-lite/data/regions/GQ.js create mode 100644 node_modules/caniuse-lite/data/regions/GR.js create mode 100644 node_modules/caniuse-lite/data/regions/GT.js create mode 100644 node_modules/caniuse-lite/data/regions/GU.js create mode 100644 node_modules/caniuse-lite/data/regions/GW.js create mode 100644 node_modules/caniuse-lite/data/regions/GY.js create mode 100644 node_modules/caniuse-lite/data/regions/HK.js create mode 100644 node_modules/caniuse-lite/data/regions/HN.js create mode 100644 node_modules/caniuse-lite/data/regions/HR.js create mode 100644 node_modules/caniuse-lite/data/regions/HT.js create mode 100644 node_modules/caniuse-lite/data/regions/HU.js create mode 100644 node_modules/caniuse-lite/data/regions/ID.js create mode 100644 node_modules/caniuse-lite/data/regions/IE.js create mode 100644 node_modules/caniuse-lite/data/regions/IL.js create mode 100644 node_modules/caniuse-lite/data/regions/IM.js create mode 100644 node_modules/caniuse-lite/data/regions/IN.js create mode 100644 node_modules/caniuse-lite/data/regions/IQ.js create mode 100644 node_modules/caniuse-lite/data/regions/IR.js create mode 100644 node_modules/caniuse-lite/data/regions/IS.js create mode 100644 node_modules/caniuse-lite/data/regions/IT.js create mode 100644 node_modules/caniuse-lite/data/regions/JE.js create mode 100644 node_modules/caniuse-lite/data/regions/JM.js create mode 100644 node_modules/caniuse-lite/data/regions/JO.js create mode 100644 node_modules/caniuse-lite/data/regions/JP.js create mode 100644 node_modules/caniuse-lite/data/regions/KE.js create mode 100644 node_modules/caniuse-lite/data/regions/KG.js create mode 100644 node_modules/caniuse-lite/data/regions/KH.js create mode 100644 node_modules/caniuse-lite/data/regions/KI.js create mode 100644 node_modules/caniuse-lite/data/regions/KM.js create mode 100644 node_modules/caniuse-lite/data/regions/KN.js create mode 100644 node_modules/caniuse-lite/data/regions/KP.js create mode 100644 node_modules/caniuse-lite/data/regions/KR.js create mode 100644 node_modules/caniuse-lite/data/regions/KW.js create mode 100644 node_modules/caniuse-lite/data/regions/KY.js create mode 100644 node_modules/caniuse-lite/data/regions/KZ.js create mode 100644 node_modules/caniuse-lite/data/regions/LA.js create mode 100644 node_modules/caniuse-lite/data/regions/LB.js create mode 100644 node_modules/caniuse-lite/data/regions/LC.js create mode 100644 node_modules/caniuse-lite/data/regions/LI.js create mode 100644 node_modules/caniuse-lite/data/regions/LK.js create mode 100644 node_modules/caniuse-lite/data/regions/LR.js create mode 100644 node_modules/caniuse-lite/data/regions/LS.js create mode 100644 node_modules/caniuse-lite/data/regions/LT.js create mode 100644 node_modules/caniuse-lite/data/regions/LU.js create mode 100644 node_modules/caniuse-lite/data/regions/LV.js create mode 100644 node_modules/caniuse-lite/data/regions/LY.js create mode 100644 node_modules/caniuse-lite/data/regions/MA.js create mode 100644 node_modules/caniuse-lite/data/regions/MC.js create mode 100644 node_modules/caniuse-lite/data/regions/MD.js create mode 100644 node_modules/caniuse-lite/data/regions/ME.js create mode 100644 node_modules/caniuse-lite/data/regions/MG.js create mode 100644 node_modules/caniuse-lite/data/regions/MH.js create mode 100644 node_modules/caniuse-lite/data/regions/MK.js create mode 100644 node_modules/caniuse-lite/data/regions/ML.js create mode 100644 node_modules/caniuse-lite/data/regions/MM.js create mode 100644 node_modules/caniuse-lite/data/regions/MN.js create mode 100644 node_modules/caniuse-lite/data/regions/MO.js create mode 100644 node_modules/caniuse-lite/data/regions/MP.js create mode 100644 node_modules/caniuse-lite/data/regions/MQ.js create mode 100644 node_modules/caniuse-lite/data/regions/MR.js create mode 100644 node_modules/caniuse-lite/data/regions/MS.js create mode 100644 node_modules/caniuse-lite/data/regions/MT.js create mode 100644 node_modules/caniuse-lite/data/regions/MU.js create mode 100644 node_modules/caniuse-lite/data/regions/MV.js create mode 100644 node_modules/caniuse-lite/data/regions/MW.js create mode 100644 node_modules/caniuse-lite/data/regions/MX.js create mode 100644 node_modules/caniuse-lite/data/regions/MY.js create mode 100644 node_modules/caniuse-lite/data/regions/MZ.js create mode 100644 node_modules/caniuse-lite/data/regions/NA.js create mode 100644 node_modules/caniuse-lite/data/regions/NC.js create mode 100644 node_modules/caniuse-lite/data/regions/NE.js create mode 100644 node_modules/caniuse-lite/data/regions/NF.js create mode 100644 node_modules/caniuse-lite/data/regions/NG.js create mode 100644 node_modules/caniuse-lite/data/regions/NI.js create mode 100644 node_modules/caniuse-lite/data/regions/NL.js create mode 100644 node_modules/caniuse-lite/data/regions/NO.js create mode 100644 node_modules/caniuse-lite/data/regions/NP.js create mode 100644 node_modules/caniuse-lite/data/regions/NR.js create mode 100644 node_modules/caniuse-lite/data/regions/NU.js create mode 100644 node_modules/caniuse-lite/data/regions/NZ.js create mode 100644 node_modules/caniuse-lite/data/regions/OM.js create mode 100644 node_modules/caniuse-lite/data/regions/PA.js create mode 100644 node_modules/caniuse-lite/data/regions/PE.js create mode 100644 node_modules/caniuse-lite/data/regions/PF.js create mode 100644 node_modules/caniuse-lite/data/regions/PG.js create mode 100644 node_modules/caniuse-lite/data/regions/PH.js create mode 100644 node_modules/caniuse-lite/data/regions/PK.js create mode 100644 node_modules/caniuse-lite/data/regions/PL.js create mode 100644 node_modules/caniuse-lite/data/regions/PM.js create mode 100644 node_modules/caniuse-lite/data/regions/PN.js create mode 100644 node_modules/caniuse-lite/data/regions/PR.js create mode 100644 node_modules/caniuse-lite/data/regions/PS.js create mode 100644 node_modules/caniuse-lite/data/regions/PT.js create mode 100644 node_modules/caniuse-lite/data/regions/PW.js create mode 100644 node_modules/caniuse-lite/data/regions/PY.js create mode 100644 node_modules/caniuse-lite/data/regions/QA.js create mode 100644 node_modules/caniuse-lite/data/regions/RE.js create mode 100644 node_modules/caniuse-lite/data/regions/RO.js create mode 100644 node_modules/caniuse-lite/data/regions/RS.js create mode 100644 node_modules/caniuse-lite/data/regions/RU.js create mode 100644 node_modules/caniuse-lite/data/regions/RW.js create mode 100644 node_modules/caniuse-lite/data/regions/SA.js create mode 100644 node_modules/caniuse-lite/data/regions/SB.js create mode 100644 node_modules/caniuse-lite/data/regions/SC.js create mode 100644 node_modules/caniuse-lite/data/regions/SD.js create mode 100644 node_modules/caniuse-lite/data/regions/SE.js create mode 100644 node_modules/caniuse-lite/data/regions/SG.js create mode 100644 node_modules/caniuse-lite/data/regions/SH.js create mode 100644 node_modules/caniuse-lite/data/regions/SI.js create mode 100644 node_modules/caniuse-lite/data/regions/SK.js create mode 100644 node_modules/caniuse-lite/data/regions/SL.js create mode 100644 node_modules/caniuse-lite/data/regions/SM.js create mode 100644 node_modules/caniuse-lite/data/regions/SN.js create mode 100644 node_modules/caniuse-lite/data/regions/SO.js create mode 100644 node_modules/caniuse-lite/data/regions/SR.js create mode 100644 node_modules/caniuse-lite/data/regions/ST.js create mode 100644 node_modules/caniuse-lite/data/regions/SV.js create mode 100644 node_modules/caniuse-lite/data/regions/SY.js create mode 100644 node_modules/caniuse-lite/data/regions/SZ.js create mode 100644 node_modules/caniuse-lite/data/regions/TC.js create mode 100644 node_modules/caniuse-lite/data/regions/TD.js create mode 100644 node_modules/caniuse-lite/data/regions/TG.js create mode 100644 node_modules/caniuse-lite/data/regions/TH.js create mode 100644 node_modules/caniuse-lite/data/regions/TJ.js create mode 100644 node_modules/caniuse-lite/data/regions/TL.js create mode 100644 node_modules/caniuse-lite/data/regions/TM.js create mode 100644 node_modules/caniuse-lite/data/regions/TN.js create mode 100644 node_modules/caniuse-lite/data/regions/TO.js create mode 100644 node_modules/caniuse-lite/data/regions/TR.js create mode 100644 node_modules/caniuse-lite/data/regions/TT.js create mode 100644 node_modules/caniuse-lite/data/regions/TV.js create mode 100644 node_modules/caniuse-lite/data/regions/TW.js create mode 100644 node_modules/caniuse-lite/data/regions/TZ.js create mode 100644 node_modules/caniuse-lite/data/regions/UA.js create mode 100644 node_modules/caniuse-lite/data/regions/UG.js create mode 100644 node_modules/caniuse-lite/data/regions/US.js create mode 100644 node_modules/caniuse-lite/data/regions/UY.js create mode 100644 node_modules/caniuse-lite/data/regions/UZ.js create mode 100644 node_modules/caniuse-lite/data/regions/VA.js create mode 100644 node_modules/caniuse-lite/data/regions/VC.js create mode 100644 node_modules/caniuse-lite/data/regions/VE.js create mode 100644 node_modules/caniuse-lite/data/regions/VG.js create mode 100644 node_modules/caniuse-lite/data/regions/VI.js create mode 100644 node_modules/caniuse-lite/data/regions/VN.js create mode 100644 node_modules/caniuse-lite/data/regions/VU.js create mode 100644 node_modules/caniuse-lite/data/regions/WF.js create mode 100644 node_modules/caniuse-lite/data/regions/WS.js create mode 100644 node_modules/caniuse-lite/data/regions/YE.js create mode 100644 node_modules/caniuse-lite/data/regions/YT.js create mode 100644 node_modules/caniuse-lite/data/regions/ZA.js create mode 100644 node_modules/caniuse-lite/data/regions/ZM.js create mode 100644 node_modules/caniuse-lite/data/regions/ZW.js create mode 100644 node_modules/caniuse-lite/data/regions/alt-af.js create mode 100644 node_modules/caniuse-lite/data/regions/alt-an.js create mode 100644 node_modules/caniuse-lite/data/regions/alt-as.js create mode 100644 node_modules/caniuse-lite/data/regions/alt-eu.js create mode 100644 node_modules/caniuse-lite/data/regions/alt-na.js create mode 100644 node_modules/caniuse-lite/data/regions/alt-oc.js create mode 100644 node_modules/caniuse-lite/data/regions/alt-sa.js create mode 100644 node_modules/caniuse-lite/data/regions/alt-ww.js create mode 100644 node_modules/caniuse-lite/dist/lib/statuses.js create mode 100644 node_modules/caniuse-lite/dist/lib/supported.js create mode 100644 node_modules/caniuse-lite/dist/unpacker/agents.js create mode 100644 node_modules/caniuse-lite/dist/unpacker/browserVersions.js create mode 100644 node_modules/caniuse-lite/dist/unpacker/browsers.js create mode 100644 node_modules/caniuse-lite/dist/unpacker/feature.js create mode 100644 node_modules/caniuse-lite/dist/unpacker/features.js create mode 100644 node_modules/caniuse-lite/dist/unpacker/index.js create mode 100644 node_modules/caniuse-lite/dist/unpacker/region.js create mode 100644 node_modules/caniuse-lite/package.json create mode 100644 node_modules/detect-libc/LICENSE create mode 100644 node_modules/detect-libc/README.md create mode 100644 node_modules/detect-libc/index.d.ts create mode 100644 node_modules/detect-libc/lib/detect-libc.js create mode 100644 node_modules/detect-libc/lib/elf.js create mode 100644 node_modules/detect-libc/lib/filesystem.js create mode 100644 node_modules/detect-libc/lib/process.js create mode 100644 node_modules/detect-libc/package.json create mode 100644 node_modules/electron-to-chromium/LICENSE create mode 100644 node_modules/electron-to-chromium/README.md create mode 100644 node_modules/electron-to-chromium/chromium-versions.js create mode 100644 node_modules/electron-to-chromium/chromium-versions.json create mode 100644 node_modules/electron-to-chromium/full-chromium-versions.js create mode 100644 node_modules/electron-to-chromium/full-chromium-versions.json create mode 100644 node_modules/electron-to-chromium/full-versions.js create mode 100644 node_modules/electron-to-chromium/full-versions.json create mode 100644 node_modules/electron-to-chromium/index.js create mode 100644 node_modules/electron-to-chromium/package.json create mode 100644 node_modules/electron-to-chromium/versions.js create mode 100644 node_modules/electron-to-chromium/versions.json create mode 100644 node_modules/enhanced-resolve/LICENSE create mode 100644 node_modules/enhanced-resolve/README.md create mode 100644 node_modules/enhanced-resolve/lib/AliasFieldPlugin.js create mode 100644 node_modules/enhanced-resolve/lib/AliasPlugin.js create mode 100644 node_modules/enhanced-resolve/lib/AliasUtils.js create mode 100644 node_modules/enhanced-resolve/lib/AppendPlugin.js create mode 100644 node_modules/enhanced-resolve/lib/CachedInputFileSystem.js create mode 100644 node_modules/enhanced-resolve/lib/CloneBasenamePlugin.js create mode 100644 node_modules/enhanced-resolve/lib/ConditionalPlugin.js create mode 100644 node_modules/enhanced-resolve/lib/DescriptionFilePlugin.js create mode 100644 node_modules/enhanced-resolve/lib/DescriptionFileUtils.js create mode 100644 node_modules/enhanced-resolve/lib/DirectoryExistsPlugin.js create mode 100644 node_modules/enhanced-resolve/lib/ExportsFieldPlugin.js create mode 100644 node_modules/enhanced-resolve/lib/ExtensionAliasPlugin.js create mode 100644 node_modules/enhanced-resolve/lib/FileExistsPlugin.js create mode 100644 node_modules/enhanced-resolve/lib/ImportsFieldPlugin.js create mode 100644 node_modules/enhanced-resolve/lib/JoinRequestPartPlugin.js create mode 100644 node_modules/enhanced-resolve/lib/JoinRequestPlugin.js create mode 100644 node_modules/enhanced-resolve/lib/LogInfoPlugin.js create mode 100644 node_modules/enhanced-resolve/lib/MainFieldPlugin.js create mode 100644 node_modules/enhanced-resolve/lib/ModulesInHierachicDirectoriesPlugin.js create mode 100644 node_modules/enhanced-resolve/lib/ModulesInHierarchicalDirectoriesPlugin.js create mode 100644 node_modules/enhanced-resolve/lib/ModulesInRootPlugin.js create mode 100644 node_modules/enhanced-resolve/lib/ModulesUtils.js create mode 100644 node_modules/enhanced-resolve/lib/NextPlugin.js create mode 100644 node_modules/enhanced-resolve/lib/ParsePlugin.js create mode 100644 node_modules/enhanced-resolve/lib/PnpPlugin.js create mode 100644 node_modules/enhanced-resolve/lib/Resolver.js create mode 100644 node_modules/enhanced-resolve/lib/ResolverFactory.js create mode 100644 node_modules/enhanced-resolve/lib/RestrictionsPlugin.js create mode 100644 node_modules/enhanced-resolve/lib/ResultPlugin.js create mode 100644 node_modules/enhanced-resolve/lib/RootsPlugin.js create mode 100644 node_modules/enhanced-resolve/lib/SelfReferencePlugin.js create mode 100644 node_modules/enhanced-resolve/lib/SymlinkPlugin.js create mode 100644 node_modules/enhanced-resolve/lib/SyncAsyncFileSystemDecorator.js create mode 100644 node_modules/enhanced-resolve/lib/TryNextPlugin.js create mode 100644 node_modules/enhanced-resolve/lib/TsconfigPathsPlugin.js create mode 100644 node_modules/enhanced-resolve/lib/UnsafeCachePlugin.js create mode 100644 node_modules/enhanced-resolve/lib/UseFilePlugin.js create mode 100644 node_modules/enhanced-resolve/lib/createInnerContext.js create mode 100644 node_modules/enhanced-resolve/lib/forEachBail.js create mode 100644 node_modules/enhanced-resolve/lib/getInnerRequest.js create mode 100644 node_modules/enhanced-resolve/lib/getPaths.js create mode 100644 node_modules/enhanced-resolve/lib/index.js create mode 100644 node_modules/enhanced-resolve/lib/util/entrypoints.js create mode 100644 node_modules/enhanced-resolve/lib/util/fs.js create mode 100644 node_modules/enhanced-resolve/lib/util/identifier.js create mode 100644 node_modules/enhanced-resolve/lib/util/memoize.js create mode 100644 node_modules/enhanced-resolve/lib/util/module-browser.js create mode 100644 node_modules/enhanced-resolve/lib/util/path.js create mode 100644 node_modules/enhanced-resolve/lib/util/process-browser.js create mode 100644 node_modules/enhanced-resolve/lib/util/strip-json-comments.js create mode 100644 node_modules/enhanced-resolve/package.json create mode 100644 node_modules/enhanced-resolve/types.d.ts create mode 100644 node_modules/escalade/dist/index.js create mode 100644 node_modules/escalade/dist/index.mjs create mode 100644 node_modules/escalade/index.d.mts create mode 100644 node_modules/escalade/index.d.ts create mode 100644 node_modules/escalade/license create mode 100644 node_modules/escalade/package.json create mode 100644 node_modules/escalade/readme.md create mode 100644 node_modules/escalade/sync/index.d.mts create mode 100644 node_modules/escalade/sync/index.d.ts create mode 100644 node_modules/escalade/sync/index.js create mode 100644 node_modules/escalade/sync/index.mjs create mode 100644 node_modules/fraction.js/CHANGELOG.md create mode 100644 node_modules/fraction.js/LICENSE create mode 100644 node_modules/fraction.js/README.md create mode 100644 node_modules/fraction.js/dist/fraction.js create mode 100644 node_modules/fraction.js/dist/fraction.min.js create mode 100644 node_modules/fraction.js/dist/fraction.mjs create mode 100644 node_modules/fraction.js/examples/angles.js create mode 100644 node_modules/fraction.js/examples/approx.js create mode 100644 node_modules/fraction.js/examples/egyptian.js create mode 100644 node_modules/fraction.js/examples/hesse-convergence.js create mode 100644 node_modules/fraction.js/examples/integrate.js create mode 100644 node_modules/fraction.js/examples/ratio-chain.js create mode 100644 node_modules/fraction.js/examples/rational-pow.js create mode 100644 node_modules/fraction.js/examples/tape-measure.js create mode 100644 node_modules/fraction.js/examples/toFraction.js create mode 100644 node_modules/fraction.js/examples/valueOfPi.js create mode 100644 node_modules/fraction.js/fraction.d.mts create mode 100644 node_modules/fraction.js/fraction.d.ts create mode 100644 node_modules/fraction.js/package.json create mode 100644 node_modules/fraction.js/src/fraction.js create mode 100644 node_modules/fraction.js/tests/fraction.test.js create mode 100644 node_modules/graceful-fs/LICENSE create mode 100644 node_modules/graceful-fs/README.md create mode 100644 node_modules/graceful-fs/clone.js create mode 100644 node_modules/graceful-fs/graceful-fs.js create mode 100644 node_modules/graceful-fs/legacy-streams.js create mode 100644 node_modules/graceful-fs/package.json create mode 100644 node_modules/graceful-fs/polyfills.js create mode 100644 node_modules/is-extglob/LICENSE create mode 100644 node_modules/is-extglob/README.md create mode 100644 node_modules/is-extglob/index.js create mode 100644 node_modules/is-extglob/package.json create mode 100644 node_modules/is-glob/LICENSE create mode 100644 node_modules/is-glob/README.md create mode 100644 node_modules/is-glob/index.js create mode 100644 node_modules/is-glob/package.json create mode 100644 node_modules/jiti/LICENSE create mode 100644 node_modules/jiti/README.md create mode 100644 node_modules/jiti/dist/babel.cjs create mode 100644 node_modules/jiti/dist/jiti.cjs create mode 100755 node_modules/jiti/lib/jiti-cli.mjs create mode 100644 node_modules/jiti/lib/jiti-hooks.mjs create mode 100644 node_modules/jiti/lib/jiti-native.mjs create mode 100644 node_modules/jiti/lib/jiti-register.d.mts create mode 100644 node_modules/jiti/lib/jiti-register.mjs create mode 100644 node_modules/jiti/lib/jiti.cjs create mode 100644 node_modules/jiti/lib/jiti.d.cts create mode 100644 node_modules/jiti/lib/jiti.d.mts create mode 100644 node_modules/jiti/lib/jiti.mjs create mode 100644 node_modules/jiti/lib/types.d.ts create mode 100644 node_modules/jiti/package.json create mode 100644 node_modules/lightningcss-darwin-arm64/LICENSE create mode 100644 node_modules/lightningcss-darwin-arm64/README.md create mode 100644 node_modules/lightningcss-darwin-arm64/lightningcss.darwin-arm64.node create mode 100644 node_modules/lightningcss-darwin-arm64/package.json create mode 100644 node_modules/lightningcss/LICENSE create mode 100644 node_modules/lightningcss/README.md create mode 100644 node_modules/lightningcss/node/ast.d.ts create mode 100644 node_modules/lightningcss/node/ast.js.flow create mode 100644 node_modules/lightningcss/node/browserslistToTargets.js create mode 100644 node_modules/lightningcss/node/composeVisitors.js create mode 100644 node_modules/lightningcss/node/flags.js create mode 100644 node_modules/lightningcss/node/index.d.ts create mode 100644 node_modules/lightningcss/node/index.js create mode 100644 node_modules/lightningcss/node/index.js.flow create mode 100644 node_modules/lightningcss/node/index.mjs create mode 100644 node_modules/lightningcss/node/targets.d.ts create mode 100644 node_modules/lightningcss/node/targets.js.flow create mode 100644 node_modules/lightningcss/package.json create mode 100644 node_modules/magic-string/LICENSE create mode 100644 node_modules/magic-string/README.md create mode 100644 node_modules/magic-string/dist/magic-string.cjs.d.ts create mode 100644 node_modules/magic-string/dist/magic-string.cjs.js create mode 100644 node_modules/magic-string/dist/magic-string.cjs.js.map create mode 100644 node_modules/magic-string/dist/magic-string.es.d.mts create mode 100644 node_modules/magic-string/dist/magic-string.es.mjs create mode 100644 node_modules/magic-string/dist/magic-string.es.mjs.map create mode 100644 node_modules/magic-string/dist/magic-string.umd.js create mode 100644 node_modules/magic-string/dist/magic-string.umd.js.map create mode 100644 node_modules/magic-string/package.json create mode 100644 node_modules/mri/index.d.ts create mode 100644 node_modules/mri/lib/index.js create mode 100644 node_modules/mri/lib/index.mjs create mode 100644 node_modules/mri/license.md create mode 100644 node_modules/mri/package.json create mode 100644 node_modules/mri/readme.md create mode 100644 node_modules/nanoid/LICENSE create mode 100644 node_modules/nanoid/README.md create mode 100644 node_modules/nanoid/async/index.browser.cjs create mode 100644 node_modules/nanoid/async/index.browser.js create mode 100644 node_modules/nanoid/async/index.cjs create mode 100644 node_modules/nanoid/async/index.d.ts create mode 100644 node_modules/nanoid/async/index.js create mode 100644 node_modules/nanoid/async/index.native.js create mode 100644 node_modules/nanoid/async/package.json create mode 100755 node_modules/nanoid/bin/nanoid.cjs create mode 100644 node_modules/nanoid/index.browser.cjs create mode 100644 node_modules/nanoid/index.browser.js create mode 100644 node_modules/nanoid/index.cjs create mode 100644 node_modules/nanoid/index.d.cts create mode 100644 node_modules/nanoid/index.d.ts create mode 100644 node_modules/nanoid/index.js create mode 100644 node_modules/nanoid/nanoid.js create mode 100644 node_modules/nanoid/non-secure/index.cjs create mode 100644 node_modules/nanoid/non-secure/index.d.ts create mode 100644 node_modules/nanoid/non-secure/index.js create mode 100644 node_modules/nanoid/non-secure/package.json create mode 100644 node_modules/nanoid/package.json create mode 100644 node_modules/nanoid/url-alphabet/index.cjs create mode 100644 node_modules/nanoid/url-alphabet/index.js create mode 100644 node_modules/nanoid/url-alphabet/package.json create mode 100644 node_modules/node-addon-api/LICENSE.md create mode 100644 node_modules/node-addon-api/README.md create mode 100644 node_modules/node-addon-api/common.gypi create mode 100644 node_modules/node-addon-api/except.gypi create mode 100644 node_modules/node-addon-api/index.js create mode 100644 node_modules/node-addon-api/napi-inl.deprecated.h create mode 100644 node_modules/node-addon-api/napi-inl.h create mode 100644 node_modules/node-addon-api/napi.h create mode 100644 node_modules/node-addon-api/node_addon_api.gyp create mode 100644 node_modules/node-addon-api/node_api.gyp create mode 100644 node_modules/node-addon-api/noexcept.gypi create mode 100644 node_modules/node-addon-api/nothing.c create mode 100644 node_modules/node-addon-api/package-support.json create mode 100644 node_modules/node-addon-api/package.json create mode 100644 node_modules/node-addon-api/tools/README.md create mode 100644 node_modules/node-addon-api/tools/check-napi.js create mode 100644 node_modules/node-addon-api/tools/clang-format.js create mode 100755 node_modules/node-addon-api/tools/conversion.js create mode 100644 node_modules/node-addon-api/tools/eslint-format.js create mode 100644 node_modules/node-releases/LICENSE create mode 100644 node_modules/node-releases/README.md create mode 100644 node_modules/node-releases/data/processed/envs.json create mode 100644 node_modules/node-releases/data/release-schedule/release-schedule.json create mode 100644 node_modules/node-releases/package.json create mode 100644 node_modules/picocolors/LICENSE create mode 100644 node_modules/picocolors/README.md create mode 100644 node_modules/picocolors/package.json create mode 100644 node_modules/picocolors/picocolors.browser.js create mode 100644 node_modules/picocolors/picocolors.d.ts create mode 100644 node_modules/picocolors/picocolors.js create mode 100644 node_modules/picocolors/types.d.ts create mode 100644 node_modules/picomatch/LICENSE create mode 100644 node_modules/picomatch/README.md create mode 100644 node_modules/picomatch/index.js create mode 100644 node_modules/picomatch/lib/constants.js create mode 100644 node_modules/picomatch/lib/parse.js create mode 100644 node_modules/picomatch/lib/picomatch.js create mode 100644 node_modules/picomatch/lib/scan.js create mode 100644 node_modules/picomatch/lib/utils.js create mode 100644 node_modules/picomatch/package.json create mode 100644 node_modules/picomatch/posix.js create mode 100644 node_modules/postcss-value-parser/LICENSE create mode 100644 node_modules/postcss-value-parser/README.md create mode 100644 node_modules/postcss-value-parser/lib/index.d.ts create mode 100644 node_modules/postcss-value-parser/lib/index.js create mode 100644 node_modules/postcss-value-parser/lib/parse.js create mode 100644 node_modules/postcss-value-parser/lib/stringify.js create mode 100644 node_modules/postcss-value-parser/lib/unit.js create mode 100644 node_modules/postcss-value-parser/lib/walk.js create mode 100644 node_modules/postcss-value-parser/package.json create mode 100644 node_modules/postcss/LICENSE create mode 100644 node_modules/postcss/README.md create mode 100644 node_modules/postcss/lib/at-rule.d.ts create mode 100644 node_modules/postcss/lib/at-rule.js create mode 100644 node_modules/postcss/lib/comment.d.ts create mode 100644 node_modules/postcss/lib/comment.js create mode 100644 node_modules/postcss/lib/container.d.ts create mode 100644 node_modules/postcss/lib/container.js create mode 100644 node_modules/postcss/lib/css-syntax-error.d.ts create mode 100644 node_modules/postcss/lib/css-syntax-error.js create mode 100644 node_modules/postcss/lib/declaration.d.ts create mode 100644 node_modules/postcss/lib/declaration.js create mode 100644 node_modules/postcss/lib/document.d.ts create mode 100644 node_modules/postcss/lib/document.js create mode 100644 node_modules/postcss/lib/fromJSON.d.ts create mode 100644 node_modules/postcss/lib/fromJSON.js create mode 100644 node_modules/postcss/lib/input.d.ts create mode 100644 node_modules/postcss/lib/input.js create mode 100644 node_modules/postcss/lib/lazy-result.d.ts create mode 100644 node_modules/postcss/lib/lazy-result.js create mode 100644 node_modules/postcss/lib/list.d.ts create mode 100644 node_modules/postcss/lib/list.js create mode 100644 node_modules/postcss/lib/map-generator.js create mode 100644 node_modules/postcss/lib/no-work-result.d.ts create mode 100644 node_modules/postcss/lib/no-work-result.js create mode 100644 node_modules/postcss/lib/node.d.ts create mode 100644 node_modules/postcss/lib/node.js create mode 100644 node_modules/postcss/lib/parse.d.ts create mode 100644 node_modules/postcss/lib/parse.js create mode 100644 node_modules/postcss/lib/parser.js create mode 100644 node_modules/postcss/lib/postcss.d.mts create mode 100644 node_modules/postcss/lib/postcss.d.ts create mode 100644 node_modules/postcss/lib/postcss.js create mode 100644 node_modules/postcss/lib/postcss.mjs create mode 100644 node_modules/postcss/lib/previous-map.d.ts create mode 100644 node_modules/postcss/lib/previous-map.js create mode 100644 node_modules/postcss/lib/processor.d.ts create mode 100644 node_modules/postcss/lib/processor.js create mode 100644 node_modules/postcss/lib/result.d.ts create mode 100644 node_modules/postcss/lib/result.js create mode 100644 node_modules/postcss/lib/root.d.ts create mode 100644 node_modules/postcss/lib/root.js create mode 100644 node_modules/postcss/lib/rule.d.ts create mode 100644 node_modules/postcss/lib/rule.js create mode 100644 node_modules/postcss/lib/stringifier.d.ts create mode 100644 node_modules/postcss/lib/stringifier.js create mode 100644 node_modules/postcss/lib/stringify.d.ts create mode 100644 node_modules/postcss/lib/stringify.js create mode 100644 node_modules/postcss/lib/symbols.js create mode 100644 node_modules/postcss/lib/terminal-highlight.js create mode 100644 node_modules/postcss/lib/tokenize.js create mode 100644 node_modules/postcss/lib/warn-once.js create mode 100644 node_modules/postcss/lib/warning.d.ts create mode 100644 node_modules/postcss/lib/warning.js create mode 100644 node_modules/postcss/package.json create mode 100644 node_modules/source-map-js/LICENSE create mode 100644 node_modules/source-map-js/README.md create mode 100644 node_modules/source-map-js/lib/array-set.js create mode 100644 node_modules/source-map-js/lib/base64-vlq.js create mode 100644 node_modules/source-map-js/lib/base64.js create mode 100644 node_modules/source-map-js/lib/binary-search.js create mode 100644 node_modules/source-map-js/lib/mapping-list.js create mode 100644 node_modules/source-map-js/lib/quick-sort.js create mode 100644 node_modules/source-map-js/lib/source-map-consumer.d.ts create mode 100644 node_modules/source-map-js/lib/source-map-consumer.js create mode 100644 node_modules/source-map-js/lib/source-map-generator.d.ts create mode 100644 node_modules/source-map-js/lib/source-map-generator.js create mode 100644 node_modules/source-map-js/lib/source-node.d.ts create mode 100644 node_modules/source-map-js/lib/source-node.js create mode 100644 node_modules/source-map-js/lib/util.js create mode 100644 node_modules/source-map-js/package.json create mode 100644 node_modules/source-map-js/source-map.d.ts create mode 100644 node_modules/source-map-js/source-map.js create mode 100644 node_modules/tailwindcss/LICENSE create mode 100644 node_modules/tailwindcss/README.md create mode 100644 node_modules/tailwindcss/dist/chunk-F4544Y4M.mjs create mode 100644 node_modules/tailwindcss/dist/chunk-TDNFF6A4.mjs create mode 100644 node_modules/tailwindcss/dist/chunk-X4GG3EDV.mjs create mode 100644 node_modules/tailwindcss/dist/colors-C__qRT83.d.ts create mode 100644 node_modules/tailwindcss/dist/colors.d.mts create mode 100644 node_modules/tailwindcss/dist/colors.d.ts create mode 100644 node_modules/tailwindcss/dist/colors.js create mode 100644 node_modules/tailwindcss/dist/colors.mjs create mode 100644 node_modules/tailwindcss/dist/default-theme.d.mts create mode 100644 node_modules/tailwindcss/dist/default-theme.d.ts create mode 100644 node_modules/tailwindcss/dist/default-theme.js create mode 100644 node_modules/tailwindcss/dist/default-theme.mjs create mode 100644 node_modules/tailwindcss/dist/flatten-color-palette.d.mts create mode 100644 node_modules/tailwindcss/dist/flatten-color-palette.d.ts create mode 100644 node_modules/tailwindcss/dist/flatten-color-palette.js create mode 100644 node_modules/tailwindcss/dist/flatten-color-palette.mjs create mode 100644 node_modules/tailwindcss/dist/lib.d.mts create mode 100644 node_modules/tailwindcss/dist/lib.d.ts create mode 100644 node_modules/tailwindcss/dist/lib.js create mode 100644 node_modules/tailwindcss/dist/lib.mjs create mode 100644 node_modules/tailwindcss/dist/plugin.d.mts create mode 100644 node_modules/tailwindcss/dist/plugin.d.ts create mode 100644 node_modules/tailwindcss/dist/plugin.js create mode 100644 node_modules/tailwindcss/dist/plugin.mjs create mode 100644 node_modules/tailwindcss/dist/resolve-config-B4yBzhca.d.ts create mode 100644 node_modules/tailwindcss/dist/resolve-config-QUZ9b-Gn.d.mts create mode 100644 node_modules/tailwindcss/dist/types-CJYAW1ql.d.mts create mode 100644 node_modules/tailwindcss/index.css create mode 100644 node_modules/tailwindcss/package.json create mode 100644 node_modules/tailwindcss/preflight.css create mode 100644 node_modules/tailwindcss/theme.css create mode 100644 node_modules/tailwindcss/utilities.css create mode 100644 node_modules/tapable/LICENSE create mode 100644 node_modules/tapable/README.md create mode 100644 node_modules/tapable/lib/AsyncParallelBailHook.js create mode 100644 node_modules/tapable/lib/AsyncParallelHook.js create mode 100644 node_modules/tapable/lib/AsyncSeriesBailHook.js create mode 100644 node_modules/tapable/lib/AsyncSeriesHook.js create mode 100644 node_modules/tapable/lib/AsyncSeriesLoopHook.js create mode 100644 node_modules/tapable/lib/AsyncSeriesWaterfallHook.js create mode 100644 node_modules/tapable/lib/Hook.js create mode 100644 node_modules/tapable/lib/HookCodeFactory.js create mode 100644 node_modules/tapable/lib/HookMap.js create mode 100644 node_modules/tapable/lib/MultiHook.js create mode 100644 node_modules/tapable/lib/SyncBailHook.js create mode 100644 node_modules/tapable/lib/SyncHook.js create mode 100644 node_modules/tapable/lib/SyncLoopHook.js create mode 100644 node_modules/tapable/lib/SyncWaterfallHook.js create mode 100644 node_modules/tapable/lib/index.js create mode 100644 node_modules/tapable/lib/util-browser.js create mode 100644 node_modules/tapable/package.json create mode 100644 node_modules/tapable/tapable.d.ts create mode 100644 node_modules/update-browserslist-db/LICENSE create mode 100644 node_modules/update-browserslist-db/README.md create mode 100644 node_modules/update-browserslist-db/check-npm-version.js create mode 100755 node_modules/update-browserslist-db/cli.js create mode 100644 node_modules/update-browserslist-db/index.d.ts create mode 100644 node_modules/update-browserslist-db/index.js create mode 100644 node_modules/update-browserslist-db/package.json create mode 100644 node_modules/update-browserslist-db/utils.js create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 tailwind.config.js diff --git a/assets/global.css b/assets/global.css new file mode 100644 index 0000000000..21077b6905 --- /dev/null +++ b/assets/global.css @@ -0,0 +1,597 @@ +/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */ +@layer properties; +@layer theme, base, components, utilities; +@layer theme { + :root, :host { + --font-sans: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", + "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", + "Courier New", monospace; + --color-black: #000; + --color-white: #fff; + --spacing: 0.25rem; + --breakpoint-sm: 40rem; + --breakpoint-md: 48rem; + --breakpoint-lg: 64rem; + --breakpoint-xl: 80rem; + --breakpoint-2xl: 96rem; + --font-weight-normal: 400; + --font-weight-medium: 500; + --font-weight-semibold: 600; + --font-weight-bold: 700; + --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1); + --default-transition-duration: 150ms; + --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + --default-font-family: var(--font-sans); + --default-mono-font-family: var(--font-mono); + } +} +@layer base { + *, ::after, ::before, ::backdrop, ::file-selector-button { + box-sizing: border-box; + margin: 0; + padding: 0; + border: 0 solid; + } + html, :host { + line-height: 1.5; + -webkit-text-size-adjust: 100%; + tab-size: 4; + font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"); + font-feature-settings: var(--default-font-feature-settings, normal); + font-variation-settings: var(--default-font-variation-settings, normal); + -webkit-tap-highlight-color: transparent; + } + hr { + height: 0; + color: inherit; + border-top-width: 1px; + } + abbr:where([title]) { + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; + } + h1, h2, h3, h4, h5, h6 { + font-size: inherit; + font-weight: inherit; + } + a { + color: inherit; + -webkit-text-decoration: inherit; + text-decoration: inherit; + } + b, strong { + font-weight: bolder; + } + code, kbd, samp, pre { + font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace); + font-feature-settings: var(--default-mono-font-feature-settings, normal); + font-variation-settings: var(--default-mono-font-variation-settings, normal); + font-size: 1em; + } + small { + font-size: 80%; + } + sub, sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; + } + sub { + bottom: -0.25em; + } + sup { + top: -0.5em; + } + table { + text-indent: 0; + border-color: inherit; + border-collapse: collapse; + } + :-moz-focusring { + outline: auto; + } + progress { + vertical-align: baseline; + } + summary { + display: list-item; + } + ol, ul, menu { + list-style: none; + } + img, svg, video, canvas, audio, iframe, embed, object { + display: block; + vertical-align: middle; + } + img, video { + max-width: 100%; + height: auto; + } + button, input, select, optgroup, textarea, ::file-selector-button { + font: inherit; + font-feature-settings: inherit; + font-variation-settings: inherit; + letter-spacing: inherit; + color: inherit; + border-radius: 0; + background-color: transparent; + opacity: 1; + } + :where(select:is([multiple], [size])) optgroup { + font-weight: bolder; + } + :where(select:is([multiple], [size])) optgroup option { + padding-inline-start: 20px; + } + ::file-selector-button { + margin-inline-end: 4px; + } + ::placeholder { + opacity: 1; + } + @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) { + ::placeholder { + color: currentcolor; + @supports (color: color-mix(in lab, red, red)) { + color: color-mix(in oklab, currentcolor 50%, transparent); + } + } + } + textarea { + resize: vertical; + } + ::-webkit-search-decoration { + -webkit-appearance: none; + } + ::-webkit-date-and-time-value { + min-height: 1lh; + text-align: inherit; + } + ::-webkit-datetime-edit { + display: inline-flex; + } + ::-webkit-datetime-edit-fields-wrapper { + padding: 0; + } + ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field { + padding-block: 0; + } + ::-webkit-calendar-picker-indicator { + line-height: 1; + } + :-moz-ui-invalid { + box-shadow: none; + } + button, input:where([type="button"], [type="reset"], [type="submit"]), ::file-selector-button { + appearance: button; + } + ::-webkit-inner-spin-button, ::-webkit-outer-spin-button { + height: auto; + } + [hidden]:where(:not([hidden="until-found"])) { + display: none !important; + } +} +@layer utilities { + .\@container { + container-type: inline-size; + } + .visible { + visibility: visible; + } + .sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip-path: inset(50%); + white-space: nowrap; + border-width: 0; + } + .absolute { + position: absolute; + } + .fixed { + position: fixed; + } + .relative { + position: relative; + } + .static { + position: static; + } + .sticky { + position: sticky; + } + .start { + inset-inline-start: var(--spacing); + } + .end { + inset-inline-end: var(--spacing); + } + .row-1 { + grid-row: 1; + } + .row-2 { + grid-row: 2; + } + .row-3 { + grid-row: 3; + } + .container { + width: 100%; + @media (width >= 40rem) { + max-width: 40rem; + } + @media (width >= 48rem) { + max-width: 48rem; + } + @media (width >= 64rem) { + max-width: 64rem; + } + @media (width >= 80rem) { + max-width: 80rem; + } + @media (width >= 96rem) { + max-width: 96rem; + } + } + .block { + display: block; + } + .contents { + display: contents; + } + .flex { + display: flex; + } + .grid { + display: grid; + } + .hidden { + display: none; + } + .inline { + display: inline; + } + .table { + display: table; + } + .flex-shrink { + flex-shrink: 1; + } + .shrink { + flex-shrink: 1; + } + .flex-grow { + flex-grow: 1; + } + .grow { + flex-grow: 1; + } + .transform { + transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,); + } + .resize { + resize: both; + } + .flex-wrap { + flex-wrap: wrap; + } + .truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + .rounded { + border-radius: 0.25rem; + } + .border { + border-style: var(--tw-border-style); + border-width: 1px; + } + .text-center { + text-align: center; + } + .text-left { + text-align: left; + } + .text-right { + text-align: right; + } + .text-wrap { + text-wrap: wrap; + } + .text-inherit { + color: inherit; + } + .capitalize { + text-transform: capitalize; + } + .lowercase { + text-transform: lowercase; + } + .uppercase { + text-transform: uppercase; + } + .italic { + font-style: italic; + } + .underline { + text-decoration-line: underline; + } + .shadow { + --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + .ring { + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + .outline { + outline-style: var(--tw-outline-style); + outline-width: 1px; + } + .blur { + --tw-blur: blur(8px); + filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,); + } + .filter { + filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,); + } + .backdrop-filter { + -webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,); + backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,); + } + .transition { + transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, content-visibility, overlay, pointer-events; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + .ease-in-out { + --tw-ease: var(--ease-in-out); + transition-timing-function: var(--ease-in-out); + } +} +@property --tw-rotate-x { + syntax: "*"; + inherits: false; +} +@property --tw-rotate-y { + syntax: "*"; + inherits: false; +} +@property --tw-rotate-z { + syntax: "*"; + inherits: false; +} +@property --tw-skew-x { + syntax: "*"; + inherits: false; +} +@property --tw-skew-y { + syntax: "*"; + inherits: false; +} +@property --tw-border-style { + syntax: "*"; + inherits: false; + initial-value: solid; +} +@property --tw-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-shadow-color { + syntax: "*"; + inherits: false; +} +@property --tw-shadow-alpha { + syntax: ""; + inherits: false; + initial-value: 100%; +} +@property --tw-inset-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-inset-shadow-color { + syntax: "*"; + inherits: false; +} +@property --tw-inset-shadow-alpha { + syntax: ""; + inherits: false; + initial-value: 100%; +} +@property --tw-ring-color { + syntax: "*"; + inherits: false; +} +@property --tw-ring-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-inset-ring-color { + syntax: "*"; + inherits: false; +} +@property --tw-inset-ring-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-ring-inset { + syntax: "*"; + inherits: false; +} +@property --tw-ring-offset-width { + syntax: ""; + inherits: false; + initial-value: 0px; +} +@property --tw-ring-offset-color { + syntax: "*"; + inherits: false; + initial-value: #fff; +} +@property --tw-ring-offset-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-outline-style { + syntax: "*"; + inherits: false; + initial-value: solid; +} +@property --tw-blur { + syntax: "*"; + inherits: false; +} +@property --tw-brightness { + syntax: "*"; + inherits: false; +} +@property --tw-contrast { + syntax: "*"; + inherits: false; +} +@property --tw-grayscale { + syntax: "*"; + inherits: false; +} +@property --tw-hue-rotate { + syntax: "*"; + inherits: false; +} +@property --tw-invert { + syntax: "*"; + inherits: false; +} +@property --tw-opacity { + syntax: "*"; + inherits: false; +} +@property --tw-saturate { + syntax: "*"; + inherits: false; +} +@property --tw-sepia { + syntax: "*"; + inherits: false; +} +@property --tw-drop-shadow { + syntax: "*"; + inherits: false; +} +@property --tw-drop-shadow-color { + syntax: "*"; + inherits: false; +} +@property --tw-drop-shadow-alpha { + syntax: ""; + inherits: false; + initial-value: 100%; +} +@property --tw-drop-shadow-size { + syntax: "*"; + inherits: false; +} +@property --tw-backdrop-blur { + syntax: "*"; + inherits: false; +} +@property --tw-backdrop-brightness { + syntax: "*"; + inherits: false; +} +@property --tw-backdrop-contrast { + syntax: "*"; + inherits: false; +} +@property --tw-backdrop-grayscale { + syntax: "*"; + inherits: false; +} +@property --tw-backdrop-hue-rotate { + syntax: "*"; + inherits: false; +} +@property --tw-backdrop-invert { + syntax: "*"; + inherits: false; +} +@property --tw-backdrop-opacity { + syntax: "*"; + inherits: false; +} +@property --tw-backdrop-saturate { + syntax: "*"; + inherits: false; +} +@property --tw-backdrop-sepia { + syntax: "*"; + inherits: false; +} +@property --tw-ease { + syntax: "*"; + inherits: false; +} +@layer properties { + @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) { + *, ::before, ::after, ::backdrop { + --tw-rotate-x: initial; + --tw-rotate-y: initial; + --tw-rotate-z: initial; + --tw-skew-x: initial; + --tw-skew-y: initial; + --tw-border-style: solid; + --tw-shadow: 0 0 #0000; + --tw-shadow-color: initial; + --tw-shadow-alpha: 100%; + --tw-inset-shadow: 0 0 #0000; + --tw-inset-shadow-color: initial; + --tw-inset-shadow-alpha: 100%; + --tw-ring-color: initial; + --tw-ring-shadow: 0 0 #0000; + --tw-inset-ring-color: initial; + --tw-inset-ring-shadow: 0 0 #0000; + --tw-ring-inset: initial; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-offset-shadow: 0 0 #0000; + --tw-outline-style: solid; + --tw-blur: initial; + --tw-brightness: initial; + --tw-contrast: initial; + --tw-grayscale: initial; + --tw-hue-rotate: initial; + --tw-invert: initial; + --tw-opacity: initial; + --tw-saturate: initial; + --tw-sepia: initial; + --tw-drop-shadow: initial; + --tw-drop-shadow-color: initial; + --tw-drop-shadow-alpha: 100%; + --tw-drop-shadow-size: initial; + --tw-backdrop-blur: initial; + --tw-backdrop-brightness: initial; + --tw-backdrop-contrast: initial; + --tw-backdrop-grayscale: initial; + --tw-backdrop-hue-rotate: initial; + --tw-backdrop-invert: initial; + --tw-backdrop-opacity: initial; + --tw-backdrop-saturate: initial; + --tw-backdrop-sepia: initial; + --tw-ease: initial; + } + } +} diff --git a/assets/tailwind.css b/assets/tailwind.css new file mode 100644 index 0000000000..a461c505f1 --- /dev/null +++ b/assets/tailwind.css @@ -0,0 +1 @@ +@import "tailwindcss"; \ No newline at end of file diff --git a/layout/theme.liquid b/layout/theme.liquid index 2b6b6a151a..8da7264891 100644 --- a/layout/theme.liquid +++ b/layout/theme.liquid @@ -36,6 +36,7 @@ {% endif %} {{ content_for_header }} + {{ 'global.css' | asset_url | stylesheet_tag }} diff --git a/node_modules/.bin/autoprefixer b/node_modules/.bin/autoprefixer new file mode 120000 index 0000000000..e876d81c38 --- /dev/null +++ b/node_modules/.bin/autoprefixer @@ -0,0 +1 @@ +../autoprefixer/bin/autoprefixer \ No newline at end of file diff --git a/node_modules/.bin/baseline-browser-mapping b/node_modules/.bin/baseline-browser-mapping new file mode 120000 index 0000000000..8e9a12d9bf --- /dev/null +++ b/node_modules/.bin/baseline-browser-mapping @@ -0,0 +1 @@ +../baseline-browser-mapping/dist/cli.cjs \ No newline at end of file diff --git a/node_modules/.bin/browserslist b/node_modules/.bin/browserslist new file mode 120000 index 0000000000..3cd991b258 --- /dev/null +++ b/node_modules/.bin/browserslist @@ -0,0 +1 @@ +../browserslist/cli.js \ No newline at end of file diff --git a/node_modules/.bin/jiti b/node_modules/.bin/jiti new file mode 120000 index 0000000000..18f28cf340 --- /dev/null +++ b/node_modules/.bin/jiti @@ -0,0 +1 @@ +../jiti/lib/jiti-cli.mjs \ No newline at end of file diff --git a/node_modules/.bin/nanoid b/node_modules/.bin/nanoid new file mode 120000 index 0000000000..e2be547bcb --- /dev/null +++ b/node_modules/.bin/nanoid @@ -0,0 +1 @@ +../nanoid/bin/nanoid.cjs \ No newline at end of file diff --git a/node_modules/.bin/tailwindcss b/node_modules/.bin/tailwindcss new file mode 120000 index 0000000000..bad031cbd4 --- /dev/null +++ b/node_modules/.bin/tailwindcss @@ -0,0 +1 @@ +../@tailwindcss/cli/dist/index.mjs \ No newline at end of file diff --git a/node_modules/.bin/update-browserslist-db b/node_modules/.bin/update-browserslist-db new file mode 120000 index 0000000000..b11e16f3d5 --- /dev/null +++ b/node_modules/.bin/update-browserslist-db @@ -0,0 +1 @@ +../update-browserslist-db/cli.js \ No newline at end of file diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json new file mode 100644 index 0000000000..134f497725 --- /dev/null +++ b/node_modules/.package-lock.json @@ -0,0 +1,1294 @@ +{ + "name": "theme_horizon", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.6.tgz", + "integrity": "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.3", + "is-glob": "^4.0.3", + "node-addon-api": "^7.0.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.6", + "@parcel/watcher-darwin-arm64": "2.5.6", + "@parcel/watcher-darwin-x64": "2.5.6", + "@parcel/watcher-freebsd-x64": "2.5.6", + "@parcel/watcher-linux-arm-glibc": "2.5.6", + "@parcel/watcher-linux-arm-musl": "2.5.6", + "@parcel/watcher-linux-arm64-glibc": "2.5.6", + "@parcel/watcher-linux-arm64-musl": "2.5.6", + "@parcel/watcher-linux-x64-glibc": "2.5.6", + "@parcel/watcher-linux-x64-musl": "2.5.6", + "@parcel/watcher-win32-arm64": "2.5.6", + "@parcel/watcher-win32-ia32": "2.5.6", + "@parcel/watcher-win32-x64": "2.5.6" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.6.tgz", + "integrity": "sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "ideallyInert": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.6.tgz", + "integrity": "sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.6.tgz", + "integrity": "sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==", + "cpu": [ + "x64" + ], + "dev": true, + "ideallyInert": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.6.tgz", + "integrity": "sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==", + "cpu": [ + "x64" + ], + "dev": true, + "ideallyInert": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.6.tgz", + "integrity": "sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==", + "cpu": [ + "arm" + ], + "dev": true, + "ideallyInert": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.6.tgz", + "integrity": "sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==", + "cpu": [ + "arm" + ], + "dev": true, + "ideallyInert": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.6.tgz", + "integrity": "sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==", + "cpu": [ + "arm64" + ], + "dev": true, + "ideallyInert": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.6.tgz", + "integrity": "sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==", + "cpu": [ + "arm64" + ], + "dev": true, + "ideallyInert": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.6.tgz", + "integrity": "sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==", + "cpu": [ + "x64" + ], + "dev": true, + "ideallyInert": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.6.tgz", + "integrity": "sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==", + "cpu": [ + "x64" + ], + "dev": true, + "ideallyInert": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.6.tgz", + "integrity": "sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "ideallyInert": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.6.tgz", + "integrity": "sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==", + "cpu": [ + "ia32" + ], + "dev": true, + "ideallyInert": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.6.tgz", + "integrity": "sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==", + "cpu": [ + "x64" + ], + "dev": true, + "ideallyInert": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@tailwindcss/cli": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/cli/-/cli-4.2.2.tgz", + "integrity": "sha512-iJS+8kAFZ8HPqnh0O5DHCLjo4L6dD97DBQEkrhfSO4V96xeefUus2jqsBs1dUMt3OU9Ks4qIkiY0mpL5UW+4LQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/watcher": "^2.5.1", + "@tailwindcss/node": "4.2.2", + "@tailwindcss/oxide": "4.2.2", + "enhanced-resolve": "^5.19.0", + "mri": "^1.2.0", + "picocolors": "^1.1.1", + "tailwindcss": "4.2.2" + }, + "bin": { + "tailwindcss": "dist/index.mjs" + } + }, + "node_modules/@tailwindcss/node": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.2.2.tgz", + "integrity": "sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "enhanced-resolve": "^5.19.0", + "jiti": "^2.6.1", + "lightningcss": "1.32.0", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.2.2" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.2.2.tgz", + "integrity": "sha512-qEUA07+E5kehxYp9BVMpq9E8vnJuBHfJEC0vPC5e7iL/hw7HR61aDKoVoKzrG+QKp56vhNZe4qwkRmMC0zDLvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.2.2", + "@tailwindcss/oxide-darwin-arm64": "4.2.2", + "@tailwindcss/oxide-darwin-x64": "4.2.2", + "@tailwindcss/oxide-freebsd-x64": "4.2.2", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.2.2", + "@tailwindcss/oxide-linux-arm64-gnu": "4.2.2", + "@tailwindcss/oxide-linux-arm64-musl": "4.2.2", + "@tailwindcss/oxide-linux-x64-gnu": "4.2.2", + "@tailwindcss/oxide-linux-x64-musl": "4.2.2", + "@tailwindcss/oxide-wasm32-wasi": "4.2.2", + "@tailwindcss/oxide-win32-arm64-msvc": "4.2.2", + "@tailwindcss/oxide-win32-x64-msvc": "4.2.2" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.2.2.tgz", + "integrity": "sha512-dXGR1n+P3B6748jZO/SvHZq7qBOqqzQ+yFrXpoOWWALWndF9MoSKAT3Q0fYgAzYzGhxNYOoysRvYlpixRBBoDg==", + "cpu": [ + "arm64" + ], + "dev": true, + "ideallyInert": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.2.2.tgz", + "integrity": "sha512-iq9Qjr6knfMpZHj55/37ouZeykwbDqF21gPFtfnhCCKGDcPI/21FKC9XdMO/XyBM7qKORx6UIhGgg6jLl7BZlg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.2.2.tgz", + "integrity": "sha512-BlR+2c3nzc8f2G639LpL89YY4bdcIdUmiOOkv2GQv4/4M0vJlpXEa0JXNHhCHU7VWOKWT/CjqHdTP8aUuDJkuw==", + "cpu": [ + "x64" + ], + "dev": true, + "ideallyInert": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.2.2.tgz", + "integrity": "sha512-YUqUgrGMSu2CDO82hzlQ5qSb5xmx3RUrke/QgnoEx7KvmRJHQuZHZmZTLSuuHwFf0DJPybFMXMYf+WJdxHy/nQ==", + "cpu": [ + "x64" + ], + "dev": true, + "ideallyInert": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.2.2.tgz", + "integrity": "sha512-FPdhvsW6g06T9BWT0qTwiVZYE2WIFo2dY5aCSpjG/S/u1tby+wXoslXS0kl3/KXnULlLr1E3NPRRw0g7t2kgaQ==", + "cpu": [ + "arm" + ], + "dev": true, + "ideallyInert": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.2.2.tgz", + "integrity": "sha512-4og1V+ftEPXGttOO7eCmW7VICmzzJWgMx+QXAJRAhjrSjumCwWqMfkDrNu1LXEQzNAwz28NCUpucgQPrR4S2yw==", + "cpu": [ + "arm64" + ], + "dev": true, + "ideallyInert": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.2.2.tgz", + "integrity": "sha512-oCfG/mS+/+XRlwNjnsNLVwnMWYH7tn/kYPsNPh+JSOMlnt93mYNCKHYzylRhI51X+TbR+ufNhhKKzm6QkqX8ag==", + "cpu": [ + "arm64" + ], + "dev": true, + "ideallyInert": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.2.2.tgz", + "integrity": "sha512-rTAGAkDgqbXHNp/xW0iugLVmX62wOp2PoE39BTCGKjv3Iocf6AFbRP/wZT/kuCxC9QBh9Pu8XPkv/zCZB2mcMg==", + "cpu": [ + "x64" + ], + "dev": true, + "ideallyInert": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.2.2.tgz", + "integrity": "sha512-XW3t3qwbIwiSyRCggeO2zxe3KWaEbM0/kW9e8+0XpBgyKU4ATYzcVSMKteZJ1iukJ3HgHBjbg9P5YPRCVUxlnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "ideallyInert": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.2.2.tgz", + "integrity": "sha512-eKSztKsmEsn1O5lJ4ZAfyn41NfG7vzCg496YiGtMDV86jz1q/irhms5O0VrY6ZwTUkFy/EKG3RfWgxSI3VbZ8Q==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "dev": true, + "ideallyInert": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.8.1", + "@emnapi/runtime": "^1.8.1", + "@emnapi/wasi-threads": "^1.1.0", + "@napi-rs/wasm-runtime": "^1.1.1", + "@tybys/wasm-util": "^0.10.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.2.2.tgz", + "integrity": "sha512-qPmaQM4iKu5mxpsrWZMOZRgZv1tOZpUm+zdhhQP0VhJfyGGO3aUKdbh3gDZc/dPLQwW4eSqWGrrcWNBZWUWaXQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "ideallyInert": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.2.2.tgz", + "integrity": "sha512-1T/37VvI7WyH66b+vqHj/cLwnCxt7Qt3WFu5Q8hk65aOvlwAhs7rAp1VkulBJw/N4tMirXjVnylTR72uI0HGcA==", + "cpu": [ + "x64" + ], + "dev": true, + "ideallyInert": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.27", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.27.tgz", + "integrity": "sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.1", + "caniuse-lite": "^1.0.30001774", + "fraction.js": "^5.3.4", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.12", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.12.tgz", + "integrity": "sha512-qyq26DxfY4awP2gIRXhhLWfwzwI+N5Nxk6iQi8EFizIaWIjqicQTE4sLnZZVdeKPRcVNoJOkkpfzoIYuvCKaIQ==", + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001782", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001782.tgz", + "integrity": "sha512-dZcaJLJeDMh4rELYFw1tvSn1bhZWYFOt468FcbHHxx/Z/dFidd1I6ciyFdi3iwfQCyOjqo9upF6lGQYtMiJWxw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.328", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.328.tgz", + "integrity": "sha512-QNQ5l45DzYytThO21403XN3FvK0hOkWDG8viNf6jqS42msJ8I4tGDSpBCgvDRRPnkffafiwAym2X2eHeGD2V0w==", + "license": "ISC" + }, + "node_modules/enhanced-resolve": { + "version": "5.20.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.20.1.tgz", + "integrity": "sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/fraction.js": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "ideallyInert": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "dev": true, + "ideallyInert": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "dev": true, + "ideallyInert": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "dev": true, + "ideallyInert": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "ideallyInert": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "ideallyInert": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], + "dev": true, + "ideallyInert": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], + "dev": true, + "ideallyInert": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "ideallyInert": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], + "dev": true, + "ideallyInert": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.36", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.36.tgz", + "integrity": "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", + "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "license": "MIT" + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tailwindcss": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.2.tgz", + "integrity": "sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.2.tgz", + "integrity": "sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + } + } +} diff --git a/node_modules/@jridgewell/gen-mapping/LICENSE b/node_modules/@jridgewell/gen-mapping/LICENSE new file mode 100644 index 0000000000..1f6ce94c11 --- /dev/null +++ b/node_modules/@jridgewell/gen-mapping/LICENSE @@ -0,0 +1,19 @@ +Copyright 2024 Justin Ridgewell + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/@jridgewell/gen-mapping/README.md b/node_modules/@jridgewell/gen-mapping/README.md new file mode 100644 index 0000000000..93692b1065 --- /dev/null +++ b/node_modules/@jridgewell/gen-mapping/README.md @@ -0,0 +1,227 @@ +# @jridgewell/gen-mapping + +> Generate source maps + +`gen-mapping` allows you to generate a source map during transpilation or minification. +With a source map, you're able to trace the original location in the source file, either in Chrome's +DevTools or using a library like [`@jridgewell/trace-mapping`][trace-mapping]. + +You may already be familiar with the [`source-map`][source-map] package's `SourceMapGenerator`. This +provides the same `addMapping` and `setSourceContent` API. + +## Installation + +```sh +npm install @jridgewell/gen-mapping +``` + +## Usage + +```typescript +import { GenMapping, addMapping, setSourceContent, toEncodedMap, toDecodedMap } from '@jridgewell/gen-mapping'; + +const map = new GenMapping({ + file: 'output.js', + sourceRoot: 'https://example.com/', +}); + +setSourceContent(map, 'input.js', `function foo() {}`); + +addMapping(map, { + // Lines start at line 1, columns at column 0. + generated: { line: 1, column: 0 }, + source: 'input.js', + original: { line: 1, column: 0 }, +}); + +addMapping(map, { + generated: { line: 1, column: 9 }, + source: 'input.js', + original: { line: 1, column: 9 }, + name: 'foo', +}); + +assert.deepEqual(toDecodedMap(map), { + version: 3, + file: 'output.js', + names: ['foo'], + sourceRoot: 'https://example.com/', + sources: ['input.js'], + sourcesContent: ['function foo() {}'], + mappings: [ + [ [0, 0, 0, 0], [9, 0, 0, 9, 0] ] + ], +}); + +assert.deepEqual(toEncodedMap(map), { + version: 3, + file: 'output.js', + names: ['foo'], + sourceRoot: 'https://example.com/', + sources: ['input.js'], + sourcesContent: ['function foo() {}'], + mappings: 'AAAA,SAASA', +}); +``` + +### Smaller Sourcemaps + +Not everything needs to be added to a sourcemap, and needless markings can cause signficantly +larger file sizes. `gen-mapping` exposes `maybeAddSegment`/`maybeAddMapping` APIs that will +intelligently determine if this marking adds useful information. If not, the marking will be +skipped. + +```typescript +import { maybeAddMapping } from '@jridgewell/gen-mapping'; + +const map = new GenMapping(); + +// Adding a sourceless marking at the beginning of a line isn't useful. +maybeAddMapping(map, { + generated: { line: 1, column: 0 }, +}); + +// Adding a new source marking is useful. +maybeAddMapping(map, { + generated: { line: 1, column: 0 }, + source: 'input.js', + original: { line: 1, column: 0 }, +}); + +// But adding another marking pointing to the exact same original location isn't, even if the +// generated column changed. +maybeAddMapping(map, { + generated: { line: 1, column: 9 }, + source: 'input.js', + original: { line: 1, column: 0 }, +}); + +assert.deepEqual(toEncodedMap(map), { + version: 3, + names: [], + sources: ['input.js'], + sourcesContent: [null], + mappings: 'AAAA', +}); +``` + +## Benchmarks + +``` +node v18.0.0 + +amp.js.map +Memory Usage: +gen-mapping: addSegment 5852872 bytes +gen-mapping: addMapping 7716042 bytes +source-map-js 6143250 bytes +source-map-0.6.1 6124102 bytes +source-map-0.8.0 6121173 bytes +Smallest memory usage is gen-mapping: addSegment + +Adding speed: +gen-mapping: addSegment x 441 ops/sec ±2.07% (90 runs sampled) +gen-mapping: addMapping x 350 ops/sec ±2.40% (86 runs sampled) +source-map-js: addMapping x 169 ops/sec ±2.42% (80 runs sampled) +source-map-0.6.1: addMapping x 167 ops/sec ±2.56% (80 runs sampled) +source-map-0.8.0: addMapping x 168 ops/sec ±2.52% (80 runs sampled) +Fastest is gen-mapping: addSegment + +Generate speed: +gen-mapping: decoded output x 150,824,370 ops/sec ±0.07% (102 runs sampled) +gen-mapping: encoded output x 663 ops/sec ±0.22% (98 runs sampled) +source-map-js: encoded output x 197 ops/sec ±0.45% (84 runs sampled) +source-map-0.6.1: encoded output x 198 ops/sec ±0.33% (85 runs sampled) +source-map-0.8.0: encoded output x 197 ops/sec ±0.06% (93 runs sampled) +Fastest is gen-mapping: decoded output + + +*** + + +babel.min.js.map +Memory Usage: +gen-mapping: addSegment 37578063 bytes +gen-mapping: addMapping 37212897 bytes +source-map-js 47638527 bytes +source-map-0.6.1 47690503 bytes +source-map-0.8.0 47470188 bytes +Smallest memory usage is gen-mapping: addMapping + +Adding speed: +gen-mapping: addSegment x 31.05 ops/sec ±8.31% (43 runs sampled) +gen-mapping: addMapping x 29.83 ops/sec ±7.36% (51 runs sampled) +source-map-js: addMapping x 20.73 ops/sec ±6.22% (38 runs sampled) +source-map-0.6.1: addMapping x 20.03 ops/sec ±10.51% (38 runs sampled) +source-map-0.8.0: addMapping x 19.30 ops/sec ±8.27% (37 runs sampled) +Fastest is gen-mapping: addSegment + +Generate speed: +gen-mapping: decoded output x 381,379,234 ops/sec ±0.29% (96 runs sampled) +gen-mapping: encoded output x 95.15 ops/sec ±2.98% (72 runs sampled) +source-map-js: encoded output x 15.20 ops/sec ±7.41% (33 runs sampled) +source-map-0.6.1: encoded output x 16.36 ops/sec ±10.46% (31 runs sampled) +source-map-0.8.0: encoded output x 16.06 ops/sec ±6.45% (31 runs sampled) +Fastest is gen-mapping: decoded output + + +*** + + +preact.js.map +Memory Usage: +gen-mapping: addSegment 416247 bytes +gen-mapping: addMapping 419824 bytes +source-map-js 1024619 bytes +source-map-0.6.1 1146004 bytes +source-map-0.8.0 1113250 bytes +Smallest memory usage is gen-mapping: addSegment + +Adding speed: +gen-mapping: addSegment x 13,755 ops/sec ±0.15% (98 runs sampled) +gen-mapping: addMapping x 13,013 ops/sec ±0.11% (101 runs sampled) +source-map-js: addMapping x 4,564 ops/sec ±0.21% (98 runs sampled) +source-map-0.6.1: addMapping x 4,562 ops/sec ±0.11% (99 runs sampled) +source-map-0.8.0: addMapping x 4,593 ops/sec ±0.11% (100 runs sampled) +Fastest is gen-mapping: addSegment + +Generate speed: +gen-mapping: decoded output x 379,864,020 ops/sec ±0.23% (93 runs sampled) +gen-mapping: encoded output x 14,368 ops/sec ±4.07% (82 runs sampled) +source-map-js: encoded output x 5,261 ops/sec ±0.21% (99 runs sampled) +source-map-0.6.1: encoded output x 5,124 ops/sec ±0.58% (99 runs sampled) +source-map-0.8.0: encoded output x 5,434 ops/sec ±0.33% (96 runs sampled) +Fastest is gen-mapping: decoded output + + +*** + + +react.js.map +Memory Usage: +gen-mapping: addSegment 975096 bytes +gen-mapping: addMapping 1102981 bytes +source-map-js 2918836 bytes +source-map-0.6.1 2885435 bytes +source-map-0.8.0 2874336 bytes +Smallest memory usage is gen-mapping: addSegment + +Adding speed: +gen-mapping: addSegment x 4,772 ops/sec ±0.15% (100 runs sampled) +gen-mapping: addMapping x 4,456 ops/sec ±0.13% (97 runs sampled) +source-map-js: addMapping x 1,618 ops/sec ±0.24% (97 runs sampled) +source-map-0.6.1: addMapping x 1,622 ops/sec ±0.12% (99 runs sampled) +source-map-0.8.0: addMapping x 1,631 ops/sec ±0.12% (100 runs sampled) +Fastest is gen-mapping: addSegment + +Generate speed: +gen-mapping: decoded output x 379,107,695 ops/sec ±0.07% (99 runs sampled) +gen-mapping: encoded output x 5,421 ops/sec ±1.60% (89 runs sampled) +source-map-js: encoded output x 2,113 ops/sec ±1.81% (98 runs sampled) +source-map-0.6.1: encoded output x 2,126 ops/sec ±0.10% (100 runs sampled) +source-map-0.8.0: encoded output x 2,176 ops/sec ±0.39% (98 runs sampled) +Fastest is gen-mapping: decoded output +``` + +[source-map]: https://www.npmjs.com/package/source-map +[trace-mapping]: https://github.com/jridgewell/sourcemaps/tree/main/packages/trace-mapping diff --git a/node_modules/@jridgewell/gen-mapping/dist/gen-mapping.mjs b/node_modules/@jridgewell/gen-mapping/dist/gen-mapping.mjs new file mode 100644 index 0000000000..bbb0cacc5a --- /dev/null +++ b/node_modules/@jridgewell/gen-mapping/dist/gen-mapping.mjs @@ -0,0 +1,292 @@ +// src/set-array.ts +var SetArray = class { + constructor() { + this._indexes = { __proto__: null }; + this.array = []; + } +}; +function cast(set) { + return set; +} +function get(setarr, key) { + return cast(setarr)._indexes[key]; +} +function put(setarr, key) { + const index = get(setarr, key); + if (index !== void 0) return index; + const { array, _indexes: indexes } = cast(setarr); + const length = array.push(key); + return indexes[key] = length - 1; +} +function remove(setarr, key) { + const index = get(setarr, key); + if (index === void 0) return; + const { array, _indexes: indexes } = cast(setarr); + for (let i = index + 1; i < array.length; i++) { + const k = array[i]; + array[i - 1] = k; + indexes[k]--; + } + indexes[key] = void 0; + array.pop(); +} + +// src/gen-mapping.ts +import { + encode +} from "@jridgewell/sourcemap-codec"; +import { TraceMap, decodedMappings } from "@jridgewell/trace-mapping"; + +// src/sourcemap-segment.ts +var COLUMN = 0; +var SOURCES_INDEX = 1; +var SOURCE_LINE = 2; +var SOURCE_COLUMN = 3; +var NAMES_INDEX = 4; + +// src/gen-mapping.ts +var NO_NAME = -1; +var GenMapping = class { + constructor({ file, sourceRoot } = {}) { + this._names = new SetArray(); + this._sources = new SetArray(); + this._sourcesContent = []; + this._mappings = []; + this.file = file; + this.sourceRoot = sourceRoot; + this._ignoreList = new SetArray(); + } +}; +function cast2(map) { + return map; +} +function addSegment(map, genLine, genColumn, source, sourceLine, sourceColumn, name, content) { + return addSegmentInternal( + false, + map, + genLine, + genColumn, + source, + sourceLine, + sourceColumn, + name, + content + ); +} +function addMapping(map, mapping) { + return addMappingInternal(false, map, mapping); +} +var maybeAddSegment = (map, genLine, genColumn, source, sourceLine, sourceColumn, name, content) => { + return addSegmentInternal( + true, + map, + genLine, + genColumn, + source, + sourceLine, + sourceColumn, + name, + content + ); +}; +var maybeAddMapping = (map, mapping) => { + return addMappingInternal(true, map, mapping); +}; +function setSourceContent(map, source, content) { + const { + _sources: sources, + _sourcesContent: sourcesContent + // _originalScopes: originalScopes, + } = cast2(map); + const index = put(sources, source); + sourcesContent[index] = content; +} +function setIgnore(map, source, ignore = true) { + const { + _sources: sources, + _sourcesContent: sourcesContent, + _ignoreList: ignoreList + // _originalScopes: originalScopes, + } = cast2(map); + const index = put(sources, source); + if (index === sourcesContent.length) sourcesContent[index] = null; + if (ignore) put(ignoreList, index); + else remove(ignoreList, index); +} +function toDecodedMap(map) { + const { + _mappings: mappings, + _sources: sources, + _sourcesContent: sourcesContent, + _names: names, + _ignoreList: ignoreList + // _originalScopes: originalScopes, + // _generatedRanges: generatedRanges, + } = cast2(map); + removeEmptyFinalLines(mappings); + return { + version: 3, + file: map.file || void 0, + names: names.array, + sourceRoot: map.sourceRoot || void 0, + sources: sources.array, + sourcesContent, + mappings, + // originalScopes, + // generatedRanges, + ignoreList: ignoreList.array + }; +} +function toEncodedMap(map) { + const decoded = toDecodedMap(map); + return Object.assign({}, decoded, { + // originalScopes: decoded.originalScopes.map((os) => encodeOriginalScopes(os)), + // generatedRanges: encodeGeneratedRanges(decoded.generatedRanges as GeneratedRange[]), + mappings: encode(decoded.mappings) + }); +} +function fromMap(input) { + const map = new TraceMap(input); + const gen = new GenMapping({ file: map.file, sourceRoot: map.sourceRoot }); + putAll(cast2(gen)._names, map.names); + putAll(cast2(gen)._sources, map.sources); + cast2(gen)._sourcesContent = map.sourcesContent || map.sources.map(() => null); + cast2(gen)._mappings = decodedMappings(map); + if (map.ignoreList) putAll(cast2(gen)._ignoreList, map.ignoreList); + return gen; +} +function allMappings(map) { + const out = []; + const { _mappings: mappings, _sources: sources, _names: names } = cast2(map); + for (let i = 0; i < mappings.length; i++) { + const line = mappings[i]; + for (let j = 0; j < line.length; j++) { + const seg = line[j]; + const generated = { line: i + 1, column: seg[COLUMN] }; + let source = void 0; + let original = void 0; + let name = void 0; + if (seg.length !== 1) { + source = sources.array[seg[SOURCES_INDEX]]; + original = { line: seg[SOURCE_LINE] + 1, column: seg[SOURCE_COLUMN] }; + if (seg.length === 5) name = names.array[seg[NAMES_INDEX]]; + } + out.push({ generated, source, original, name }); + } + } + return out; +} +function addSegmentInternal(skipable, map, genLine, genColumn, source, sourceLine, sourceColumn, name, content) { + const { + _mappings: mappings, + _sources: sources, + _sourcesContent: sourcesContent, + _names: names + // _originalScopes: originalScopes, + } = cast2(map); + const line = getIndex(mappings, genLine); + const index = getColumnIndex(line, genColumn); + if (!source) { + if (skipable && skipSourceless(line, index)) return; + return insert(line, index, [genColumn]); + } + assert(sourceLine); + assert(sourceColumn); + const sourcesIndex = put(sources, source); + const namesIndex = name ? put(names, name) : NO_NAME; + if (sourcesIndex === sourcesContent.length) sourcesContent[sourcesIndex] = content != null ? content : null; + if (skipable && skipSource(line, index, sourcesIndex, sourceLine, sourceColumn, namesIndex)) { + return; + } + return insert( + line, + index, + name ? [genColumn, sourcesIndex, sourceLine, sourceColumn, namesIndex] : [genColumn, sourcesIndex, sourceLine, sourceColumn] + ); +} +function assert(_val) { +} +function getIndex(arr, index) { + for (let i = arr.length; i <= index; i++) { + arr[i] = []; + } + return arr[index]; +} +function getColumnIndex(line, genColumn) { + let index = line.length; + for (let i = index - 1; i >= 0; index = i--) { + const current = line[i]; + if (genColumn >= current[COLUMN]) break; + } + return index; +} +function insert(array, index, value) { + for (let i = array.length; i > index; i--) { + array[i] = array[i - 1]; + } + array[index] = value; +} +function removeEmptyFinalLines(mappings) { + const { length } = mappings; + let len = length; + for (let i = len - 1; i >= 0; len = i, i--) { + if (mappings[i].length > 0) break; + } + if (len < length) mappings.length = len; +} +function putAll(setarr, array) { + for (let i = 0; i < array.length; i++) put(setarr, array[i]); +} +function skipSourceless(line, index) { + if (index === 0) return true; + const prev = line[index - 1]; + return prev.length === 1; +} +function skipSource(line, index, sourcesIndex, sourceLine, sourceColumn, namesIndex) { + if (index === 0) return false; + const prev = line[index - 1]; + if (prev.length === 1) return false; + return sourcesIndex === prev[SOURCES_INDEX] && sourceLine === prev[SOURCE_LINE] && sourceColumn === prev[SOURCE_COLUMN] && namesIndex === (prev.length === 5 ? prev[NAMES_INDEX] : NO_NAME); +} +function addMappingInternal(skipable, map, mapping) { + const { generated, source, original, name, content } = mapping; + if (!source) { + return addSegmentInternal( + skipable, + map, + generated.line - 1, + generated.column, + null, + null, + null, + null, + null + ); + } + assert(original); + return addSegmentInternal( + skipable, + map, + generated.line - 1, + generated.column, + source, + original.line - 1, + original.column, + name, + content + ); +} +export { + GenMapping, + addMapping, + addSegment, + allMappings, + fromMap, + maybeAddMapping, + maybeAddSegment, + setIgnore, + setSourceContent, + toDecodedMap, + toEncodedMap +}; +//# sourceMappingURL=gen-mapping.mjs.map diff --git a/node_modules/@jridgewell/gen-mapping/dist/gen-mapping.mjs.map b/node_modules/@jridgewell/gen-mapping/dist/gen-mapping.mjs.map new file mode 100644 index 0000000000..4e37e457b3 --- /dev/null +++ b/node_modules/@jridgewell/gen-mapping/dist/gen-mapping.mjs.map @@ -0,0 +1,6 @@ +{ + "version": 3, + "sources": ["../src/set-array.ts", "../src/gen-mapping.ts", "../src/sourcemap-segment.ts"], + "mappings": "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", + "names": ["cast"] +} diff --git a/node_modules/@jridgewell/gen-mapping/dist/gen-mapping.umd.js b/node_modules/@jridgewell/gen-mapping/dist/gen-mapping.umd.js new file mode 100644 index 0000000000..cb84af55fb --- /dev/null +++ b/node_modules/@jridgewell/gen-mapping/dist/gen-mapping.umd.js @@ -0,0 +1,358 @@ +(function (global, factory) { + if (typeof exports === 'object' && typeof module !== 'undefined') { + factory(module, require('@jridgewell/sourcemap-codec'), require('@jridgewell/trace-mapping')); + module.exports = def(module); + } else if (typeof define === 'function' && define.amd) { + define(['module', '@jridgewell/sourcemap-codec', '@jridgewell/trace-mapping'], function(mod) { + factory.apply(this, arguments); + mod.exports = def(mod); + }); + } else { + const mod = { exports: {} }; + factory(mod, global.sourcemapCodec, global.traceMapping); + global = typeof globalThis !== 'undefined' ? globalThis : global || self; + global.genMapping = def(mod); + } + function def(m) { return 'default' in m.exports ? m.exports.default : m.exports; } +})(this, (function (module, require_sourcemapCodec, require_traceMapping) { +"use strict"; +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// umd:@jridgewell/sourcemap-codec +var require_sourcemap_codec = __commonJS({ + "umd:@jridgewell/sourcemap-codec"(exports, module2) { + module2.exports = require_sourcemapCodec; + } +}); + +// umd:@jridgewell/trace-mapping +var require_trace_mapping = __commonJS({ + "umd:@jridgewell/trace-mapping"(exports, module2) { + module2.exports = require_traceMapping; + } +}); + +// src/gen-mapping.ts +var gen_mapping_exports = {}; +__export(gen_mapping_exports, { + GenMapping: () => GenMapping, + addMapping: () => addMapping, + addSegment: () => addSegment, + allMappings: () => allMappings, + fromMap: () => fromMap, + maybeAddMapping: () => maybeAddMapping, + maybeAddSegment: () => maybeAddSegment, + setIgnore: () => setIgnore, + setSourceContent: () => setSourceContent, + toDecodedMap: () => toDecodedMap, + toEncodedMap: () => toEncodedMap +}); +module.exports = __toCommonJS(gen_mapping_exports); + +// src/set-array.ts +var SetArray = class { + constructor() { + this._indexes = { __proto__: null }; + this.array = []; + } +}; +function cast(set) { + return set; +} +function get(setarr, key) { + return cast(setarr)._indexes[key]; +} +function put(setarr, key) { + const index = get(setarr, key); + if (index !== void 0) return index; + const { array, _indexes: indexes } = cast(setarr); + const length = array.push(key); + return indexes[key] = length - 1; +} +function remove(setarr, key) { + const index = get(setarr, key); + if (index === void 0) return; + const { array, _indexes: indexes } = cast(setarr); + for (let i = index + 1; i < array.length; i++) { + const k = array[i]; + array[i - 1] = k; + indexes[k]--; + } + indexes[key] = void 0; + array.pop(); +} + +// src/gen-mapping.ts +var import_sourcemap_codec = __toESM(require_sourcemap_codec()); +var import_trace_mapping = __toESM(require_trace_mapping()); + +// src/sourcemap-segment.ts +var COLUMN = 0; +var SOURCES_INDEX = 1; +var SOURCE_LINE = 2; +var SOURCE_COLUMN = 3; +var NAMES_INDEX = 4; + +// src/gen-mapping.ts +var NO_NAME = -1; +var GenMapping = class { + constructor({ file, sourceRoot } = {}) { + this._names = new SetArray(); + this._sources = new SetArray(); + this._sourcesContent = []; + this._mappings = []; + this.file = file; + this.sourceRoot = sourceRoot; + this._ignoreList = new SetArray(); + } +}; +function cast2(map) { + return map; +} +function addSegment(map, genLine, genColumn, source, sourceLine, sourceColumn, name, content) { + return addSegmentInternal( + false, + map, + genLine, + genColumn, + source, + sourceLine, + sourceColumn, + name, + content + ); +} +function addMapping(map, mapping) { + return addMappingInternal(false, map, mapping); +} +var maybeAddSegment = (map, genLine, genColumn, source, sourceLine, sourceColumn, name, content) => { + return addSegmentInternal( + true, + map, + genLine, + genColumn, + source, + sourceLine, + sourceColumn, + name, + content + ); +}; +var maybeAddMapping = (map, mapping) => { + return addMappingInternal(true, map, mapping); +}; +function setSourceContent(map, source, content) { + const { + _sources: sources, + _sourcesContent: sourcesContent + // _originalScopes: originalScopes, + } = cast2(map); + const index = put(sources, source); + sourcesContent[index] = content; +} +function setIgnore(map, source, ignore = true) { + const { + _sources: sources, + _sourcesContent: sourcesContent, + _ignoreList: ignoreList + // _originalScopes: originalScopes, + } = cast2(map); + const index = put(sources, source); + if (index === sourcesContent.length) sourcesContent[index] = null; + if (ignore) put(ignoreList, index); + else remove(ignoreList, index); +} +function toDecodedMap(map) { + const { + _mappings: mappings, + _sources: sources, + _sourcesContent: sourcesContent, + _names: names, + _ignoreList: ignoreList + // _originalScopes: originalScopes, + // _generatedRanges: generatedRanges, + } = cast2(map); + removeEmptyFinalLines(mappings); + return { + version: 3, + file: map.file || void 0, + names: names.array, + sourceRoot: map.sourceRoot || void 0, + sources: sources.array, + sourcesContent, + mappings, + // originalScopes, + // generatedRanges, + ignoreList: ignoreList.array + }; +} +function toEncodedMap(map) { + const decoded = toDecodedMap(map); + return Object.assign({}, decoded, { + // originalScopes: decoded.originalScopes.map((os) => encodeOriginalScopes(os)), + // generatedRanges: encodeGeneratedRanges(decoded.generatedRanges as GeneratedRange[]), + mappings: (0, import_sourcemap_codec.encode)(decoded.mappings) + }); +} +function fromMap(input) { + const map = new import_trace_mapping.TraceMap(input); + const gen = new GenMapping({ file: map.file, sourceRoot: map.sourceRoot }); + putAll(cast2(gen)._names, map.names); + putAll(cast2(gen)._sources, map.sources); + cast2(gen)._sourcesContent = map.sourcesContent || map.sources.map(() => null); + cast2(gen)._mappings = (0, import_trace_mapping.decodedMappings)(map); + if (map.ignoreList) putAll(cast2(gen)._ignoreList, map.ignoreList); + return gen; +} +function allMappings(map) { + const out = []; + const { _mappings: mappings, _sources: sources, _names: names } = cast2(map); + for (let i = 0; i < mappings.length; i++) { + const line = mappings[i]; + for (let j = 0; j < line.length; j++) { + const seg = line[j]; + const generated = { line: i + 1, column: seg[COLUMN] }; + let source = void 0; + let original = void 0; + let name = void 0; + if (seg.length !== 1) { + source = sources.array[seg[SOURCES_INDEX]]; + original = { line: seg[SOURCE_LINE] + 1, column: seg[SOURCE_COLUMN] }; + if (seg.length === 5) name = names.array[seg[NAMES_INDEX]]; + } + out.push({ generated, source, original, name }); + } + } + return out; +} +function addSegmentInternal(skipable, map, genLine, genColumn, source, sourceLine, sourceColumn, name, content) { + const { + _mappings: mappings, + _sources: sources, + _sourcesContent: sourcesContent, + _names: names + // _originalScopes: originalScopes, + } = cast2(map); + const line = getIndex(mappings, genLine); + const index = getColumnIndex(line, genColumn); + if (!source) { + if (skipable && skipSourceless(line, index)) return; + return insert(line, index, [genColumn]); + } + assert(sourceLine); + assert(sourceColumn); + const sourcesIndex = put(sources, source); + const namesIndex = name ? put(names, name) : NO_NAME; + if (sourcesIndex === sourcesContent.length) sourcesContent[sourcesIndex] = content != null ? content : null; + if (skipable && skipSource(line, index, sourcesIndex, sourceLine, sourceColumn, namesIndex)) { + return; + } + return insert( + line, + index, + name ? [genColumn, sourcesIndex, sourceLine, sourceColumn, namesIndex] : [genColumn, sourcesIndex, sourceLine, sourceColumn] + ); +} +function assert(_val) { +} +function getIndex(arr, index) { + for (let i = arr.length; i <= index; i++) { + arr[i] = []; + } + return arr[index]; +} +function getColumnIndex(line, genColumn) { + let index = line.length; + for (let i = index - 1; i >= 0; index = i--) { + const current = line[i]; + if (genColumn >= current[COLUMN]) break; + } + return index; +} +function insert(array, index, value) { + for (let i = array.length; i > index; i--) { + array[i] = array[i - 1]; + } + array[index] = value; +} +function removeEmptyFinalLines(mappings) { + const { length } = mappings; + let len = length; + for (let i = len - 1; i >= 0; len = i, i--) { + if (mappings[i].length > 0) break; + } + if (len < length) mappings.length = len; +} +function putAll(setarr, array) { + for (let i = 0; i < array.length; i++) put(setarr, array[i]); +} +function skipSourceless(line, index) { + if (index === 0) return true; + const prev = line[index - 1]; + return prev.length === 1; +} +function skipSource(line, index, sourcesIndex, sourceLine, sourceColumn, namesIndex) { + if (index === 0) return false; + const prev = line[index - 1]; + if (prev.length === 1) return false; + return sourcesIndex === prev[SOURCES_INDEX] && sourceLine === prev[SOURCE_LINE] && sourceColumn === prev[SOURCE_COLUMN] && namesIndex === (prev.length === 5 ? prev[NAMES_INDEX] : NO_NAME); +} +function addMappingInternal(skipable, map, mapping) { + const { generated, source, original, name, content } = mapping; + if (!source) { + return addSegmentInternal( + skipable, + map, + generated.line - 1, + generated.column, + null, + null, + null, + null, + null + ); + } + assert(original); + return addSegmentInternal( + skipable, + map, + generated.line - 1, + generated.column, + source, + original.line - 1, + original.column, + name, + content + ); +} +})); +//# sourceMappingURL=gen-mapping.umd.js.map diff --git a/node_modules/@jridgewell/gen-mapping/dist/gen-mapping.umd.js.map b/node_modules/@jridgewell/gen-mapping/dist/gen-mapping.umd.js.map new file mode 100644 index 0000000000..b13750bf67 --- /dev/null +++ b/node_modules/@jridgewell/gen-mapping/dist/gen-mapping.umd.js.map @@ -0,0 +1,6 @@ +{ + "version": 3, + "sources": ["umd:@jridgewell/sourcemap-codec", "umd:@jridgewell/trace-mapping", "../src/gen-mapping.ts", "../src/set-array.ts", "../src/sourcemap-segment.ts"], + "mappings": "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", + "names": ["module", "module", "cast"] +} diff --git a/node_modules/@jridgewell/gen-mapping/dist/types/gen-mapping.d.ts b/node_modules/@jridgewell/gen-mapping/dist/types/gen-mapping.d.ts new file mode 100644 index 0000000000..9ba936e82b --- /dev/null +++ b/node_modules/@jridgewell/gen-mapping/dist/types/gen-mapping.d.ts @@ -0,0 +1,88 @@ +import type { SourceMapInput } from '@jridgewell/trace-mapping'; +import type { DecodedSourceMap, EncodedSourceMap, Pos, Mapping } from './types'; +export type { DecodedSourceMap, EncodedSourceMap, Mapping }; +export type Options = { + file?: string | null; + sourceRoot?: string | null; +}; +/** + * Provides the state to generate a sourcemap. + */ +export declare class GenMapping { + private _names; + private _sources; + private _sourcesContent; + private _mappings; + private _ignoreList; + file: string | null | undefined; + sourceRoot: string | null | undefined; + constructor({ file, sourceRoot }?: Options); +} +/** + * A low-level API to associate a generated position with an original source position. Line and + * column here are 0-based, unlike `addMapping`. + */ +export declare function addSegment(map: GenMapping, genLine: number, genColumn: number, source?: null, sourceLine?: null, sourceColumn?: null, name?: null, content?: null): void; +export declare function addSegment(map: GenMapping, genLine: number, genColumn: number, source: string, sourceLine: number, sourceColumn: number, name?: null, content?: string | null): void; +export declare function addSegment(map: GenMapping, genLine: number, genColumn: number, source: string, sourceLine: number, sourceColumn: number, name: string, content?: string | null): void; +/** + * A high-level API to associate a generated position with an original source position. Line is + * 1-based, but column is 0-based, due to legacy behavior in `source-map` library. + */ +export declare function addMapping(map: GenMapping, mapping: { + generated: Pos; + source?: null; + original?: null; + name?: null; + content?: null; +}): void; +export declare function addMapping(map: GenMapping, mapping: { + generated: Pos; + source: string; + original: Pos; + name?: null; + content?: string | null; +}): void; +export declare function addMapping(map: GenMapping, mapping: { + generated: Pos; + source: string; + original: Pos; + name: string; + content?: string | null; +}): void; +/** + * Same as `addSegment`, but will only add the segment if it generates useful information in the + * resulting map. This only works correctly if segments are added **in order**, meaning you should + * not add a segment with a lower generated line/column than one that came before. + */ +export declare const maybeAddSegment: typeof addSegment; +/** + * Same as `addMapping`, but will only add the mapping if it generates useful information in the + * resulting map. This only works correctly if mappings are added **in order**, meaning you should + * not add a mapping with a lower generated line/column than one that came before. + */ +export declare const maybeAddMapping: typeof addMapping; +/** + * Adds/removes the content of the source file to the source map. + */ +export declare function setSourceContent(map: GenMapping, source: string, content: string | null): void; +export declare function setIgnore(map: GenMapping, source: string, ignore?: boolean): void; +/** + * Returns a sourcemap object (with decoded mappings) suitable for passing to a library that expects + * a sourcemap, or to JSON.stringify. + */ +export declare function toDecodedMap(map: GenMapping): DecodedSourceMap; +/** + * Returns a sourcemap object (with encoded mappings) suitable for passing to a library that expects + * a sourcemap, or to JSON.stringify. + */ +export declare function toEncodedMap(map: GenMapping): EncodedSourceMap; +/** + * Constructs a new GenMapping, using the already present mappings of the input. + */ +export declare function fromMap(input: SourceMapInput): GenMapping; +/** + * Returns an array of high-level mapping objects for every recorded segment, which could then be + * passed to the `source-map` library. + */ +export declare function allMappings(map: GenMapping): Mapping[]; diff --git a/node_modules/@jridgewell/gen-mapping/dist/types/set-array.d.ts b/node_modules/@jridgewell/gen-mapping/dist/types/set-array.d.ts new file mode 100644 index 0000000000..6ed43543e9 --- /dev/null +++ b/node_modules/@jridgewell/gen-mapping/dist/types/set-array.d.ts @@ -0,0 +1,32 @@ +type Key = string | number | symbol; +/** + * SetArray acts like a `Set` (allowing only one occurrence of a string `key`), but provides the + * index of the `key` in the backing array. + * + * This is designed to allow synchronizing a second array with the contents of the backing array, + * like how in a sourcemap `sourcesContent[i]` is the source content associated with `source[i]`, + * and there are never duplicates. + */ +export declare class SetArray { + private _indexes; + array: readonly T[]; + constructor(); +} +/** + * Gets the index associated with `key` in the backing array, if it is already present. + */ +export declare function get(setarr: SetArray, key: T): number | undefined; +/** + * Puts `key` into the backing array, if it is not already present. Returns + * the index of the `key` in the backing array. + */ +export declare function put(setarr: SetArray, key: T): number; +/** + * Pops the last added item out of the SetArray. + */ +export declare function pop(setarr: SetArray): void; +/** + * Removes the key, if it exists in the set. + */ +export declare function remove(setarr: SetArray, key: T): void; +export {}; diff --git a/node_modules/@jridgewell/gen-mapping/dist/types/sourcemap-segment.d.ts b/node_modules/@jridgewell/gen-mapping/dist/types/sourcemap-segment.d.ts new file mode 100644 index 0000000000..aa19fb5e72 --- /dev/null +++ b/node_modules/@jridgewell/gen-mapping/dist/types/sourcemap-segment.d.ts @@ -0,0 +1,12 @@ +type GeneratedColumn = number; +type SourcesIndex = number; +type SourceLine = number; +type SourceColumn = number; +type NamesIndex = number; +export type SourceMapSegment = [GeneratedColumn] | [GeneratedColumn, SourcesIndex, SourceLine, SourceColumn] | [GeneratedColumn, SourcesIndex, SourceLine, SourceColumn, NamesIndex]; +export declare const COLUMN = 0; +export declare const SOURCES_INDEX = 1; +export declare const SOURCE_LINE = 2; +export declare const SOURCE_COLUMN = 3; +export declare const NAMES_INDEX = 4; +export {}; diff --git a/node_modules/@jridgewell/gen-mapping/dist/types/types.d.ts b/node_modules/@jridgewell/gen-mapping/dist/types/types.d.ts new file mode 100644 index 0000000000..8eb90fb474 --- /dev/null +++ b/node_modules/@jridgewell/gen-mapping/dist/types/types.d.ts @@ -0,0 +1,43 @@ +import type { SourceMapSegment } from './sourcemap-segment'; +export interface SourceMapV3 { + file?: string | null; + names: readonly string[]; + sourceRoot?: string; + sources: readonly (string | null)[]; + sourcesContent?: readonly (string | null)[]; + version: 3; + ignoreList?: readonly number[]; +} +export interface EncodedSourceMap extends SourceMapV3 { + mappings: string; +} +export interface DecodedSourceMap extends SourceMapV3 { + mappings: readonly SourceMapSegment[][]; +} +export interface Pos { + line: number; + column: number; +} +export interface OriginalPos extends Pos { + source: string; +} +export interface BindingExpressionRange { + start: Pos; + expression: string; +} +export type Mapping = { + generated: Pos; + source: undefined; + original: undefined; + name: undefined; +} | { + generated: Pos; + source: string; + original: Pos; + name: string; +} | { + generated: Pos; + source: string; + original: Pos; + name: undefined; +}; diff --git a/node_modules/@jridgewell/gen-mapping/package.json b/node_modules/@jridgewell/gen-mapping/package.json new file mode 100644 index 0000000000..036f9b799d --- /dev/null +++ b/node_modules/@jridgewell/gen-mapping/package.json @@ -0,0 +1,67 @@ +{ + "name": "@jridgewell/gen-mapping", + "version": "0.3.13", + "description": "Generate source maps", + "keywords": [ + "source", + "map" + ], + "main": "dist/gen-mapping.umd.js", + "module": "dist/gen-mapping.mjs", + "types": "types/gen-mapping.d.cts", + "files": [ + "dist", + "src", + "types" + ], + "exports": { + ".": [ + { + "import": { + "types": "./types/gen-mapping.d.mts", + "default": "./dist/gen-mapping.mjs" + }, + "default": { + "types": "./types/gen-mapping.d.cts", + "default": "./dist/gen-mapping.umd.js" + } + }, + "./dist/gen-mapping.umd.js" + ], + "./package.json": "./package.json" + }, + "scripts": { + "benchmark": "run-s build:code benchmark:*", + "benchmark:install": "cd benchmark && npm install", + "benchmark:only": "node --expose-gc benchmark/index.js", + "build": "run-s -n build:code build:types", + "build:code": "node ../../esbuild.mjs gen-mapping.ts", + "build:types": "run-s build:types:force build:types:emit build:types:mts", + "build:types:force": "rimraf tsconfig.build.tsbuildinfo", + "build:types:emit": "tsc --project tsconfig.build.json", + "build:types:mts": "node ../../mts-types.mjs", + "clean": "run-s -n clean:code clean:types", + "clean:code": "tsc --build --clean tsconfig.build.json", + "clean:types": "rimraf dist types", + "test": "run-s -n test:types test:only test:format", + "test:format": "prettier --check '{src,test}/**/*.ts'", + "test:only": "mocha", + "test:types": "eslint '{src,test}/**/*.ts'", + "lint": "run-s -n lint:types lint:format", + "lint:format": "npm run test:format -- --write", + "lint:types": "npm run test:types -- --fix", + "prepublishOnly": "npm run-s -n build test" + }, + "homepage": "https://github.com/jridgewell/sourcemaps/tree/main/packages/gen-mapping", + "repository": { + "type": "git", + "url": "git+https://github.com/jridgewell/sourcemaps.git", + "directory": "packages/gen-mapping" + }, + "author": "Justin Ridgewell ", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } +} diff --git a/node_modules/@jridgewell/gen-mapping/src/gen-mapping.ts b/node_modules/@jridgewell/gen-mapping/src/gen-mapping.ts new file mode 100644 index 0000000000..ecc878c575 --- /dev/null +++ b/node_modules/@jridgewell/gen-mapping/src/gen-mapping.ts @@ -0,0 +1,614 @@ +import { SetArray, put, remove } from './set-array'; +import { + encode, + // encodeGeneratedRanges, + // encodeOriginalScopes +} from '@jridgewell/sourcemap-codec'; +import { TraceMap, decodedMappings } from '@jridgewell/trace-mapping'; + +import { + COLUMN, + SOURCES_INDEX, + SOURCE_LINE, + SOURCE_COLUMN, + NAMES_INDEX, +} from './sourcemap-segment'; + +import type { SourceMapInput } from '@jridgewell/trace-mapping'; +// import type { OriginalScope, GeneratedRange } from '@jridgewell/sourcemap-codec'; +import type { SourceMapSegment } from './sourcemap-segment'; +import type { + DecodedSourceMap, + EncodedSourceMap, + Pos, + Mapping, + // BindingExpressionRange, + // OriginalPos, + // OriginalScopeInfo, + // GeneratedRangeInfo, +} from './types'; + +export type { DecodedSourceMap, EncodedSourceMap, Mapping }; + +export type Options = { + file?: string | null; + sourceRoot?: string | null; +}; + +const NO_NAME = -1; + +/** + * Provides the state to generate a sourcemap. + */ +export class GenMapping { + declare private _names: SetArray; + declare private _sources: SetArray; + declare private _sourcesContent: (string | null)[]; + declare private _mappings: SourceMapSegment[][]; + // private declare _originalScopes: OriginalScope[][]; + // private declare _generatedRanges: GeneratedRange[]; + declare private _ignoreList: SetArray; + declare file: string | null | undefined; + declare sourceRoot: string | null | undefined; + + constructor({ file, sourceRoot }: Options = {}) { + this._names = new SetArray(); + this._sources = new SetArray(); + this._sourcesContent = []; + this._mappings = []; + // this._originalScopes = []; + // this._generatedRanges = []; + this.file = file; + this.sourceRoot = sourceRoot; + this._ignoreList = new SetArray(); + } +} + +interface PublicMap { + _names: GenMapping['_names']; + _sources: GenMapping['_sources']; + _sourcesContent: GenMapping['_sourcesContent']; + _mappings: GenMapping['_mappings']; + // _originalScopes: GenMapping['_originalScopes']; + // _generatedRanges: GenMapping['_generatedRanges']; + _ignoreList: GenMapping['_ignoreList']; +} + +/** + * Typescript doesn't allow friend access to private fields, so this just casts the map into a type + * with public access modifiers. + */ +function cast(map: unknown): PublicMap { + return map as any; +} + +/** + * A low-level API to associate a generated position with an original source position. Line and + * column here are 0-based, unlike `addMapping`. + */ +export function addSegment( + map: GenMapping, + genLine: number, + genColumn: number, + source?: null, + sourceLine?: null, + sourceColumn?: null, + name?: null, + content?: null, +): void; +export function addSegment( + map: GenMapping, + genLine: number, + genColumn: number, + source: string, + sourceLine: number, + sourceColumn: number, + name?: null, + content?: string | null, +): void; +export function addSegment( + map: GenMapping, + genLine: number, + genColumn: number, + source: string, + sourceLine: number, + sourceColumn: number, + name: string, + content?: string | null, +): void; +export function addSegment( + map: GenMapping, + genLine: number, + genColumn: number, + source?: string | null, + sourceLine?: number | null, + sourceColumn?: number | null, + name?: string | null, + content?: string | null, +): void { + return addSegmentInternal( + false, + map, + genLine, + genColumn, + source, + sourceLine, + sourceColumn, + name, + content, + ); +} + +/** + * A high-level API to associate a generated position with an original source position. Line is + * 1-based, but column is 0-based, due to legacy behavior in `source-map` library. + */ +export function addMapping( + map: GenMapping, + mapping: { + generated: Pos; + source?: null; + original?: null; + name?: null; + content?: null; + }, +): void; +export function addMapping( + map: GenMapping, + mapping: { + generated: Pos; + source: string; + original: Pos; + name?: null; + content?: string | null; + }, +): void; +export function addMapping( + map: GenMapping, + mapping: { + generated: Pos; + source: string; + original: Pos; + name: string; + content?: string | null; + }, +): void; +export function addMapping( + map: GenMapping, + mapping: { + generated: Pos; + source?: string | null; + original?: Pos | null; + name?: string | null; + content?: string | null; + }, +): void { + return addMappingInternal(false, map, mapping as Parameters[2]); +} + +/** + * Same as `addSegment`, but will only add the segment if it generates useful information in the + * resulting map. This only works correctly if segments are added **in order**, meaning you should + * not add a segment with a lower generated line/column than one that came before. + */ +export const maybeAddSegment: typeof addSegment = ( + map, + genLine, + genColumn, + source, + sourceLine, + sourceColumn, + name, + content, +) => { + return addSegmentInternal( + true, + map, + genLine, + genColumn, + source, + sourceLine, + sourceColumn, + name, + content, + ); +}; + +/** + * Same as `addMapping`, but will only add the mapping if it generates useful information in the + * resulting map. This only works correctly if mappings are added **in order**, meaning you should + * not add a mapping with a lower generated line/column than one that came before. + */ +export const maybeAddMapping: typeof addMapping = (map, mapping) => { + return addMappingInternal(true, map, mapping as Parameters[2]); +}; + +/** + * Adds/removes the content of the source file to the source map. + */ +export function setSourceContent(map: GenMapping, source: string, content: string | null): void { + const { + _sources: sources, + _sourcesContent: sourcesContent, + // _originalScopes: originalScopes, + } = cast(map); + const index = put(sources, source); + sourcesContent[index] = content; + // if (index === originalScopes.length) originalScopes[index] = []; +} + +export function setIgnore(map: GenMapping, source: string, ignore = true) { + const { + _sources: sources, + _sourcesContent: sourcesContent, + _ignoreList: ignoreList, + // _originalScopes: originalScopes, + } = cast(map); + const index = put(sources, source); + if (index === sourcesContent.length) sourcesContent[index] = null; + // if (index === originalScopes.length) originalScopes[index] = []; + if (ignore) put(ignoreList, index); + else remove(ignoreList, index); +} + +/** + * Returns a sourcemap object (with decoded mappings) suitable for passing to a library that expects + * a sourcemap, or to JSON.stringify. + */ +export function toDecodedMap(map: GenMapping): DecodedSourceMap { + const { + _mappings: mappings, + _sources: sources, + _sourcesContent: sourcesContent, + _names: names, + _ignoreList: ignoreList, + // _originalScopes: originalScopes, + // _generatedRanges: generatedRanges, + } = cast(map); + removeEmptyFinalLines(mappings); + + return { + version: 3, + file: map.file || undefined, + names: names.array, + sourceRoot: map.sourceRoot || undefined, + sources: sources.array, + sourcesContent, + mappings, + // originalScopes, + // generatedRanges, + ignoreList: ignoreList.array, + }; +} + +/** + * Returns a sourcemap object (with encoded mappings) suitable for passing to a library that expects + * a sourcemap, or to JSON.stringify. + */ +export function toEncodedMap(map: GenMapping): EncodedSourceMap { + const decoded = toDecodedMap(map); + return Object.assign({}, decoded, { + // originalScopes: decoded.originalScopes.map((os) => encodeOriginalScopes(os)), + // generatedRanges: encodeGeneratedRanges(decoded.generatedRanges as GeneratedRange[]), + mappings: encode(decoded.mappings as SourceMapSegment[][]), + }); +} + +/** + * Constructs a new GenMapping, using the already present mappings of the input. + */ +export function fromMap(input: SourceMapInput): GenMapping { + const map = new TraceMap(input); + const gen = new GenMapping({ file: map.file, sourceRoot: map.sourceRoot }); + + putAll(cast(gen)._names, map.names); + putAll(cast(gen)._sources, map.sources as string[]); + cast(gen)._sourcesContent = map.sourcesContent || map.sources.map(() => null); + cast(gen)._mappings = decodedMappings(map) as GenMapping['_mappings']; + // TODO: implement originalScopes/generatedRanges + if (map.ignoreList) putAll(cast(gen)._ignoreList, map.ignoreList); + + return gen; +} + +/** + * Returns an array of high-level mapping objects for every recorded segment, which could then be + * passed to the `source-map` library. + */ +export function allMappings(map: GenMapping): Mapping[] { + const out: Mapping[] = []; + const { _mappings: mappings, _sources: sources, _names: names } = cast(map); + + for (let i = 0; i < mappings.length; i++) { + const line = mappings[i]; + for (let j = 0; j < line.length; j++) { + const seg = line[j]; + + const generated = { line: i + 1, column: seg[COLUMN] }; + let source: string | undefined = undefined; + let original: Pos | undefined = undefined; + let name: string | undefined = undefined; + + if (seg.length !== 1) { + source = sources.array[seg[SOURCES_INDEX]]; + original = { line: seg[SOURCE_LINE] + 1, column: seg[SOURCE_COLUMN] }; + + if (seg.length === 5) name = names.array[seg[NAMES_INDEX]]; + } + + out.push({ generated, source, original, name } as Mapping); + } + } + + return out; +} + +// This split declaration is only so that terser can elminiate the static initialization block. +function addSegmentInternal( + skipable: boolean, + map: GenMapping, + genLine: number, + genColumn: number, + source: S, + sourceLine: S extends string ? number : null | undefined, + sourceColumn: S extends string ? number : null | undefined, + name: S extends string ? string | null | undefined : null | undefined, + content: S extends string ? string | null | undefined : null | undefined, +): void { + const { + _mappings: mappings, + _sources: sources, + _sourcesContent: sourcesContent, + _names: names, + // _originalScopes: originalScopes, + } = cast(map); + const line = getIndex(mappings, genLine); + const index = getColumnIndex(line, genColumn); + + if (!source) { + if (skipable && skipSourceless(line, index)) return; + return insert(line, index, [genColumn]); + } + + // Sigh, TypeScript can't figure out sourceLine and sourceColumn aren't nullish if source + // isn't nullish. + assert(sourceLine); + assert(sourceColumn); + + const sourcesIndex = put(sources, source); + const namesIndex = name ? put(names, name) : NO_NAME; + if (sourcesIndex === sourcesContent.length) sourcesContent[sourcesIndex] = content ?? null; + // if (sourcesIndex === originalScopes.length) originalScopes[sourcesIndex] = []; + + if (skipable && skipSource(line, index, sourcesIndex, sourceLine, sourceColumn, namesIndex)) { + return; + } + + return insert( + line, + index, + name + ? [genColumn, sourcesIndex, sourceLine, sourceColumn, namesIndex] + : [genColumn, sourcesIndex, sourceLine, sourceColumn], + ); +} + +function assert(_val: unknown): asserts _val is T { + // noop. +} + +function getIndex(arr: T[][], index: number): T[] { + for (let i = arr.length; i <= index; i++) { + arr[i] = []; + } + return arr[index]; +} + +function getColumnIndex(line: SourceMapSegment[], genColumn: number): number { + let index = line.length; + for (let i = index - 1; i >= 0; index = i--) { + const current = line[i]; + if (genColumn >= current[COLUMN]) break; + } + return index; +} + +function insert(array: T[], index: number, value: T) { + for (let i = array.length; i > index; i--) { + array[i] = array[i - 1]; + } + array[index] = value; +} + +function removeEmptyFinalLines(mappings: SourceMapSegment[][]) { + const { length } = mappings; + let len = length; + for (let i = len - 1; i >= 0; len = i, i--) { + if (mappings[i].length > 0) break; + } + if (len < length) mappings.length = len; +} + +function putAll(setarr: SetArray, array: T[]) { + for (let i = 0; i < array.length; i++) put(setarr, array[i]); +} + +function skipSourceless(line: SourceMapSegment[], index: number): boolean { + // The start of a line is already sourceless, so adding a sourceless segment to the beginning + // doesn't generate any useful information. + if (index === 0) return true; + + const prev = line[index - 1]; + // If the previous segment is also sourceless, then adding another sourceless segment doesn't + // genrate any new information. Else, this segment will end the source/named segment and point to + // a sourceless position, which is useful. + return prev.length === 1; +} + +function skipSource( + line: SourceMapSegment[], + index: number, + sourcesIndex: number, + sourceLine: number, + sourceColumn: number, + namesIndex: number, +): boolean { + // A source/named segment at the start of a line gives position at that genColumn + if (index === 0) return false; + + const prev = line[index - 1]; + + // If the previous segment is sourceless, then we're transitioning to a source. + if (prev.length === 1) return false; + + // If the previous segment maps to the exact same source position, then this segment doesn't + // provide any new position information. + return ( + sourcesIndex === prev[SOURCES_INDEX] && + sourceLine === prev[SOURCE_LINE] && + sourceColumn === prev[SOURCE_COLUMN] && + namesIndex === (prev.length === 5 ? prev[NAMES_INDEX] : NO_NAME) + ); +} + +function addMappingInternal( + skipable: boolean, + map: GenMapping, + mapping: { + generated: Pos; + source: S; + original: S extends string ? Pos : null | undefined; + name: S extends string ? string | null | undefined : null | undefined; + content: S extends string ? string | null | undefined : null | undefined; + }, +) { + const { generated, source, original, name, content } = mapping; + if (!source) { + return addSegmentInternal( + skipable, + map, + generated.line - 1, + generated.column, + null, + null, + null, + null, + null, + ); + } + assert(original); + return addSegmentInternal( + skipable, + map, + generated.line - 1, + generated.column, + source as string, + original.line - 1, + original.column, + name, + content, + ); +} + +/* +export function addOriginalScope( + map: GenMapping, + data: { + start: Pos; + end: Pos; + source: string; + kind: string; + name?: string; + variables?: string[]; + }, +): OriginalScopeInfo { + const { start, end, source, kind, name, variables } = data; + const { + _sources: sources, + _sourcesContent: sourcesContent, + _originalScopes: originalScopes, + _names: names, + } = cast(map); + const index = put(sources, source); + if (index === sourcesContent.length) sourcesContent[index] = null; + if (index === originalScopes.length) originalScopes[index] = []; + + const kindIndex = put(names, kind); + const scope: OriginalScope = name + ? [start.line - 1, start.column, end.line - 1, end.column, kindIndex, put(names, name)] + : [start.line - 1, start.column, end.line - 1, end.column, kindIndex]; + if (variables) { + scope.vars = variables.map((v) => put(names, v)); + } + const len = originalScopes[index].push(scope); + return [index, len - 1, variables]; +} +*/ + +// Generated Ranges +/* +export function addGeneratedRange( + map: GenMapping, + data: { + start: Pos; + isScope: boolean; + originalScope?: OriginalScopeInfo; + callsite?: OriginalPos; + }, +): GeneratedRangeInfo { + const { start, isScope, originalScope, callsite } = data; + const { + _originalScopes: originalScopes, + _sources: sources, + _sourcesContent: sourcesContent, + _generatedRanges: generatedRanges, + } = cast(map); + + const range: GeneratedRange = [ + start.line - 1, + start.column, + 0, + 0, + originalScope ? originalScope[0] : -1, + originalScope ? originalScope[1] : -1, + ]; + if (originalScope?.[2]) { + range.bindings = originalScope[2].map(() => [[-1]]); + } + if (callsite) { + const index = put(sources, callsite.source); + if (index === sourcesContent.length) sourcesContent[index] = null; + if (index === originalScopes.length) originalScopes[index] = []; + range.callsite = [index, callsite.line - 1, callsite.column]; + } + if (isScope) range.isScope = true; + generatedRanges.push(range); + + return [range, originalScope?.[2]]; +} + +export function setEndPosition(range: GeneratedRangeInfo, pos: Pos) { + range[0][2] = pos.line - 1; + range[0][3] = pos.column; +} + +export function addBinding( + map: GenMapping, + range: GeneratedRangeInfo, + variable: string, + expression: string | BindingExpressionRange, +) { + const { _names: names } = cast(map); + const bindings = (range[0].bindings ||= []); + const vars = range[1]; + + const index = vars!.indexOf(variable); + const binding = getIndex(bindings, index); + + if (typeof expression === 'string') binding[0] = [put(names, expression)]; + else { + const { start } = expression; + binding.push([put(names, expression.expression), start.line - 1, start.column]); + } +} +*/ diff --git a/node_modules/@jridgewell/gen-mapping/src/set-array.ts b/node_modules/@jridgewell/gen-mapping/src/set-array.ts new file mode 100644 index 0000000000..a2a73a5229 --- /dev/null +++ b/node_modules/@jridgewell/gen-mapping/src/set-array.ts @@ -0,0 +1,82 @@ +type Key = string | number | symbol; + +/** + * SetArray acts like a `Set` (allowing only one occurrence of a string `key`), but provides the + * index of the `key` in the backing array. + * + * This is designed to allow synchronizing a second array with the contents of the backing array, + * like how in a sourcemap `sourcesContent[i]` is the source content associated with `source[i]`, + * and there are never duplicates. + */ +export class SetArray { + declare private _indexes: Record; + declare array: readonly T[]; + + constructor() { + this._indexes = { __proto__: null } as any; + this.array = []; + } +} + +interface PublicSet { + array: T[]; + _indexes: SetArray['_indexes']; +} + +/** + * Typescript doesn't allow friend access to private fields, so this just casts the set into a type + * with public access modifiers. + */ +function cast(set: SetArray): PublicSet { + return set as any; +} + +/** + * Gets the index associated with `key` in the backing array, if it is already present. + */ +export function get(setarr: SetArray, key: T): number | undefined { + return cast(setarr)._indexes[key]; +} + +/** + * Puts `key` into the backing array, if it is not already present. Returns + * the index of the `key` in the backing array. + */ +export function put(setarr: SetArray, key: T): number { + // The key may or may not be present. If it is present, it's a number. + const index = get(setarr, key); + if (index !== undefined) return index; + + const { array, _indexes: indexes } = cast(setarr); + + const length = array.push(key); + return (indexes[key] = length - 1); +} + +/** + * Pops the last added item out of the SetArray. + */ +export function pop(setarr: SetArray): void { + const { array, _indexes: indexes } = cast(setarr); + if (array.length === 0) return; + + const last = array.pop()!; + indexes[last] = undefined; +} + +/** + * Removes the key, if it exists in the set. + */ +export function remove(setarr: SetArray, key: T): void { + const index = get(setarr, key); + if (index === undefined) return; + + const { array, _indexes: indexes } = cast(setarr); + for (let i = index + 1; i < array.length; i++) { + const k = array[i]; + array[i - 1] = k; + indexes[k]!--; + } + indexes[key] = undefined; + array.pop(); +} diff --git a/node_modules/@jridgewell/gen-mapping/src/sourcemap-segment.ts b/node_modules/@jridgewell/gen-mapping/src/sourcemap-segment.ts new file mode 100644 index 0000000000..fb296dd302 --- /dev/null +++ b/node_modules/@jridgewell/gen-mapping/src/sourcemap-segment.ts @@ -0,0 +1,16 @@ +type GeneratedColumn = number; +type SourcesIndex = number; +type SourceLine = number; +type SourceColumn = number; +type NamesIndex = number; + +export type SourceMapSegment = + | [GeneratedColumn] + | [GeneratedColumn, SourcesIndex, SourceLine, SourceColumn] + | [GeneratedColumn, SourcesIndex, SourceLine, SourceColumn, NamesIndex]; + +export const COLUMN = 0; +export const SOURCES_INDEX = 1; +export const SOURCE_LINE = 2; +export const SOURCE_COLUMN = 3; +export const NAMES_INDEX = 4; diff --git a/node_modules/@jridgewell/gen-mapping/src/types.ts b/node_modules/@jridgewell/gen-mapping/src/types.ts new file mode 100644 index 0000000000..b087f706a0 --- /dev/null +++ b/node_modules/@jridgewell/gen-mapping/src/types.ts @@ -0,0 +1,61 @@ +// import type { GeneratedRange, OriginalScope } from '@jridgewell/sourcemap-codec'; +import type { SourceMapSegment } from './sourcemap-segment'; + +export interface SourceMapV3 { + file?: string | null; + names: readonly string[]; + sourceRoot?: string; + sources: readonly (string | null)[]; + sourcesContent?: readonly (string | null)[]; + version: 3; + ignoreList?: readonly number[]; +} + +export interface EncodedSourceMap extends SourceMapV3 { + mappings: string; + // originalScopes: string[]; + // generatedRanges: string; +} + +export interface DecodedSourceMap extends SourceMapV3 { + mappings: readonly SourceMapSegment[][]; + // originalScopes: readonly OriginalScope[][]; + // generatedRanges: readonly GeneratedRange[]; +} + +export interface Pos { + line: number; // 1-based + column: number; // 0-based +} + +export interface OriginalPos extends Pos { + source: string; +} + +export interface BindingExpressionRange { + start: Pos; + expression: string; +} + +// export type OriginalScopeInfo = [number, number, string[] | undefined]; +// export type GeneratedRangeInfo = [GeneratedRange, string[] | undefined]; + +export type Mapping = + | { + generated: Pos; + source: undefined; + original: undefined; + name: undefined; + } + | { + generated: Pos; + source: string; + original: Pos; + name: string; + } + | { + generated: Pos; + source: string; + original: Pos; + name: undefined; + }; diff --git a/node_modules/@jridgewell/gen-mapping/types/gen-mapping.d.cts b/node_modules/@jridgewell/gen-mapping/types/gen-mapping.d.cts new file mode 100644 index 0000000000..7618d8572b --- /dev/null +++ b/node_modules/@jridgewell/gen-mapping/types/gen-mapping.d.cts @@ -0,0 +1,89 @@ +import type { SourceMapInput } from '@jridgewell/trace-mapping'; +import type { DecodedSourceMap, EncodedSourceMap, Pos, Mapping } from './types.cts'; +export type { DecodedSourceMap, EncodedSourceMap, Mapping }; +export type Options = { + file?: string | null; + sourceRoot?: string | null; +}; +/** + * Provides the state to generate a sourcemap. + */ +export declare class GenMapping { + private _names; + private _sources; + private _sourcesContent; + private _mappings; + private _ignoreList; + file: string | null | undefined; + sourceRoot: string | null | undefined; + constructor({ file, sourceRoot }?: Options); +} +/** + * A low-level API to associate a generated position with an original source position. Line and + * column here are 0-based, unlike `addMapping`. + */ +export declare function addSegment(map: GenMapping, genLine: number, genColumn: number, source?: null, sourceLine?: null, sourceColumn?: null, name?: null, content?: null): void; +export declare function addSegment(map: GenMapping, genLine: number, genColumn: number, source: string, sourceLine: number, sourceColumn: number, name?: null, content?: string | null): void; +export declare function addSegment(map: GenMapping, genLine: number, genColumn: number, source: string, sourceLine: number, sourceColumn: number, name: string, content?: string | null): void; +/** + * A high-level API to associate a generated position with an original source position. Line is + * 1-based, but column is 0-based, due to legacy behavior in `source-map` library. + */ +export declare function addMapping(map: GenMapping, mapping: { + generated: Pos; + source?: null; + original?: null; + name?: null; + content?: null; +}): void; +export declare function addMapping(map: GenMapping, mapping: { + generated: Pos; + source: string; + original: Pos; + name?: null; + content?: string | null; +}): void; +export declare function addMapping(map: GenMapping, mapping: { + generated: Pos; + source: string; + original: Pos; + name: string; + content?: string | null; +}): void; +/** + * Same as `addSegment`, but will only add the segment if it generates useful information in the + * resulting map. This only works correctly if segments are added **in order**, meaning you should + * not add a segment with a lower generated line/column than one that came before. + */ +export declare const maybeAddSegment: typeof addSegment; +/** + * Same as `addMapping`, but will only add the mapping if it generates useful information in the + * resulting map. This only works correctly if mappings are added **in order**, meaning you should + * not add a mapping with a lower generated line/column than one that came before. + */ +export declare const maybeAddMapping: typeof addMapping; +/** + * Adds/removes the content of the source file to the source map. + */ +export declare function setSourceContent(map: GenMapping, source: string, content: string | null): void; +export declare function setIgnore(map: GenMapping, source: string, ignore?: boolean): void; +/** + * Returns a sourcemap object (with decoded mappings) suitable for passing to a library that expects + * a sourcemap, or to JSON.stringify. + */ +export declare function toDecodedMap(map: GenMapping): DecodedSourceMap; +/** + * Returns a sourcemap object (with encoded mappings) suitable for passing to a library that expects + * a sourcemap, or to JSON.stringify. + */ +export declare function toEncodedMap(map: GenMapping): EncodedSourceMap; +/** + * Constructs a new GenMapping, using the already present mappings of the input. + */ +export declare function fromMap(input: SourceMapInput): GenMapping; +/** + * Returns an array of high-level mapping objects for every recorded segment, which could then be + * passed to the `source-map` library. + */ +export declare function allMappings(map: GenMapping): Mapping[]; +//# sourceMappingURL=gen-mapping.d.ts.map \ No newline at end of file diff --git a/node_modules/@jridgewell/gen-mapping/types/gen-mapping.d.cts.map b/node_modules/@jridgewell/gen-mapping/types/gen-mapping.d.cts.map new file mode 100644 index 0000000000..8a2b183533 --- /dev/null +++ b/node_modules/@jridgewell/gen-mapping/types/gen-mapping.d.cts.map @@ -0,0 +1 @@ +{"version":3,"file":"gen-mapping.d.ts","sourceRoot":"","sources":["../src/gen-mapping.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAGhE,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAChB,GAAG,EACH,OAAO,EAKR,MAAM,SAAS,CAAC;AAEjB,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC;AAE5D,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,CAAC;AAIF;;GAEG;AACH,qBAAa,UAAU;IACrB,QAAgB,MAAM,CAAmB;IACzC,QAAgB,QAAQ,CAAmB;IAC3C,QAAgB,eAAe,CAAoB;IACnD,QAAgB,SAAS,CAAuB;IAGhD,QAAgB,WAAW,CAAmB;IACtC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAChC,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;gBAElC,EAAE,IAAI,EAAE,UAAU,EAAE,GAAE,OAAY;CAW/C;AAoBD;;;GAGG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,UAAU,EACf,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,IAAI,EACb,UAAU,CAAC,EAAE,IAAI,EACjB,YAAY,CAAC,EAAE,IAAI,EACnB,IAAI,CAAC,EAAE,IAAI,EACX,OAAO,CAAC,EAAE,IAAI,GACb,IAAI,CAAC;AACR,wBAAgB,UAAU,CACxB,GAAG,EAAE,UAAU,EACf,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,IAAI,CAAC,EAAE,IAAI,EACX,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GACtB,IAAI,CAAC;AACR,wBAAgB,UAAU,CACxB,GAAG,EAAE,UAAU,EACf,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GACtB,IAAI,CAAC;AAwBR;;;GAGG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,UAAU,EACf,OAAO,EAAE;IACP,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,CAAC,EAAE,IAAI,CAAC;IACd,QAAQ,CAAC,EAAE,IAAI,CAAC;IAChB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,OAAO,CAAC,EAAE,IAAI,CAAC;CAChB,GACA,IAAI,CAAC;AACR,wBAAgB,UAAU,CACxB,GAAG,EAAE,UAAU,EACf,OAAO,EAAE;IACP,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,GAAG,CAAC;IACd,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB,GACA,IAAI,CAAC;AACR,wBAAgB,UAAU,CACxB,GAAG,EAAE,UAAU,EACf,OAAO,EAAE;IACP,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,GAAG,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB,GACA,IAAI,CAAC;AAcR;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,OAAO,UAqBpC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,OAAO,UAEpC,CAAC;AAEF;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAS9F;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,UAAO,QAYvE;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,UAAU,GAAG,gBAAgB,CAwB9D;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,UAAU,GAAG,gBAAgB,CAO9D;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,cAAc,GAAG,UAAU,CAYzD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,EAAE,CA0BtD"} \ No newline at end of file diff --git a/node_modules/@jridgewell/gen-mapping/types/gen-mapping.d.mts b/node_modules/@jridgewell/gen-mapping/types/gen-mapping.d.mts new file mode 100644 index 0000000000..bbc0d89cfd --- /dev/null +++ b/node_modules/@jridgewell/gen-mapping/types/gen-mapping.d.mts @@ -0,0 +1,89 @@ +import type { SourceMapInput } from '@jridgewell/trace-mapping'; +import type { DecodedSourceMap, EncodedSourceMap, Pos, Mapping } from './types.mts'; +export type { DecodedSourceMap, EncodedSourceMap, Mapping }; +export type Options = { + file?: string | null; + sourceRoot?: string | null; +}; +/** + * Provides the state to generate a sourcemap. + */ +export declare class GenMapping { + private _names; + private _sources; + private _sourcesContent; + private _mappings; + private _ignoreList; + file: string | null | undefined; + sourceRoot: string | null | undefined; + constructor({ file, sourceRoot }?: Options); +} +/** + * A low-level API to associate a generated position with an original source position. Line and + * column here are 0-based, unlike `addMapping`. + */ +export declare function addSegment(map: GenMapping, genLine: number, genColumn: number, source?: null, sourceLine?: null, sourceColumn?: null, name?: null, content?: null): void; +export declare function addSegment(map: GenMapping, genLine: number, genColumn: number, source: string, sourceLine: number, sourceColumn: number, name?: null, content?: string | null): void; +export declare function addSegment(map: GenMapping, genLine: number, genColumn: number, source: string, sourceLine: number, sourceColumn: number, name: string, content?: string | null): void; +/** + * A high-level API to associate a generated position with an original source position. Line is + * 1-based, but column is 0-based, due to legacy behavior in `source-map` library. + */ +export declare function addMapping(map: GenMapping, mapping: { + generated: Pos; + source?: null; + original?: null; + name?: null; + content?: null; +}): void; +export declare function addMapping(map: GenMapping, mapping: { + generated: Pos; + source: string; + original: Pos; + name?: null; + content?: string | null; +}): void; +export declare function addMapping(map: GenMapping, mapping: { + generated: Pos; + source: string; + original: Pos; + name: string; + content?: string | null; +}): void; +/** + * Same as `addSegment`, but will only add the segment if it generates useful information in the + * resulting map. This only works correctly if segments are added **in order**, meaning you should + * not add a segment with a lower generated line/column than one that came before. + */ +export declare const maybeAddSegment: typeof addSegment; +/** + * Same as `addMapping`, but will only add the mapping if it generates useful information in the + * resulting map. This only works correctly if mappings are added **in order**, meaning you should + * not add a mapping with a lower generated line/column than one that came before. + */ +export declare const maybeAddMapping: typeof addMapping; +/** + * Adds/removes the content of the source file to the source map. + */ +export declare function setSourceContent(map: GenMapping, source: string, content: string | null): void; +export declare function setIgnore(map: GenMapping, source: string, ignore?: boolean): void; +/** + * Returns a sourcemap object (with decoded mappings) suitable for passing to a library that expects + * a sourcemap, or to JSON.stringify. + */ +export declare function toDecodedMap(map: GenMapping): DecodedSourceMap; +/** + * Returns a sourcemap object (with encoded mappings) suitable for passing to a library that expects + * a sourcemap, or to JSON.stringify. + */ +export declare function toEncodedMap(map: GenMapping): EncodedSourceMap; +/** + * Constructs a new GenMapping, using the already present mappings of the input. + */ +export declare function fromMap(input: SourceMapInput): GenMapping; +/** + * Returns an array of high-level mapping objects for every recorded segment, which could then be + * passed to the `source-map` library. + */ +export declare function allMappings(map: GenMapping): Mapping[]; +//# sourceMappingURL=gen-mapping.d.ts.map \ No newline at end of file diff --git a/node_modules/@jridgewell/gen-mapping/types/gen-mapping.d.mts.map b/node_modules/@jridgewell/gen-mapping/types/gen-mapping.d.mts.map new file mode 100644 index 0000000000..8a2b183533 --- /dev/null +++ b/node_modules/@jridgewell/gen-mapping/types/gen-mapping.d.mts.map @@ -0,0 +1 @@ +{"version":3,"file":"gen-mapping.d.ts","sourceRoot":"","sources":["../src/gen-mapping.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@jridgewell/gen-mapping/types/set-array.d.cts b/node_modules/@jridgewell/gen-mapping/types/set-array.d.cts new file mode 100644 index 0000000000..5d8cda35a7 --- /dev/null +++ b/node_modules/@jridgewell/gen-mapping/types/set-array.d.cts @@ -0,0 +1,33 @@ +type Key = string | number | symbol; +/** + * SetArray acts like a `Set` (allowing only one occurrence of a string `key`), but provides the + * index of the `key` in the backing array. + * + * This is designed to allow synchronizing a second array with the contents of the backing array, + * like how in a sourcemap `sourcesContent[i]` is the source content associated with `source[i]`, + * and there are never duplicates. + */ +export declare class SetArray { + private _indexes; + array: readonly T[]; + constructor(); +} +/** + * Gets the index associated with `key` in the backing array, if it is already present. + */ +export declare function get(setarr: SetArray, key: T): number | undefined; +/** + * Puts `key` into the backing array, if it is not already present. Returns + * the index of the `key` in the backing array. + */ +export declare function put(setarr: SetArray, key: T): number; +/** + * Pops the last added item out of the SetArray. + */ +export declare function pop(setarr: SetArray): void; +/** + * Removes the key, if it exists in the set. + */ +export declare function remove(setarr: SetArray, key: T): void; +export {}; +//# sourceMappingURL=set-array.d.ts.map \ No newline at end of file diff --git a/node_modules/@jridgewell/gen-mapping/types/set-array.d.cts.map b/node_modules/@jridgewell/gen-mapping/types/set-array.d.cts.map new file mode 100644 index 0000000000..c52b8bcee0 --- /dev/null +++ b/node_modules/@jridgewell/gen-mapping/types/set-array.d.cts.map @@ -0,0 +1 @@ +{"version":3,"file":"set-array.d.ts","sourceRoot":"","sources":["../src/set-array.ts"],"names":[],"mappings":"AAAA,KAAK,GAAG,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAEpC;;;;;;;GAOG;AACH,qBAAa,QAAQ,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG;IACvC,QAAgB,QAAQ,CAAgC;IAChD,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;;CAM7B;AAeD;;GAEG;AACH,wBAAgB,GAAG,CAAC,CAAC,SAAS,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,MAAM,GAAG,SAAS,CAElF;AAED;;;GAGG;AACH,wBAAgB,GAAG,CAAC,CAAC,SAAS,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,MAAM,CAStE;AAED;;GAEG;AACH,wBAAgB,GAAG,CAAC,CAAC,SAAS,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAM5D;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,CAAC,SAAS,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAYvE"} \ No newline at end of file diff --git a/node_modules/@jridgewell/gen-mapping/types/set-array.d.mts b/node_modules/@jridgewell/gen-mapping/types/set-array.d.mts new file mode 100644 index 0000000000..5d8cda35a7 --- /dev/null +++ b/node_modules/@jridgewell/gen-mapping/types/set-array.d.mts @@ -0,0 +1,33 @@ +type Key = string | number | symbol; +/** + * SetArray acts like a `Set` (allowing only one occurrence of a string `key`), but provides the + * index of the `key` in the backing array. + * + * This is designed to allow synchronizing a second array with the contents of the backing array, + * like how in a sourcemap `sourcesContent[i]` is the source content associated with `source[i]`, + * and there are never duplicates. + */ +export declare class SetArray { + private _indexes; + array: readonly T[]; + constructor(); +} +/** + * Gets the index associated with `key` in the backing array, if it is already present. + */ +export declare function get(setarr: SetArray, key: T): number | undefined; +/** + * Puts `key` into the backing array, if it is not already present. Returns + * the index of the `key` in the backing array. + */ +export declare function put(setarr: SetArray, key: T): number; +/** + * Pops the last added item out of the SetArray. + */ +export declare function pop(setarr: SetArray): void; +/** + * Removes the key, if it exists in the set. + */ +export declare function remove(setarr: SetArray, key: T): void; +export {}; +//# sourceMappingURL=set-array.d.ts.map \ No newline at end of file diff --git a/node_modules/@jridgewell/gen-mapping/types/set-array.d.mts.map b/node_modules/@jridgewell/gen-mapping/types/set-array.d.mts.map new file mode 100644 index 0000000000..c52b8bcee0 --- /dev/null +++ b/node_modules/@jridgewell/gen-mapping/types/set-array.d.mts.map @@ -0,0 +1 @@ +{"version":3,"file":"set-array.d.ts","sourceRoot":"","sources":["../src/set-array.ts"],"names":[],"mappings":"AAAA,KAAK,GAAG,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAEpC;;;;;;;GAOG;AACH,qBAAa,QAAQ,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG;IACvC,QAAgB,QAAQ,CAAgC;IAChD,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;;CAM7B;AAeD;;GAEG;AACH,wBAAgB,GAAG,CAAC,CAAC,SAAS,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,MAAM,GAAG,SAAS,CAElF;AAED;;;GAGG;AACH,wBAAgB,GAAG,CAAC,CAAC,SAAS,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,MAAM,CAStE;AAED;;GAEG;AACH,wBAAgB,GAAG,CAAC,CAAC,SAAS,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAM5D;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,CAAC,SAAS,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAYvE"} \ No newline at end of file diff --git a/node_modules/@jridgewell/gen-mapping/types/sourcemap-segment.d.cts b/node_modules/@jridgewell/gen-mapping/types/sourcemap-segment.d.cts new file mode 100644 index 0000000000..68862952d5 --- /dev/null +++ b/node_modules/@jridgewell/gen-mapping/types/sourcemap-segment.d.cts @@ -0,0 +1,13 @@ +type GeneratedColumn = number; +type SourcesIndex = number; +type SourceLine = number; +type SourceColumn = number; +type NamesIndex = number; +export type SourceMapSegment = [GeneratedColumn] | [GeneratedColumn, SourcesIndex, SourceLine, SourceColumn] | [GeneratedColumn, SourcesIndex, SourceLine, SourceColumn, NamesIndex]; +export declare const COLUMN = 0; +export declare const SOURCES_INDEX = 1; +export declare const SOURCE_LINE = 2; +export declare const SOURCE_COLUMN = 3; +export declare const NAMES_INDEX = 4; +export {}; +//# sourceMappingURL=sourcemap-segment.d.ts.map \ No newline at end of file diff --git a/node_modules/@jridgewell/gen-mapping/types/sourcemap-segment.d.cts.map b/node_modules/@jridgewell/gen-mapping/types/sourcemap-segment.d.cts.map new file mode 100644 index 0000000000..23cdc45288 --- /dev/null +++ b/node_modules/@jridgewell/gen-mapping/types/sourcemap-segment.d.cts.map @@ -0,0 +1 @@ +{"version":3,"file":"sourcemap-segment.d.ts","sourceRoot":"","sources":["../src/sourcemap-segment.ts"],"names":[],"mappings":"AAAA,KAAK,eAAe,GAAG,MAAM,CAAC;AAC9B,KAAK,YAAY,GAAG,MAAM,CAAC;AAC3B,KAAK,UAAU,GAAG,MAAM,CAAC;AACzB,KAAK,YAAY,GAAG,MAAM,CAAC;AAC3B,KAAK,UAAU,GAAG,MAAM,CAAC;AAEzB,MAAM,MAAM,gBAAgB,GACxB,CAAC,eAAe,CAAC,GACjB,CAAC,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,CAAC,GACzD,CAAC,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;AAE1E,eAAO,MAAM,MAAM,IAAI,CAAC;AACxB,eAAO,MAAM,aAAa,IAAI,CAAC;AAC/B,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,eAAO,MAAM,aAAa,IAAI,CAAC;AAC/B,eAAO,MAAM,WAAW,IAAI,CAAC"} \ No newline at end of file diff --git a/node_modules/@jridgewell/gen-mapping/types/sourcemap-segment.d.mts b/node_modules/@jridgewell/gen-mapping/types/sourcemap-segment.d.mts new file mode 100644 index 0000000000..68862952d5 --- /dev/null +++ b/node_modules/@jridgewell/gen-mapping/types/sourcemap-segment.d.mts @@ -0,0 +1,13 @@ +type GeneratedColumn = number; +type SourcesIndex = number; +type SourceLine = number; +type SourceColumn = number; +type NamesIndex = number; +export type SourceMapSegment = [GeneratedColumn] | [GeneratedColumn, SourcesIndex, SourceLine, SourceColumn] | [GeneratedColumn, SourcesIndex, SourceLine, SourceColumn, NamesIndex]; +export declare const COLUMN = 0; +export declare const SOURCES_INDEX = 1; +export declare const SOURCE_LINE = 2; +export declare const SOURCE_COLUMN = 3; +export declare const NAMES_INDEX = 4; +export {}; +//# sourceMappingURL=sourcemap-segment.d.ts.map \ No newline at end of file diff --git a/node_modules/@jridgewell/gen-mapping/types/sourcemap-segment.d.mts.map b/node_modules/@jridgewell/gen-mapping/types/sourcemap-segment.d.mts.map new file mode 100644 index 0000000000..23cdc45288 --- /dev/null +++ b/node_modules/@jridgewell/gen-mapping/types/sourcemap-segment.d.mts.map @@ -0,0 +1 @@ +{"version":3,"file":"sourcemap-segment.d.ts","sourceRoot":"","sources":["../src/sourcemap-segment.ts"],"names":[],"mappings":"AAAA,KAAK,eAAe,GAAG,MAAM,CAAC;AAC9B,KAAK,YAAY,GAAG,MAAM,CAAC;AAC3B,KAAK,UAAU,GAAG,MAAM,CAAC;AACzB,KAAK,YAAY,GAAG,MAAM,CAAC;AAC3B,KAAK,UAAU,GAAG,MAAM,CAAC;AAEzB,MAAM,MAAM,gBAAgB,GACxB,CAAC,eAAe,CAAC,GACjB,CAAC,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,CAAC,GACzD,CAAC,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;AAE1E,eAAO,MAAM,MAAM,IAAI,CAAC;AACxB,eAAO,MAAM,aAAa,IAAI,CAAC;AAC/B,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,eAAO,MAAM,aAAa,IAAI,CAAC;AAC/B,eAAO,MAAM,WAAW,IAAI,CAAC"} \ No newline at end of file diff --git a/node_modules/@jridgewell/gen-mapping/types/types.d.cts b/node_modules/@jridgewell/gen-mapping/types/types.d.cts new file mode 100644 index 0000000000..58da00a9fb --- /dev/null +++ b/node_modules/@jridgewell/gen-mapping/types/types.d.cts @@ -0,0 +1,44 @@ +import type { SourceMapSegment } from './sourcemap-segment.cts'; +export interface SourceMapV3 { + file?: string | null; + names: readonly string[]; + sourceRoot?: string; + sources: readonly (string | null)[]; + sourcesContent?: readonly (string | null)[]; + version: 3; + ignoreList?: readonly number[]; +} +export interface EncodedSourceMap extends SourceMapV3 { + mappings: string; +} +export interface DecodedSourceMap extends SourceMapV3 { + mappings: readonly SourceMapSegment[][]; +} +export interface Pos { + line: number; + column: number; +} +export interface OriginalPos extends Pos { + source: string; +} +export interface BindingExpressionRange { + start: Pos; + expression: string; +} +export type Mapping = { + generated: Pos; + source: undefined; + original: undefined; + name: undefined; +} | { + generated: Pos; + source: string; + original: Pos; + name: string; +} | { + generated: Pos; + source: string; + original: Pos; + name: undefined; +}; +//# sourceMappingURL=types.d.ts.map \ No newline at end of file diff --git a/node_modules/@jridgewell/gen-mapping/types/types.d.cts.map b/node_modules/@jridgewell/gen-mapping/types/types.d.cts.map new file mode 100644 index 0000000000..159e734d5f --- /dev/null +++ b/node_modules/@jridgewell/gen-mapping/types/types.d.cts.map @@ -0,0 +1 @@ +{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;IACpC,cAAc,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;IAC5C,OAAO,EAAE,CAAC,CAAC;IACX,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,QAAQ,EAAE,MAAM,CAAC;CAGlB;AAED,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,QAAQ,EAAE,SAAS,gBAAgB,EAAE,EAAE,CAAC;CAGzC;AAED,MAAM,WAAW,GAAG;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAY,SAAQ,GAAG;IACtC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,GAAG,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;CACpB;AAKD,MAAM,MAAM,OAAO,GACf;IACE,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,EAAE,SAAS,CAAC;IAClB,QAAQ,EAAE,SAAS,CAAC;IACpB,IAAI,EAAE,SAAS,CAAC;CACjB,GACD;IACE,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,GAAG,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd,GACD;IACE,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,GAAG,CAAC;IACd,IAAI,EAAE,SAAS,CAAC;CACjB,CAAC"} \ No newline at end of file diff --git a/node_modules/@jridgewell/gen-mapping/types/types.d.mts b/node_modules/@jridgewell/gen-mapping/types/types.d.mts new file mode 100644 index 0000000000..e9837ebe53 --- /dev/null +++ b/node_modules/@jridgewell/gen-mapping/types/types.d.mts @@ -0,0 +1,44 @@ +import type { SourceMapSegment } from './sourcemap-segment.mts'; +export interface SourceMapV3 { + file?: string | null; + names: readonly string[]; + sourceRoot?: string; + sources: readonly (string | null)[]; + sourcesContent?: readonly (string | null)[]; + version: 3; + ignoreList?: readonly number[]; +} +export interface EncodedSourceMap extends SourceMapV3 { + mappings: string; +} +export interface DecodedSourceMap extends SourceMapV3 { + mappings: readonly SourceMapSegment[][]; +} +export interface Pos { + line: number; + column: number; +} +export interface OriginalPos extends Pos { + source: string; +} +export interface BindingExpressionRange { + start: Pos; + expression: string; +} +export type Mapping = { + generated: Pos; + source: undefined; + original: undefined; + name: undefined; +} | { + generated: Pos; + source: string; + original: Pos; + name: string; +} | { + generated: Pos; + source: string; + original: Pos; + name: undefined; +}; +//# sourceMappingURL=types.d.ts.map \ No newline at end of file diff --git a/node_modules/@jridgewell/gen-mapping/types/types.d.mts.map b/node_modules/@jridgewell/gen-mapping/types/types.d.mts.map new file mode 100644 index 0000000000..159e734d5f --- /dev/null +++ b/node_modules/@jridgewell/gen-mapping/types/types.d.mts.map @@ -0,0 +1 @@ +{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;IACpC,cAAc,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;IAC5C,OAAO,EAAE,CAAC,CAAC;IACX,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,QAAQ,EAAE,MAAM,CAAC;CAGlB;AAED,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,QAAQ,EAAE,SAAS,gBAAgB,EAAE,EAAE,CAAC;CAGzC;AAED,MAAM,WAAW,GAAG;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAY,SAAQ,GAAG;IACtC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,GAAG,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;CACpB;AAKD,MAAM,MAAM,OAAO,GACf;IACE,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,EAAE,SAAS,CAAC;IAClB,QAAQ,EAAE,SAAS,CAAC;IACpB,IAAI,EAAE,SAAS,CAAC;CACjB,GACD;IACE,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,GAAG,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd,GACD;IACE,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,GAAG,CAAC;IACd,IAAI,EAAE,SAAS,CAAC;CACjB,CAAC"} \ No newline at end of file diff --git a/node_modules/@jridgewell/remapping/LICENSE b/node_modules/@jridgewell/remapping/LICENSE new file mode 100644 index 0000000000..1f6ce94c11 --- /dev/null +++ b/node_modules/@jridgewell/remapping/LICENSE @@ -0,0 +1,19 @@ +Copyright 2024 Justin Ridgewell + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/@jridgewell/remapping/README.md b/node_modules/@jridgewell/remapping/README.md new file mode 100644 index 0000000000..6d092d7eaa --- /dev/null +++ b/node_modules/@jridgewell/remapping/README.md @@ -0,0 +1,218 @@ +# @jridgewell/remapping + +> Remap sequential sourcemaps through transformations to point at the original source code + +Remapping allows you to take the sourcemaps generated through transforming your code and "remap" +them to the original source locations. Think "my minified code, transformed with babel and bundled +with webpack", all pointing to the correct location in your original source code. + +With remapping, none of your source code transformations need to be aware of the input's sourcemap, +they only need to generate an output sourcemap. This greatly simplifies building custom +transformations (think a find-and-replace). + +## Installation + +```sh +npm install @jridgewell/remapping +``` + +## Usage + +```typescript +function remapping( + map: SourceMap | SourceMap[], + loader: (file: string, ctx: LoaderContext) => (SourceMap | null | undefined), + options?: { excludeContent: boolean, decodedMappings: boolean } +): SourceMap; + +// LoaderContext gives the loader the importing sourcemap, tree depth, the ability to override the +// "source" location (where child sources are resolved relative to, or the location of original +// source), and the ability to override the "content" of an original source for inclusion in the +// output sourcemap. +type LoaderContext = { + readonly importer: string; + readonly depth: number; + source: string; + content: string | null | undefined; +} +``` + +`remapping` takes the final output sourcemap, and a `loader` function. For every source file pointer +in the sourcemap, the `loader` will be called with the resolved path. If the path itself represents +a transformed file (it has a sourcmap associated with it), then the `loader` should return that +sourcemap. If not, the path will be treated as an original, untransformed source code. + +```js +// Babel transformed "helloworld.js" into "transformed.js" +const transformedMap = JSON.stringify({ + file: 'transformed.js', + // 1st column of 2nd line of output file translates into the 1st source + // file, line 3, column 2 + mappings: ';CAEE', + sources: ['helloworld.js'], + version: 3, +}); + +// Uglify minified "transformed.js" into "transformed.min.js" +const minifiedTransformedMap = JSON.stringify({ + file: 'transformed.min.js', + // 0th column of 1st line of output file translates into the 1st source + // file, line 2, column 1. + mappings: 'AACC', + names: [], + sources: ['transformed.js'], + version: 3, +}); + +const remapped = remapping( + minifiedTransformedMap, + (file, ctx) => { + + // The "transformed.js" file is an transformed file. + if (file === 'transformed.js') { + // The root importer is empty. + console.assert(ctx.importer === ''); + // The depth in the sourcemap tree we're currently loading. + // The root `minifiedTransformedMap` is depth 0, and its source children are depth 1, etc. + console.assert(ctx.depth === 1); + + return transformedMap; + } + + // Loader will be called to load transformedMap's source file pointers as well. + console.assert(file === 'helloworld.js'); + // `transformed.js`'s sourcemap points into `helloworld.js`. + console.assert(ctx.importer === 'transformed.js'); + // This is a source child of `transformed`, which is a source child of `minifiedTransformedMap`. + console.assert(ctx.depth === 2); + return null; + } +); + +console.log(remapped); +// { +// file: 'transpiled.min.js', +// mappings: 'AAEE', +// sources: ['helloworld.js'], +// version: 3, +// }; +``` + +In this example, `loader` will be called twice: + +1. `"transformed.js"`, the first source file pointer in the `minifiedTransformedMap`. We return the + associated sourcemap for it (its a transformed file, after all) so that sourcemap locations can + be traced through it into the source files it represents. +2. `"helloworld.js"`, our original, unmodified source code. This file does not have a sourcemap, so + we return `null`. + +The `remapped` sourcemap now points from `transformed.min.js` into locations in `helloworld.js`. If +you were to read the `mappings`, it says "0th column of the first line output line points to the 1st +column of the 2nd line of the file `helloworld.js`". + +### Multiple transformations of a file + +As a convenience, if you have multiple single-source transformations of a file, you may pass an +array of sourcemap files in the order of most-recent transformation sourcemap first. Note that this +changes the `importer` and `depth` of each call to our loader. So our above example could have been +written as: + +```js +const remapped = remapping( + [minifiedTransformedMap, transformedMap], + () => null +); + +console.log(remapped); +// { +// file: 'transpiled.min.js', +// mappings: 'AAEE', +// sources: ['helloworld.js'], +// version: 3, +// }; +``` + +### Advanced control of the loading graph + +#### `source` + +The `source` property can overridden to any value to change the location of the current load. Eg, +for an original source file, it allows us to change the location to the original source regardless +of what the sourcemap source entry says. And for transformed files, it allows us to change the +relative resolving location for child sources of the loaded sourcemap. + +```js +const remapped = remapping( + minifiedTransformedMap, + (file, ctx) => { + + if (file === 'transformed.js') { + // We pretend the transformed.js file actually exists in the 'src/' directory. When the nested + // source files are loaded, they will now be relative to `src/`. + ctx.source = 'src/transformed.js'; + return transformedMap; + } + + console.assert(file === 'src/helloworld.js'); + // We could futher change the source of this original file, eg, to be inside a nested directory + // itself. This will be reflected in the remapped sourcemap. + ctx.source = 'src/nested/transformed.js'; + return null; + } +); + +console.log(remapped); +// { +// …, +// sources: ['src/nested/helloworld.js'], +// }; +``` + + +#### `content` + +The `content` property can be overridden when we encounter an original source file. Eg, this allows +you to manually provide the source content of the original file regardless of whether the +`sourcesContent` field is present in the parent sourcemap. It can also be set to `null` to remove +the source content. + +```js +const remapped = remapping( + minifiedTransformedMap, + (file, ctx) => { + + if (file === 'transformed.js') { + // transformedMap does not include a `sourcesContent` field, so usually the remapped sourcemap + // would not include any `sourcesContent` values. + return transformedMap; + } + + console.assert(file === 'helloworld.js'); + // We can read the file to provide the source content. + ctx.content = fs.readFileSync(file, 'utf8'); + return null; + } +); + +console.log(remapped); +// { +// …, +// sourcesContent: [ +// 'console.log("Hello world!")', +// ], +// }; +``` + +### Options + +#### excludeContent + +By default, `excludeContent` is `false`. Passing `{ excludeContent: true }` will exclude the +`sourcesContent` field from the returned sourcemap. This is mainly useful when you want to reduce +the size out the sourcemap. + +#### decodedMappings + +By default, `decodedMappings` is `false`. Passing `{ decodedMappings: true }` will leave the +`mappings` field in a [decoded state](https://github.com/rich-harris/sourcemap-codec) instead of +encoding into a VLQ string. diff --git a/node_modules/@jridgewell/remapping/dist/remapping.mjs b/node_modules/@jridgewell/remapping/dist/remapping.mjs new file mode 100644 index 0000000000..8b7009c049 --- /dev/null +++ b/node_modules/@jridgewell/remapping/dist/remapping.mjs @@ -0,0 +1,144 @@ +// src/build-source-map-tree.ts +import { TraceMap } from "@jridgewell/trace-mapping"; + +// src/source-map-tree.ts +import { GenMapping, maybeAddSegment, setIgnore, setSourceContent } from "@jridgewell/gen-mapping"; +import { traceSegment, decodedMappings } from "@jridgewell/trace-mapping"; +var SOURCELESS_MAPPING = /* @__PURE__ */ SegmentObject("", -1, -1, "", null, false); +var EMPTY_SOURCES = []; +function SegmentObject(source, line, column, name, content, ignore) { + return { source, line, column, name, content, ignore }; +} +function Source(map, sources, source, content, ignore) { + return { + map, + sources, + source, + content, + ignore + }; +} +function MapSource(map, sources) { + return Source(map, sources, "", null, false); +} +function OriginalSource(source, content, ignore) { + return Source(null, EMPTY_SOURCES, source, content, ignore); +} +function traceMappings(tree) { + const gen = new GenMapping({ file: tree.map.file }); + const { sources: rootSources, map } = tree; + const rootNames = map.names; + const rootMappings = decodedMappings(map); + for (let i = 0; i < rootMappings.length; i++) { + const segments = rootMappings[i]; + for (let j = 0; j < segments.length; j++) { + const segment = segments[j]; + const genCol = segment[0]; + let traced = SOURCELESS_MAPPING; + if (segment.length !== 1) { + const source2 = rootSources[segment[1]]; + traced = originalPositionFor( + source2, + segment[2], + segment[3], + segment.length === 5 ? rootNames[segment[4]] : "" + ); + if (traced == null) continue; + } + const { column, line, name, content, source, ignore } = traced; + maybeAddSegment(gen, i, genCol, source, line, column, name); + if (source && content != null) setSourceContent(gen, source, content); + if (ignore) setIgnore(gen, source, true); + } + } + return gen; +} +function originalPositionFor(source, line, column, name) { + if (!source.map) { + return SegmentObject(source.source, line, column, name, source.content, source.ignore); + } + const segment = traceSegment(source.map, line, column); + if (segment == null) return null; + if (segment.length === 1) return SOURCELESS_MAPPING; + return originalPositionFor( + source.sources[segment[1]], + segment[2], + segment[3], + segment.length === 5 ? source.map.names[segment[4]] : name + ); +} + +// src/build-source-map-tree.ts +function asArray(value) { + if (Array.isArray(value)) return value; + return [value]; +} +function buildSourceMapTree(input, loader) { + const maps = asArray(input).map((m) => new TraceMap(m, "")); + const map = maps.pop(); + for (let i = 0; i < maps.length; i++) { + if (maps[i].sources.length > 1) { + throw new Error( + `Transformation map ${i} must have exactly one source file. +Did you specify these with the most recent transformation maps first?` + ); + } + } + let tree = build(map, loader, "", 0); + for (let i = maps.length - 1; i >= 0; i--) { + tree = MapSource(maps[i], [tree]); + } + return tree; +} +function build(map, loader, importer, importerDepth) { + const { resolvedSources, sourcesContent, ignoreList } = map; + const depth = importerDepth + 1; + const children = resolvedSources.map((sourceFile, i) => { + const ctx = { + importer, + depth, + source: sourceFile || "", + content: void 0, + ignore: void 0 + }; + const sourceMap = loader(ctx.source, ctx); + const { source, content, ignore } = ctx; + if (sourceMap) return build(new TraceMap(sourceMap, source), loader, source, depth); + const sourceContent = content !== void 0 ? content : sourcesContent ? sourcesContent[i] : null; + const ignored = ignore !== void 0 ? ignore : ignoreList ? ignoreList.includes(i) : false; + return OriginalSource(source, sourceContent, ignored); + }); + return MapSource(map, children); +} + +// src/source-map.ts +import { toDecodedMap, toEncodedMap } from "@jridgewell/gen-mapping"; +var SourceMap = class { + constructor(map, options) { + const out = options.decodedMappings ? toDecodedMap(map) : toEncodedMap(map); + this.version = out.version; + this.file = out.file; + this.mappings = out.mappings; + this.names = out.names; + this.ignoreList = out.ignoreList; + this.sourceRoot = out.sourceRoot; + this.sources = out.sources; + if (!options.excludeContent) { + this.sourcesContent = out.sourcesContent; + } + } + toString() { + return JSON.stringify(this); + } +}; + +// src/remapping.ts +function remapping(input, loader, options) { + const opts = typeof options === "object" ? options : { excludeContent: !!options, decodedMappings: false }; + const tree = buildSourceMapTree(input, loader); + return new SourceMap(traceMappings(tree), opts); +} +export { + remapping as default +}; +//# sourceMappingURL=remapping.mjs.map diff --git a/node_modules/@jridgewell/remapping/dist/remapping.mjs.map b/node_modules/@jridgewell/remapping/dist/remapping.mjs.map new file mode 100644 index 0000000000..66801e6d1c --- /dev/null +++ b/node_modules/@jridgewell/remapping/dist/remapping.mjs.map @@ -0,0 +1,6 @@ +{ + "version": 3, + "sources": ["../src/build-source-map-tree.ts", "../src/source-map-tree.ts", "../src/source-map.ts", "../src/remapping.ts"], + "mappings": "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", + "names": ["source"] +} diff --git a/node_modules/@jridgewell/remapping/dist/remapping.umd.js b/node_modules/@jridgewell/remapping/dist/remapping.umd.js new file mode 100644 index 0000000000..077eb4d5dc --- /dev/null +++ b/node_modules/@jridgewell/remapping/dist/remapping.umd.js @@ -0,0 +1,212 @@ +(function (global, factory) { + if (typeof exports === 'object' && typeof module !== 'undefined') { + factory(module, require('@jridgewell/gen-mapping'), require('@jridgewell/trace-mapping')); + module.exports = def(module); + } else if (typeof define === 'function' && define.amd) { + define(['module', '@jridgewell/gen-mapping', '@jridgewell/trace-mapping'], function(mod) { + factory.apply(this, arguments); + mod.exports = def(mod); + }); + } else { + const mod = { exports: {} }; + factory(mod, global.genMapping, global.traceMapping); + global = typeof globalThis !== 'undefined' ? globalThis : global || self; + global.remapping = def(mod); + } + function def(m) { return 'default' in m.exports ? m.exports.default : m.exports; } +})(this, (function (module, require_genMapping, require_traceMapping) { +"use strict"; +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// umd:@jridgewell/trace-mapping +var require_trace_mapping = __commonJS({ + "umd:@jridgewell/trace-mapping"(exports, module2) { + module2.exports = require_traceMapping; + } +}); + +// umd:@jridgewell/gen-mapping +var require_gen_mapping = __commonJS({ + "umd:@jridgewell/gen-mapping"(exports, module2) { + module2.exports = require_genMapping; + } +}); + +// src/remapping.ts +var remapping_exports = {}; +__export(remapping_exports, { + default: () => remapping +}); +module.exports = __toCommonJS(remapping_exports); + +// src/build-source-map-tree.ts +var import_trace_mapping2 = __toESM(require_trace_mapping()); + +// src/source-map-tree.ts +var import_gen_mapping = __toESM(require_gen_mapping()); +var import_trace_mapping = __toESM(require_trace_mapping()); +var SOURCELESS_MAPPING = /* @__PURE__ */ SegmentObject("", -1, -1, "", null, false); +var EMPTY_SOURCES = []; +function SegmentObject(source, line, column, name, content, ignore) { + return { source, line, column, name, content, ignore }; +} +function Source(map, sources, source, content, ignore) { + return { + map, + sources, + source, + content, + ignore + }; +} +function MapSource(map, sources) { + return Source(map, sources, "", null, false); +} +function OriginalSource(source, content, ignore) { + return Source(null, EMPTY_SOURCES, source, content, ignore); +} +function traceMappings(tree) { + const gen = new import_gen_mapping.GenMapping({ file: tree.map.file }); + const { sources: rootSources, map } = tree; + const rootNames = map.names; + const rootMappings = (0, import_trace_mapping.decodedMappings)(map); + for (let i = 0; i < rootMappings.length; i++) { + const segments = rootMappings[i]; + for (let j = 0; j < segments.length; j++) { + const segment = segments[j]; + const genCol = segment[0]; + let traced = SOURCELESS_MAPPING; + if (segment.length !== 1) { + const source2 = rootSources[segment[1]]; + traced = originalPositionFor( + source2, + segment[2], + segment[3], + segment.length === 5 ? rootNames[segment[4]] : "" + ); + if (traced == null) continue; + } + const { column, line, name, content, source, ignore } = traced; + (0, import_gen_mapping.maybeAddSegment)(gen, i, genCol, source, line, column, name); + if (source && content != null) (0, import_gen_mapping.setSourceContent)(gen, source, content); + if (ignore) (0, import_gen_mapping.setIgnore)(gen, source, true); + } + } + return gen; +} +function originalPositionFor(source, line, column, name) { + if (!source.map) { + return SegmentObject(source.source, line, column, name, source.content, source.ignore); + } + const segment = (0, import_trace_mapping.traceSegment)(source.map, line, column); + if (segment == null) return null; + if (segment.length === 1) return SOURCELESS_MAPPING; + return originalPositionFor( + source.sources[segment[1]], + segment[2], + segment[3], + segment.length === 5 ? source.map.names[segment[4]] : name + ); +} + +// src/build-source-map-tree.ts +function asArray(value) { + if (Array.isArray(value)) return value; + return [value]; +} +function buildSourceMapTree(input, loader) { + const maps = asArray(input).map((m) => new import_trace_mapping2.TraceMap(m, "")); + const map = maps.pop(); + for (let i = 0; i < maps.length; i++) { + if (maps[i].sources.length > 1) { + throw new Error( + `Transformation map ${i} must have exactly one source file. +Did you specify these with the most recent transformation maps first?` + ); + } + } + let tree = build(map, loader, "", 0); + for (let i = maps.length - 1; i >= 0; i--) { + tree = MapSource(maps[i], [tree]); + } + return tree; +} +function build(map, loader, importer, importerDepth) { + const { resolvedSources, sourcesContent, ignoreList } = map; + const depth = importerDepth + 1; + const children = resolvedSources.map((sourceFile, i) => { + const ctx = { + importer, + depth, + source: sourceFile || "", + content: void 0, + ignore: void 0 + }; + const sourceMap = loader(ctx.source, ctx); + const { source, content, ignore } = ctx; + if (sourceMap) return build(new import_trace_mapping2.TraceMap(sourceMap, source), loader, source, depth); + const sourceContent = content !== void 0 ? content : sourcesContent ? sourcesContent[i] : null; + const ignored = ignore !== void 0 ? ignore : ignoreList ? ignoreList.includes(i) : false; + return OriginalSource(source, sourceContent, ignored); + }); + return MapSource(map, children); +} + +// src/source-map.ts +var import_gen_mapping2 = __toESM(require_gen_mapping()); +var SourceMap = class { + constructor(map, options) { + const out = options.decodedMappings ? (0, import_gen_mapping2.toDecodedMap)(map) : (0, import_gen_mapping2.toEncodedMap)(map); + this.version = out.version; + this.file = out.file; + this.mappings = out.mappings; + this.names = out.names; + this.ignoreList = out.ignoreList; + this.sourceRoot = out.sourceRoot; + this.sources = out.sources; + if (!options.excludeContent) { + this.sourcesContent = out.sourcesContent; + } + } + toString() { + return JSON.stringify(this); + } +}; + +// src/remapping.ts +function remapping(input, loader, options) { + const opts = typeof options === "object" ? options : { excludeContent: !!options, decodedMappings: false }; + const tree = buildSourceMapTree(input, loader); + return new SourceMap(traceMappings(tree), opts); +} +})); +//# sourceMappingURL=remapping.umd.js.map diff --git a/node_modules/@jridgewell/remapping/dist/remapping.umd.js.map b/node_modules/@jridgewell/remapping/dist/remapping.umd.js.map new file mode 100644 index 0000000000..d5e0786411 --- /dev/null +++ b/node_modules/@jridgewell/remapping/dist/remapping.umd.js.map @@ -0,0 +1,6 @@ +{ + "version": 3, + "sources": ["umd:@jridgewell/trace-mapping", "umd:@jridgewell/gen-mapping", "../src/remapping.ts", "../src/build-source-map-tree.ts", "../src/source-map-tree.ts", "../src/source-map.ts"], + "mappings": "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", + "names": ["module", "module", "import_trace_mapping", "source", "import_gen_mapping"] +} diff --git a/node_modules/@jridgewell/remapping/package.json b/node_modules/@jridgewell/remapping/package.json new file mode 100644 index 0000000000..ed00441ea5 --- /dev/null +++ b/node_modules/@jridgewell/remapping/package.json @@ -0,0 +1,71 @@ +{ + "name": "@jridgewell/remapping", + "version": "2.3.5", + "description": "Remap sequential sourcemaps through transformations to point at the original source code", + "keywords": [ + "source", + "map", + "remap" + ], + "main": "dist/remapping.umd.js", + "module": "dist/remapping.mjs", + "types": "types/remapping.d.cts", + "files": [ + "dist", + "src", + "types" + ], + "exports": { + ".": [ + { + "import": { + "types": "./types/remapping.d.mts", + "default": "./dist/remapping.mjs" + }, + "default": { + "types": "./types/remapping.d.cts", + "default": "./dist/remapping.umd.js" + } + }, + "./dist/remapping.umd.js" + ], + "./package.json": "./package.json" + }, + "scripts": { + "benchmark": "run-s build:code benchmark:*", + "benchmark:install": "cd benchmark && npm install", + "benchmark:only": "node --expose-gc benchmark/index.js", + "build": "run-s -n build:code build:types", + "build:code": "node ../../esbuild.mjs remapping.ts", + "build:types": "run-s build:types:force build:types:emit build:types:mts", + "build:types:force": "rimraf tsconfig.build.tsbuildinfo", + "build:types:emit": "tsc --project tsconfig.build.json", + "build:types:mts": "node ../../mts-types.mjs", + "clean": "run-s -n clean:code clean:types", + "clean:code": "tsc --build --clean tsconfig.build.json", + "clean:types": "rimraf dist types", + "test": "run-s -n test:types test:only test:format", + "test:format": "prettier --check '{src,test}/**/*.ts'", + "test:only": "mocha", + "test:types": "eslint '{src,test}/**/*.ts'", + "lint": "run-s -n lint:types lint:format", + "lint:format": "npm run test:format -- --write", + "lint:types": "npm run test:types -- --fix", + "prepublishOnly": "npm run-s -n build test" + }, + "homepage": "https://github.com/jridgewell/sourcemaps/tree/main/packages/remapping", + "repository": { + "type": "git", + "url": "git+https://github.com/jridgewell/sourcemaps.git", + "directory": "packages/remapping" + }, + "author": "Justin Ridgewell ", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "devDependencies": { + "source-map": "0.6.1" + } +} diff --git a/node_modules/@jridgewell/remapping/src/build-source-map-tree.ts b/node_modules/@jridgewell/remapping/src/build-source-map-tree.ts new file mode 100644 index 0000000000..3e0262bd7c --- /dev/null +++ b/node_modules/@jridgewell/remapping/src/build-source-map-tree.ts @@ -0,0 +1,89 @@ +import { TraceMap } from '@jridgewell/trace-mapping'; + +import { OriginalSource, MapSource } from './source-map-tree'; + +import type { Sources, MapSource as MapSourceType } from './source-map-tree'; +import type { SourceMapInput, SourceMapLoader, LoaderContext } from './types'; + +function asArray(value: T | T[]): T[] { + if (Array.isArray(value)) return value; + return [value]; +} + +/** + * Recursively builds a tree structure out of sourcemap files, with each node + * being either an `OriginalSource` "leaf" or a `SourceMapTree` composed of + * `OriginalSource`s and `SourceMapTree`s. + * + * Every sourcemap is composed of a collection of source files and mappings + * into locations of those source files. When we generate a `SourceMapTree` for + * the sourcemap, we attempt to load each source file's own sourcemap. If it + * does not have an associated sourcemap, it is considered an original, + * unmodified source file. + */ +export default function buildSourceMapTree( + input: SourceMapInput | SourceMapInput[], + loader: SourceMapLoader, +): MapSourceType { + const maps = asArray(input).map((m) => new TraceMap(m, '')); + const map = maps.pop()!; + + for (let i = 0; i < maps.length; i++) { + if (maps[i].sources.length > 1) { + throw new Error( + `Transformation map ${i} must have exactly one source file.\n` + + 'Did you specify these with the most recent transformation maps first?', + ); + } + } + + let tree = build(map, loader, '', 0); + for (let i = maps.length - 1; i >= 0; i--) { + tree = MapSource(maps[i], [tree]); + } + return tree; +} + +function build( + map: TraceMap, + loader: SourceMapLoader, + importer: string, + importerDepth: number, +): MapSourceType { + const { resolvedSources, sourcesContent, ignoreList } = map; + + const depth = importerDepth + 1; + const children = resolvedSources.map((sourceFile: string | null, i: number): Sources => { + // The loading context gives the loader more information about why this file is being loaded + // (eg, from which importer). It also allows the loader to override the location of the loaded + // sourcemap/original source, or to override the content in the sourcesContent field if it's + // an unmodified source file. + const ctx: LoaderContext = { + importer, + depth, + source: sourceFile || '', + content: undefined, + ignore: undefined, + }; + + // Use the provided loader callback to retrieve the file's sourcemap. + // TODO: We should eventually support async loading of sourcemap files. + const sourceMap = loader(ctx.source, ctx); + + const { source, content, ignore } = ctx; + + // If there is a sourcemap, then we need to recurse into it to load its source files. + if (sourceMap) return build(new TraceMap(sourceMap, source), loader, source, depth); + + // Else, it's an unmodified source file. + // The contents of this unmodified source file can be overridden via the loader context, + // allowing it to be explicitly null or a string. If it remains undefined, we fall back to + // the importing sourcemap's `sourcesContent` field. + const sourceContent = + content !== undefined ? content : sourcesContent ? sourcesContent[i] : null; + const ignored = ignore !== undefined ? ignore : ignoreList ? ignoreList.includes(i) : false; + return OriginalSource(source, sourceContent, ignored); + }); + + return MapSource(map, children); +} diff --git a/node_modules/@jridgewell/remapping/src/remapping.ts b/node_modules/@jridgewell/remapping/src/remapping.ts new file mode 100644 index 0000000000..c0f8b0ded2 --- /dev/null +++ b/node_modules/@jridgewell/remapping/src/remapping.ts @@ -0,0 +1,42 @@ +import buildSourceMapTree from './build-source-map-tree'; +import { traceMappings } from './source-map-tree'; +import SourceMap from './source-map'; + +import type { SourceMapInput, SourceMapLoader, Options } from './types'; +export type { + SourceMapSegment, + EncodedSourceMap, + EncodedSourceMap as RawSourceMap, + DecodedSourceMap, + SourceMapInput, + SourceMapLoader, + LoaderContext, + Options, +} from './types'; +export type { SourceMap }; + +/** + * Traces through all the mappings in the root sourcemap, through the sources + * (and their sourcemaps), all the way back to the original source location. + * + * `loader` will be called every time we encounter a source file. If it returns + * a sourcemap, we will recurse into that sourcemap to continue the trace. If + * it returns a falsey value, that source file is treated as an original, + * unmodified source file. + * + * Pass `excludeContent` to exclude any self-containing source file content + * from the output sourcemap. + * + * Pass `decodedMappings` to receive a SourceMap with decoded (instead of + * VLQ encoded) mappings. + */ +export default function remapping( + input: SourceMapInput | SourceMapInput[], + loader: SourceMapLoader, + options?: boolean | Options, +): SourceMap { + const opts = + typeof options === 'object' ? options : { excludeContent: !!options, decodedMappings: false }; + const tree = buildSourceMapTree(input, loader); + return new SourceMap(traceMappings(tree), opts); +} diff --git a/node_modules/@jridgewell/remapping/src/source-map-tree.ts b/node_modules/@jridgewell/remapping/src/source-map-tree.ts new file mode 100644 index 0000000000..935240f913 --- /dev/null +++ b/node_modules/@jridgewell/remapping/src/source-map-tree.ts @@ -0,0 +1,172 @@ +import { GenMapping, maybeAddSegment, setIgnore, setSourceContent } from '@jridgewell/gen-mapping'; +import { traceSegment, decodedMappings } from '@jridgewell/trace-mapping'; + +import type { TraceMap } from '@jridgewell/trace-mapping'; + +export type SourceMapSegmentObject = { + column: number; + line: number; + name: string; + source: string; + content: string | null; + ignore: boolean; +}; + +export type OriginalSource = { + map: null; + sources: Sources[]; + source: string; + content: string | null; + ignore: boolean; +}; + +export type MapSource = { + map: TraceMap; + sources: Sources[]; + source: string; + content: null; + ignore: false; +}; + +export type Sources = OriginalSource | MapSource; + +const SOURCELESS_MAPPING = /* #__PURE__ */ SegmentObject('', -1, -1, '', null, false); +const EMPTY_SOURCES: Sources[] = []; + +function SegmentObject( + source: string, + line: number, + column: number, + name: string, + content: string | null, + ignore: boolean, +): SourceMapSegmentObject { + return { source, line, column, name, content, ignore }; +} + +function Source( + map: TraceMap, + sources: Sources[], + source: '', + content: null, + ignore: false, +): MapSource; +function Source( + map: null, + sources: Sources[], + source: string, + content: string | null, + ignore: boolean, +): OriginalSource; +function Source( + map: TraceMap | null, + sources: Sources[], + source: string | '', + content: string | null, + ignore: boolean, +): Sources { + return { + map, + sources, + source, + content, + ignore, + } as any; +} + +/** + * MapSource represents a single sourcemap, with the ability to trace mappings into its child nodes + * (which may themselves be SourceMapTrees). + */ +export function MapSource(map: TraceMap, sources: Sources[]): MapSource { + return Source(map, sources, '', null, false); +} + +/** + * A "leaf" node in the sourcemap tree, representing an original, unmodified source file. Recursive + * segment tracing ends at the `OriginalSource`. + */ +export function OriginalSource( + source: string, + content: string | null, + ignore: boolean, +): OriginalSource { + return Source(null, EMPTY_SOURCES, source, content, ignore); +} + +/** + * traceMappings is only called on the root level SourceMapTree, and begins the process of + * resolving each mapping in terms of the original source files. + */ +export function traceMappings(tree: MapSource): GenMapping { + // TODO: Eventually support sourceRoot, which has to be removed because the sources are already + // fully resolved. We'll need to make sources relative to the sourceRoot before adding them. + const gen = new GenMapping({ file: tree.map.file }); + const { sources: rootSources, map } = tree; + const rootNames = map.names; + const rootMappings = decodedMappings(map); + + for (let i = 0; i < rootMappings.length; i++) { + const segments = rootMappings[i]; + + for (let j = 0; j < segments.length; j++) { + const segment = segments[j]; + const genCol = segment[0]; + let traced: SourceMapSegmentObject | null = SOURCELESS_MAPPING; + + // 1-length segments only move the current generated column, there's no source information + // to gather from it. + if (segment.length !== 1) { + const source = rootSources[segment[1]]; + traced = originalPositionFor( + source, + segment[2], + segment[3], + segment.length === 5 ? rootNames[segment[4]] : '', + ); + + // If the trace is invalid, then the trace ran into a sourcemap that doesn't contain a + // respective segment into an original source. + if (traced == null) continue; + } + + const { column, line, name, content, source, ignore } = traced; + + maybeAddSegment(gen, i, genCol, source, line, column, name); + if (source && content != null) setSourceContent(gen, source, content); + if (ignore) setIgnore(gen, source, true); + } + } + + return gen; +} + +/** + * originalPositionFor is only called on children SourceMapTrees. It recurses down into its own + * child SourceMapTrees, until we find the original source map. + */ +export function originalPositionFor( + source: Sources, + line: number, + column: number, + name: string, +): SourceMapSegmentObject | null { + if (!source.map) { + return SegmentObject(source.source, line, column, name, source.content, source.ignore); + } + + const segment = traceSegment(source.map, line, column); + + // If we couldn't find a segment, then this doesn't exist in the sourcemap. + if (segment == null) return null; + // 1-length segments only move the current generated column, there's no source information + // to gather from it. + if (segment.length === 1) return SOURCELESS_MAPPING; + + return originalPositionFor( + source.sources[segment[1]], + segment[2], + segment[3], + segment.length === 5 ? source.map.names[segment[4]] : name, + ); +} diff --git a/node_modules/@jridgewell/remapping/src/source-map.ts b/node_modules/@jridgewell/remapping/src/source-map.ts new file mode 100644 index 0000000000..5156086f21 --- /dev/null +++ b/node_modules/@jridgewell/remapping/src/source-map.ts @@ -0,0 +1,38 @@ +import { toDecodedMap, toEncodedMap } from '@jridgewell/gen-mapping'; + +import type { GenMapping } from '@jridgewell/gen-mapping'; +import type { DecodedSourceMap, EncodedSourceMap, Options } from './types'; + +/** + * A SourceMap v3 compatible sourcemap, which only includes fields that were + * provided to it. + */ +export default class SourceMap { + declare file?: string | null; + declare mappings: EncodedSourceMap['mappings'] | DecodedSourceMap['mappings']; + declare sourceRoot?: string; + declare names: string[]; + declare sources: (string | null)[]; + declare sourcesContent?: (string | null)[]; + declare version: 3; + declare ignoreList: number[] | undefined; + + constructor(map: GenMapping, options: Options) { + const out = options.decodedMappings ? toDecodedMap(map) : toEncodedMap(map); + this.version = out.version; // SourceMap spec says this should be first. + this.file = out.file; + this.mappings = out.mappings as SourceMap['mappings']; + this.names = out.names as SourceMap['names']; + this.ignoreList = out.ignoreList as SourceMap['ignoreList']; + this.sourceRoot = out.sourceRoot; + + this.sources = out.sources as SourceMap['sources']; + if (!options.excludeContent) { + this.sourcesContent = out.sourcesContent as SourceMap['sourcesContent']; + } + } + + toString(): string { + return JSON.stringify(this); + } +} diff --git a/node_modules/@jridgewell/remapping/src/types.ts b/node_modules/@jridgewell/remapping/src/types.ts new file mode 100644 index 0000000000..384961d20d --- /dev/null +++ b/node_modules/@jridgewell/remapping/src/types.ts @@ -0,0 +1,27 @@ +import type { SourceMapInput } from '@jridgewell/trace-mapping'; + +export type { + SourceMapSegment, + DecodedSourceMap, + EncodedSourceMap, +} from '@jridgewell/trace-mapping'; + +export type { SourceMapInput }; + +export type LoaderContext = { + readonly importer: string; + readonly depth: number; + source: string; + content: string | null | undefined; + ignore: boolean | undefined; +}; + +export type SourceMapLoader = ( + file: string, + ctx: LoaderContext, +) => SourceMapInput | null | undefined | void; + +export type Options = { + excludeContent?: boolean; + decodedMappings?: boolean; +}; diff --git a/node_modules/@jridgewell/remapping/types/build-source-map-tree.d.cts b/node_modules/@jridgewell/remapping/types/build-source-map-tree.d.cts new file mode 100644 index 0000000000..e089aeaab3 --- /dev/null +++ b/node_modules/@jridgewell/remapping/types/build-source-map-tree.d.cts @@ -0,0 +1,15 @@ +import type { MapSource as MapSourceType } from './source-map-tree.cts'; +import type { SourceMapInput, SourceMapLoader } from './types.cts'; +/** + * Recursively builds a tree structure out of sourcemap files, with each node + * being either an `OriginalSource` "leaf" or a `SourceMapTree` composed of + * `OriginalSource`s and `SourceMapTree`s. + * + * Every sourcemap is composed of a collection of source files and mappings + * into locations of those source files. When we generate a `SourceMapTree` for + * the sourcemap, we attempt to load each source file's own sourcemap. If it + * does not have an associated sourcemap, it is considered an original, + * unmodified source file. + */ +export = function buildSourceMapTree(input: SourceMapInput | SourceMapInput[], loader: SourceMapLoader): MapSourceType; +//# sourceMappingURL=build-source-map-tree.d.ts.map \ No newline at end of file diff --git a/node_modules/@jridgewell/remapping/types/build-source-map-tree.d.cts.map b/node_modules/@jridgewell/remapping/types/build-source-map-tree.d.cts.map new file mode 100644 index 0000000000..38e4290dbe --- /dev/null +++ b/node_modules/@jridgewell/remapping/types/build-source-map-tree.d.cts.map @@ -0,0 +1 @@ +{"version":3,"file":"build-source-map-tree.d.ts","sourceRoot":"","sources":["../src/build-source-map-tree.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAW,SAAS,IAAI,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAiB,MAAM,SAAS,CAAC;AAO9E;;;;;;;;;;GAUG;AACH,MAAM,CAAC,OAAO,UAAU,kBAAkB,CACxC,KAAK,EAAE,cAAc,GAAG,cAAc,EAAE,EACxC,MAAM,EAAE,eAAe,GACtB,aAAa,CAkBf"} \ No newline at end of file diff --git a/node_modules/@jridgewell/remapping/types/build-source-map-tree.d.mts b/node_modules/@jridgewell/remapping/types/build-source-map-tree.d.mts new file mode 100644 index 0000000000..746ac5f730 --- /dev/null +++ b/node_modules/@jridgewell/remapping/types/build-source-map-tree.d.mts @@ -0,0 +1,15 @@ +import type { MapSource as MapSourceType } from './source-map-tree.mts'; +import type { SourceMapInput, SourceMapLoader } from './types.mts'; +/** + * Recursively builds a tree structure out of sourcemap files, with each node + * being either an `OriginalSource` "leaf" or a `SourceMapTree` composed of + * `OriginalSource`s and `SourceMapTree`s. + * + * Every sourcemap is composed of a collection of source files and mappings + * into locations of those source files. When we generate a `SourceMapTree` for + * the sourcemap, we attempt to load each source file's own sourcemap. If it + * does not have an associated sourcemap, it is considered an original, + * unmodified source file. + */ +export default function buildSourceMapTree(input: SourceMapInput | SourceMapInput[], loader: SourceMapLoader): MapSourceType; +//# sourceMappingURL=build-source-map-tree.d.ts.map \ No newline at end of file diff --git a/node_modules/@jridgewell/remapping/types/build-source-map-tree.d.mts.map b/node_modules/@jridgewell/remapping/types/build-source-map-tree.d.mts.map new file mode 100644 index 0000000000..38e4290dbe --- /dev/null +++ b/node_modules/@jridgewell/remapping/types/build-source-map-tree.d.mts.map @@ -0,0 +1 @@ +{"version":3,"file":"build-source-map-tree.d.ts","sourceRoot":"","sources":["../src/build-source-map-tree.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAW,SAAS,IAAI,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAiB,MAAM,SAAS,CAAC;AAO9E;;;;;;;;;;GAUG;AACH,MAAM,CAAC,OAAO,UAAU,kBAAkB,CACxC,KAAK,EAAE,cAAc,GAAG,cAAc,EAAE,EACxC,MAAM,EAAE,eAAe,GACtB,aAAa,CAkBf"} \ No newline at end of file diff --git a/node_modules/@jridgewell/remapping/types/remapping.d.cts b/node_modules/@jridgewell/remapping/types/remapping.d.cts new file mode 100644 index 0000000000..2022784752 --- /dev/null +++ b/node_modules/@jridgewell/remapping/types/remapping.d.cts @@ -0,0 +1,21 @@ +import SourceMap from './source-map.cts'; +import type { SourceMapInput, SourceMapLoader, Options } from './types.cts'; +export type { SourceMapSegment, EncodedSourceMap, EncodedSourceMap as RawSourceMap, DecodedSourceMap, SourceMapInput, SourceMapLoader, LoaderContext, Options, } from './types.cts'; +export type { SourceMap }; +/** + * Traces through all the mappings in the root sourcemap, through the sources + * (and their sourcemaps), all the way back to the original source location. + * + * `loader` will be called every time we encounter a source file. If it returns + * a sourcemap, we will recurse into that sourcemap to continue the trace. If + * it returns a falsey value, that source file is treated as an original, + * unmodified source file. + * + * Pass `excludeContent` to exclude any self-containing source file content + * from the output sourcemap. + * + * Pass `decodedMappings` to receive a SourceMap with decoded (instead of + * VLQ encoded) mappings. + */ +export = function remapping(input: SourceMapInput | SourceMapInput[], loader: SourceMapLoader, options?: boolean | Options): SourceMap; +//# sourceMappingURL=remapping.d.ts.map \ No newline at end of file diff --git a/node_modules/@jridgewell/remapping/types/remapping.d.cts.map b/node_modules/@jridgewell/remapping/types/remapping.d.cts.map new file mode 100644 index 0000000000..9f2fd0efd6 --- /dev/null +++ b/node_modules/@jridgewell/remapping/types/remapping.d.cts.map @@ -0,0 +1 @@ +{"version":3,"file":"remapping.d.ts","sourceRoot":"","sources":["../src/remapping.ts"],"names":[],"mappings":"AAEA,OAAO,SAAS,MAAM,cAAc,CAAC;AAErC,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACxE,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,IAAI,YAAY,EAChC,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,aAAa,EACb,OAAO,GACR,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,SAAS,EAAE,CAAC;AAE1B;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAC/B,KAAK,EAAE,cAAc,GAAG,cAAc,EAAE,EACxC,MAAM,EAAE,eAAe,EACvB,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,GAC1B,SAAS,CAKX"} \ No newline at end of file diff --git a/node_modules/@jridgewell/remapping/types/remapping.d.mts b/node_modules/@jridgewell/remapping/types/remapping.d.mts new file mode 100644 index 0000000000..95c4066987 --- /dev/null +++ b/node_modules/@jridgewell/remapping/types/remapping.d.mts @@ -0,0 +1,21 @@ +import SourceMap from './source-map.mts'; +import type { SourceMapInput, SourceMapLoader, Options } from './types.mts'; +export type { SourceMapSegment, EncodedSourceMap, EncodedSourceMap as RawSourceMap, DecodedSourceMap, SourceMapInput, SourceMapLoader, LoaderContext, Options, } from './types.mts'; +export type { SourceMap }; +/** + * Traces through all the mappings in the root sourcemap, through the sources + * (and their sourcemaps), all the way back to the original source location. + * + * `loader` will be called every time we encounter a source file. If it returns + * a sourcemap, we will recurse into that sourcemap to continue the trace. If + * it returns a falsey value, that source file is treated as an original, + * unmodified source file. + * + * Pass `excludeContent` to exclude any self-containing source file content + * from the output sourcemap. + * + * Pass `decodedMappings` to receive a SourceMap with decoded (instead of + * VLQ encoded) mappings. + */ +export default function remapping(input: SourceMapInput | SourceMapInput[], loader: SourceMapLoader, options?: boolean | Options): SourceMap; +//# sourceMappingURL=remapping.d.ts.map \ No newline at end of file diff --git a/node_modules/@jridgewell/remapping/types/remapping.d.mts.map b/node_modules/@jridgewell/remapping/types/remapping.d.mts.map new file mode 100644 index 0000000000..9f2fd0efd6 --- /dev/null +++ b/node_modules/@jridgewell/remapping/types/remapping.d.mts.map @@ -0,0 +1 @@ +{"version":3,"file":"remapping.d.ts","sourceRoot":"","sources":["../src/remapping.ts"],"names":[],"mappings":"AAEA,OAAO,SAAS,MAAM,cAAc,CAAC;AAErC,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACxE,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,IAAI,YAAY,EAChC,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,aAAa,EACb,OAAO,GACR,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,SAAS,EAAE,CAAC;AAE1B;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAC/B,KAAK,EAAE,cAAc,GAAG,cAAc,EAAE,EACxC,MAAM,EAAE,eAAe,EACvB,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,GAC1B,SAAS,CAKX"} \ No newline at end of file diff --git a/node_modules/@jridgewell/remapping/types/source-map-tree.d.cts b/node_modules/@jridgewell/remapping/types/source-map-tree.d.cts new file mode 100644 index 0000000000..440f65b8c2 --- /dev/null +++ b/node_modules/@jridgewell/remapping/types/source-map-tree.d.cts @@ -0,0 +1,46 @@ +import { GenMapping } from '@jridgewell/gen-mapping'; +import type { TraceMap } from '@jridgewell/trace-mapping'; +export type SourceMapSegmentObject = { + column: number; + line: number; + name: string; + source: string; + content: string | null; + ignore: boolean; +}; +export type OriginalSource = { + map: null; + sources: Sources[]; + source: string; + content: string | null; + ignore: boolean; +}; +export type MapSource = { + map: TraceMap; + sources: Sources[]; + source: string; + content: null; + ignore: false; +}; +export type Sources = OriginalSource | MapSource; +/** + * MapSource represents a single sourcemap, with the ability to trace mappings into its child nodes + * (which may themselves be SourceMapTrees). + */ +export declare function MapSource(map: TraceMap, sources: Sources[]): MapSource; +/** + * A "leaf" node in the sourcemap tree, representing an original, unmodified source file. Recursive + * segment tracing ends at the `OriginalSource`. + */ +export declare function OriginalSource(source: string, content: string | null, ignore: boolean): OriginalSource; +/** + * traceMappings is only called on the root level SourceMapTree, and begins the process of + * resolving each mapping in terms of the original source files. + */ +export declare function traceMappings(tree: MapSource): GenMapping; +/** + * originalPositionFor is only called on children SourceMapTrees. It recurses down into its own + * child SourceMapTrees, until we find the original source map. + */ +export declare function originalPositionFor(source: Sources, line: number, column: number, name: string): SourceMapSegmentObject | null; +//# sourceMappingURL=source-map-tree.d.ts.map \ No newline at end of file diff --git a/node_modules/@jridgewell/remapping/types/source-map-tree.d.cts.map b/node_modules/@jridgewell/remapping/types/source-map-tree.d.cts.map new file mode 100644 index 0000000000..e7cbfb9563 --- /dev/null +++ b/node_modules/@jridgewell/remapping/types/source-map-tree.d.cts.map @@ -0,0 +1 @@ +{"version":3,"file":"source-map-tree.d.ts","sourceRoot":"","sources":["../src/source-map-tree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAgD,MAAM,yBAAyB,CAAC;AAGnG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAE1D,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,GAAG,EAAE,IAAI,CAAC;IACV,OAAO,EAAE,OAAO,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,GAAG,EAAE,QAAQ,CAAC;IACd,OAAO,EAAE,OAAO,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,IAAI,CAAC;IACd,MAAM,EAAE,KAAK,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG,cAAc,GAAG,SAAS,CAAC;AA8CjD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,SAAS,CAEtE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,MAAM,EAAE,OAAO,GACd,cAAc,CAEhB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG,UAAU,CAyCzD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,OAAO,EACf,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACX,sBAAsB,GAAG,IAAI,CAmB/B"} \ No newline at end of file diff --git a/node_modules/@jridgewell/remapping/types/source-map-tree.d.mts b/node_modules/@jridgewell/remapping/types/source-map-tree.d.mts new file mode 100644 index 0000000000..440f65b8c2 --- /dev/null +++ b/node_modules/@jridgewell/remapping/types/source-map-tree.d.mts @@ -0,0 +1,46 @@ +import { GenMapping } from '@jridgewell/gen-mapping'; +import type { TraceMap } from '@jridgewell/trace-mapping'; +export type SourceMapSegmentObject = { + column: number; + line: number; + name: string; + source: string; + content: string | null; + ignore: boolean; +}; +export type OriginalSource = { + map: null; + sources: Sources[]; + source: string; + content: string | null; + ignore: boolean; +}; +export type MapSource = { + map: TraceMap; + sources: Sources[]; + source: string; + content: null; + ignore: false; +}; +export type Sources = OriginalSource | MapSource; +/** + * MapSource represents a single sourcemap, with the ability to trace mappings into its child nodes + * (which may themselves be SourceMapTrees). + */ +export declare function MapSource(map: TraceMap, sources: Sources[]): MapSource; +/** + * A "leaf" node in the sourcemap tree, representing an original, unmodified source file. Recursive + * segment tracing ends at the `OriginalSource`. + */ +export declare function OriginalSource(source: string, content: string | null, ignore: boolean): OriginalSource; +/** + * traceMappings is only called on the root level SourceMapTree, and begins the process of + * resolving each mapping in terms of the original source files. + */ +export declare function traceMappings(tree: MapSource): GenMapping; +/** + * originalPositionFor is only called on children SourceMapTrees. It recurses down into its own + * child SourceMapTrees, until we find the original source map. + */ +export declare function originalPositionFor(source: Sources, line: number, column: number, name: string): SourceMapSegmentObject | null; +//# sourceMappingURL=source-map-tree.d.ts.map \ No newline at end of file diff --git a/node_modules/@jridgewell/remapping/types/source-map-tree.d.mts.map b/node_modules/@jridgewell/remapping/types/source-map-tree.d.mts.map new file mode 100644 index 0000000000..e7cbfb9563 --- /dev/null +++ b/node_modules/@jridgewell/remapping/types/source-map-tree.d.mts.map @@ -0,0 +1 @@ +{"version":3,"file":"source-map-tree.d.ts","sourceRoot":"","sources":["../src/source-map-tree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAgD,MAAM,yBAAyB,CAAC;AAGnG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAE1D,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,GAAG,EAAE,IAAI,CAAC;IACV,OAAO,EAAE,OAAO,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,GAAG,EAAE,QAAQ,CAAC;IACd,OAAO,EAAE,OAAO,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,IAAI,CAAC;IACd,MAAM,EAAE,KAAK,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG,cAAc,GAAG,SAAS,CAAC;AA8CjD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,SAAS,CAEtE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,MAAM,EAAE,OAAO,GACd,cAAc,CAEhB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG,UAAU,CAyCzD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,OAAO,EACf,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACX,sBAAsB,GAAG,IAAI,CAmB/B"} \ No newline at end of file diff --git a/node_modules/@jridgewell/remapping/types/source-map.d.cts b/node_modules/@jridgewell/remapping/types/source-map.d.cts new file mode 100644 index 0000000000..fdb7eedeb3 --- /dev/null +++ b/node_modules/@jridgewell/remapping/types/source-map.d.cts @@ -0,0 +1,19 @@ +import type { GenMapping } from '@jridgewell/gen-mapping'; +import type { DecodedSourceMap, EncodedSourceMap, Options } from './types.cts'; +/** + * A SourceMap v3 compatible sourcemap, which only includes fields that were + * provided to it. + */ +export = class SourceMap { + file?: string | null; + mappings: EncodedSourceMap['mappings'] | DecodedSourceMap['mappings']; + sourceRoot?: string; + names: string[]; + sources: (string | null)[]; + sourcesContent?: (string | null)[]; + version: 3; + ignoreList: number[] | undefined; + constructor(map: GenMapping, options: Options); + toString(): string; +} +//# sourceMappingURL=source-map.d.ts.map \ No newline at end of file diff --git a/node_modules/@jridgewell/remapping/types/source-map.d.cts.map b/node_modules/@jridgewell/remapping/types/source-map.d.cts.map new file mode 100644 index 0000000000..593daf8e0a --- /dev/null +++ b/node_modules/@jridgewell/remapping/types/source-map.d.cts.map @@ -0,0 +1 @@ +{"version":3,"file":"source-map.d.ts","sourceRoot":"","sources":["../src/source-map.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAE3E;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,SAAS;IACpB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,gBAAgB,CAAC,UAAU,CAAC,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACtE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;IAC3B,cAAc,CAAC,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;IACnC,OAAO,EAAE,CAAC,CAAC;IACX,UAAU,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;gBAE7B,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO;IAe7C,QAAQ,IAAI,MAAM;CAGnB"} \ No newline at end of file diff --git a/node_modules/@jridgewell/remapping/types/source-map.d.mts b/node_modules/@jridgewell/remapping/types/source-map.d.mts new file mode 100644 index 0000000000..52ebba2f72 --- /dev/null +++ b/node_modules/@jridgewell/remapping/types/source-map.d.mts @@ -0,0 +1,19 @@ +import type { GenMapping } from '@jridgewell/gen-mapping'; +import type { DecodedSourceMap, EncodedSourceMap, Options } from './types.mts'; +/** + * A SourceMap v3 compatible sourcemap, which only includes fields that were + * provided to it. + */ +export default class SourceMap { + file?: string | null; + mappings: EncodedSourceMap['mappings'] | DecodedSourceMap['mappings']; + sourceRoot?: string; + names: string[]; + sources: (string | null)[]; + sourcesContent?: (string | null)[]; + version: 3; + ignoreList: number[] | undefined; + constructor(map: GenMapping, options: Options); + toString(): string; +} +//# sourceMappingURL=source-map.d.ts.map \ No newline at end of file diff --git a/node_modules/@jridgewell/remapping/types/source-map.d.mts.map b/node_modules/@jridgewell/remapping/types/source-map.d.mts.map new file mode 100644 index 0000000000..593daf8e0a --- /dev/null +++ b/node_modules/@jridgewell/remapping/types/source-map.d.mts.map @@ -0,0 +1 @@ +{"version":3,"file":"source-map.d.ts","sourceRoot":"","sources":["../src/source-map.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAE3E;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,SAAS;IACpB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,gBAAgB,CAAC,UAAU,CAAC,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACtE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;IAC3B,cAAc,CAAC,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;IACnC,OAAO,EAAE,CAAC,CAAC;IACX,UAAU,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;gBAE7B,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO;IAe7C,QAAQ,IAAI,MAAM;CAGnB"} \ No newline at end of file diff --git a/node_modules/@jridgewell/remapping/types/types.d.cts b/node_modules/@jridgewell/remapping/types/types.d.cts new file mode 100644 index 0000000000..eeb320f847 --- /dev/null +++ b/node_modules/@jridgewell/remapping/types/types.d.cts @@ -0,0 +1,16 @@ +import type { SourceMapInput } from '@jridgewell/trace-mapping'; +export type { SourceMapSegment, DecodedSourceMap, EncodedSourceMap, } from '@jridgewell/trace-mapping'; +export type { SourceMapInput }; +export type LoaderContext = { + readonly importer: string; + readonly depth: number; + source: string; + content: string | null | undefined; + ignore: boolean | undefined; +}; +export type SourceMapLoader = (file: string, ctx: LoaderContext) => SourceMapInput | null | undefined | void; +export type Options = { + excludeContent?: boolean; + decodedMappings?: boolean; +}; +//# sourceMappingURL=types.d.ts.map \ No newline at end of file diff --git a/node_modules/@jridgewell/remapping/types/types.d.cts.map b/node_modules/@jridgewell/remapping/types/types.d.cts.map new file mode 100644 index 0000000000..4f8647e4c9 --- /dev/null +++ b/node_modules/@jridgewell/remapping/types/types.d.cts.map @@ -0,0 +1 @@ +{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAEhE,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,2BAA2B,CAAC;AAEnC,YAAY,EAAE,cAAc,EAAE,CAAC;AAE/B,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACnC,MAAM,EAAE,OAAO,GAAG,SAAS,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,CAC5B,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,aAAa,KACf,cAAc,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CAAC;AAE9C,MAAM,MAAM,OAAO,GAAG;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC"} \ No newline at end of file diff --git a/node_modules/@jridgewell/remapping/types/types.d.mts b/node_modules/@jridgewell/remapping/types/types.d.mts new file mode 100644 index 0000000000..eeb320f847 --- /dev/null +++ b/node_modules/@jridgewell/remapping/types/types.d.mts @@ -0,0 +1,16 @@ +import type { SourceMapInput } from '@jridgewell/trace-mapping'; +export type { SourceMapSegment, DecodedSourceMap, EncodedSourceMap, } from '@jridgewell/trace-mapping'; +export type { SourceMapInput }; +export type LoaderContext = { + readonly importer: string; + readonly depth: number; + source: string; + content: string | null | undefined; + ignore: boolean | undefined; +}; +export type SourceMapLoader = (file: string, ctx: LoaderContext) => SourceMapInput | null | undefined | void; +export type Options = { + excludeContent?: boolean; + decodedMappings?: boolean; +}; +//# sourceMappingURL=types.d.ts.map \ No newline at end of file diff --git a/node_modules/@jridgewell/remapping/types/types.d.mts.map b/node_modules/@jridgewell/remapping/types/types.d.mts.map new file mode 100644 index 0000000000..4f8647e4c9 --- /dev/null +++ b/node_modules/@jridgewell/remapping/types/types.d.mts.map @@ -0,0 +1 @@ +{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAEhE,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,2BAA2B,CAAC;AAEnC,YAAY,EAAE,cAAc,EAAE,CAAC;AAE/B,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACnC,MAAM,EAAE,OAAO,GAAG,SAAS,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,CAC5B,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,aAAa,KACf,cAAc,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CAAC;AAE9C,MAAM,MAAM,OAAO,GAAG;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC"} \ No newline at end of file diff --git a/node_modules/@jridgewell/resolve-uri/LICENSE b/node_modules/@jridgewell/resolve-uri/LICENSE new file mode 100644 index 0000000000..0a81b2ade1 --- /dev/null +++ b/node_modules/@jridgewell/resolve-uri/LICENSE @@ -0,0 +1,19 @@ +Copyright 2019 Justin Ridgewell + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/node_modules/@jridgewell/resolve-uri/README.md b/node_modules/@jridgewell/resolve-uri/README.md new file mode 100644 index 0000000000..2fe70df77e --- /dev/null +++ b/node_modules/@jridgewell/resolve-uri/README.md @@ -0,0 +1,40 @@ +# @jridgewell/resolve-uri + +> Resolve a URI relative to an optional base URI + +Resolve any combination of absolute URIs, protocol-realtive URIs, absolute paths, or relative paths. + +## Installation + +```sh +npm install @jridgewell/resolve-uri +``` + +## Usage + +```typescript +function resolve(input: string, base?: string): string; +``` + +```js +import resolve from '@jridgewell/resolve-uri'; + +resolve('foo', 'https://example.com'); // => 'https://example.com/foo' +``` + +| Input | Base | Resolution | Explanation | +|-----------------------|-------------------------|--------------------------------|--------------------------------------------------------------| +| `https://example.com` | _any_ | `https://example.com/` | Input is normalized only | +| `//example.com` | `https://base.com/` | `https://example.com/` | Input inherits the base's protocol | +| `//example.com` | _rest_ | `//example.com/` | Input is normalized only | +| `/example` | `https://base.com/` | `https://base.com/example` | Input inherits the base's origin | +| `/example` | `//base.com/` | `//base.com/example` | Input inherits the base's host and remains protocol relative | +| `/example` | _rest_ | `/example` | Input is normalized only | +| `example` | `https://base.com/dir/` | `https://base.com/dir/example` | Input is joined with the base | +| `example` | `https://base.com/file` | `https://base.com/example` | Input is joined with the base without its file | +| `example` | `//base.com/dir/` | `//base.com/dir/example` | Input is joined with the base's last directory | +| `example` | `//base.com/file` | `//base.com/example` | Input is joined with the base without its file | +| `example` | `/base/dir/` | `/base/dir/example` | Input is joined with the base's last directory | +| `example` | `/base/file` | `/base/example` | Input is joined with the base without its file | +| `example` | `base/dir/` | `base/dir/example` | Input is joined with the base's last directory | +| `example` | `base/file` | `base/example` | Input is joined with the base without its file | diff --git a/node_modules/@jridgewell/resolve-uri/dist/resolve-uri.mjs b/node_modules/@jridgewell/resolve-uri/dist/resolve-uri.mjs new file mode 100644 index 0000000000..e958e88170 --- /dev/null +++ b/node_modules/@jridgewell/resolve-uri/dist/resolve-uri.mjs @@ -0,0 +1,232 @@ +// Matches the scheme of a URL, eg "http://" +const schemeRegex = /^[\w+.-]+:\/\//; +/** + * Matches the parts of a URL: + * 1. Scheme, including ":", guaranteed. + * 2. User/password, including "@", optional. + * 3. Host, guaranteed. + * 4. Port, including ":", optional. + * 5. Path, including "/", optional. + * 6. Query, including "?", optional. + * 7. Hash, including "#", optional. + */ +const urlRegex = /^([\w+.-]+:)\/\/([^@/#?]*@)?([^:/#?]*)(:\d+)?(\/[^#?]*)?(\?[^#]*)?(#.*)?/; +/** + * File URLs are weird. They dont' need the regular `//` in the scheme, they may or may not start + * with a leading `/`, they can have a domain (but only if they don't start with a Windows drive). + * + * 1. Host, optional. + * 2. Path, which may include "/", guaranteed. + * 3. Query, including "?", optional. + * 4. Hash, including "#", optional. + */ +const fileRegex = /^file:(?:\/\/((?![a-z]:)[^/#?]*)?)?(\/?[^#?]*)(\?[^#]*)?(#.*)?/i; +function isAbsoluteUrl(input) { + return schemeRegex.test(input); +} +function isSchemeRelativeUrl(input) { + return input.startsWith('//'); +} +function isAbsolutePath(input) { + return input.startsWith('/'); +} +function isFileUrl(input) { + return input.startsWith('file:'); +} +function isRelative(input) { + return /^[.?#]/.test(input); +} +function parseAbsoluteUrl(input) { + const match = urlRegex.exec(input); + return makeUrl(match[1], match[2] || '', match[3], match[4] || '', match[5] || '/', match[6] || '', match[7] || ''); +} +function parseFileUrl(input) { + const match = fileRegex.exec(input); + const path = match[2]; + return makeUrl('file:', '', match[1] || '', '', isAbsolutePath(path) ? path : '/' + path, match[3] || '', match[4] || ''); +} +function makeUrl(scheme, user, host, port, path, query, hash) { + return { + scheme, + user, + host, + port, + path, + query, + hash, + type: 7 /* Absolute */, + }; +} +function parseUrl(input) { + if (isSchemeRelativeUrl(input)) { + const url = parseAbsoluteUrl('http:' + input); + url.scheme = ''; + url.type = 6 /* SchemeRelative */; + return url; + } + if (isAbsolutePath(input)) { + const url = parseAbsoluteUrl('http://foo.com' + input); + url.scheme = ''; + url.host = ''; + url.type = 5 /* AbsolutePath */; + return url; + } + if (isFileUrl(input)) + return parseFileUrl(input); + if (isAbsoluteUrl(input)) + return parseAbsoluteUrl(input); + const url = parseAbsoluteUrl('http://foo.com/' + input); + url.scheme = ''; + url.host = ''; + url.type = input + ? input.startsWith('?') + ? 3 /* Query */ + : input.startsWith('#') + ? 2 /* Hash */ + : 4 /* RelativePath */ + : 1 /* Empty */; + return url; +} +function stripPathFilename(path) { + // If a path ends with a parent directory "..", then it's a relative path with excess parent + // paths. It's not a file, so we can't strip it. + if (path.endsWith('/..')) + return path; + const index = path.lastIndexOf('/'); + return path.slice(0, index + 1); +} +function mergePaths(url, base) { + normalizePath(base, base.type); + // If the path is just a "/", then it was an empty path to begin with (remember, we're a relative + // path). + if (url.path === '/') { + url.path = base.path; + } + else { + // Resolution happens relative to the base path's directory, not the file. + url.path = stripPathFilename(base.path) + url.path; + } +} +/** + * The path can have empty directories "//", unneeded parents "foo/..", or current directory + * "foo/.". We need to normalize to a standard representation. + */ +function normalizePath(url, type) { + const rel = type <= 4 /* RelativePath */; + const pieces = url.path.split('/'); + // We need to preserve the first piece always, so that we output a leading slash. The item at + // pieces[0] is an empty string. + let pointer = 1; + // Positive is the number of real directories we've output, used for popping a parent directory. + // Eg, "foo/bar/.." will have a positive 2, and we can decrement to be left with just "foo". + let positive = 0; + // We need to keep a trailing slash if we encounter an empty directory (eg, splitting "foo/" will + // generate `["foo", ""]` pieces). And, if we pop a parent directory. But once we encounter a + // real directory, we won't need to append, unless the other conditions happen again. + let addTrailingSlash = false; + for (let i = 1; i < pieces.length; i++) { + const piece = pieces[i]; + // An empty directory, could be a trailing slash, or just a double "//" in the path. + if (!piece) { + addTrailingSlash = true; + continue; + } + // If we encounter a real directory, then we don't need to append anymore. + addTrailingSlash = false; + // A current directory, which we can always drop. + if (piece === '.') + continue; + // A parent directory, we need to see if there are any real directories we can pop. Else, we + // have an excess of parents, and we'll need to keep the "..". + if (piece === '..') { + if (positive) { + addTrailingSlash = true; + positive--; + pointer--; + } + else if (rel) { + // If we're in a relativePath, then we need to keep the excess parents. Else, in an absolute + // URL, protocol relative URL, or an absolute path, we don't need to keep excess. + pieces[pointer++] = piece; + } + continue; + } + // We've encountered a real directory. Move it to the next insertion pointer, which accounts for + // any popped or dropped directories. + pieces[pointer++] = piece; + positive++; + } + let path = ''; + for (let i = 1; i < pointer; i++) { + path += '/' + pieces[i]; + } + if (!path || (addTrailingSlash && !path.endsWith('/..'))) { + path += '/'; + } + url.path = path; +} +/** + * Attempts to resolve `input` URL/path relative to `base`. + */ +function resolve(input, base) { + if (!input && !base) + return ''; + const url = parseUrl(input); + let inputType = url.type; + if (base && inputType !== 7 /* Absolute */) { + const baseUrl = parseUrl(base); + const baseType = baseUrl.type; + switch (inputType) { + case 1 /* Empty */: + url.hash = baseUrl.hash; + // fall through + case 2 /* Hash */: + url.query = baseUrl.query; + // fall through + case 3 /* Query */: + case 4 /* RelativePath */: + mergePaths(url, baseUrl); + // fall through + case 5 /* AbsolutePath */: + // The host, user, and port are joined, you can't copy one without the others. + url.user = baseUrl.user; + url.host = baseUrl.host; + url.port = baseUrl.port; + // fall through + case 6 /* SchemeRelative */: + // The input doesn't have a schema at least, so we need to copy at least that over. + url.scheme = baseUrl.scheme; + } + if (baseType > inputType) + inputType = baseType; + } + normalizePath(url, inputType); + const queryHash = url.query + url.hash; + switch (inputType) { + // This is impossible, because of the empty checks at the start of the function. + // case UrlType.Empty: + case 2 /* Hash */: + case 3 /* Query */: + return queryHash; + case 4 /* RelativePath */: { + // The first char is always a "/", and we need it to be relative. + const path = url.path.slice(1); + if (!path) + return queryHash || '.'; + if (isRelative(base || input) && !isRelative(path)) { + // If base started with a leading ".", or there is no base and input started with a ".", + // then we need to ensure that the relative path starts with a ".". We don't know if + // relative starts with a "..", though, so check before prepending. + return './' + path + queryHash; + } + return path + queryHash; + } + case 5 /* AbsolutePath */: + return url.path + queryHash; + default: + return url.scheme + '//' + url.user + url.host + url.port + url.path + queryHash; + } +} + +export { resolve as default }; +//# sourceMappingURL=resolve-uri.mjs.map diff --git a/node_modules/@jridgewell/resolve-uri/dist/resolve-uri.mjs.map b/node_modules/@jridgewell/resolve-uri/dist/resolve-uri.mjs.map new file mode 100644 index 0000000000..1de97d011e --- /dev/null +++ b/node_modules/@jridgewell/resolve-uri/dist/resolve-uri.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"resolve-uri.mjs","sources":["../src/resolve-uri.ts"],"sourcesContent":["// Matches the scheme of a URL, eg \"http://\"\nconst schemeRegex = /^[\\w+.-]+:\\/\\//;\n\n/**\n * Matches the parts of a URL:\n * 1. Scheme, including \":\", guaranteed.\n * 2. User/password, including \"@\", optional.\n * 3. Host, guaranteed.\n * 4. Port, including \":\", optional.\n * 5. Path, including \"/\", optional.\n * 6. Query, including \"?\", optional.\n * 7. Hash, including \"#\", optional.\n */\nconst urlRegex = /^([\\w+.-]+:)\\/\\/([^@/#?]*@)?([^:/#?]*)(:\\d+)?(\\/[^#?]*)?(\\?[^#]*)?(#.*)?/;\n\n/**\n * File URLs are weird. They dont' need the regular `//` in the scheme, they may or may not start\n * with a leading `/`, they can have a domain (but only if they don't start with a Windows drive).\n *\n * 1. Host, optional.\n * 2. Path, which may include \"/\", guaranteed.\n * 3. Query, including \"?\", optional.\n * 4. Hash, including \"#\", optional.\n */\nconst fileRegex = /^file:(?:\\/\\/((?![a-z]:)[^/#?]*)?)?(\\/?[^#?]*)(\\?[^#]*)?(#.*)?/i;\n\ntype Url = {\n scheme: string;\n user: string;\n host: string;\n port: string;\n path: string;\n query: string;\n hash: string;\n type: UrlType;\n};\n\nconst enum UrlType {\n Empty = 1,\n Hash = 2,\n Query = 3,\n RelativePath = 4,\n AbsolutePath = 5,\n SchemeRelative = 6,\n Absolute = 7,\n}\n\nfunction isAbsoluteUrl(input: string): boolean {\n return schemeRegex.test(input);\n}\n\nfunction isSchemeRelativeUrl(input: string): boolean {\n return input.startsWith('//');\n}\n\nfunction isAbsolutePath(input: string): boolean {\n return input.startsWith('/');\n}\n\nfunction isFileUrl(input: string): boolean {\n return input.startsWith('file:');\n}\n\nfunction isRelative(input: string): boolean {\n return /^[.?#]/.test(input);\n}\n\nfunction parseAbsoluteUrl(input: string): Url {\n const match = urlRegex.exec(input)!;\n return makeUrl(\n match[1],\n match[2] || '',\n match[3],\n match[4] || '',\n match[5] || '/',\n match[6] || '',\n match[7] || '',\n );\n}\n\nfunction parseFileUrl(input: string): Url {\n const match = fileRegex.exec(input)!;\n const path = match[2];\n return makeUrl(\n 'file:',\n '',\n match[1] || '',\n '',\n isAbsolutePath(path) ? path : '/' + path,\n match[3] || '',\n match[4] || '',\n );\n}\n\nfunction makeUrl(\n scheme: string,\n user: string,\n host: string,\n port: string,\n path: string,\n query: string,\n hash: string,\n): Url {\n return {\n scheme,\n user,\n host,\n port,\n path,\n query,\n hash,\n type: UrlType.Absolute,\n };\n}\n\nfunction parseUrl(input: string): Url {\n if (isSchemeRelativeUrl(input)) {\n const url = parseAbsoluteUrl('http:' + input);\n url.scheme = '';\n url.type = UrlType.SchemeRelative;\n return url;\n }\n\n if (isAbsolutePath(input)) {\n const url = parseAbsoluteUrl('http://foo.com' + input);\n url.scheme = '';\n url.host = '';\n url.type = UrlType.AbsolutePath;\n return url;\n }\n\n if (isFileUrl(input)) return parseFileUrl(input);\n\n if (isAbsoluteUrl(input)) return parseAbsoluteUrl(input);\n\n const url = parseAbsoluteUrl('http://foo.com/' + input);\n url.scheme = '';\n url.host = '';\n url.type = input\n ? input.startsWith('?')\n ? UrlType.Query\n : input.startsWith('#')\n ? UrlType.Hash\n : UrlType.RelativePath\n : UrlType.Empty;\n return url;\n}\n\nfunction stripPathFilename(path: string): string {\n // If a path ends with a parent directory \"..\", then it's a relative path with excess parent\n // paths. It's not a file, so we can't strip it.\n if (path.endsWith('/..')) return path;\n const index = path.lastIndexOf('/');\n return path.slice(0, index + 1);\n}\n\nfunction mergePaths(url: Url, base: Url) {\n normalizePath(base, base.type);\n\n // If the path is just a \"/\", then it was an empty path to begin with (remember, we're a relative\n // path).\n if (url.path === '/') {\n url.path = base.path;\n } else {\n // Resolution happens relative to the base path's directory, not the file.\n url.path = stripPathFilename(base.path) + url.path;\n }\n}\n\n/**\n * The path can have empty directories \"//\", unneeded parents \"foo/..\", or current directory\n * \"foo/.\". We need to normalize to a standard representation.\n */\nfunction normalizePath(url: Url, type: UrlType) {\n const rel = type <= UrlType.RelativePath;\n const pieces = url.path.split('/');\n\n // We need to preserve the first piece always, so that we output a leading slash. The item at\n // pieces[0] is an empty string.\n let pointer = 1;\n\n // Positive is the number of real directories we've output, used for popping a parent directory.\n // Eg, \"foo/bar/..\" will have a positive 2, and we can decrement to be left with just \"foo\".\n let positive = 0;\n\n // We need to keep a trailing slash if we encounter an empty directory (eg, splitting \"foo/\" will\n // generate `[\"foo\", \"\"]` pieces). And, if we pop a parent directory. But once we encounter a\n // real directory, we won't need to append, unless the other conditions happen again.\n let addTrailingSlash = false;\n\n for (let i = 1; i < pieces.length; i++) {\n const piece = pieces[i];\n\n // An empty directory, could be a trailing slash, or just a double \"//\" in the path.\n if (!piece) {\n addTrailingSlash = true;\n continue;\n }\n\n // If we encounter a real directory, then we don't need to append anymore.\n addTrailingSlash = false;\n\n // A current directory, which we can always drop.\n if (piece === '.') continue;\n\n // A parent directory, we need to see if there are any real directories we can pop. Else, we\n // have an excess of parents, and we'll need to keep the \"..\".\n if (piece === '..') {\n if (positive) {\n addTrailingSlash = true;\n positive--;\n pointer--;\n } else if (rel) {\n // If we're in a relativePath, then we need to keep the excess parents. Else, in an absolute\n // URL, protocol relative URL, or an absolute path, we don't need to keep excess.\n pieces[pointer++] = piece;\n }\n continue;\n }\n\n // We've encountered a real directory. Move it to the next insertion pointer, which accounts for\n // any popped or dropped directories.\n pieces[pointer++] = piece;\n positive++;\n }\n\n let path = '';\n for (let i = 1; i < pointer; i++) {\n path += '/' + pieces[i];\n }\n if (!path || (addTrailingSlash && !path.endsWith('/..'))) {\n path += '/';\n }\n url.path = path;\n}\n\n/**\n * Attempts to resolve `input` URL/path relative to `base`.\n */\nexport default function resolve(input: string, base: string | undefined): string {\n if (!input && !base) return '';\n\n const url = parseUrl(input);\n let inputType = url.type;\n\n if (base && inputType !== UrlType.Absolute) {\n const baseUrl = parseUrl(base);\n const baseType = baseUrl.type;\n\n switch (inputType) {\n case UrlType.Empty:\n url.hash = baseUrl.hash;\n // fall through\n\n case UrlType.Hash:\n url.query = baseUrl.query;\n // fall through\n\n case UrlType.Query:\n case UrlType.RelativePath:\n mergePaths(url, baseUrl);\n // fall through\n\n case UrlType.AbsolutePath:\n // The host, user, and port are joined, you can't copy one without the others.\n url.user = baseUrl.user;\n url.host = baseUrl.host;\n url.port = baseUrl.port;\n // fall through\n\n case UrlType.SchemeRelative:\n // The input doesn't have a schema at least, so we need to copy at least that over.\n url.scheme = baseUrl.scheme;\n }\n if (baseType > inputType) inputType = baseType;\n }\n\n normalizePath(url, inputType);\n\n const queryHash = url.query + url.hash;\n switch (inputType) {\n // This is impossible, because of the empty checks at the start of the function.\n // case UrlType.Empty:\n\n case UrlType.Hash:\n case UrlType.Query:\n return queryHash;\n\n case UrlType.RelativePath: {\n // The first char is always a \"/\", and we need it to be relative.\n const path = url.path.slice(1);\n\n if (!path) return queryHash || '.';\n\n if (isRelative(base || input) && !isRelative(path)) {\n // If base started with a leading \".\", or there is no base and input started with a \".\",\n // then we need to ensure that the relative path starts with a \".\". We don't know if\n // relative starts with a \"..\", though, so check before prepending.\n return './' + path + queryHash;\n }\n\n return path + queryHash;\n }\n\n case UrlType.AbsolutePath:\n return url.path + queryHash;\n\n default:\n return url.scheme + '//' + url.user + url.host + url.port + url.path + queryHash;\n }\n}\n"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@jridgewell/resolve-uri/dist/resolve-uri.umd.js b/node_modules/@jridgewell/resolve-uri/dist/resolve-uri.umd.js new file mode 100644 index 0000000000..a783049b01 --- /dev/null +++ b/node_modules/@jridgewell/resolve-uri/dist/resolve-uri.umd.js @@ -0,0 +1,240 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.resolveURI = factory()); +})(this, (function () { 'use strict'; + + // Matches the scheme of a URL, eg "http://" + const schemeRegex = /^[\w+.-]+:\/\//; + /** + * Matches the parts of a URL: + * 1. Scheme, including ":", guaranteed. + * 2. User/password, including "@", optional. + * 3. Host, guaranteed. + * 4. Port, including ":", optional. + * 5. Path, including "/", optional. + * 6. Query, including "?", optional. + * 7. Hash, including "#", optional. + */ + const urlRegex = /^([\w+.-]+:)\/\/([^@/#?]*@)?([^:/#?]*)(:\d+)?(\/[^#?]*)?(\?[^#]*)?(#.*)?/; + /** + * File URLs are weird. They dont' need the regular `//` in the scheme, they may or may not start + * with a leading `/`, they can have a domain (but only if they don't start with a Windows drive). + * + * 1. Host, optional. + * 2. Path, which may include "/", guaranteed. + * 3. Query, including "?", optional. + * 4. Hash, including "#", optional. + */ + const fileRegex = /^file:(?:\/\/((?![a-z]:)[^/#?]*)?)?(\/?[^#?]*)(\?[^#]*)?(#.*)?/i; + function isAbsoluteUrl(input) { + return schemeRegex.test(input); + } + function isSchemeRelativeUrl(input) { + return input.startsWith('//'); + } + function isAbsolutePath(input) { + return input.startsWith('/'); + } + function isFileUrl(input) { + return input.startsWith('file:'); + } + function isRelative(input) { + return /^[.?#]/.test(input); + } + function parseAbsoluteUrl(input) { + const match = urlRegex.exec(input); + return makeUrl(match[1], match[2] || '', match[3], match[4] || '', match[5] || '/', match[6] || '', match[7] || ''); + } + function parseFileUrl(input) { + const match = fileRegex.exec(input); + const path = match[2]; + return makeUrl('file:', '', match[1] || '', '', isAbsolutePath(path) ? path : '/' + path, match[3] || '', match[4] || ''); + } + function makeUrl(scheme, user, host, port, path, query, hash) { + return { + scheme, + user, + host, + port, + path, + query, + hash, + type: 7 /* Absolute */, + }; + } + function parseUrl(input) { + if (isSchemeRelativeUrl(input)) { + const url = parseAbsoluteUrl('http:' + input); + url.scheme = ''; + url.type = 6 /* SchemeRelative */; + return url; + } + if (isAbsolutePath(input)) { + const url = parseAbsoluteUrl('http://foo.com' + input); + url.scheme = ''; + url.host = ''; + url.type = 5 /* AbsolutePath */; + return url; + } + if (isFileUrl(input)) + return parseFileUrl(input); + if (isAbsoluteUrl(input)) + return parseAbsoluteUrl(input); + const url = parseAbsoluteUrl('http://foo.com/' + input); + url.scheme = ''; + url.host = ''; + url.type = input + ? input.startsWith('?') + ? 3 /* Query */ + : input.startsWith('#') + ? 2 /* Hash */ + : 4 /* RelativePath */ + : 1 /* Empty */; + return url; + } + function stripPathFilename(path) { + // If a path ends with a parent directory "..", then it's a relative path with excess parent + // paths. It's not a file, so we can't strip it. + if (path.endsWith('/..')) + return path; + const index = path.lastIndexOf('/'); + return path.slice(0, index + 1); + } + function mergePaths(url, base) { + normalizePath(base, base.type); + // If the path is just a "/", then it was an empty path to begin with (remember, we're a relative + // path). + if (url.path === '/') { + url.path = base.path; + } + else { + // Resolution happens relative to the base path's directory, not the file. + url.path = stripPathFilename(base.path) + url.path; + } + } + /** + * The path can have empty directories "//", unneeded parents "foo/..", or current directory + * "foo/.". We need to normalize to a standard representation. + */ + function normalizePath(url, type) { + const rel = type <= 4 /* RelativePath */; + const pieces = url.path.split('/'); + // We need to preserve the first piece always, so that we output a leading slash. The item at + // pieces[0] is an empty string. + let pointer = 1; + // Positive is the number of real directories we've output, used for popping a parent directory. + // Eg, "foo/bar/.." will have a positive 2, and we can decrement to be left with just "foo". + let positive = 0; + // We need to keep a trailing slash if we encounter an empty directory (eg, splitting "foo/" will + // generate `["foo", ""]` pieces). And, if we pop a parent directory. But once we encounter a + // real directory, we won't need to append, unless the other conditions happen again. + let addTrailingSlash = false; + for (let i = 1; i < pieces.length; i++) { + const piece = pieces[i]; + // An empty directory, could be a trailing slash, or just a double "//" in the path. + if (!piece) { + addTrailingSlash = true; + continue; + } + // If we encounter a real directory, then we don't need to append anymore. + addTrailingSlash = false; + // A current directory, which we can always drop. + if (piece === '.') + continue; + // A parent directory, we need to see if there are any real directories we can pop. Else, we + // have an excess of parents, and we'll need to keep the "..". + if (piece === '..') { + if (positive) { + addTrailingSlash = true; + positive--; + pointer--; + } + else if (rel) { + // If we're in a relativePath, then we need to keep the excess parents. Else, in an absolute + // URL, protocol relative URL, or an absolute path, we don't need to keep excess. + pieces[pointer++] = piece; + } + continue; + } + // We've encountered a real directory. Move it to the next insertion pointer, which accounts for + // any popped or dropped directories. + pieces[pointer++] = piece; + positive++; + } + let path = ''; + for (let i = 1; i < pointer; i++) { + path += '/' + pieces[i]; + } + if (!path || (addTrailingSlash && !path.endsWith('/..'))) { + path += '/'; + } + url.path = path; + } + /** + * Attempts to resolve `input` URL/path relative to `base`. + */ + function resolve(input, base) { + if (!input && !base) + return ''; + const url = parseUrl(input); + let inputType = url.type; + if (base && inputType !== 7 /* Absolute */) { + const baseUrl = parseUrl(base); + const baseType = baseUrl.type; + switch (inputType) { + case 1 /* Empty */: + url.hash = baseUrl.hash; + // fall through + case 2 /* Hash */: + url.query = baseUrl.query; + // fall through + case 3 /* Query */: + case 4 /* RelativePath */: + mergePaths(url, baseUrl); + // fall through + case 5 /* AbsolutePath */: + // The host, user, and port are joined, you can't copy one without the others. + url.user = baseUrl.user; + url.host = baseUrl.host; + url.port = baseUrl.port; + // fall through + case 6 /* SchemeRelative */: + // The input doesn't have a schema at least, so we need to copy at least that over. + url.scheme = baseUrl.scheme; + } + if (baseType > inputType) + inputType = baseType; + } + normalizePath(url, inputType); + const queryHash = url.query + url.hash; + switch (inputType) { + // This is impossible, because of the empty checks at the start of the function. + // case UrlType.Empty: + case 2 /* Hash */: + case 3 /* Query */: + return queryHash; + case 4 /* RelativePath */: { + // The first char is always a "/", and we need it to be relative. + const path = url.path.slice(1); + if (!path) + return queryHash || '.'; + if (isRelative(base || input) && !isRelative(path)) { + // If base started with a leading ".", or there is no base and input started with a ".", + // then we need to ensure that the relative path starts with a ".". We don't know if + // relative starts with a "..", though, so check before prepending. + return './' + path + queryHash; + } + return path + queryHash; + } + case 5 /* AbsolutePath */: + return url.path + queryHash; + default: + return url.scheme + '//' + url.user + url.host + url.port + url.path + queryHash; + } + } + + return resolve; + +})); +//# sourceMappingURL=resolve-uri.umd.js.map diff --git a/node_modules/@jridgewell/resolve-uri/dist/resolve-uri.umd.js.map b/node_modules/@jridgewell/resolve-uri/dist/resolve-uri.umd.js.map new file mode 100644 index 0000000000..70a37f21da --- /dev/null +++ b/node_modules/@jridgewell/resolve-uri/dist/resolve-uri.umd.js.map @@ -0,0 +1 @@ +{"version":3,"file":"resolve-uri.umd.js","sources":["../src/resolve-uri.ts"],"sourcesContent":["// Matches the scheme of a URL, eg \"http://\"\nconst schemeRegex = /^[\\w+.-]+:\\/\\//;\n\n/**\n * Matches the parts of a URL:\n * 1. Scheme, including \":\", guaranteed.\n * 2. User/password, including \"@\", optional.\n * 3. Host, guaranteed.\n * 4. Port, including \":\", optional.\n * 5. Path, including \"/\", optional.\n * 6. Query, including \"?\", optional.\n * 7. Hash, including \"#\", optional.\n */\nconst urlRegex = /^([\\w+.-]+:)\\/\\/([^@/#?]*@)?([^:/#?]*)(:\\d+)?(\\/[^#?]*)?(\\?[^#]*)?(#.*)?/;\n\n/**\n * File URLs are weird. They dont' need the regular `//` in the scheme, they may or may not start\n * with a leading `/`, they can have a domain (but only if they don't start with a Windows drive).\n *\n * 1. Host, optional.\n * 2. Path, which may include \"/\", guaranteed.\n * 3. Query, including \"?\", optional.\n * 4. Hash, including \"#\", optional.\n */\nconst fileRegex = /^file:(?:\\/\\/((?![a-z]:)[^/#?]*)?)?(\\/?[^#?]*)(\\?[^#]*)?(#.*)?/i;\n\ntype Url = {\n scheme: string;\n user: string;\n host: string;\n port: string;\n path: string;\n query: string;\n hash: string;\n type: UrlType;\n};\n\nconst enum UrlType {\n Empty = 1,\n Hash = 2,\n Query = 3,\n RelativePath = 4,\n AbsolutePath = 5,\n SchemeRelative = 6,\n Absolute = 7,\n}\n\nfunction isAbsoluteUrl(input: string): boolean {\n return schemeRegex.test(input);\n}\n\nfunction isSchemeRelativeUrl(input: string): boolean {\n return input.startsWith('//');\n}\n\nfunction isAbsolutePath(input: string): boolean {\n return input.startsWith('/');\n}\n\nfunction isFileUrl(input: string): boolean {\n return input.startsWith('file:');\n}\n\nfunction isRelative(input: string): boolean {\n return /^[.?#]/.test(input);\n}\n\nfunction parseAbsoluteUrl(input: string): Url {\n const match = urlRegex.exec(input)!;\n return makeUrl(\n match[1],\n match[2] || '',\n match[3],\n match[4] || '',\n match[5] || '/',\n match[6] || '',\n match[7] || '',\n );\n}\n\nfunction parseFileUrl(input: string): Url {\n const match = fileRegex.exec(input)!;\n const path = match[2];\n return makeUrl(\n 'file:',\n '',\n match[1] || '',\n '',\n isAbsolutePath(path) ? path : '/' + path,\n match[3] || '',\n match[4] || '',\n );\n}\n\nfunction makeUrl(\n scheme: string,\n user: string,\n host: string,\n port: string,\n path: string,\n query: string,\n hash: string,\n): Url {\n return {\n scheme,\n user,\n host,\n port,\n path,\n query,\n hash,\n type: UrlType.Absolute,\n };\n}\n\nfunction parseUrl(input: string): Url {\n if (isSchemeRelativeUrl(input)) {\n const url = parseAbsoluteUrl('http:' + input);\n url.scheme = '';\n url.type = UrlType.SchemeRelative;\n return url;\n }\n\n if (isAbsolutePath(input)) {\n const url = parseAbsoluteUrl('http://foo.com' + input);\n url.scheme = '';\n url.host = '';\n url.type = UrlType.AbsolutePath;\n return url;\n }\n\n if (isFileUrl(input)) return parseFileUrl(input);\n\n if (isAbsoluteUrl(input)) return parseAbsoluteUrl(input);\n\n const url = parseAbsoluteUrl('http://foo.com/' + input);\n url.scheme = '';\n url.host = '';\n url.type = input\n ? input.startsWith('?')\n ? UrlType.Query\n : input.startsWith('#')\n ? UrlType.Hash\n : UrlType.RelativePath\n : UrlType.Empty;\n return url;\n}\n\nfunction stripPathFilename(path: string): string {\n // If a path ends with a parent directory \"..\", then it's a relative path with excess parent\n // paths. It's not a file, so we can't strip it.\n if (path.endsWith('/..')) return path;\n const index = path.lastIndexOf('/');\n return path.slice(0, index + 1);\n}\n\nfunction mergePaths(url: Url, base: Url) {\n normalizePath(base, base.type);\n\n // If the path is just a \"/\", then it was an empty path to begin with (remember, we're a relative\n // path).\n if (url.path === '/') {\n url.path = base.path;\n } else {\n // Resolution happens relative to the base path's directory, not the file.\n url.path = stripPathFilename(base.path) + url.path;\n }\n}\n\n/**\n * The path can have empty directories \"//\", unneeded parents \"foo/..\", or current directory\n * \"foo/.\". We need to normalize to a standard representation.\n */\nfunction normalizePath(url: Url, type: UrlType) {\n const rel = type <= UrlType.RelativePath;\n const pieces = url.path.split('/');\n\n // We need to preserve the first piece always, so that we output a leading slash. The item at\n // pieces[0] is an empty string.\n let pointer = 1;\n\n // Positive is the number of real directories we've output, used for popping a parent directory.\n // Eg, \"foo/bar/..\" will have a positive 2, and we can decrement to be left with just \"foo\".\n let positive = 0;\n\n // We need to keep a trailing slash if we encounter an empty directory (eg, splitting \"foo/\" will\n // generate `[\"foo\", \"\"]` pieces). And, if we pop a parent directory. But once we encounter a\n // real directory, we won't need to append, unless the other conditions happen again.\n let addTrailingSlash = false;\n\n for (let i = 1; i < pieces.length; i++) {\n const piece = pieces[i];\n\n // An empty directory, could be a trailing slash, or just a double \"//\" in the path.\n if (!piece) {\n addTrailingSlash = true;\n continue;\n }\n\n // If we encounter a real directory, then we don't need to append anymore.\n addTrailingSlash = false;\n\n // A current directory, which we can always drop.\n if (piece === '.') continue;\n\n // A parent directory, we need to see if there are any real directories we can pop. Else, we\n // have an excess of parents, and we'll need to keep the \"..\".\n if (piece === '..') {\n if (positive) {\n addTrailingSlash = true;\n positive--;\n pointer--;\n } else if (rel) {\n // If we're in a relativePath, then we need to keep the excess parents. Else, in an absolute\n // URL, protocol relative URL, or an absolute path, we don't need to keep excess.\n pieces[pointer++] = piece;\n }\n continue;\n }\n\n // We've encountered a real directory. Move it to the next insertion pointer, which accounts for\n // any popped or dropped directories.\n pieces[pointer++] = piece;\n positive++;\n }\n\n let path = '';\n for (let i = 1; i < pointer; i++) {\n path += '/' + pieces[i];\n }\n if (!path || (addTrailingSlash && !path.endsWith('/..'))) {\n path += '/';\n }\n url.path = path;\n}\n\n/**\n * Attempts to resolve `input` URL/path relative to `base`.\n */\nexport default function resolve(input: string, base: string | undefined): string {\n if (!input && !base) return '';\n\n const url = parseUrl(input);\n let inputType = url.type;\n\n if (base && inputType !== UrlType.Absolute) {\n const baseUrl = parseUrl(base);\n const baseType = baseUrl.type;\n\n switch (inputType) {\n case UrlType.Empty:\n url.hash = baseUrl.hash;\n // fall through\n\n case UrlType.Hash:\n url.query = baseUrl.query;\n // fall through\n\n case UrlType.Query:\n case UrlType.RelativePath:\n mergePaths(url, baseUrl);\n // fall through\n\n case UrlType.AbsolutePath:\n // The host, user, and port are joined, you can't copy one without the others.\n url.user = baseUrl.user;\n url.host = baseUrl.host;\n url.port = baseUrl.port;\n // fall through\n\n case UrlType.SchemeRelative:\n // The input doesn't have a schema at least, so we need to copy at least that over.\n url.scheme = baseUrl.scheme;\n }\n if (baseType > inputType) inputType = baseType;\n }\n\n normalizePath(url, inputType);\n\n const queryHash = url.query + url.hash;\n switch (inputType) {\n // This is impossible, because of the empty checks at the start of the function.\n // case UrlType.Empty:\n\n case UrlType.Hash:\n case UrlType.Query:\n return queryHash;\n\n case UrlType.RelativePath: {\n // The first char is always a \"/\", and we need it to be relative.\n const path = url.path.slice(1);\n\n if (!path) return queryHash || '.';\n\n if (isRelative(base || input) && !isRelative(path)) {\n // If base started with a leading \".\", or there is no base and input started with a \".\",\n // then we need to ensure that the relative path starts with a \".\". We don't know if\n // relative starts with a \"..\", though, so check before prepending.\n return './' + path + queryHash;\n }\n\n return path + queryHash;\n }\n\n case UrlType.AbsolutePath:\n return url.path + queryHash;\n\n default:\n return url.scheme + '//' + url.user + url.host + url.port + url.path + queryHash;\n }\n}\n"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@jridgewell/resolve-uri/dist/types/resolve-uri.d.ts b/node_modules/@jridgewell/resolve-uri/dist/types/resolve-uri.d.ts new file mode 100644 index 0000000000..b7f0b3b2d7 --- /dev/null +++ b/node_modules/@jridgewell/resolve-uri/dist/types/resolve-uri.d.ts @@ -0,0 +1,4 @@ +/** + * Attempts to resolve `input` URL/path relative to `base`. + */ +export default function resolve(input: string, base: string | undefined): string; diff --git a/node_modules/@jridgewell/resolve-uri/package.json b/node_modules/@jridgewell/resolve-uri/package.json new file mode 100644 index 0000000000..02a4c5187e --- /dev/null +++ b/node_modules/@jridgewell/resolve-uri/package.json @@ -0,0 +1,69 @@ +{ + "name": "@jridgewell/resolve-uri", + "version": "3.1.2", + "description": "Resolve a URI relative to an optional base URI", + "keywords": [ + "resolve", + "uri", + "url", + "path" + ], + "author": "Justin Ridgewell ", + "license": "MIT", + "repository": "https://github.com/jridgewell/resolve-uri", + "main": "dist/resolve-uri.umd.js", + "module": "dist/resolve-uri.mjs", + "types": "dist/types/resolve-uri.d.ts", + "exports": { + ".": [ + { + "types": "./dist/types/resolve-uri.d.ts", + "browser": "./dist/resolve-uri.umd.js", + "require": "./dist/resolve-uri.umd.js", + "import": "./dist/resolve-uri.mjs" + }, + "./dist/resolve-uri.umd.js" + ], + "./package.json": "./package.json" + }, + "files": [ + "dist" + ], + "engines": { + "node": ">=6.0.0" + }, + "scripts": { + "prebuild": "rm -rf dist", + "build": "run-s -n build:*", + "build:rollup": "rollup -c rollup.config.js", + "build:ts": "tsc --project tsconfig.build.json", + "lint": "run-s -n lint:*", + "lint:prettier": "npm run test:lint:prettier -- --write", + "lint:ts": "npm run test:lint:ts -- --fix", + "pretest": "run-s build:rollup", + "test": "run-s -n test:lint test:only", + "test:debug": "mocha --inspect-brk", + "test:lint": "run-s -n test:lint:*", + "test:lint:prettier": "prettier --check '{src,test}/**/*.ts'", + "test:lint:ts": "eslint '{src,test}/**/*.ts'", + "test:only": "mocha", + "test:coverage": "c8 mocha", + "test:watch": "mocha --watch", + "prepublishOnly": "npm run preversion", + "preversion": "run-s test build" + }, + "devDependencies": { + "@jridgewell/resolve-uri-latest": "npm:@jridgewell/resolve-uri@*", + "@rollup/plugin-typescript": "8.3.0", + "@typescript-eslint/eslint-plugin": "5.10.0", + "@typescript-eslint/parser": "5.10.0", + "c8": "7.11.0", + "eslint": "8.7.0", + "eslint-config-prettier": "8.3.0", + "mocha": "9.2.0", + "npm-run-all": "4.1.5", + "prettier": "2.5.1", + "rollup": "2.66.0", + "typescript": "4.5.5" + } +} diff --git a/node_modules/@jridgewell/sourcemap-codec/LICENSE b/node_modules/@jridgewell/sourcemap-codec/LICENSE new file mode 100644 index 0000000000..1f6ce94c11 --- /dev/null +++ b/node_modules/@jridgewell/sourcemap-codec/LICENSE @@ -0,0 +1,19 @@ +Copyright 2024 Justin Ridgewell + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/@jridgewell/sourcemap-codec/README.md b/node_modules/@jridgewell/sourcemap-codec/README.md new file mode 100644 index 0000000000..b3e0708bf9 --- /dev/null +++ b/node_modules/@jridgewell/sourcemap-codec/README.md @@ -0,0 +1,264 @@ +# @jridgewell/sourcemap-codec + +Encode/decode the `mappings` property of a [sourcemap](https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit). + + +## Why? + +Sourcemaps are difficult to generate and manipulate, because the `mappings` property – the part that actually links the generated code back to the original source – is encoded using an obscure method called [Variable-length quantity](https://en.wikipedia.org/wiki/Variable-length_quantity). On top of that, each segment in the mapping contains offsets rather than absolute indices, which means that you can't look at a segment in isolation – you have to understand the whole sourcemap. + +This package makes the process slightly easier. + + +## Installation + +```bash +npm install @jridgewell/sourcemap-codec +``` + + +## Usage + +```js +import { encode, decode } from '@jridgewell/sourcemap-codec'; + +var decoded = decode( ';EAEEA,EAAE,EAAC,CAAE;ECQY,UACC' ); + +assert.deepEqual( decoded, [ + // the first line (of the generated code) has no mappings, + // as shown by the starting semi-colon (which separates lines) + [], + + // the second line contains four (comma-separated) segments + [ + // segments are encoded as you'd expect: + // [ generatedCodeColumn, sourceIndex, sourceCodeLine, sourceCodeColumn, nameIndex ] + + // i.e. the first segment begins at column 2, and maps back to the second column + // of the second line (both zero-based) of the 0th source, and uses the 0th + // name in the `map.names` array + [ 2, 0, 2, 2, 0 ], + + // the remaining segments are 4-length rather than 5-length, + // because they don't map a name + [ 4, 0, 2, 4 ], + [ 6, 0, 2, 5 ], + [ 7, 0, 2, 7 ] + ], + + // the final line contains two segments + [ + [ 2, 1, 10, 19 ], + [ 12, 1, 11, 20 ] + ] +]); + +var encoded = encode( decoded ); +assert.equal( encoded, ';EAEEA,EAAE,EAAC,CAAE;ECQY,UACC' ); +``` + +## Benchmarks + +``` +node v20.10.0 + +amp.js.map - 45120 segments + +Decode Memory Usage: +local code 5815135 bytes +@jridgewell/sourcemap-codec 1.4.15 5868160 bytes +sourcemap-codec 5492584 bytes +source-map-0.6.1 13569984 bytes +source-map-0.8.0 6390584 bytes +chrome dev tools 8011136 bytes +Smallest memory usage is sourcemap-codec + +Decode speed: +decode: local code x 492 ops/sec ±1.22% (90 runs sampled) +decode: @jridgewell/sourcemap-codec 1.4.15 x 499 ops/sec ±1.16% (89 runs sampled) +decode: sourcemap-codec x 376 ops/sec ±1.66% (89 runs sampled) +decode: source-map-0.6.1 x 34.99 ops/sec ±0.94% (48 runs sampled) +decode: source-map-0.8.0 x 351 ops/sec ±0.07% (95 runs sampled) +chrome dev tools x 165 ops/sec ±0.91% (86 runs sampled) +Fastest is decode: @jridgewell/sourcemap-codec 1.4.15 + +Encode Memory Usage: +local code 444248 bytes +@jridgewell/sourcemap-codec 1.4.15 623024 bytes +sourcemap-codec 8696280 bytes +source-map-0.6.1 8745176 bytes +source-map-0.8.0 8736624 bytes +Smallest memory usage is local code + +Encode speed: +encode: local code x 796 ops/sec ±0.11% (97 runs sampled) +encode: @jridgewell/sourcemap-codec 1.4.15 x 795 ops/sec ±0.25% (98 runs sampled) +encode: sourcemap-codec x 231 ops/sec ±0.83% (86 runs sampled) +encode: source-map-0.6.1 x 166 ops/sec ±0.57% (86 runs sampled) +encode: source-map-0.8.0 x 203 ops/sec ±0.45% (88 runs sampled) +Fastest is encode: local code,encode: @jridgewell/sourcemap-codec 1.4.15 + + +*** + + +babel.min.js.map - 347793 segments + +Decode Memory Usage: +local code 35424960 bytes +@jridgewell/sourcemap-codec 1.4.15 35424696 bytes +sourcemap-codec 36033464 bytes +source-map-0.6.1 62253704 bytes +source-map-0.8.0 43843920 bytes +chrome dev tools 45111400 bytes +Smallest memory usage is @jridgewell/sourcemap-codec 1.4.15 + +Decode speed: +decode: local code x 38.18 ops/sec ±5.44% (52 runs sampled) +decode: @jridgewell/sourcemap-codec 1.4.15 x 38.36 ops/sec ±5.02% (52 runs sampled) +decode: sourcemap-codec x 34.05 ops/sec ±4.45% (47 runs sampled) +decode: source-map-0.6.1 x 4.31 ops/sec ±2.76% (15 runs sampled) +decode: source-map-0.8.0 x 55.60 ops/sec ±0.13% (73 runs sampled) +chrome dev tools x 16.94 ops/sec ±3.78% (46 runs sampled) +Fastest is decode: source-map-0.8.0 + +Encode Memory Usage: +local code 2606016 bytes +@jridgewell/sourcemap-codec 1.4.15 2626440 bytes +sourcemap-codec 21152576 bytes +source-map-0.6.1 25023928 bytes +source-map-0.8.0 25256448 bytes +Smallest memory usage is local code + +Encode speed: +encode: local code x 127 ops/sec ±0.18% (83 runs sampled) +encode: @jridgewell/sourcemap-codec 1.4.15 x 128 ops/sec ±0.26% (83 runs sampled) +encode: sourcemap-codec x 29.31 ops/sec ±2.55% (53 runs sampled) +encode: source-map-0.6.1 x 18.85 ops/sec ±3.19% (36 runs sampled) +encode: source-map-0.8.0 x 19.34 ops/sec ±1.97% (36 runs sampled) +Fastest is encode: @jridgewell/sourcemap-codec 1.4.15 + + +*** + + +preact.js.map - 1992 segments + +Decode Memory Usage: +local code 261696 bytes +@jridgewell/sourcemap-codec 1.4.15 244296 bytes +sourcemap-codec 302816 bytes +source-map-0.6.1 939176 bytes +source-map-0.8.0 336 bytes +chrome dev tools 587368 bytes +Smallest memory usage is source-map-0.8.0 + +Decode speed: +decode: local code x 17,782 ops/sec ±0.32% (97 runs sampled) +decode: @jridgewell/sourcemap-codec 1.4.15 x 17,863 ops/sec ±0.40% (100 runs sampled) +decode: sourcemap-codec x 12,453 ops/sec ±0.27% (101 runs sampled) +decode: source-map-0.6.1 x 1,288 ops/sec ±1.05% (96 runs sampled) +decode: source-map-0.8.0 x 9,289 ops/sec ±0.27% (101 runs sampled) +chrome dev tools x 4,769 ops/sec ±0.18% (100 runs sampled) +Fastest is decode: @jridgewell/sourcemap-codec 1.4.15 + +Encode Memory Usage: +local code 262944 bytes +@jridgewell/sourcemap-codec 1.4.15 25544 bytes +sourcemap-codec 323048 bytes +source-map-0.6.1 507808 bytes +source-map-0.8.0 507480 bytes +Smallest memory usage is @jridgewell/sourcemap-codec 1.4.15 + +Encode speed: +encode: local code x 24,207 ops/sec ±0.79% (95 runs sampled) +encode: @jridgewell/sourcemap-codec 1.4.15 x 24,288 ops/sec ±0.48% (96 runs sampled) +encode: sourcemap-codec x 6,761 ops/sec ±0.21% (100 runs sampled) +encode: source-map-0.6.1 x 5,374 ops/sec ±0.17% (99 runs sampled) +encode: source-map-0.8.0 x 5,633 ops/sec ±0.32% (99 runs sampled) +Fastest is encode: @jridgewell/sourcemap-codec 1.4.15,encode: local code + + +*** + + +react.js.map - 5726 segments + +Decode Memory Usage: +local code 678816 bytes +@jridgewell/sourcemap-codec 1.4.15 678816 bytes +sourcemap-codec 816400 bytes +source-map-0.6.1 2288864 bytes +source-map-0.8.0 721360 bytes +chrome dev tools 1012512 bytes +Smallest memory usage is local code + +Decode speed: +decode: local code x 6,178 ops/sec ±0.19% (98 runs sampled) +decode: @jridgewell/sourcemap-codec 1.4.15 x 6,261 ops/sec ±0.22% (100 runs sampled) +decode: sourcemap-codec x 4,472 ops/sec ±0.90% (99 runs sampled) +decode: source-map-0.6.1 x 449 ops/sec ±0.31% (95 runs sampled) +decode: source-map-0.8.0 x 3,219 ops/sec ±0.13% (100 runs sampled) +chrome dev tools x 1,743 ops/sec ±0.20% (99 runs sampled) +Fastest is decode: @jridgewell/sourcemap-codec 1.4.15 + +Encode Memory Usage: +local code 140960 bytes +@jridgewell/sourcemap-codec 1.4.15 159808 bytes +sourcemap-codec 969304 bytes +source-map-0.6.1 930520 bytes +source-map-0.8.0 930248 bytes +Smallest memory usage is local code + +Encode speed: +encode: local code x 8,013 ops/sec ±0.19% (100 runs sampled) +encode: @jridgewell/sourcemap-codec 1.4.15 x 7,989 ops/sec ±0.20% (101 runs sampled) +encode: sourcemap-codec x 2,472 ops/sec ±0.21% (99 runs sampled) +encode: source-map-0.6.1 x 2,200 ops/sec ±0.17% (99 runs sampled) +encode: source-map-0.8.0 x 2,220 ops/sec ±0.37% (99 runs sampled) +Fastest is encode: local code + + +*** + + +vscode.map - 2141001 segments + +Decode Memory Usage: +local code 198955264 bytes +@jridgewell/sourcemap-codec 1.4.15 199175352 bytes +sourcemap-codec 199102688 bytes +source-map-0.6.1 386323432 bytes +source-map-0.8.0 244116432 bytes +chrome dev tools 293734280 bytes +Smallest memory usage is local code + +Decode speed: +decode: local code x 3.90 ops/sec ±22.21% (15 runs sampled) +decode: @jridgewell/sourcemap-codec 1.4.15 x 3.95 ops/sec ±23.53% (15 runs sampled) +decode: sourcemap-codec x 3.82 ops/sec ±17.94% (14 runs sampled) +decode: source-map-0.6.1 x 0.61 ops/sec ±7.81% (6 runs sampled) +decode: source-map-0.8.0 x 9.54 ops/sec ±0.28% (28 runs sampled) +chrome dev tools x 2.18 ops/sec ±10.58% (10 runs sampled) +Fastest is decode: source-map-0.8.0 + +Encode Memory Usage: +local code 13509880 bytes +@jridgewell/sourcemap-codec 1.4.15 13537648 bytes +sourcemap-codec 32540104 bytes +source-map-0.6.1 127531040 bytes +source-map-0.8.0 127535312 bytes +Smallest memory usage is local code + +Encode speed: +encode: local code x 20.10 ops/sec ±0.19% (38 runs sampled) +encode: @jridgewell/sourcemap-codec 1.4.15 x 20.26 ops/sec ±0.32% (38 runs sampled) +encode: sourcemap-codec x 5.44 ops/sec ±1.64% (18 runs sampled) +encode: source-map-0.6.1 x 2.30 ops/sec ±4.79% (10 runs sampled) +encode: source-map-0.8.0 x 2.46 ops/sec ±6.53% (10 runs sampled) +Fastest is encode: @jridgewell/sourcemap-codec 1.4.15 +``` + +# License + +MIT diff --git a/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.mjs b/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.mjs new file mode 100644 index 0000000000..532bab39f0 --- /dev/null +++ b/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.mjs @@ -0,0 +1,423 @@ +// src/vlq.ts +var comma = ",".charCodeAt(0); +var semicolon = ";".charCodeAt(0); +var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; +var intToChar = new Uint8Array(64); +var charToInt = new Uint8Array(128); +for (let i = 0; i < chars.length; i++) { + const c = chars.charCodeAt(i); + intToChar[i] = c; + charToInt[c] = i; +} +function decodeInteger(reader, relative) { + let value = 0; + let shift = 0; + let integer = 0; + do { + const c = reader.next(); + integer = charToInt[c]; + value |= (integer & 31) << shift; + shift += 5; + } while (integer & 32); + const shouldNegate = value & 1; + value >>>= 1; + if (shouldNegate) { + value = -2147483648 | -value; + } + return relative + value; +} +function encodeInteger(builder, num, relative) { + let delta = num - relative; + delta = delta < 0 ? -delta << 1 | 1 : delta << 1; + do { + let clamped = delta & 31; + delta >>>= 5; + if (delta > 0) clamped |= 32; + builder.write(intToChar[clamped]); + } while (delta > 0); + return num; +} +function hasMoreVlq(reader, max) { + if (reader.pos >= max) return false; + return reader.peek() !== comma; +} + +// src/strings.ts +var bufLength = 1024 * 16; +var td = typeof TextDecoder !== "undefined" ? /* @__PURE__ */ new TextDecoder() : typeof Buffer !== "undefined" ? { + decode(buf) { + const out = Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength); + return out.toString(); + } +} : { + decode(buf) { + let out = ""; + for (let i = 0; i < buf.length; i++) { + out += String.fromCharCode(buf[i]); + } + return out; + } +}; +var StringWriter = class { + constructor() { + this.pos = 0; + this.out = ""; + this.buffer = new Uint8Array(bufLength); + } + write(v) { + const { buffer } = this; + buffer[this.pos++] = v; + if (this.pos === bufLength) { + this.out += td.decode(buffer); + this.pos = 0; + } + } + flush() { + const { buffer, out, pos } = this; + return pos > 0 ? out + td.decode(buffer.subarray(0, pos)) : out; + } +}; +var StringReader = class { + constructor(buffer) { + this.pos = 0; + this.buffer = buffer; + } + next() { + return this.buffer.charCodeAt(this.pos++); + } + peek() { + return this.buffer.charCodeAt(this.pos); + } + indexOf(char) { + const { buffer, pos } = this; + const idx = buffer.indexOf(char, pos); + return idx === -1 ? buffer.length : idx; + } +}; + +// src/scopes.ts +var EMPTY = []; +function decodeOriginalScopes(input) { + const { length } = input; + const reader = new StringReader(input); + const scopes = []; + const stack = []; + let line = 0; + for (; reader.pos < length; reader.pos++) { + line = decodeInteger(reader, line); + const column = decodeInteger(reader, 0); + if (!hasMoreVlq(reader, length)) { + const last = stack.pop(); + last[2] = line; + last[3] = column; + continue; + } + const kind = decodeInteger(reader, 0); + const fields = decodeInteger(reader, 0); + const hasName = fields & 1; + const scope = hasName ? [line, column, 0, 0, kind, decodeInteger(reader, 0)] : [line, column, 0, 0, kind]; + let vars = EMPTY; + if (hasMoreVlq(reader, length)) { + vars = []; + do { + const varsIndex = decodeInteger(reader, 0); + vars.push(varsIndex); + } while (hasMoreVlq(reader, length)); + } + scope.vars = vars; + scopes.push(scope); + stack.push(scope); + } + return scopes; +} +function encodeOriginalScopes(scopes) { + const writer = new StringWriter(); + for (let i = 0; i < scopes.length; ) { + i = _encodeOriginalScopes(scopes, i, writer, [0]); + } + return writer.flush(); +} +function _encodeOriginalScopes(scopes, index, writer, state) { + const scope = scopes[index]; + const { 0: startLine, 1: startColumn, 2: endLine, 3: endColumn, 4: kind, vars } = scope; + if (index > 0) writer.write(comma); + state[0] = encodeInteger(writer, startLine, state[0]); + encodeInteger(writer, startColumn, 0); + encodeInteger(writer, kind, 0); + const fields = scope.length === 6 ? 1 : 0; + encodeInteger(writer, fields, 0); + if (scope.length === 6) encodeInteger(writer, scope[5], 0); + for (const v of vars) { + encodeInteger(writer, v, 0); + } + for (index++; index < scopes.length; ) { + const next = scopes[index]; + const { 0: l, 1: c } = next; + if (l > endLine || l === endLine && c >= endColumn) { + break; + } + index = _encodeOriginalScopes(scopes, index, writer, state); + } + writer.write(comma); + state[0] = encodeInteger(writer, endLine, state[0]); + encodeInteger(writer, endColumn, 0); + return index; +} +function decodeGeneratedRanges(input) { + const { length } = input; + const reader = new StringReader(input); + const ranges = []; + const stack = []; + let genLine = 0; + let definitionSourcesIndex = 0; + let definitionScopeIndex = 0; + let callsiteSourcesIndex = 0; + let callsiteLine = 0; + let callsiteColumn = 0; + let bindingLine = 0; + let bindingColumn = 0; + do { + const semi = reader.indexOf(";"); + let genColumn = 0; + for (; reader.pos < semi; reader.pos++) { + genColumn = decodeInteger(reader, genColumn); + if (!hasMoreVlq(reader, semi)) { + const last = stack.pop(); + last[2] = genLine; + last[3] = genColumn; + continue; + } + const fields = decodeInteger(reader, 0); + const hasDefinition = fields & 1; + const hasCallsite = fields & 2; + const hasScope = fields & 4; + let callsite = null; + let bindings = EMPTY; + let range; + if (hasDefinition) { + const defSourcesIndex = decodeInteger(reader, definitionSourcesIndex); + definitionScopeIndex = decodeInteger( + reader, + definitionSourcesIndex === defSourcesIndex ? definitionScopeIndex : 0 + ); + definitionSourcesIndex = defSourcesIndex; + range = [genLine, genColumn, 0, 0, defSourcesIndex, definitionScopeIndex]; + } else { + range = [genLine, genColumn, 0, 0]; + } + range.isScope = !!hasScope; + if (hasCallsite) { + const prevCsi = callsiteSourcesIndex; + const prevLine = callsiteLine; + callsiteSourcesIndex = decodeInteger(reader, callsiteSourcesIndex); + const sameSource = prevCsi === callsiteSourcesIndex; + callsiteLine = decodeInteger(reader, sameSource ? callsiteLine : 0); + callsiteColumn = decodeInteger( + reader, + sameSource && prevLine === callsiteLine ? callsiteColumn : 0 + ); + callsite = [callsiteSourcesIndex, callsiteLine, callsiteColumn]; + } + range.callsite = callsite; + if (hasMoreVlq(reader, semi)) { + bindings = []; + do { + bindingLine = genLine; + bindingColumn = genColumn; + const expressionsCount = decodeInteger(reader, 0); + let expressionRanges; + if (expressionsCount < -1) { + expressionRanges = [[decodeInteger(reader, 0)]]; + for (let i = -1; i > expressionsCount; i--) { + const prevBl = bindingLine; + bindingLine = decodeInteger(reader, bindingLine); + bindingColumn = decodeInteger(reader, bindingLine === prevBl ? bindingColumn : 0); + const expression = decodeInteger(reader, 0); + expressionRanges.push([expression, bindingLine, bindingColumn]); + } + } else { + expressionRanges = [[expressionsCount]]; + } + bindings.push(expressionRanges); + } while (hasMoreVlq(reader, semi)); + } + range.bindings = bindings; + ranges.push(range); + stack.push(range); + } + genLine++; + reader.pos = semi + 1; + } while (reader.pos < length); + return ranges; +} +function encodeGeneratedRanges(ranges) { + if (ranges.length === 0) return ""; + const writer = new StringWriter(); + for (let i = 0; i < ranges.length; ) { + i = _encodeGeneratedRanges(ranges, i, writer, [0, 0, 0, 0, 0, 0, 0]); + } + return writer.flush(); +} +function _encodeGeneratedRanges(ranges, index, writer, state) { + const range = ranges[index]; + const { + 0: startLine, + 1: startColumn, + 2: endLine, + 3: endColumn, + isScope, + callsite, + bindings + } = range; + if (state[0] < startLine) { + catchupLine(writer, state[0], startLine); + state[0] = startLine; + state[1] = 0; + } else if (index > 0) { + writer.write(comma); + } + state[1] = encodeInteger(writer, range[1], state[1]); + const fields = (range.length === 6 ? 1 : 0) | (callsite ? 2 : 0) | (isScope ? 4 : 0); + encodeInteger(writer, fields, 0); + if (range.length === 6) { + const { 4: sourcesIndex, 5: scopesIndex } = range; + if (sourcesIndex !== state[2]) { + state[3] = 0; + } + state[2] = encodeInteger(writer, sourcesIndex, state[2]); + state[3] = encodeInteger(writer, scopesIndex, state[3]); + } + if (callsite) { + const { 0: sourcesIndex, 1: callLine, 2: callColumn } = range.callsite; + if (sourcesIndex !== state[4]) { + state[5] = 0; + state[6] = 0; + } else if (callLine !== state[5]) { + state[6] = 0; + } + state[4] = encodeInteger(writer, sourcesIndex, state[4]); + state[5] = encodeInteger(writer, callLine, state[5]); + state[6] = encodeInteger(writer, callColumn, state[6]); + } + if (bindings) { + for (const binding of bindings) { + if (binding.length > 1) encodeInteger(writer, -binding.length, 0); + const expression = binding[0][0]; + encodeInteger(writer, expression, 0); + let bindingStartLine = startLine; + let bindingStartColumn = startColumn; + for (let i = 1; i < binding.length; i++) { + const expRange = binding[i]; + bindingStartLine = encodeInteger(writer, expRange[1], bindingStartLine); + bindingStartColumn = encodeInteger(writer, expRange[2], bindingStartColumn); + encodeInteger(writer, expRange[0], 0); + } + } + } + for (index++; index < ranges.length; ) { + const next = ranges[index]; + const { 0: l, 1: c } = next; + if (l > endLine || l === endLine && c >= endColumn) { + break; + } + index = _encodeGeneratedRanges(ranges, index, writer, state); + } + if (state[0] < endLine) { + catchupLine(writer, state[0], endLine); + state[0] = endLine; + state[1] = 0; + } else { + writer.write(comma); + } + state[1] = encodeInteger(writer, endColumn, state[1]); + return index; +} +function catchupLine(writer, lastLine, line) { + do { + writer.write(semicolon); + } while (++lastLine < line); +} + +// src/sourcemap-codec.ts +function decode(mappings) { + const { length } = mappings; + const reader = new StringReader(mappings); + const decoded = []; + let genColumn = 0; + let sourcesIndex = 0; + let sourceLine = 0; + let sourceColumn = 0; + let namesIndex = 0; + do { + const semi = reader.indexOf(";"); + const line = []; + let sorted = true; + let lastCol = 0; + genColumn = 0; + while (reader.pos < semi) { + let seg; + genColumn = decodeInteger(reader, genColumn); + if (genColumn < lastCol) sorted = false; + lastCol = genColumn; + if (hasMoreVlq(reader, semi)) { + sourcesIndex = decodeInteger(reader, sourcesIndex); + sourceLine = decodeInteger(reader, sourceLine); + sourceColumn = decodeInteger(reader, sourceColumn); + if (hasMoreVlq(reader, semi)) { + namesIndex = decodeInteger(reader, namesIndex); + seg = [genColumn, sourcesIndex, sourceLine, sourceColumn, namesIndex]; + } else { + seg = [genColumn, sourcesIndex, sourceLine, sourceColumn]; + } + } else { + seg = [genColumn]; + } + line.push(seg); + reader.pos++; + } + if (!sorted) sort(line); + decoded.push(line); + reader.pos = semi + 1; + } while (reader.pos <= length); + return decoded; +} +function sort(line) { + line.sort(sortComparator); +} +function sortComparator(a, b) { + return a[0] - b[0]; +} +function encode(decoded) { + const writer = new StringWriter(); + let sourcesIndex = 0; + let sourceLine = 0; + let sourceColumn = 0; + let namesIndex = 0; + for (let i = 0; i < decoded.length; i++) { + const line = decoded[i]; + if (i > 0) writer.write(semicolon); + if (line.length === 0) continue; + let genColumn = 0; + for (let j = 0; j < line.length; j++) { + const segment = line[j]; + if (j > 0) writer.write(comma); + genColumn = encodeInteger(writer, segment[0], genColumn); + if (segment.length === 1) continue; + sourcesIndex = encodeInteger(writer, segment[1], sourcesIndex); + sourceLine = encodeInteger(writer, segment[2], sourceLine); + sourceColumn = encodeInteger(writer, segment[3], sourceColumn); + if (segment.length === 4) continue; + namesIndex = encodeInteger(writer, segment[4], namesIndex); + } + } + return writer.flush(); +} +export { + decode, + decodeGeneratedRanges, + decodeOriginalScopes, + encode, + encodeGeneratedRanges, + encodeOriginalScopes +}; +//# sourceMappingURL=sourcemap-codec.mjs.map diff --git a/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.mjs.map b/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.mjs.map new file mode 100644 index 0000000000..c276844b25 --- /dev/null +++ b/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.mjs.map @@ -0,0 +1,6 @@ +{ + "version": 3, + "sources": ["../src/vlq.ts", "../src/strings.ts", "../src/scopes.ts", "../src/sourcemap-codec.ts"], + "mappings": "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", + "names": [] +} diff --git a/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.umd.js b/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.umd.js new file mode 100644 index 0000000000..2d8e459f3e --- /dev/null +++ b/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.umd.js @@ -0,0 +1,464 @@ +(function (global, factory) { + if (typeof exports === 'object' && typeof module !== 'undefined') { + factory(module); + module.exports = def(module); + } else if (typeof define === 'function' && define.amd) { + define(['module'], function(mod) { + factory.apply(this, arguments); + mod.exports = def(mod); + }); + } else { + const mod = { exports: {} }; + factory(mod); + global = typeof globalThis !== 'undefined' ? globalThis : global || self; + global.sourcemapCodec = def(mod); + } + function def(m) { return 'default' in m.exports ? m.exports.default : m.exports; } +})(this, (function (module) { +"use strict"; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/sourcemap-codec.ts +var sourcemap_codec_exports = {}; +__export(sourcemap_codec_exports, { + decode: () => decode, + decodeGeneratedRanges: () => decodeGeneratedRanges, + decodeOriginalScopes: () => decodeOriginalScopes, + encode: () => encode, + encodeGeneratedRanges: () => encodeGeneratedRanges, + encodeOriginalScopes: () => encodeOriginalScopes +}); +module.exports = __toCommonJS(sourcemap_codec_exports); + +// src/vlq.ts +var comma = ",".charCodeAt(0); +var semicolon = ";".charCodeAt(0); +var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; +var intToChar = new Uint8Array(64); +var charToInt = new Uint8Array(128); +for (let i = 0; i < chars.length; i++) { + const c = chars.charCodeAt(i); + intToChar[i] = c; + charToInt[c] = i; +} +function decodeInteger(reader, relative) { + let value = 0; + let shift = 0; + let integer = 0; + do { + const c = reader.next(); + integer = charToInt[c]; + value |= (integer & 31) << shift; + shift += 5; + } while (integer & 32); + const shouldNegate = value & 1; + value >>>= 1; + if (shouldNegate) { + value = -2147483648 | -value; + } + return relative + value; +} +function encodeInteger(builder, num, relative) { + let delta = num - relative; + delta = delta < 0 ? -delta << 1 | 1 : delta << 1; + do { + let clamped = delta & 31; + delta >>>= 5; + if (delta > 0) clamped |= 32; + builder.write(intToChar[clamped]); + } while (delta > 0); + return num; +} +function hasMoreVlq(reader, max) { + if (reader.pos >= max) return false; + return reader.peek() !== comma; +} + +// src/strings.ts +var bufLength = 1024 * 16; +var td = typeof TextDecoder !== "undefined" ? /* @__PURE__ */ new TextDecoder() : typeof Buffer !== "undefined" ? { + decode(buf) { + const out = Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength); + return out.toString(); + } +} : { + decode(buf) { + let out = ""; + for (let i = 0; i < buf.length; i++) { + out += String.fromCharCode(buf[i]); + } + return out; + } +}; +var StringWriter = class { + constructor() { + this.pos = 0; + this.out = ""; + this.buffer = new Uint8Array(bufLength); + } + write(v) { + const { buffer } = this; + buffer[this.pos++] = v; + if (this.pos === bufLength) { + this.out += td.decode(buffer); + this.pos = 0; + } + } + flush() { + const { buffer, out, pos } = this; + return pos > 0 ? out + td.decode(buffer.subarray(0, pos)) : out; + } +}; +var StringReader = class { + constructor(buffer) { + this.pos = 0; + this.buffer = buffer; + } + next() { + return this.buffer.charCodeAt(this.pos++); + } + peek() { + return this.buffer.charCodeAt(this.pos); + } + indexOf(char) { + const { buffer, pos } = this; + const idx = buffer.indexOf(char, pos); + return idx === -1 ? buffer.length : idx; + } +}; + +// src/scopes.ts +var EMPTY = []; +function decodeOriginalScopes(input) { + const { length } = input; + const reader = new StringReader(input); + const scopes = []; + const stack = []; + let line = 0; + for (; reader.pos < length; reader.pos++) { + line = decodeInteger(reader, line); + const column = decodeInteger(reader, 0); + if (!hasMoreVlq(reader, length)) { + const last = stack.pop(); + last[2] = line; + last[3] = column; + continue; + } + const kind = decodeInteger(reader, 0); + const fields = decodeInteger(reader, 0); + const hasName = fields & 1; + const scope = hasName ? [line, column, 0, 0, kind, decodeInteger(reader, 0)] : [line, column, 0, 0, kind]; + let vars = EMPTY; + if (hasMoreVlq(reader, length)) { + vars = []; + do { + const varsIndex = decodeInteger(reader, 0); + vars.push(varsIndex); + } while (hasMoreVlq(reader, length)); + } + scope.vars = vars; + scopes.push(scope); + stack.push(scope); + } + return scopes; +} +function encodeOriginalScopes(scopes) { + const writer = new StringWriter(); + for (let i = 0; i < scopes.length; ) { + i = _encodeOriginalScopes(scopes, i, writer, [0]); + } + return writer.flush(); +} +function _encodeOriginalScopes(scopes, index, writer, state) { + const scope = scopes[index]; + const { 0: startLine, 1: startColumn, 2: endLine, 3: endColumn, 4: kind, vars } = scope; + if (index > 0) writer.write(comma); + state[0] = encodeInteger(writer, startLine, state[0]); + encodeInteger(writer, startColumn, 0); + encodeInteger(writer, kind, 0); + const fields = scope.length === 6 ? 1 : 0; + encodeInteger(writer, fields, 0); + if (scope.length === 6) encodeInteger(writer, scope[5], 0); + for (const v of vars) { + encodeInteger(writer, v, 0); + } + for (index++; index < scopes.length; ) { + const next = scopes[index]; + const { 0: l, 1: c } = next; + if (l > endLine || l === endLine && c >= endColumn) { + break; + } + index = _encodeOriginalScopes(scopes, index, writer, state); + } + writer.write(comma); + state[0] = encodeInteger(writer, endLine, state[0]); + encodeInteger(writer, endColumn, 0); + return index; +} +function decodeGeneratedRanges(input) { + const { length } = input; + const reader = new StringReader(input); + const ranges = []; + const stack = []; + let genLine = 0; + let definitionSourcesIndex = 0; + let definitionScopeIndex = 0; + let callsiteSourcesIndex = 0; + let callsiteLine = 0; + let callsiteColumn = 0; + let bindingLine = 0; + let bindingColumn = 0; + do { + const semi = reader.indexOf(";"); + let genColumn = 0; + for (; reader.pos < semi; reader.pos++) { + genColumn = decodeInteger(reader, genColumn); + if (!hasMoreVlq(reader, semi)) { + const last = stack.pop(); + last[2] = genLine; + last[3] = genColumn; + continue; + } + const fields = decodeInteger(reader, 0); + const hasDefinition = fields & 1; + const hasCallsite = fields & 2; + const hasScope = fields & 4; + let callsite = null; + let bindings = EMPTY; + let range; + if (hasDefinition) { + const defSourcesIndex = decodeInteger(reader, definitionSourcesIndex); + definitionScopeIndex = decodeInteger( + reader, + definitionSourcesIndex === defSourcesIndex ? definitionScopeIndex : 0 + ); + definitionSourcesIndex = defSourcesIndex; + range = [genLine, genColumn, 0, 0, defSourcesIndex, definitionScopeIndex]; + } else { + range = [genLine, genColumn, 0, 0]; + } + range.isScope = !!hasScope; + if (hasCallsite) { + const prevCsi = callsiteSourcesIndex; + const prevLine = callsiteLine; + callsiteSourcesIndex = decodeInteger(reader, callsiteSourcesIndex); + const sameSource = prevCsi === callsiteSourcesIndex; + callsiteLine = decodeInteger(reader, sameSource ? callsiteLine : 0); + callsiteColumn = decodeInteger( + reader, + sameSource && prevLine === callsiteLine ? callsiteColumn : 0 + ); + callsite = [callsiteSourcesIndex, callsiteLine, callsiteColumn]; + } + range.callsite = callsite; + if (hasMoreVlq(reader, semi)) { + bindings = []; + do { + bindingLine = genLine; + bindingColumn = genColumn; + const expressionsCount = decodeInteger(reader, 0); + let expressionRanges; + if (expressionsCount < -1) { + expressionRanges = [[decodeInteger(reader, 0)]]; + for (let i = -1; i > expressionsCount; i--) { + const prevBl = bindingLine; + bindingLine = decodeInteger(reader, bindingLine); + bindingColumn = decodeInteger(reader, bindingLine === prevBl ? bindingColumn : 0); + const expression = decodeInteger(reader, 0); + expressionRanges.push([expression, bindingLine, bindingColumn]); + } + } else { + expressionRanges = [[expressionsCount]]; + } + bindings.push(expressionRanges); + } while (hasMoreVlq(reader, semi)); + } + range.bindings = bindings; + ranges.push(range); + stack.push(range); + } + genLine++; + reader.pos = semi + 1; + } while (reader.pos < length); + return ranges; +} +function encodeGeneratedRanges(ranges) { + if (ranges.length === 0) return ""; + const writer = new StringWriter(); + for (let i = 0; i < ranges.length; ) { + i = _encodeGeneratedRanges(ranges, i, writer, [0, 0, 0, 0, 0, 0, 0]); + } + return writer.flush(); +} +function _encodeGeneratedRanges(ranges, index, writer, state) { + const range = ranges[index]; + const { + 0: startLine, + 1: startColumn, + 2: endLine, + 3: endColumn, + isScope, + callsite, + bindings + } = range; + if (state[0] < startLine) { + catchupLine(writer, state[0], startLine); + state[0] = startLine; + state[1] = 0; + } else if (index > 0) { + writer.write(comma); + } + state[1] = encodeInteger(writer, range[1], state[1]); + const fields = (range.length === 6 ? 1 : 0) | (callsite ? 2 : 0) | (isScope ? 4 : 0); + encodeInteger(writer, fields, 0); + if (range.length === 6) { + const { 4: sourcesIndex, 5: scopesIndex } = range; + if (sourcesIndex !== state[2]) { + state[3] = 0; + } + state[2] = encodeInteger(writer, sourcesIndex, state[2]); + state[3] = encodeInteger(writer, scopesIndex, state[3]); + } + if (callsite) { + const { 0: sourcesIndex, 1: callLine, 2: callColumn } = range.callsite; + if (sourcesIndex !== state[4]) { + state[5] = 0; + state[6] = 0; + } else if (callLine !== state[5]) { + state[6] = 0; + } + state[4] = encodeInteger(writer, sourcesIndex, state[4]); + state[5] = encodeInteger(writer, callLine, state[5]); + state[6] = encodeInteger(writer, callColumn, state[6]); + } + if (bindings) { + for (const binding of bindings) { + if (binding.length > 1) encodeInteger(writer, -binding.length, 0); + const expression = binding[0][0]; + encodeInteger(writer, expression, 0); + let bindingStartLine = startLine; + let bindingStartColumn = startColumn; + for (let i = 1; i < binding.length; i++) { + const expRange = binding[i]; + bindingStartLine = encodeInteger(writer, expRange[1], bindingStartLine); + bindingStartColumn = encodeInteger(writer, expRange[2], bindingStartColumn); + encodeInteger(writer, expRange[0], 0); + } + } + } + for (index++; index < ranges.length; ) { + const next = ranges[index]; + const { 0: l, 1: c } = next; + if (l > endLine || l === endLine && c >= endColumn) { + break; + } + index = _encodeGeneratedRanges(ranges, index, writer, state); + } + if (state[0] < endLine) { + catchupLine(writer, state[0], endLine); + state[0] = endLine; + state[1] = 0; + } else { + writer.write(comma); + } + state[1] = encodeInteger(writer, endColumn, state[1]); + return index; +} +function catchupLine(writer, lastLine, line) { + do { + writer.write(semicolon); + } while (++lastLine < line); +} + +// src/sourcemap-codec.ts +function decode(mappings) { + const { length } = mappings; + const reader = new StringReader(mappings); + const decoded = []; + let genColumn = 0; + let sourcesIndex = 0; + let sourceLine = 0; + let sourceColumn = 0; + let namesIndex = 0; + do { + const semi = reader.indexOf(";"); + const line = []; + let sorted = true; + let lastCol = 0; + genColumn = 0; + while (reader.pos < semi) { + let seg; + genColumn = decodeInteger(reader, genColumn); + if (genColumn < lastCol) sorted = false; + lastCol = genColumn; + if (hasMoreVlq(reader, semi)) { + sourcesIndex = decodeInteger(reader, sourcesIndex); + sourceLine = decodeInteger(reader, sourceLine); + sourceColumn = decodeInteger(reader, sourceColumn); + if (hasMoreVlq(reader, semi)) { + namesIndex = decodeInteger(reader, namesIndex); + seg = [genColumn, sourcesIndex, sourceLine, sourceColumn, namesIndex]; + } else { + seg = [genColumn, sourcesIndex, sourceLine, sourceColumn]; + } + } else { + seg = [genColumn]; + } + line.push(seg); + reader.pos++; + } + if (!sorted) sort(line); + decoded.push(line); + reader.pos = semi + 1; + } while (reader.pos <= length); + return decoded; +} +function sort(line) { + line.sort(sortComparator); +} +function sortComparator(a, b) { + return a[0] - b[0]; +} +function encode(decoded) { + const writer = new StringWriter(); + let sourcesIndex = 0; + let sourceLine = 0; + let sourceColumn = 0; + let namesIndex = 0; + for (let i = 0; i < decoded.length; i++) { + const line = decoded[i]; + if (i > 0) writer.write(semicolon); + if (line.length === 0) continue; + let genColumn = 0; + for (let j = 0; j < line.length; j++) { + const segment = line[j]; + if (j > 0) writer.write(comma); + genColumn = encodeInteger(writer, segment[0], genColumn); + if (segment.length === 1) continue; + sourcesIndex = encodeInteger(writer, segment[1], sourcesIndex); + sourceLine = encodeInteger(writer, segment[2], sourceLine); + sourceColumn = encodeInteger(writer, segment[3], sourceColumn); + if (segment.length === 4) continue; + namesIndex = encodeInteger(writer, segment[4], namesIndex); + } + } + return writer.flush(); +} +})); +//# sourceMappingURL=sourcemap-codec.umd.js.map diff --git a/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.umd.js.map b/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.umd.js.map new file mode 100644 index 0000000000..abc18d286e --- /dev/null +++ b/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.umd.js.map @@ -0,0 +1,6 @@ +{ + "version": 3, + "sources": ["../src/sourcemap-codec.ts", "../src/vlq.ts", "../src/strings.ts", "../src/scopes.ts"], + "mappings": "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", + "names": [] +} diff --git a/node_modules/@jridgewell/sourcemap-codec/package.json b/node_modules/@jridgewell/sourcemap-codec/package.json new file mode 100644 index 0000000000..da55137644 --- /dev/null +++ b/node_modules/@jridgewell/sourcemap-codec/package.json @@ -0,0 +1,63 @@ +{ + "name": "@jridgewell/sourcemap-codec", + "version": "1.5.5", + "description": "Encode/decode sourcemap mappings", + "keywords": [ + "sourcemap", + "vlq" + ], + "main": "dist/sourcemap-codec.umd.js", + "module": "dist/sourcemap-codec.mjs", + "types": "types/sourcemap-codec.d.cts", + "files": [ + "dist", + "src", + "types" + ], + "exports": { + ".": [ + { + "import": { + "types": "./types/sourcemap-codec.d.mts", + "default": "./dist/sourcemap-codec.mjs" + }, + "default": { + "types": "./types/sourcemap-codec.d.cts", + "default": "./dist/sourcemap-codec.umd.js" + } + }, + "./dist/sourcemap-codec.umd.js" + ], + "./package.json": "./package.json" + }, + "scripts": { + "benchmark": "run-s build:code benchmark:*", + "benchmark:install": "cd benchmark && npm install", + "benchmark:only": "node --expose-gc benchmark/index.js", + "build": "run-s -n build:code build:types", + "build:code": "node ../../esbuild.mjs sourcemap-codec.ts", + "build:types": "run-s build:types:force build:types:emit build:types:mts", + "build:types:force": "rimraf tsconfig.build.tsbuildinfo", + "build:types:emit": "tsc --project tsconfig.build.json", + "build:types:mts": "node ../../mts-types.mjs", + "clean": "run-s -n clean:code clean:types", + "clean:code": "tsc --build --clean tsconfig.build.json", + "clean:types": "rimraf dist types", + "test": "run-s -n test:types test:only test:format", + "test:format": "prettier --check '{src,test}/**/*.ts'", + "test:only": "mocha", + "test:types": "eslint '{src,test}/**/*.ts'", + "lint": "run-s -n lint:types lint:format", + "lint:format": "npm run test:format -- --write", + "lint:types": "npm run test:types -- --fix", + "prepublishOnly": "npm run-s -n build test" + }, + "homepage": "https://github.com/jridgewell/sourcemaps/tree/main/packages/sourcemap-codec", + "repository": { + "type": "git", + "url": "git+https://github.com/jridgewell/sourcemaps.git", + "directory": "packages/sourcemap-codec" + }, + "author": "Justin Ridgewell ", + "license": "MIT" +} diff --git a/node_modules/@jridgewell/sourcemap-codec/src/scopes.ts b/node_modules/@jridgewell/sourcemap-codec/src/scopes.ts new file mode 100644 index 0000000000..d194c2f0a6 --- /dev/null +++ b/node_modules/@jridgewell/sourcemap-codec/src/scopes.ts @@ -0,0 +1,345 @@ +import { StringReader, StringWriter } from './strings'; +import { comma, decodeInteger, encodeInteger, hasMoreVlq, semicolon } from './vlq'; + +const EMPTY: any[] = []; + +type Line = number; +type Column = number; +type Kind = number; +type Name = number; +type Var = number; +type SourcesIndex = number; +type ScopesIndex = number; + +type Mix = (A & O) | (B & O); + +export type OriginalScope = Mix< + [Line, Column, Line, Column, Kind], + [Line, Column, Line, Column, Kind, Name], + { vars: Var[] } +>; + +export type GeneratedRange = Mix< + [Line, Column, Line, Column], + [Line, Column, Line, Column, SourcesIndex, ScopesIndex], + { + callsite: CallSite | null; + bindings: Binding[]; + isScope: boolean; + } +>; +export type CallSite = [SourcesIndex, Line, Column]; +type Binding = BindingExpressionRange[]; +export type BindingExpressionRange = [Name] | [Name, Line, Column]; + +export function decodeOriginalScopes(input: string): OriginalScope[] { + const { length } = input; + const reader = new StringReader(input); + const scopes: OriginalScope[] = []; + const stack: OriginalScope[] = []; + let line = 0; + + for (; reader.pos < length; reader.pos++) { + line = decodeInteger(reader, line); + const column = decodeInteger(reader, 0); + + if (!hasMoreVlq(reader, length)) { + const last = stack.pop()!; + last[2] = line; + last[3] = column; + continue; + } + + const kind = decodeInteger(reader, 0); + const fields = decodeInteger(reader, 0); + const hasName = fields & 0b0001; + + const scope: OriginalScope = ( + hasName ? [line, column, 0, 0, kind, decodeInteger(reader, 0)] : [line, column, 0, 0, kind] + ) as OriginalScope; + + let vars: Var[] = EMPTY; + if (hasMoreVlq(reader, length)) { + vars = []; + do { + const varsIndex = decodeInteger(reader, 0); + vars.push(varsIndex); + } while (hasMoreVlq(reader, length)); + } + scope.vars = vars; + + scopes.push(scope); + stack.push(scope); + } + + return scopes; +} + +export function encodeOriginalScopes(scopes: OriginalScope[]): string { + const writer = new StringWriter(); + + for (let i = 0; i < scopes.length; ) { + i = _encodeOriginalScopes(scopes, i, writer, [0]); + } + + return writer.flush(); +} + +function _encodeOriginalScopes( + scopes: OriginalScope[], + index: number, + writer: StringWriter, + state: [ + number, // GenColumn + ], +): number { + const scope = scopes[index]; + const { 0: startLine, 1: startColumn, 2: endLine, 3: endColumn, 4: kind, vars } = scope; + + if (index > 0) writer.write(comma); + + state[0] = encodeInteger(writer, startLine, state[0]); + encodeInteger(writer, startColumn, 0); + encodeInteger(writer, kind, 0); + + const fields = scope.length === 6 ? 0b0001 : 0; + encodeInteger(writer, fields, 0); + if (scope.length === 6) encodeInteger(writer, scope[5], 0); + + for (const v of vars) { + encodeInteger(writer, v, 0); + } + + for (index++; index < scopes.length; ) { + const next = scopes[index]; + const { 0: l, 1: c } = next; + if (l > endLine || (l === endLine && c >= endColumn)) { + break; + } + index = _encodeOriginalScopes(scopes, index, writer, state); + } + + writer.write(comma); + state[0] = encodeInteger(writer, endLine, state[0]); + encodeInteger(writer, endColumn, 0); + + return index; +} + +export function decodeGeneratedRanges(input: string): GeneratedRange[] { + const { length } = input; + const reader = new StringReader(input); + const ranges: GeneratedRange[] = []; + const stack: GeneratedRange[] = []; + + let genLine = 0; + let definitionSourcesIndex = 0; + let definitionScopeIndex = 0; + let callsiteSourcesIndex = 0; + let callsiteLine = 0; + let callsiteColumn = 0; + let bindingLine = 0; + let bindingColumn = 0; + + do { + const semi = reader.indexOf(';'); + let genColumn = 0; + + for (; reader.pos < semi; reader.pos++) { + genColumn = decodeInteger(reader, genColumn); + + if (!hasMoreVlq(reader, semi)) { + const last = stack.pop()!; + last[2] = genLine; + last[3] = genColumn; + continue; + } + + const fields = decodeInteger(reader, 0); + const hasDefinition = fields & 0b0001; + const hasCallsite = fields & 0b0010; + const hasScope = fields & 0b0100; + + let callsite: CallSite | null = null; + let bindings: Binding[] = EMPTY; + let range: GeneratedRange; + if (hasDefinition) { + const defSourcesIndex = decodeInteger(reader, definitionSourcesIndex); + definitionScopeIndex = decodeInteger( + reader, + definitionSourcesIndex === defSourcesIndex ? definitionScopeIndex : 0, + ); + + definitionSourcesIndex = defSourcesIndex; + range = [genLine, genColumn, 0, 0, defSourcesIndex, definitionScopeIndex] as GeneratedRange; + } else { + range = [genLine, genColumn, 0, 0] as GeneratedRange; + } + + range.isScope = !!hasScope; + + if (hasCallsite) { + const prevCsi = callsiteSourcesIndex; + const prevLine = callsiteLine; + callsiteSourcesIndex = decodeInteger(reader, callsiteSourcesIndex); + const sameSource = prevCsi === callsiteSourcesIndex; + callsiteLine = decodeInteger(reader, sameSource ? callsiteLine : 0); + callsiteColumn = decodeInteger( + reader, + sameSource && prevLine === callsiteLine ? callsiteColumn : 0, + ); + + callsite = [callsiteSourcesIndex, callsiteLine, callsiteColumn]; + } + range.callsite = callsite; + + if (hasMoreVlq(reader, semi)) { + bindings = []; + do { + bindingLine = genLine; + bindingColumn = genColumn; + const expressionsCount = decodeInteger(reader, 0); + let expressionRanges: BindingExpressionRange[]; + if (expressionsCount < -1) { + expressionRanges = [[decodeInteger(reader, 0)]]; + for (let i = -1; i > expressionsCount; i--) { + const prevBl = bindingLine; + bindingLine = decodeInteger(reader, bindingLine); + bindingColumn = decodeInteger(reader, bindingLine === prevBl ? bindingColumn : 0); + const expression = decodeInteger(reader, 0); + expressionRanges.push([expression, bindingLine, bindingColumn]); + } + } else { + expressionRanges = [[expressionsCount]]; + } + bindings.push(expressionRanges); + } while (hasMoreVlq(reader, semi)); + } + range.bindings = bindings; + + ranges.push(range); + stack.push(range); + } + + genLine++; + reader.pos = semi + 1; + } while (reader.pos < length); + + return ranges; +} + +export function encodeGeneratedRanges(ranges: GeneratedRange[]): string { + if (ranges.length === 0) return ''; + + const writer = new StringWriter(); + + for (let i = 0; i < ranges.length; ) { + i = _encodeGeneratedRanges(ranges, i, writer, [0, 0, 0, 0, 0, 0, 0]); + } + + return writer.flush(); +} + +function _encodeGeneratedRanges( + ranges: GeneratedRange[], + index: number, + writer: StringWriter, + state: [ + number, // GenLine + number, // GenColumn + number, // DefSourcesIndex + number, // DefScopesIndex + number, // CallSourcesIndex + number, // CallLine + number, // CallColumn + ], +): number { + const range = ranges[index]; + const { + 0: startLine, + 1: startColumn, + 2: endLine, + 3: endColumn, + isScope, + callsite, + bindings, + } = range; + + if (state[0] < startLine) { + catchupLine(writer, state[0], startLine); + state[0] = startLine; + state[1] = 0; + } else if (index > 0) { + writer.write(comma); + } + + state[1] = encodeInteger(writer, range[1], state[1]); + + const fields = + (range.length === 6 ? 0b0001 : 0) | (callsite ? 0b0010 : 0) | (isScope ? 0b0100 : 0); + encodeInteger(writer, fields, 0); + + if (range.length === 6) { + const { 4: sourcesIndex, 5: scopesIndex } = range; + if (sourcesIndex !== state[2]) { + state[3] = 0; + } + state[2] = encodeInteger(writer, sourcesIndex, state[2]); + state[3] = encodeInteger(writer, scopesIndex, state[3]); + } + + if (callsite) { + const { 0: sourcesIndex, 1: callLine, 2: callColumn } = range.callsite!; + if (sourcesIndex !== state[4]) { + state[5] = 0; + state[6] = 0; + } else if (callLine !== state[5]) { + state[6] = 0; + } + state[4] = encodeInteger(writer, sourcesIndex, state[4]); + state[5] = encodeInteger(writer, callLine, state[5]); + state[6] = encodeInteger(writer, callColumn, state[6]); + } + + if (bindings) { + for (const binding of bindings) { + if (binding.length > 1) encodeInteger(writer, -binding.length, 0); + const expression = binding[0][0]; + encodeInteger(writer, expression, 0); + let bindingStartLine = startLine; + let bindingStartColumn = startColumn; + for (let i = 1; i < binding.length; i++) { + const expRange = binding[i]; + bindingStartLine = encodeInteger(writer, expRange[1]!, bindingStartLine); + bindingStartColumn = encodeInteger(writer, expRange[2]!, bindingStartColumn); + encodeInteger(writer, expRange[0]!, 0); + } + } + } + + for (index++; index < ranges.length; ) { + const next = ranges[index]; + const { 0: l, 1: c } = next; + if (l > endLine || (l === endLine && c >= endColumn)) { + break; + } + index = _encodeGeneratedRanges(ranges, index, writer, state); + } + + if (state[0] < endLine) { + catchupLine(writer, state[0], endLine); + state[0] = endLine; + state[1] = 0; + } else { + writer.write(comma); + } + state[1] = encodeInteger(writer, endColumn, state[1]); + + return index; +} + +function catchupLine(writer: StringWriter, lastLine: number, line: number) { + do { + writer.write(semicolon); + } while (++lastLine < line); +} diff --git a/node_modules/@jridgewell/sourcemap-codec/src/sourcemap-codec.ts b/node_modules/@jridgewell/sourcemap-codec/src/sourcemap-codec.ts new file mode 100644 index 0000000000..a81f894dc1 --- /dev/null +++ b/node_modules/@jridgewell/sourcemap-codec/src/sourcemap-codec.ts @@ -0,0 +1,111 @@ +import { comma, decodeInteger, encodeInteger, hasMoreVlq, semicolon } from './vlq'; +import { StringWriter, StringReader } from './strings'; + +export { + decodeOriginalScopes, + encodeOriginalScopes, + decodeGeneratedRanges, + encodeGeneratedRanges, +} from './scopes'; +export type { OriginalScope, GeneratedRange, CallSite, BindingExpressionRange } from './scopes'; + +export type SourceMapSegment = + | [number] + | [number, number, number, number] + | [number, number, number, number, number]; +export type SourceMapLine = SourceMapSegment[]; +export type SourceMapMappings = SourceMapLine[]; + +export function decode(mappings: string): SourceMapMappings { + const { length } = mappings; + const reader = new StringReader(mappings); + const decoded: SourceMapMappings = []; + let genColumn = 0; + let sourcesIndex = 0; + let sourceLine = 0; + let sourceColumn = 0; + let namesIndex = 0; + + do { + const semi = reader.indexOf(';'); + const line: SourceMapLine = []; + let sorted = true; + let lastCol = 0; + genColumn = 0; + + while (reader.pos < semi) { + let seg: SourceMapSegment; + + genColumn = decodeInteger(reader, genColumn); + if (genColumn < lastCol) sorted = false; + lastCol = genColumn; + + if (hasMoreVlq(reader, semi)) { + sourcesIndex = decodeInteger(reader, sourcesIndex); + sourceLine = decodeInteger(reader, sourceLine); + sourceColumn = decodeInteger(reader, sourceColumn); + + if (hasMoreVlq(reader, semi)) { + namesIndex = decodeInteger(reader, namesIndex); + seg = [genColumn, sourcesIndex, sourceLine, sourceColumn, namesIndex]; + } else { + seg = [genColumn, sourcesIndex, sourceLine, sourceColumn]; + } + } else { + seg = [genColumn]; + } + + line.push(seg); + reader.pos++; + } + + if (!sorted) sort(line); + decoded.push(line); + reader.pos = semi + 1; + } while (reader.pos <= length); + + return decoded; +} + +function sort(line: SourceMapSegment[]) { + line.sort(sortComparator); +} + +function sortComparator(a: SourceMapSegment, b: SourceMapSegment): number { + return a[0] - b[0]; +} + +export function encode(decoded: SourceMapMappings): string; +export function encode(decoded: Readonly): string; +export function encode(decoded: Readonly): string { + const writer = new StringWriter(); + let sourcesIndex = 0; + let sourceLine = 0; + let sourceColumn = 0; + let namesIndex = 0; + + for (let i = 0; i < decoded.length; i++) { + const line = decoded[i]; + if (i > 0) writer.write(semicolon); + if (line.length === 0) continue; + + let genColumn = 0; + + for (let j = 0; j < line.length; j++) { + const segment = line[j]; + if (j > 0) writer.write(comma); + + genColumn = encodeInteger(writer, segment[0], genColumn); + + if (segment.length === 1) continue; + sourcesIndex = encodeInteger(writer, segment[1], sourcesIndex); + sourceLine = encodeInteger(writer, segment[2], sourceLine); + sourceColumn = encodeInteger(writer, segment[3], sourceColumn); + + if (segment.length === 4) continue; + namesIndex = encodeInteger(writer, segment[4], namesIndex); + } + } + + return writer.flush(); +} diff --git a/node_modules/@jridgewell/sourcemap-codec/src/strings.ts b/node_modules/@jridgewell/sourcemap-codec/src/strings.ts new file mode 100644 index 0000000000..d1619650ea --- /dev/null +++ b/node_modules/@jridgewell/sourcemap-codec/src/strings.ts @@ -0,0 +1,65 @@ +const bufLength = 1024 * 16; + +// Provide a fallback for older environments. +const td = + typeof TextDecoder !== 'undefined' + ? /* #__PURE__ */ new TextDecoder() + : typeof Buffer !== 'undefined' + ? { + decode(buf: Uint8Array): string { + const out = Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength); + return out.toString(); + }, + } + : { + decode(buf: Uint8Array): string { + let out = ''; + for (let i = 0; i < buf.length; i++) { + out += String.fromCharCode(buf[i]); + } + return out; + }, + }; + +export class StringWriter { + pos = 0; + private out = ''; + private buffer = new Uint8Array(bufLength); + + write(v: number): void { + const { buffer } = this; + buffer[this.pos++] = v; + if (this.pos === bufLength) { + this.out += td.decode(buffer); + this.pos = 0; + } + } + + flush(): string { + const { buffer, out, pos } = this; + return pos > 0 ? out + td.decode(buffer.subarray(0, pos)) : out; + } +} + +export class StringReader { + pos = 0; + declare private buffer: string; + + constructor(buffer: string) { + this.buffer = buffer; + } + + next(): number { + return this.buffer.charCodeAt(this.pos++); + } + + peek(): number { + return this.buffer.charCodeAt(this.pos); + } + + indexOf(char: string): number { + const { buffer, pos } = this; + const idx = buffer.indexOf(char, pos); + return idx === -1 ? buffer.length : idx; + } +} diff --git a/node_modules/@jridgewell/sourcemap-codec/src/vlq.ts b/node_modules/@jridgewell/sourcemap-codec/src/vlq.ts new file mode 100644 index 0000000000..a42c681511 --- /dev/null +++ b/node_modules/@jridgewell/sourcemap-codec/src/vlq.ts @@ -0,0 +1,55 @@ +import type { StringReader, StringWriter } from './strings'; + +export const comma = ','.charCodeAt(0); +export const semicolon = ';'.charCodeAt(0); + +const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; +const intToChar = new Uint8Array(64); // 64 possible chars. +const charToInt = new Uint8Array(128); // z is 122 in ASCII + +for (let i = 0; i < chars.length; i++) { + const c = chars.charCodeAt(i); + intToChar[i] = c; + charToInt[c] = i; +} + +export function decodeInteger(reader: StringReader, relative: number): number { + let value = 0; + let shift = 0; + let integer = 0; + + do { + const c = reader.next(); + integer = charToInt[c]; + value |= (integer & 31) << shift; + shift += 5; + } while (integer & 32); + + const shouldNegate = value & 1; + value >>>= 1; + + if (shouldNegate) { + value = -0x80000000 | -value; + } + + return relative + value; +} + +export function encodeInteger(builder: StringWriter, num: number, relative: number): number { + let delta = num - relative; + + delta = delta < 0 ? (-delta << 1) | 1 : delta << 1; + do { + let clamped = delta & 0b011111; + delta >>>= 5; + if (delta > 0) clamped |= 0b100000; + builder.write(intToChar[clamped]); + } while (delta > 0); + + return num; +} + +export function hasMoreVlq(reader: StringReader, max: number) { + if (reader.pos >= max) return false; + return reader.peek() !== comma; +} diff --git a/node_modules/@jridgewell/sourcemap-codec/types/scopes.d.cts b/node_modules/@jridgewell/sourcemap-codec/types/scopes.d.cts new file mode 100644 index 0000000000..c583c7560d --- /dev/null +++ b/node_modules/@jridgewell/sourcemap-codec/types/scopes.d.cts @@ -0,0 +1,50 @@ +type Line = number; +type Column = number; +type Kind = number; +type Name = number; +type Var = number; +type SourcesIndex = number; +type ScopesIndex = number; +type Mix = (A & O) | (B & O); +export type OriginalScope = Mix<[ + Line, + Column, + Line, + Column, + Kind +], [ + Line, + Column, + Line, + Column, + Kind, + Name +], { + vars: Var[]; +}>; +export type GeneratedRange = Mix<[ + Line, + Column, + Line, + Column +], [ + Line, + Column, + Line, + Column, + SourcesIndex, + ScopesIndex +], { + callsite: CallSite | null; + bindings: Binding[]; + isScope: boolean; +}>; +export type CallSite = [SourcesIndex, Line, Column]; +type Binding = BindingExpressionRange[]; +export type BindingExpressionRange = [Name] | [Name, Line, Column]; +export declare function decodeOriginalScopes(input: string): OriginalScope[]; +export declare function encodeOriginalScopes(scopes: OriginalScope[]): string; +export declare function decodeGeneratedRanges(input: string): GeneratedRange[]; +export declare function encodeGeneratedRanges(ranges: GeneratedRange[]): string; +export {}; +//# sourceMappingURL=scopes.d.ts.map \ No newline at end of file diff --git a/node_modules/@jridgewell/sourcemap-codec/types/scopes.d.cts.map b/node_modules/@jridgewell/sourcemap-codec/types/scopes.d.cts.map new file mode 100644 index 0000000000..630e6477b7 --- /dev/null +++ b/node_modules/@jridgewell/sourcemap-codec/types/scopes.d.cts.map @@ -0,0 +1 @@ +{"version":3,"file":"scopes.d.ts","sourceRoot":"","sources":["../src/scopes.ts"],"names":[],"mappings":"AAKA,KAAK,IAAI,GAAG,MAAM,CAAC;AACnB,KAAK,MAAM,GAAG,MAAM,CAAC;AACrB,KAAK,IAAI,GAAG,MAAM,CAAC;AACnB,KAAK,IAAI,GAAG,MAAM,CAAC;AACnB,KAAK,GAAG,GAAG,MAAM,CAAC;AAClB,KAAK,YAAY,GAAG,MAAM,CAAC;AAC3B,KAAK,WAAW,GAAG,MAAM,CAAC;AAE1B,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAEtC,MAAM,MAAM,aAAa,GAAG,GAAG,CAC7B;IAAC,IAAI;IAAE,MAAM;IAAE,IAAI;IAAE,MAAM;IAAE,IAAI;CAAC,EAClC;IAAC,IAAI;IAAE,MAAM;IAAE,IAAI;IAAE,MAAM;IAAE,IAAI;IAAE,IAAI;CAAC,EACxC;IAAE,IAAI,EAAE,GAAG,EAAE,CAAA;CAAE,CAChB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,GAAG,CAC9B;IAAC,IAAI;IAAE,MAAM;IAAE,IAAI;IAAE,MAAM;CAAC,EAC5B;IAAC,IAAI;IAAE,MAAM;IAAE,IAAI;IAAE,MAAM;IAAE,YAAY;IAAE,WAAW;CAAC,EACvD;IACE,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;CAClB,CACF,CAAC;AACF,MAAM,MAAM,QAAQ,GAAG,CAAC,YAAY,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AACpD,KAAK,OAAO,GAAG,sBAAsB,EAAE,CAAC;AACxC,MAAM,MAAM,sBAAsB,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AAEnE,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,EAAE,CAyCnE;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAQpE;AA2CD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,EAAE,CAoGrE;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,CAUtE"} \ No newline at end of file diff --git a/node_modules/@jridgewell/sourcemap-codec/types/scopes.d.mts b/node_modules/@jridgewell/sourcemap-codec/types/scopes.d.mts new file mode 100644 index 0000000000..c583c7560d --- /dev/null +++ b/node_modules/@jridgewell/sourcemap-codec/types/scopes.d.mts @@ -0,0 +1,50 @@ +type Line = number; +type Column = number; +type Kind = number; +type Name = number; +type Var = number; +type SourcesIndex = number; +type ScopesIndex = number; +type Mix = (A & O) | (B & O); +export type OriginalScope = Mix<[ + Line, + Column, + Line, + Column, + Kind +], [ + Line, + Column, + Line, + Column, + Kind, + Name +], { + vars: Var[]; +}>; +export type GeneratedRange = Mix<[ + Line, + Column, + Line, + Column +], [ + Line, + Column, + Line, + Column, + SourcesIndex, + ScopesIndex +], { + callsite: CallSite | null; + bindings: Binding[]; + isScope: boolean; +}>; +export type CallSite = [SourcesIndex, Line, Column]; +type Binding = BindingExpressionRange[]; +export type BindingExpressionRange = [Name] | [Name, Line, Column]; +export declare function decodeOriginalScopes(input: string): OriginalScope[]; +export declare function encodeOriginalScopes(scopes: OriginalScope[]): string; +export declare function decodeGeneratedRanges(input: string): GeneratedRange[]; +export declare function encodeGeneratedRanges(ranges: GeneratedRange[]): string; +export {}; +//# sourceMappingURL=scopes.d.ts.map \ No newline at end of file diff --git a/node_modules/@jridgewell/sourcemap-codec/types/scopes.d.mts.map b/node_modules/@jridgewell/sourcemap-codec/types/scopes.d.mts.map new file mode 100644 index 0000000000..630e6477b7 --- /dev/null +++ b/node_modules/@jridgewell/sourcemap-codec/types/scopes.d.mts.map @@ -0,0 +1 @@ +{"version":3,"file":"scopes.d.ts","sourceRoot":"","sources":["../src/scopes.ts"],"names":[],"mappings":"AAKA,KAAK,IAAI,GAAG,MAAM,CAAC;AACnB,KAAK,MAAM,GAAG,MAAM,CAAC;AACrB,KAAK,IAAI,GAAG,MAAM,CAAC;AACnB,KAAK,IAAI,GAAG,MAAM,CAAC;AACnB,KAAK,GAAG,GAAG,MAAM,CAAC;AAClB,KAAK,YAAY,GAAG,MAAM,CAAC;AAC3B,KAAK,WAAW,GAAG,MAAM,CAAC;AAE1B,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAEtC,MAAM,MAAM,aAAa,GAAG,GAAG,CAC7B;IAAC,IAAI;IAAE,MAAM;IAAE,IAAI;IAAE,MAAM;IAAE,IAAI;CAAC,EAClC;IAAC,IAAI;IAAE,MAAM;IAAE,IAAI;IAAE,MAAM;IAAE,IAAI;IAAE,IAAI;CAAC,EACxC;IAAE,IAAI,EAAE,GAAG,EAAE,CAAA;CAAE,CAChB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,GAAG,CAC9B;IAAC,IAAI;IAAE,MAAM;IAAE,IAAI;IAAE,MAAM;CAAC,EAC5B;IAAC,IAAI;IAAE,MAAM;IAAE,IAAI;IAAE,MAAM;IAAE,YAAY;IAAE,WAAW;CAAC,EACvD;IACE,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;CAClB,CACF,CAAC;AACF,MAAM,MAAM,QAAQ,GAAG,CAAC,YAAY,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AACpD,KAAK,OAAO,GAAG,sBAAsB,EAAE,CAAC;AACxC,MAAM,MAAM,sBAAsB,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AAEnE,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,EAAE,CAyCnE;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAQpE;AA2CD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,EAAE,CAoGrE;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,CAUtE"} \ No newline at end of file diff --git a/node_modules/@jridgewell/sourcemap-codec/types/sourcemap-codec.d.cts b/node_modules/@jridgewell/sourcemap-codec/types/sourcemap-codec.d.cts new file mode 100644 index 0000000000..5f35e22fbd --- /dev/null +++ b/node_modules/@jridgewell/sourcemap-codec/types/sourcemap-codec.d.cts @@ -0,0 +1,9 @@ +export { decodeOriginalScopes, encodeOriginalScopes, decodeGeneratedRanges, encodeGeneratedRanges, } from './scopes.cts'; +export type { OriginalScope, GeneratedRange, CallSite, BindingExpressionRange } from './scopes.cts'; +export type SourceMapSegment = [number] | [number, number, number, number] | [number, number, number, number, number]; +export type SourceMapLine = SourceMapSegment[]; +export type SourceMapMappings = SourceMapLine[]; +export declare function decode(mappings: string): SourceMapMappings; +export declare function encode(decoded: SourceMapMappings): string; +export declare function encode(decoded: Readonly): string; +//# sourceMappingURL=sourcemap-codec.d.ts.map \ No newline at end of file diff --git a/node_modules/@jridgewell/sourcemap-codec/types/sourcemap-codec.d.cts.map b/node_modules/@jridgewell/sourcemap-codec/types/sourcemap-codec.d.cts.map new file mode 100644 index 0000000000..7123d52083 --- /dev/null +++ b/node_modules/@jridgewell/sourcemap-codec/types/sourcemap-codec.d.cts.map @@ -0,0 +1 @@ +{"version":3,"file":"sourcemap-codec.d.ts","sourceRoot":"","sources":["../src/sourcemap-codec.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,UAAU,CAAC;AAClB,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,QAAQ,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAEhG,MAAM,MAAM,gBAAgB,GACxB,CAAC,MAAM,CAAC,GACR,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAChC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAC7C,MAAM,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;AAC/C,MAAM,MAAM,iBAAiB,GAAG,aAAa,EAAE,CAAC;AAEhD,wBAAgB,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,CAiD1D;AAUD,wBAAgB,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAAC;AAC3D,wBAAgB,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GAAG,MAAM,CAAC"} \ No newline at end of file diff --git a/node_modules/@jridgewell/sourcemap-codec/types/sourcemap-codec.d.mts b/node_modules/@jridgewell/sourcemap-codec/types/sourcemap-codec.d.mts new file mode 100644 index 0000000000..199fb9f534 --- /dev/null +++ b/node_modules/@jridgewell/sourcemap-codec/types/sourcemap-codec.d.mts @@ -0,0 +1,9 @@ +export { decodeOriginalScopes, encodeOriginalScopes, decodeGeneratedRanges, encodeGeneratedRanges, } from './scopes.mts'; +export type { OriginalScope, GeneratedRange, CallSite, BindingExpressionRange } from './scopes.mts'; +export type SourceMapSegment = [number] | [number, number, number, number] | [number, number, number, number, number]; +export type SourceMapLine = SourceMapSegment[]; +export type SourceMapMappings = SourceMapLine[]; +export declare function decode(mappings: string): SourceMapMappings; +export declare function encode(decoded: SourceMapMappings): string; +export declare function encode(decoded: Readonly): string; +//# sourceMappingURL=sourcemap-codec.d.ts.map \ No newline at end of file diff --git a/node_modules/@jridgewell/sourcemap-codec/types/sourcemap-codec.d.mts.map b/node_modules/@jridgewell/sourcemap-codec/types/sourcemap-codec.d.mts.map new file mode 100644 index 0000000000..7123d52083 --- /dev/null +++ b/node_modules/@jridgewell/sourcemap-codec/types/sourcemap-codec.d.mts.map @@ -0,0 +1 @@ +{"version":3,"file":"sourcemap-codec.d.ts","sourceRoot":"","sources":["../src/sourcemap-codec.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,UAAU,CAAC;AAClB,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,QAAQ,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAEhG,MAAM,MAAM,gBAAgB,GACxB,CAAC,MAAM,CAAC,GACR,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAChC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAC7C,MAAM,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;AAC/C,MAAM,MAAM,iBAAiB,GAAG,aAAa,EAAE,CAAC;AAEhD,wBAAgB,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,CAiD1D;AAUD,wBAAgB,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAAC;AAC3D,wBAAgB,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GAAG,MAAM,CAAC"} \ No newline at end of file diff --git a/node_modules/@jridgewell/sourcemap-codec/types/strings.d.cts b/node_modules/@jridgewell/sourcemap-codec/types/strings.d.cts new file mode 100644 index 0000000000..62faceb3de --- /dev/null +++ b/node_modules/@jridgewell/sourcemap-codec/types/strings.d.cts @@ -0,0 +1,16 @@ +export declare class StringWriter { + pos: number; + private out; + private buffer; + write(v: number): void; + flush(): string; +} +export declare class StringReader { + pos: number; + private buffer; + constructor(buffer: string); + next(): number; + peek(): number; + indexOf(char: string): number; +} +//# sourceMappingURL=strings.d.ts.map \ No newline at end of file diff --git a/node_modules/@jridgewell/sourcemap-codec/types/strings.d.cts.map b/node_modules/@jridgewell/sourcemap-codec/types/strings.d.cts.map new file mode 100644 index 0000000000..d3602da425 --- /dev/null +++ b/node_modules/@jridgewell/sourcemap-codec/types/strings.d.cts.map @@ -0,0 +1 @@ +{"version":3,"file":"strings.d.ts","sourceRoot":"","sources":["../src/strings.ts"],"names":[],"mappings":"AAuBA,qBAAa,YAAY;IACvB,GAAG,SAAK;IACR,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,MAAM,CAA6B;IAE3C,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAStB,KAAK,IAAI,MAAM;CAIhB;AAED,qBAAa,YAAY;IACvB,GAAG,SAAK;IACR,QAAgB,MAAM,CAAS;gBAEnB,MAAM,EAAE,MAAM;IAI1B,IAAI,IAAI,MAAM;IAId,IAAI,IAAI,MAAM;IAId,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAK9B"} \ No newline at end of file diff --git a/node_modules/@jridgewell/sourcemap-codec/types/strings.d.mts b/node_modules/@jridgewell/sourcemap-codec/types/strings.d.mts new file mode 100644 index 0000000000..62faceb3de --- /dev/null +++ b/node_modules/@jridgewell/sourcemap-codec/types/strings.d.mts @@ -0,0 +1,16 @@ +export declare class StringWriter { + pos: number; + private out; + private buffer; + write(v: number): void; + flush(): string; +} +export declare class StringReader { + pos: number; + private buffer; + constructor(buffer: string); + next(): number; + peek(): number; + indexOf(char: string): number; +} +//# sourceMappingURL=strings.d.ts.map \ No newline at end of file diff --git a/node_modules/@jridgewell/sourcemap-codec/types/strings.d.mts.map b/node_modules/@jridgewell/sourcemap-codec/types/strings.d.mts.map new file mode 100644 index 0000000000..d3602da425 --- /dev/null +++ b/node_modules/@jridgewell/sourcemap-codec/types/strings.d.mts.map @@ -0,0 +1 @@ +{"version":3,"file":"strings.d.ts","sourceRoot":"","sources":["../src/strings.ts"],"names":[],"mappings":"AAuBA,qBAAa,YAAY;IACvB,GAAG,SAAK;IACR,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,MAAM,CAA6B;IAE3C,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAStB,KAAK,IAAI,MAAM;CAIhB;AAED,qBAAa,YAAY;IACvB,GAAG,SAAK;IACR,QAAgB,MAAM,CAAS;gBAEnB,MAAM,EAAE,MAAM;IAI1B,IAAI,IAAI,MAAM;IAId,IAAI,IAAI,MAAM;IAId,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAK9B"} \ No newline at end of file diff --git a/node_modules/@jridgewell/sourcemap-codec/types/vlq.d.cts b/node_modules/@jridgewell/sourcemap-codec/types/vlq.d.cts new file mode 100644 index 0000000000..dbd6602d18 --- /dev/null +++ b/node_modules/@jridgewell/sourcemap-codec/types/vlq.d.cts @@ -0,0 +1,7 @@ +import type { StringReader, StringWriter } from './strings.cts'; +export declare const comma: number; +export declare const semicolon: number; +export declare function decodeInteger(reader: StringReader, relative: number): number; +export declare function encodeInteger(builder: StringWriter, num: number, relative: number): number; +export declare function hasMoreVlq(reader: StringReader, max: number): boolean; +//# sourceMappingURL=vlq.d.ts.map \ No newline at end of file diff --git a/node_modules/@jridgewell/sourcemap-codec/types/vlq.d.cts.map b/node_modules/@jridgewell/sourcemap-codec/types/vlq.d.cts.map new file mode 100644 index 0000000000..6fdc356977 --- /dev/null +++ b/node_modules/@jridgewell/sourcemap-codec/types/vlq.d.cts.map @@ -0,0 +1 @@ +{"version":3,"file":"vlq.d.ts","sourceRoot":"","sources":["../src/vlq.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAE5D,eAAO,MAAM,KAAK,QAAoB,CAAC;AACvC,eAAO,MAAM,SAAS,QAAoB,CAAC;AAY3C,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAoB5E;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAY1F;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,WAG3D"} \ No newline at end of file diff --git a/node_modules/@jridgewell/sourcemap-codec/types/vlq.d.mts b/node_modules/@jridgewell/sourcemap-codec/types/vlq.d.mts new file mode 100644 index 0000000000..2c739bc9fe --- /dev/null +++ b/node_modules/@jridgewell/sourcemap-codec/types/vlq.d.mts @@ -0,0 +1,7 @@ +import type { StringReader, StringWriter } from './strings.mts'; +export declare const comma: number; +export declare const semicolon: number; +export declare function decodeInteger(reader: StringReader, relative: number): number; +export declare function encodeInteger(builder: StringWriter, num: number, relative: number): number; +export declare function hasMoreVlq(reader: StringReader, max: number): boolean; +//# sourceMappingURL=vlq.d.ts.map \ No newline at end of file diff --git a/node_modules/@jridgewell/sourcemap-codec/types/vlq.d.mts.map b/node_modules/@jridgewell/sourcemap-codec/types/vlq.d.mts.map new file mode 100644 index 0000000000..6fdc356977 --- /dev/null +++ b/node_modules/@jridgewell/sourcemap-codec/types/vlq.d.mts.map @@ -0,0 +1 @@ +{"version":3,"file":"vlq.d.ts","sourceRoot":"","sources":["../src/vlq.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAE5D,eAAO,MAAM,KAAK,QAAoB,CAAC;AACvC,eAAO,MAAM,SAAS,QAAoB,CAAC;AAY3C,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAoB5E;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAY1F;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,WAG3D"} \ No newline at end of file diff --git a/node_modules/@jridgewell/trace-mapping/LICENSE b/node_modules/@jridgewell/trace-mapping/LICENSE new file mode 100644 index 0000000000..1f6ce94c11 --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/LICENSE @@ -0,0 +1,19 @@ +Copyright 2024 Justin Ridgewell + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/@jridgewell/trace-mapping/README.md b/node_modules/@jridgewell/trace-mapping/README.md new file mode 100644 index 0000000000..9fc0ed09ce --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/README.md @@ -0,0 +1,348 @@ +# @jridgewell/trace-mapping + +> Trace the original position through a source map + +`trace-mapping` allows you to take the line and column of an output file and trace it to the +original location in the source file through a source map. + +You may already be familiar with the [`source-map`][source-map] package's `SourceMapConsumer`. This +provides the same `originalPositionFor` and `generatedPositionFor` API, without requiring WASM. + +## Installation + +```sh +npm install @jridgewell/trace-mapping +``` + +## Usage + +```typescript +import { + TraceMap, + originalPositionFor, + generatedPositionFor, + sourceContentFor, + isIgnored, +} from '@jridgewell/trace-mapping'; + +const tracer = new TraceMap({ + version: 3, + sources: ['input.js'], + sourcesContent: ['content of input.js'], + names: ['foo'], + mappings: 'KAyCIA', + ignoreList: [], +}); + +// Lines start at line 1, columns at column 0. +const traced = originalPositionFor(tracer, { line: 1, column: 5 }); +assert.deepEqual(traced, { + source: 'input.js', + line: 42, + column: 4, + name: 'foo', +}); + +const content = sourceContentFor(tracer, traced.source); +assert.strictEqual(content, 'content for input.js'); + +const generated = generatedPositionFor(tracer, { + source: 'input.js', + line: 42, + column: 4, +}); +assert.deepEqual(generated, { + line: 1, + column: 5, +}); + +const ignored = isIgnored(tracer, 'input.js'); +assert.equal(ignored, false); +``` + +We also provide a lower level API to get the actual segment that matches our line and column. Unlike +`originalPositionFor`, `traceSegment` uses a 0-base for `line`: + +```typescript +import { traceSegment } from '@jridgewell/trace-mapping'; + +// line is 0-base. +const traced = traceSegment(tracer, /* line */ 0, /* column */ 5); + +// Segments are [outputColumn, sourcesIndex, sourceLine, sourceColumn, namesIndex] +// Again, line is 0-base and so is sourceLine +assert.deepEqual(traced, [5, 0, 41, 4, 0]); +``` + +### SectionedSourceMaps + +The sourcemap spec defines a special `sections` field that's designed to handle concatenation of +output code with associated sourcemaps. This type of sourcemap is rarely used (no major build tool +produces it), but if you are hand coding a concatenation you may need it. We provide an `AnyMap` +helper that can receive either a regular sourcemap or a `SectionedSourceMap` and returns a +`TraceMap` instance: + +```typescript +import { AnyMap } from '@jridgewell/trace-mapping'; +const fooOutput = 'foo'; +const barOutput = 'bar'; +const output = [fooOutput, barOutput].join('\n'); + +const sectioned = new AnyMap({ + version: 3, + sections: [ + { + // 0-base line and column + offset: { line: 0, column: 0 }, + // fooOutput's sourcemap + map: { + version: 3, + sources: ['foo.js'], + names: ['foo'], + mappings: 'AAAAA', + }, + }, + { + // barOutput's sourcemap will not affect the first line, only the second + offset: { line: 1, column: 0 }, + map: { + version: 3, + sources: ['bar.js'], + names: ['bar'], + mappings: 'AAAAA', + }, + }, + ], +}); + +const traced = originalPositionFor(sectioned, { + line: 2, + column: 0, +}); + +assert.deepEqual(traced, { + source: 'bar.js', + line: 1, + column: 0, + name: 'bar', +}); +``` + +## Benchmarks + +``` +node v20.10.0 + +amp.js.map - 45120 segments + +Memory Usage: +trace-mapping decoded 414164 bytes +trace-mapping encoded 6274352 bytes +source-map-js 10968904 bytes +source-map-0.6.1 17587160 bytes +source-map-0.8.0 8812155 bytes +Chrome dev tools 8672912 bytes +Smallest memory usage is trace-mapping decoded + +Init speed: +trace-mapping: decoded JSON input x 205 ops/sec ±0.19% (88 runs sampled) +trace-mapping: encoded JSON input x 405 ops/sec ±1.47% (88 runs sampled) +trace-mapping: decoded Object input x 4,645 ops/sec ±0.15% (98 runs sampled) +trace-mapping: encoded Object input x 458 ops/sec ±1.63% (91 runs sampled) +source-map-js: encoded Object input x 75.48 ops/sec ±1.64% (67 runs sampled) +source-map-0.6.1: encoded Object input x 39.37 ops/sec ±1.44% (53 runs sampled) +Chrome dev tools: encoded Object input x 150 ops/sec ±1.76% (79 runs sampled) +Fastest is trace-mapping: decoded Object input + +Trace speed (random): +trace-mapping: decoded originalPositionFor x 44,946 ops/sec ±0.16% (99 runs sampled) +trace-mapping: encoded originalPositionFor x 37,995 ops/sec ±1.81% (89 runs sampled) +source-map-js: encoded originalPositionFor x 9,230 ops/sec ±1.36% (93 runs sampled) +source-map-0.6.1: encoded originalPositionFor x 8,057 ops/sec ±0.84% (96 runs sampled) +source-map-0.8.0: encoded originalPositionFor x 28,198 ops/sec ±1.12% (91 runs sampled) +Chrome dev tools: encoded originalPositionFor x 46,276 ops/sec ±1.35% (95 runs sampled) +Fastest is Chrome dev tools: encoded originalPositionFor + +Trace speed (ascending): +trace-mapping: decoded originalPositionFor x 204,406 ops/sec ±0.19% (97 runs sampled) +trace-mapping: encoded originalPositionFor x 196,695 ops/sec ±0.24% (99 runs sampled) +source-map-js: encoded originalPositionFor x 11,948 ops/sec ±0.94% (99 runs sampled) +source-map-0.6.1: encoded originalPositionFor x 10,730 ops/sec ±0.36% (100 runs sampled) +source-map-0.8.0: encoded originalPositionFor x 51,427 ops/sec ±0.21% (98 runs sampled) +Chrome dev tools: encoded originalPositionFor x 162,615 ops/sec ±0.18% (98 runs sampled) +Fastest is trace-mapping: decoded originalPositionFor + + +*** + + +babel.min.js.map - 347793 segments + +Memory Usage: +trace-mapping decoded 18504 bytes +trace-mapping encoded 35428008 bytes +source-map-js 51676808 bytes +source-map-0.6.1 63367136 bytes +source-map-0.8.0 43158400 bytes +Chrome dev tools 50721552 bytes +Smallest memory usage is trace-mapping decoded + +Init speed: +trace-mapping: decoded JSON input x 17.82 ops/sec ±6.35% (35 runs sampled) +trace-mapping: encoded JSON input x 31.57 ops/sec ±7.50% (43 runs sampled) +trace-mapping: decoded Object input x 867 ops/sec ±0.74% (94 runs sampled) +trace-mapping: encoded Object input x 33.83 ops/sec ±7.66% (46 runs sampled) +source-map-js: encoded Object input x 6.58 ops/sec ±3.31% (20 runs sampled) +source-map-0.6.1: encoded Object input x 4.23 ops/sec ±3.43% (15 runs sampled) +Chrome dev tools: encoded Object input x 22.14 ops/sec ±3.79% (41 runs sampled) +Fastest is trace-mapping: decoded Object input + +Trace speed (random): +trace-mapping: decoded originalPositionFor x 78,234 ops/sec ±1.48% (29 runs sampled) +trace-mapping: encoded originalPositionFor x 60,761 ops/sec ±1.35% (21 runs sampled) +source-map-js: encoded originalPositionFor x 51,448 ops/sec ±2.17% (89 runs sampled) +source-map-0.6.1: encoded originalPositionFor x 47,221 ops/sec ±1.99% (15 runs sampled) +source-map-0.8.0: encoded originalPositionFor x 84,002 ops/sec ±1.45% (27 runs sampled) +Chrome dev tools: encoded originalPositionFor x 106,457 ops/sec ±1.38% (37 runs sampled) +Fastest is Chrome dev tools: encoded originalPositionFor + +Trace speed (ascending): +trace-mapping: decoded originalPositionFor x 930,943 ops/sec ±0.25% (99 runs sampled) +trace-mapping: encoded originalPositionFor x 843,545 ops/sec ±0.34% (97 runs sampled) +source-map-js: encoded originalPositionFor x 114,510 ops/sec ±1.37% (36 runs sampled) +source-map-0.6.1: encoded originalPositionFor x 87,412 ops/sec ±0.72% (92 runs sampled) +source-map-0.8.0: encoded originalPositionFor x 197,709 ops/sec ±0.89% (59 runs sampled) +Chrome dev tools: encoded originalPositionFor x 688,983 ops/sec ±0.33% (98 runs sampled) +Fastest is trace-mapping: decoded originalPositionFor + + +*** + + +preact.js.map - 1992 segments + +Memory Usage: +trace-mapping decoded 33136 bytes +trace-mapping encoded 254240 bytes +source-map-js 837488 bytes +source-map-0.6.1 961928 bytes +source-map-0.8.0 54384 bytes +Chrome dev tools 709680 bytes +Smallest memory usage is trace-mapping decoded + +Init speed: +trace-mapping: decoded JSON input x 3,709 ops/sec ±0.13% (99 runs sampled) +trace-mapping: encoded JSON input x 6,447 ops/sec ±0.22% (101 runs sampled) +trace-mapping: decoded Object input x 83,062 ops/sec ±0.23% (100 runs sampled) +trace-mapping: encoded Object input x 14,980 ops/sec ±0.28% (100 runs sampled) +source-map-js: encoded Object input x 2,544 ops/sec ±0.16% (99 runs sampled) +source-map-0.6.1: encoded Object input x 1,221 ops/sec ±0.37% (97 runs sampled) +Chrome dev tools: encoded Object input x 4,241 ops/sec ±0.39% (93 runs sampled) +Fastest is trace-mapping: decoded Object input + +Trace speed (random): +trace-mapping: decoded originalPositionFor x 91,028 ops/sec ±0.14% (94 runs sampled) +trace-mapping: encoded originalPositionFor x 84,348 ops/sec ±0.26% (98 runs sampled) +source-map-js: encoded originalPositionFor x 26,998 ops/sec ±0.23% (98 runs sampled) +source-map-0.6.1: encoded originalPositionFor x 18,049 ops/sec ±0.26% (100 runs sampled) +source-map-0.8.0: encoded originalPositionFor x 41,916 ops/sec ±0.28% (98 runs sampled) +Chrome dev tools: encoded originalPositionFor x 88,616 ops/sec ±0.14% (98 runs sampled) +Fastest is trace-mapping: decoded originalPositionFor + +Trace speed (ascending): +trace-mapping: decoded originalPositionFor x 319,960 ops/sec ±0.16% (100 runs sampled) +trace-mapping: encoded originalPositionFor x 302,153 ops/sec ±0.18% (100 runs sampled) +source-map-js: encoded originalPositionFor x 35,574 ops/sec ±0.19% (100 runs sampled) +source-map-0.6.1: encoded originalPositionFor x 19,943 ops/sec ±0.12% (101 runs sampled) +source-map-0.8.0: encoded originalPositionFor x 54,648 ops/sec ±0.20% (99 runs sampled) +Chrome dev tools: encoded originalPositionFor x 278,319 ops/sec ±0.17% (102 runs sampled) +Fastest is trace-mapping: decoded originalPositionFor + + +*** + + +react.js.map - 5726 segments + +Memory Usage: +trace-mapping decoded 10872 bytes +trace-mapping encoded 681512 bytes +source-map-js 2563944 bytes +source-map-0.6.1 2150864 bytes +source-map-0.8.0 88680 bytes +Chrome dev tools 1149576 bytes +Smallest memory usage is trace-mapping decoded + +Init speed: +trace-mapping: decoded JSON input x 1,887 ops/sec ±0.28% (99 runs sampled) +trace-mapping: encoded JSON input x 4,749 ops/sec ±0.48% (97 runs sampled) +trace-mapping: decoded Object input x 74,236 ops/sec ±0.11% (99 runs sampled) +trace-mapping: encoded Object input x 5,752 ops/sec ±0.38% (100 runs sampled) +source-map-js: encoded Object input x 806 ops/sec ±0.19% (97 runs sampled) +source-map-0.6.1: encoded Object input x 418 ops/sec ±0.33% (94 runs sampled) +Chrome dev tools: encoded Object input x 1,524 ops/sec ±0.57% (92 runs sampled) +Fastest is trace-mapping: decoded Object input + +Trace speed (random): +trace-mapping: decoded originalPositionFor x 620,201 ops/sec ±0.33% (96 runs sampled) +trace-mapping: encoded originalPositionFor x 579,548 ops/sec ±0.35% (97 runs sampled) +source-map-js: encoded originalPositionFor x 230,983 ops/sec ±0.62% (54 runs sampled) +source-map-0.6.1: encoded originalPositionFor x 158,145 ops/sec ±0.80% (46 runs sampled) +source-map-0.8.0: encoded originalPositionFor x 343,801 ops/sec ±0.55% (96 runs sampled) +Chrome dev tools: encoded originalPositionFor x 659,649 ops/sec ±0.49% (98 runs sampled) +Fastest is Chrome dev tools: encoded originalPositionFor + +Trace speed (ascending): +trace-mapping: decoded originalPositionFor x 2,368,079 ops/sec ±0.32% (98 runs sampled) +trace-mapping: encoded originalPositionFor x 2,134,039 ops/sec ±2.72% (87 runs sampled) +source-map-js: encoded originalPositionFor x 290,120 ops/sec ±2.49% (82 runs sampled) +source-map-0.6.1: encoded originalPositionFor x 187,613 ops/sec ±0.86% (49 runs sampled) +source-map-0.8.0: encoded originalPositionFor x 479,569 ops/sec ±0.65% (96 runs sampled) +Chrome dev tools: encoded originalPositionFor x 2,048,414 ops/sec ±0.24% (98 runs sampled) +Fastest is trace-mapping: decoded originalPositionFor + + +*** + + +vscode.map - 2141001 segments + +Memory Usage: +trace-mapping decoded 5206584 bytes +trace-mapping encoded 208370336 bytes +source-map-js 278493008 bytes +source-map-0.6.1 391564048 bytes +source-map-0.8.0 257508787 bytes +Chrome dev tools 291053000 bytes +Smallest memory usage is trace-mapping decoded + +Init speed: +trace-mapping: decoded JSON input x 1.63 ops/sec ±33.88% (9 runs sampled) +trace-mapping: encoded JSON input x 3.29 ops/sec ±36.13% (13 runs sampled) +trace-mapping: decoded Object input x 103 ops/sec ±0.93% (77 runs sampled) +trace-mapping: encoded Object input x 5.42 ops/sec ±28.54% (19 runs sampled) +source-map-js: encoded Object input x 1.07 ops/sec ±13.84% (7 runs sampled) +source-map-0.6.1: encoded Object input x 0.60 ops/sec ±2.43% (6 runs sampled) +Chrome dev tools: encoded Object input x 2.61 ops/sec ±22.00% (11 runs sampled) +Fastest is trace-mapping: decoded Object input + +Trace speed (random): +trace-mapping: decoded originalPositionFor x 257,019 ops/sec ±0.97% (93 runs sampled) +trace-mapping: encoded originalPositionFor x 179,163 ops/sec ±0.83% (92 runs sampled) +source-map-js: encoded originalPositionFor x 73,337 ops/sec ±1.35% (87 runs sampled) +source-map-0.6.1: encoded originalPositionFor x 38,797 ops/sec ±1.66% (88 runs sampled) +source-map-0.8.0: encoded originalPositionFor x 107,758 ops/sec ±1.94% (45 runs sampled) +Chrome dev tools: encoded originalPositionFor x 188,550 ops/sec ±1.85% (79 runs sampled) +Fastest is trace-mapping: decoded originalPositionFor + +Trace speed (ascending): +trace-mapping: decoded originalPositionFor x 447,621 ops/sec ±3.64% (94 runs sampled) +trace-mapping: encoded originalPositionFor x 323,698 ops/sec ±5.20% (88 runs sampled) +source-map-js: encoded originalPositionFor x 78,387 ops/sec ±1.69% (89 runs sampled) +source-map-0.6.1: encoded originalPositionFor x 41,016 ops/sec ±3.01% (25 runs sampled) +source-map-0.8.0: encoded originalPositionFor x 124,204 ops/sec ±0.90% (92 runs sampled) +Chrome dev tools: encoded originalPositionFor x 230,087 ops/sec ±2.61% (93 runs sampled) +Fastest is trace-mapping: decoded originalPositionFor +``` + +[source-map]: https://www.npmjs.com/package/source-map diff --git a/node_modules/@jridgewell/trace-mapping/dist/trace-mapping.mjs b/node_modules/@jridgewell/trace-mapping/dist/trace-mapping.mjs new file mode 100644 index 0000000000..73a95c77d0 --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/dist/trace-mapping.mjs @@ -0,0 +1,493 @@ +// src/trace-mapping.ts +import { encode, decode } from "@jridgewell/sourcemap-codec"; + +// src/resolve.ts +import resolveUri from "@jridgewell/resolve-uri"; + +// src/strip-filename.ts +function stripFilename(path) { + if (!path) return ""; + const index = path.lastIndexOf("/"); + return path.slice(0, index + 1); +} + +// src/resolve.ts +function resolver(mapUrl, sourceRoot) { + const from = stripFilename(mapUrl); + const prefix = sourceRoot ? sourceRoot + "/" : ""; + return (source) => resolveUri(prefix + (source || ""), from); +} + +// src/sourcemap-segment.ts +var COLUMN = 0; +var SOURCES_INDEX = 1; +var SOURCE_LINE = 2; +var SOURCE_COLUMN = 3; +var NAMES_INDEX = 4; +var REV_GENERATED_LINE = 1; +var REV_GENERATED_COLUMN = 2; + +// src/sort.ts +function maybeSort(mappings, owned) { + const unsortedIndex = nextUnsortedSegmentLine(mappings, 0); + if (unsortedIndex === mappings.length) return mappings; + if (!owned) mappings = mappings.slice(); + for (let i = unsortedIndex; i < mappings.length; i = nextUnsortedSegmentLine(mappings, i + 1)) { + mappings[i] = sortSegments(mappings[i], owned); + } + return mappings; +} +function nextUnsortedSegmentLine(mappings, start) { + for (let i = start; i < mappings.length; i++) { + if (!isSorted(mappings[i])) return i; + } + return mappings.length; +} +function isSorted(line) { + for (let j = 1; j < line.length; j++) { + if (line[j][COLUMN] < line[j - 1][COLUMN]) { + return false; + } + } + return true; +} +function sortSegments(line, owned) { + if (!owned) line = line.slice(); + return line.sort(sortComparator); +} +function sortComparator(a, b) { + return a[COLUMN] - b[COLUMN]; +} + +// src/by-source.ts +function buildBySources(decoded, memos) { + const sources = memos.map(() => []); + for (let i = 0; i < decoded.length; i++) { + const line = decoded[i]; + for (let j = 0; j < line.length; j++) { + const seg = line[j]; + if (seg.length === 1) continue; + const sourceIndex2 = seg[SOURCES_INDEX]; + const sourceLine = seg[SOURCE_LINE]; + const sourceColumn = seg[SOURCE_COLUMN]; + const source = sources[sourceIndex2]; + const segs = source[sourceLine] || (source[sourceLine] = []); + segs.push([sourceColumn, i, seg[COLUMN]]); + } + } + for (let i = 0; i < sources.length; i++) { + const source = sources[i]; + for (let j = 0; j < source.length; j++) { + const line = source[j]; + if (line) line.sort(sortComparator); + } + } + return sources; +} + +// src/binary-search.ts +var found = false; +function binarySearch(haystack, needle, low, high) { + while (low <= high) { + const mid = low + (high - low >> 1); + const cmp = haystack[mid][COLUMN] - needle; + if (cmp === 0) { + found = true; + return mid; + } + if (cmp < 0) { + low = mid + 1; + } else { + high = mid - 1; + } + } + found = false; + return low - 1; +} +function upperBound(haystack, needle, index) { + for (let i = index + 1; i < haystack.length; index = i++) { + if (haystack[i][COLUMN] !== needle) break; + } + return index; +} +function lowerBound(haystack, needle, index) { + for (let i = index - 1; i >= 0; index = i--) { + if (haystack[i][COLUMN] !== needle) break; + } + return index; +} +function memoizedState() { + return { + lastKey: -1, + lastNeedle: -1, + lastIndex: -1 + }; +} +function memoizedBinarySearch(haystack, needle, state, key) { + const { lastKey, lastNeedle, lastIndex } = state; + let low = 0; + let high = haystack.length - 1; + if (key === lastKey) { + if (needle === lastNeedle) { + found = lastIndex !== -1 && haystack[lastIndex][COLUMN] === needle; + return lastIndex; + } + if (needle >= lastNeedle) { + low = lastIndex === -1 ? 0 : lastIndex; + } else { + high = lastIndex; + } + } + state.lastKey = key; + state.lastNeedle = needle; + return state.lastIndex = binarySearch(haystack, needle, low, high); +} + +// src/types.ts +function parse(map) { + return typeof map === "string" ? JSON.parse(map) : map; +} + +// src/flatten-map.ts +var FlattenMap = function(map, mapUrl) { + const parsed = parse(map); + if (!("sections" in parsed)) { + return new TraceMap(parsed, mapUrl); + } + const mappings = []; + const sources = []; + const sourcesContent = []; + const names = []; + const ignoreList = []; + recurse( + parsed, + mapUrl, + mappings, + sources, + sourcesContent, + names, + ignoreList, + 0, + 0, + Infinity, + Infinity + ); + const joined = { + version: 3, + file: parsed.file, + names, + sources, + sourcesContent, + mappings, + ignoreList + }; + return presortedDecodedMap(joined); +}; +function recurse(input, mapUrl, mappings, sources, sourcesContent, names, ignoreList, lineOffset, columnOffset, stopLine, stopColumn) { + const { sections } = input; + for (let i = 0; i < sections.length; i++) { + const { map, offset } = sections[i]; + let sl = stopLine; + let sc = stopColumn; + if (i + 1 < sections.length) { + const nextOffset = sections[i + 1].offset; + sl = Math.min(stopLine, lineOffset + nextOffset.line); + if (sl === stopLine) { + sc = Math.min(stopColumn, columnOffset + nextOffset.column); + } else if (sl < stopLine) { + sc = columnOffset + nextOffset.column; + } + } + addSection( + map, + mapUrl, + mappings, + sources, + sourcesContent, + names, + ignoreList, + lineOffset + offset.line, + columnOffset + offset.column, + sl, + sc + ); + } +} +function addSection(input, mapUrl, mappings, sources, sourcesContent, names, ignoreList, lineOffset, columnOffset, stopLine, stopColumn) { + const parsed = parse(input); + if ("sections" in parsed) return recurse(...arguments); + const map = new TraceMap(parsed, mapUrl); + const sourcesOffset = sources.length; + const namesOffset = names.length; + const decoded = decodedMappings(map); + const { resolvedSources, sourcesContent: contents, ignoreList: ignores } = map; + append(sources, resolvedSources); + append(names, map.names); + if (contents) append(sourcesContent, contents); + else for (let i = 0; i < resolvedSources.length; i++) sourcesContent.push(null); + if (ignores) for (let i = 0; i < ignores.length; i++) ignoreList.push(ignores[i] + sourcesOffset); + for (let i = 0; i < decoded.length; i++) { + const lineI = lineOffset + i; + if (lineI > stopLine) return; + const out = getLine(mappings, lineI); + const cOffset = i === 0 ? columnOffset : 0; + const line = decoded[i]; + for (let j = 0; j < line.length; j++) { + const seg = line[j]; + const column = cOffset + seg[COLUMN]; + if (lineI === stopLine && column >= stopColumn) return; + if (seg.length === 1) { + out.push([column]); + continue; + } + const sourcesIndex = sourcesOffset + seg[SOURCES_INDEX]; + const sourceLine = seg[SOURCE_LINE]; + const sourceColumn = seg[SOURCE_COLUMN]; + out.push( + seg.length === 4 ? [column, sourcesIndex, sourceLine, sourceColumn] : [column, sourcesIndex, sourceLine, sourceColumn, namesOffset + seg[NAMES_INDEX]] + ); + } + } +} +function append(arr, other) { + for (let i = 0; i < other.length; i++) arr.push(other[i]); +} +function getLine(arr, index) { + for (let i = arr.length; i <= index; i++) arr[i] = []; + return arr[index]; +} + +// src/trace-mapping.ts +var LINE_GTR_ZERO = "`line` must be greater than 0 (lines start at line 1)"; +var COL_GTR_EQ_ZERO = "`column` must be greater than or equal to 0 (columns start at column 0)"; +var LEAST_UPPER_BOUND = -1; +var GREATEST_LOWER_BOUND = 1; +var TraceMap = class { + constructor(map, mapUrl) { + const isString = typeof map === "string"; + if (!isString && map._decodedMemo) return map; + const parsed = parse(map); + const { version, file, names, sourceRoot, sources, sourcesContent } = parsed; + this.version = version; + this.file = file; + this.names = names || []; + this.sourceRoot = sourceRoot; + this.sources = sources; + this.sourcesContent = sourcesContent; + this.ignoreList = parsed.ignoreList || parsed.x_google_ignoreList || void 0; + const resolve = resolver(mapUrl, sourceRoot); + this.resolvedSources = sources.map(resolve); + const { mappings } = parsed; + if (typeof mappings === "string") { + this._encoded = mappings; + this._decoded = void 0; + } else if (Array.isArray(mappings)) { + this._encoded = void 0; + this._decoded = maybeSort(mappings, isString); + } else if (parsed.sections) { + throw new Error(`TraceMap passed sectioned source map, please use FlattenMap export instead`); + } else { + throw new Error(`invalid source map: ${JSON.stringify(parsed)}`); + } + this._decodedMemo = memoizedState(); + this._bySources = void 0; + this._bySourceMemos = void 0; + } +}; +function cast(map) { + return map; +} +function encodedMappings(map) { + var _a, _b; + return (_b = (_a = cast(map))._encoded) != null ? _b : _a._encoded = encode(cast(map)._decoded); +} +function decodedMappings(map) { + var _a; + return (_a = cast(map))._decoded || (_a._decoded = decode(cast(map)._encoded)); +} +function traceSegment(map, line, column) { + const decoded = decodedMappings(map); + if (line >= decoded.length) return null; + const segments = decoded[line]; + const index = traceSegmentInternal( + segments, + cast(map)._decodedMemo, + line, + column, + GREATEST_LOWER_BOUND + ); + return index === -1 ? null : segments[index]; +} +function originalPositionFor(map, needle) { + let { line, column, bias } = needle; + line--; + if (line < 0) throw new Error(LINE_GTR_ZERO); + if (column < 0) throw new Error(COL_GTR_EQ_ZERO); + const decoded = decodedMappings(map); + if (line >= decoded.length) return OMapping(null, null, null, null); + const segments = decoded[line]; + const index = traceSegmentInternal( + segments, + cast(map)._decodedMemo, + line, + column, + bias || GREATEST_LOWER_BOUND + ); + if (index === -1) return OMapping(null, null, null, null); + const segment = segments[index]; + if (segment.length === 1) return OMapping(null, null, null, null); + const { names, resolvedSources } = map; + return OMapping( + resolvedSources[segment[SOURCES_INDEX]], + segment[SOURCE_LINE] + 1, + segment[SOURCE_COLUMN], + segment.length === 5 ? names[segment[NAMES_INDEX]] : null + ); +} +function generatedPositionFor(map, needle) { + const { source, line, column, bias } = needle; + return generatedPosition(map, source, line, column, bias || GREATEST_LOWER_BOUND, false); +} +function allGeneratedPositionsFor(map, needle) { + const { source, line, column, bias } = needle; + return generatedPosition(map, source, line, column, bias || LEAST_UPPER_BOUND, true); +} +function eachMapping(map, cb) { + const decoded = decodedMappings(map); + const { names, resolvedSources } = map; + for (let i = 0; i < decoded.length; i++) { + const line = decoded[i]; + for (let j = 0; j < line.length; j++) { + const seg = line[j]; + const generatedLine = i + 1; + const generatedColumn = seg[0]; + let source = null; + let originalLine = null; + let originalColumn = null; + let name = null; + if (seg.length !== 1) { + source = resolvedSources[seg[1]]; + originalLine = seg[2] + 1; + originalColumn = seg[3]; + } + if (seg.length === 5) name = names[seg[4]]; + cb({ + generatedLine, + generatedColumn, + source, + originalLine, + originalColumn, + name + }); + } + } +} +function sourceIndex(map, source) { + const { sources, resolvedSources } = map; + let index = sources.indexOf(source); + if (index === -1) index = resolvedSources.indexOf(source); + return index; +} +function sourceContentFor(map, source) { + const { sourcesContent } = map; + if (sourcesContent == null) return null; + const index = sourceIndex(map, source); + return index === -1 ? null : sourcesContent[index]; +} +function isIgnored(map, source) { + const { ignoreList } = map; + if (ignoreList == null) return false; + const index = sourceIndex(map, source); + return index === -1 ? false : ignoreList.includes(index); +} +function presortedDecodedMap(map, mapUrl) { + const tracer = new TraceMap(clone(map, []), mapUrl); + cast(tracer)._decoded = map.mappings; + return tracer; +} +function decodedMap(map) { + return clone(map, decodedMappings(map)); +} +function encodedMap(map) { + return clone(map, encodedMappings(map)); +} +function clone(map, mappings) { + return { + version: map.version, + file: map.file, + names: map.names, + sourceRoot: map.sourceRoot, + sources: map.sources, + sourcesContent: map.sourcesContent, + mappings, + ignoreList: map.ignoreList || map.x_google_ignoreList + }; +} +function OMapping(source, line, column, name) { + return { source, line, column, name }; +} +function GMapping(line, column) { + return { line, column }; +} +function traceSegmentInternal(segments, memo, line, column, bias) { + let index = memoizedBinarySearch(segments, column, memo, line); + if (found) { + index = (bias === LEAST_UPPER_BOUND ? upperBound : lowerBound)(segments, column, index); + } else if (bias === LEAST_UPPER_BOUND) index++; + if (index === -1 || index === segments.length) return -1; + return index; +} +function sliceGeneratedPositions(segments, memo, line, column, bias) { + let min = traceSegmentInternal(segments, memo, line, column, GREATEST_LOWER_BOUND); + if (!found && bias === LEAST_UPPER_BOUND) min++; + if (min === -1 || min === segments.length) return []; + const matchedColumn = found ? column : segments[min][COLUMN]; + if (!found) min = lowerBound(segments, matchedColumn, min); + const max = upperBound(segments, matchedColumn, min); + const result = []; + for (; min <= max; min++) { + const segment = segments[min]; + result.push(GMapping(segment[REV_GENERATED_LINE] + 1, segment[REV_GENERATED_COLUMN])); + } + return result; +} +function generatedPosition(map, source, line, column, bias, all) { + var _a, _b; + line--; + if (line < 0) throw new Error(LINE_GTR_ZERO); + if (column < 0) throw new Error(COL_GTR_EQ_ZERO); + const { sources, resolvedSources } = map; + let sourceIndex2 = sources.indexOf(source); + if (sourceIndex2 === -1) sourceIndex2 = resolvedSources.indexOf(source); + if (sourceIndex2 === -1) return all ? [] : GMapping(null, null); + const bySourceMemos = (_a = cast(map))._bySourceMemos || (_a._bySourceMemos = sources.map(memoizedState)); + const generated = (_b = cast(map))._bySources || (_b._bySources = buildBySources(decodedMappings(map), bySourceMemos)); + const segments = generated[sourceIndex2][line]; + if (segments == null) return all ? [] : GMapping(null, null); + const memo = bySourceMemos[sourceIndex2]; + if (all) return sliceGeneratedPositions(segments, memo, line, column, bias); + const index = traceSegmentInternal(segments, memo, line, column, bias); + if (index === -1) return GMapping(null, null); + const segment = segments[index]; + return GMapping(segment[REV_GENERATED_LINE] + 1, segment[REV_GENERATED_COLUMN]); +} +export { + FlattenMap as AnyMap, + FlattenMap, + GREATEST_LOWER_BOUND, + LEAST_UPPER_BOUND, + TraceMap, + allGeneratedPositionsFor, + decodedMap, + decodedMappings, + eachMapping, + encodedMap, + encodedMappings, + generatedPositionFor, + isIgnored, + originalPositionFor, + presortedDecodedMap, + sourceContentFor, + traceSegment +}; +//# sourceMappingURL=trace-mapping.mjs.map diff --git a/node_modules/@jridgewell/trace-mapping/dist/trace-mapping.mjs.map b/node_modules/@jridgewell/trace-mapping/dist/trace-mapping.mjs.map new file mode 100644 index 0000000000..a78958143b --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/dist/trace-mapping.mjs.map @@ -0,0 +1,6 @@ +{ + "version": 3, + "sources": ["../src/trace-mapping.ts", "../src/resolve.ts", "../src/strip-filename.ts", "../src/sourcemap-segment.ts", "../src/sort.ts", "../src/by-source.ts", "../src/binary-search.ts", "../src/types.ts", "../src/flatten-map.ts"], + "mappings": "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", + "names": ["sourceIndex", "sourceIndex"] +} diff --git a/node_modules/@jridgewell/trace-mapping/dist/trace-mapping.umd.js b/node_modules/@jridgewell/trace-mapping/dist/trace-mapping.umd.js new file mode 100644 index 0000000000..0387ae38c6 --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/dist/trace-mapping.umd.js @@ -0,0 +1,559 @@ +(function (global, factory) { + if (typeof exports === 'object' && typeof module !== 'undefined') { + factory(module, require('@jridgewell/resolve-uri'), require('@jridgewell/sourcemap-codec')); + module.exports = def(module); + } else if (typeof define === 'function' && define.amd) { + define(['module', '@jridgewell/resolve-uri', '@jridgewell/sourcemap-codec'], function(mod) { + factory.apply(this, arguments); + mod.exports = def(mod); + }); + } else { + const mod = { exports: {} }; + factory(mod, global.resolveURI, global.sourcemapCodec); + global = typeof globalThis !== 'undefined' ? globalThis : global || self; + global.traceMapping = def(mod); + } + function def(m) { return 'default' in m.exports ? m.exports.default : m.exports; } +})(this, (function (module, require_resolveURI, require_sourcemapCodec) { +"use strict"; +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// umd:@jridgewell/sourcemap-codec +var require_sourcemap_codec = __commonJS({ + "umd:@jridgewell/sourcemap-codec"(exports, module2) { + module2.exports = require_sourcemapCodec; + } +}); + +// umd:@jridgewell/resolve-uri +var require_resolve_uri = __commonJS({ + "umd:@jridgewell/resolve-uri"(exports, module2) { + module2.exports = require_resolveURI; + } +}); + +// src/trace-mapping.ts +var trace_mapping_exports = {}; +__export(trace_mapping_exports, { + AnyMap: () => FlattenMap, + FlattenMap: () => FlattenMap, + GREATEST_LOWER_BOUND: () => GREATEST_LOWER_BOUND, + LEAST_UPPER_BOUND: () => LEAST_UPPER_BOUND, + TraceMap: () => TraceMap, + allGeneratedPositionsFor: () => allGeneratedPositionsFor, + decodedMap: () => decodedMap, + decodedMappings: () => decodedMappings, + eachMapping: () => eachMapping, + encodedMap: () => encodedMap, + encodedMappings: () => encodedMappings, + generatedPositionFor: () => generatedPositionFor, + isIgnored: () => isIgnored, + originalPositionFor: () => originalPositionFor, + presortedDecodedMap: () => presortedDecodedMap, + sourceContentFor: () => sourceContentFor, + traceSegment: () => traceSegment +}); +module.exports = __toCommonJS(trace_mapping_exports); +var import_sourcemap_codec = __toESM(require_sourcemap_codec()); + +// src/resolve.ts +var import_resolve_uri = __toESM(require_resolve_uri()); + +// src/strip-filename.ts +function stripFilename(path) { + if (!path) return ""; + const index = path.lastIndexOf("/"); + return path.slice(0, index + 1); +} + +// src/resolve.ts +function resolver(mapUrl, sourceRoot) { + const from = stripFilename(mapUrl); + const prefix = sourceRoot ? sourceRoot + "/" : ""; + return (source) => (0, import_resolve_uri.default)(prefix + (source || ""), from); +} + +// src/sourcemap-segment.ts +var COLUMN = 0; +var SOURCES_INDEX = 1; +var SOURCE_LINE = 2; +var SOURCE_COLUMN = 3; +var NAMES_INDEX = 4; +var REV_GENERATED_LINE = 1; +var REV_GENERATED_COLUMN = 2; + +// src/sort.ts +function maybeSort(mappings, owned) { + const unsortedIndex = nextUnsortedSegmentLine(mappings, 0); + if (unsortedIndex === mappings.length) return mappings; + if (!owned) mappings = mappings.slice(); + for (let i = unsortedIndex; i < mappings.length; i = nextUnsortedSegmentLine(mappings, i + 1)) { + mappings[i] = sortSegments(mappings[i], owned); + } + return mappings; +} +function nextUnsortedSegmentLine(mappings, start) { + for (let i = start; i < mappings.length; i++) { + if (!isSorted(mappings[i])) return i; + } + return mappings.length; +} +function isSorted(line) { + for (let j = 1; j < line.length; j++) { + if (line[j][COLUMN] < line[j - 1][COLUMN]) { + return false; + } + } + return true; +} +function sortSegments(line, owned) { + if (!owned) line = line.slice(); + return line.sort(sortComparator); +} +function sortComparator(a, b) { + return a[COLUMN] - b[COLUMN]; +} + +// src/by-source.ts +function buildBySources(decoded, memos) { + const sources = memos.map(() => []); + for (let i = 0; i < decoded.length; i++) { + const line = decoded[i]; + for (let j = 0; j < line.length; j++) { + const seg = line[j]; + if (seg.length === 1) continue; + const sourceIndex2 = seg[SOURCES_INDEX]; + const sourceLine = seg[SOURCE_LINE]; + const sourceColumn = seg[SOURCE_COLUMN]; + const source = sources[sourceIndex2]; + const segs = source[sourceLine] || (source[sourceLine] = []); + segs.push([sourceColumn, i, seg[COLUMN]]); + } + } + for (let i = 0; i < sources.length; i++) { + const source = sources[i]; + for (let j = 0; j < source.length; j++) { + const line = source[j]; + if (line) line.sort(sortComparator); + } + } + return sources; +} + +// src/binary-search.ts +var found = false; +function binarySearch(haystack, needle, low, high) { + while (low <= high) { + const mid = low + (high - low >> 1); + const cmp = haystack[mid][COLUMN] - needle; + if (cmp === 0) { + found = true; + return mid; + } + if (cmp < 0) { + low = mid + 1; + } else { + high = mid - 1; + } + } + found = false; + return low - 1; +} +function upperBound(haystack, needle, index) { + for (let i = index + 1; i < haystack.length; index = i++) { + if (haystack[i][COLUMN] !== needle) break; + } + return index; +} +function lowerBound(haystack, needle, index) { + for (let i = index - 1; i >= 0; index = i--) { + if (haystack[i][COLUMN] !== needle) break; + } + return index; +} +function memoizedState() { + return { + lastKey: -1, + lastNeedle: -1, + lastIndex: -1 + }; +} +function memoizedBinarySearch(haystack, needle, state, key) { + const { lastKey, lastNeedle, lastIndex } = state; + let low = 0; + let high = haystack.length - 1; + if (key === lastKey) { + if (needle === lastNeedle) { + found = lastIndex !== -1 && haystack[lastIndex][COLUMN] === needle; + return lastIndex; + } + if (needle >= lastNeedle) { + low = lastIndex === -1 ? 0 : lastIndex; + } else { + high = lastIndex; + } + } + state.lastKey = key; + state.lastNeedle = needle; + return state.lastIndex = binarySearch(haystack, needle, low, high); +} + +// src/types.ts +function parse(map) { + return typeof map === "string" ? JSON.parse(map) : map; +} + +// src/flatten-map.ts +var FlattenMap = function(map, mapUrl) { + const parsed = parse(map); + if (!("sections" in parsed)) { + return new TraceMap(parsed, mapUrl); + } + const mappings = []; + const sources = []; + const sourcesContent = []; + const names = []; + const ignoreList = []; + recurse( + parsed, + mapUrl, + mappings, + sources, + sourcesContent, + names, + ignoreList, + 0, + 0, + Infinity, + Infinity + ); + const joined = { + version: 3, + file: parsed.file, + names, + sources, + sourcesContent, + mappings, + ignoreList + }; + return presortedDecodedMap(joined); +}; +function recurse(input, mapUrl, mappings, sources, sourcesContent, names, ignoreList, lineOffset, columnOffset, stopLine, stopColumn) { + const { sections } = input; + for (let i = 0; i < sections.length; i++) { + const { map, offset } = sections[i]; + let sl = stopLine; + let sc = stopColumn; + if (i + 1 < sections.length) { + const nextOffset = sections[i + 1].offset; + sl = Math.min(stopLine, lineOffset + nextOffset.line); + if (sl === stopLine) { + sc = Math.min(stopColumn, columnOffset + nextOffset.column); + } else if (sl < stopLine) { + sc = columnOffset + nextOffset.column; + } + } + addSection( + map, + mapUrl, + mappings, + sources, + sourcesContent, + names, + ignoreList, + lineOffset + offset.line, + columnOffset + offset.column, + sl, + sc + ); + } +} +function addSection(input, mapUrl, mappings, sources, sourcesContent, names, ignoreList, lineOffset, columnOffset, stopLine, stopColumn) { + const parsed = parse(input); + if ("sections" in parsed) return recurse(...arguments); + const map = new TraceMap(parsed, mapUrl); + const sourcesOffset = sources.length; + const namesOffset = names.length; + const decoded = decodedMappings(map); + const { resolvedSources, sourcesContent: contents, ignoreList: ignores } = map; + append(sources, resolvedSources); + append(names, map.names); + if (contents) append(sourcesContent, contents); + else for (let i = 0; i < resolvedSources.length; i++) sourcesContent.push(null); + if (ignores) for (let i = 0; i < ignores.length; i++) ignoreList.push(ignores[i] + sourcesOffset); + for (let i = 0; i < decoded.length; i++) { + const lineI = lineOffset + i; + if (lineI > stopLine) return; + const out = getLine(mappings, lineI); + const cOffset = i === 0 ? columnOffset : 0; + const line = decoded[i]; + for (let j = 0; j < line.length; j++) { + const seg = line[j]; + const column = cOffset + seg[COLUMN]; + if (lineI === stopLine && column >= stopColumn) return; + if (seg.length === 1) { + out.push([column]); + continue; + } + const sourcesIndex = sourcesOffset + seg[SOURCES_INDEX]; + const sourceLine = seg[SOURCE_LINE]; + const sourceColumn = seg[SOURCE_COLUMN]; + out.push( + seg.length === 4 ? [column, sourcesIndex, sourceLine, sourceColumn] : [column, sourcesIndex, sourceLine, sourceColumn, namesOffset + seg[NAMES_INDEX]] + ); + } + } +} +function append(arr, other) { + for (let i = 0; i < other.length; i++) arr.push(other[i]); +} +function getLine(arr, index) { + for (let i = arr.length; i <= index; i++) arr[i] = []; + return arr[index]; +} + +// src/trace-mapping.ts +var LINE_GTR_ZERO = "`line` must be greater than 0 (lines start at line 1)"; +var COL_GTR_EQ_ZERO = "`column` must be greater than or equal to 0 (columns start at column 0)"; +var LEAST_UPPER_BOUND = -1; +var GREATEST_LOWER_BOUND = 1; +var TraceMap = class { + constructor(map, mapUrl) { + const isString = typeof map === "string"; + if (!isString && map._decodedMemo) return map; + const parsed = parse(map); + const { version, file, names, sourceRoot, sources, sourcesContent } = parsed; + this.version = version; + this.file = file; + this.names = names || []; + this.sourceRoot = sourceRoot; + this.sources = sources; + this.sourcesContent = sourcesContent; + this.ignoreList = parsed.ignoreList || parsed.x_google_ignoreList || void 0; + const resolve = resolver(mapUrl, sourceRoot); + this.resolvedSources = sources.map(resolve); + const { mappings } = parsed; + if (typeof mappings === "string") { + this._encoded = mappings; + this._decoded = void 0; + } else if (Array.isArray(mappings)) { + this._encoded = void 0; + this._decoded = maybeSort(mappings, isString); + } else if (parsed.sections) { + throw new Error(`TraceMap passed sectioned source map, please use FlattenMap export instead`); + } else { + throw new Error(`invalid source map: ${JSON.stringify(parsed)}`); + } + this._decodedMemo = memoizedState(); + this._bySources = void 0; + this._bySourceMemos = void 0; + } +}; +function cast(map) { + return map; +} +function encodedMappings(map) { + var _a, _b; + return (_b = (_a = cast(map))._encoded) != null ? _b : _a._encoded = (0, import_sourcemap_codec.encode)(cast(map)._decoded); +} +function decodedMappings(map) { + var _a; + return (_a = cast(map))._decoded || (_a._decoded = (0, import_sourcemap_codec.decode)(cast(map)._encoded)); +} +function traceSegment(map, line, column) { + const decoded = decodedMappings(map); + if (line >= decoded.length) return null; + const segments = decoded[line]; + const index = traceSegmentInternal( + segments, + cast(map)._decodedMemo, + line, + column, + GREATEST_LOWER_BOUND + ); + return index === -1 ? null : segments[index]; +} +function originalPositionFor(map, needle) { + let { line, column, bias } = needle; + line--; + if (line < 0) throw new Error(LINE_GTR_ZERO); + if (column < 0) throw new Error(COL_GTR_EQ_ZERO); + const decoded = decodedMappings(map); + if (line >= decoded.length) return OMapping(null, null, null, null); + const segments = decoded[line]; + const index = traceSegmentInternal( + segments, + cast(map)._decodedMemo, + line, + column, + bias || GREATEST_LOWER_BOUND + ); + if (index === -1) return OMapping(null, null, null, null); + const segment = segments[index]; + if (segment.length === 1) return OMapping(null, null, null, null); + const { names, resolvedSources } = map; + return OMapping( + resolvedSources[segment[SOURCES_INDEX]], + segment[SOURCE_LINE] + 1, + segment[SOURCE_COLUMN], + segment.length === 5 ? names[segment[NAMES_INDEX]] : null + ); +} +function generatedPositionFor(map, needle) { + const { source, line, column, bias } = needle; + return generatedPosition(map, source, line, column, bias || GREATEST_LOWER_BOUND, false); +} +function allGeneratedPositionsFor(map, needle) { + const { source, line, column, bias } = needle; + return generatedPosition(map, source, line, column, bias || LEAST_UPPER_BOUND, true); +} +function eachMapping(map, cb) { + const decoded = decodedMappings(map); + const { names, resolvedSources } = map; + for (let i = 0; i < decoded.length; i++) { + const line = decoded[i]; + for (let j = 0; j < line.length; j++) { + const seg = line[j]; + const generatedLine = i + 1; + const generatedColumn = seg[0]; + let source = null; + let originalLine = null; + let originalColumn = null; + let name = null; + if (seg.length !== 1) { + source = resolvedSources[seg[1]]; + originalLine = seg[2] + 1; + originalColumn = seg[3]; + } + if (seg.length === 5) name = names[seg[4]]; + cb({ + generatedLine, + generatedColumn, + source, + originalLine, + originalColumn, + name + }); + } + } +} +function sourceIndex(map, source) { + const { sources, resolvedSources } = map; + let index = sources.indexOf(source); + if (index === -1) index = resolvedSources.indexOf(source); + return index; +} +function sourceContentFor(map, source) { + const { sourcesContent } = map; + if (sourcesContent == null) return null; + const index = sourceIndex(map, source); + return index === -1 ? null : sourcesContent[index]; +} +function isIgnored(map, source) { + const { ignoreList } = map; + if (ignoreList == null) return false; + const index = sourceIndex(map, source); + return index === -1 ? false : ignoreList.includes(index); +} +function presortedDecodedMap(map, mapUrl) { + const tracer = new TraceMap(clone(map, []), mapUrl); + cast(tracer)._decoded = map.mappings; + return tracer; +} +function decodedMap(map) { + return clone(map, decodedMappings(map)); +} +function encodedMap(map) { + return clone(map, encodedMappings(map)); +} +function clone(map, mappings) { + return { + version: map.version, + file: map.file, + names: map.names, + sourceRoot: map.sourceRoot, + sources: map.sources, + sourcesContent: map.sourcesContent, + mappings, + ignoreList: map.ignoreList || map.x_google_ignoreList + }; +} +function OMapping(source, line, column, name) { + return { source, line, column, name }; +} +function GMapping(line, column) { + return { line, column }; +} +function traceSegmentInternal(segments, memo, line, column, bias) { + let index = memoizedBinarySearch(segments, column, memo, line); + if (found) { + index = (bias === LEAST_UPPER_BOUND ? upperBound : lowerBound)(segments, column, index); + } else if (bias === LEAST_UPPER_BOUND) index++; + if (index === -1 || index === segments.length) return -1; + return index; +} +function sliceGeneratedPositions(segments, memo, line, column, bias) { + let min = traceSegmentInternal(segments, memo, line, column, GREATEST_LOWER_BOUND); + if (!found && bias === LEAST_UPPER_BOUND) min++; + if (min === -1 || min === segments.length) return []; + const matchedColumn = found ? column : segments[min][COLUMN]; + if (!found) min = lowerBound(segments, matchedColumn, min); + const max = upperBound(segments, matchedColumn, min); + const result = []; + for (; min <= max; min++) { + const segment = segments[min]; + result.push(GMapping(segment[REV_GENERATED_LINE] + 1, segment[REV_GENERATED_COLUMN])); + } + return result; +} +function generatedPosition(map, source, line, column, bias, all) { + var _a, _b; + line--; + if (line < 0) throw new Error(LINE_GTR_ZERO); + if (column < 0) throw new Error(COL_GTR_EQ_ZERO); + const { sources, resolvedSources } = map; + let sourceIndex2 = sources.indexOf(source); + if (sourceIndex2 === -1) sourceIndex2 = resolvedSources.indexOf(source); + if (sourceIndex2 === -1) return all ? [] : GMapping(null, null); + const bySourceMemos = (_a = cast(map))._bySourceMemos || (_a._bySourceMemos = sources.map(memoizedState)); + const generated = (_b = cast(map))._bySources || (_b._bySources = buildBySources(decodedMappings(map), bySourceMemos)); + const segments = generated[sourceIndex2][line]; + if (segments == null) return all ? [] : GMapping(null, null); + const memo = bySourceMemos[sourceIndex2]; + if (all) return sliceGeneratedPositions(segments, memo, line, column, bias); + const index = traceSegmentInternal(segments, memo, line, column, bias); + if (index === -1) return GMapping(null, null); + const segment = segments[index]; + return GMapping(segment[REV_GENERATED_LINE] + 1, segment[REV_GENERATED_COLUMN]); +} +})); +//# sourceMappingURL=trace-mapping.umd.js.map diff --git a/node_modules/@jridgewell/trace-mapping/dist/trace-mapping.umd.js.map b/node_modules/@jridgewell/trace-mapping/dist/trace-mapping.umd.js.map new file mode 100644 index 0000000000..68b0c775d6 --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/dist/trace-mapping.umd.js.map @@ -0,0 +1,6 @@ +{ + "version": 3, + "sources": ["umd:@jridgewell/sourcemap-codec", "umd:@jridgewell/resolve-uri", "../src/trace-mapping.ts", "../src/resolve.ts", "../src/strip-filename.ts", "../src/sourcemap-segment.ts", "../src/sort.ts", "../src/by-source.ts", "../src/binary-search.ts", "../src/types.ts", "../src/flatten-map.ts"], + "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA,6CAAAA,SAAA;AAAA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACAjB;AAAA,yCAAAC,SAAA;AAAA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACAjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6BAA+B;;;ACA/B,yBAAuB;;;ACGR,SAAR,cAA+B,MAAyC;AAC7E,MAAI,CAAC,KAAM,QAAO;AAClB,QAAM,QAAQ,KAAK,YAAY,GAAG;AAClC,SAAO,KAAK,MAAM,GAAG,QAAQ,CAAC;AAChC;;;ADHe,SAAR,SACL,QACA,YACS;AACT,QAAM,OAAO,cAAc,MAAM;AAIjC,QAAM,SAAS,aAAa,aAAa,MAAM;AAE/C,SAAO,CAAC,eAAW,mBAAAC,SAAW,UAAU,UAAU,KAAK,IAAI;AAC7D;;;AEAO,IAAM,SAAS;AACf,IAAM,gBAAgB;AACtB,IAAM,cAAc;AACpB,IAAM,gBAAgB;AACtB,IAAM,cAAc;AAEpB,IAAM,qBAAqB;AAC3B,IAAM,uBAAuB;;;AClBrB,SAAR,UACL,UACA,OACsB;AACtB,QAAM,gBAAgB,wBAAwB,UAAU,CAAC;AACzD,MAAI,kBAAkB,SAAS,OAAQ,QAAO;AAI9C,MAAI,CAAC,MAAO,YAAW,SAAS,MAAM;AAEtC,WAAS,IAAI,eAAe,IAAI,SAAS,QAAQ,IAAI,wBAAwB,UAAU,IAAI,CAAC,GAAG;AAC7F,aAAS,CAAC,IAAI,aAAa,SAAS,CAAC,GAAG,KAAK;AAAA,EAC/C;AACA,SAAO;AACT;AAEA,SAAS,wBAAwB,UAAgC,OAAuB;AACtF,WAAS,IAAI,OAAO,IAAI,SAAS,QAAQ,KAAK;AAC5C,QAAI,CAAC,SAAS,SAAS,CAAC,CAAC,EAAG,QAAO;AAAA,EACrC;AACA,SAAO,SAAS;AAClB;AAEA,SAAS,SAAS,MAAmC;AACnD,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,QAAI,KAAK,CAAC,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC,EAAE,MAAM,GAAG;AACzC,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,aAAa,MAA0B,OAAoC;AAClF,MAAI,CAAC,MAAO,QAAO,KAAK,MAAM;AAC9B,SAAO,KAAK,KAAK,cAAc;AACjC;AAEO,SAAS,eAA4D,GAAM,GAAc;AAC9F,SAAO,EAAE,MAAM,IAAI,EAAE,MAAM;AAC7B;;;ACnCe,SAAR,eACL,SACA,OACU;AACV,QAAM,UAAoB,MAAM,IAAI,MAAM,CAAC,CAAC;AAE5C,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,UAAM,OAAO,QAAQ,CAAC;AACtB,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,YAAM,MAAM,KAAK,CAAC;AAClB,UAAI,IAAI,WAAW,EAAG;AAEtB,YAAMC,eAAc,IAAI,aAAa;AACrC,YAAM,aAAa,IAAI,WAAW;AAClC,YAAM,eAAe,IAAI,aAAa;AAEtC,YAAM,SAAS,QAAQA,YAAW;AAClC,YAAM,OAAQ,4CAAuB,CAAC;AACtC,WAAK,KAAK,CAAC,cAAc,GAAG,IAAI,MAAM,CAAC,CAAC;AAAA,IAC1C;AAAA,EACF;AAEA,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,UAAM,SAAS,QAAQ,CAAC;AACxB,aAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,YAAM,OAAO,OAAO,CAAC;AACrB,UAAI,KAAM,MAAK,KAAK,cAAc;AAAA,IACpC;AAAA,EACF;AAEA,SAAO;AACT;;;AC/BO,IAAI,QAAQ;AAkBZ,SAAS,aACd,UACA,QACA,KACA,MACQ;AACR,SAAO,OAAO,MAAM;AAClB,UAAM,MAAM,OAAQ,OAAO,OAAQ;AACnC,UAAM,MAAM,SAAS,GAAG,EAAE,MAAM,IAAI;AAEpC,QAAI,QAAQ,GAAG;AACb,cAAQ;AACR,aAAO;AAAA,IACT;AAEA,QAAI,MAAM,GAAG;AACX,YAAM,MAAM;AAAA,IACd,OAAO;AACL,aAAO,MAAM;AAAA,IACf;AAAA,EACF;AAEA,UAAQ;AACR,SAAO,MAAM;AACf;AAEO,SAAS,WACd,UACA,QACA,OACQ;AACR,WAAS,IAAI,QAAQ,GAAG,IAAI,SAAS,QAAQ,QAAQ,KAAK;AACxD,QAAI,SAAS,CAAC,EAAE,MAAM,MAAM,OAAQ;AAAA,EACtC;AACA,SAAO;AACT;AAEO,SAAS,WACd,UACA,QACA,OACQ;AACR,WAAS,IAAI,QAAQ,GAAG,KAAK,GAAG,QAAQ,KAAK;AAC3C,QAAI,SAAS,CAAC,EAAE,MAAM,MAAM,OAAQ;AAAA,EACtC;AACA,SAAO;AACT;AAEO,SAAS,gBAA2B;AACzC,SAAO;AAAA,IACL,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,WAAW;AAAA,EACb;AACF;AAMO,SAAS,qBACd,UACA,QACA,OACA,KACQ;AACR,QAAM,EAAE,SAAS,YAAY,UAAU,IAAI;AAE3C,MAAI,MAAM;AACV,MAAI,OAAO,SAAS,SAAS;AAC7B,MAAI,QAAQ,SAAS;AACnB,QAAI,WAAW,YAAY;AACzB,cAAQ,cAAc,MAAM,SAAS,SAAS,EAAE,MAAM,MAAM;AAC5D,aAAO;AAAA,IACT;AAEA,QAAI,UAAU,YAAY;AAExB,YAAM,cAAc,KAAK,IAAI;AAAA,IAC/B,OAAO;AACL,aAAO;AAAA,IACT;AAAA,EACF;AACA,QAAM,UAAU;AAChB,QAAM,aAAa;AAEnB,SAAQ,MAAM,YAAY,aAAa,UAAU,QAAQ,KAAK,IAAI;AACpE;;;ACHO,SAAS,MAAS,KAA4B;AACnD,SAAO,OAAO,QAAQ,WAAW,KAAK,MAAM,GAAG,IAAK;AACtD;;;ACvFO,IAAM,aAAyB,SAAU,KAAK,QAAQ;AAC3D,QAAM,SAAS,MAAM,GAA8B;AAEnD,MAAI,EAAE,cAAc,SAAS;AAC3B,WAAO,IAAI,SAAS,QAA2D,MAAM;AAAA,EACvF;AAEA,QAAM,WAAiC,CAAC;AACxC,QAAM,UAAoB,CAAC;AAC3B,QAAM,iBAAoC,CAAC;AAC3C,QAAM,QAAkB,CAAC;AACzB,QAAM,aAAuB,CAAC;AAE9B;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,QAAM,SAA2B;AAAA,IAC/B,SAAS;AAAA,IACT,MAAM,OAAO;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,SAAO,oBAAoB,MAAM;AACnC;AAEA,SAAS,QACP,OACA,QACA,UACA,SACA,gBACA,OACA,YACA,YACA,cACA,UACA,YACA;AACA,QAAM,EAAE,SAAS,IAAI;AACrB,WAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,UAAM,EAAE,KAAK,OAAO,IAAI,SAAS,CAAC;AAElC,QAAI,KAAK;AACT,QAAI,KAAK;AACT,QAAI,IAAI,IAAI,SAAS,QAAQ;AAC3B,YAAM,aAAa,SAAS,IAAI,CAAC,EAAE;AACnC,WAAK,KAAK,IAAI,UAAU,aAAa,WAAW,IAAI;AAEpD,UAAI,OAAO,UAAU;AACnB,aAAK,KAAK,IAAI,YAAY,eAAe,WAAW,MAAM;AAAA,MAC5D,WAAW,KAAK,UAAU;AACxB,aAAK,eAAe,WAAW;AAAA,MACjC;AAAA,IACF;AAEA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAa,OAAO;AAAA,MACpB,eAAe,OAAO;AAAA,MACtB;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,WACP,OACA,QACA,UACA,SACA,gBACA,OACA,YACA,YACA,cACA,UACA,YACA;AACA,QAAM,SAAS,MAAM,KAAK;AAC1B,MAAI,cAAc,OAAQ,QAAO,QAAQ,GAAI,SAAmD;AAEhG,QAAM,MAAM,IAAI,SAAS,QAAQ,MAAM;AACvC,QAAM,gBAAgB,QAAQ;AAC9B,QAAM,cAAc,MAAM;AAC1B,QAAM,UAAU,gBAAgB,GAAG;AACnC,QAAM,EAAE,iBAAiB,gBAAgB,UAAU,YAAY,QAAQ,IAAI;AAE3E,SAAO,SAAS,eAAe;AAC/B,SAAO,OAAO,IAAI,KAAK;AAEvB,MAAI,SAAU,QAAO,gBAAgB,QAAQ;AAAA,MACxC,UAAS,IAAI,GAAG,IAAI,gBAAgB,QAAQ,IAAK,gBAAe,KAAK,IAAI;AAE9E,MAAI,QAAS,UAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,IAAK,YAAW,KAAK,QAAQ,CAAC,IAAI,aAAa;AAEhG,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,UAAM,QAAQ,aAAa;AAM3B,QAAI,QAAQ,SAAU;AAItB,UAAM,MAAM,QAAQ,UAAU,KAAK;AAGnC,UAAM,UAAU,MAAM,IAAI,eAAe;AAEzC,UAAM,OAAO,QAAQ,CAAC;AACtB,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,YAAM,MAAM,KAAK,CAAC;AAClB,YAAM,SAAS,UAAU,IAAI,MAAM;AAInC,UAAI,UAAU,YAAY,UAAU,WAAY;AAEhD,UAAI,IAAI,WAAW,GAAG;AACpB,YAAI,KAAK,CAAC,MAAM,CAAC;AACjB;AAAA,MACF;AAEA,YAAM,eAAe,gBAAgB,IAAI,aAAa;AACtD,YAAM,aAAa,IAAI,WAAW;AAClC,YAAM,eAAe,IAAI,aAAa;AACtC,UAAI;AAAA,QACF,IAAI,WAAW,IACX,CAAC,QAAQ,cAAc,YAAY,YAAY,IAC/C,CAAC,QAAQ,cAAc,YAAY,cAAc,cAAc,IAAI,WAAW,CAAC;AAAA,MACrF;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,OAAU,KAAU,OAAY;AACvC,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,IAAK,KAAI,KAAK,MAAM,CAAC,CAAC;AAC1D;AAEA,SAAS,QAAW,KAAY,OAAoB;AAClD,WAAS,IAAI,IAAI,QAAQ,KAAK,OAAO,IAAK,KAAI,CAAC,IAAI,CAAC;AACpD,SAAO,IAAI,KAAK;AAClB;;;ARhHA,IAAM,gBAAgB;AACtB,IAAM,kBAAkB;AAEjB,IAAM,oBAAoB;AAC1B,IAAM,uBAAuB;AAI7B,IAAM,WAAN,MAAoC;AAAA,EAkBzC,YAAY,KAAyB,QAAwB;AAC3D,UAAM,WAAW,OAAO,QAAQ;AAChC,QAAI,CAAC,YAAa,IAAyC,aAAc,QAAO;AAEhF,UAAM,SAAS,MAAM,GAAwC;AAE7D,UAAM,EAAE,SAAS,MAAM,OAAO,YAAY,SAAS,eAAe,IAAI;AACtE,SAAK,UAAU;AACf,SAAK,OAAO;AACZ,SAAK,QAAQ,SAAS,CAAC;AACvB,SAAK,aAAa;AAClB,SAAK,UAAU;AACf,SAAK,iBAAiB;AACtB,SAAK,aAAa,OAAO,cAAe,OAAkB,uBAAuB;AAEjF,UAAM,UAAU,SAAS,QAAQ,UAAU;AAC3C,SAAK,kBAAkB,QAAQ,IAAI,OAAO;AAE1C,UAAM,EAAE,SAAS,IAAI;AACrB,QAAI,OAAO,aAAa,UAAU;AAChC,WAAK,WAAW;AAChB,WAAK,WAAW;AAAA,IAClB,WAAW,MAAM,QAAQ,QAAQ,GAAG;AAClC,WAAK,WAAW;AAChB,WAAK,WAAW,UAAU,UAAU,QAAQ;AAAA,IAC9C,WAAY,OAAyC,UAAU;AAC7D,YAAM,IAAI,MAAM,4EAA4E;AAAA,IAC9F,OAAO;AACL,YAAM,IAAI,MAAM,uBAAuB,KAAK,UAAU,MAAM,CAAC,EAAE;AAAA,IACjE;AAEA,SAAK,eAAe,cAAc;AAClC,SAAK,aAAa;AAClB,SAAK,iBAAiB;AAAA,EACxB;AACF;AAMA,SAAS,KAAK,KAAyB;AACrC,SAAO;AACT;AAKO,SAAS,gBAAgB,KAA6C;AAzJ7E;AA0JE,UAAQ,gBAAK,GAAG,GAAE,aAAV,eAAU,eAAa,+BAAO,KAAK,GAAG,EAAE,QAAS;AAC3D;AAKO,SAAS,gBAAgB,KAAuD;AAhKvF;AAiKE,UAAQ,UAAK,GAAG,GAAE,aAAV,GAAU,eAAa,+BAAO,KAAK,GAAG,EAAE,QAAS;AAC3D;AAMO,SAAS,aACd,KACA,MACA,QACmC;AACnC,QAAM,UAAU,gBAAgB,GAAG;AAInC,MAAI,QAAQ,QAAQ,OAAQ,QAAO;AAEnC,QAAM,WAAW,QAAQ,IAAI;AAC7B,QAAM,QAAQ;AAAA,IACZ;AAAA,IACA,KAAK,GAAG,EAAE;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,SAAO,UAAU,KAAK,OAAO,SAAS,KAAK;AAC7C;AAOO,SAAS,oBACd,KACA,QAC0C;AAC1C,MAAI,EAAE,MAAM,QAAQ,KAAK,IAAI;AAC7B;AACA,MAAI,OAAO,EAAG,OAAM,IAAI,MAAM,aAAa;AAC3C,MAAI,SAAS,EAAG,OAAM,IAAI,MAAM,eAAe;AAE/C,QAAM,UAAU,gBAAgB,GAAG;AAInC,MAAI,QAAQ,QAAQ,OAAQ,QAAO,SAAS,MAAM,MAAM,MAAM,IAAI;AAElE,QAAM,WAAW,QAAQ,IAAI;AAC7B,QAAM,QAAQ;AAAA,IACZ;AAAA,IACA,KAAK,GAAG,EAAE;AAAA,IACV;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,EACV;AAEA,MAAI,UAAU,GAAI,QAAO,SAAS,MAAM,MAAM,MAAM,IAAI;AAExD,QAAM,UAAU,SAAS,KAAK;AAC9B,MAAI,QAAQ,WAAW,EAAG,QAAO,SAAS,MAAM,MAAM,MAAM,IAAI;AAEhE,QAAM,EAAE,OAAO,gBAAgB,IAAI;AACnC,SAAO;AAAA,IACL,gBAAgB,QAAQ,aAAa,CAAC;AAAA,IACtC,QAAQ,WAAW,IAAI;AAAA,IACvB,QAAQ,aAAa;AAAA,IACrB,QAAQ,WAAW,IAAI,MAAM,QAAQ,WAAW,CAAC,IAAI;AAAA,EACvD;AACF;AAKO,SAAS,qBACd,KACA,QAC4C;AAC5C,QAAM,EAAE,QAAQ,MAAM,QAAQ,KAAK,IAAI;AACvC,SAAO,kBAAkB,KAAK,QAAQ,MAAM,QAAQ,QAAQ,sBAAsB,KAAK;AACzF;AAKO,SAAS,yBAAyB,KAAe,QAA0C;AAChG,QAAM,EAAE,QAAQ,MAAM,QAAQ,KAAK,IAAI;AAEvC,SAAO,kBAAkB,KAAK,QAAQ,MAAM,QAAQ,QAAQ,mBAAmB,IAAI;AACrF;AAKO,SAAS,YAAY,KAAe,IAA0C;AACnF,QAAM,UAAU,gBAAgB,GAAG;AACnC,QAAM,EAAE,OAAO,gBAAgB,IAAI;AAEnC,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,UAAM,OAAO,QAAQ,CAAC;AACtB,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,YAAM,MAAM,KAAK,CAAC;AAElB,YAAM,gBAAgB,IAAI;AAC1B,YAAM,kBAAkB,IAAI,CAAC;AAC7B,UAAI,SAAS;AACb,UAAI,eAAe;AACnB,UAAI,iBAAiB;AACrB,UAAI,OAAO;AACX,UAAI,IAAI,WAAW,GAAG;AACpB,iBAAS,gBAAgB,IAAI,CAAC,CAAC;AAC/B,uBAAe,IAAI,CAAC,IAAI;AACxB,yBAAiB,IAAI,CAAC;AAAA,MACxB;AACA,UAAI,IAAI,WAAW,EAAG,QAAO,MAAM,IAAI,CAAC,CAAC;AAEzC,SAAG;AAAA,QACD;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAgB;AAAA,IAClB;AAAA,EACF;AACF;AAEA,SAAS,YAAY,KAAe,QAAwB;AAC1D,QAAM,EAAE,SAAS,gBAAgB,IAAI;AACrC,MAAI,QAAQ,QAAQ,QAAQ,MAAM;AAClC,MAAI,UAAU,GAAI,SAAQ,gBAAgB,QAAQ,MAAM;AACxD,SAAO;AACT;AAKO,SAAS,iBAAiB,KAAe,QAA+B;AAC7E,QAAM,EAAE,eAAe,IAAI;AAC3B,MAAI,kBAAkB,KAAM,QAAO;AACnC,QAAM,QAAQ,YAAY,KAAK,MAAM;AACrC,SAAO,UAAU,KAAK,OAAO,eAAe,KAAK;AACnD;AAKO,SAAS,UAAU,KAAe,QAAyB;AAChE,QAAM,EAAE,WAAW,IAAI;AACvB,MAAI,cAAc,KAAM,QAAO;AAC/B,QAAM,QAAQ,YAAY,KAAK,MAAM;AACrC,SAAO,UAAU,KAAK,QAAQ,WAAW,SAAS,KAAK;AACzD;AAMO,SAAS,oBAAoB,KAAuB,QAA2B;AACpF,QAAM,SAAS,IAAI,SAAS,MAAM,KAAK,CAAC,CAAC,GAAG,MAAM;AAClD,OAAK,MAAM,EAAE,WAAW,IAAI;AAC5B,SAAO;AACT;AAMO,SAAS,WACd,KACkF;AAClF,SAAO,MAAM,KAAK,gBAAgB,GAAG,CAAC;AACxC;AAMO,SAAS,WAAW,KAAiC;AAC1D,SAAO,MAAM,KAAK,gBAAgB,GAAG,CAAC;AACxC;AAEA,SAAS,MACP,KACA,UACwD;AACxD,SAAO;AAAA,IACL,SAAS,IAAI;AAAA,IACb,MAAM,IAAI;AAAA,IACV,OAAO,IAAI;AAAA,IACX,YAAY,IAAI;AAAA,IAChB,SAAS,IAAI;AAAA,IACb,gBAAgB,IAAI;AAAA,IACpB;AAAA,IACA,YAAY,IAAI,cAAe,IAAe;AAAA,EAChD;AACF;AASA,SAAS,SACP,QACA,MACA,QACA,MAC0C;AAC1C,SAAO,EAAE,QAAQ,MAAM,QAAQ,KAAK;AACtC;AAIA,SAAS,SACP,MACA,QAC4C;AAC5C,SAAO,EAAE,MAAM,OAAO;AACxB;AAgBA,SAAS,qBACP,UACA,MACA,MACA,QACA,MACQ;AACR,MAAI,QAAQ,qBAAqB,UAAU,QAAQ,MAAM,IAAI;AAC7D,MAAI,OAAS;AACX,aAAS,SAAS,oBAAoB,aAAa,YAAY,UAAU,QAAQ,KAAK;AAAA,EACxF,WAAW,SAAS,kBAAmB;AAEvC,MAAI,UAAU,MAAM,UAAU,SAAS,OAAQ,QAAO;AACtD,SAAO;AACT;AAEA,SAAS,wBACP,UACA,MACA,MACA,QACA,MACoB;AACpB,MAAI,MAAM,qBAAqB,UAAU,MAAM,MAAM,QAAQ,oBAAoB;AAQjF,MAAI,CAAC,SAAW,SAAS,kBAAmB;AAE5C,MAAI,QAAQ,MAAM,QAAQ,SAAS,OAAQ,QAAO,CAAC;AAKnD,QAAM,gBAAgB,QAAU,SAAS,SAAS,GAAG,EAAE,MAAM;AAG7D,MAAI,CAAC,MAAS,OAAM,WAAW,UAAU,eAAe,GAAG;AAC3D,QAAM,MAAM,WAAW,UAAU,eAAe,GAAG;AAEnD,QAAM,SAAS,CAAC;AAChB,SAAO,OAAO,KAAK,OAAO;AACxB,UAAM,UAAU,SAAS,GAAG;AAC5B,WAAO,KAAK,SAAS,QAAQ,kBAAkB,IAAI,GAAG,QAAQ,oBAAoB,CAAC,CAAC;AAAA,EACtF;AACA,SAAO;AACT;AAkBA,SAAS,kBACP,KACA,QACA,MACA,QACA,MACA,KACiE;AA5dnE;AA6dE;AACA,MAAI,OAAO,EAAG,OAAM,IAAI,MAAM,aAAa;AAC3C,MAAI,SAAS,EAAG,OAAM,IAAI,MAAM,eAAe;AAE/C,QAAM,EAAE,SAAS,gBAAgB,IAAI;AACrC,MAAIC,eAAc,QAAQ,QAAQ,MAAM;AACxC,MAAIA,iBAAgB,GAAI,CAAAA,eAAc,gBAAgB,QAAQ,MAAM;AACpE,MAAIA,iBAAgB,GAAI,QAAO,MAAM,CAAC,IAAI,SAAS,MAAM,IAAI;AAE7D,QAAM,iBAAiB,UAAK,GAAG,GAAE,mBAAV,GAAU,iBAAmB,QAAQ,IAAI,aAAa;AAC7E,QAAM,aAAa,UAAK,GAAG,GAAE,eAAV,GAAU,aAAe,eAAe,gBAAgB,GAAG,GAAG,aAAa;AAE9F,QAAM,WAAW,UAAUA,YAAW,EAAE,IAAI;AAC5C,MAAI,YAAY,KAAM,QAAO,MAAM,CAAC,IAAI,SAAS,MAAM,IAAI;AAE3D,QAAM,OAAO,cAAcA,YAAW;AAEtC,MAAI,IAAK,QAAO,wBAAwB,UAAU,MAAM,MAAM,QAAQ,IAAI;AAE1E,QAAM,QAAQ,qBAAqB,UAAU,MAAM,MAAM,QAAQ,IAAI;AACrE,MAAI,UAAU,GAAI,QAAO,SAAS,MAAM,IAAI;AAE5C,QAAM,UAAU,SAAS,KAAK;AAC9B,SAAO,SAAS,QAAQ,kBAAkB,IAAI,GAAG,QAAQ,oBAAoB,CAAC;AAChF;", + "names": ["module", "module", "resolveUri", "sourceIndex", "sourceIndex"] +} diff --git a/node_modules/@jridgewell/trace-mapping/package.json b/node_modules/@jridgewell/trace-mapping/package.json new file mode 100644 index 0000000000..9d3a1c08e5 --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/package.json @@ -0,0 +1,67 @@ +{ + "name": "@jridgewell/trace-mapping", + "version": "0.3.31", + "description": "Trace the original position through a source map", + "keywords": [ + "source", + "map" + ], + "main": "dist/trace-mapping.umd.js", + "module": "dist/trace-mapping.mjs", + "types": "types/trace-mapping.d.cts", + "files": [ + "dist", + "src", + "types" + ], + "exports": { + ".": [ + { + "import": { + "types": "./types/trace-mapping.d.mts", + "default": "./dist/trace-mapping.mjs" + }, + "default": { + "types": "./types/trace-mapping.d.cts", + "default": "./dist/trace-mapping.umd.js" + } + }, + "./dist/trace-mapping.umd.js" + ], + "./package.json": "./package.json" + }, + "scripts": { + "benchmark": "run-s build:code benchmark:*", + "benchmark:install": "cd benchmark && npm install", + "benchmark:only": "node --expose-gc benchmark/index.mjs", + "build": "run-s -n build:code build:types", + "build:code": "node ../../esbuild.mjs trace-mapping.ts", + "build:types": "run-s build:types:force build:types:emit build:types:mts", + "build:types:force": "rimraf tsconfig.build.tsbuildinfo", + "build:types:emit": "tsc --project tsconfig.build.json", + "build:types:mts": "node ../../mts-types.mjs", + "clean": "run-s -n clean:code clean:types", + "clean:code": "tsc --build --clean tsconfig.build.json", + "clean:types": "rimraf dist types", + "test": "run-s -n test:types test:only test:format", + "test:format": "prettier --check '{src,test}/**/*.ts'", + "test:only": "mocha", + "test:types": "eslint '{src,test}/**/*.ts'", + "lint": "run-s -n lint:types lint:format", + "lint:format": "npm run test:format -- --write", + "lint:types": "npm run test:types -- --fix", + "prepublishOnly": "npm run-s -n build test" + }, + "homepage": "https://github.com/jridgewell/sourcemaps/tree/main/packages/trace-mapping", + "repository": { + "type": "git", + "url": "git+https://github.com/jridgewell/sourcemaps.git", + "directory": "packages/trace-mapping" + }, + "author": "Justin Ridgewell ", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } +} diff --git a/node_modules/@jridgewell/trace-mapping/src/binary-search.ts b/node_modules/@jridgewell/trace-mapping/src/binary-search.ts new file mode 100644 index 0000000000..c1144ad1cd --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/src/binary-search.ts @@ -0,0 +1,115 @@ +import type { SourceMapSegment, ReverseSegment } from './sourcemap-segment'; +import { COLUMN } from './sourcemap-segment'; + +export type MemoState = { + lastKey: number; + lastNeedle: number; + lastIndex: number; +}; + +export let found = false; + +/** + * A binary search implementation that returns the index if a match is found. + * If no match is found, then the left-index (the index associated with the item that comes just + * before the desired index) is returned. To maintain proper sort order, a splice would happen at + * the next index: + * + * ```js + * const array = [1, 3]; + * const needle = 2; + * const index = binarySearch(array, needle, (item, needle) => item - needle); + * + * assert.equal(index, 0); + * array.splice(index + 1, 0, needle); + * assert.deepEqual(array, [1, 2, 3]); + * ``` + */ +export function binarySearch( + haystack: SourceMapSegment[] | ReverseSegment[], + needle: number, + low: number, + high: number, +): number { + while (low <= high) { + const mid = low + ((high - low) >> 1); + const cmp = haystack[mid][COLUMN] - needle; + + if (cmp === 0) { + found = true; + return mid; + } + + if (cmp < 0) { + low = mid + 1; + } else { + high = mid - 1; + } + } + + found = false; + return low - 1; +} + +export function upperBound( + haystack: SourceMapSegment[] | ReverseSegment[], + needle: number, + index: number, +): number { + for (let i = index + 1; i < haystack.length; index = i++) { + if (haystack[i][COLUMN] !== needle) break; + } + return index; +} + +export function lowerBound( + haystack: SourceMapSegment[] | ReverseSegment[], + needle: number, + index: number, +): number { + for (let i = index - 1; i >= 0; index = i--) { + if (haystack[i][COLUMN] !== needle) break; + } + return index; +} + +export function memoizedState(): MemoState { + return { + lastKey: -1, + lastNeedle: -1, + lastIndex: -1, + }; +} + +/** + * This overly complicated beast is just to record the last tested line/column and the resulting + * index, allowing us to skip a few tests if mappings are monotonically increasing. + */ +export function memoizedBinarySearch( + haystack: SourceMapSegment[] | ReverseSegment[], + needle: number, + state: MemoState, + key: number, +): number { + const { lastKey, lastNeedle, lastIndex } = state; + + let low = 0; + let high = haystack.length - 1; + if (key === lastKey) { + if (needle === lastNeedle) { + found = lastIndex !== -1 && haystack[lastIndex][COLUMN] === needle; + return lastIndex; + } + + if (needle >= lastNeedle) { + // lastIndex may be -1 if the previous needle was not found. + low = lastIndex === -1 ? 0 : lastIndex; + } else { + high = lastIndex; + } + } + state.lastKey = key; + state.lastNeedle = needle; + + return (state.lastIndex = binarySearch(haystack, needle, low, high)); +} diff --git a/node_modules/@jridgewell/trace-mapping/src/by-source.ts b/node_modules/@jridgewell/trace-mapping/src/by-source.ts new file mode 100644 index 0000000000..1da6af05ca --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/src/by-source.ts @@ -0,0 +1,41 @@ +import { COLUMN, SOURCES_INDEX, SOURCE_LINE, SOURCE_COLUMN } from './sourcemap-segment'; +import { sortComparator } from './sort'; + +import type { ReverseSegment, SourceMapSegment } from './sourcemap-segment'; + +export type Source = ReverseSegment[][]; + +// Rebuilds the original source files, with mappings that are ordered by source line/column instead +// of generated line/column. +export default function buildBySources( + decoded: readonly SourceMapSegment[][], + memos: unknown[], +): Source[] { + const sources: Source[] = memos.map(() => []); + + for (let i = 0; i < decoded.length; i++) { + const line = decoded[i]; + for (let j = 0; j < line.length; j++) { + const seg = line[j]; + if (seg.length === 1) continue; + + const sourceIndex = seg[SOURCES_INDEX]; + const sourceLine = seg[SOURCE_LINE]; + const sourceColumn = seg[SOURCE_COLUMN]; + + const source = sources[sourceIndex]; + const segs = (source[sourceLine] ||= []); + segs.push([sourceColumn, i, seg[COLUMN]]); + } + } + + for (let i = 0; i < sources.length; i++) { + const source = sources[i]; + for (let j = 0; j < source.length; j++) { + const line = source[j]; + if (line) line.sort(sortComparator); + } + } + + return sources; +} diff --git a/node_modules/@jridgewell/trace-mapping/src/flatten-map.ts b/node_modules/@jridgewell/trace-mapping/src/flatten-map.ts new file mode 100644 index 0000000000..61ac40caab --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/src/flatten-map.ts @@ -0,0 +1,192 @@ +import { TraceMap, presortedDecodedMap, decodedMappings } from './trace-mapping'; +import { + COLUMN, + SOURCES_INDEX, + SOURCE_LINE, + SOURCE_COLUMN, + NAMES_INDEX, +} from './sourcemap-segment'; +import { parse } from './types'; + +import type { + DecodedSourceMap, + DecodedSourceMapXInput, + EncodedSourceMapXInput, + SectionedSourceMapXInput, + SectionedSourceMapInput, + SectionXInput, + Ro, +} from './types'; +import type { SourceMapSegment } from './sourcemap-segment'; + +type FlattenMap = { + new (map: Ro, mapUrl?: string | null): TraceMap; + (map: Ro, mapUrl?: string | null): TraceMap; +}; + +export const FlattenMap: FlattenMap = function (map, mapUrl) { + const parsed = parse(map as SectionedSourceMapInput); + + if (!('sections' in parsed)) { + return new TraceMap(parsed as DecodedSourceMapXInput | EncodedSourceMapXInput, mapUrl); + } + + const mappings: SourceMapSegment[][] = []; + const sources: string[] = []; + const sourcesContent: (string | null)[] = []; + const names: string[] = []; + const ignoreList: number[] = []; + + recurse( + parsed, + mapUrl, + mappings, + sources, + sourcesContent, + names, + ignoreList, + 0, + 0, + Infinity, + Infinity, + ); + + const joined: DecodedSourceMap = { + version: 3, + file: parsed.file, + names, + sources, + sourcesContent, + mappings, + ignoreList, + }; + + return presortedDecodedMap(joined); +} as FlattenMap; + +function recurse( + input: SectionedSourceMapXInput, + mapUrl: string | null | undefined, + mappings: SourceMapSegment[][], + sources: string[], + sourcesContent: (string | null)[], + names: string[], + ignoreList: number[], + lineOffset: number, + columnOffset: number, + stopLine: number, + stopColumn: number, +) { + const { sections } = input; + for (let i = 0; i < sections.length; i++) { + const { map, offset } = sections[i]; + + let sl = stopLine; + let sc = stopColumn; + if (i + 1 < sections.length) { + const nextOffset = sections[i + 1].offset; + sl = Math.min(stopLine, lineOffset + nextOffset.line); + + if (sl === stopLine) { + sc = Math.min(stopColumn, columnOffset + nextOffset.column); + } else if (sl < stopLine) { + sc = columnOffset + nextOffset.column; + } + } + + addSection( + map, + mapUrl, + mappings, + sources, + sourcesContent, + names, + ignoreList, + lineOffset + offset.line, + columnOffset + offset.column, + sl, + sc, + ); + } +} + +function addSection( + input: SectionXInput['map'], + mapUrl: string | null | undefined, + mappings: SourceMapSegment[][], + sources: string[], + sourcesContent: (string | null)[], + names: string[], + ignoreList: number[], + lineOffset: number, + columnOffset: number, + stopLine: number, + stopColumn: number, +) { + const parsed = parse(input); + if ('sections' in parsed) return recurse(...(arguments as unknown as Parameters)); + + const map = new TraceMap(parsed, mapUrl); + const sourcesOffset = sources.length; + const namesOffset = names.length; + const decoded = decodedMappings(map); + const { resolvedSources, sourcesContent: contents, ignoreList: ignores } = map; + + append(sources, resolvedSources); + append(names, map.names); + + if (contents) append(sourcesContent, contents); + else for (let i = 0; i < resolvedSources.length; i++) sourcesContent.push(null); + + if (ignores) for (let i = 0; i < ignores.length; i++) ignoreList.push(ignores[i] + sourcesOffset); + + for (let i = 0; i < decoded.length; i++) { + const lineI = lineOffset + i; + + // We can only add so many lines before we step into the range that the next section's map + // controls. When we get to the last line, then we'll start checking the segments to see if + // they've crossed into the column range. But it may not have any columns that overstep, so we + // still need to check that we don't overstep lines, too. + if (lineI > stopLine) return; + + // The out line may already exist in mappings (if we're continuing the line started by a + // previous section). Or, we may have jumped ahead several lines to start this section. + const out = getLine(mappings, lineI); + // On the 0th loop, the section's column offset shifts us forward. On all other lines (since the + // map can be multiple lines), it doesn't. + const cOffset = i === 0 ? columnOffset : 0; + + const line = decoded[i]; + for (let j = 0; j < line.length; j++) { + const seg = line[j]; + const column = cOffset + seg[COLUMN]; + + // If this segment steps into the column range that the next section's map controls, we need + // to stop early. + if (lineI === stopLine && column >= stopColumn) return; + + if (seg.length === 1) { + out.push([column]); + continue; + } + + const sourcesIndex = sourcesOffset + seg[SOURCES_INDEX]; + const sourceLine = seg[SOURCE_LINE]; + const sourceColumn = seg[SOURCE_COLUMN]; + out.push( + seg.length === 4 + ? [column, sourcesIndex, sourceLine, sourceColumn] + : [column, sourcesIndex, sourceLine, sourceColumn, namesOffset + seg[NAMES_INDEX]], + ); + } + } +} + +function append(arr: T[], other: T[]) { + for (let i = 0; i < other.length; i++) arr.push(other[i]); +} + +function getLine(arr: T[][], index: number): T[] { + for (let i = arr.length; i <= index; i++) arr[i] = []; + return arr[index]; +} diff --git a/node_modules/@jridgewell/trace-mapping/src/resolve.ts b/node_modules/@jridgewell/trace-mapping/src/resolve.ts new file mode 100644 index 0000000000..30bfa3b226 --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/src/resolve.ts @@ -0,0 +1,16 @@ +import resolveUri from '@jridgewell/resolve-uri'; +import stripFilename from './strip-filename'; + +type Resolve = (source: string | null) => string; +export default function resolver( + mapUrl: string | null | undefined, + sourceRoot: string | undefined, +): Resolve { + const from = stripFilename(mapUrl); + // The sourceRoot is always treated as a directory, if it's not empty. + // https://github.com/mozilla/source-map/blob/8cb3ee57/lib/util.js#L327 + // https://github.com/chromium/chromium/blob/da4adbb3/third_party/blink/renderer/devtools/front_end/sdk/SourceMap.js#L400-L401 + const prefix = sourceRoot ? sourceRoot + '/' : ''; + + return (source) => resolveUri(prefix + (source || ''), from); +} diff --git a/node_modules/@jridgewell/trace-mapping/src/sort.ts b/node_modules/@jridgewell/trace-mapping/src/sort.ts new file mode 100644 index 0000000000..5d016cb78c --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/src/sort.ts @@ -0,0 +1,45 @@ +import { COLUMN } from './sourcemap-segment'; + +import type { ReverseSegment, SourceMapSegment } from './sourcemap-segment'; + +export default function maybeSort( + mappings: SourceMapSegment[][], + owned: boolean, +): SourceMapSegment[][] { + const unsortedIndex = nextUnsortedSegmentLine(mappings, 0); + if (unsortedIndex === mappings.length) return mappings; + + // If we own the array (meaning we parsed it from JSON), then we're free to directly mutate it. If + // not, we do not want to modify the consumer's input array. + if (!owned) mappings = mappings.slice(); + + for (let i = unsortedIndex; i < mappings.length; i = nextUnsortedSegmentLine(mappings, i + 1)) { + mappings[i] = sortSegments(mappings[i], owned); + } + return mappings; +} + +function nextUnsortedSegmentLine(mappings: SourceMapSegment[][], start: number): number { + for (let i = start; i < mappings.length; i++) { + if (!isSorted(mappings[i])) return i; + } + return mappings.length; +} + +function isSorted(line: SourceMapSegment[]): boolean { + for (let j = 1; j < line.length; j++) { + if (line[j][COLUMN] < line[j - 1][COLUMN]) { + return false; + } + } + return true; +} + +function sortSegments(line: SourceMapSegment[], owned: boolean): SourceMapSegment[] { + if (!owned) line = line.slice(); + return line.sort(sortComparator); +} + +export function sortComparator(a: T, b: T): number { + return a[COLUMN] - b[COLUMN]; +} diff --git a/node_modules/@jridgewell/trace-mapping/src/sourcemap-segment.ts b/node_modules/@jridgewell/trace-mapping/src/sourcemap-segment.ts new file mode 100644 index 0000000000..94f1b6ab0d --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/src/sourcemap-segment.ts @@ -0,0 +1,23 @@ +type GeneratedColumn = number; +type SourcesIndex = number; +type SourceLine = number; +type SourceColumn = number; +type NamesIndex = number; + +type GeneratedLine = number; + +export type SourceMapSegment = + | [GeneratedColumn] + | [GeneratedColumn, SourcesIndex, SourceLine, SourceColumn] + | [GeneratedColumn, SourcesIndex, SourceLine, SourceColumn, NamesIndex]; + +export type ReverseSegment = [SourceColumn, GeneratedLine, GeneratedColumn]; + +export const COLUMN = 0; +export const SOURCES_INDEX = 1; +export const SOURCE_LINE = 2; +export const SOURCE_COLUMN = 3; +export const NAMES_INDEX = 4; + +export const REV_GENERATED_LINE = 1; +export const REV_GENERATED_COLUMN = 2; diff --git a/node_modules/@jridgewell/trace-mapping/src/strip-filename.ts b/node_modules/@jridgewell/trace-mapping/src/strip-filename.ts new file mode 100644 index 0000000000..2c889800e1 --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/src/strip-filename.ts @@ -0,0 +1,8 @@ +/** + * Removes everything after the last "/", but leaves the slash. + */ +export default function stripFilename(path: string | undefined | null): string { + if (!path) return ''; + const index = path.lastIndexOf('/'); + return path.slice(0, index + 1); +} diff --git a/node_modules/@jridgewell/trace-mapping/src/trace-mapping.ts b/node_modules/@jridgewell/trace-mapping/src/trace-mapping.ts new file mode 100644 index 0000000000..0b793d5bb3 --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/src/trace-mapping.ts @@ -0,0 +1,502 @@ +import { encode, decode } from '@jridgewell/sourcemap-codec'; + +import resolver from './resolve'; +import maybeSort from './sort'; +import buildBySources from './by-source'; +import { + memoizedState, + memoizedBinarySearch, + upperBound, + lowerBound, + found as bsFound, +} from './binary-search'; +import { + COLUMN, + SOURCES_INDEX, + SOURCE_LINE, + SOURCE_COLUMN, + NAMES_INDEX, + REV_GENERATED_LINE, + REV_GENERATED_COLUMN, +} from './sourcemap-segment'; +import { parse } from './types'; + +import type { SourceMapSegment, ReverseSegment } from './sourcemap-segment'; +import type { + SourceMapV3, + DecodedSourceMap, + EncodedSourceMap, + InvalidOriginalMapping, + OriginalMapping, + InvalidGeneratedMapping, + GeneratedMapping, + SourceMapInput, + Needle, + SourceNeedle, + SourceMap, + EachMapping, + Bias, + XInput, + SectionedSourceMap, + Ro, +} from './types'; +import type { Source } from './by-source'; +import type { MemoState } from './binary-search'; + +export type { SourceMapSegment } from './sourcemap-segment'; +export type { + SourceMap, + DecodedSourceMap, + EncodedSourceMap, + Section, + SectionedSourceMap, + SourceMapV3, + Bias, + EachMapping, + GeneratedMapping, + InvalidGeneratedMapping, + InvalidOriginalMapping, + Needle, + OriginalMapping, + OriginalMapping as Mapping, + SectionedSourceMapInput, + SourceMapInput, + SourceNeedle, + XInput, + EncodedSourceMapXInput, + DecodedSourceMapXInput, + SectionedSourceMapXInput, + SectionXInput, +} from './types'; + +interface PublicMap { + _encoded: TraceMap['_encoded']; + _decoded: TraceMap['_decoded']; + _decodedMemo: TraceMap['_decodedMemo']; + _bySources: TraceMap['_bySources']; + _bySourceMemos: TraceMap['_bySourceMemos']; +} + +const LINE_GTR_ZERO = '`line` must be greater than 0 (lines start at line 1)'; +const COL_GTR_EQ_ZERO = '`column` must be greater than or equal to 0 (columns start at column 0)'; + +export const LEAST_UPPER_BOUND = -1; +export const GREATEST_LOWER_BOUND = 1; + +export { FlattenMap, FlattenMap as AnyMap } from './flatten-map'; + +export class TraceMap implements SourceMap { + declare version: SourceMapV3['version']; + declare file: SourceMapV3['file']; + declare names: SourceMapV3['names']; + declare sourceRoot: SourceMapV3['sourceRoot']; + declare sources: SourceMapV3['sources']; + declare sourcesContent: SourceMapV3['sourcesContent']; + declare ignoreList: SourceMapV3['ignoreList']; + + declare resolvedSources: string[]; + declare private _encoded: string | undefined; + + declare private _decoded: SourceMapSegment[][] | undefined; + declare private _decodedMemo: MemoState; + + declare private _bySources: Source[] | undefined; + declare private _bySourceMemos: MemoState[] | undefined; + + constructor(map: Ro, mapUrl?: string | null) { + const isString = typeof map === 'string'; + if (!isString && (map as unknown as { _decodedMemo: any })._decodedMemo) return map as TraceMap; + + const parsed = parse(map as Exclude); + + const { version, file, names, sourceRoot, sources, sourcesContent } = parsed; + this.version = version; + this.file = file; + this.names = names || []; + this.sourceRoot = sourceRoot; + this.sources = sources; + this.sourcesContent = sourcesContent; + this.ignoreList = parsed.ignoreList || (parsed as XInput).x_google_ignoreList || undefined; + + const resolve = resolver(mapUrl, sourceRoot); + this.resolvedSources = sources.map(resolve); + + const { mappings } = parsed; + if (typeof mappings === 'string') { + this._encoded = mappings; + this._decoded = undefined; + } else if (Array.isArray(mappings)) { + this._encoded = undefined; + this._decoded = maybeSort(mappings, isString); + } else if ((parsed as unknown as SectionedSourceMap).sections) { + throw new Error(`TraceMap passed sectioned source map, please use FlattenMap export instead`); + } else { + throw new Error(`invalid source map: ${JSON.stringify(parsed)}`); + } + + this._decodedMemo = memoizedState(); + this._bySources = undefined; + this._bySourceMemos = undefined; + } +} + +/** + * Typescript doesn't allow friend access to private fields, so this just casts the map into a type + * with public access modifiers. + */ +function cast(map: unknown): PublicMap { + return map as any; +} + +/** + * Returns the encoded (VLQ string) form of the SourceMap's mappings field. + */ +export function encodedMappings(map: TraceMap): EncodedSourceMap['mappings'] { + return (cast(map)._encoded ??= encode(cast(map)._decoded!)); +} + +/** + * Returns the decoded (array of lines of segments) form of the SourceMap's mappings field. + */ +export function decodedMappings(map: TraceMap): Readonly { + return (cast(map)._decoded ||= decode(cast(map)._encoded!)); +} + +/** + * A low-level API to find the segment associated with a generated line/column (think, from a + * stack trace). Line and column here are 0-based, unlike `originalPositionFor`. + */ +export function traceSegment( + map: TraceMap, + line: number, + column: number, +): Readonly | null { + const decoded = decodedMappings(map); + + // It's common for parent source maps to have pointers to lines that have no + // mapping (like a "//# sourceMappingURL=") at the end of the child file. + if (line >= decoded.length) return null; + + const segments = decoded[line]; + const index = traceSegmentInternal( + segments, + cast(map)._decodedMemo, + line, + column, + GREATEST_LOWER_BOUND, + ); + + return index === -1 ? null : segments[index]; +} + +/** + * A higher-level API to find the source/line/column associated with a generated line/column + * (think, from a stack trace). Line is 1-based, but column is 0-based, due to legacy behavior in + * `source-map` library. + */ +export function originalPositionFor( + map: TraceMap, + needle: Needle, +): OriginalMapping | InvalidOriginalMapping { + let { line, column, bias } = needle; + line--; + if (line < 0) throw new Error(LINE_GTR_ZERO); + if (column < 0) throw new Error(COL_GTR_EQ_ZERO); + + const decoded = decodedMappings(map); + + // It's common for parent source maps to have pointers to lines that have no + // mapping (like a "//# sourceMappingURL=") at the end of the child file. + if (line >= decoded.length) return OMapping(null, null, null, null); + + const segments = decoded[line]; + const index = traceSegmentInternal( + segments, + cast(map)._decodedMemo, + line, + column, + bias || GREATEST_LOWER_BOUND, + ); + + if (index === -1) return OMapping(null, null, null, null); + + const segment = segments[index]; + if (segment.length === 1) return OMapping(null, null, null, null); + + const { names, resolvedSources } = map; + return OMapping( + resolvedSources[segment[SOURCES_INDEX]], + segment[SOURCE_LINE] + 1, + segment[SOURCE_COLUMN], + segment.length === 5 ? names[segment[NAMES_INDEX]] : null, + ); +} + +/** + * Finds the generated line/column position of the provided source/line/column source position. + */ +export function generatedPositionFor( + map: TraceMap, + needle: SourceNeedle, +): GeneratedMapping | InvalidGeneratedMapping { + const { source, line, column, bias } = needle; + return generatedPosition(map, source, line, column, bias || GREATEST_LOWER_BOUND, false); +} + +/** + * Finds all generated line/column positions of the provided source/line/column source position. + */ +export function allGeneratedPositionsFor(map: TraceMap, needle: SourceNeedle): GeneratedMapping[] { + const { source, line, column, bias } = needle; + // SourceMapConsumer uses LEAST_UPPER_BOUND for some reason, so we follow suit. + return generatedPosition(map, source, line, column, bias || LEAST_UPPER_BOUND, true); +} + +/** + * Iterates each mapping in generated position order. + */ +export function eachMapping(map: TraceMap, cb: (mapping: EachMapping) => void): void { + const decoded = decodedMappings(map); + const { names, resolvedSources } = map; + + for (let i = 0; i < decoded.length; i++) { + const line = decoded[i]; + for (let j = 0; j < line.length; j++) { + const seg = line[j]; + + const generatedLine = i + 1; + const generatedColumn = seg[0]; + let source = null; + let originalLine = null; + let originalColumn = null; + let name = null; + if (seg.length !== 1) { + source = resolvedSources[seg[1]]; + originalLine = seg[2] + 1; + originalColumn = seg[3]; + } + if (seg.length === 5) name = names[seg[4]]; + + cb({ + generatedLine, + generatedColumn, + source, + originalLine, + originalColumn, + name, + } as EachMapping); + } + } +} + +function sourceIndex(map: TraceMap, source: string): number { + const { sources, resolvedSources } = map; + let index = sources.indexOf(source); + if (index === -1) index = resolvedSources.indexOf(source); + return index; +} + +/** + * Retrieves the source content for a particular source, if its found. Returns null if not. + */ +export function sourceContentFor(map: TraceMap, source: string): string | null { + const { sourcesContent } = map; + if (sourcesContent == null) return null; + const index = sourceIndex(map, source); + return index === -1 ? null : sourcesContent[index]; +} + +/** + * Determines if the source is marked to ignore by the source map. + */ +export function isIgnored(map: TraceMap, source: string): boolean { + const { ignoreList } = map; + if (ignoreList == null) return false; + const index = sourceIndex(map, source); + return index === -1 ? false : ignoreList.includes(index); +} + +/** + * A helper that skips sorting of the input map's mappings array, which can be expensive for larger + * maps. + */ +export function presortedDecodedMap(map: DecodedSourceMap, mapUrl?: string): TraceMap { + const tracer = new TraceMap(clone(map, []), mapUrl); + cast(tracer)._decoded = map.mappings; + return tracer; +} + +/** + * Returns a sourcemap object (with decoded mappings) suitable for passing to a library that expects + * a sourcemap, or to JSON.stringify. + */ +export function decodedMap( + map: TraceMap, +): Omit & { mappings: readonly SourceMapSegment[][] } { + return clone(map, decodedMappings(map)); +} + +/** + * Returns a sourcemap object (with encoded mappings) suitable for passing to a library that expects + * a sourcemap, or to JSON.stringify. + */ +export function encodedMap(map: TraceMap): EncodedSourceMap { + return clone(map, encodedMappings(map)); +} + +function clone( + map: TraceMap | DecodedSourceMap, + mappings: T, +): T extends string ? EncodedSourceMap : DecodedSourceMap { + return { + version: map.version, + file: map.file, + names: map.names, + sourceRoot: map.sourceRoot, + sources: map.sources, + sourcesContent: map.sourcesContent, + mappings, + ignoreList: map.ignoreList || (map as XInput).x_google_ignoreList, + } as any; +} + +function OMapping(source: null, line: null, column: null, name: null): InvalidOriginalMapping; +function OMapping( + source: string, + line: number, + column: number, + name: string | null, +): OriginalMapping; +function OMapping( + source: string | null, + line: number | null, + column: number | null, + name: string | null, +): OriginalMapping | InvalidOriginalMapping { + return { source, line, column, name } as any; +} + +function GMapping(line: null, column: null): InvalidGeneratedMapping; +function GMapping(line: number, column: number): GeneratedMapping; +function GMapping( + line: number | null, + column: number | null, +): GeneratedMapping | InvalidGeneratedMapping { + return { line, column } as any; +} + +function traceSegmentInternal( + segments: SourceMapSegment[], + memo: MemoState, + line: number, + column: number, + bias: Bias, +): number; +function traceSegmentInternal( + segments: ReverseSegment[], + memo: MemoState, + line: number, + column: number, + bias: Bias, +): number; +function traceSegmentInternal( + segments: SourceMapSegment[] | ReverseSegment[], + memo: MemoState, + line: number, + column: number, + bias: Bias, +): number { + let index = memoizedBinarySearch(segments, column, memo, line); + if (bsFound) { + index = (bias === LEAST_UPPER_BOUND ? upperBound : lowerBound)(segments, column, index); + } else if (bias === LEAST_UPPER_BOUND) index++; + + if (index === -1 || index === segments.length) return -1; + return index; +} + +function sliceGeneratedPositions( + segments: ReverseSegment[], + memo: MemoState, + line: number, + column: number, + bias: Bias, +): GeneratedMapping[] { + let min = traceSegmentInternal(segments, memo, line, column, GREATEST_LOWER_BOUND); + + // We ignored the bias when tracing the segment so that we're guarnateed to find the first (in + // insertion order) segment that matched. Even if we did respect the bias when tracing, we would + // still need to call `lowerBound()` to find the first segment, which is slower than just looking + // for the GREATEST_LOWER_BOUND to begin with. The only difference that matters for us is when the + // binary search didn't match, in which case GREATEST_LOWER_BOUND just needs to increment to + // match LEAST_UPPER_BOUND. + if (!bsFound && bias === LEAST_UPPER_BOUND) min++; + + if (min === -1 || min === segments.length) return []; + + // We may have found the segment that started at an earlier column. If this is the case, then we + // need to slice all generated segments that match _that_ column, because all such segments span + // to our desired column. + const matchedColumn = bsFound ? column : segments[min][COLUMN]; + + // The binary search is not guaranteed to find the lower bound when a match wasn't found. + if (!bsFound) min = lowerBound(segments, matchedColumn, min); + const max = upperBound(segments, matchedColumn, min); + + const result = []; + for (; min <= max; min++) { + const segment = segments[min]; + result.push(GMapping(segment[REV_GENERATED_LINE] + 1, segment[REV_GENERATED_COLUMN])); + } + return result; +} + +function generatedPosition( + map: TraceMap, + source: string, + line: number, + column: number, + bias: Bias, + all: false, +): GeneratedMapping | InvalidGeneratedMapping; +function generatedPosition( + map: TraceMap, + source: string, + line: number, + column: number, + bias: Bias, + all: true, +): GeneratedMapping[]; +function generatedPosition( + map: TraceMap, + source: string, + line: number, + column: number, + bias: Bias, + all: boolean, +): GeneratedMapping | InvalidGeneratedMapping | GeneratedMapping[] { + line--; + if (line < 0) throw new Error(LINE_GTR_ZERO); + if (column < 0) throw new Error(COL_GTR_EQ_ZERO); + + const { sources, resolvedSources } = map; + let sourceIndex = sources.indexOf(source); + if (sourceIndex === -1) sourceIndex = resolvedSources.indexOf(source); + if (sourceIndex === -1) return all ? [] : GMapping(null, null); + + const bySourceMemos = (cast(map)._bySourceMemos ||= sources.map(memoizedState)); + const generated = (cast(map)._bySources ||= buildBySources(decodedMappings(map), bySourceMemos)); + + const segments = generated[sourceIndex][line]; + if (segments == null) return all ? [] : GMapping(null, null); + + const memo = bySourceMemos[sourceIndex]; + + if (all) return sliceGeneratedPositions(segments, memo, line, column, bias); + + const index = traceSegmentInternal(segments, memo, line, column, bias); + if (index === -1) return GMapping(null, null); + + const segment = segments[index]; + return GMapping(segment[REV_GENERATED_LINE] + 1, segment[REV_GENERATED_COLUMN]); +} diff --git a/node_modules/@jridgewell/trace-mapping/src/types.ts b/node_modules/@jridgewell/trace-mapping/src/types.ts new file mode 100644 index 0000000000..730a61fb5c --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/src/types.ts @@ -0,0 +1,114 @@ +import type { SourceMapSegment } from './sourcemap-segment'; +import type { GREATEST_LOWER_BOUND, LEAST_UPPER_BOUND, TraceMap } from './trace-mapping'; + +export interface SourceMapV3 { + file?: string | null; + names: string[]; + sourceRoot?: string; + sources: (string | null)[]; + sourcesContent?: (string | null)[]; + version: 3; + ignoreList?: number[]; +} + +export interface EncodedSourceMap extends SourceMapV3 { + mappings: string; +} + +export interface DecodedSourceMap extends SourceMapV3 { + mappings: SourceMapSegment[][]; +} + +export interface Section { + offset: { line: number; column: number }; + map: EncodedSourceMap | DecodedSourceMap | SectionedSourceMap; +} + +export interface SectionedSourceMap { + file?: string | null; + sections: Section[]; + version: 3; +} + +export type OriginalMapping = { + source: string | null; + line: number; + column: number; + name: string | null; +}; + +export type InvalidOriginalMapping = { + source: null; + line: null; + column: null; + name: null; +}; + +export type GeneratedMapping = { + line: number; + column: number; +}; +export type InvalidGeneratedMapping = { + line: null; + column: null; +}; + +export type Bias = typeof GREATEST_LOWER_BOUND | typeof LEAST_UPPER_BOUND; + +export type XInput = { x_google_ignoreList?: SourceMapV3['ignoreList'] }; +export type EncodedSourceMapXInput = EncodedSourceMap & XInput; +export type DecodedSourceMapXInput = DecodedSourceMap & XInput; +export type SectionedSourceMapXInput = Omit & { + sections: SectionXInput[]; +}; +export type SectionXInput = Omit & { + map: SectionedSourceMapInput; +}; + +export type SourceMapInput = string | EncodedSourceMapXInput | DecodedSourceMapXInput | TraceMap; +export type SectionedSourceMapInput = SourceMapInput | SectionedSourceMapXInput; + +export type Needle = { line: number; column: number; bias?: Bias }; +export type SourceNeedle = { source: string; line: number; column: number; bias?: Bias }; + +export type EachMapping = + | { + generatedLine: number; + generatedColumn: number; + source: null; + originalLine: null; + originalColumn: null; + name: null; + } + | { + generatedLine: number; + generatedColumn: number; + source: string | null; + originalLine: number; + originalColumn: number; + name: string | null; + }; + +export abstract class SourceMap { + declare version: SourceMapV3['version']; + declare file: SourceMapV3['file']; + declare names: SourceMapV3['names']; + declare sourceRoot: SourceMapV3['sourceRoot']; + declare sources: SourceMapV3['sources']; + declare sourcesContent: SourceMapV3['sourcesContent']; + declare resolvedSources: SourceMapV3['sources']; + declare ignoreList: SourceMapV3['ignoreList']; +} + +export type Ro = + T extends Array + ? V[] | Readonly | RoArray | Readonly> + : T extends object + ? T | Readonly | RoObject | Readonly> + : T; +type RoArray = Ro[]; +type RoObject = { [K in keyof T]: T[K] | Ro }; + +export function parse(map: T): Exclude { + return typeof map === 'string' ? JSON.parse(map) : (map as Exclude); +} diff --git a/node_modules/@jridgewell/trace-mapping/types/binary-search.d.cts b/node_modules/@jridgewell/trace-mapping/types/binary-search.d.cts new file mode 100644 index 0000000000..b7bb85c913 --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/types/binary-search.d.cts @@ -0,0 +1,33 @@ +import type { SourceMapSegment, ReverseSegment } from './sourcemap-segment.cts'; +export type MemoState = { + lastKey: number; + lastNeedle: number; + lastIndex: number; +}; +export declare let found: boolean; +/** + * A binary search implementation that returns the index if a match is found. + * If no match is found, then the left-index (the index associated with the item that comes just + * before the desired index) is returned. To maintain proper sort order, a splice would happen at + * the next index: + * + * ```js + * const array = [1, 3]; + * const needle = 2; + * const index = binarySearch(array, needle, (item, needle) => item - needle); + * + * assert.equal(index, 0); + * array.splice(index + 1, 0, needle); + * assert.deepEqual(array, [1, 2, 3]); + * ``` + */ +export declare function binarySearch(haystack: SourceMapSegment[] | ReverseSegment[], needle: number, low: number, high: number): number; +export declare function upperBound(haystack: SourceMapSegment[] | ReverseSegment[], needle: number, index: number): number; +export declare function lowerBound(haystack: SourceMapSegment[] | ReverseSegment[], needle: number, index: number): number; +export declare function memoizedState(): MemoState; +/** + * This overly complicated beast is just to record the last tested line/column and the resulting + * index, allowing us to skip a few tests if mappings are monotonically increasing. + */ +export declare function memoizedBinarySearch(haystack: SourceMapSegment[] | ReverseSegment[], needle: number, state: MemoState, key: number): number; +//# sourceMappingURL=binary-search.d.ts.map \ No newline at end of file diff --git a/node_modules/@jridgewell/trace-mapping/types/binary-search.d.cts.map b/node_modules/@jridgewell/trace-mapping/types/binary-search.d.cts.map new file mode 100644 index 0000000000..648e84c1e7 --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/types/binary-search.d.cts.map @@ -0,0 +1 @@ +{"version":3,"file":"binary-search.d.ts","sourceRoot":"","sources":["../src/binary-search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAG5E,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,eAAO,IAAI,KAAK,SAAQ,CAAC;AAEzB;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,gBAAgB,EAAE,GAAG,cAAc,EAAE,EAC/C,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,GACX,MAAM,CAmBR;AAED,wBAAgB,UAAU,CACxB,QAAQ,EAAE,gBAAgB,EAAE,GAAG,cAAc,EAAE,EAC/C,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,MAAM,CAKR;AAED,wBAAgB,UAAU,CACxB,QAAQ,EAAE,gBAAgB,EAAE,GAAG,cAAc,EAAE,EAC/C,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,MAAM,CAKR;AAED,wBAAgB,aAAa,IAAI,SAAS,CAMzC;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,gBAAgB,EAAE,GAAG,cAAc,EAAE,EAC/C,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,SAAS,EAChB,GAAG,EAAE,MAAM,GACV,MAAM,CAsBR"} \ No newline at end of file diff --git a/node_modules/@jridgewell/trace-mapping/types/binary-search.d.mts b/node_modules/@jridgewell/trace-mapping/types/binary-search.d.mts new file mode 100644 index 0000000000..19e1e6b9eb --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/types/binary-search.d.mts @@ -0,0 +1,33 @@ +import type { SourceMapSegment, ReverseSegment } from './sourcemap-segment.mts'; +export type MemoState = { + lastKey: number; + lastNeedle: number; + lastIndex: number; +}; +export declare let found: boolean; +/** + * A binary search implementation that returns the index if a match is found. + * If no match is found, then the left-index (the index associated with the item that comes just + * before the desired index) is returned. To maintain proper sort order, a splice would happen at + * the next index: + * + * ```js + * const array = [1, 3]; + * const needle = 2; + * const index = binarySearch(array, needle, (item, needle) => item - needle); + * + * assert.equal(index, 0); + * array.splice(index + 1, 0, needle); + * assert.deepEqual(array, [1, 2, 3]); + * ``` + */ +export declare function binarySearch(haystack: SourceMapSegment[] | ReverseSegment[], needle: number, low: number, high: number): number; +export declare function upperBound(haystack: SourceMapSegment[] | ReverseSegment[], needle: number, index: number): number; +export declare function lowerBound(haystack: SourceMapSegment[] | ReverseSegment[], needle: number, index: number): number; +export declare function memoizedState(): MemoState; +/** + * This overly complicated beast is just to record the last tested line/column and the resulting + * index, allowing us to skip a few tests if mappings are monotonically increasing. + */ +export declare function memoizedBinarySearch(haystack: SourceMapSegment[] | ReverseSegment[], needle: number, state: MemoState, key: number): number; +//# sourceMappingURL=binary-search.d.ts.map \ No newline at end of file diff --git a/node_modules/@jridgewell/trace-mapping/types/binary-search.d.mts.map b/node_modules/@jridgewell/trace-mapping/types/binary-search.d.mts.map new file mode 100644 index 0000000000..648e84c1e7 --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/types/binary-search.d.mts.map @@ -0,0 +1 @@ +{"version":3,"file":"binary-search.d.ts","sourceRoot":"","sources":["../src/binary-search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAG5E,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,eAAO,IAAI,KAAK,SAAQ,CAAC;AAEzB;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,gBAAgB,EAAE,GAAG,cAAc,EAAE,EAC/C,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,GACX,MAAM,CAmBR;AAED,wBAAgB,UAAU,CACxB,QAAQ,EAAE,gBAAgB,EAAE,GAAG,cAAc,EAAE,EAC/C,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,MAAM,CAKR;AAED,wBAAgB,UAAU,CACxB,QAAQ,EAAE,gBAAgB,EAAE,GAAG,cAAc,EAAE,EAC/C,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,MAAM,CAKR;AAED,wBAAgB,aAAa,IAAI,SAAS,CAMzC;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,gBAAgB,EAAE,GAAG,cAAc,EAAE,EAC/C,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,SAAS,EAChB,GAAG,EAAE,MAAM,GACV,MAAM,CAsBR"} \ No newline at end of file diff --git a/node_modules/@jridgewell/trace-mapping/types/by-source.d.cts b/node_modules/@jridgewell/trace-mapping/types/by-source.d.cts new file mode 100644 index 0000000000..da496939c7 --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/types/by-source.d.cts @@ -0,0 +1,4 @@ +import type { ReverseSegment, SourceMapSegment } from './sourcemap-segment.cts'; +export type Source = ReverseSegment[][]; +export = function buildBySources(decoded: readonly SourceMapSegment[][], memos: unknown[]): Source[]; +//# sourceMappingURL=by-source.d.ts.map \ No newline at end of file diff --git a/node_modules/@jridgewell/trace-mapping/types/by-source.d.cts.map b/node_modules/@jridgewell/trace-mapping/types/by-source.d.cts.map new file mode 100644 index 0000000000..32d2a7a1a9 --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/types/by-source.d.cts.map @@ -0,0 +1 @@ +{"version":3,"file":"by-source.d.ts","sourceRoot":"","sources":["../src/by-source.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5E,MAAM,MAAM,MAAM,GAAG,cAAc,EAAE,EAAE,CAAC;AAIxC,MAAM,CAAC,OAAO,UAAU,cAAc,CACpC,OAAO,EAAE,SAAS,gBAAgB,EAAE,EAAE,EACtC,KAAK,EAAE,OAAO,EAAE,GACf,MAAM,EAAE,CA4BV"} \ No newline at end of file diff --git a/node_modules/@jridgewell/trace-mapping/types/by-source.d.mts b/node_modules/@jridgewell/trace-mapping/types/by-source.d.mts new file mode 100644 index 0000000000..f36104955f --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/types/by-source.d.mts @@ -0,0 +1,4 @@ +import type { ReverseSegment, SourceMapSegment } from './sourcemap-segment.mts'; +export type Source = ReverseSegment[][]; +export default function buildBySources(decoded: readonly SourceMapSegment[][], memos: unknown[]): Source[]; +//# sourceMappingURL=by-source.d.ts.map \ No newline at end of file diff --git a/node_modules/@jridgewell/trace-mapping/types/by-source.d.mts.map b/node_modules/@jridgewell/trace-mapping/types/by-source.d.mts.map new file mode 100644 index 0000000000..32d2a7a1a9 --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/types/by-source.d.mts.map @@ -0,0 +1 @@ +{"version":3,"file":"by-source.d.ts","sourceRoot":"","sources":["../src/by-source.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5E,MAAM,MAAM,MAAM,GAAG,cAAc,EAAE,EAAE,CAAC;AAIxC,MAAM,CAAC,OAAO,UAAU,cAAc,CACpC,OAAO,EAAE,SAAS,gBAAgB,EAAE,EAAE,EACtC,KAAK,EAAE,OAAO,EAAE,GACf,MAAM,EAAE,CA4BV"} \ No newline at end of file diff --git a/node_modules/@jridgewell/trace-mapping/types/flatten-map.d.cts b/node_modules/@jridgewell/trace-mapping/types/flatten-map.d.cts new file mode 100644 index 0000000000..433d849b7c --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/types/flatten-map.d.cts @@ -0,0 +1,9 @@ +import { TraceMap } from './trace-mapping.cts'; +import type { SectionedSourceMapInput, Ro } from './types.cts'; +type FlattenMap = { + new (map: Ro, mapUrl?: string | null): TraceMap; + (map: Ro, mapUrl?: string | null): TraceMap; +}; +export declare const FlattenMap: FlattenMap; +export {}; +//# sourceMappingURL=flatten-map.d.ts.map \ No newline at end of file diff --git a/node_modules/@jridgewell/trace-mapping/types/flatten-map.d.cts.map b/node_modules/@jridgewell/trace-mapping/types/flatten-map.d.cts.map new file mode 100644 index 0000000000..994b208adf --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/types/flatten-map.d.cts.map @@ -0,0 +1 @@ +{"version":3,"file":"flatten-map.d.ts","sourceRoot":"","sources":["../src/flatten-map.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAwC,MAAM,iBAAiB,CAAC;AAUjF,OAAO,KAAK,EAKV,uBAAuB,EAEvB,EAAE,EACH,MAAM,SAAS,CAAC;AAGjB,KAAK,UAAU,GAAG;IAChB,KAAK,GAAG,EAAE,EAAE,CAAC,uBAAuB,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,QAAQ,CAAC;IACzE,CAAC,GAAG,EAAE,EAAE,CAAC,uBAAuB,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,QAAQ,CAAC;CACtE,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,UAsCV,CAAC"} \ No newline at end of file diff --git a/node_modules/@jridgewell/trace-mapping/types/flatten-map.d.mts b/node_modules/@jridgewell/trace-mapping/types/flatten-map.d.mts new file mode 100644 index 0000000000..444a1bed55 --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/types/flatten-map.d.mts @@ -0,0 +1,9 @@ +import { TraceMap } from './trace-mapping.mts'; +import type { SectionedSourceMapInput, Ro } from './types.mts'; +type FlattenMap = { + new (map: Ro, mapUrl?: string | null): TraceMap; + (map: Ro, mapUrl?: string | null): TraceMap; +}; +export declare const FlattenMap: FlattenMap; +export {}; +//# sourceMappingURL=flatten-map.d.ts.map \ No newline at end of file diff --git a/node_modules/@jridgewell/trace-mapping/types/flatten-map.d.mts.map b/node_modules/@jridgewell/trace-mapping/types/flatten-map.d.mts.map new file mode 100644 index 0000000000..994b208adf --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/types/flatten-map.d.mts.map @@ -0,0 +1 @@ +{"version":3,"file":"flatten-map.d.ts","sourceRoot":"","sources":["../src/flatten-map.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAwC,MAAM,iBAAiB,CAAC;AAUjF,OAAO,KAAK,EAKV,uBAAuB,EAEvB,EAAE,EACH,MAAM,SAAS,CAAC;AAGjB,KAAK,UAAU,GAAG;IAChB,KAAK,GAAG,EAAE,EAAE,CAAC,uBAAuB,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,QAAQ,CAAC;IACzE,CAAC,GAAG,EAAE,EAAE,CAAC,uBAAuB,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,QAAQ,CAAC;CACtE,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,UAsCV,CAAC"} \ No newline at end of file diff --git a/node_modules/@jridgewell/trace-mapping/types/resolve.d.cts b/node_modules/@jridgewell/trace-mapping/types/resolve.d.cts new file mode 100644 index 0000000000..62aeedb5b3 --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/types/resolve.d.cts @@ -0,0 +1,4 @@ +type Resolve = (source: string | null) => string; +export = function resolver(mapUrl: string | null | undefined, sourceRoot: string | undefined): Resolve; +export {}; +//# sourceMappingURL=resolve.d.ts.map \ No newline at end of file diff --git a/node_modules/@jridgewell/trace-mapping/types/resolve.d.cts.map b/node_modules/@jridgewell/trace-mapping/types/resolve.d.cts.map new file mode 100644 index 0000000000..9f155ace7b --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/types/resolve.d.cts.map @@ -0,0 +1 @@ +{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../src/resolve.ts"],"names":[],"mappings":"AAGA,KAAK,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,KAAK,MAAM,CAAC;AACjD,MAAM,CAAC,OAAO,UAAU,QAAQ,CAC9B,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACjC,UAAU,EAAE,MAAM,GAAG,SAAS,GAC7B,OAAO,CAQT"} \ No newline at end of file diff --git a/node_modules/@jridgewell/trace-mapping/types/resolve.d.mts b/node_modules/@jridgewell/trace-mapping/types/resolve.d.mts new file mode 100644 index 0000000000..e2798a19cc --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/types/resolve.d.mts @@ -0,0 +1,4 @@ +type Resolve = (source: string | null) => string; +export default function resolver(mapUrl: string | null | undefined, sourceRoot: string | undefined): Resolve; +export {}; +//# sourceMappingURL=resolve.d.ts.map \ No newline at end of file diff --git a/node_modules/@jridgewell/trace-mapping/types/resolve.d.mts.map b/node_modules/@jridgewell/trace-mapping/types/resolve.d.mts.map new file mode 100644 index 0000000000..9f155ace7b --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/types/resolve.d.mts.map @@ -0,0 +1 @@ +{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../src/resolve.ts"],"names":[],"mappings":"AAGA,KAAK,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,KAAK,MAAM,CAAC;AACjD,MAAM,CAAC,OAAO,UAAU,QAAQ,CAC9B,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACjC,UAAU,EAAE,MAAM,GAAG,SAAS,GAC7B,OAAO,CAQT"} \ No newline at end of file diff --git a/node_modules/@jridgewell/trace-mapping/types/sort.d.cts b/node_modules/@jridgewell/trace-mapping/types/sort.d.cts new file mode 100644 index 0000000000..aa14c12900 --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/types/sort.d.cts @@ -0,0 +1,4 @@ +import type { ReverseSegment, SourceMapSegment } from './sourcemap-segment.cts'; +export = function maybeSort(mappings: SourceMapSegment[][], owned: boolean): SourceMapSegment[][]; +export declare function sortComparator(a: T, b: T): number; +//# sourceMappingURL=sort.d.ts.map \ No newline at end of file diff --git a/node_modules/@jridgewell/trace-mapping/types/sort.d.cts.map b/node_modules/@jridgewell/trace-mapping/types/sort.d.cts.map new file mode 100644 index 0000000000..48b8e67418 --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/types/sort.d.cts.map @@ -0,0 +1 @@ +{"version":3,"file":"sort.d.ts","sourceRoot":"","sources":["../src/sort.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5E,MAAM,CAAC,OAAO,UAAU,SAAS,CAC/B,QAAQ,EAAE,gBAAgB,EAAE,EAAE,EAC9B,KAAK,EAAE,OAAO,GACb,gBAAgB,EAAE,EAAE,CAYtB;AAuBD,wBAAgB,cAAc,CAAC,CAAC,SAAS,gBAAgB,GAAG,cAAc,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,CAE9F"} \ No newline at end of file diff --git a/node_modules/@jridgewell/trace-mapping/types/sort.d.mts b/node_modules/@jridgewell/trace-mapping/types/sort.d.mts new file mode 100644 index 0000000000..c5b94e64fd --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/types/sort.d.mts @@ -0,0 +1,4 @@ +import type { ReverseSegment, SourceMapSegment } from './sourcemap-segment.mts'; +export default function maybeSort(mappings: SourceMapSegment[][], owned: boolean): SourceMapSegment[][]; +export declare function sortComparator(a: T, b: T): number; +//# sourceMappingURL=sort.d.ts.map \ No newline at end of file diff --git a/node_modules/@jridgewell/trace-mapping/types/sort.d.mts.map b/node_modules/@jridgewell/trace-mapping/types/sort.d.mts.map new file mode 100644 index 0000000000..48b8e67418 --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/types/sort.d.mts.map @@ -0,0 +1 @@ +{"version":3,"file":"sort.d.ts","sourceRoot":"","sources":["../src/sort.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5E,MAAM,CAAC,OAAO,UAAU,SAAS,CAC/B,QAAQ,EAAE,gBAAgB,EAAE,EAAE,EAC9B,KAAK,EAAE,OAAO,GACb,gBAAgB,EAAE,EAAE,CAYtB;AAuBD,wBAAgB,cAAc,CAAC,CAAC,SAAS,gBAAgB,GAAG,cAAc,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,CAE9F"} \ No newline at end of file diff --git a/node_modules/@jridgewell/trace-mapping/types/sourcemap-segment.d.cts b/node_modules/@jridgewell/trace-mapping/types/sourcemap-segment.d.cts new file mode 100644 index 0000000000..8d3cabc130 --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/types/sourcemap-segment.d.cts @@ -0,0 +1,17 @@ +type GeneratedColumn = number; +type SourcesIndex = number; +type SourceLine = number; +type SourceColumn = number; +type NamesIndex = number; +type GeneratedLine = number; +export type SourceMapSegment = [GeneratedColumn] | [GeneratedColumn, SourcesIndex, SourceLine, SourceColumn] | [GeneratedColumn, SourcesIndex, SourceLine, SourceColumn, NamesIndex]; +export type ReverseSegment = [SourceColumn, GeneratedLine, GeneratedColumn]; +export declare const COLUMN = 0; +export declare const SOURCES_INDEX = 1; +export declare const SOURCE_LINE = 2; +export declare const SOURCE_COLUMN = 3; +export declare const NAMES_INDEX = 4; +export declare const REV_GENERATED_LINE = 1; +export declare const REV_GENERATED_COLUMN = 2; +export {}; +//# sourceMappingURL=sourcemap-segment.d.ts.map \ No newline at end of file diff --git a/node_modules/@jridgewell/trace-mapping/types/sourcemap-segment.d.cts.map b/node_modules/@jridgewell/trace-mapping/types/sourcemap-segment.d.cts.map new file mode 100644 index 0000000000..0c94a4610d --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/types/sourcemap-segment.d.cts.map @@ -0,0 +1 @@ +{"version":3,"file":"sourcemap-segment.d.ts","sourceRoot":"","sources":["../src/sourcemap-segment.ts"],"names":[],"mappings":"AAAA,KAAK,eAAe,GAAG,MAAM,CAAC;AAC9B,KAAK,YAAY,GAAG,MAAM,CAAC;AAC3B,KAAK,UAAU,GAAG,MAAM,CAAC;AACzB,KAAK,YAAY,GAAG,MAAM,CAAC;AAC3B,KAAK,UAAU,GAAG,MAAM,CAAC;AAEzB,KAAK,aAAa,GAAG,MAAM,CAAC;AAE5B,MAAM,MAAM,gBAAgB,GACxB,CAAC,eAAe,CAAC,GACjB,CAAC,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,CAAC,GACzD,CAAC,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;AAE1E,MAAM,MAAM,cAAc,GAAG,CAAC,YAAY,EAAE,aAAa,EAAE,eAAe,CAAC,CAAC;AAE5E,eAAO,MAAM,MAAM,IAAI,CAAC;AACxB,eAAO,MAAM,aAAa,IAAI,CAAC;AAC/B,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,eAAO,MAAM,aAAa,IAAI,CAAC;AAC/B,eAAO,MAAM,WAAW,IAAI,CAAC;AAE7B,eAAO,MAAM,kBAAkB,IAAI,CAAC;AACpC,eAAO,MAAM,oBAAoB,IAAI,CAAC"} \ No newline at end of file diff --git a/node_modules/@jridgewell/trace-mapping/types/sourcemap-segment.d.mts b/node_modules/@jridgewell/trace-mapping/types/sourcemap-segment.d.mts new file mode 100644 index 0000000000..8d3cabc130 --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/types/sourcemap-segment.d.mts @@ -0,0 +1,17 @@ +type GeneratedColumn = number; +type SourcesIndex = number; +type SourceLine = number; +type SourceColumn = number; +type NamesIndex = number; +type GeneratedLine = number; +export type SourceMapSegment = [GeneratedColumn] | [GeneratedColumn, SourcesIndex, SourceLine, SourceColumn] | [GeneratedColumn, SourcesIndex, SourceLine, SourceColumn, NamesIndex]; +export type ReverseSegment = [SourceColumn, GeneratedLine, GeneratedColumn]; +export declare const COLUMN = 0; +export declare const SOURCES_INDEX = 1; +export declare const SOURCE_LINE = 2; +export declare const SOURCE_COLUMN = 3; +export declare const NAMES_INDEX = 4; +export declare const REV_GENERATED_LINE = 1; +export declare const REV_GENERATED_COLUMN = 2; +export {}; +//# sourceMappingURL=sourcemap-segment.d.ts.map \ No newline at end of file diff --git a/node_modules/@jridgewell/trace-mapping/types/sourcemap-segment.d.mts.map b/node_modules/@jridgewell/trace-mapping/types/sourcemap-segment.d.mts.map new file mode 100644 index 0000000000..0c94a4610d --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/types/sourcemap-segment.d.mts.map @@ -0,0 +1 @@ +{"version":3,"file":"sourcemap-segment.d.ts","sourceRoot":"","sources":["../src/sourcemap-segment.ts"],"names":[],"mappings":"AAAA,KAAK,eAAe,GAAG,MAAM,CAAC;AAC9B,KAAK,YAAY,GAAG,MAAM,CAAC;AAC3B,KAAK,UAAU,GAAG,MAAM,CAAC;AACzB,KAAK,YAAY,GAAG,MAAM,CAAC;AAC3B,KAAK,UAAU,GAAG,MAAM,CAAC;AAEzB,KAAK,aAAa,GAAG,MAAM,CAAC;AAE5B,MAAM,MAAM,gBAAgB,GACxB,CAAC,eAAe,CAAC,GACjB,CAAC,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,CAAC,GACzD,CAAC,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;AAE1E,MAAM,MAAM,cAAc,GAAG,CAAC,YAAY,EAAE,aAAa,EAAE,eAAe,CAAC,CAAC;AAE5E,eAAO,MAAM,MAAM,IAAI,CAAC;AACxB,eAAO,MAAM,aAAa,IAAI,CAAC;AAC/B,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,eAAO,MAAM,aAAa,IAAI,CAAC;AAC/B,eAAO,MAAM,WAAW,IAAI,CAAC;AAE7B,eAAO,MAAM,kBAAkB,IAAI,CAAC;AACpC,eAAO,MAAM,oBAAoB,IAAI,CAAC"} \ No newline at end of file diff --git a/node_modules/@jridgewell/trace-mapping/types/strip-filename.d.cts b/node_modules/@jridgewell/trace-mapping/types/strip-filename.d.cts new file mode 100644 index 0000000000..8b3c0e9b9b --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/types/strip-filename.d.cts @@ -0,0 +1,5 @@ +/** + * Removes everything after the last "/", but leaves the slash. + */ +export = function stripFilename(path: string | undefined | null): string; +//# sourceMappingURL=strip-filename.d.ts.map \ No newline at end of file diff --git a/node_modules/@jridgewell/trace-mapping/types/strip-filename.d.cts.map b/node_modules/@jridgewell/trace-mapping/types/strip-filename.d.cts.map new file mode 100644 index 0000000000..17a25da0d4 --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/types/strip-filename.d.cts.map @@ -0,0 +1 @@ +{"version":3,"file":"strip-filename.d.ts","sourceRoot":"","sources":["../src/strip-filename.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CAI7E"} \ No newline at end of file diff --git a/node_modules/@jridgewell/trace-mapping/types/strip-filename.d.mts b/node_modules/@jridgewell/trace-mapping/types/strip-filename.d.mts new file mode 100644 index 0000000000..cbbaee0db3 --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/types/strip-filename.d.mts @@ -0,0 +1,5 @@ +/** + * Removes everything after the last "/", but leaves the slash. + */ +export default function stripFilename(path: string | undefined | null): string; +//# sourceMappingURL=strip-filename.d.ts.map \ No newline at end of file diff --git a/node_modules/@jridgewell/trace-mapping/types/strip-filename.d.mts.map b/node_modules/@jridgewell/trace-mapping/types/strip-filename.d.mts.map new file mode 100644 index 0000000000..17a25da0d4 --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/types/strip-filename.d.mts.map @@ -0,0 +1 @@ +{"version":3,"file":"strip-filename.d.ts","sourceRoot":"","sources":["../src/strip-filename.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CAI7E"} \ No newline at end of file diff --git a/node_modules/@jridgewell/trace-mapping/types/trace-mapping.d.cts b/node_modules/@jridgewell/trace-mapping/types/trace-mapping.d.cts new file mode 100644 index 0000000000..a40f305476 --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/types/trace-mapping.d.cts @@ -0,0 +1,80 @@ +import type { SourceMapSegment } from './sourcemap-segment.cts'; +import type { SourceMapV3, DecodedSourceMap, EncodedSourceMap, InvalidOriginalMapping, OriginalMapping, InvalidGeneratedMapping, GeneratedMapping, SourceMapInput, Needle, SourceNeedle, SourceMap, EachMapping, Ro } from './types.cts'; +export type { SourceMapSegment } from './sourcemap-segment.cts'; +export type { SourceMap, DecodedSourceMap, EncodedSourceMap, Section, SectionedSourceMap, SourceMapV3, Bias, EachMapping, GeneratedMapping, InvalidGeneratedMapping, InvalidOriginalMapping, Needle, OriginalMapping, OriginalMapping as Mapping, SectionedSourceMapInput, SourceMapInput, SourceNeedle, XInput, EncodedSourceMapXInput, DecodedSourceMapXInput, SectionedSourceMapXInput, SectionXInput, } from './types.cts'; +export declare const LEAST_UPPER_BOUND = -1; +export declare const GREATEST_LOWER_BOUND = 1; +export { FlattenMap, FlattenMap as AnyMap } from './flatten-map.cts'; +export declare class TraceMap implements SourceMap { + version: SourceMapV3['version']; + file: SourceMapV3['file']; + names: SourceMapV3['names']; + sourceRoot: SourceMapV3['sourceRoot']; + sources: SourceMapV3['sources']; + sourcesContent: SourceMapV3['sourcesContent']; + ignoreList: SourceMapV3['ignoreList']; + resolvedSources: string[]; + private _encoded; + private _decoded; + private _decodedMemo; + private _bySources; + private _bySourceMemos; + constructor(map: Ro, mapUrl?: string | null); +} +/** + * Returns the encoded (VLQ string) form of the SourceMap's mappings field. + */ +export declare function encodedMappings(map: TraceMap): EncodedSourceMap['mappings']; +/** + * Returns the decoded (array of lines of segments) form of the SourceMap's mappings field. + */ +export declare function decodedMappings(map: TraceMap): Readonly; +/** + * A low-level API to find the segment associated with a generated line/column (think, from a + * stack trace). Line and column here are 0-based, unlike `originalPositionFor`. + */ +export declare function traceSegment(map: TraceMap, line: number, column: number): Readonly | null; +/** + * A higher-level API to find the source/line/column associated with a generated line/column + * (think, from a stack trace). Line is 1-based, but column is 0-based, due to legacy behavior in + * `source-map` library. + */ +export declare function originalPositionFor(map: TraceMap, needle: Needle): OriginalMapping | InvalidOriginalMapping; +/** + * Finds the generated line/column position of the provided source/line/column source position. + */ +export declare function generatedPositionFor(map: TraceMap, needle: SourceNeedle): GeneratedMapping | InvalidGeneratedMapping; +/** + * Finds all generated line/column positions of the provided source/line/column source position. + */ +export declare function allGeneratedPositionsFor(map: TraceMap, needle: SourceNeedle): GeneratedMapping[]; +/** + * Iterates each mapping in generated position order. + */ +export declare function eachMapping(map: TraceMap, cb: (mapping: EachMapping) => void): void; +/** + * Retrieves the source content for a particular source, if its found. Returns null if not. + */ +export declare function sourceContentFor(map: TraceMap, source: string): string | null; +/** + * Determines if the source is marked to ignore by the source map. + */ +export declare function isIgnored(map: TraceMap, source: string): boolean; +/** + * A helper that skips sorting of the input map's mappings array, which can be expensive for larger + * maps. + */ +export declare function presortedDecodedMap(map: DecodedSourceMap, mapUrl?: string): TraceMap; +/** + * Returns a sourcemap object (with decoded mappings) suitable for passing to a library that expects + * a sourcemap, or to JSON.stringify. + */ +export declare function decodedMap(map: TraceMap): Omit & { + mappings: readonly SourceMapSegment[][]; +}; +/** + * Returns a sourcemap object (with encoded mappings) suitable for passing to a library that expects + * a sourcemap, or to JSON.stringify. + */ +export declare function encodedMap(map: TraceMap): EncodedSourceMap; +//# sourceMappingURL=trace-mapping.d.ts.map \ No newline at end of file diff --git a/node_modules/@jridgewell/trace-mapping/types/trace-mapping.d.cts.map b/node_modules/@jridgewell/trace-mapping/types/trace-mapping.d.cts.map new file mode 100644 index 0000000000..b5a874c05a --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/types/trace-mapping.d.cts.map @@ -0,0 +1 @@ +{"version":3,"file":"trace-mapping.d.ts","sourceRoot":"","sources":["../src/trace-mapping.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@jridgewell/trace-mapping/types/trace-mapping.d.mts b/node_modules/@jridgewell/trace-mapping/types/trace-mapping.d.mts new file mode 100644 index 0000000000..bc2ff0f10a --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/types/trace-mapping.d.mts @@ -0,0 +1,80 @@ +import type { SourceMapSegment } from './sourcemap-segment.mts'; +import type { SourceMapV3, DecodedSourceMap, EncodedSourceMap, InvalidOriginalMapping, OriginalMapping, InvalidGeneratedMapping, GeneratedMapping, SourceMapInput, Needle, SourceNeedle, SourceMap, EachMapping, Ro } from './types.mts'; +export type { SourceMapSegment } from './sourcemap-segment.mts'; +export type { SourceMap, DecodedSourceMap, EncodedSourceMap, Section, SectionedSourceMap, SourceMapV3, Bias, EachMapping, GeneratedMapping, InvalidGeneratedMapping, InvalidOriginalMapping, Needle, OriginalMapping, OriginalMapping as Mapping, SectionedSourceMapInput, SourceMapInput, SourceNeedle, XInput, EncodedSourceMapXInput, DecodedSourceMapXInput, SectionedSourceMapXInput, SectionXInput, } from './types.mts'; +export declare const LEAST_UPPER_BOUND = -1; +export declare const GREATEST_LOWER_BOUND = 1; +export { FlattenMap, FlattenMap as AnyMap } from './flatten-map.mts'; +export declare class TraceMap implements SourceMap { + version: SourceMapV3['version']; + file: SourceMapV3['file']; + names: SourceMapV3['names']; + sourceRoot: SourceMapV3['sourceRoot']; + sources: SourceMapV3['sources']; + sourcesContent: SourceMapV3['sourcesContent']; + ignoreList: SourceMapV3['ignoreList']; + resolvedSources: string[]; + private _encoded; + private _decoded; + private _decodedMemo; + private _bySources; + private _bySourceMemos; + constructor(map: Ro, mapUrl?: string | null); +} +/** + * Returns the encoded (VLQ string) form of the SourceMap's mappings field. + */ +export declare function encodedMappings(map: TraceMap): EncodedSourceMap['mappings']; +/** + * Returns the decoded (array of lines of segments) form of the SourceMap's mappings field. + */ +export declare function decodedMappings(map: TraceMap): Readonly; +/** + * A low-level API to find the segment associated with a generated line/column (think, from a + * stack trace). Line and column here are 0-based, unlike `originalPositionFor`. + */ +export declare function traceSegment(map: TraceMap, line: number, column: number): Readonly | null; +/** + * A higher-level API to find the source/line/column associated with a generated line/column + * (think, from a stack trace). Line is 1-based, but column is 0-based, due to legacy behavior in + * `source-map` library. + */ +export declare function originalPositionFor(map: TraceMap, needle: Needle): OriginalMapping | InvalidOriginalMapping; +/** + * Finds the generated line/column position of the provided source/line/column source position. + */ +export declare function generatedPositionFor(map: TraceMap, needle: SourceNeedle): GeneratedMapping | InvalidGeneratedMapping; +/** + * Finds all generated line/column positions of the provided source/line/column source position. + */ +export declare function allGeneratedPositionsFor(map: TraceMap, needle: SourceNeedle): GeneratedMapping[]; +/** + * Iterates each mapping in generated position order. + */ +export declare function eachMapping(map: TraceMap, cb: (mapping: EachMapping) => void): void; +/** + * Retrieves the source content for a particular source, if its found. Returns null if not. + */ +export declare function sourceContentFor(map: TraceMap, source: string): string | null; +/** + * Determines if the source is marked to ignore by the source map. + */ +export declare function isIgnored(map: TraceMap, source: string): boolean; +/** + * A helper that skips sorting of the input map's mappings array, which can be expensive for larger + * maps. + */ +export declare function presortedDecodedMap(map: DecodedSourceMap, mapUrl?: string): TraceMap; +/** + * Returns a sourcemap object (with decoded mappings) suitable for passing to a library that expects + * a sourcemap, or to JSON.stringify. + */ +export declare function decodedMap(map: TraceMap): Omit & { + mappings: readonly SourceMapSegment[][]; +}; +/** + * Returns a sourcemap object (with encoded mappings) suitable for passing to a library that expects + * a sourcemap, or to JSON.stringify. + */ +export declare function encodedMap(map: TraceMap): EncodedSourceMap; +//# sourceMappingURL=trace-mapping.d.ts.map \ No newline at end of file diff --git a/node_modules/@jridgewell/trace-mapping/types/trace-mapping.d.mts.map b/node_modules/@jridgewell/trace-mapping/types/trace-mapping.d.mts.map new file mode 100644 index 0000000000..b5a874c05a --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/types/trace-mapping.d.mts.map @@ -0,0 +1 @@ +{"version":3,"file":"trace-mapping.d.ts","sourceRoot":"","sources":["../src/trace-mapping.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@jridgewell/trace-mapping/types/types.d.cts b/node_modules/@jridgewell/trace-mapping/types/types.d.cts new file mode 100644 index 0000000000..729c2c3218 --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/types/types.d.cts @@ -0,0 +1,107 @@ +import type { SourceMapSegment } from './sourcemap-segment.cts'; +import type { GREATEST_LOWER_BOUND, LEAST_UPPER_BOUND, TraceMap } from './trace-mapping.cts'; +export interface SourceMapV3 { + file?: string | null; + names: string[]; + sourceRoot?: string; + sources: (string | null)[]; + sourcesContent?: (string | null)[]; + version: 3; + ignoreList?: number[]; +} +export interface EncodedSourceMap extends SourceMapV3 { + mappings: string; +} +export interface DecodedSourceMap extends SourceMapV3 { + mappings: SourceMapSegment[][]; +} +export interface Section { + offset: { + line: number; + column: number; + }; + map: EncodedSourceMap | DecodedSourceMap | SectionedSourceMap; +} +export interface SectionedSourceMap { + file?: string | null; + sections: Section[]; + version: 3; +} +export type OriginalMapping = { + source: string | null; + line: number; + column: number; + name: string | null; +}; +export type InvalidOriginalMapping = { + source: null; + line: null; + column: null; + name: null; +}; +export type GeneratedMapping = { + line: number; + column: number; +}; +export type InvalidGeneratedMapping = { + line: null; + column: null; +}; +export type Bias = typeof GREATEST_LOWER_BOUND | typeof LEAST_UPPER_BOUND; +export type XInput = { + x_google_ignoreList?: SourceMapV3['ignoreList']; +}; +export type EncodedSourceMapXInput = EncodedSourceMap & XInput; +export type DecodedSourceMapXInput = DecodedSourceMap & XInput; +export type SectionedSourceMapXInput = Omit & { + sections: SectionXInput[]; +}; +export type SectionXInput = Omit & { + map: SectionedSourceMapInput; +}; +export type SourceMapInput = string | EncodedSourceMapXInput | DecodedSourceMapXInput | TraceMap; +export type SectionedSourceMapInput = SourceMapInput | SectionedSourceMapXInput; +export type Needle = { + line: number; + column: number; + bias?: Bias; +}; +export type SourceNeedle = { + source: string; + line: number; + column: number; + bias?: Bias; +}; +export type EachMapping = { + generatedLine: number; + generatedColumn: number; + source: null; + originalLine: null; + originalColumn: null; + name: null; +} | { + generatedLine: number; + generatedColumn: number; + source: string | null; + originalLine: number; + originalColumn: number; + name: string | null; +}; +export declare abstract class SourceMap { + version: SourceMapV3['version']; + file: SourceMapV3['file']; + names: SourceMapV3['names']; + sourceRoot: SourceMapV3['sourceRoot']; + sources: SourceMapV3['sources']; + sourcesContent: SourceMapV3['sourcesContent']; + resolvedSources: SourceMapV3['sources']; + ignoreList: SourceMapV3['ignoreList']; +} +export type Ro = T extends Array ? V[] | Readonly | RoArray | Readonly> : T extends object ? T | Readonly | RoObject | Readonly> : T; +type RoArray = Ro[]; +type RoObject = { + [K in keyof T]: T[K] | Ro; +}; +export declare function parse(map: T): Exclude; +export {}; +//# sourceMappingURL=types.d.ts.map \ No newline at end of file diff --git a/node_modules/@jridgewell/trace-mapping/types/types.d.cts.map b/node_modules/@jridgewell/trace-mapping/types/types.d.cts.map new file mode 100644 index 0000000000..922478396d --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/types/types.d.cts.map @@ -0,0 +1 @@ +{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@jridgewell/trace-mapping/types/types.d.mts b/node_modules/@jridgewell/trace-mapping/types/types.d.mts new file mode 100644 index 0000000000..a26d1866b4 --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/types/types.d.mts @@ -0,0 +1,107 @@ +import type { SourceMapSegment } from './sourcemap-segment.mts'; +import type { GREATEST_LOWER_BOUND, LEAST_UPPER_BOUND, TraceMap } from './trace-mapping.mts'; +export interface SourceMapV3 { + file?: string | null; + names: string[]; + sourceRoot?: string; + sources: (string | null)[]; + sourcesContent?: (string | null)[]; + version: 3; + ignoreList?: number[]; +} +export interface EncodedSourceMap extends SourceMapV3 { + mappings: string; +} +export interface DecodedSourceMap extends SourceMapV3 { + mappings: SourceMapSegment[][]; +} +export interface Section { + offset: { + line: number; + column: number; + }; + map: EncodedSourceMap | DecodedSourceMap | SectionedSourceMap; +} +export interface SectionedSourceMap { + file?: string | null; + sections: Section[]; + version: 3; +} +export type OriginalMapping = { + source: string | null; + line: number; + column: number; + name: string | null; +}; +export type InvalidOriginalMapping = { + source: null; + line: null; + column: null; + name: null; +}; +export type GeneratedMapping = { + line: number; + column: number; +}; +export type InvalidGeneratedMapping = { + line: null; + column: null; +}; +export type Bias = typeof GREATEST_LOWER_BOUND | typeof LEAST_UPPER_BOUND; +export type XInput = { + x_google_ignoreList?: SourceMapV3['ignoreList']; +}; +export type EncodedSourceMapXInput = EncodedSourceMap & XInput; +export type DecodedSourceMapXInput = DecodedSourceMap & XInput; +export type SectionedSourceMapXInput = Omit & { + sections: SectionXInput[]; +}; +export type SectionXInput = Omit & { + map: SectionedSourceMapInput; +}; +export type SourceMapInput = string | EncodedSourceMapXInput | DecodedSourceMapXInput | TraceMap; +export type SectionedSourceMapInput = SourceMapInput | SectionedSourceMapXInput; +export type Needle = { + line: number; + column: number; + bias?: Bias; +}; +export type SourceNeedle = { + source: string; + line: number; + column: number; + bias?: Bias; +}; +export type EachMapping = { + generatedLine: number; + generatedColumn: number; + source: null; + originalLine: null; + originalColumn: null; + name: null; +} | { + generatedLine: number; + generatedColumn: number; + source: string | null; + originalLine: number; + originalColumn: number; + name: string | null; +}; +export declare abstract class SourceMap { + version: SourceMapV3['version']; + file: SourceMapV3['file']; + names: SourceMapV3['names']; + sourceRoot: SourceMapV3['sourceRoot']; + sources: SourceMapV3['sources']; + sourcesContent: SourceMapV3['sourcesContent']; + resolvedSources: SourceMapV3['sources']; + ignoreList: SourceMapV3['ignoreList']; +} +export type Ro = T extends Array ? V[] | Readonly | RoArray | Readonly> : T extends object ? T | Readonly | RoObject | Readonly> : T; +type RoArray = Ro[]; +type RoObject = { + [K in keyof T]: T[K] | Ro; +}; +export declare function parse(map: T): Exclude; +export {}; +//# sourceMappingURL=types.d.ts.map \ No newline at end of file diff --git a/node_modules/@jridgewell/trace-mapping/types/types.d.mts.map b/node_modules/@jridgewell/trace-mapping/types/types.d.mts.map new file mode 100644 index 0000000000..922478396d --- /dev/null +++ b/node_modules/@jridgewell/trace-mapping/types/types.d.mts.map @@ -0,0 +1 @@ +{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@parcel/watcher-darwin-arm64/LICENSE b/node_modules/@parcel/watcher-darwin-arm64/LICENSE new file mode 100644 index 0000000000..7fb9bc953e --- /dev/null +++ b/node_modules/@parcel/watcher-darwin-arm64/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017-present Devon Govett + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/@parcel/watcher-darwin-arm64/README.md b/node_modules/@parcel/watcher-darwin-arm64/README.md new file mode 100644 index 0000000000..d426ec6e99 --- /dev/null +++ b/node_modules/@parcel/watcher-darwin-arm64/README.md @@ -0,0 +1 @@ +This is the darwin-arm64 build of @parcel/watcher. See https://github.com/parcel-bundler/watcher for details. \ No newline at end of file diff --git a/node_modules/@parcel/watcher-darwin-arm64/package.json b/node_modules/@parcel/watcher-darwin-arm64/package.json new file mode 100644 index 0000000000..7e107c3d3b --- /dev/null +++ b/node_modules/@parcel/watcher-darwin-arm64/package.json @@ -0,0 +1,30 @@ +{ + "name": "@parcel/watcher-darwin-arm64", + "version": "2.5.6", + "main": "watcher.node", + "repository": { + "type": "git", + "url": "https://github.com/parcel-bundler/watcher.git" + }, + "description": "A native C++ Node module for querying and subscribing to filesystem events. Used by Parcel 2.", + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "files": [ + "watcher.node" + ], + "engines": { + "node": ">= 10.0.0" + }, + "os": [ + "darwin" + ], + "cpu": [ + "arm64" + ] +} diff --git a/node_modules/@parcel/watcher-darwin-arm64/watcher.node b/node_modules/@parcel/watcher-darwin-arm64/watcher.node new file mode 100644 index 0000000000000000000000000000000000000000..6004afd0b4cd0a496b84fedf2cd33878818d288e GIT binary patch literal 326112 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

7pC|87UUZt@k{EUceX+1L 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 { + console.log(events); +}); + +// later on... +await subscription.unsubscribe(); + +// Get events since some saved snapshot in the past +let snapshotPath = path.join(process.cwd(), 'snapshot.txt'); +let events = await watcher.getEventsSince(process.cwd(), snapshotPath); + +// Save a snapshot for later +await watcher.writeSnapshot(process.cwd(), snapshotPath); +``` + +## Watching + +`@parcel/watcher` supports subscribing to realtime notifications of changes in a directory. It works recursively, so changes in sub-directories will also be emitted. + +Events are throttled and coalesced for performance during large changes like `git checkout` or `npm install`, and a single notification will be emitted with all of the events at the end. + +Only one notification will be emitted per file. For example, if a file was both created and updated since the last event, you'll get only a `create` event. If a file is both created and deleted, you will not be notifed of that file. Renames cause two events: a `delete` for the old name, and a `create` for the new name. + +```javascript +let subscription = await watcher.subscribe(process.cwd(), (err, events) => { + console.log(events); +}); +``` + +Events have two properties: + +- `type` - the event type: `create`, `update`, or `delete`. +- `path` - the absolute path to the file or directory. + +To unsubscribe from change notifications, call the `unsubscribe` method on the returned subscription object. + +```javascript +await subscription.unsubscribe(); +``` + +`@parcel/watcher` has the following watcher backends, listed in priority order: + +- [FSEvents](https://developer.apple.com/documentation/coreservices/file_system_events) on macOS +- [Watchman](https://facebook.github.io/watchman/) if installed +- [inotify](http://man7.org/linux/man-pages/man7/inotify.7.html) on Linux +- [ReadDirectoryChangesW](https://msdn.microsoft.com/en-us/library/windows/desktop/aa365465%28v%3Dvs.85%29.aspx) on Windows +- [kqueue](https://man.freebsd.org/cgi/man.cgi?kqueue) on FreeBSD, or as an alternative to FSEvents on macOS + +You can specify the exact backend you wish to use by passing the `backend` option. If that backend is not available on the current platform, the default backend will be used instead. See below for the list of backend names that can be passed to the options. + +## Querying + +`@parcel/watcher` also supports querying for historical changes made in a directory, even when your program is not running. This makes it easy to invalidate a cache and re-build only the files that have changed, for example. It can be **significantly** faster than traversing the entire filesystem to determine what files changed, depending on the platform. + +In order to query for historical changes, you first need a previous snapshot to compare to. This can be saved to a file with the `writeSnapshot` function, e.g. just before your program exits. + +```javascript +await watcher.writeSnapshot(dirPath, snapshotPath); +``` + +When your program starts up, you can query for changes that have occurred since that snapshot using the `getEventsSince` function. + +```javascript +let events = await watcher.getEventsSince(dirPath, snapshotPath); +``` + +The events returned are exactly the same as the events that would be passed to the `subscribe` callback (see above). + +`@parcel/watcher` has the following watcher backends, listed in priority order: + +- [FSEvents](https://developer.apple.com/documentation/coreservices/file_system_events) on macOS +- [Watchman](https://facebook.github.io/watchman/) if installed +- [fts](http://man7.org/linux/man-pages/man3/fts.3.html) (brute force) on Linux and FreeBSD +- [FindFirstFile](https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-findfirstfilea) (brute force) on Windows + +The FSEvents (macOS) and Watchman backends are significantly more performant than the brute force backends used by default on Linux and Windows, for example returning results in miliseconds instead of seconds for large directory trees. This is because a background daemon monitoring filesystem changes on those platforms allows us to query cached data rather than traversing the filesystem manually (brute force). + +macOS has good performance with FSEvents by default. For the best performance on other platforms, install [Watchman](https://facebook.github.io/watchman/) and it will be used by `@parcel/watcher` automatically. + +You can specify the exact backend you wish to use by passing the `backend` option. If that backend is not available on the current platform, the default backend will be used instead. See below for the list of backend names that can be passed to the options. + +## Options + +All of the APIs in `@parcel/watcher` support the following options, which are passed as an object as the last function argument. + +- `ignore` - an array of paths or glob patterns to ignore. uses [`is-glob`](https://github.com/micromatch/is-glob) to distinguish paths from globs. glob patterns are parsed with [`picomatch`](https://github.com/micromatch/picomatch) (see [features](https://github.com/micromatch/picomatch#globbing-features)). + - paths can be relative or absolute and can either be files or directories. No events will be emitted about these files or directories or their children. + - glob patterns match on relative paths from the root that is watched. No events will be emitted for matching paths. +- `backend` - the name of an explicitly chosen backend to use. Allowed options are `"fs-events"`, `"watchman"`, `"inotify"`, `"kqueue"`, `"windows"`, or `"brute-force"` (only for querying). If the specified backend is not available on the current platform, the default backend will be used instead. + +## WASM + +The `@parcel/watcher-wasm` package can be used in place of `@parcel/watcher` on unsupported platforms. It relies on the Node `fs` module, so in non-Node environments such as browsers, an `fs` polyfill will be needed. + +**Note**: the WASM implementation is significantly less efficient than the native implementations because it must crawl the file system to watch each directory individually. Use the native `@parcel/watcher` package wherever possible. + +```js +import {subscribe} from '@parcel/watcher-wasm'; + +// Use the module as documented above. +subscribe(/* ... */); +``` + +## Who is using this? + +- [Parcel 2](https://parceljs.org/) +- [VSCode](https://code.visualstudio.com/updates/v1_62#_file-watching-changes) +- [Tailwind CSS Intellisense](https://github.com/tailwindlabs/tailwindcss-intellisense) +- [Gatsby Cloud](https://twitter.com/chatsidhartha/status/1435647412828196867) +- [Nx](https://nx.dev) +- [Nuxt](https://nuxt.com) +- [Meteor](https://github.com/meteor/meteor) + +## License + +MIT diff --git a/node_modules/@parcel/watcher/binding.gyp b/node_modules/@parcel/watcher/binding.gyp new file mode 100644 index 0000000000..3c12d52322 --- /dev/null +++ b/node_modules/@parcel/watcher/binding.gyp @@ -0,0 +1,109 @@ +{ + "targets": [ + { + "target_name": "watcher", + "defines": [ "NAPI_DISABLE_CPP_EXCEPTIONS" ], + "sources": [ "src/binding.cc", "src/Watcher.cc", "src/Backend.cc", "src/DirTree.cc", "src/Glob.cc", "src/Debounce.cc" ], + "include_dirs" : [" unknown; + export interface AsyncSubscription { + unsubscribe(): Promise; + } + export interface Event { + path: FilePath; + type: EventType; + } + export function getEventsSince( + dir: FilePath, + snapshot: FilePath, + opts?: Options + ): Promise; + export function subscribe( + dir: FilePath, + fn: SubscribeCallback, + opts?: Options + ): Promise; + export function unsubscribe( + dir: FilePath, + fn: SubscribeCallback, + opts?: Options + ): Promise; + export function writeSnapshot( + dir: FilePath, + snapshot: FilePath, + opts?: Options + ): Promise; +} + +export = ParcelWatcher; \ No newline at end of file diff --git a/node_modules/@parcel/watcher/index.js b/node_modules/@parcel/watcher/index.js new file mode 100644 index 0000000000..31aba4f9a6 --- /dev/null +++ b/node_modules/@parcel/watcher/index.js @@ -0,0 +1,42 @@ +const {createWrapper} = require('./wrapper'); + +let name = `@parcel/watcher-${process.platform}-${process.arch}`; +if (process.platform === 'linux') { + const { MUSL, familySync } = require('detect-libc'); + const family = familySync(); + if (family === MUSL) { + name += '-musl'; + } else { + name += '-glibc'; + } +} + +let binding; +try { + binding = require(name); +} catch (err) { + handleError(err); + try { + binding = require('./build/Release/watcher.node'); + } catch (err) { + handleError(err); + try { + binding = require('./build/Debug/watcher.node'); + } catch (err) { + handleError(err); + throw new Error(`No prebuild or local build of @parcel/watcher found. Tried ${name}. Please ensure it is installed (don't use --no-optional when installing with npm). Otherwise it is possible we don't support your platform yet. If this is the case, please report an issue to https://github.com/parcel-bundler/watcher.`); + } + } +} + +function handleError(err) { + if (err?.code !== 'MODULE_NOT_FOUND') { + throw err; + } +} + +const wrapper = createWrapper(binding); +exports.writeSnapshot = wrapper.writeSnapshot; +exports.getEventsSince = wrapper.getEventsSince; +exports.subscribe = wrapper.subscribe; +exports.unsubscribe = wrapper.unsubscribe; diff --git a/node_modules/@parcel/watcher/index.js.flow b/node_modules/@parcel/watcher/index.js.flow new file mode 100644 index 0000000000..d75da93d70 --- /dev/null +++ b/node_modules/@parcel/watcher/index.js.flow @@ -0,0 +1,48 @@ +// @flow +declare type FilePath = string; +declare type GlobPattern = string; + +export type BackendType = + | 'fs-events' + | 'watchman' + | 'inotify' + | 'windows' + | 'brute-force'; +export type EventType = 'create' | 'update' | 'delete'; +export interface Options { + ignore?: Array, + backend?: BackendType +} +export type SubscribeCallback = ( + err: ?Error, + events: Array +) => mixed; +export interface AsyncSubscription { + unsubscribe(): Promise +} +export interface Event { + path: FilePath, + type: EventType +} +declare module.exports: { + getEventsSince( + dir: FilePath, + snapshot: FilePath, + opts?: Options + ): Promise>, + subscribe( + dir: FilePath, + fn: SubscribeCallback, + opts?: Options + ): Promise, + unsubscribe( + dir: FilePath, + fn: SubscribeCallback, + opts?: Options + ): Promise, + writeSnapshot( + dir: FilePath, + snapshot: FilePath, + opts?: Options + ): Promise +} \ No newline at end of file diff --git a/node_modules/@parcel/watcher/package.json b/node_modules/@parcel/watcher/package.json new file mode 100644 index 0000000000..995149df58 --- /dev/null +++ b/node_modules/@parcel/watcher/package.json @@ -0,0 +1,88 @@ +{ + "name": "@parcel/watcher", + "version": "2.5.6", + "main": "index.js", + "types": "index.d.ts", + "repository": { + "type": "git", + "url": "https://github.com/parcel-bundler/watcher.git" + }, + "description": "A native C++ Node module for querying and subscribing to filesystem events. Used by Parcel 2.", + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "files": [ + "index.js", + "index.js.flow", + "index.d.ts", + "wrapper.js", + "package.json", + "README.md", + "LICENSE", + "src", + "scripts/build-from-source.js", + "binding.gyp" + ], + "scripts": { + "prebuild": "prebuildify --napi --strip --tag-libc", + "format": "prettier --write \"./**/*.{js,json,md}\"", + "build": "node-gyp rebuild", + "install": "node scripts/build-from-source.js", + "test": "mocha" + }, + "engines": { + "node": ">= 10.0.0" + }, + "husky": { + "hooks": { + "pre-commit": "lint-staged" + } + }, + "lint-staged": { + "*.{js,json,md}": [ + "prettier --write", + "git add" + ] + }, + "dependencies": { + "detect-libc": "^2.0.3", + "is-glob": "^4.0.3", + "node-addon-api": "^7.0.0", + "picomatch": "^4.0.3" + }, + "devDependencies": { + "esbuild": "^0.19.8", + "fs-extra": "^10.0.0", + "husky": "^7.0.2", + "lint-staged": "^11.1.2", + "mocha": "^9.1.1", + "napi-wasm": "^1.1.0", + "prebuildify": "^6.0.1", + "prettier": "^2.3.2" + }, + "binary": { + "napi_versions": [ + 3 + ] + }, + "optionalDependencies": { + "@parcel/watcher-darwin-x64": "2.5.6", + "@parcel/watcher-darwin-arm64": "2.5.6", + "@parcel/watcher-win32-x64": "2.5.6", + "@parcel/watcher-win32-arm64": "2.5.6", + "@parcel/watcher-win32-ia32": "2.5.6", + "@parcel/watcher-linux-x64-glibc": "2.5.6", + "@parcel/watcher-linux-x64-musl": "2.5.6", + "@parcel/watcher-linux-arm64-glibc": "2.5.6", + "@parcel/watcher-linux-arm64-musl": "2.5.6", + "@parcel/watcher-linux-arm-glibc": "2.5.6", + "@parcel/watcher-linux-arm-musl": "2.5.6", + "@parcel/watcher-android-arm64": "2.5.6", + "@parcel/watcher-freebsd-x64": "2.5.6" + } +} diff --git a/node_modules/@parcel/watcher/scripts/build-from-source.js b/node_modules/@parcel/watcher/scripts/build-from-source.js new file mode 100644 index 0000000000..4602008ba8 --- /dev/null +++ b/node_modules/@parcel/watcher/scripts/build-from-source.js @@ -0,0 +1,13 @@ +#!/usr/bin/env node + +const {spawn} = require('child_process'); + +if (process.env.npm_config_build_from_source === 'true') { + build(); +} + +function build() { + spawn('node-gyp', ['rebuild'], { stdio: 'inherit', shell: true }).on('exit', function (code) { + process.exit(code); + }); +} diff --git a/node_modules/@parcel/watcher/src/Backend.cc b/node_modules/@parcel/watcher/src/Backend.cc new file mode 100644 index 0000000000..09a53d54b0 --- /dev/null +++ b/node_modules/@parcel/watcher/src/Backend.cc @@ -0,0 +1,186 @@ +#ifdef FS_EVENTS +#include "macos/FSEventsBackend.hh" +#endif +#ifdef WATCHMAN +#include "watchman/WatchmanBackend.hh" +#endif +#ifdef WINDOWS +#include "windows/WindowsBackend.hh" +#endif +#ifdef INOTIFY +#include "linux/InotifyBackend.hh" +#endif +#ifdef KQUEUE +#include "kqueue/KqueueBackend.hh" +#endif +#ifdef __wasm32__ +#include "wasm/WasmBackend.hh" +#endif +#include "shared/BruteForceBackend.hh" + +#include "Backend.hh" +#include + +static std::unordered_map>& getSharedBackends() { + static std::unordered_map>* sharedBackends = + new std::unordered_map>(); + return *sharedBackends; +} + +std::shared_ptr getBackend(std::string backend) { + // Use FSEvents on macOS by default. + // Use watchman by default if available on other platforms. + // Fall back to brute force. + #ifdef FS_EVENTS + if (backend == "fs-events" || backend == "default") { + return std::make_shared(); + } + #endif + #ifdef WATCHMAN + if ((backend == "watchman" || backend == "default") && WatchmanBackend::checkAvailable()) { + return std::make_shared(); + } + #endif + #ifdef WINDOWS + if (backend == "windows" || backend == "default") { + return std::make_shared(); + } + #endif + #ifdef INOTIFY + if (backend == "inotify" || backend == "default") { + return std::make_shared(); + } + #endif + #ifdef KQUEUE + if (backend == "kqueue" || backend == "default") { + return std::make_shared(); + } + #endif + #ifdef __wasm32__ + if (backend == "wasm" || backend == "default") { + return std::make_shared(); + } + #endif + if (backend == "brute-force" || backend == "default") { + return std::make_shared(); + } + + return nullptr; +} + +std::shared_ptr Backend::getShared(std::string backend) { + auto found = getSharedBackends().find(backend); + if (found != getSharedBackends().end()) { + return found->second; + } + + auto result = getBackend(backend); + if (!result) { + return getShared("default"); + } + + result->run(); + getSharedBackends().emplace(backend, result); + return result; +} + +void removeShared(Backend *backend) { + for (auto it = getSharedBackends().begin(); it != getSharedBackends().end(); it++) { + if (it->second.get() == backend) { + getSharedBackends().erase(it); + break; + } + } + + // Free up memory. + if (getSharedBackends().size() == 0) { + getSharedBackends().rehash(0); + } +} + +void Backend::run() { + #ifndef __wasm32__ + mThread = std::thread([this] () { + try { + start(); + } catch (std::exception &err) { + handleError(err); + } + }); + + if (mThread.joinable()) { + mStartedSignal.wait(); + } + #else + try { + start(); + } catch (std::exception &err) { + handleError(err); + } + #endif +} + +void Backend::notifyStarted() { + mStartedSignal.notify(); +} + +void Backend::start() { + notifyStarted(); +} + +Backend::~Backend() { + #ifndef __wasm32__ + // Wait for thread to stop + if (mThread.joinable()) { + // If the backend is being destroyed from the thread itself, detach, otherwise join. + if (mThread.get_id() == std::this_thread::get_id()) { + mThread.detach(); + } else { + mThread.join(); + } + } + #endif +} + +void Backend::watch(WatcherRef watcher) { + std::unique_lock lock(mMutex); + auto res = mSubscriptions.find(watcher); + if (res == mSubscriptions.end()) { + try { + this->subscribe(watcher); + mSubscriptions.insert(watcher); + } catch (std::exception&) { + unref(); + throw; + } + } +} + +void Backend::unwatch(WatcherRef watcher) { + std::unique_lock lock(mMutex); + size_t deleted = mSubscriptions.erase(watcher); + if (deleted > 0) { + this->unsubscribe(watcher); + unref(); + } +} + +void Backend::unref() { + if (mSubscriptions.size() == 0) { + removeShared(this); + } +} + +void Backend::handleWatcherError(WatcherError &err) { + unwatch(err.mWatcher); + err.mWatcher->notifyError(err); +} + +void Backend::handleError(std::exception &err) { + std::unique_lock lock(mMutex); + for (auto it = mSubscriptions.begin(); it != mSubscriptions.end(); it++) { + (*it)->notifyError(err); + } + + removeShared(this); +} diff --git a/node_modules/@parcel/watcher/src/Backend.hh b/node_modules/@parcel/watcher/src/Backend.hh new file mode 100644 index 0000000000..d673bd1a19 --- /dev/null +++ b/node_modules/@parcel/watcher/src/Backend.hh @@ -0,0 +1,37 @@ +#ifndef BACKEND_H +#define BACKEND_H + +#include "Event.hh" +#include "Watcher.hh" +#include "Signal.hh" +#include + +class Backend { +public: + virtual ~Backend(); + void run(); + void notifyStarted(); + + virtual void start(); + virtual void writeSnapshot(WatcherRef watcher, std::string *snapshotPath) = 0; + virtual void getEventsSince(WatcherRef watcher, std::string *snapshotPath) = 0; + virtual void subscribe(WatcherRef watcher) = 0; + virtual void unsubscribe(WatcherRef watcher) = 0; + + static std::shared_ptr getShared(std::string backend); + + void watch(WatcherRef watcher); + void unwatch(WatcherRef watcher); + void unref(); + void handleWatcherError(WatcherError &err); + + std::mutex mMutex; + std::thread mThread; +private: + std::unordered_set mSubscriptions; + Signal mStartedSignal; + + void handleError(std::exception &err); +}; + +#endif diff --git a/node_modules/@parcel/watcher/src/Debounce.cc b/node_modules/@parcel/watcher/src/Debounce.cc new file mode 100644 index 0000000000..be07e78284 --- /dev/null +++ b/node_modules/@parcel/watcher/src/Debounce.cc @@ -0,0 +1,113 @@ +#include "Debounce.hh" + +#ifdef __wasm32__ +extern "C" void on_timeout(void *ctx) { + Debounce *debounce = (Debounce *)ctx; + debounce->notify(); +} +#endif + +std::shared_ptr Debounce::getShared() { + static std::weak_ptr sharedInstance; + std::shared_ptr shared = sharedInstance.lock(); + if (!shared) { + shared = std::make_shared(); + sharedInstance = shared; + } + + return shared; +} + +Debounce::Debounce() { + mRunning = true; + #ifndef __wasm32__ + mThread = std::thread([this] () { + loop(); + }); + #endif +} + +Debounce::~Debounce() { + mRunning = false; + #ifndef __wasm32__ + mWaitSignal.notify(); + mThread.join(); + #endif +} + +void Debounce::add(void *key, std::function cb) { + std::unique_lock lock(mMutex); + mCallbacks.emplace(key, cb); +} + +void Debounce::remove(void *key) { + std::unique_lock lock(mMutex); + mCallbacks.erase(key); +} + +void Debounce::trigger() { + std::unique_lock lock(mMutex); + #ifdef __wasm32__ + notifyIfReady(); + #else + mWaitSignal.notify(); + #endif +} + +#ifndef __wasm32__ +void Debounce::loop() { + while (mRunning) { + mWaitSignal.wait(); + if (!mRunning) { + break; + } + + notifyIfReady(); + } +} +#endif + +void Debounce::notifyIfReady() { + if (!mRunning) { + return; + } + + // If we haven't seen an event in more than the maximum wait time, notify callbacks immediately + // to ensure that we don't wait forever. Otherwise, wait for the minimum wait time and batch + // subsequent fast changes. This also means the first file change in a batch is notified immediately, + // separately from the rest of the batch. This seems like an acceptable tradeoff if the common case + // is that only a single file was updated at a time. + auto time = std::chrono::steady_clock::now(); + if ((time - mLastTime) > std::chrono::milliseconds(MAX_WAIT_TIME)) { + mLastTime = time; + notify(); + } else { + wait(); + } +} + +void Debounce::wait() { + #ifdef __wasm32__ + clear_timeout(mTimeout); + mTimeout = set_timeout(MIN_WAIT_TIME, this); + #else + auto status = mWaitSignal.waitFor(std::chrono::milliseconds(MIN_WAIT_TIME)); + if (mRunning && (status == std::cv_status::timeout)) { + notify(); + } + #endif +} + +void Debounce::notify() { + std::unique_lock lock(mMutex); + + mLastTime = std::chrono::steady_clock::now(); + for (auto it = mCallbacks.begin(); it != mCallbacks.end(); it++) { + auto cb = it->second; + cb(); + } + + #ifndef __wasm32__ + mWaitSignal.reset(); + #endif +} diff --git a/node_modules/@parcel/watcher/src/Debounce.hh b/node_modules/@parcel/watcher/src/Debounce.hh new file mode 100644 index 0000000000..a17fdef7b8 --- /dev/null +++ b/node_modules/@parcel/watcher/src/Debounce.hh @@ -0,0 +1,49 @@ +#ifndef DEBOUNCE_H +#define DEBOUNCE_H + +#include +#include +#include +#include "Signal.hh" + +#define MIN_WAIT_TIME 50 +#define MAX_WAIT_TIME 500 + +#ifdef __wasm32__ +extern "C" { + int set_timeout(int ms, void *ctx); + void clear_timeout(int timeout); + void on_timeout(void *ctx); +}; +#endif + +class Debounce { +public: + static std::shared_ptr getShared(); + + Debounce(); + ~Debounce(); + + void add(void *key, std::function cb); + void remove(void *key); + void trigger(); + void notify(); + +private: + bool mRunning; + std::mutex mMutex; + #ifdef __wasm32__ + int mTimeout; + #else + Signal mWaitSignal; + std::thread mThread; + #endif + std::unordered_map> mCallbacks; + std::chrono::time_point mLastTime; + + void loop(); + void notifyIfReady(); + void wait(); +}; + +#endif diff --git a/node_modules/@parcel/watcher/src/DirTree.cc b/node_modules/@parcel/watcher/src/DirTree.cc new file mode 100644 index 0000000000..b7eddd8cd6 --- /dev/null +++ b/node_modules/@parcel/watcher/src/DirTree.cc @@ -0,0 +1,164 @@ +#include "DirTree.hh" +#include + +// "Meyer's singleton", construction is ordered by use, likewise (reverse) for destruction. +// https://stackoverflow.com/a/17713799 +// https://laristra.github.io/flecsi/src/developer-guide/patterns/meyers_singleton.html +static std::mutex& mDirCacheMutex() { + static std::mutex mutex; + return mutex; +} + +static std::unordered_map>& dirTreeCache() { + static std::unordered_map> cache; + return cache; +} + +struct DirTreeDeleter { + void operator()(DirTree *tree) { + std::lock_guard lock(mDirCacheMutex()); + std::unordered_map> &cache = dirTreeCache(); + cache.erase(tree->root); + delete tree; + + // Free up memory. + if (cache.size() == 0) { + cache.rehash(0); + } + } +}; + +std::shared_ptr DirTree::getCached(std::string root) { + std::lock_guard lock(mDirCacheMutex()); + std::unordered_map> &cache = dirTreeCache(); + + auto found = cache.find(root); + std::shared_ptr tree; + + // Use cached tree, or create an empty one. + if (found != cache.end()) { + tree = found->second.lock(); + } else { + tree = std::shared_ptr(new DirTree(root), DirTreeDeleter()); + cache.emplace(root, tree); + } + + return tree; +} + +DirTree::DirTree(std::string root, FILE *f) : root(root), isComplete(true) { + size_t size; + if (fscanf(f, "%zu", &size)) { + for (size_t i = 0; i < size; i++) { + DirEntry entry(f); + entries.emplace(entry.path, entry); + } + } +} + +// Internal find method that has no lock +DirEntry *DirTree::_find(std::string path) { + auto found = entries.find(path); + if (found == entries.end()) { + return NULL; + } + + return &found->second; +} + +DirEntry *DirTree::add(std::string path, uint64_t mtime, bool isDir) { + std::lock_guard lock(mDirCacheMutex()); + + DirEntry entry(path, mtime, isDir); + auto it = entries.emplace(entry.path, entry); + return &it.first->second; +} + +DirEntry *DirTree::find(std::string path) { + std::lock_guard lock(mDirCacheMutex()); + return _find(path); +} + +DirEntry *DirTree::update(std::string path, uint64_t mtime) { + std::lock_guard lock(mDirCacheMutex()); + + DirEntry *found = _find(path); + if (found) { + found->mtime = mtime; + } + + return found; +} + +void DirTree::remove(std::string path) { + std::lock_guard lock(mDirCacheMutex()); + + DirEntry *found = _find(path); + + // Remove all sub-entries if this is a directory + if (found && found->isDir) { + std::string pathStart = path + DIR_SEP; + for (auto it = entries.begin(); it != entries.end();) { + if (it->first.rfind(pathStart, 0) == 0) { + it = entries.erase(it); + } else { + it++; + } + } + } + + entries.erase(path); +} + +void DirTree::write(FILE *f) { + std::lock_guard lock(mDirCacheMutex()); + + fprintf(f, "%zu\n", entries.size()); + for (auto it = entries.begin(); it != entries.end(); it++) { + it->second.write(f); + } +} + +void DirTree::getChanges(DirTree *snapshot, EventList &events) { + std::lock_guard lock(mDirCacheMutex()); + std::lock_guard snapshotLock(snapshot->mMutex); + + for (auto it = entries.begin(); it != entries.end(); it++) { + auto found = snapshot->entries.find(it->first); + if (found == snapshot->entries.end()) { + events.create(it->second.path); + } else if (found->second.mtime != it->second.mtime && !found->second.isDir && !it->second.isDir) { + events.update(it->second.path); + } + } + + for (auto it = snapshot->entries.begin(); it != snapshot->entries.end(); it++) { + size_t count = entries.count(it->first); + if (count == 0) { + events.remove(it->second.path); + } + } +} + +DirEntry::DirEntry(std::string p, uint64_t t, bool d) { + path = p; + mtime = t; + isDir = d; + state = NULL; +} + +DirEntry::DirEntry(FILE *f) { + size_t size; + if (fscanf(f, "%zu", &size)) { + path.resize(size); + if (fread(&path[0], sizeof(char), size, f)) { + int d = 0; + fscanf(f, "%" PRIu64 " %d\n", &mtime, &d); + isDir = d == 1; + } + } +} + +void DirEntry::write(FILE *f) const { + fprintf(f, "%zu%s%" PRIu64 " %d\n", path.size(), path.c_str(), mtime, isDir); +} diff --git a/node_modules/@parcel/watcher/src/DirTree.hh b/node_modules/@parcel/watcher/src/DirTree.hh new file mode 100644 index 0000000000..328f469965 --- /dev/null +++ b/node_modules/@parcel/watcher/src/DirTree.hh @@ -0,0 +1,50 @@ +#ifndef DIR_TREE_H +#define DIR_TREE_H + +#include +#include +#include +#include "Event.hh" + +#ifdef _WIN32 +#define DIR_SEP "\\" +#else +#define DIR_SEP "/" +#endif + +struct DirEntry { + std::string path; + uint64_t mtime; + bool isDir; + mutable void *state; + + DirEntry(std::string p, uint64_t t, bool d); + DirEntry(FILE *f); + void write(FILE *f) const; + bool operator==(const DirEntry &other) const { + return path == other.path; + } +}; + +class DirTree { +public: + static std::shared_ptr getCached(std::string root); + DirTree(std::string root) : root(root), isComplete(false) {} + DirTree(std::string root, FILE *f); + DirEntry *add(std::string path, uint64_t mtime, bool isDir); + DirEntry *find(std::string path); + DirEntry *update(std::string path, uint64_t mtime); + void remove(std::string path); + void write(FILE *f); + void getChanges(DirTree *snapshot, EventList &events); + + std::mutex mMutex; + std::string root; + bool isComplete; + std::unordered_map entries; + +private: + DirEntry *_find(std::string path); +}; + +#endif diff --git a/node_modules/@parcel/watcher/src/Event.hh b/node_modules/@parcel/watcher/src/Event.hh new file mode 100644 index 0000000000..8d09712e50 --- /dev/null +++ b/node_modules/@parcel/watcher/src/Event.hh @@ -0,0 +1,109 @@ +#ifndef EVENT_H +#define EVENT_H + +#include +#include +#include "wasm/include.h" +#include +#include +#include +#include + +using namespace Napi; + +struct Event { + std::string path; + bool isCreated; + bool isDeleted; + Event(std::string path) : path(path), isCreated(false), isDeleted(false) {} + + Value toJS(const Env& env) { + EscapableHandleScope scope(env); + Object res = Object::New(env); + std::string type = isCreated ? "create" : isDeleted ? "delete" : "update"; + res.Set(String::New(env, "path"), String::New(env, path.c_str())); + res.Set(String::New(env, "type"), String::New(env, type.c_str())); + return scope.Escape(res); + } +}; + +class EventList { +public: + void create(std::string path) { + std::lock_guard l(mMutex); + Event *event = internalUpdate(path); + if (event->isDeleted) { + // Assume update event when rapidly removed and created + // https://github.com/parcel-bundler/watcher/issues/72 + event->isDeleted = false; + } else { + event->isCreated = true; + } + } + + Event *update(std::string path) { + std::lock_guard l(mMutex); + return internalUpdate(path); + } + + void remove(std::string path) { + std::lock_guard l(mMutex); + Event *event = internalUpdate(path); + event->isDeleted = true; + } + + size_t size() { + std::lock_guard l(mMutex); + return mEvents.size(); + } + + std::vector getEvents() { + std::lock_guard l(mMutex); + std::vector eventsCloneVector; + for(auto it = mEvents.begin(); it != mEvents.end(); ++it) { + if (!(it->second.isCreated && it->second.isDeleted)) { + eventsCloneVector.push_back(it->second); + } + } + return eventsCloneVector; + } + + void clear() { + std::lock_guard l(mMutex); + mEvents.clear(); + mError.reset(); + } + + void error(std::string err) { + std::lock_guard l(mMutex); + if (!mError.has_value()) { + mError.emplace(err); + } + } + + bool hasError() { + std::lock_guard l(mMutex); + return mError.has_value(); + } + + std::string getError() { + std::lock_guard l(mMutex); + return mError.value_or(""); + } + +private: + mutable std::mutex mMutex; + std::map mEvents; + std::optional mError; + Event *internalUpdate(std::string path) { + auto found = mEvents.find(path); + if (found == mEvents.end()) { + auto it = mEvents.emplace(path, Event(path)); + return &it.first->second; + } + + return &found->second; + } +}; + +#endif diff --git a/node_modules/@parcel/watcher/src/Glob.cc b/node_modules/@parcel/watcher/src/Glob.cc new file mode 100644 index 0000000000..a4a1722495 --- /dev/null +++ b/node_modules/@parcel/watcher/src/Glob.cc @@ -0,0 +1,22 @@ +#include "Glob.hh" + +#ifdef __wasm32__ +extern "C" bool wasm_regex_match(const char *s, const char *regex); +#endif + +Glob::Glob(std::string raw) { + mRaw = raw; + mHash = std::hash()(raw); + #ifndef __wasm32__ + mRegex = std::regex(raw); + #endif +} + +bool Glob::isIgnored(std::string relative_path) const { + // Use native JS regex engine for wasm to reduce binary size. + #ifdef __wasm32__ + return wasm_regex_match(relative_path.c_str(), mRaw.c_str()); + #else + return std::regex_match(relative_path, mRegex); + #endif +} diff --git a/node_modules/@parcel/watcher/src/Glob.hh b/node_modules/@parcel/watcher/src/Glob.hh new file mode 100644 index 0000000000..b5fc3759fc --- /dev/null +++ b/node_modules/@parcel/watcher/src/Glob.hh @@ -0,0 +1,34 @@ +#ifndef GLOB_H +#define GLOB_H + +#include +#include + +struct Glob { + std::size_t mHash; + std::string mRaw; + #ifndef __wasm32__ + std::regex mRegex; + #endif + + Glob(std::string raw); + + bool operator==(const Glob &other) const { + return mHash == other.mHash && mRaw == other.mRaw; + } + + bool isIgnored(std::string relative_path) const; +}; + +namespace std +{ + template <> + struct hash + { + size_t operator()(const Glob& g) const { + return g.mHash; + } + }; +} + +#endif diff --git a/node_modules/@parcel/watcher/src/PromiseRunner.hh b/node_modules/@parcel/watcher/src/PromiseRunner.hh new file mode 100644 index 0000000000..4ca3bb66cb --- /dev/null +++ b/node_modules/@parcel/watcher/src/PromiseRunner.hh @@ -0,0 +1,101 @@ +#ifndef PROMISE_RUNNER_H +#define PROMISE_RUNNER_H + +#include +#include "wasm/include.h" +#include + +using namespace Napi; + +class PromiseRunner { +public: + const Env env; + Promise::Deferred deferred; + + PromiseRunner(Env env) : env(env), deferred(Promise::Deferred::New(env)) { + napi_status status = napi_create_async_work(env, nullptr, env.Undefined(), + onExecute, onWorkComplete, this, &work); + if (status != napi_ok) { + work = nullptr; + const napi_extended_error_info *error_info = 0; + napi_get_last_error_info(env, &error_info); + if (error_info->error_message) { + Error::New(env, error_info->error_message).ThrowAsJavaScriptException(); + } else { + Error::New(env).ThrowAsJavaScriptException(); + } + } + } + + virtual ~PromiseRunner() {} + + Value queue() { + if (work) { + napi_status status = napi_queue_async_work(env, work); + if (status != napi_ok) { + onError(Error::New(env)); + } + } + + return deferred.Promise(); + } + +private: + napi_async_work work; + std::string error; + + static void onExecute(napi_env env, void *this_pointer) { + PromiseRunner* self = (PromiseRunner*) this_pointer; + try { + self->execute(); + } catch (std::exception &err) { + self->error = err.what(); + } + } + + static void onWorkComplete(napi_env env, napi_status status, void *this_pointer) { + PromiseRunner* self = (PromiseRunner*) this_pointer; + if (status != napi_cancelled) { + HandleScope scope(self->env); + if (status == napi_ok) { + status = napi_delete_async_work(self->env, self->work); + if (status == napi_ok) { + if (self->error.size() == 0) { + self->onOK(); + } else { + self->onError(Error::New(self->env, self->error)); + } + delete self; + return; + } + } + } + + // fallthrough for error handling + const napi_extended_error_info *error_info = 0; + napi_get_last_error_info(env, &error_info); + if (error_info->error_message){ + self->onError(Error::New(env, error_info->error_message)); + } else { + self->onError(Error::New(env)); + } + delete self; + } + + virtual void execute() {} + virtual Value getResult() { + return env.Null(); + } + + void onOK() { + HandleScope scope(env); + Value result = getResult(); + deferred.Resolve(result); + } + + void onError(const Error &e) { + deferred.Reject(e.Value()); + } +}; + +#endif diff --git a/node_modules/@parcel/watcher/src/Signal.hh b/node_modules/@parcel/watcher/src/Signal.hh new file mode 100644 index 0000000000..e577319d4f --- /dev/null +++ b/node_modules/@parcel/watcher/src/Signal.hh @@ -0,0 +1,46 @@ +#ifndef SIGNAL_H +#define SIGNAL_H + +#include +#include + +class Signal { +public: + Signal() : mFlag(false), mWaiting(false) {} + void wait() { + std::unique_lock lock(mMutex); + while (!mFlag) { + mWaiting = true; + mCond.wait(lock); + } + } + + std::cv_status waitFor(std::chrono::milliseconds ms) { + std::unique_lock lock(mMutex); + return mCond.wait_for(lock, ms); + } + + void notify() { + std::unique_lock lock(mMutex); + mFlag = true; + mCond.notify_all(); + } + + void reset() { + std::unique_lock lock(mMutex); + mFlag = false; + mWaiting = false; + } + + bool isWaiting() { + return mWaiting; + } + +private: + bool mFlag; + bool mWaiting; + std::mutex mMutex; + std::condition_variable mCond; +}; + +#endif diff --git a/node_modules/@parcel/watcher/src/Watcher.cc b/node_modules/@parcel/watcher/src/Watcher.cc new file mode 100644 index 0000000000..a58ff3722d --- /dev/null +++ b/node_modules/@parcel/watcher/src/Watcher.cc @@ -0,0 +1,241 @@ +#include "Watcher.hh" +#include + +using namespace Napi; + +struct WatcherHash { + std::size_t operator() (WatcherRef const &k) const { + return std::hash()(k->mDir); + } +}; + +struct WatcherCompare { + size_t operator() (WatcherRef const &a, WatcherRef const &b) const { + return *a == *b; + } +}; + +static std::unordered_set& getSharedWatchers() { + static std::unordered_set* sharedWatchers = + new std::unordered_set(); + return *sharedWatchers; +} + +WatcherRef Watcher::getShared(std::string dir, std::unordered_set ignorePaths, std::unordered_set ignoreGlobs) { + WatcherRef watcher = std::make_shared(dir, ignorePaths, ignoreGlobs); + auto found = getSharedWatchers().find(watcher); + if (found != getSharedWatchers().end()) { + return *found; + } + + getSharedWatchers().insert(watcher); + return watcher; +} + +void removeShared(Watcher *watcher) { + for (auto it = getSharedWatchers().begin(); it != getSharedWatchers().end(); it++) { + if (it->get() == watcher) { + getSharedWatchers().erase(it); + break; + } + } + + // Free up memory. + if (getSharedWatchers().size() == 0) { + getSharedWatchers().rehash(0); + } +} + +Watcher::Watcher(std::string dir, std::unordered_set ignorePaths, std::unordered_set ignoreGlobs) + : mDir(dir), + mIgnorePaths(ignorePaths), + mIgnoreGlobs(ignoreGlobs) { + mDebounce = Debounce::getShared(); + mDebounce->add(this, [this] () { + triggerCallbacks(); + }); + } + +Watcher::~Watcher() { + mDebounce->remove(this); +} + +void Watcher::wait() { + std::unique_lock lk(mMutex); + mCond.wait(lk); +} + +void Watcher::notify() { + std::unique_lock lk(mMutex); + mCond.notify_all(); + + if (mCallbacks.size() > 0 && mEvents.size() > 0) { + // We must release our lock before calling into the debouncer + // to avoid a deadlock: the debouncer thread itself will require + // our lock from its thread when calling into `triggerCallbacks` + // while holding its own debouncer lock. + lk.unlock(); + mDebounce->trigger(); + } +} + +struct CallbackData { + std::string error; + std::vector events; + CallbackData(std::string error, std::vector events) : error(error), events(events) {} +}; + +Value callbackEventsToJS(const Env &env, std::vector &events) { + EscapableHandleScope scope(env); + Array arr = Array::New(env, events.size()); + uint32_t currentEventIndex = 0; + for (auto eventIterator = events.begin(); eventIterator != events.end(); eventIterator++) { + arr.Set(currentEventIndex++, eventIterator->toJS(env)); + } + return scope.Escape(arr); +} + +void callJSFunction(Napi::Env env, Function jsCallback, CallbackData *data) { + HandleScope scope(env); + auto err = data->error.size() > 0 ? Error::New(env, data->error).Value() : env.Null(); + auto events = callbackEventsToJS(env, data->events); + jsCallback.Call({err, events}); + delete data; + + // Throw errors from the callback as fatal exceptions + // If we don't handle these node segfaults... + if (env.IsExceptionPending()) { + Napi::Error err = env.GetAndClearPendingException(); + napi_fatal_exception(env, err.Value()); + } +} + +void Watcher::notifyError(std::exception &err) { + std::unique_lock lk(mMutex); + for (auto it = mCallbacks.begin(); it != mCallbacks.end(); it++) { + CallbackData *data = new CallbackData(err.what(), {}); + it->tsfn.BlockingCall(data, callJSFunction); + } + + clearCallbacks(); +} + +// This function is called from the debounce thread. +void Watcher::triggerCallbacks() { + std::unique_lock lk(mMutex); + if (mCallbacks.size() > 0 && (mEvents.size() > 0 || mEvents.hasError())) { + auto error = mEvents.getError(); + auto events = mEvents.getEvents(); + mEvents.clear(); + + for (auto it = mCallbacks.begin(); it != mCallbacks.end(); it++) { + it->tsfn.BlockingCall(new CallbackData(error, events), callJSFunction); + } + } +} + +// This should be called from the JavaScript thread. +bool Watcher::watch(Function callback) { + std::unique_lock lk(mMutex); + + auto it = findCallback(callback); + if (it != mCallbacks.end()) { + return false; + } + + auto tsfn = ThreadSafeFunction::New( + callback.Env(), + callback, + "Watcher callback", + 0, // Unlimited queue + 1 // Initial thread count + ); + + mCallbacks.push_back(Callback { + tsfn, + Napi::Persistent(callback), + std::this_thread::get_id() + }); + + return true; +} + +// This should be called from the JavaScript thread. +std::vector::iterator Watcher::findCallback(Function callback) { + for (auto it = mCallbacks.begin(); it != mCallbacks.end(); it++) { + // Only consider callbacks created by the same thread, or V8 will panic. + if (it->threadId == std::this_thread::get_id() && it->ref.Value() == callback) { + return it; + } + } + + return mCallbacks.end(); +} + +// This should be called from the JavaScript thread. +bool Watcher::unwatch(Function callback) { + std::unique_lock lk(mMutex); + + bool removed = false; + auto it = findCallback(callback); + if (it != mCallbacks.end()) { + it->tsfn.Release(); + it->ref.Unref(); + mCallbacks.erase(it); + removed = true; + } + + if (removed && mCallbacks.size() == 0) { + unref(); + return true; + } + + return false; +} + +void Watcher::unref() { + if (mCallbacks.size() == 0) { + removeShared(this); + } +} + +void Watcher::destroy() { + std::unique_lock lk(mMutex); + clearCallbacks(); +} + +// Private because it doesn't lock. +void Watcher::clearCallbacks() { + for (auto it = mCallbacks.begin(); it != mCallbacks.end(); it++) { + it->tsfn.Release(); + it->ref.Unref(); + } + + mCallbacks.clear(); + unref(); +} + +bool Watcher::isIgnored(std::string path) { + for (auto it = mIgnorePaths.begin(); it != mIgnorePaths.end(); it++) { + auto dir = *it + DIR_SEP; + if (*it == path || path.compare(0, dir.size(), dir) == 0) { + return true; + } + } + + auto basePath = mDir + DIR_SEP; + + if (path.rfind(basePath, 0) != 0) { + return false; + } + + auto relativePath = path.substr(basePath.size()); + + for (auto it = mIgnoreGlobs.begin(); it != mIgnoreGlobs.end(); it++) { + if (it->isIgnored(relativePath)) { + return true; + } + } + + return false; +} diff --git a/node_modules/@parcel/watcher/src/Watcher.hh b/node_modules/@parcel/watcher/src/Watcher.hh new file mode 100644 index 0000000000..f89e9f5dca --- /dev/null +++ b/node_modules/@parcel/watcher/src/Watcher.hh @@ -0,0 +1,73 @@ +#ifndef WATCHER_H +#define WATCHER_H + +#include +#include +#include +#include +#include "Glob.hh" +#include "Event.hh" +#include "Debounce.hh" +#include "DirTree.hh" +#include "Signal.hh" + +using namespace Napi; + +struct Watcher; +using WatcherRef = std::shared_ptr; + +struct Callback { + Napi::ThreadSafeFunction tsfn; + Napi::FunctionReference ref; + std::thread::id threadId; +}; + +class WatcherState { +public: + virtual ~WatcherState() = default; +}; + +struct Watcher { + std::string mDir; + std::unordered_set mIgnorePaths; + std::unordered_set mIgnoreGlobs; + EventList mEvents; + std::shared_ptr state; + + Watcher(std::string dir, std::unordered_set ignorePaths, std::unordered_set ignoreGlobs); + ~Watcher(); + + bool operator==(const Watcher &other) const { + return mDir == other.mDir && mIgnorePaths == other.mIgnorePaths && mIgnoreGlobs == other.mIgnoreGlobs; + } + + void wait(); + void notify(); + void notifyError(std::exception &err); + bool watch(Function callback); + bool unwatch(Function callback); + void unref(); + bool isIgnored(std::string path); + void destroy(); + + static WatcherRef getShared(std::string dir, std::unordered_set ignorePaths, std::unordered_set ignoreGlobs); + +private: + std::mutex mMutex; + std::condition_variable mCond; + std::vector mCallbacks; + std::shared_ptr mDebounce; + + std::vector::iterator findCallback(Function callback); + void clearCallbacks(); + void triggerCallbacks(); +}; + +class WatcherError : public std::runtime_error { +public: + WatcherRef mWatcher; + WatcherError(std::string msg, WatcherRef watcher) : std::runtime_error(msg), mWatcher(watcher) {} + WatcherError(const char *msg, WatcherRef watcher) : std::runtime_error(msg), mWatcher(watcher) {} +}; + +#endif diff --git a/node_modules/@parcel/watcher/src/binding.cc b/node_modules/@parcel/watcher/src/binding.cc new file mode 100644 index 0000000000..057b61b833 --- /dev/null +++ b/node_modules/@parcel/watcher/src/binding.cc @@ -0,0 +1,268 @@ +#include +#include +#include "wasm/include.h" +#include +#include "Glob.hh" +#include "Event.hh" +#include "Backend.hh" +#include "Watcher.hh" +#include "PromiseRunner.hh" + +using namespace Napi; + +std::unordered_set getIgnorePaths(Env env, Value opts) { + std::unordered_set result; + + if (opts.IsObject()) { + Value v = opts.As().Get(String::New(env, "ignorePaths")); + if (v.IsArray()) { + Array items = v.As(); + for (size_t i = 0; i < items.Length(); i++) { + Value item = items.Get(Number::New(env, static_cast(i))); + if (item.IsString()) { + result.insert(std::string(item.As().Utf8Value().c_str())); + } + } + } + } + + return result; +} + +std::unordered_set getIgnoreGlobs(Env env, Value opts) { + std::unordered_set result; + + if (opts.IsObject()) { + Value v = opts.As().Get(String::New(env, "ignoreGlobs")); + if (v.IsArray()) { + Array items = v.As(); + for (size_t i = 0; i < items.Length(); i++) { + Value item = items.Get(Number::New(env, static_cast(i))); + if (item.IsString()) { + auto key = item.As().Utf8Value(); + try { + result.emplace(key); + } catch (const std::regex_error& e) { + Error::New(env, e.what()).ThrowAsJavaScriptException(); + } + } + } + } + } + + return result; +} + +std::shared_ptr getBackend(Env env, Value opts) { + Value b = opts.As().Get(String::New(env, "backend")); + std::string backendName; + if (b.IsString()) { + backendName = std::string(b.As().Utf8Value().c_str()); + } + + return Backend::getShared(backendName); +} + +class WriteSnapshotRunner : public PromiseRunner { +public: + WriteSnapshotRunner(Env env, Value dir, Value snap, Value opts) + : PromiseRunner(env), + snapshotPath(std::string(snap.As().Utf8Value().c_str())) { + watcher = Watcher::getShared( + std::string(dir.As().Utf8Value().c_str()), + getIgnorePaths(env, opts), + getIgnoreGlobs(env, opts) + ); + + backend = getBackend(env, opts); + } + + ~WriteSnapshotRunner() { + watcher->unref(); + backend->unref(); + } +private: + std::shared_ptr backend; + WatcherRef watcher; + std::string snapshotPath; + + void execute() override { + backend->writeSnapshot(watcher, &snapshotPath); + } +}; + +class GetEventsSinceRunner : public PromiseRunner { +public: + GetEventsSinceRunner(Env env, Value dir, Value snap, Value opts) + : PromiseRunner(env), + snapshotPath(std::string(snap.As().Utf8Value().c_str())) { + watcher = std::make_shared( + std::string(dir.As().Utf8Value().c_str()), + getIgnorePaths(env, opts), + getIgnoreGlobs(env, opts) + ); + + backend = getBackend(env, opts); + } + + ~GetEventsSinceRunner() { + watcher->unref(); + backend->unref(); + } +private: + std::shared_ptr backend; + WatcherRef watcher; + std::string snapshotPath; + + void execute() override { + backend->getEventsSince(watcher, &snapshotPath); + if (watcher->mEvents.hasError()) { + throw std::runtime_error(watcher->mEvents.getError()); + } + } + + Value getResult() override { + std::vector events = watcher->mEvents.getEvents(); + Array eventsArray = Array::New(env, events.size()); + uint32_t i = 0; + for (auto it = events.begin(); it != events.end(); it++) { + eventsArray.Set(i++, it->toJS(env)); + } + return eventsArray; + } +}; + +template +Value queueSnapshotWork(const CallbackInfo& info) { + Env env = info.Env(); + if (info.Length() < 1 || !info[0].IsString()) { + TypeError::New(env, "Expected a string").ThrowAsJavaScriptException(); + return env.Null(); + } + + if (info.Length() < 2 || !info[1].IsString()) { + TypeError::New(env, "Expected a string").ThrowAsJavaScriptException(); + return env.Null(); + } + + if (info.Length() >= 3 && !info[2].IsObject()) { + TypeError::New(env, "Expected an object").ThrowAsJavaScriptException(); + return env.Null(); + } + + Runner *runner = new Runner(info.Env(), info[0], info[1], info[2]); + return runner->queue(); +} + +Value writeSnapshot(const CallbackInfo& info) { + return queueSnapshotWork(info); +} + +Value getEventsSince(const CallbackInfo& info) { + return queueSnapshotWork(info); +} + +class SubscribeRunner : public PromiseRunner { +public: + SubscribeRunner(Env env, Value dir, Value fn, Value opts) : PromiseRunner(env) { + watcher = Watcher::getShared( + std::string(dir.As().Utf8Value().c_str()), + getIgnorePaths(env, opts), + getIgnoreGlobs(env, opts) + ); + + backend = getBackend(env, opts); + watcher->watch(fn.As()); + } + +private: + WatcherRef watcher; + std::shared_ptr backend; + FunctionReference callback; + + void execute() override { + try { + backend->watch(watcher); + } catch (std::exception&) { + watcher->destroy(); + throw; + } + } +}; + +class UnsubscribeRunner : public PromiseRunner { +public: + UnsubscribeRunner(Env env, Value dir, Value fn, Value opts) : PromiseRunner(env) { + watcher = Watcher::getShared( + std::string(dir.As().Utf8Value().c_str()), + getIgnorePaths(env, opts), + getIgnoreGlobs(env, opts) + ); + + backend = getBackend(env, opts); + shouldUnwatch = watcher->unwatch(fn.As()); + } + +private: + WatcherRef watcher; + std::shared_ptr backend; + bool shouldUnwatch; + + void execute() override { + if (shouldUnwatch) { + backend->unwatch(watcher); + } + } +}; + +template +Value queueSubscriptionWork(const CallbackInfo& info) { + Env env = info.Env(); + if (info.Length() < 1 || !info[0].IsString()) { + TypeError::New(env, "Expected a string").ThrowAsJavaScriptException(); + return env.Null(); + } + + if (info.Length() < 2 || !info[1].IsFunction()) { + TypeError::New(env, "Expected a function").ThrowAsJavaScriptException(); + return env.Null(); + } + + if (info.Length() >= 3 && !info[2].IsObject()) { + TypeError::New(env, "Expected an object").ThrowAsJavaScriptException(); + return env.Null(); + } + + Runner *runner = new Runner(info.Env(), info[0], info[1], info[2]); + return runner->queue(); +} + +Value subscribe(const CallbackInfo& info) { + return queueSubscriptionWork(info); +} + +Value unsubscribe(const CallbackInfo& info) { + return queueSubscriptionWork(info); +} + +Object Init(Env env, Object exports) { + exports.Set( + String::New(env, "writeSnapshot"), + Function::New(env, writeSnapshot) + ); + exports.Set( + String::New(env, "getEventsSince"), + Function::New(env, getEventsSince) + ); + exports.Set( + String::New(env, "subscribe"), + Function::New(env, subscribe) + ); + exports.Set( + String::New(env, "unsubscribe"), + Function::New(env, unsubscribe) + ); + return exports; +} + +NODE_API_MODULE(watcher, Init) diff --git a/node_modules/@parcel/watcher/src/kqueue/KqueueBackend.cc b/node_modules/@parcel/watcher/src/kqueue/KqueueBackend.cc new file mode 100644 index 0000000000..2991c32fa3 --- /dev/null +++ b/node_modules/@parcel/watcher/src/kqueue/KqueueBackend.cc @@ -0,0 +1,306 @@ +#include +#include +#include +#include +#include +#include +#include +#include "KqueueBackend.hh" + +#if __APPLE__ +#define st_mtim st_mtimespec +#endif + +#if !defined(O_EVTONLY) +#define O_EVTONLY O_RDONLY +#endif + +#define CONVERT_TIME(ts) ((uint64_t)ts.tv_sec * 1000000000 + ts.tv_nsec) + +void KqueueBackend::start() { + if ((mKqueue = kqueue()) < 0) { + throw std::runtime_error(std::string("Unable to open kqueue: ") + strerror(errno)); + } + + // Create a pipe that we will write to when we want to end the thread. + int err = pipe(mPipe); + if (err == -1) { + throw std::runtime_error(std::string("Unable to open pipe: ") + strerror(errno)); + } + + // Subscribe kqueue to this pipe. + struct kevent ev; + EV_SET( + &ev, + mPipe[0], + EVFILT_READ, + EV_ADD | EV_CLEAR, + 0, + 0, + 0 + ); + + if (kevent(mKqueue, &ev, 1, NULL, 0, 0)) { + close(mPipe[0]); + close(mPipe[1]); + throw std::runtime_error(std::string("Unable to watch pipe: ") + strerror(errno)); + } + + notifyStarted(); + + struct kevent events[128]; + + while (true) { + int event_count = kevent(mKqueue, NULL, 0, events, 128, 0); + if (event_count < 0 || events[0].flags == EV_ERROR) { + throw std::runtime_error(std::string("kevent error: ") + strerror(errno)); + } + + // Track all of the watchers that are touched so we can notify them at the end of the events. + std::unordered_set watchers; + + for (int i = 0; i < event_count; i++) { + int flags = events[i].fflags; + int fd = events[i].ident; + if (fd == mPipe[0]) { + // pipe was written to. break out of the loop. + goto done; + } + + auto it = mFdToEntry.find(fd); + if (it == mFdToEntry.end()) { + // If fd wasn't in our map, we may have already stopped watching it. Ignore the event. + continue; + } + + DirEntry *entry = it->second; + + if (flags & NOTE_WRITE && entry && entry->isDir) { + // If a write occurred on a directory, we have to diff the contents of that + // directory to determine what file was added/deleted. + compareDir(fd, entry->path, watchers); + } else { + std::vector subs = findSubscriptions(entry->path); + for (auto it = subs.begin(); it != subs.end(); it++) { + KqueueSubscription *sub = *it; + watchers.insert(sub->watcher); + if (flags & (NOTE_DELETE | NOTE_RENAME | NOTE_REVOKE)) { + sub->watcher->mEvents.remove(sub->path); + sub->tree->remove(sub->path); + mFdToEntry.erase((int)(size_t)entry->state); + mSubscriptions.erase(sub->path); + } else if (flags & (NOTE_WRITE | NOTE_ATTRIB | NOTE_EXTEND)) { + struct stat st; + lstat(sub->path.c_str(), &st); + if (entry->mtime != CONVERT_TIME(st.st_mtim)) { + entry->mtime = CONVERT_TIME(st.st_mtim); + sub->watcher->mEvents.update(sub->path); + } + } + } + } + } + + for (auto it = watchers.begin(); it != watchers.end(); it++) { + (*it)->notify(); + } + } + +done: + close(mPipe[0]); + close(mPipe[1]); + mEndedSignal.notify(); +} + +KqueueBackend::~KqueueBackend() { + write(mPipe[1], "X", 1); + mEndedSignal.wait(); +} + +void KqueueBackend::subscribe(WatcherRef watcher) { + // Build a full directory tree recursively, and watch each directory. + std::shared_ptr tree = getTree(watcher); + + for (auto it = tree->entries.begin(); it != tree->entries.end(); it++) { + bool success = watchDir(watcher, it->second.path, tree); + if (!success) { + throw WatcherError(std::string("error watching " + watcher->mDir + ": " + strerror(errno)), watcher); + } + } +} + +bool KqueueBackend::watchDir(WatcherRef watcher, std::string path, std::shared_ptr tree) { + if (watcher->isIgnored(path)) { + return false; + } + + DirEntry *entry = tree->find(path); + if (!entry) { + return false; + } + + KqueueSubscription sub = { + .watcher = watcher, + .path = path, + .tree = tree + }; + + if (!entry->state) { + int fd = open(path.c_str(), O_EVTONLY); + if (fd <= 0) { + return false; + } + + struct kevent event; + EV_SET( + &event, + fd, + EVFILT_VNODE, + EV_ADD | EV_CLEAR | EV_ENABLE, + NOTE_DELETE | NOTE_WRITE | NOTE_EXTEND | NOTE_ATTRIB | NOTE_RENAME | NOTE_REVOKE, + 0, + 0 + ); + + if (kevent(mKqueue, &event, 1, NULL, 0, 0)) { + close(fd); + return false; + } + + entry->state = (void *)(size_t)fd; + mFdToEntry.emplace(fd, entry); + } + + sub.fd = (int)(size_t)entry->state; + mSubscriptions.emplace(path, sub); + return true; +} + +std::vector KqueueBackend::findSubscriptions(std::string &path) { + // Find the subscriptions affected by this path. + // Copy pointers to them into a vector so that modifying mSubscriptions doesn't invalidate the iterator. + auto range = mSubscriptions.equal_range(path); + std::vector subs; + for (auto it = range.first; it != range.second; it++) { + subs.push_back(&it->second); + } + + return subs; +} + +bool KqueueBackend::compareDir(int fd, std::string &path, std::unordered_set &watchers) { + // macOS doesn't support fdclosedir, so we have to duplicate the file descriptor + // to ensure the closedir doesn't also stop watching. + #if __APPLE__ + fd = dup(fd); + #endif + + DIR *dir = fdopendir(fd); + if (dir == NULL) { + return false; + } + + // fdopendir doesn't rewind to the beginning. + rewinddir(dir); + + std::vector subs = findSubscriptions(path); + std::string dirStart = path + DIR_SEP; + + std::unordered_set> trees; + for (auto it = subs.begin(); it != subs.end(); it++) { + trees.emplace((*it)->tree); + } + + std::unordered_set entries; + struct dirent *entry; + while ((entry = readdir(dir))) { + if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) { + continue; + } + + std::string fullpath = dirStart + entry->d_name; + entries.emplace(fullpath); + + for (auto it = trees.begin(); it != trees.end(); it++) { + std::shared_ptr tree = *it; + if (!tree->find(fullpath)) { + struct stat st; + fstatat(fd, entry->d_name, &st, AT_SYMLINK_NOFOLLOW); + tree->add(fullpath, CONVERT_TIME(st.st_mtim), S_ISDIR(st.st_mode)); + + // Notify all watchers with the same tree. + for (auto i = subs.begin(); i != subs.end(); i++) { + KqueueSubscription *sub = *i; + if (sub->tree == tree) { + if (sub->watcher->isIgnored(fullpath)) { + continue; + } + + sub->watcher->mEvents.create(fullpath); + watchers.emplace(sub->watcher); + + bool success = watchDir(sub->watcher, fullpath, sub->tree); + if (!success) { + sub->tree->remove(fullpath); + return false; + } + } + } + } + } + } + + for (auto it = trees.begin(); it != trees.end(); it++) { + std::shared_ptr tree = *it; + for (auto entry = tree->entries.begin(); entry != tree->entries.end();) { + + if ( + entry->first.rfind(dirStart, 0) == 0 && + entry->first.find(DIR_SEP, dirStart.length()) == std::string::npos && + entries.count(entry->first) == 0 + ) { + // Notify all watchers with the same tree. + for (auto i = subs.begin(); i != subs.end(); i++) { + if ((*i)->tree == tree) { + KqueueSubscription *sub = *i; + if (!sub->watcher->isIgnored(entry->first)) { + sub->watcher->mEvents.remove(entry->first); + watchers.emplace(sub->watcher); + } + } + } + + mFdToEntry.erase((int)(size_t)entry->second.state); + mSubscriptions.erase(entry->first); + entry = tree->entries.erase(entry); + } else { + entry++; + } + } + } + + #if __APPLE__ + closedir(dir); + #else + fdclosedir(dir); + #endif + + return true; +} + +void KqueueBackend::unsubscribe(WatcherRef watcher) { + // Find any subscriptions pointing to this watcher, and remove them. + for (auto it = mSubscriptions.begin(); it != mSubscriptions.end();) { + if (it->second.watcher.get() == watcher.get()) { + if (mSubscriptions.count(it->first) == 1) { + // Closing the file descriptor automatically unwatches it in the kqueue. + close(it->second.fd); + mFdToEntry.erase(it->second.fd); + } + + it = mSubscriptions.erase(it); + } else { + it++; + } + } +} diff --git a/node_modules/@parcel/watcher/src/kqueue/KqueueBackend.hh b/node_modules/@parcel/watcher/src/kqueue/KqueueBackend.hh new file mode 100644 index 0000000000..3c6a9cdd5c --- /dev/null +++ b/node_modules/@parcel/watcher/src/kqueue/KqueueBackend.hh @@ -0,0 +1,35 @@ +#ifndef KQUEUE_H +#define KQUEUE_H + +#include +#include +#include "../shared/BruteForceBackend.hh" +#include "../DirTree.hh" +#include "../Signal.hh" + +struct KqueueSubscription { + WatcherRef watcher; + std::string path; + std::shared_ptr tree; + int fd; +}; + +class KqueueBackend : public BruteForceBackend { +public: + void start() override; + ~KqueueBackend(); + void subscribe(WatcherRef watcher) override; + void unsubscribe(WatcherRef watcher) override; +private: + int mKqueue; + int mPipe[2]; + std::unordered_multimap mSubscriptions; + std::unordered_map mFdToEntry; + Signal mEndedSignal; + + bool watchDir(WatcherRef watcher, std::string path, std::shared_ptr tree); + bool compareDir(int fd, std::string &dir, std::unordered_set &watchers); + std::vector findSubscriptions(std::string &path); +}; + +#endif diff --git a/node_modules/@parcel/watcher/src/linux/InotifyBackend.cc b/node_modules/@parcel/watcher/src/linux/InotifyBackend.cc new file mode 100644 index 0000000000..949f49853b --- /dev/null +++ b/node_modules/@parcel/watcher/src/linux/InotifyBackend.cc @@ -0,0 +1,236 @@ +#include +#include +#include +#include +#include +#include "InotifyBackend.hh" + +#define INOTIFY_MASK \ + IN_ATTRIB | IN_CREATE | IN_DELETE | \ + IN_DELETE_SELF | IN_MODIFY | IN_MOVE_SELF | IN_MOVED_FROM | \ + IN_MOVED_TO | IN_DONT_FOLLOW | IN_ONLYDIR | IN_EXCL_UNLINK +#define BUFFER_SIZE 8192 +#define CONVERT_TIME(ts) ((uint64_t)ts.tv_sec * 1000000000 + ts.tv_nsec) + +void InotifyBackend::start() { + // Create a pipe that we will write to when we want to end the thread. + int err = pipe2(mPipe, O_CLOEXEC | O_NONBLOCK); + if (err == -1) { + throw std::runtime_error(std::string("Unable to open pipe: ") + strerror(errno)); + } + + // Init inotify file descriptor. + mInotify = inotify_init1(IN_NONBLOCK | IN_CLOEXEC); + if (mInotify == -1) { + throw std::runtime_error(std::string("Unable to initialize inotify: ") + strerror(errno)); + } + + pollfd pollfds[2]; + pollfds[0].fd = mPipe[0]; + pollfds[0].events = POLLIN; + pollfds[0].revents = 0; + pollfds[1].fd = mInotify; + pollfds[1].events = POLLIN; + pollfds[1].revents = 0; + + notifyStarted(); + + // Loop until we get an event from the pipe. + while (true) { + int result = poll(pollfds, 2, 500); + if (result < 0) { + throw std::runtime_error(std::string("Unable to poll: ") + strerror(errno)); + } + + if (pollfds[0].revents) { + break; + } + + if (pollfds[1].revents) { + handleEvents(); + } + } + + close(mPipe[0]); + close(mPipe[1]); + close(mInotify); + + mEndedSignal.notify(); +} + +InotifyBackend::~InotifyBackend() { + write(mPipe[1], "X", 1); + mEndedSignal.wait(); +} + +// This function is called by Backend::watch which takes a lock on mMutex +void InotifyBackend::subscribe(WatcherRef watcher) { + // Build a full directory tree recursively, and watch each directory. + std::shared_ptr tree = getTree(watcher); + + for (auto it = tree->entries.begin(); it != tree->entries.end(); it++) { + if (it->second.isDir) { + bool success = watchDir(watcher, it->second.path, tree); + if (!success) { + throw WatcherError(std::string("inotify_add_watch on '") + it->second.path + std::string("' failed: ") + strerror(errno), watcher); + } + } + } +} + +bool InotifyBackend::watchDir(WatcherRef watcher, std::string path, std::shared_ptr tree) { + int wd = inotify_add_watch(mInotify, path.c_str(), INOTIFY_MASK); + if (wd == -1) { + return false; + } + + std::shared_ptr sub = std::make_shared(); + sub->tree = tree; + sub->path = path; + sub->watcher = watcher; + mSubscriptions.emplace(wd, sub); + + return true; +} + +void InotifyBackend::handleEvents() { + char buf[BUFFER_SIZE] __attribute__ ((aligned(__alignof__(struct inotify_event))));; + struct inotify_event *event; + + // Track all of the watchers that are touched so we can notify them at the end of the events. + std::unordered_set watchers; + + while (true) { + int n = read(mInotify, &buf, BUFFER_SIZE); + if (n < 0) { + if (errno == EAGAIN || errno == EWOULDBLOCK) { + break; + } + + throw std::runtime_error(std::string("Error reading from inotify: ") + strerror(errno)); + } + + if (n == 0) { + break; + } + + for (char *ptr = buf; ptr < buf + n; ptr += sizeof(*event) + event->len) { + event = (struct inotify_event *)ptr; + + if ((event->mask & IN_Q_OVERFLOW) == IN_Q_OVERFLOW) { + // overflow + continue; + } + + handleEvent(event, watchers); + } + } + + for (auto it = watchers.begin(); it != watchers.end(); it++) { + (*it)->notify(); + } +} + +void InotifyBackend::handleEvent(struct inotify_event *event, std::unordered_set &watchers) { + std::unique_lock lock(mMutex); + + // Find the subscriptions for this watch descriptor + auto range = mSubscriptions.equal_range(event->wd); + std::unordered_set> set; + for (auto it = range.first; it != range.second; it++) { + set.insert(it->second); + } + + for (auto it = set.begin(); it != set.end(); it++) { + if (handleSubscription(event, *it)) { + watchers.insert((*it)->watcher); + } + } +} + +bool InotifyBackend::handleSubscription(struct inotify_event *event, std::shared_ptr sub) { + // Build full path and check if its in our ignore list. + std::shared_ptr watcher = sub->watcher; + std::string path = std::string(sub->path); + bool isDir = event->mask & IN_ISDIR; + + if (event->len > 0) { + path += "/" + std::string(event->name); + } + + if (watcher->isIgnored(path)) { + return false; + } + + // If this is a create, check if it's a directory and start watching if it is. + // In any case, keep the directory tree up to date. + if (event->mask & (IN_CREATE | IN_MOVED_TO)) { + watcher->mEvents.create(path); + + struct stat st; + // Use lstat to avoid resolving symbolic links that we cannot watch anyway + // https://github.com/parcel-bundler/watcher/issues/76 + if (lstat(path.c_str(), &st) != 0) { + return false; + } + DirEntry *entry = sub->tree->add(path, CONVERT_TIME(st.st_mtim), S_ISDIR(st.st_mode)); + + if (entry->isDir) { + bool success = watchDir(watcher, path, sub->tree); + if (!success) { + sub->tree->remove(path); + return false; + } + } + } else if (event->mask & (IN_MODIFY | IN_ATTRIB)) { + watcher->mEvents.update(path); + + struct stat st; + if (stat(path.c_str(), &st) != 0) { + return false; + } + sub->tree->update(path, CONVERT_TIME(st.st_mtim)); + } else if (event->mask & (IN_DELETE | IN_DELETE_SELF | IN_MOVED_FROM | IN_MOVE_SELF)) { + bool isSelfEvent = (event->mask & (IN_DELETE_SELF | IN_MOVE_SELF)); + // Ignore delete/move self events unless this is the recursive watch root + if (isSelfEvent && path != watcher->mDir) { + return false; + } + + // If the entry being deleted/moved is a directory, remove it from the list of subscriptions + // XXX: self events don't have the IN_ISDIR mask + if (isSelfEvent || isDir) { + for (auto it = mSubscriptions.begin(); it != mSubscriptions.end();) { + if (it->second->path == path) { + it = mSubscriptions.erase(it); + } else { + ++it; + } + } + } + + watcher->mEvents.remove(path); + sub->tree->remove(path); + } + + return true; +} + +// This function is called by Backend::unwatch which takes a lock on mMutex +void InotifyBackend::unsubscribe(WatcherRef watcher) { + // Find any subscriptions pointing to this watcher, and remove them. + for (auto it = mSubscriptions.begin(); it != mSubscriptions.end();) { + if (it->second->watcher.get() == watcher.get()) { + if (mSubscriptions.count(it->first) == 1) { + int err = inotify_rm_watch(mInotify, it->first); + if (err == -1) { + throw WatcherError(std::string("Unable to remove watcher: ") + strerror(errno), watcher); + } + } + + it = mSubscriptions.erase(it); + } else { + it++; + } + } +} diff --git a/node_modules/@parcel/watcher/src/linux/InotifyBackend.hh b/node_modules/@parcel/watcher/src/linux/InotifyBackend.hh new file mode 100644 index 0000000000..f34cd1f007 --- /dev/null +++ b/node_modules/@parcel/watcher/src/linux/InotifyBackend.hh @@ -0,0 +1,34 @@ +#ifndef INOTIFY_H +#define INOTIFY_H + +#include +#include +#include "../shared/BruteForceBackend.hh" +#include "../DirTree.hh" +#include "../Signal.hh" + +struct InotifySubscription { + std::shared_ptr tree; + std::string path; + WatcherRef watcher; +}; + +class InotifyBackend : public BruteForceBackend { +public: + void start() override; + ~InotifyBackend(); + void subscribe(WatcherRef watcher) override; + void unsubscribe(WatcherRef watcher) override; +private: + int mPipe[2]; + int mInotify; + std::unordered_multimap> mSubscriptions; + Signal mEndedSignal; + + bool watchDir(WatcherRef watcher, std::string path, std::shared_ptr tree); + void handleEvents(); + void handleEvent(struct inotify_event *event, std::unordered_set &watchers); + bool handleSubscription(struct inotify_event *event, std::shared_ptr sub); +}; + +#endif diff --git a/node_modules/@parcel/watcher/src/macos/FSEventsBackend.cc b/node_modules/@parcel/watcher/src/macos/FSEventsBackend.cc new file mode 100644 index 0000000000..cfda9625fc --- /dev/null +++ b/node_modules/@parcel/watcher/src/macos/FSEventsBackend.cc @@ -0,0 +1,338 @@ +#include +#include +#include +#include +#include +#include "../Event.hh" +#include "../Backend.hh" +#include "./FSEventsBackend.hh" +#include "../Watcher.hh" + +#define CONVERT_TIME(ts) ((uint64_t)ts.tv_sec * 1000000000 + ts.tv_nsec) +#define IGNORED_FLAGS (kFSEventStreamEventFlagItemIsHardlink | kFSEventStreamEventFlagItemIsLastHardlink | kFSEventStreamEventFlagItemIsSymlink | kFSEventStreamEventFlagItemIsDir | kFSEventStreamEventFlagItemIsFile) + +void stopStream(FSEventStreamRef stream, CFRunLoopRef runLoop) { + FSEventStreamStop(stream); + FSEventStreamUnscheduleFromRunLoop(stream, runLoop, kCFRunLoopDefaultMode); + FSEventStreamInvalidate(stream); + FSEventStreamRelease(stream); +} + +// macOS has a case insensitive file system by default. In order to detect +// file renames that only affect case, we need to get the canonical path +// and compare it with the input path to determine if a file was created or deleted. +bool pathExists(char *path) { + int fd = open(path, O_RDONLY | O_SYMLINK); + if (fd == -1) { + return false; + } + + char buf[PATH_MAX]; + if (fcntl(fd, F_GETPATH, buf) == -1) { + close(fd); + return false; + } + + bool res = strncmp(path, buf, PATH_MAX) == 0; + close(fd); + return res; +} + +class State: public WatcherState { +public: + FSEventStreamRef stream; + std::shared_ptr tree; + uint64_t since; +}; + +void FSEventsCallback( + ConstFSEventStreamRef streamRef, + void *clientCallBackInfo, + size_t numEvents, + void *eventPaths, + const FSEventStreamEventFlags eventFlags[], + const FSEventStreamEventId eventIds[] +) { + char **paths = (char **)eventPaths; + std::shared_ptr& watcher = *static_cast *>(clientCallBackInfo); + + EventList& list = watcher->mEvents; + if (watcher->state == nullptr) { + return; + } + + auto stateGuard = watcher->state; + auto* state = static_cast(stateGuard.get()); + uint64_t since = state->since; + bool deletedRoot = false; + + for (size_t i = 0; i < numEvents; ++i) { + bool isCreated = (eventFlags[i] & kFSEventStreamEventFlagItemCreated) == kFSEventStreamEventFlagItemCreated; + bool isRemoved = (eventFlags[i] & kFSEventStreamEventFlagItemRemoved) == kFSEventStreamEventFlagItemRemoved; + bool isModified = (eventFlags[i] & kFSEventStreamEventFlagItemModified) == kFSEventStreamEventFlagItemModified || + (eventFlags[i] & kFSEventStreamEventFlagItemInodeMetaMod) == kFSEventStreamEventFlagItemInodeMetaMod || + (eventFlags[i] & kFSEventStreamEventFlagItemFinderInfoMod) == kFSEventStreamEventFlagItemFinderInfoMod || + (eventFlags[i] & kFSEventStreamEventFlagItemChangeOwner) == kFSEventStreamEventFlagItemChangeOwner || + (eventFlags[i] & kFSEventStreamEventFlagItemXattrMod) == kFSEventStreamEventFlagItemXattrMod; + bool isRenamed = (eventFlags[i] & kFSEventStreamEventFlagItemRenamed) == kFSEventStreamEventFlagItemRenamed; + bool isDone = (eventFlags[i] & kFSEventStreamEventFlagHistoryDone) == kFSEventStreamEventFlagHistoryDone; + bool isDir = (eventFlags[i] & kFSEventStreamEventFlagItemIsDir) == kFSEventStreamEventFlagItemIsDir; + + + if (eventFlags[i] & kFSEventStreamEventFlagMustScanSubDirs) { + if (eventFlags[i] & kFSEventStreamEventFlagUserDropped) { + list.error("Events were dropped by the FSEvents client. File system must be re-scanned."); + } else if (eventFlags[i] & kFSEventStreamEventFlagKernelDropped) { + list.error("Events were dropped by the kernel. File system must be re-scanned."); + } else { + list.error("Too many events. File system must be re-scanned."); + } + } + + if (isDone) { + watcher->notify(); + break; + } + + auto ignoredFlags = IGNORED_FLAGS; + if (__builtin_available(macOS 10.13, *)) { + ignoredFlags |= kFSEventStreamEventFlagItemCloned; + } + + // If we don't care about any of the flags that are set, ignore this event. + if ((eventFlags[i] & ~ignoredFlags) == 0) { + continue; + } + + // FSEvents exclusion paths only apply to files, not directories. + if (watcher->isIgnored(paths[i])) { + continue; + } + + // Handle unambiguous events first + if (isCreated && !(isRemoved || isModified || isRenamed)) { + state->tree->add(paths[i], 0, isDir); + list.create(paths[i]); + } else if (isRemoved && !(isCreated || isModified || isRenamed)) { + state->tree->remove(paths[i]); + list.remove(paths[i]); + if (paths[i] == watcher->mDir) { + deletedRoot = true; + } + } else if (isModified && !(isCreated || isRemoved || isRenamed)) { + struct stat file; + if (stat(paths[i], &file)) { + continue; + } + + // Ignore if mtime is the same as the last event. + // This prevents duplicate events from being emitted. + // If tv_nsec is zero, the file system probably only has second-level + // granularity so allow the even through in that case. + uint64_t mtime = CONVERT_TIME(file.st_mtimespec); + DirEntry *entry = state->tree->find(paths[i]); + if (entry && mtime == entry->mtime && file.st_mtimespec.tv_nsec != 0) { + continue; + } + + if (entry) { + // Update mtime. + entry->mtime = mtime; + } else { + // Add to tree if this path has not been discovered yet. + state->tree->add(paths[i], mtime, S_ISDIR(file.st_mode)); + } + + list.update(paths[i]); + } else { + // If multiple flags were set, then we need to call `stat` to determine if the file really exists. + // This helps disambiguate creates, updates, and deletes. + struct stat file; + if (stat(paths[i], &file) || !pathExists(paths[i])) { + // File does not exist, so we have to assume it was removed. This is not exact since the + // flags set by fsevents get coalesced together (e.g. created & deleted), so there is no way to + // know whether the create and delete both happened since our snapshot (in which case + // we'd rather ignore this event completely). This will result in some extra delete events + // being emitted for files we don't know about, but that is the best we can do. + state->tree->remove(paths[i]); + list.remove(paths[i]); + if (paths[i] == watcher->mDir) { + deletedRoot = true; + } + continue; + } + + // If the file was modified, and existed before, then this is an update, otherwise a create. + uint64_t ctime = CONVERT_TIME(file.st_birthtimespec); + uint64_t mtime = CONVERT_TIME(file.st_mtimespec); + DirEntry *entry = !since ? state->tree->find(paths[i]) : NULL; + if (entry && entry->mtime == mtime && file.st_mtimespec.tv_nsec != 0) { + continue; + } + + // Some mounted file systems report a creation time of 0/unix epoch which we special case. + if (isModified && (entry || (ctime <= since && ctime != 0))) { + state->tree->update(paths[i], mtime); + list.update(paths[i]); + } else { + state->tree->add(paths[i], mtime, S_ISDIR(file.st_mode)); + list.create(paths[i]); + } + } + } + + if (!since) { + watcher->notify(); + } + + // Stop watching if the root directory was deleted. + if (deletedRoot) { + stopStream((FSEventStreamRef)streamRef, CFRunLoopGetCurrent()); + watcher->state = nullptr; + } +} + +void checkWatcher(WatcherRef watcher) { + struct stat file; + if (stat(watcher->mDir.c_str(), &file)) { + throw WatcherError(strerror(errno), watcher); + } + + if (!S_ISDIR(file.st_mode)) { + throw WatcherError(strerror(ENOTDIR), watcher); + } +} + +void FSEventsBackend::startStream(WatcherRef watcher, FSEventStreamEventId id) { + checkWatcher(watcher); + + CFAbsoluteTime latency = 0.001; + CFStringRef fileWatchPath = CFStringCreateWithCString( + NULL, + watcher->mDir.c_str(), + kCFStringEncodingUTF8 + ); + + CFArrayRef pathsToWatch = CFArrayCreate( + NULL, + (const void **)&fileWatchPath, + 1, + NULL + ); + + // Make a watcher reference we can pass into the callback. This ensures bumped ref-count. + std::shared_ptr* callbackWatcher = new std::shared_ptr (watcher); + FSEventStreamContext callbackInfo {0, static_cast (callbackWatcher), nullptr, nullptr, nullptr}; + FSEventStreamRef stream = FSEventStreamCreate( + NULL, + &FSEventsCallback, + &callbackInfo, + pathsToWatch, + id, + latency, + kFSEventStreamCreateFlagFileEvents + ); + + CFMutableArrayRef exclusions = CFArrayCreateMutable(NULL, watcher->mIgnorePaths.size(), NULL); + for (auto it = watcher->mIgnorePaths.begin(); it != watcher->mIgnorePaths.end(); it++) { + CFStringRef path = CFStringCreateWithCString( + NULL, + it->c_str(), + kCFStringEncodingUTF8 + ); + + CFArrayAppendValue(exclusions, (const void *)path); + } + + FSEventStreamSetExclusionPaths(stream, exclusions); + + FSEventStreamScheduleWithRunLoop(stream, mRunLoop, kCFRunLoopDefaultMode); + bool started = FSEventStreamStart(stream); + + CFRelease(pathsToWatch); + CFRelease(fileWatchPath); + + if (!started) { + FSEventStreamRelease(stream); + throw WatcherError("Error starting FSEvents stream", watcher); + } + + auto stateGuard = watcher->state; + State* s = static_cast(stateGuard.get()); + s->tree = std::make_shared(watcher->mDir); + s->stream = stream; +} + +void FSEventsBackend::start() { + mRunLoop = CFRunLoopGetCurrent(); + CFRetain(mRunLoop); + + // Unlock once run loop has started. + CFRunLoopPerformBlock(mRunLoop, kCFRunLoopDefaultMode, ^ { + notifyStarted(); + }); + + CFRunLoopWakeUp(mRunLoop); + CFRunLoopRun(); +} + +FSEventsBackend::~FSEventsBackend() { + std::unique_lock lock(mMutex); + CFRunLoopStop(mRunLoop); + CFRelease(mRunLoop); +} + +void FSEventsBackend::writeSnapshot(WatcherRef watcher, std::string *snapshotPath) { + std::unique_lock lock(mMutex); + checkWatcher(watcher); + + FSEventStreamEventId id = FSEventsGetCurrentEventId(); + std::ofstream ofs(*snapshotPath); + ofs << id; + ofs << "\n"; + + struct timespec now; + clock_gettime(CLOCK_REALTIME, &now); + ofs << CONVERT_TIME(now); +} + +void FSEventsBackend::getEventsSince(WatcherRef watcher, std::string *snapshotPath) { + std::unique_lock lock(mMutex); + std::ifstream ifs(*snapshotPath); + if (ifs.fail()) { + return; + } + + FSEventStreamEventId id; + uint64_t since; + ifs >> id; + ifs >> since; + + auto s = std::make_shared(); + s->since = since; + watcher->state = s; + + startStream(watcher, id); + watcher->wait(); + stopStream(s->stream, mRunLoop); + + watcher->state = nullptr; +} + +// This function is called by Backend::watch which takes a lock on mMutex +void FSEventsBackend::subscribe(WatcherRef watcher) { + auto s = std::make_shared(); + s->since = 0; + watcher->state = s; + startStream(watcher, kFSEventStreamEventIdSinceNow); +} + +// This function is called by Backend::unwatch which takes a lock on mMutex +void FSEventsBackend::unsubscribe(WatcherRef watcher) { + auto stateGuard = watcher->state; + State* s = static_cast(stateGuard.get()); + if (s != nullptr) { + stopStream(s->stream, mRunLoop); + watcher->state = nullptr; + } +} diff --git a/node_modules/@parcel/watcher/src/macos/FSEventsBackend.hh b/node_modules/@parcel/watcher/src/macos/FSEventsBackend.hh new file mode 100644 index 0000000000..57ded666b3 --- /dev/null +++ b/node_modules/@parcel/watcher/src/macos/FSEventsBackend.hh @@ -0,0 +1,20 @@ +#ifndef FS_EVENTS_H +#define FS_EVENTS_H + +#include +#include "../Backend.hh" + +class FSEventsBackend : public Backend { +public: + void start() override; + ~FSEventsBackend(); + void writeSnapshot(WatcherRef watcher, std::string *snapshotPath) override; + void getEventsSince(WatcherRef watcher, std::string *snapshotPath) override; + void subscribe(WatcherRef watcher) override; + void unsubscribe(WatcherRef watcher) override; +private: + void startStream(WatcherRef watcher, FSEventStreamEventId id); + CFRunLoopRef mRunLoop; +}; + +#endif diff --git a/node_modules/@parcel/watcher/src/shared/BruteForceBackend.cc b/node_modules/@parcel/watcher/src/shared/BruteForceBackend.cc new file mode 100644 index 0000000000..0e9b84f0aa --- /dev/null +++ b/node_modules/@parcel/watcher/src/shared/BruteForceBackend.cc @@ -0,0 +1,41 @@ +#include +#include "../DirTree.hh" +#include "../Event.hh" +#include "./BruteForceBackend.hh" + +std::shared_ptr BruteForceBackend::getTree(WatcherRef watcher, bool shouldRead) { + auto tree = DirTree::getCached(watcher->mDir); + + // If the tree is not complete, read it if needed. + if (!tree->isComplete && shouldRead) { + readTree(watcher, tree); + tree->isComplete = true; + } + + return tree; +} + +void BruteForceBackend::writeSnapshot(WatcherRef watcher, std::string *snapshotPath) { + std::unique_lock lock(mMutex); + auto tree = getTree(watcher); + FILE *f = fopen(snapshotPath->c_str(), "w"); + if (!f) { + throw std::runtime_error(std::string("Unable to open snapshot file: ") + strerror(errno)); + } + + tree->write(f); + fclose(f); +} + +void BruteForceBackend::getEventsSince(WatcherRef watcher, std::string *snapshotPath) { + std::unique_lock lock(mMutex); + FILE *f = fopen(snapshotPath->c_str(), "r"); + if (!f) { + throw std::runtime_error(std::string("Unable to open snapshot file: ") + strerror(errno)); + } + + DirTree snapshot{watcher->mDir, f}; + auto now = getTree(watcher); + now->getChanges(&snapshot, watcher->mEvents); + fclose(f); +} diff --git a/node_modules/@parcel/watcher/src/shared/BruteForceBackend.hh b/node_modules/@parcel/watcher/src/shared/BruteForceBackend.hh new file mode 100644 index 0000000000..de7a73d1e9 --- /dev/null +++ b/node_modules/@parcel/watcher/src/shared/BruteForceBackend.hh @@ -0,0 +1,25 @@ +#ifndef BRUTE_FORCE_H +#define BRUTE_FORCE_H + +#include "../Backend.hh" +#include "../DirTree.hh" +#include "../Watcher.hh" + +class BruteForceBackend : public Backend { +public: + void writeSnapshot(WatcherRef watcher, std::string *snapshotPath) override; + void getEventsSince(WatcherRef watcher, std::string *snapshotPath) override; + void subscribe(WatcherRef watcher) override { + throw "Brute force backend doesn't support subscriptions."; + } + + void unsubscribe(WatcherRef watcher) override { + throw "Brute force backend doesn't support subscriptions."; + } + + std::shared_ptr getTree(WatcherRef watcher, bool shouldRead = true); +private: + void readTree(WatcherRef watcher, std::shared_ptr tree); +}; + +#endif diff --git a/node_modules/@parcel/watcher/src/unix/fts.cc b/node_modules/@parcel/watcher/src/unix/fts.cc new file mode 100644 index 0000000000..d50c3e4931 --- /dev/null +++ b/node_modules/@parcel/watcher/src/unix/fts.cc @@ -0,0 +1,50 @@ +#include + +// weird error on linux +#ifdef __THROW +#undef __THROW +#endif +#define __THROW + +#include +#include +#include "../DirTree.hh" +#include "../shared/BruteForceBackend.hh" + +#define CONVERT_TIME(ts) ((uint64_t)ts.tv_sec * 1000000000 + ts.tv_nsec) +#if __APPLE__ +#define st_mtim st_mtimespec +#endif + +void BruteForceBackend::readTree(WatcherRef watcher, std::shared_ptr tree) { + char *paths[2] {(char *)watcher->mDir.c_str(), NULL}; + FTS *fts = fts_open(paths, FTS_NOCHDIR | FTS_PHYSICAL, NULL); + if (!fts) { + throw WatcherError(strerror(errno), watcher); + } + + FTSENT *node; + bool isRoot = true; + + while ((node = fts_read(fts)) != NULL) { + if (node->fts_errno) { + fts_close(fts); + throw WatcherError(strerror(node->fts_errno), watcher); + } + + if (isRoot && !(node->fts_info & FTS_D)) { + fts_close(fts); + throw WatcherError(strerror(ENOTDIR), watcher); + } + + if (watcher->isIgnored(std::string(node->fts_path))) { + fts_set(fts, node, FTS_SKIP); + continue; + } + + tree->add(node->fts_path, CONVERT_TIME(node->fts_statp->st_mtim), (node->fts_info & FTS_D) == FTS_D); + isRoot = false; + } + + fts_close(fts); +} diff --git a/node_modules/@parcel/watcher/src/unix/legacy.cc b/node_modules/@parcel/watcher/src/unix/legacy.cc new file mode 100644 index 0000000000..60490c637c --- /dev/null +++ b/node_modules/@parcel/watcher/src/unix/legacy.cc @@ -0,0 +1,77 @@ +#include + +// weird error on linux +#ifdef __THROW +#undef __THROW +#endif +#define __THROW + +#ifdef _LIBC +# include +#else +# include +#endif +#include +#include +#include + +#include "../DirTree.hh" +#include "../shared/BruteForceBackend.hh" + +#define CONVERT_TIME(ts) ((uint64_t)ts.tv_sec * 1000000000 + ts.tv_nsec) +#if __APPLE__ +#define st_mtim st_mtimespec +#endif +#define ISDOT(a) (a[0] == '.' && (!a[1] || (a[1] == '.' && !a[2]))) + +void iterateDir(WatcherRef watcher, const std::shared_ptr tree, const char *relative, int parent_fd, const std::string &dirname) { + int open_flags = (O_RDONLY | O_CLOEXEC | O_DIRECTORY | O_NOCTTY | O_NONBLOCK | O_NOFOLLOW); + int new_fd = openat(parent_fd, relative, open_flags); + if (new_fd == -1) { + if (errno == EACCES) { + return; // ignore insufficient permissions + } + + throw WatcherError(strerror(errno), watcher); + } + + struct stat rootAttributes; + fstatat(new_fd, ".", &rootAttributes, AT_SYMLINK_NOFOLLOW); + tree->add(dirname, CONVERT_TIME(rootAttributes.st_mtim), true); + + if (DIR *dir = fdopendir(new_fd)) { + while (struct dirent *ent = (errno = 0, readdir(dir))) { + if (ISDOT(ent->d_name)) continue; + + std::string fullPath = dirname + "/" + ent->d_name; + + if (!watcher->isIgnored(fullPath)) { + struct stat attrib; + fstatat(new_fd, ent->d_name, &attrib, AT_SYMLINK_NOFOLLOW); + bool isDir = ent->d_type == DT_DIR; + + if (isDir) { + iterateDir(watcher, tree, ent->d_name, new_fd, fullPath); + } else { + tree->add(fullPath, CONVERT_TIME(attrib.st_mtim), isDir); + } + } + } + + closedir(dir); + } else { + close(new_fd); + } + + if (errno) { + throw WatcherError(strerror(errno), watcher); + } +} + +void BruteForceBackend::readTree(WatcherRef watcher, std::shared_ptr tree) { + int fd = open(watcher->mDir.c_str(), O_RDONLY); + if (fd) { + iterateDir(watcher, tree, ".", fd, watcher->mDir); + close(fd); + } +} diff --git a/node_modules/@parcel/watcher/src/wasm/WasmBackend.cc b/node_modules/@parcel/watcher/src/wasm/WasmBackend.cc new file mode 100644 index 0000000000..9514109cf2 --- /dev/null +++ b/node_modules/@parcel/watcher/src/wasm/WasmBackend.cc @@ -0,0 +1,132 @@ +#include +#include "WasmBackend.hh" + +#define CONVERT_TIME(ts) ((uint64_t)ts.tv_sec * 1000000000 + ts.tv_nsec) + +void WasmBackend::start() { + notifyStarted(); +} + +void WasmBackend::subscribe(WatcherRef watcher) { + // Build a full directory tree recursively, and watch each directory. + std::shared_ptr tree = getTree(watcher); + + for (auto it = tree->entries.begin(); it != tree->entries.end(); it++) { + if (it->second.isDir) { + watchDir(watcher, it->second.path, tree); + } + } +} + +void WasmBackend::watchDir(WatcherRef watcher, std::string path, std::shared_ptr tree) { + int wd = wasm_backend_add_watch(path.c_str(), (void *)this); + std::shared_ptr sub = std::make_shared(); + sub->tree = tree; + sub->path = path; + sub->watcher = watcher; + mSubscriptions.emplace(wd, sub); +} + +extern "C" void wasm_backend_event_handler(void *backend, int wd, int type, char *filename) { + WasmBackend *b = (WasmBackend *)(backend); + b->handleEvent(wd, type, filename); +} + +void WasmBackend::handleEvent(int wd, int type, char *filename) { + // Find the subscriptions for this watch descriptor + auto range = mSubscriptions.equal_range(wd); + std::unordered_set> set; + for (auto it = range.first; it != range.second; it++) { + set.insert(it->second); + } + + for (auto it = set.begin(); it != set.end(); it++) { + if (handleSubscription(type, filename, *it)) { + (*it)->watcher->notify(); + } + } +} + +bool WasmBackend::handleSubscription(int type, char *filename, std::shared_ptr sub) { + // Build full path and check if its in our ignore list. + WatcherRef watcher = sub->watcher; + std::string path = std::string(sub->path); + + if (filename[0] != '\0') { + path += "/" + std::string(filename); + } + + if (watcher->isIgnored(path)) { + return false; + } + + if (type == 1) { + struct stat st; + stat(path.c_str(), &st); + sub->tree->update(path, CONVERT_TIME(st.st_mtim)); + watcher->mEvents.update(path); + } else if (type == 2) { + // Determine if this is a create or delete depending on if the file exists or not. + struct stat st; + if (lstat(path.c_str(), &st)) { + // If the entry being deleted/moved is a directory, remove it from the list of subscriptions + DirEntry *entry = sub->tree->find(path); + if (!entry) { + return false; + } + + if (entry->isDir) { + std::string pathStart = path + DIR_SEP; + for (auto it = mSubscriptions.begin(); it != mSubscriptions.end();) { + if (it->second->path == path || it->second->path.rfind(pathStart, 0) == 0) { + wasm_backend_remove_watch(it->first); + it = mSubscriptions.erase(it); + } else { + ++it; + } + } + + // Remove all sub-entries + for (auto it = sub->tree->entries.begin(); it != sub->tree->entries.end();) { + if (it->first.rfind(pathStart, 0) == 0) { + watcher->mEvents.remove(it->first); + it = sub->tree->entries.erase(it); + } else { + it++; + } + } + } + + watcher->mEvents.remove(path); + sub->tree->remove(path); + } else if (sub->tree->find(path)) { + sub->tree->update(path, CONVERT_TIME(st.st_mtim)); + watcher->mEvents.update(path); + } else { + watcher->mEvents.create(path); + + // If this is a create, check if it's a directory and start watching if it is. + DirEntry *entry = sub->tree->add(path, CONVERT_TIME(st.st_mtim), S_ISDIR(st.st_mode)); + if (entry->isDir) { + watchDir(watcher, path, sub->tree); + } + } + } + + return true; +} + +void WasmBackend::unsubscribe(WatcherRef watcher) { + // Find any subscriptions pointing to this watcher, and remove them. + for (auto it = mSubscriptions.begin(); it != mSubscriptions.end();) { + if (it->second->watcher.get() == watcher.get()) { + if (mSubscriptions.count(it->first) == 1) { + wasm_backend_remove_watch(it->first); + } + + it = mSubscriptions.erase(it); + } else { + it++; + } + } +} diff --git a/node_modules/@parcel/watcher/src/wasm/WasmBackend.hh b/node_modules/@parcel/watcher/src/wasm/WasmBackend.hh new file mode 100644 index 0000000000..9facac8550 --- /dev/null +++ b/node_modules/@parcel/watcher/src/wasm/WasmBackend.hh @@ -0,0 +1,34 @@ +#ifndef WASM_H +#define WASM_H + +#include +#include "../shared/BruteForceBackend.hh" +#include "../DirTree.hh" + +extern "C" { + int wasm_backend_add_watch(const char *filename, void *backend); + void wasm_backend_remove_watch(int wd); + void wasm_backend_event_handler(void *backend, int wd, int type, char *filename); +}; + +struct WasmSubscription { + std::shared_ptr tree; + std::string path; + WatcherRef watcher; +}; + +class WasmBackend : public BruteForceBackend { +public: + void start() override; + void subscribe(WatcherRef watcher) override; + void unsubscribe(WatcherRef watcher) override; + void handleEvent(int wd, int type, char *filename); +private: + int mWasm; + std::unordered_multimap> mSubscriptions; + + void watchDir(WatcherRef watcher, std::string path, std::shared_ptr tree); + bool handleSubscription(int type, char *filename, std::shared_ptr sub); +}; + +#endif diff --git a/node_modules/@parcel/watcher/src/wasm/include.h b/node_modules/@parcel/watcher/src/wasm/include.h new file mode 100644 index 0000000000..60e4d65763 --- /dev/null +++ b/node_modules/@parcel/watcher/src/wasm/include.h @@ -0,0 +1,74 @@ +/* +Copyright Node.js contributors. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. +*/ + +// Node does not include the headers for these functions when compiling for WASM, so add them here. +#ifdef __wasm32__ +extern "C" { +NAPI_EXTERN napi_status NAPI_CDECL +napi_create_threadsafe_function(napi_env env, + napi_value func, + napi_value async_resource, + napi_value async_resource_name, + size_t max_queue_size, + size_t initial_thread_count, + void* thread_finalize_data, + napi_finalize thread_finalize_cb, + void* context, + napi_threadsafe_function_call_js call_js_cb, + napi_threadsafe_function* result); + +NAPI_EXTERN napi_status NAPI_CDECL napi_get_threadsafe_function_context( + napi_threadsafe_function func, void** result); + +NAPI_EXTERN napi_status NAPI_CDECL +napi_call_threadsafe_function(napi_threadsafe_function func, + void* data, + napi_threadsafe_function_call_mode is_blocking); + +NAPI_EXTERN napi_status NAPI_CDECL +napi_acquire_threadsafe_function(napi_threadsafe_function func); + +NAPI_EXTERN napi_status NAPI_CDECL napi_release_threadsafe_function( + napi_threadsafe_function func, napi_threadsafe_function_release_mode mode); + +NAPI_EXTERN napi_status NAPI_CDECL +napi_unref_threadsafe_function(napi_env env, napi_threadsafe_function func); + +NAPI_EXTERN napi_status NAPI_CDECL +napi_ref_threadsafe_function(napi_env env, napi_threadsafe_function func); + +NAPI_EXTERN napi_status NAPI_CDECL +napi_create_async_work(napi_env env, + napi_value async_resource, + napi_value async_resource_name, + napi_async_execute_callback execute, + napi_async_complete_callback complete, + void* data, + napi_async_work* result); +NAPI_EXTERN napi_status NAPI_CDECL napi_delete_async_work(napi_env env, + napi_async_work work); +NAPI_EXTERN napi_status NAPI_CDECL napi_queue_async_work(napi_env env, + napi_async_work work); +NAPI_EXTERN napi_status NAPI_CDECL napi_cancel_async_work(napi_env env, + napi_async_work work); +} +#endif diff --git a/node_modules/@parcel/watcher/src/watchman/BSER.cc b/node_modules/@parcel/watcher/src/watchman/BSER.cc new file mode 100644 index 0000000000..82390dd8b8 --- /dev/null +++ b/node_modules/@parcel/watcher/src/watchman/BSER.cc @@ -0,0 +1,302 @@ +#include +#include "./BSER.hh" + +BSERType decodeType(std::istream &iss) { + int8_t type; + iss.read(reinterpret_cast(&type), sizeof(type)); + return (BSERType) type; +} + +void expectType(std::istream &iss, BSERType expected) { + BSERType got = decodeType(iss); + if (got != expected) { + throw std::runtime_error("Unexpected BSER type"); + } +} + +void encodeType(std::ostream &oss, BSERType type) { + int8_t t = (int8_t)type; + oss.write(reinterpret_cast(&t), sizeof(t)); +} + +template +class Value : public BSERValue { +public: + T value; + Value(T val) { + value = val; + } + + Value() {} +}; + +class BSERInteger : public Value { +public: + BSERInteger(int64_t value) : Value(value) {} + BSERInteger(std::istream &iss) { + int8_t int8; + int16_t int16; + int32_t int32; + int64_t int64; + + BSERType type = decodeType(iss); + + switch (type) { + case BSER_INT8: + iss.read(reinterpret_cast(&int8), sizeof(int8)); + value = int8; + break; + case BSER_INT16: + iss.read(reinterpret_cast(&int16), sizeof(int16)); + value = int16; + break; + case BSER_INT32: + iss.read(reinterpret_cast(&int32), sizeof(int32)); + value = int32; + break; + case BSER_INT64: + iss.read(reinterpret_cast(&int64), sizeof(int64)); + value = int64; + break; + default: + throw std::runtime_error("Invalid BSER int type"); + } + } + + int64_t intValue() override { + return value; + } + + void encode(std::ostream &oss) override { + if (value <= INT8_MAX) { + encodeType(oss, BSER_INT8); + int8_t v = (int8_t)value; + oss.write(reinterpret_cast(&v), sizeof(v)); + } else if (value <= INT16_MAX) { + encodeType(oss, BSER_INT16); + int16_t v = (int16_t)value; + oss.write(reinterpret_cast(&v), sizeof(v)); + } else if (value <= INT32_MAX) { + encodeType(oss, BSER_INT32); + int32_t v = (int32_t)value; + oss.write(reinterpret_cast(&v), sizeof(v)); + } else { + encodeType(oss, BSER_INT64); + oss.write(reinterpret_cast(&value), sizeof(value)); + } + } +}; + +class BSERArray : public Value { +public: + BSERArray() : Value() {} + BSERArray(BSER::Array value) : Value(value) {} + BSERArray(std::istream &iss) { + expectType(iss, BSER_ARRAY); + int64_t len = BSERInteger(iss).intValue(); + for (int64_t i = 0; i < len; i++) { + value.push_back(BSER(iss)); + } + } + + BSER::Array arrayValue() override { + return value; + } + + void encode(std::ostream &oss) override { + encodeType(oss, BSER_ARRAY); + BSERInteger(value.size()).encode(oss); + for (auto it = value.begin(); it != value.end(); it++) { + it->encode(oss); + } + } +}; + +class BSERString : public Value { +public: + BSERString(std::string value) : Value(value) {} + BSERString(std::istream &iss) { + expectType(iss, BSER_STRING); + int64_t len = BSERInteger(iss).intValue(); + value.resize(len); + iss.read(&value[0], len); + } + + std::string stringValue() override { + return value; + } + + void encode(std::ostream &oss) override { + encodeType(oss, BSER_STRING); + BSERInteger(value.size()).encode(oss); + oss << value; + } +}; + +class BSERObject : public Value { +public: + BSERObject() : Value() {} + BSERObject(BSER::Object value) : Value(value) {} + BSERObject(std::istream &iss) { + expectType(iss, BSER_OBJECT); + int64_t len = BSERInteger(iss).intValue(); + for (int64_t i = 0; i < len; i++) { + auto key = BSERString(iss).stringValue(); + auto val = BSER(iss); + value.emplace(key, val); + } + } + + BSER::Object objectValue() override { + return value; + } + + void encode(std::ostream &oss) override { + encodeType(oss, BSER_OBJECT); + BSERInteger(value.size()).encode(oss); + for (auto it = value.begin(); it != value.end(); it++) { + BSERString(it->first).encode(oss); + it->second.encode(oss); + } + } +}; + +class BSERDouble : public Value { +public: + BSERDouble(double value) : Value(value) {} + BSERDouble(std::istream &iss) { + expectType(iss, BSER_REAL); + iss.read(reinterpret_cast(&value), sizeof(value)); + } + + double doubleValue() override { + return value; + } + + void encode(std::ostream &oss) override { + encodeType(oss, BSER_REAL); + oss.write(reinterpret_cast(&value), sizeof(value)); + } +}; + +class BSERBoolean : public Value { +public: + BSERBoolean(bool value) : Value(value) {} + bool boolValue() override { return value; } + void encode(std::ostream &oss) override { + int8_t t = value == true ? static_cast(BSER_BOOL_TRUE) : static_cast(BSER_BOOL_FALSE); + oss.write(reinterpret_cast(&t), sizeof(t)); + } +}; + +class BSERNull : public Value { +public: + BSERNull() : Value(false) {} + void encode(std::ostream &oss) override { + encodeType(oss, BSER_NULL); + } +}; + +std::shared_ptr decodeTemplate(std::istream &iss) { + expectType(iss, BSER_TEMPLATE); + auto keys = BSERArray(iss).arrayValue(); + auto len = BSERInteger(iss).intValue(); + std::shared_ptr arr = std::make_shared(); + for (int64_t i = 0; i < len; i++) { + BSER::Object obj; + for (auto it = keys.begin(); it != keys.end(); it++) { + if (iss.peek() == 0x0c) { + iss.ignore(1); + continue; + } + + auto val = BSER(iss); + obj.emplace(it->stringValue(), val); + } + arr->value.push_back(obj); + } + return arr; +} + +BSER::BSER(std::istream &iss) { + BSERType type = decodeType(iss); + iss.unget(); + + switch (type) { + case BSER_ARRAY: + m_ptr = std::make_shared(iss); + break; + case BSER_OBJECT: + m_ptr = std::make_shared(iss); + break; + case BSER_STRING: + m_ptr = std::make_shared(iss); + break; + case BSER_INT8: + case BSER_INT16: + case BSER_INT32: + case BSER_INT64: + m_ptr = std::make_shared(iss); + break; + case BSER_REAL: + m_ptr = std::make_shared(iss); + break; + case BSER_BOOL_TRUE: + iss.ignore(1); + m_ptr = std::make_shared(true); + break; + case BSER_BOOL_FALSE: + iss.ignore(1); + m_ptr = std::make_shared(false); + break; + case BSER_NULL: + iss.ignore(1); + m_ptr = std::make_shared(); + break; + case BSER_TEMPLATE: + m_ptr = decodeTemplate(iss); + break; + default: + throw std::runtime_error("unknown BSER type"); + } +} + +BSER::BSER() : m_ptr(std::make_shared()) {} +BSER::BSER(BSER::Array value) : m_ptr(std::make_shared(value)) {} +BSER::BSER(BSER::Object value) : m_ptr(std::make_shared(value)) {} +BSER::BSER(const char *value) : m_ptr(std::make_shared(value)) {} +BSER::BSER(std::string value) : m_ptr(std::make_shared(value)) {} +BSER::BSER(int64_t value) : m_ptr(std::make_shared(value)) {} +BSER::BSER(double value) : m_ptr(std::make_shared(value)) {} +BSER::BSER(bool value) : m_ptr(std::make_shared(value)) {} + +BSER::Array BSER::arrayValue() { return m_ptr->arrayValue(); } +BSER::Object BSER::objectValue() { return m_ptr->objectValue(); } +std::string BSER::stringValue() { return m_ptr->stringValue(); } +int64_t BSER::intValue() { return m_ptr->intValue(); } +double BSER::doubleValue() { return m_ptr->doubleValue(); } +bool BSER::boolValue() { return m_ptr->boolValue(); } +void BSER::encode(std::ostream &oss) { + m_ptr->encode(oss); +} + +int64_t BSER::decodeLength(std::istream &iss) { + char pdu[2]; + if (!iss.read(pdu, 2) || pdu[0] != 0 || pdu[1] != 1) { + throw std::runtime_error("Invalid BSER"); + } + + return BSERInteger(iss).intValue(); +} + +std::string BSER::encode() { + std::ostringstream oss(std::ios_base::binary); + encode(oss); + + std::ostringstream res(std::ios_base::binary); + res.write("\x00\x01", 2); + + BSERInteger(oss.str().size()).encode(res); + res << oss.str(); + return res.str(); +} diff --git a/node_modules/@parcel/watcher/src/watchman/BSER.hh b/node_modules/@parcel/watcher/src/watchman/BSER.hh new file mode 100644 index 0000000000..6bd202542b --- /dev/null +++ b/node_modules/@parcel/watcher/src/watchman/BSER.hh @@ -0,0 +1,69 @@ +#ifndef BSER_H +#define BSER_H + +#include +#include +#include +#include +#include + +enum BSERType { + BSER_ARRAY = 0x00, + BSER_OBJECT = 0x01, + BSER_STRING = 0x02, + BSER_INT8 = 0x03, + BSER_INT16 = 0x04, + BSER_INT32 = 0x05, + BSER_INT64 = 0x06, + BSER_REAL = 0x07, + BSER_BOOL_TRUE = 0x08, + BSER_BOOL_FALSE = 0x09, + BSER_NULL = 0x0a, + BSER_TEMPLATE = 0x0b +}; + +class BSERValue; + +class BSER { +public: + typedef std::vector Array; + typedef std::unordered_map Object; + + BSER(); + BSER(BSER::Array value); + BSER(BSER::Object value); + BSER(std::string value); + BSER(const char *value); + BSER(int64_t value); + BSER(double value); + BSER(bool value); + BSER(std::istream &iss); + + BSER::Array arrayValue(); + BSER::Object objectValue(); + std::string stringValue(); + int64_t intValue(); + double doubleValue(); + bool boolValue(); + void encode(std::ostream &oss); + + static int64_t decodeLength(std::istream &iss); + std::string encode(); +private: + std::shared_ptr m_ptr; +}; + +class BSERValue { +protected: + friend class BSER; + virtual BSER::Array arrayValue() { return BSER::Array(); } + virtual BSER::Object objectValue() { return BSER::Object(); } + virtual std::string stringValue() { return std::string(); } + virtual int64_t intValue() { return 0; } + virtual double doubleValue() { return 0; } + virtual bool boolValue() { return false; } + virtual void encode(std::ostream &oss) {} + virtual ~BSERValue() {} +}; + +#endif diff --git a/node_modules/@parcel/watcher/src/watchman/IPC.hh b/node_modules/@parcel/watcher/src/watchman/IPC.hh new file mode 100644 index 0000000000..94aa62fb12 --- /dev/null +++ b/node_modules/@parcel/watcher/src/watchman/IPC.hh @@ -0,0 +1,175 @@ +#ifndef IPC_H +#define IPC_H + +#include +#include + +#ifdef _WIN32 +#include +#include +#else +#include +#include +#include +#endif + +class IPC { +public: + IPC(std::string path) { + mStopped = false; + #ifdef _WIN32 + while (true) { + mPipe = CreateFile( + path.data(), // pipe name + GENERIC_READ | GENERIC_WRITE, // read and write access + 0, // no sharing + NULL, // default security attributes + OPEN_EXISTING, // opens existing pipe + FILE_FLAG_OVERLAPPED, // attributes + NULL // no template file + ); + + if (mPipe != INVALID_HANDLE_VALUE) { + break; + } + + if (GetLastError() != ERROR_PIPE_BUSY) { + throw std::runtime_error("Could not open pipe"); + } + + // Wait for pipe to become available if it is busy + if (!WaitNamedPipe(path.data(), 30000)) { + throw std::runtime_error("Error waiting for pipe"); + } + } + + mReader = CreateEvent(NULL, true, false, NULL); + mWriter = CreateEvent(NULL, true, false, NULL); + #else + struct sockaddr_un addr; + memset(&addr, 0, sizeof(addr)); + addr.sun_family = AF_UNIX; + strncpy(addr.sun_path, path.c_str(), sizeof(addr.sun_path) - 1); + + mSock = socket(AF_UNIX, SOCK_STREAM, 0); + if (connect(mSock, (struct sockaddr *) &addr, sizeof(struct sockaddr_un))) { + throw std::runtime_error("Error connecting to socket"); + } + #endif + } + + ~IPC() { + mStopped = true; + #ifdef _WIN32 + CancelIo(mPipe); + CloseHandle(mPipe); + CloseHandle(mReader); + CloseHandle(mWriter); + #else + shutdown(mSock, SHUT_RDWR); + #endif + } + + void write(std::string buf) { + #ifdef _WIN32 + OVERLAPPED overlapped; + overlapped.hEvent = mWriter; + bool success = WriteFile( + mPipe, // pipe handle + buf.data(), // message + static_cast(buf.size()), // message length + NULL, // bytes written + &overlapped // overlapped + ); + + if (mStopped) { + return; + } + + if (!success) { + if (GetLastError() != ERROR_IO_PENDING) { + throw std::runtime_error("Write error"); + } + } + + DWORD written; + success = GetOverlappedResult(mPipe, &overlapped, &written, true); + if (!success) { + throw std::runtime_error("GetOverlappedResult failed"); + } + + if (written != buf.size()) { + throw std::runtime_error("Wrong number of bytes written"); + } + #else + int r = 0; + for (unsigned int i = 0; i != buf.size(); i += r) { + r = ::write(mSock, &buf[i], buf.size() - i); + if (r == -1) { + if (errno == EAGAIN) { + r = 0; + } else if (mStopped) { + return; + } else { + throw std::runtime_error("Write error"); + } + } + } + #endif + } + + int read(char *buf, size_t len) { + #ifdef _WIN32 + OVERLAPPED overlapped; + overlapped.hEvent = mReader; + bool success = ReadFile( + mPipe, // pipe handle + buf, // buffer to receive reply + static_cast(len), // size of buffer + NULL, // number of bytes read + &overlapped // overlapped + ); + + if (!success && !mStopped) { + if (GetLastError() != ERROR_IO_PENDING) { + throw std::runtime_error("Read error"); + } + } + + DWORD read = 0; + success = GetOverlappedResult(mPipe, &overlapped, &read, true); + if (!success && !mStopped) { + throw std::runtime_error("GetOverlappedResult failed"); + } + + return read; + #else + int r = ::read(mSock, buf, len); + if (r == 0 && !mStopped) { + throw std::runtime_error("Socket ended unexpectedly"); + } + + if (r < 0) { + if (mStopped) { + return 0; + } + + throw std::runtime_error(strerror(errno)); + } + + return r; + #endif + } + +private: + bool mStopped; + #ifdef _WIN32 + HANDLE mPipe; + HANDLE mReader; + HANDLE mWriter; + #else + int mSock; + #endif +}; + +#endif diff --git a/node_modules/@parcel/watcher/src/watchman/WatchmanBackend.cc b/node_modules/@parcel/watcher/src/watchman/WatchmanBackend.cc new file mode 100644 index 0000000000..a442f160b9 --- /dev/null +++ b/node_modules/@parcel/watcher/src/watchman/WatchmanBackend.cc @@ -0,0 +1,342 @@ +#include +#include +#include +#include +#include "../DirTree.hh" +#include "../Event.hh" +#include "./BSER.hh" +#include "./WatchmanBackend.hh" + +#ifdef _WIN32 +#include "../windows/win_utils.hh" +#define S_ISDIR(mode) ((mode & _S_IFDIR) == _S_IFDIR) +#define popen _popen +#define pclose _pclose +#else +#include +#define normalizePath(dir) dir +#endif + +template +BSER readBSER(T &&do_read) { + std::stringstream oss; + char buffer[256]; + size_t r; + int64_t len = -1; + do { + // Start by reading a minimal amount of data in order to decode the length. + // After that, attempt to read the remaining length, up to the buffer size. + r = do_read(buffer, len == -1 ? 20 : (len < 256 ? len : 256)); + oss << std::string(buffer, r); + + if (len == -1) { + uint64_t l = BSER::decodeLength(oss); + len = l + oss.tellg(); + } + + len -= r; + } while (len > 0); + + return BSER(oss); +} + +std::string getSockPath() { + auto var = getenv("WATCHMAN_SOCK"); + if (var && *var) { + return std::string(var); + } + +#ifdef _WIN32 + FILE *fp = popen("watchman --output-encoding=bser get-sockname", "r"); +#else + FILE *fp = popen("watchman --output-encoding=bser get-sockname 2>/dev/null", "r"); +#endif + if (fp == NULL || errno == ECHILD) { + throw std::runtime_error("Failed to execute watchman"); + } + + BSER b = readBSER([fp] (char *buf, size_t len) { + return fread(buf, sizeof(char), len, fp); + }); + + pclose(fp); + + auto objValue = b.objectValue(); + auto foundSockname = objValue.find("sockname"); + if (foundSockname == objValue.end()) { + throw std::runtime_error("sockname not found"); + } + return foundSockname->second.stringValue(); +} + +std::unique_ptr watchmanConnect() { + std::string path = getSockPath(); + return std::unique_ptr(new IPC(path)); +} + +BSER watchmanRead(IPC *ipc) { + return readBSER([ipc] (char *buf, size_t len) { + return ipc->read(buf, len); + }); +} + +BSER::Object WatchmanBackend::watchmanRequest(BSER b) { + std::string cmd = b.encode(); + mIPC->write(cmd); + mRequestSignal.notify(); + + mResponseSignal.wait(); + mResponseSignal.reset(); + + if (!mError.empty()) { + std::runtime_error err = std::runtime_error(mError); + mError = std::string(); + throw err; + } + + return mResponse; +} + +void WatchmanBackend::watchmanWatch(std::string dir) { + std::vector cmd; + cmd.push_back("watch"); + cmd.push_back(normalizePath(dir)); + watchmanRequest(cmd); +} + +bool WatchmanBackend::checkAvailable() { + try { + watchmanConnect(); + return true; + } catch (std::exception&) { + return false; + } +} + +void handleFiles(WatcherRef watcher, BSER::Object obj) { + auto found = obj.find("files"); + if (found == obj.end()) { + throw WatcherError("Error reading changes from watchman", watcher); + } + + auto files = found->second.arrayValue(); + for (auto it = files.begin(); it != files.end(); it++) { + auto file = it->objectValue(); + auto name = file.find("name")->second.stringValue(); + #ifdef _WIN32 + std::replace(name.begin(), name.end(), '/', '\\'); + #endif + auto mode = file.find("mode")->second.intValue(); + auto isNew = file.find("new")->second.boolValue(); + auto exists = file.find("exists")->second.boolValue(); + auto path = watcher->mDir + DIR_SEP + name; + if (watcher->isIgnored(path)) { + continue; + } + + if (isNew && exists) { + watcher->mEvents.create(path); + } else if (exists && !S_ISDIR(mode)) { + watcher->mEvents.update(path); + } else if (!isNew && !exists) { + watcher->mEvents.remove(path); + } + } +} + +void WatchmanBackend::handleSubscription(BSER::Object obj) { + std::unique_lock lock(mMutex); + auto subscription = obj.find("subscription")->second.stringValue(); + auto it = mSubscriptions.find(subscription); + if (it == mSubscriptions.end()) { + return; + } + + auto watcher = it->second; + try { + handleFiles(watcher, obj); + watcher->notify(); + } catch (WatcherError &err) { + handleWatcherError(err); + } +} + +void WatchmanBackend::start() { + mIPC = watchmanConnect(); + notifyStarted(); + + while (true) { + // If there are no subscriptions we are reading, wait for a request. + if (mSubscriptions.size() == 0) { + mRequestSignal.wait(); + mRequestSignal.reset(); + } + + // Break out of loop if we are stopped. + if (mStopped) { + break; + } + + // Attempt to read from the socket. + // If there is an error and we are stopped, break. + BSER b; + try { + b = watchmanRead(&*mIPC); + } catch (std::exception &err) { + if (mStopped) { + break; + } else if (mResponseSignal.isWaiting()) { + mError = err.what(); + mResponseSignal.notify(); + } else { + // Throwing causes the backend to be destroyed, but we never reach the code below to notify the signal + mEndedSignal.notify(); + throw; + } + } + + auto obj = b.objectValue(); + auto error = obj.find("error"); + if (error != obj.end()) { + mError = error->second.stringValue(); + mResponseSignal.notify(); + continue; + } + + // If this message is for a subscription, handle it, otherwise notify the request. + auto subscription = obj.find("subscription"); + if (subscription != obj.end()) { + handleSubscription(obj); + } else { + mResponse = obj; + mResponseSignal.notify(); + } + } + + mEndedSignal.notify(); +} + +WatchmanBackend::~WatchmanBackend() { + // Mark the watcher as stopped, close the socket, and trigger the lock. + // This will cause the read loop to be broken and the thread to exit. + mStopped = true; + mIPC.reset(); + mRequestSignal.notify(); + + // If not ended yet, wait. + mEndedSignal.wait(); +} + +std::string WatchmanBackend::clock(WatcherRef watcher) { + BSER::Array cmd; + cmd.push_back("clock"); + cmd.push_back(normalizePath(watcher->mDir)); + + BSER::Object obj = watchmanRequest(cmd); + auto found = obj.find("clock"); + if (found == obj.end()) { + throw WatcherError("Error reading clock from watchman", watcher); + } + + return found->second.stringValue(); +} + +void WatchmanBackend::writeSnapshot(WatcherRef watcher, std::string *snapshotPath) { + std::unique_lock lock(mMutex); + watchmanWatch(watcher->mDir); + + std::ofstream ofs(*snapshotPath); + ofs << clock(watcher); +} + +void WatchmanBackend::getEventsSince(WatcherRef watcher, std::string *snapshotPath) { + std::unique_lock lock(mMutex); + std::ifstream ifs(*snapshotPath); + if (ifs.fail()) { + return; + } + + watchmanWatch(watcher->mDir); + + std::string clock; + ifs >> clock; + + BSER::Array cmd; + cmd.push_back("since"); + cmd.push_back(normalizePath(watcher->mDir)); + cmd.push_back(clock); + + BSER::Object obj = watchmanRequest(cmd); + handleFiles(watcher, obj); +} + +std::string getId(WatcherRef watcher) { + std::ostringstream id; + id << "parcel-"; + id << static_cast(watcher.get()); + return id.str(); +} + +// This function is called by Backend::watch which takes a lock on mMutex +void WatchmanBackend::subscribe(WatcherRef watcher) { + watchmanWatch(watcher->mDir); + + std::string id = getId(watcher); + BSER::Array cmd; + cmd.push_back("subscribe"); + cmd.push_back(normalizePath(watcher->mDir)); + cmd.push_back(id); + + BSER::Array fields; + fields.push_back("name"); + fields.push_back("mode"); + fields.push_back("exists"); + fields.push_back("new"); + + BSER::Object opts; + opts.emplace("fields", fields); + opts.emplace("since", clock(watcher)); + + if (watcher->mIgnorePaths.size() > 0) { + BSER::Array ignore; + BSER::Array anyOf; + anyOf.push_back("anyof"); + + for (auto it = watcher->mIgnorePaths.begin(); it != watcher->mIgnorePaths.end(); it++) { + std::string pathStart = watcher->mDir + DIR_SEP; + if (it->rfind(pathStart, 0) == 0) { + auto relative = it->substr(pathStart.size()); + BSER::Array dirname; + dirname.push_back("dirname"); + dirname.push_back(relative); + anyOf.push_back(dirname); + } + } + + ignore.push_back("not"); + ignore.push_back(anyOf); + + opts.emplace("expression", ignore); + } + + cmd.push_back(opts); + watchmanRequest(cmd); + + mSubscriptions.emplace(id, watcher); + mRequestSignal.notify(); +} + +// This function is called by Backend::unwatch which takes a lock on mMutex +void WatchmanBackend::unsubscribe(WatcherRef watcher) { + std::string id = getId(watcher); + auto erased = mSubscriptions.erase(id); + + if (erased) { + BSER::Array cmd; + cmd.push_back("unsubscribe"); + cmd.push_back(normalizePath(watcher->mDir)); + cmd.push_back(id); + + watchmanRequest(cmd); + } +} diff --git a/node_modules/@parcel/watcher/src/watchman/WatchmanBackend.hh b/node_modules/@parcel/watcher/src/watchman/WatchmanBackend.hh new file mode 100644 index 0000000000..699cded9c8 --- /dev/null +++ b/node_modules/@parcel/watcher/src/watchman/WatchmanBackend.hh @@ -0,0 +1,35 @@ +#ifndef WATCHMAN_H +#define WATCHMAN_H + +#include "../Backend.hh" +#include "./BSER.hh" +#include "../Signal.hh" +#include "./IPC.hh" + +class WatchmanBackend : public Backend { +public: + static bool checkAvailable(); + void start() override; + WatchmanBackend() : mStopped(false) {}; + ~WatchmanBackend(); + void writeSnapshot(WatcherRef watcher, std::string *snapshotPath) override; + void getEventsSince(WatcherRef watcher, std::string *snapshotPath) override; + void subscribe(WatcherRef watcher) override; + void unsubscribe(WatcherRef watcher) override; +private: + std::unique_ptr mIPC; + Signal mRequestSignal; + Signal mResponseSignal; + BSER::Object mResponse; + std::string mError; + std::unordered_map mSubscriptions; + bool mStopped; + Signal mEndedSignal; + + std::string clock(WatcherRef watcher); + void watchmanWatch(std::string dir); + BSER::Object watchmanRequest(BSER cmd); + void handleSubscription(BSER::Object obj); +}; + +#endif diff --git a/node_modules/@parcel/watcher/src/windows/WindowsBackend.cc b/node_modules/@parcel/watcher/src/windows/WindowsBackend.cc new file mode 100644 index 0000000000..eabce1e06d --- /dev/null +++ b/node_modules/@parcel/watcher/src/windows/WindowsBackend.cc @@ -0,0 +1,282 @@ +#include +#include +#include "../DirTree.hh" +#include "../shared/BruteForceBackend.hh" +#include "./WindowsBackend.hh" +#include "./win_utils.hh" + +#define DEFAULT_BUF_SIZE 1024 * 1024 +#define NETWORK_BUF_SIZE 64 * 1024 +#define CONVERT_TIME(ft) ULARGE_INTEGER{ft.dwLowDateTime, ft.dwHighDateTime}.QuadPart + +void BruteForceBackend::readTree(WatcherRef watcher, std::shared_ptr tree) { + std::stack directories; + + directories.push(watcher->mDir); + + while (!directories.empty()) { + HANDLE hFind = INVALID_HANDLE_VALUE; + + std::string path = directories.top(); + std::string spec = path + "\\*"; + directories.pop(); + + WIN32_FIND_DATA ffd; + hFind = FindFirstFile(spec.c_str(), &ffd); + + if (hFind == INVALID_HANDLE_VALUE) { + if (path == watcher->mDir) { + FindClose(hFind); + throw WatcherError("Error opening directory", watcher); + } + + tree->remove(path); + continue; + } + + do { + if (strcmp(ffd.cFileName, ".") != 0 && strcmp(ffd.cFileName, "..") != 0) { + std::string fullPath = path + "\\" + ffd.cFileName; + if (watcher->isIgnored(fullPath)) { + continue; + } + + tree->add(fullPath, CONVERT_TIME(ffd.ftLastWriteTime), ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY); + if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { + directories.push(fullPath); + } + } + } while (FindNextFile(hFind, &ffd) != 0); + + FindClose(hFind); + } +} + +void WindowsBackend::start() { + mRunning = true; + notifyStarted(); + + while (mRunning) { + SleepEx(INFINITE, true); + } +} + +WindowsBackend::~WindowsBackend() { + // Mark as stopped, and queue a noop function in the thread to break the loop + mRunning = false; + QueueUserAPC([](__in ULONG_PTR) {}, mThread.native_handle(), (ULONG_PTR)this); +} + +class Subscription: public WatcherState { +public: + Subscription(WindowsBackend *backend, WatcherRef watcher, std::shared_ptr tree) { + mRunning = true; + mBackend = backend; + mWatcher = watcher; + mTree = tree; + ZeroMemory(&mOverlapped, sizeof(OVERLAPPED)); + mOverlapped.hEvent = this; + mReadBuffer.resize(DEFAULT_BUF_SIZE); + mWriteBuffer.resize(DEFAULT_BUF_SIZE); + + mDirectoryHandle = CreateFileW( + utf8ToUtf16(watcher->mDir).data(), + FILE_LIST_DIRECTORY, + FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, + NULL, + OPEN_EXISTING, + FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OVERLAPPED, + NULL + ); + + if (mDirectoryHandle == INVALID_HANDLE_VALUE) { + throw WatcherError("Invalid handle", mWatcher); + } + + // Ensure that the path is a directory + BY_HANDLE_FILE_INFORMATION info; + bool success = GetFileInformationByHandle( + mDirectoryHandle, + &info + ); + + if (!success) { + throw WatcherError("Could not get file information", mWatcher); + } + + if (!(info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { + throw WatcherError("Not a directory", mWatcher); + } + } + + virtual ~Subscription() { + stop(); + } + + void run() { + try { + poll(); + } catch (WatcherError &err) { + mBackend->handleWatcherError(err); + } + } + + void stop() { + if (mRunning) { + mRunning = false; + CancelIo(mDirectoryHandle); + CloseHandle(mDirectoryHandle); + } + } + + void poll() { + if (!mRunning) { + return; + } + + // Asynchronously wait for changes. + int success = ReadDirectoryChangesW( + mDirectoryHandle, + mWriteBuffer.data(), + static_cast(mWriteBuffer.size()), + TRUE, // recursive + FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_DIR_NAME | FILE_NOTIFY_CHANGE_ATTRIBUTES + | FILE_NOTIFY_CHANGE_SIZE | FILE_NOTIFY_CHANGE_LAST_WRITE, + NULL, + &mOverlapped, + [](DWORD errorCode, DWORD numBytes, LPOVERLAPPED overlapped) { + auto subscription = reinterpret_cast(overlapped->hEvent); + try { + subscription->processEvents(errorCode); + } catch (WatcherError &err) { + subscription->mBackend->handleWatcherError(err); + } + } + ); + + if (!success) { + throw WatcherError("Failed to read changes", mWatcher); + } + } + + void processEvents(DWORD errorCode) { + if (!mRunning) { + return; + } + + switch (errorCode) { + case ERROR_OPERATION_ABORTED: + return; + case ERROR_INVALID_PARAMETER: + // resize buffers to network size (64kb), and try again + mReadBuffer.resize(NETWORK_BUF_SIZE); + mWriteBuffer.resize(NETWORK_BUF_SIZE); + poll(); + return; + case ERROR_NOTIFY_ENUM_DIR: + throw WatcherError("Buffer overflow. Some events may have been lost.", mWatcher); + case ERROR_ACCESS_DENIED: { + // This can happen if the watched directory is deleted. Check if that is the case, + // and if so emit a delete event. Otherwise, fall through to default error case. + DWORD attrs = GetFileAttributesW(utf8ToUtf16(mWatcher->mDir).data()); + bool isDir = attrs != INVALID_FILE_ATTRIBUTES && (attrs & FILE_ATTRIBUTE_DIRECTORY); + if (!isDir) { + mWatcher->mEvents.remove(mWatcher->mDir); + mTree->remove(mWatcher->mDir); + mWatcher->notify(); + stop(); + return; + } + } + default: + if (errorCode != ERROR_SUCCESS) { + throw WatcherError("Unknown error", mWatcher); + } + } + + // Swap read and write buffers, and poll again + std::swap(mWriteBuffer, mReadBuffer); + poll(); + + // Read change events + BYTE *base = mReadBuffer.data(); + while (true) { + PFILE_NOTIFY_INFORMATION info = (PFILE_NOTIFY_INFORMATION)base; + processEvent(info); + + if (info->NextEntryOffset == 0) { + break; + } + + base += info->NextEntryOffset; + } + + mWatcher->notify(); + } + + void processEvent(PFILE_NOTIFY_INFORMATION info) { + std::string path = mWatcher->mDir + "\\" + utf16ToUtf8(info->FileName, info->FileNameLength / sizeof(WCHAR)); + if (mWatcher->isIgnored(path)) { + return; + } + + switch (info->Action) { + case FILE_ACTION_ADDED: + case FILE_ACTION_RENAMED_NEW_NAME: { + WIN32_FILE_ATTRIBUTE_DATA data; + if (GetFileAttributesExW(utf8ToUtf16(path).data(), GetFileExInfoStandard, &data)) { + mWatcher->mEvents.create(path); + mTree->add(path, CONVERT_TIME(data.ftLastWriteTime), data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY); + } + break; + } + case FILE_ACTION_MODIFIED: { + WIN32_FILE_ATTRIBUTE_DATA data; + if (GetFileAttributesExW(utf8ToUtf16(path).data(), GetFileExInfoStandard, &data)) { + mTree->update(path, CONVERT_TIME(data.ftLastWriteTime)); + if (!(data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { + mWatcher->mEvents.update(path); + } + } + break; + } + case FILE_ACTION_REMOVED: + case FILE_ACTION_RENAMED_OLD_NAME: + mWatcher->mEvents.remove(path); + mTree->remove(path); + break; + } + } + +private: + WindowsBackend *mBackend; + std::shared_ptr mWatcher; + std::shared_ptr mTree; + bool mRunning; + HANDLE mDirectoryHandle; + std::vector mReadBuffer; + std::vector mWriteBuffer; + OVERLAPPED mOverlapped; +}; + +// This function is called by Backend::watch which takes a lock on mMutex +void WindowsBackend::subscribe(WatcherRef watcher) { + // Create a subscription for this watcher + auto sub = std::make_shared(this, watcher, getTree(watcher, false)); + watcher->state = sub; + + // Queue polling for this subscription in the correct thread. + bool success = QueueUserAPC([](__in ULONG_PTR ptr) { + Subscription *sub = (Subscription *)ptr; + sub->run(); + }, mThread.native_handle(), (ULONG_PTR)sub.get()); + + if (!success) { + throw std::runtime_error("Unable to queue APC"); + } +} + +// This function is called by Backend::unwatch which takes a lock on mMutex +void WindowsBackend::unsubscribe(WatcherRef watcher) { + watcher->state = nullptr; +} diff --git a/node_modules/@parcel/watcher/src/windows/WindowsBackend.hh b/node_modules/@parcel/watcher/src/windows/WindowsBackend.hh new file mode 100644 index 0000000000..d679782827 --- /dev/null +++ b/node_modules/@parcel/watcher/src/windows/WindowsBackend.hh @@ -0,0 +1,18 @@ +#ifndef WINDOWS_H +#define WINDOWS_H + +#include +#include +#include "../shared/BruteForceBackend.hh" + +class WindowsBackend : public BruteForceBackend { +public: + void start() override; + ~WindowsBackend(); + void subscribe(WatcherRef watcher) override; + void unsubscribe(WatcherRef watcher) override; +private: + bool mRunning; +}; + +#endif diff --git a/node_modules/@parcel/watcher/src/windows/win_utils.cc b/node_modules/@parcel/watcher/src/windows/win_utils.cc new file mode 100644 index 0000000000..62a1e59a32 --- /dev/null +++ b/node_modules/@parcel/watcher/src/windows/win_utils.cc @@ -0,0 +1,44 @@ +#include "./win_utils.hh" + +std::wstring utf8ToUtf16(std::string input) { + unsigned int len = MultiByteToWideChar(CP_UTF8, 0, input.c_str(), -1, NULL, 0); + WCHAR *output = new WCHAR[len]; + MultiByteToWideChar(CP_UTF8, 0, input.c_str(), -1, output, len); + std::wstring res(output); + delete[] output; + return res; +} + +std::string utf16ToUtf8(const WCHAR *input, DWORD length) { + unsigned int len = WideCharToMultiByte(CP_UTF8, 0, input, length, NULL, 0, NULL, NULL); + char *output = new char[len + 1]; + WideCharToMultiByte(CP_UTF8, 0, input, length, output, len, NULL, NULL); + output[len] = '\0'; + std::string res(output); + delete[] output; + return res; +} + +std::string normalizePath(std::string path) { + // Prevent truncation to MAX_PATH characters by adding the \\?\ prefix + std::wstring p = utf8ToUtf16("\\\\?\\" + path); + + // Get the required length for the output + DWORD len = GetLongPathNameW(p.data(), NULL, 0); + if (!len) { + return path; + } + + // Allocate output array and get long path + WCHAR *output = new WCHAR[len]; + len = GetLongPathNameW(p.data(), output, len); + if (!len) { + delete[] output; + return path; + } + + // Convert back to utf8 + std::string res = utf16ToUtf8(output + 4, len - 4); + delete[] output; + return res; +} diff --git a/node_modules/@parcel/watcher/src/windows/win_utils.hh b/node_modules/@parcel/watcher/src/windows/win_utils.hh new file mode 100644 index 0000000000..9178d1b29e --- /dev/null +++ b/node_modules/@parcel/watcher/src/windows/win_utils.hh @@ -0,0 +1,11 @@ +#ifndef WIN_UTILS_H +#define WIN_UTILS_H + +#include +#include + +std::wstring utf8ToUtf16(std::string input); +std::string utf16ToUtf8(const WCHAR *input, DWORD length); +std::string normalizePath(std::string path); + +#endif diff --git a/node_modules/@parcel/watcher/wrapper.js b/node_modules/@parcel/watcher/wrapper.js new file mode 100644 index 0000000000..3b47518468 --- /dev/null +++ b/node_modules/@parcel/watcher/wrapper.js @@ -0,0 +1,74 @@ +const path = require('path'); +const picomatch = require('picomatch'); +const isGlob = require('is-glob'); + +function normalizeOptions(dir, opts = {}) { + const { ignore, ...rest } = opts; + + if (Array.isArray(ignore)) { + opts = { ...rest }; + + for (const value of ignore) { + if (isGlob(value)) { + if (!opts.ignoreGlobs) { + opts.ignoreGlobs = []; + } + + const regex = picomatch.makeRe(value, { + // We set `dot: true` to workaround an issue with the + // regular expression on Linux where the resulting + // negative lookahead `(?!(\\/|^)` was never matching + // in some cases. See also https://bit.ly/3UZlQDm + dot: true, + windows: process.platform === 'win32', + }); + opts.ignoreGlobs.push(regex.source); + } else { + if (!opts.ignorePaths) { + opts.ignorePaths = []; + } + + opts.ignorePaths.push(path.resolve(dir, value)); + } + } + } + + return opts; +} + +exports.createWrapper = (binding) => { + return { + writeSnapshot(dir, snapshot, opts) { + return binding.writeSnapshot( + path.resolve(dir), + path.resolve(snapshot), + normalizeOptions(dir, opts), + ); + }, + getEventsSince(dir, snapshot, opts) { + return binding.getEventsSince( + path.resolve(dir), + path.resolve(snapshot), + normalizeOptions(dir, opts), + ); + }, + async subscribe(dir, fn, opts) { + dir = path.resolve(dir); + opts = normalizeOptions(dir, opts); + await binding.subscribe(dir, fn, opts); + + return { + unsubscribe() { + return binding.unsubscribe(dir, fn, opts); + }, + }; + }, + unsubscribe(dir, fn, opts) { + return binding.unsubscribe( + path.resolve(dir), + fn, + normalizeOptions(dir, opts), + ); + } + }; +}; diff --git a/node_modules/@tailwindcss/cli/LICENSE b/node_modules/@tailwindcss/cli/LICENSE new file mode 100644 index 0000000000..d6a8229073 --- /dev/null +++ b/node_modules/@tailwindcss/cli/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Tailwind Labs, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/@tailwindcss/cli/README.md b/node_modules/@tailwindcss/cli/README.md new file mode 100644 index 0000000000..5f532607d0 --- /dev/null +++ b/node_modules/@tailwindcss/cli/README.md @@ -0,0 +1,36 @@ +

+ + + + + Tailwind CSS + + +

+ +

+ A utility-first CSS framework for rapidly building custom user interfaces. +

+ +

+ Build Status + Total Downloads + Latest Release + License +

+ +--- + +## Documentation + +For full documentation, visit [tailwindcss.com](https://tailwindcss.com). + +## Community + +For help, discussion about best practices, or feature ideas: + +[Discuss Tailwind CSS on GitHub](https://github.com/tailwindlabs/tailwindcss/discussions) + +## Contributing + +If you're interested in contributing to Tailwind CSS, please read our [contributing docs](https://github.com/tailwindlabs/tailwindcss/blob/main/.github/CONTRIBUTING.md) **before submitting a pull request**. diff --git a/node_modules/@tailwindcss/cli/dist/index.mjs b/node_modules/@tailwindcss/cli/dist/index.mjs new file mode 100755 index 0000000000..0811ab4ce1 --- /dev/null +++ b/node_modules/@tailwindcss/cli/dist/index.mjs @@ -0,0 +1,24 @@ +#!/usr/bin/env node +var he=(e,t)=>(t=Symbol[e])?t:Symbol.for("Symbol."+e),ge=e=>{throw TypeError(e)};var te=(e,t,n)=>{if(t!=null){typeof t!="object"&&typeof t!="function"&&ge("Object expected");var i,o;n&&(i=t[he("asyncDispose")]),i===void 0&&(i=t[he("dispose")],n&&(o=i)),typeof i!="function"&&ge("Object not disposable"),o&&(i=function(){try{o.call(this)}catch(r){return Promise.reject(r)}}),e.push([n,i,t])}else n&&e.push([n]);return t},ne=(e,t,n)=>{var i=typeof SuppressedError=="function"?SuppressedError:function(a,s,l,c){return c=Error(l),c.name="SuppressedError",c.error=a,c.suppressed=s,c},o=a=>t=n?new i(a,t,"An error was suppressed during disposal"):(n=!0,a),r=a=>{for(;a=e.pop();)try{var s=a[1]&&a[1].call(a[2]);if(a[0])return Promise.resolve(s).then(r,l=>(o(l),r()))}catch(l){o(l)}if(n)throw t};return r()};import De from"mri";function v(e,t=process.argv.slice(2)){for(let[o,r]of t.entries())r==="-"&&(t[o]="__IO_DEFAULT_VALUE__");let n=De(t);for(let o in n){let r=n[o];o!=="_"&&Array.isArray(r)&&(r=r[r.length-1]),r==="__IO_DEFAULT_VALUE__"&&(r="-"),n[o]=r}let i={_:n._};for(let[o,{type:r,alias:a,default:s=r==="boolean"?!1:null}]of Object.entries(e)){if(i[o]=s,a){let l=a.slice(1);n[l]!==void 0&&(i[o]=we(n[l],r))}{let l=o.slice(2);n[l]!==void 0&&(i[o]=we(n[l],r))}}return i}function we(e,t){switch(t){case"string":return z(e);case"boolean":return j(e);case"number":return U(e);case"boolean | string":return j(e)??z(e);case"number | string":return U(e)??z(e);case"boolean | number":return j(e)??U(e);case"boolean | number | string":return j(e)??U(e)??z(e);default:throw new Error(`Unhandled type: ${t}`)}}function j(e){if(e===!0||e===!1)return e;if(e==="true")return!0;if(e==="false")return!1}function U(e){if(typeof e=="number")return e;{let t=Number(e);if(!Number.isNaN(t))return t}}function z(e){return`${e}`}import Qe from"@parcel/watcher";import{compile as He,env as Ze,Instrumentation as xe,optimize as Xe,toSourceMap as Y}from"@tailwindcss/node";import{clearRequireCache as et}from"@tailwindcss/node/require-cache";import{Scanner as tt}from"@tailwindcss/oxide";import{existsSync as nt}from"fs";import ae from"fs/promises";import T from"path";var k=class{#e=new Set([]);queueMacrotask(t){let n=setTimeout(t,0);return this.add(()=>{clearTimeout(n)})}add(t){return this.#e.add(t),()=>{this.#e.delete(t),t()}}async dispose(){for(let t of this.#e)await t();this.#e.clear()}};import Ye from"fs";import Ce from"path";import{stripVTControlCharacters as Ve}from"util";import w from"picocolors";import be from"enhanced-resolve";import We from"fs";import{createRequire as Ge}from"module";var Ke=Ge(import.meta.url).resolve;function ye(e){if(typeof globalThis.__tw_resolve=="function"){let t=globalThis.__tw_resolve(e);if(t)return t}return Ke(e)}var $t=be.ResolverFactory.createResolver({fileSystem:new be.CachedInputFileSystem(We,4e3),useSyncFileSystemCalls:!0,extensions:[".css"],mainFields:["style"],conditionNames:["style"]});function Se(e){let t=typeof e=="number"?BigInt(e):e;return t<1000n?`${t}ns`:(t/=1000n,t<1000n?`${t}\xB5s`:(t/=1000n,t<1000n?`${t}ms`:(t/=1000n,t<60n?`${t}s`:(t/=60n,t<60n?`${t}m`:(t/=60n,t<24n?`${t}h`:(t/=24n,`${t}d`))))))}var I={indent:2};function M(){return`${w.italic(w.bold(w.blue("\u2248")))} tailwindcss ${w.blue(`v${qe()}`)}`}function A(e){return`${w.dim(w.blue("`"))}${w.blue(e)}${w.dim(w.blue("`"))}`}function D(e,t=process.cwd(),{preferAbsoluteIfShorter:n=!0}={}){let i=Ce.relative(t,e);return i.startsWith("..")||(i=`.${Ce.sep}${i}`),n&&i.length>e.length?e:i}function ie(e,t){let n=e.split(" "),i=[],o="",r=0;for(let a of n){let s=Ve(a).length;r+s+1>t&&(i.push(o),o="",r=0),o+=(r?" ":"")+a,r+=s+(r?1:0)}return r&&i.push(o),i}function W(e){let t=Se(e);return e<=50*1e6?w.green(t):e<=300*1e6?w.blue(t):e<=1e3*1e6?w.yellow(t):w.red(t)}function P(e,t=0){return`${" ".repeat(t+I.indent)}${e}`}function _(e=""){process.stderr.write(`${e} +`)}function G(e=""){process.stdout.write(`${e} +`)}function qe(){if(typeof globalThis.__tw_version=="string")return globalThis.__tw_version;let{version:e}=JSON.parse(Ye.readFileSync(ye("tailwindcss/package.json"),"utf-8"));return e}import K from"fs/promises";import Je from"path";function re(){return new Promise((e,t)=>{let n="";process.stdin.on("data",i=>{n+=i}),process.stdin.on("end",()=>e(n)),process.stdin.on("error",i=>t(i))})}async function se(e,t){if(!await K.stat(e).then(i=>i.isCharacterDevice()||i.isFIFO()).catch(()=>!1))try{if(await K.readFile(e,"utf8")===t)return}catch{}await K.mkdir(Je.dirname(e),{recursive:!0}),await K.writeFile(e,t,"utf8")}var _e=String.raw,u=Ze.DEBUG;function $(){return{"--input":{type:"string",description:"Input file",alias:"-i"},"--output":{type:"string",description:"Output file",alias:"-o",default:"-"},"--watch":{type:"boolean | string",description:"Watch for changes and rebuild as needed, and use `always` to keep watching when stdin is closed",alias:"-w",values:["always"]},"--minify":{type:"boolean",description:"Optimize and minify the output",alias:"-m"},"--optimize":{type:"boolean",description:"Optimize the output without minifying"},"--cwd":{type:"string",description:"The current working directory",default:"."},"--map":{type:"boolean | string",description:"Generate a source map",default:!1}}}async function oe(e){try{return await e()}catch(t){t instanceof Error&&_(t.toString()),process.exit(1)}}async function le(e){var L=[];try{_(M());_();let t=te(L,new xe);u&&t.start("[@tailwindcss/cli] (initial build)");let n=T.resolve(e["--cwd"]);e["--output"]&&e["--output"]!=="-"&&(e["--output"]=T.resolve(n,e["--output"]));e["--input"]&&e["--input"]!=="-"&&(e["--input"]=T.resolve(n,e["--input"]),nt(e["--input"])||(_(`Specified input file ${A(D(e["--input"]))} does not exist.`),process.exit(1)));e["--input"]===e["--output"]&&e["--input"]!=="-"&&(_(`Specified input file ${A(D(e["--input"]))} and output file ${A(D(e["--output"]))} are identical.`),process.exit(1));e["--map"]==="-"&&(_("Use --map without a value to inline the source map"),process.exit(1));e["--map"]&&e["--map"]!==!0&&(e["--map"]=T.resolve(n,e["--map"]));let i=process.hrtime.bigint();let o=e["--input"]?e["--input"]==="-"?await re():await ae.readFile(e["--input"],"utf-8"):_e` + @import 'tailwindcss'; + `;let r={css:"",optimizedCss:""};async function a(C,g,f,x){let y=C;if(f["--minify"]||f["--optimize"])if(C!==r.css){u&&x.start("Optimize CSS");let E=Xe(C,{file:f["--input"]??"input.css",minify:f["--minify"]??!1,map:g?.raw??void 0});u&&x.end("Optimize CSS"),r.css=C,r.optimizedCss=E.code,E.map&&(g=Y(E.map)),y=E.code}else y=r.optimizedCss;if(g){if(f["--map"]===!0)y+=` +`,y+=g.inline;else if(typeof f["--map"]=="string"){let E=f["--output"]&&f["--output"]!=="-"?T.dirname(T.resolve(f["--output"])):process.cwd(),Q=T.resolve(f["--map"]),m=T.relative(E,Q);y+=` +`,y+=g.comment(m),u&&x.start("Write source map"),await se(f["--map"],g.raw),u&&x.end("Write source map")}}u&&x.start("Write output"),f["--output"]&&f["--output"]!=="-"?await se(f["--output"],y):G(y),u&&x.end("Write output")}let s=e["--input"]&&e["--input"]!=="-"?T.resolve(e["--input"]):null;let l=s?T.dirname(s):process.cwd();let c=s?[s]:[];async function b(C,g){u&&g.start("Setup compiler");let f=await He(C,{from:e["--output"]?s??"stdin.css":void 0,base:l,onDependency(E){c.push(E)}}),x=(f.root==="none"?[]:f.root===null?[{base:n,pattern:"**/*",negated:!1}]:[{...f.root,negated:!1}]).concat(f.sources),y=new tt({sources:x});return u&&g.end("Setup compiler"),[f,y]}let[p,d]=await oe(()=>b(o,t));if(e["--watch"]){let C=[];C.push(await Te(Ee(d),async function g(f){try{var x=[];try{if(f.length===1&&f[0]===e["--output"])return;let m=te(x,new xe);u&&m.start("[@tailwindcss/cli] (watcher)");let de=process.hrtime.bigint();let fe=[];let H="incremental";let me=c;for(let O of f){if(me.includes(O)){H="full";break}fe.push({file:O,extension:T.extname(O).slice(1)})}let Z="";let X=null;if(H==="full"){let O=e["--input"]?e["--input"]==="-"?await re():await ae.readFile(e["--input"],"utf-8"):_e` + @import 'tailwindcss'; + `;et(me),c=s?[s]:[],[p,d]=await b(O,m),u&&m.start("Scan for candidates");let ee=d.scan();u&&m.end("Scan for candidates"),u&&m.start("Setup new watchers");let Ie=await Te(Ee(d),g);u&&m.end("Setup new watchers"),u&&m.start("Cleanup old watchers"),await Promise.all(C.splice(0).map(Me=>Me())),u&&m.end("Cleanup old watchers"),C.push(Ie),u&&m.start("Build CSS"),Z=p.build(ee),u&&m.end("Build CSS"),e["--map"]&&(u&&m.start("Build Source Map"),X=Y(p.buildSourceMap()),u&&m.end("Build Source Map"))}else if(H==="incremental"){u&&m.start("Scan for candidates");let O=d.scanFiles(fe);if(u&&m.end("Scan for candidates"),O.length<=0){let ee=process.hrtime.bigint();_(`Done in ${W(ee-de)}`);return}u&&m.start("Build CSS"),Z=p.build(O),u&&m.end("Build CSS"),e["--map"]&&(u&&m.start("Build Source Map"),X=Y(p.buildSourceMap()),u&&m.end("Build Source Map"))}await a(Z,X,e,m);let ze=process.hrtime.bigint();_(`Done in ${W(ze-de)}`)}catch(y){var E=y,Q=!0}finally{ne(x,E,Q)}}catch(m){m instanceof Error&&_(m.toString())}})),e["--watch"]!=="always"&&process.stdin.on("end",()=>{Promise.all(C.map(g=>g())).then(()=>process.exit(0),()=>process.exit(1))}),process.stdin.resume()}u&&t.start("Scan for candidates");let h=d.scan();u&&t.end("Scan for candidates");u&&t.start("Build CSS");let S=await oe(()=>p.build(h));u&&t.end("Build CSS");let N=null;e["--map"]&&(u&&t.start("Build Source Map"),N=await oe(()=>Y(p.buildSourceMap())),u&&t.end("Build Source Map"));await a(S,N,e,t);let q=process.hrtime.bigint();_(`Done in ${W(q-i)}`)}catch(J){var je=J,Ue=!0}finally{ne(L,je,Ue)}}async function Te(e,t){e=e.sort((s,l)=>s.length-l.length);let n=[];for(let s=0;s!n.includes(s));let i=new k,o=new Set,r=new k;async function a(){await r.dispose(),r.queueMacrotask(()=>{t(Array.from(o)),o.clear()})}for(let s of e){let{unsubscribe:l}=await Qe.subscribe(s,async(c,b)=>{if(c){console.error(c);return}await Promise.all(b.map(async p=>{if(p.type==="delete")return;let d=null;try{d=await ae.lstat(p.path)}catch{}!d?.isFile()&&!d?.isSymbolicLink()||o.add(p.path)})),await a()});i.add(l)}return async()=>{await i.dispose(),await r.dispose()}}function Ee(e){return[...new Set(e.normalizedSources.flatMap(t=>t.base))]}import{__unstable__loadDesignSystem as Re}from"@tailwindcss/node";import rt from"fs/promises";import ve from"path";import{createInterface as st}from"readline";function ue(e,t){let n=e.length,i=t.length,o=n=48&&a<=57&&s>=48&&s<=57){let l=r,c=r+1,b=r,p=r+1;for(a=e.charCodeAt(c);a>=48&&a<=57;)a=e.charCodeAt(++c);for(s=t.charCodeAt(p);s>=48&&s<=57;)s=t.charCodeAt(++p);let d=e.slice(l,c),h=t.slice(b,p),S=Number(d)-Number(h);if(S)return S;if(dh)return 1;continue}if(a!==s)return a-s}return e.length-t.length}var V=new Uint8Array(256);function Oe(e,t){let n=0,i=[],o=0,r=e.length,a=t.charCodeAt(0);for(let s=0;s0&&l===V[n-1]&&n--;break}}return i.push(e.slice(o)),i}import R from"picocolors";function F({render:e=!0,invalid:t,usage:n,options:i}){let o=process.stdout.columns??80,r=[],a=e?G:(s="")=>void r.push(s);if(a(M()),t&&(a(),a(`${R.dim("Invalid command:")} ${t}`)),n&&n.length>0){a(),a(R.dim("Usage:"));for(let[s,l]of n.entries()){let c=l.slice(0,l.indexOf("[")),b=l.slice(l.indexOf("["));b=b.replace(/\[.*?\]/g,h=>R.dim(h));let d=ie(b,o-I.indent-c.length-1);d.length>1&&s!==0&&a(),a(P(`${c}${d.shift()}`));for(let h of d)a(P(h,c.length))}}if(i){let s=0;for(let{alias:p}of Object.values(i))p&&(s=Math.max(s,p.length));let l=[],c=0;for(let[p,{alias:d,values:h}]of Object.entries(i)){h?.length&&(p+=`[=${h.join(", ")}]`);let S=[d&&`${d.padStart(s)}`,d?p:" ".repeat(s+2)+p].filter(Boolean).join(", ");l.push(S),c=Math.max(c,S.length)}a(),a(R.dim("Options:"));let b=8;for(let{description:p,default:d=null}of Object.values(i)){let h=l.shift(),S=b+(c-h.length),N=2,q=o-h.length-S-N-I.indent,L=ie(d!==null?`${p} ${R.dim(`[default:\u202F${A(`${d}`)}]`)}`:p,q);a(P(`${R.blue(h)} ${R.dim(R.gray("\xB7")).repeat(S)} ${L.shift()}`));for(let J of L)a(P(`${" ".repeat(h.length+S+N)}${J}`))}}if(!e)return r.join(` +`)}var ot=String.raw;function ce(){return"tailwindcss canonicalize [classes...]"}function at(){return"tailwindcss canonicalize --css input.css [classes...]"}function lt(){return"tailwindcss canonicalize --stream [--css input.css]"}function $e(){return{"--css":{type:"string",description:'CSS entry file used to load the Tailwind design system (defaults to `@import "tailwindcss";`)'},"--format":{type:"string",description:"Output format",default:"text",values:["text","json","jsonl"]},"--stream":{type:"boolean",description:"Read candidate groups from stdin line by line and write results to stdout",default:!1}}}var Ne={"--help":{type:"boolean",description:"Display usage information",alias:"-h",default:!1}};async function Le({argv:e=process.argv.slice(2),cwd:t=process.cwd(),stdin:n=null,stdinIsTTY:i=process.stdin.isTTY,stdoutIsTTY:o=process.stdout.isTTY}={}){try{let r=v({...$e(),...Ne},e),a=mt(r["--format"]??"text");if(o&&e.length===0||r["--help"])return{exitCode:0,stdout:ke()??"",stderr:""};if(r["--stream"])return await ut({css:r["--css"],cwd:t,format:a,input:process.stdin,output:process.stdout}),{exitCode:0,stdout:"",stderr:""};let s=r._.length>0?r._:await ct({stdin:n,stdinIsTTY:i});if(s.length===0)return ht("No candidate groups provided");let l=await dt({css:r["--css"],cwd:t,inputs:s});return{exitCode:0,stdout:ft(l,a),stderr:""}}catch(r){return{exitCode:1,stdout:"",stderr:r instanceof Error?r.message:String(r)}}}async function ut({css:e,cwd:t,format:n,input:i,output:o}){let r=await Pe(e,t),a=st({input:i}),s=!0;n==="json"&&o.write("[");for await(let l of a){let c=Fe(r,l);switch(n){case"text":{o.write(c.output+` +`);break}case"jsonl":{o.write(JSON.stringify(c)+` +`);break}case"json":{s?o.write(` +`):o.write(`, +`),o.write(bt(JSON.stringify(c,null,2),2)),s=!1;break}}}n==="json"&&o.write(s?"]":` +]`)}function ct({stdin:e,stdinIsTTY:t}){return e!==null?Promise.resolve(Ae(e)):t?Promise.resolve([]):pt().then(Ae)}async function pt(){return new Promise((e,t)=>{let n="";process.stdin.on("data",i=>{n+=i}),process.stdin.on("end",()=>e(n)),process.stdin.on("error",i=>t(i))})}async function dt({css:e,cwd:t=process.cwd(),inputs:n}){let i=await Pe(e,t);return n.map(o=>Fe(i,o))}function ft(e,t){switch(t){case"json":return JSON.stringify(e,null,2);case"jsonl":return e.map(n=>JSON.stringify(n)).join(` +`);case"text":return e.map(n=>n.output).join(` +`)}}function ke(){return F({render:!1,usage:[ce(),at(),lt()],options:{...$e(),...Ne}})}async function Pe(e,t){if(e===null)return Re(ot` + @import 'tailwindcss'; + `,{base:t});let n=ve.resolve(t,e),i=await rt.readFile(n,"utf8");return Re(i,{base:ve.dirname(n)})}function Ae(e){return e.split(/\r?\n/g).map(t=>t.trim()).filter(t=>t.length>0)}function mt(e){if(e==="text"||e==="json"||e==="jsonl")return e;throw new Error(`Invalid value for --format: ${e}`)}function ht(e){return{exitCode:1,stdout:ke()??"",stderr:e}}function gt(e){let t=e.trim();return t.length===0?[]:Oe(t," ").map(n=>n.trim()).filter(n=>n.length>0)}function wt(e,t){let n=gt(t);return n=e.canonicalizeCandidates(n,{collapse:!0,logicalToPhysical:!0}),yt(e.getClassOrder(n)).join(" ")}function Fe(e,t){let n=wt(e,t);return{input:t,output:n,changed:n!==t}}function bt(e,t){let n=" ".repeat(t);return e.split(` +`).map(i=>n+i).join(` +`)}function yt(e){return e.slice().sort(([t,n],[i,o])=>n===o?ue(t,i):n===null?-1:o===null?1:St(n-o)||ue(t,i)).map(([t])=>t)}function St(e){return e>0n?1:e===0n?0:-1}var B={"--help":{type:"boolean",description:"Display usage information",alias:"-h"}};function pe(e="tailwindcss"){return`${e} [--input input.css] [--output output.css] [--watch] [options\u2026]`}function Be({invalid:e}={}){F({invalid:e,usage:[pe("tailwindcss"),pe("tailwindcss build"),ce()],commands:{build:"Build your CSS",canonicalize:"Canonicalize candidate lists"},options:{...$(),...B}})}async function xt(){let e=process.argv.slice(2),t=e[0],n=v({...$(),...B},e);if(t==="build"){let o=v({...$(),...B},e.slice(1));(process.stdout.isTTY&&e.length===1||o["--help"])&&(F({usage:[pe("tailwindcss build")],options:{...$(),...B}}),process.exit(0)),await le(o);return}if(t==="canonicalize"){let o=await Le({argv:e.slice(1)});o.stdout.length>0&&process.stdout.write(`${o.stdout} +`),o.stderr.length>0&&process.stderr.write(`${o.stderr} +`),process.exitCode=o.exitCode;return}(process.stdout.isTTY&&t===void 0||n["--help"])&&(Be(),process.exit(0)),t&&!t.startsWith("-")&&(Be({invalid:t}),process.exit(1));let i=v({...$(),...B});await le(i)}await xt(); diff --git a/node_modules/@tailwindcss/cli/package.json b/node_modules/@tailwindcss/cli/package.json new file mode 100644 index 0000000000..aacd0da8c2 --- /dev/null +++ b/node_modules/@tailwindcss/cli/package.json @@ -0,0 +1,40 @@ +{ + "name": "@tailwindcss/cli", + "version": "4.2.2", + "description": "A utility-first CSS framework for rapidly building custom user interfaces.", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/tailwindlabs/tailwindcss.git", + "directory": "packages/@tailwindcss-cli" + }, + "bugs": "https://github.com/tailwindlabs/tailwindcss/issues", + "homepage": "https://tailwindcss.com", + "bin": { + "tailwindcss": "./dist/index.mjs" + }, + "exports": { + "./package.json": "./package.json" + }, + "files": [ + "dist" + ], + "publishConfig": { + "provenance": true, + "access": "public" + }, + "dependencies": { + "@parcel/watcher": "^2.5.1", + "enhanced-resolve": "^5.19.0", + "mri": "^1.2.0", + "picocolors": "^1.1.1", + "@tailwindcss/oxide": "4.2.2", + "@tailwindcss/node": "4.2.2", + "tailwindcss": "4.2.2" + }, + "scripts": { + "lint": "tsc --noEmit", + "build": "tsup-node", + "dev": "pnpm run build -- --watch" + } +} \ No newline at end of file diff --git a/node_modules/@tailwindcss/node/LICENSE b/node_modules/@tailwindcss/node/LICENSE new file mode 100644 index 0000000000..d6a8229073 --- /dev/null +++ b/node_modules/@tailwindcss/node/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Tailwind Labs, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/@tailwindcss/node/README.md b/node_modules/@tailwindcss/node/README.md new file mode 100644 index 0000000000..5f532607d0 --- /dev/null +++ b/node_modules/@tailwindcss/node/README.md @@ -0,0 +1,36 @@ +

+ + + + + Tailwind CSS + + +

+ +

+ A utility-first CSS framework for rapidly building custom user interfaces. +

+ +

+ Build Status + Total Downloads + Latest Release + License +

+ +--- + +## Documentation + +For full documentation, visit [tailwindcss.com](https://tailwindcss.com). + +## Community + +For help, discussion about best practices, or feature ideas: + +[Discuss Tailwind CSS on GitHub](https://github.com/tailwindlabs/tailwindcss/discussions) + +## Contributing + +If you're interested in contributing to Tailwind CSS, please read our [contributing docs](https://github.com/tailwindlabs/tailwindcss/blob/main/.github/CONTRIBUTING.md) **before submitting a pull request**. diff --git a/node_modules/@tailwindcss/node/dist/esm-cache.loader.d.mts b/node_modules/@tailwindcss/node/dist/esm-cache.loader.d.mts new file mode 100644 index 0000000000..55f2bad399 --- /dev/null +++ b/node_modules/@tailwindcss/node/dist/esm-cache.loader.d.mts @@ -0,0 +1,5 @@ +import { ResolveHook } from 'node:module'; + +declare let resolve: ResolveHook; + +export { resolve }; diff --git a/node_modules/@tailwindcss/node/dist/esm-cache.loader.mjs b/node_modules/@tailwindcss/node/dist/esm-cache.loader.mjs new file mode 100644 index 0000000000..f9ae1082c0 --- /dev/null +++ b/node_modules/@tailwindcss/node/dist/esm-cache.loader.mjs @@ -0,0 +1 @@ +import{isBuiltin as i}from"module";var o=async(a,e,u)=>{let r=await u(a,e);if(r.url===import.meta.url||i(r.url)||!e.parentURL)return r;let t=new URL(e.parentURL).searchParams.get("id");if(t===null)return r;let l=new URL(r.url);return l.searchParams.set("id",t),{...r,url:`${l}`}};export{o as resolve}; diff --git a/node_modules/@tailwindcss/node/dist/index.d.mts b/node_modules/@tailwindcss/node/dist/index.d.mts new file mode 100644 index 0000000000..25c3731e26 --- /dev/null +++ b/node_modules/@tailwindcss/node/dist/index.d.mts @@ -0,0 +1,256 @@ +import { AstNode as AstNode$1 } from './ast'; +import { Candidate, Variant } from './candidate'; +import { compileAstNodes } from './compile'; +import { ClassEntry, VariantEntry, CanonicalizeOptions } from './intellisense'; +import { Theme } from './theme'; +import { Utilities } from './utilities'; +import { Variants } from './variants'; +import * as tailwindcss from 'tailwindcss'; +import { Polyfills, Features } from 'tailwindcss'; +export { Features, Polyfills } from 'tailwindcss'; + +declare const DEBUG: boolean; + +declare const env_DEBUG: typeof DEBUG; +declare namespace env { + export { env_DEBUG as DEBUG }; +} + +declare const enum CompileAstFlags { + None = 0, + RespectImportant = 1 +} +type DesignSystem = { + theme: Theme; + utilities: Utilities; + variants: Variants; + invalidCandidates: Set; + important: boolean; + getClassOrder(classes: string[]): [string, bigint | null][]; + getClassList(): ClassEntry[]; + getVariants(): VariantEntry[]; + parseCandidate(candidate: string): Readonly[]; + parseVariant(variant: string): Readonly | null; + compileAstNodes(candidate: Candidate, flags?: CompileAstFlags): ReturnType; + printCandidate(candidate: Candidate): string; + printVariant(variant: Variant): string; + getVariantOrder(): Map; + resolveThemeValue(path: string, forceInline?: boolean): string | undefined; + trackUsedVariables(raw: string): void; + canonicalizeCandidates(candidates: string[], options?: CanonicalizeOptions): string[]; + candidatesToCss(classes: string[]): (string | null)[]; + candidatesToAst(classes: string[]): AstNode$1[][]; + storage: Record; +}; + +/** + * The source code for one or more nodes in the AST + * + * This generally corresponds to a stylesheet + */ +interface Source { + /** + * The path to the file that contains the referenced source code + * + * If this references the *output* source code, this is `null`. + */ + file: string | null; + /** + * The referenced source code + */ + code: string; +} +/** + * The file and offsets within it that this node covers + * + * This can represent either: + * - A location in the original CSS which caused this node to be created + * - A location in the output CSS where this node resides + */ +type SourceLocation = [source: Source, start: number, end: number]; + +/** + * Line offset tables are the key to generating our source maps. They allow us + * to store indexes with our AST nodes and later convert them into positions as + * when given the source that the indexes refer to. + */ +/** + * A position in source code + * + * https://tc39.es/ecma426/#sec-position-record-type + */ +interface Position { + /** The line number, one-based */ + line: number; + /** The column/character number, one-based */ + column: number; +} + +interface OriginalPosition extends Position { + source: DecodedSource; +} +/** + * A "decoded" sourcemap + * + * @see https://tc39.es/ecma426/#decoded-source-map-record + */ +interface DecodedSourceMap { + file: string | null; + sources: DecodedSource[]; + mappings: DecodedMapping[]; +} +/** + * A "decoded" source + * + * @see https://tc39.es/ecma426/#decoded-source-record + */ +interface DecodedSource { + url: string | null; + content: string | null; + ignore: boolean; +} +/** + * A "decoded" mapping + * + * @see https://tc39.es/ecma426/#decoded-mapping-record + */ +interface DecodedMapping { + originalPosition: OriginalPosition | null; + generatedPosition: Position; + name: string | null; +} + +type StyleRule = { + kind: 'rule'; + selector: string; + nodes: AstNode[]; + src?: SourceLocation; + dst?: SourceLocation; +}; +type AtRule = { + kind: 'at-rule'; + name: string; + params: string; + nodes: AstNode[]; + src?: SourceLocation; + dst?: SourceLocation; +}; +type Declaration = { + kind: 'declaration'; + property: string; + value: string | undefined; + important: boolean; + src?: SourceLocation; + dst?: SourceLocation; +}; +type Comment = { + kind: 'comment'; + value: string; + src?: SourceLocation; + dst?: SourceLocation; +}; +type Context = { + kind: 'context'; + context: Record; + nodes: AstNode[]; + src?: undefined; + dst?: undefined; +}; +type AtRoot = { + kind: 'at-root'; + nodes: AstNode[]; + src?: undefined; + dst?: undefined; +}; +type AstNode = StyleRule | AtRule | Declaration | Comment | Context | AtRoot; + +type Resolver = (id: string, base: string) => Promise; +interface CompileOptions { + base: string; + from?: string; + onDependency: (path: string) => void; + shouldRewriteUrls?: boolean; + polyfills?: Polyfills; + customCssResolver?: Resolver; + customJsResolver?: Resolver; +} +declare function compileAst(ast: AstNode[], options: CompileOptions): Promise<{ + sources: { + base: string; + pattern: string; + negated: boolean; + }[]; + root: "none" | { + base: string; + pattern: string; + } | null; + features: Features; + build(candidates: string[]): AstNode[]; +}>; +declare function compile(css: string, options: CompileOptions): Promise<{ + sources: { + base: string; + pattern: string; + negated: boolean; + }[]; + root: "none" | { + base: string; + pattern: string; + } | null; + features: Features; + build(candidates: string[]): string; + buildSourceMap(): tailwindcss.DecodedSourceMap; +}>; +declare function __unstable__loadDesignSystem(css: string, { base }: { + base: string; +}): Promise; +declare function loadModule(id: string, base: string, onDependency: (path: string) => void, customJsResolver?: Resolver): Promise<{ + path: string; + base: string; + module: any; +}>; + +declare class Instrumentation implements Disposable { + #private; + private defaultFlush; + constructor(defaultFlush?: (message: string) => undefined); + hit(label: string): void; + start(label: string): void; + end(label: string): void; + reset(): void; + report(flush?: (message: string) => undefined): void; + [Symbol.dispose](): void; +} + +declare function normalizePath(originalPath: string): string; + +interface OptimizeOptions { + /** + * The file being transformed + */ + file?: string; + /** + * Enabled minified output + */ + minify?: boolean; + /** + * The output source map before optimization + * + * If omitted a resulting source map will not be available + */ + map?: string; +} +interface TransformResult { + code: string; + map: string | undefined; +} +declare function optimize(input: string, { file, minify, map }?: OptimizeOptions): TransformResult; + +interface SourceMap { + readonly raw: string; + readonly inline: string; + comment(url: string): string; +} +declare function toSourceMap(map: DecodedSourceMap | string): SourceMap; + +export { type CompileOptions, type DecodedSource, type DecodedSourceMap, Instrumentation, type OptimizeOptions, type Resolver, type SourceMap, type TransformResult, __unstable__loadDesignSystem, compile, compileAst, env, loadModule, normalizePath, optimize, toSourceMap }; diff --git a/node_modules/@tailwindcss/node/dist/index.d.ts b/node_modules/@tailwindcss/node/dist/index.d.ts new file mode 100644 index 0000000000..25c3731e26 --- /dev/null +++ b/node_modules/@tailwindcss/node/dist/index.d.ts @@ -0,0 +1,256 @@ +import { AstNode as AstNode$1 } from './ast'; +import { Candidate, Variant } from './candidate'; +import { compileAstNodes } from './compile'; +import { ClassEntry, VariantEntry, CanonicalizeOptions } from './intellisense'; +import { Theme } from './theme'; +import { Utilities } from './utilities'; +import { Variants } from './variants'; +import * as tailwindcss from 'tailwindcss'; +import { Polyfills, Features } from 'tailwindcss'; +export { Features, Polyfills } from 'tailwindcss'; + +declare const DEBUG: boolean; + +declare const env_DEBUG: typeof DEBUG; +declare namespace env { + export { env_DEBUG as DEBUG }; +} + +declare const enum CompileAstFlags { + None = 0, + RespectImportant = 1 +} +type DesignSystem = { + theme: Theme; + utilities: Utilities; + variants: Variants; + invalidCandidates: Set; + important: boolean; + getClassOrder(classes: string[]): [string, bigint | null][]; + getClassList(): ClassEntry[]; + getVariants(): VariantEntry[]; + parseCandidate(candidate: string): Readonly[]; + parseVariant(variant: string): Readonly | null; + compileAstNodes(candidate: Candidate, flags?: CompileAstFlags): ReturnType; + printCandidate(candidate: Candidate): string; + printVariant(variant: Variant): string; + getVariantOrder(): Map; + resolveThemeValue(path: string, forceInline?: boolean): string | undefined; + trackUsedVariables(raw: string): void; + canonicalizeCandidates(candidates: string[], options?: CanonicalizeOptions): string[]; + candidatesToCss(classes: string[]): (string | null)[]; + candidatesToAst(classes: string[]): AstNode$1[][]; + storage: Record; +}; + +/** + * The source code for one or more nodes in the AST + * + * This generally corresponds to a stylesheet + */ +interface Source { + /** + * The path to the file that contains the referenced source code + * + * If this references the *output* source code, this is `null`. + */ + file: string | null; + /** + * The referenced source code + */ + code: string; +} +/** + * The file and offsets within it that this node covers + * + * This can represent either: + * - A location in the original CSS which caused this node to be created + * - A location in the output CSS where this node resides + */ +type SourceLocation = [source: Source, start: number, end: number]; + +/** + * Line offset tables are the key to generating our source maps. They allow us + * to store indexes with our AST nodes and later convert them into positions as + * when given the source that the indexes refer to. + */ +/** + * A position in source code + * + * https://tc39.es/ecma426/#sec-position-record-type + */ +interface Position { + /** The line number, one-based */ + line: number; + /** The column/character number, one-based */ + column: number; +} + +interface OriginalPosition extends Position { + source: DecodedSource; +} +/** + * A "decoded" sourcemap + * + * @see https://tc39.es/ecma426/#decoded-source-map-record + */ +interface DecodedSourceMap { + file: string | null; + sources: DecodedSource[]; + mappings: DecodedMapping[]; +} +/** + * A "decoded" source + * + * @see https://tc39.es/ecma426/#decoded-source-record + */ +interface DecodedSource { + url: string | null; + content: string | null; + ignore: boolean; +} +/** + * A "decoded" mapping + * + * @see https://tc39.es/ecma426/#decoded-mapping-record + */ +interface DecodedMapping { + originalPosition: OriginalPosition | null; + generatedPosition: Position; + name: string | null; +} + +type StyleRule = { + kind: 'rule'; + selector: string; + nodes: AstNode[]; + src?: SourceLocation; + dst?: SourceLocation; +}; +type AtRule = { + kind: 'at-rule'; + name: string; + params: string; + nodes: AstNode[]; + src?: SourceLocation; + dst?: SourceLocation; +}; +type Declaration = { + kind: 'declaration'; + property: string; + value: string | undefined; + important: boolean; + src?: SourceLocation; + dst?: SourceLocation; +}; +type Comment = { + kind: 'comment'; + value: string; + src?: SourceLocation; + dst?: SourceLocation; +}; +type Context = { + kind: 'context'; + context: Record; + nodes: AstNode[]; + src?: undefined; + dst?: undefined; +}; +type AtRoot = { + kind: 'at-root'; + nodes: AstNode[]; + src?: undefined; + dst?: undefined; +}; +type AstNode = StyleRule | AtRule | Declaration | Comment | Context | AtRoot; + +type Resolver = (id: string, base: string) => Promise; +interface CompileOptions { + base: string; + from?: string; + onDependency: (path: string) => void; + shouldRewriteUrls?: boolean; + polyfills?: Polyfills; + customCssResolver?: Resolver; + customJsResolver?: Resolver; +} +declare function compileAst(ast: AstNode[], options: CompileOptions): Promise<{ + sources: { + base: string; + pattern: string; + negated: boolean; + }[]; + root: "none" | { + base: string; + pattern: string; + } | null; + features: Features; + build(candidates: string[]): AstNode[]; +}>; +declare function compile(css: string, options: CompileOptions): Promise<{ + sources: { + base: string; + pattern: string; + negated: boolean; + }[]; + root: "none" | { + base: string; + pattern: string; + } | null; + features: Features; + build(candidates: string[]): string; + buildSourceMap(): tailwindcss.DecodedSourceMap; +}>; +declare function __unstable__loadDesignSystem(css: string, { base }: { + base: string; +}): Promise; +declare function loadModule(id: string, base: string, onDependency: (path: string) => void, customJsResolver?: Resolver): Promise<{ + path: string; + base: string; + module: any; +}>; + +declare class Instrumentation implements Disposable { + #private; + private defaultFlush; + constructor(defaultFlush?: (message: string) => undefined); + hit(label: string): void; + start(label: string): void; + end(label: string): void; + reset(): void; + report(flush?: (message: string) => undefined): void; + [Symbol.dispose](): void; +} + +declare function normalizePath(originalPath: string): string; + +interface OptimizeOptions { + /** + * The file being transformed + */ + file?: string; + /** + * Enabled minified output + */ + minify?: boolean; + /** + * The output source map before optimization + * + * If omitted a resulting source map will not be available + */ + map?: string; +} +interface TransformResult { + code: string; + map: string | undefined; +} +declare function optimize(input: string, { file, minify, map }?: OptimizeOptions): TransformResult; + +interface SourceMap { + readonly raw: string; + readonly inline: string; + comment(url: string): string; +} +declare function toSourceMap(map: DecodedSourceMap | string): SourceMap; + +export { type CompileOptions, type DecodedSource, type DecodedSourceMap, Instrumentation, type OptimizeOptions, type Resolver, type SourceMap, type TransformResult, __unstable__loadDesignSystem, compile, compileAst, env, loadModule, normalizePath, optimize, toSourceMap }; diff --git a/node_modules/@tailwindcss/node/dist/index.js b/node_modules/@tailwindcss/node/dist/index.js new file mode 100644 index 0000000000..113b14efac --- /dev/null +++ b/node_modules/@tailwindcss/node/dist/index.js @@ -0,0 +1,18 @@ +"use strict";var Dt=Object.create;var ne=Object.defineProperty;var Ut=Object.getOwnPropertyDescriptor;var Lt=Object.getOwnPropertyNames;var zt=Object.getPrototypeOf,Kt=Object.prototype.hasOwnProperty;var ze=(e,r)=>{for(var t in r)ne(e,t,{get:r[t],enumerable:!0})},Ke=(e,r,t,i)=>{if(r&&typeof r=="object"||typeof r=="function")for(let o of Lt(r))!Kt.call(e,o)&&o!==t&&ne(e,o,{get:()=>r[o],enumerable:!(i=Ut(r,o))||i.enumerable});return e};var T=(e,r,t)=>(t=e!=null?Dt(zt(e)):{},Ke(r||!e||!e.__esModule?ne(t,"default",{value:e,enumerable:!0}):t,e)),Mt=e=>Ke(ne({},"__esModule",{value:!0}),e);var fi={};ze(fi,{Features:()=>O.Features,Instrumentation:()=>Le,Polyfills:()=>O.Polyfills,__unstable__loadDesignSystem:()=>ti,compile:()=>ei,compileAst:()=>Xr,env:()=>oe,loadModule:()=>De,normalizePath:()=>me,optimize:()=>ai,toSourceMap:()=>ci});module.exports=Mt(fi);var _t=T(require("module")),It=require("url");var oe={};ze(oe,{DEBUG:()=>ve});var ve=Ft(process.env.DEBUG);function Ft(e){if(typeof e=="boolean")return e;if(e===void 0)return!1;if(e==="true"||e==="1")return!0;if(e==="false"||e==="0")return!1;if(e==="*")return!0;let r=e.split(",").map(t=>t.split(":")[0]);return r.includes("-tailwindcss")?!1:!!r.includes("tailwindcss")}var j=T(require("enhanced-resolve")),$t=require("jiti"),ge=T(require("fs")),Ie=T(require("fs/promises")),re=T(require("path")),Pe=require("url"),O=require("tailwindcss");var le=T(require("fs/promises")),B=T(require("path")),jt=[/import[\s\S]*?['"](.{3,}?)['"]/gi,/import[\s\S]*from[\s\S]*?['"](.{3,}?)['"]/gi,/export[\s\S]*from[\s\S]*?['"](.{3,}?)['"]/gi,/require\(['"`](.+)['"`]\)/gi],Wt=[".js",".cjs",".mjs"],Bt=["",".js",".cjs",".mjs",".ts",".cts",".mts",".jsx",".tsx"],Yt=["",".ts",".cts",".mts",".tsx",".js",".cjs",".mjs",".jsx"];async function Gt(e,r){for(let t of r){let i=`${e}${t}`;if((await le.default.stat(i).catch(()=>null))?.isFile())return i}for(let t of r){let i=`${e}/index${t}`;if(await le.default.access(i).then(()=>!0,()=>!1))return i}return null}async function Me(e,r,t,i){let o=Wt.includes(i)?Bt:Yt,l=await Gt(B.default.resolve(t,r),o);if(l===null||e.has(l))return;e.add(l),t=B.default.dirname(l),i=B.default.extname(l);let n=await le.default.readFile(l,"utf-8"),s=[];for(let a of jt)for(let u of n.matchAll(a))u[1].startsWith(".")&&s.push(Me(e,u[1],t,i));await Promise.all(s)}async function Fe(e){let r=new Set;return await Me(r,e,B.default.dirname(e),B.default.extname(e)),Array.from(r)}var Re=T(require("path"));function Y(e){return{kind:"word",value:e}}function Ht(e,r){return{kind:"function",value:e,nodes:r}}function qt(e){return{kind:"separator",value:e}}function S(e){let r="";for(let t of e)switch(t.kind){case"word":case"separator":{r+=t.value;break}case"function":r+=t.value+"("+S(t.nodes)+")"}return r}var je=92,Zt=41,We=58,Be=44,Qt=34,Ye=61,Ge=62,He=60,qe=10,Jt=40,Xt=39,er=47,Ze=32,Qe=9;function A(e){e=e.replaceAll(`\r +`,` +`);let r=[],t=[],i=null,o="",l;for(let n=0;n0){let u=Y(o);i?i.nodes.push(u):r.push(u),o=""}let a=Y(e[n]);i?i.nodes.push(a):r.push(a);break}case We:case Be:case Ye:case Ge:case He:case qe:case Ze:case Qe:{if(o.length>0){let c=Y(o);i?i.nodes.push(c):r.push(c),o=""}let a=n,u=n+1;for(;u0){let u=Y(o);a?.nodes.push(u),o=""}t.length>0?i=t[t.length-1]:i=null;break}default:o+=String.fromCharCode(s)}}return o.length>0&&r.push(Y(o)),r}var g=class extends Map{constructor(t){super();this.factory=t}get(t){let i=super.get(t);return i===void 0&&(i=this.factory(t,this),this.set(t,i)),i}};var wi=new Uint8Array(256);var ae=new Uint8Array(256);function w(e,r){let t=0,i=[],o=0,l=e.length,n=r.charCodeAt(0);for(let s=0;s0&&a===ae[t-1]&&t--;break}}return i.push(e.slice(o)),i}var ke=(n=>(n[n.Continue=0]="Continue",n[n.Skip=1]="Skip",n[n.Stop=2]="Stop",n[n.Replace=3]="Replace",n[n.ReplaceSkip=4]="ReplaceSkip",n[n.ReplaceStop=5]="ReplaceStop",n))(ke||{}),k={Continue:{kind:0},Skip:{kind:1},Stop:{kind:2},Replace:e=>({kind:3,nodes:Array.isArray(e)?e:[e]}),ReplaceSkip:e=>({kind:4,nodes:Array.isArray(e)?e:[e]}),ReplaceStop:e=>({kind:5,nodes:Array.isArray(e)?e:[e]})};function v(e,r){typeof r=="function"?Je(e,r):Je(e,r.enter,r.exit)}function Je(e,r=()=>k.Continue,t=()=>k.Continue){let i={value:[e,0,null],prev:null},o={parent:null,depth:0,path(){let l=[],n=i;for(;n;){let s=n.value[2];s&&l.push(s),n=n.prev}return l.reverse(),l}};for(;i!==null;){let l=i.value,n=l[0],s=l[1],a=l[2];if(s>=n.length){i=i.prev,o.depth-=1;continue}if(o.parent=a,s>=0){let f=n[s],d=r(f,o)??k.Continue;switch(d.kind){case 0:{f.nodes&&f.nodes.length>0&&(o.depth+=1,i={value:[f.nodes,0,f],prev:i}),l[1]=~s;continue}case 2:return;case 1:{l[1]=~s;continue}case 3:{n.splice(s,1,...d.nodes);continue}case 5:{n.splice(s,1,...d.nodes);return}case 4:{n.splice(s,1,...d.nodes),l[1]+=d.nodes.length;continue}default:throw new Error(`Invalid \`WalkAction.${ke[d.kind]??`Unknown(${d.kind})`}\` in enter.`)}}let u=~s,p=n[u],c=t(p,o)??k.Continue;switch(c.kind){case 0:l[1]=u+1;continue;case 2:return;case 3:{n.splice(u,1,...c.nodes),l[1]=u+c.nodes.length;continue}case 5:{n.splice(u,1,...c.nodes);return}case 4:{n.splice(u,1,...c.nodes),l[1]=u+c.nodes.length;continue}default:throw new Error(`Invalid \`WalkAction.${ke[c.kind]??`Unknown(${c.kind})`}\` in exit.`)}}}var Vi=new g(e=>{let r=A(e),t=new Set;return v(r,(i,o)=>{let l=o.parent===null?r:o.parent.nodes??[];if(i.kind==="word"&&(i.value==="+"||i.value==="-"||i.value==="*"||i.value==="/")){let n=l.indexOf(i)??-1;if(n===-1)return;let s=l[n-1];if(s?.kind!=="separator"||s.value!==" ")return;let a=l[n+1];if(a?.kind!=="separator"||a.value!==" ")return;t.add(s),t.add(a)}else i.kind==="separator"&&i.value.length>0&&i.value.trim()===""?(l[0]===i||l[l.length-1]===i)&&t.add(i):i.kind==="separator"&&i.value.trim()===","&&(i.value=",")}),t.size>0&&v(r,i=>{if(t.has(i))return t.delete(i),k.ReplaceSkip([])}),we(r),S(r)});var Ri=new g(e=>{let r=A(e);return r.length===3&&r[0].kind==="word"&&r[0].value==="&"&&r[1].kind==="separator"&&r[1].value===":"&&r[2].kind==="function"&&r[2].value==="is"?S(r[2].nodes):e});function we(e){for(let r of e)switch(r.kind){case"function":{if(r.value==="url"||r.value.endsWith("_url")){r.value=G(r.value);break}if(r.value==="var"||r.value.endsWith("_var")||r.value==="theme"||r.value.endsWith("_theme")){r.value=G(r.value);for(let t=0;t{let r=A(e);return r.length===1&&r[0].kind==="function"&&r[0].value==="var"});function tr(e){throw new Error(`Unexpected value: ${e}`)}function G(e){return e.replaceAll("_",String.raw`\_`).replaceAll(" ","_")}var rr=process.env.FEATURES_ENV!=="stable";var _=/[+-]?\d*\.?\d+(?:[eE][+-]?\d+)?/,ji=new RegExp(`^${_.source}$`);var Wi=new RegExp(`^${_.source}%$`);var Bi=new RegExp(`^${_.source}\\s*/\\s*${_.source}$`);var ir=["cm","mm","Q","in","pc","pt","px","em","ex","ch","rem","lh","rlh","vw","vh","vmin","vmax","vb","vi","svw","svh","lvw","lvh","dvw","dvh","cqw","cqh","cqi","cqb","cqmin","cqmax"],Yi=new RegExp(`^${_.source}(${ir.join("|")})$`);var nr=["deg","rad","grad","turn"],Gi=new RegExp(`^${_.source}(${nr.join("|")})$`);var Hi=new RegExp(`^${_.source} +${_.source} +${_.source}$`);function C(e){let r=Number(e);return Number.isInteger(r)&&r>=0&&String(r)===String(e)}function H(e,r){if(r===null)return e;let t=Number(r);return Number.isNaN(t)||(r=`${t*100}%`),r==="100%"?e:`color-mix(in oklab, ${e} ${r}, transparent)`}var lr={"--alpha":ar,"--spacing":sr,"--theme":ur,theme:cr};function ar(e,r,t,...i){let[o,l]=w(t,"/").map(n=>n.trim());if(!o||!l)throw new Error(`The --alpha(\u2026) function requires a color and an alpha value, e.g.: \`--alpha(${o||"var(--my-color)"} / ${l||"50%"})\``);if(i.length>0)throw new Error(`The --alpha(\u2026) function only accepts one argument, e.g.: \`--alpha(${o||"var(--my-color)"} / ${l||"50%"})\``);return H(o,l)}function sr(e,r,t,...i){if(!t)throw new Error("The --spacing(\u2026) function requires an argument, but received none.");if(i.length>0)throw new Error(`The --spacing(\u2026) function only accepts a single argument, but received ${i.length+1}.`);let o=e.theme.resolve(null,["--spacing"]);if(!o)throw new Error("The --spacing(\u2026) function requires that the `--spacing` theme variable exists, but it was not found.");return`calc(${o} * ${t})`}function ur(e,r,t,...i){if(!t.startsWith("--"))throw new Error("The --theme(\u2026) function can only be used with CSS variables from your theme.");let o=!1;t.endsWith(" inline")&&(o=!0,t=t.slice(0,-7)),r.kind==="at-rule"&&(o=!0);let l=e.resolveThemeValue(t,o);if(!l){if(i.length>0)return i.join(", ");throw new Error(`Could not resolve value for theme function: \`theme(${t})\`. Consider checking if the variable name is correct or provide a fallback value to silence this error.`)}if(i.length===0)return l;let n=i.join(", ");if(n==="initial")return l;if(l==="initial")return n;if(l.startsWith("var(")||l.startsWith("theme(")||l.startsWith("--theme(")){let s=A(l);return pr(s,n),S(s)}return l}function cr(e,r,t,...i){t=fr(t);let o=e.resolveThemeValue(t);if(!o&&i.length>0)return i.join(", ");if(!o)throw new Error(`Could not resolve value for theme function: \`theme(${t})\`. Consider checking if the path is correct or provide a fallback value to silence this error.`);return o}var vn=new RegExp(Object.keys(lr).map(e=>`${e}\\(`).join("|"));function fr(e){if(e[0]!=="'"&&e[0]!=='"')return e;let r="",t=e[0];for(let i=1;i{if(t.kind==="function"&&!(t.value!=="var"&&t.value!=="theme"&&t.value!=="--theme"))if(t.nodes.length===1)t.nodes.push({kind:"word",value:`, ${r}`});else{let i=t.nodes[t.nodes.length-1];i.kind==="word"&&i.value==="initial"&&(i.value=r)}})}var mr=/^(?[-+]?(?:\d*\.)?\d+)(?[a-z]+|%)?$/i,rt=new g(e=>{let r=mr.exec(e);if(!r)return null;let t=r.groups?.value;if(t===void 0)return null;let i=Number(t);if(Number.isNaN(i))return null;let o=r.groups?.unit;return o===void 0?[i,null]:[i,o]});function it(e,r="top",t="right",i="bottom",o="left"){return nt(`${e}-${r}`,`${e}-${t}`,`${e}-${i}`,`${e}-${o}`)}function nt(e="top",r="right",t="bottom",i="left"){return{1:[[e,0],[r,0],[t,0],[i,0]],2:[[e,0],[r,1],[t,0],[i,1]],3:[[e,0],[r,1],[t,2],[i,1]],4:[[e,0],[r,1],[t,2],[i,3]]}}function K(e,r){return{1:[[e,0],[r,0]],2:[[e,0],[r,1]]}}var In={inset:nt(),margin:it("margin"),padding:it("padding"),gap:K("row-gap","column-gap")},Dn={"inset-block":K("top","bottom"),"inset-inline":K("left","right"),"margin-block":K("margin-top","margin-bottom"),"margin-inline":K("margin-left","margin-right"),"padding-block":K("padding-top","padding-bottom"),"padding-inline":K("padding-left","padding-right")};var fo=Symbol();var po=Symbol();var mo=Symbol();var go=Symbol();var ho=Symbol();var vo=Symbol();var ko=Symbol();var wo=Symbol();var yo=Symbol();var bo=Symbol();var xo=Symbol();var Ao=Symbol();var Co=Symbol();function Ae(e){let r=[0];for(let o=0;o0;){let a=(n|0)>>1,u=l+a;r[u]<=o?(l=u+1,n=n-a-1):n=a}l-=1;let s=o-r[l];return{line:l+1,column:s}}function i({line:o,column:l}){o-=1,o=Math.min(Math.max(o,0),r.length-1);let n=r[o],s=r[o+1]??n;return Math.min(Math.max(n+l,0),s)}return{find:t,findOffset:i}}var Q=92,ue=47,ce=42,ut=34,ct=39,$r=58,fe=59,E=10,pe=13,J=32,X=9,ft=123,Ce=125,Te=40,pt=41,Tr=91,Er=93,dt=45,Se=64,Nr=33,N=class e extends Error{loc;constructor(r,t){if(t){let i=t[0],o=Ae(i.code).find(t[1]);r=`${i.file}:${o.line}:${o.column+1}: ${r}`}super(r),this.name="CssSyntaxError",this.loc=t,Error.captureStackTrace&&Error.captureStackTrace(this,e)}};function te(e,r){let t=r?.from?{file:r.from,code:e}:null;e[0]==="\uFEFF"&&(e=" "+e.slice(1));let i=[],o=[],l=[],n=null,s=null,a="",u="",p=0,c;for(let f=0;f0&&e[y]===m[m.length-1]&&(m=m.slice(0,-1));let L=$e(a,h);if(!L)throw new N("Invalid custom property, expected a value",t?[t,x,f]:null);t&&(L.src=[t,x,f],L.dst=[t,x,f]),n?n.nodes.push(L):i.push(L),a=""}else if(d===fe&&a.charCodeAt(0)===Se)s=ee(a),t&&(s.src=[t,p,f],s.dst=[t,p,f]),n?n.nodes.push(s):i.push(s),a="",s=null;else if(d===fe&&u[u.length-1]!==")"){let m=$e(a);if(!m){if(a.length===0)continue;throw new N(`Invalid declaration: \`${a.trim()}\``,t?[t,p,f]:null)}t&&(m.src=[t,p,f],m.dst=[t,p,f]),n?n.nodes.push(m):i.push(m),a=""}else if(d===ft&&u[u.length-1]!==")")u+="}",s=I(a.trim()),t&&(s.src=[t,p,f],s.dst=[t,p,f]),n&&n.nodes.push(s),l.push(n),n=s,a="",s=null;else if(d===Ce&&u[u.length-1]!==")"){if(u==="")throw new N("Missing opening {",t?[t,f,f]:null);if(u=u.slice(0,-1),a.length>0)if(a.charCodeAt(0)===Se)s=ee(a),t&&(s.src=[t,p,f],s.dst=[t,p,f]),n?n.nodes.push(s):i.push(s),a="",s=null;else{let x=a.indexOf(":");if(n){let h=$e(a,x);if(!h)throw new N(`Invalid declaration: \`${a.trim()}\``,t?[t,p,f]:null);t&&(h.src=[t,p,f],h.dst=[t,p,f]),n.nodes.push(h)}}let m=l.pop()??null;m===null&&n&&i.push(n),n=m,a="",s=null}else if(d===Te)u+=")",a+="(";else if(d===pt){if(u[u.length-1]!==")")throw new N("Missing opening (",t?[t,f,f]:null);u=u.slice(0,-1),a+=")"}else{if(a.length===0&&(d===J||d===E||d===X))continue;a===""&&(p=f),a+=String.fromCharCode(d)}}}if(a.charCodeAt(0)===Se){let f=ee(a);t&&(f.src=[t,p,e.length],f.dst=[t,p,e.length]),i.push(f)}if(u.length>0&&n){if(n.kind==="rule")throw new N(`Missing closing } at ${n.selector}`,n.src?[n.src[0],n.src[1],n.src[1]]:null);if(n.kind==="at-rule")throw new N(`Missing closing } at ${n.name} ${n.params}`,n.src?[n.src[0],n.src[1],n.src[1]]:null)}return o.length>0?o.concat(i):i}function ee(e,r=[]){let t=e,i="";for(let o=5;o{if(C(e.value))return e.value}),b=F(e=>{if(C(e.value))return`${e.value}%`}),D=F(e=>{if(C(e.value))return`${e.value}px`}),ht=F(e=>{if(C(e.value))return`${e.value}ms`}),de=F(e=>{if(C(e.value))return`${e.value}deg`}),_r=F(e=>{if(e.fraction===null)return;let[r,t]=w(e.fraction,"/");if(!(!C(r)||!C(t)))return e.fraction}),vt=F(e=>{if(C(Number(e.value)))return`repeat(${e.value}, minmax(0, 1fr))`}),Ir={accentColor:({theme:e})=>e("colors"),animation:{none:"none",spin:"spin 1s linear infinite",ping:"ping 1s cubic-bezier(0, 0, 0.2, 1) infinite",pulse:"pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite",bounce:"bounce 1s infinite"},aria:{busy:'busy="true"',checked:'checked="true"',disabled:'disabled="true"',expanded:'expanded="true"',hidden:'hidden="true"',pressed:'pressed="true"',readonly:'readonly="true"',required:'required="true"',selected:'selected="true"'},aspectRatio:{auto:"auto",square:"1 / 1",video:"16 / 9",..._r},backdropBlur:({theme:e})=>e("blur"),backdropBrightness:({theme:e})=>({...e("brightness"),...b}),backdropContrast:({theme:e})=>({...e("contrast"),...b}),backdropGrayscale:({theme:e})=>({...e("grayscale"),...b}),backdropHueRotate:({theme:e})=>({...e("hueRotate"),...de}),backdropInvert:({theme:e})=>({...e("invert"),...b}),backdropOpacity:({theme:e})=>({...e("opacity"),...b}),backdropSaturate:({theme:e})=>({...e("saturate"),...b}),backdropSepia:({theme:e})=>({...e("sepia"),...b}),backgroundColor:({theme:e})=>e("colors"),backgroundImage:{none:"none","gradient-to-t":"linear-gradient(to top, var(--tw-gradient-stops))","gradient-to-tr":"linear-gradient(to top right, var(--tw-gradient-stops))","gradient-to-r":"linear-gradient(to right, var(--tw-gradient-stops))","gradient-to-br":"linear-gradient(to bottom right, var(--tw-gradient-stops))","gradient-to-b":"linear-gradient(to bottom, var(--tw-gradient-stops))","gradient-to-bl":"linear-gradient(to bottom left, var(--tw-gradient-stops))","gradient-to-l":"linear-gradient(to left, var(--tw-gradient-stops))","gradient-to-tl":"linear-gradient(to top left, var(--tw-gradient-stops))"},backgroundOpacity:({theme:e})=>e("opacity"),backgroundPosition:{bottom:"bottom",center:"center",left:"left","left-bottom":"left bottom","left-top":"left top",right:"right","right-bottom":"right bottom","right-top":"right top",top:"top"},backgroundSize:{auto:"auto",cover:"cover",contain:"contain"},blur:{0:"0",none:"",sm:"4px",DEFAULT:"8px",md:"12px",lg:"16px",xl:"24px","2xl":"40px","3xl":"64px"},borderColor:({theme:e})=>({DEFAULT:"currentcolor",...e("colors")}),borderOpacity:({theme:e})=>e("opacity"),borderRadius:{none:"0px",sm:"0.125rem",DEFAULT:"0.25rem",md:"0.375rem",lg:"0.5rem",xl:"0.75rem","2xl":"1rem","3xl":"1.5rem",full:"9999px"},borderSpacing:({theme:e})=>e("spacing"),borderWidth:{DEFAULT:"1px",0:"0px",2:"2px",4:"4px",8:"8px",...D},boxShadow:{sm:"0 1px 2px 0 rgb(0 0 0 / 0.05)",DEFAULT:"0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)",md:"0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)",lg:"0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)",xl:"0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)","2xl":"0 25px 50px -12px rgb(0 0 0 / 0.25)",inner:"inset 0 2px 4px 0 rgb(0 0 0 / 0.05)",none:"none"},boxShadowColor:({theme:e})=>e("colors"),brightness:{0:"0",50:".5",75:".75",90:".9",95:".95",100:"1",105:"1.05",110:"1.1",125:"1.25",150:"1.5",200:"2",...b},caretColor:({theme:e})=>e("colors"),colors:()=>({...Ve}),columns:{auto:"auto",1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",10:"10",11:"11",12:"12","3xs":"16rem","2xs":"18rem",xs:"20rem",sm:"24rem",md:"28rem",lg:"32rem",xl:"36rem","2xl":"42rem","3xl":"48rem","4xl":"56rem","5xl":"64rem","6xl":"72rem","7xl":"80rem",...V},container:{},content:{none:"none"},contrast:{0:"0",50:".5",75:".75",100:"1",125:"1.25",150:"1.5",200:"2",...b},cursor:{auto:"auto",default:"default",pointer:"pointer",wait:"wait",text:"text",move:"move",help:"help","not-allowed":"not-allowed",none:"none","context-menu":"context-menu",progress:"progress",cell:"cell",crosshair:"crosshair","vertical-text":"vertical-text",alias:"alias",copy:"copy","no-drop":"no-drop",grab:"grab",grabbing:"grabbing","all-scroll":"all-scroll","col-resize":"col-resize","row-resize":"row-resize","n-resize":"n-resize","e-resize":"e-resize","s-resize":"s-resize","w-resize":"w-resize","ne-resize":"ne-resize","nw-resize":"nw-resize","se-resize":"se-resize","sw-resize":"sw-resize","ew-resize":"ew-resize","ns-resize":"ns-resize","nesw-resize":"nesw-resize","nwse-resize":"nwse-resize","zoom-in":"zoom-in","zoom-out":"zoom-out"},divideColor:({theme:e})=>e("borderColor"),divideOpacity:({theme:e})=>e("borderOpacity"),divideWidth:({theme:e})=>({...e("borderWidth"),...D}),dropShadow:{sm:"0 1px 1px rgb(0 0 0 / 0.05)",DEFAULT:["0 1px 2px rgb(0 0 0 / 0.1)","0 1px 1px rgb(0 0 0 / 0.06)"],md:["0 4px 3px rgb(0 0 0 / 0.07)","0 2px 2px rgb(0 0 0 / 0.06)"],lg:["0 10px 8px rgb(0 0 0 / 0.04)","0 4px 3px rgb(0 0 0 / 0.1)"],xl:["0 20px 13px rgb(0 0 0 / 0.03)","0 8px 5px rgb(0 0 0 / 0.08)"],"2xl":"0 25px 25px rgb(0 0 0 / 0.15)",none:"0 0 #0000"},fill:({theme:e})=>e("colors"),flex:{1:"1 1 0%",auto:"1 1 auto",initial:"0 1 auto",none:"none"},flexBasis:({theme:e})=>({auto:"auto","1/2":"50%","1/3":"33.333333%","2/3":"66.666667%","1/4":"25%","2/4":"50%","3/4":"75%","1/5":"20%","2/5":"40%","3/5":"60%","4/5":"80%","1/6":"16.666667%","2/6":"33.333333%","3/6":"50%","4/6":"66.666667%","5/6":"83.333333%","1/12":"8.333333%","2/12":"16.666667%","3/12":"25%","4/12":"33.333333%","5/12":"41.666667%","6/12":"50%","7/12":"58.333333%","8/12":"66.666667%","9/12":"75%","10/12":"83.333333%","11/12":"91.666667%",full:"100%",...e("spacing")}),flexGrow:{0:"0",DEFAULT:"1",...V},flexShrink:{0:"0",DEFAULT:"1",...V},fontFamily:{sans:["ui-sans-serif","system-ui","sans-serif",'"Apple Color Emoji"','"Segoe UI Emoji"','"Segoe UI Symbol"','"Noto Color Emoji"'],serif:["ui-serif","Georgia","Cambria",'"Times New Roman"',"Times","serif"],mono:["ui-monospace","SFMono-Regular","Menlo","Monaco","Consolas",'"Liberation Mono"','"Courier New"',"monospace"]},fontSize:{xs:["0.75rem",{lineHeight:"1rem"}],sm:["0.875rem",{lineHeight:"1.25rem"}],base:["1rem",{lineHeight:"1.5rem"}],lg:["1.125rem",{lineHeight:"1.75rem"}],xl:["1.25rem",{lineHeight:"1.75rem"}],"2xl":["1.5rem",{lineHeight:"2rem"}],"3xl":["1.875rem",{lineHeight:"2.25rem"}],"4xl":["2.25rem",{lineHeight:"2.5rem"}],"5xl":["3rem",{lineHeight:"1"}],"6xl":["3.75rem",{lineHeight:"1"}],"7xl":["4.5rem",{lineHeight:"1"}],"8xl":["6rem",{lineHeight:"1"}],"9xl":["8rem",{lineHeight:"1"}]},fontWeight:{thin:"100",extralight:"200",light:"300",normal:"400",medium:"500",semibold:"600",bold:"700",extrabold:"800",black:"900"},gap:({theme:e})=>e("spacing"),gradientColorStops:({theme:e})=>e("colors"),gradientColorStopPositions:{"0%":"0%","5%":"5%","10%":"10%","15%":"15%","20%":"20%","25%":"25%","30%":"30%","35%":"35%","40%":"40%","45%":"45%","50%":"50%","55%":"55%","60%":"60%","65%":"65%","70%":"70%","75%":"75%","80%":"80%","85%":"85%","90%":"90%","95%":"95%","100%":"100%",...b},grayscale:{0:"0",DEFAULT:"100%",...b},gridAutoColumns:{auto:"auto",min:"min-content",max:"max-content",fr:"minmax(0, 1fr)"},gridAutoRows:{auto:"auto",min:"min-content",max:"max-content",fr:"minmax(0, 1fr)"},gridColumn:{auto:"auto","span-1":"span 1 / span 1","span-2":"span 2 / span 2","span-3":"span 3 / span 3","span-4":"span 4 / span 4","span-5":"span 5 / span 5","span-6":"span 6 / span 6","span-7":"span 7 / span 7","span-8":"span 8 / span 8","span-9":"span 9 / span 9","span-10":"span 10 / span 10","span-11":"span 11 / span 11","span-12":"span 12 / span 12","span-full":"1 / -1"},gridColumnEnd:{auto:"auto",1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",10:"10",11:"11",12:"12",13:"13",...V},gridColumnStart:{auto:"auto",1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",10:"10",11:"11",12:"12",13:"13",...V},gridRow:{auto:"auto","span-1":"span 1 / span 1","span-2":"span 2 / span 2","span-3":"span 3 / span 3","span-4":"span 4 / span 4","span-5":"span 5 / span 5","span-6":"span 6 / span 6","span-7":"span 7 / span 7","span-8":"span 8 / span 8","span-9":"span 9 / span 9","span-10":"span 10 / span 10","span-11":"span 11 / span 11","span-12":"span 12 / span 12","span-full":"1 / -1"},gridRowEnd:{auto:"auto",1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",10:"10",11:"11",12:"12",13:"13",...V},gridRowStart:{auto:"auto",1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",10:"10",11:"11",12:"12",13:"13",...V},gridTemplateColumns:{none:"none",subgrid:"subgrid",1:"repeat(1, minmax(0, 1fr))",2:"repeat(2, minmax(0, 1fr))",3:"repeat(3, minmax(0, 1fr))",4:"repeat(4, minmax(0, 1fr))",5:"repeat(5, minmax(0, 1fr))",6:"repeat(6, minmax(0, 1fr))",7:"repeat(7, minmax(0, 1fr))",8:"repeat(8, minmax(0, 1fr))",9:"repeat(9, minmax(0, 1fr))",10:"repeat(10, minmax(0, 1fr))",11:"repeat(11, minmax(0, 1fr))",12:"repeat(12, minmax(0, 1fr))",...vt},gridTemplateRows:{none:"none",subgrid:"subgrid",1:"repeat(1, minmax(0, 1fr))",2:"repeat(2, minmax(0, 1fr))",3:"repeat(3, minmax(0, 1fr))",4:"repeat(4, minmax(0, 1fr))",5:"repeat(5, minmax(0, 1fr))",6:"repeat(6, minmax(0, 1fr))",7:"repeat(7, minmax(0, 1fr))",8:"repeat(8, minmax(0, 1fr))",9:"repeat(9, minmax(0, 1fr))",10:"repeat(10, minmax(0, 1fr))",11:"repeat(11, minmax(0, 1fr))",12:"repeat(12, minmax(0, 1fr))",...vt},height:({theme:e})=>({auto:"auto","1/2":"50%","1/3":"33.333333%","2/3":"66.666667%","1/4":"25%","2/4":"50%","3/4":"75%","1/5":"20%","2/5":"40%","3/5":"60%","4/5":"80%","1/6":"16.666667%","2/6":"33.333333%","3/6":"50%","4/6":"66.666667%","5/6":"83.333333%",full:"100%",screen:"100vh",svh:"100svh",lvh:"100lvh",dvh:"100dvh",min:"min-content",max:"max-content",fit:"fit-content",...e("spacing")}),hueRotate:{0:"0deg",15:"15deg",30:"30deg",60:"60deg",90:"90deg",180:"180deg",...de},inset:({theme:e})=>({auto:"auto","1/2":"50%","1/3":"33.333333%","2/3":"66.666667%","1/4":"25%","2/4":"50%","3/4":"75%",full:"100%",...e("spacing")}),invert:{0:"0",DEFAULT:"100%",...b},keyframes:{spin:{to:{transform:"rotate(360deg)"}},ping:{"75%, 100%":{transform:"scale(2)",opacity:"0"}},pulse:{"50%":{opacity:".5"}},bounce:{"0%, 100%":{transform:"translateY(-25%)",animationTimingFunction:"cubic-bezier(0.8,0,1,1)"},"50%":{transform:"none",animationTimingFunction:"cubic-bezier(0,0,0.2,1)"}}},letterSpacing:{tighter:"-0.05em",tight:"-0.025em",normal:"0em",wide:"0.025em",wider:"0.05em",widest:"0.1em"},lineHeight:{none:"1",tight:"1.25",snug:"1.375",normal:"1.5",relaxed:"1.625",loose:"2",3:".75rem",4:"1rem",5:"1.25rem",6:"1.5rem",7:"1.75rem",8:"2rem",9:"2.25rem",10:"2.5rem"},listStyleType:{none:"none",disc:"disc",decimal:"decimal"},listStyleImage:{none:"none"},margin:({theme:e})=>({auto:"auto",...e("spacing")}),lineClamp:{1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",...V},maxHeight:({theme:e})=>({none:"none",full:"100%",screen:"100vh",svh:"100svh",lvh:"100lvh",dvh:"100dvh",min:"min-content",max:"max-content",fit:"fit-content",...e("spacing")}),maxWidth:({theme:e})=>({none:"none",xs:"20rem",sm:"24rem",md:"28rem",lg:"32rem",xl:"36rem","2xl":"42rem","3xl":"48rem","4xl":"56rem","5xl":"64rem","6xl":"72rem","7xl":"80rem",full:"100%",min:"min-content",max:"max-content",fit:"fit-content",prose:"65ch",...e("spacing")}),minHeight:({theme:e})=>({full:"100%",screen:"100vh",svh:"100svh",lvh:"100lvh",dvh:"100dvh",min:"min-content",max:"max-content",fit:"fit-content",...e("spacing")}),minWidth:({theme:e})=>({full:"100%",min:"min-content",max:"max-content",fit:"fit-content",...e("spacing")}),objectPosition:{bottom:"bottom",center:"center",left:"left","left-bottom":"left bottom","left-top":"left top",right:"right","right-bottom":"right bottom","right-top":"right top",top:"top"},opacity:{0:"0",5:"0.05",10:"0.1",15:"0.15",20:"0.2",25:"0.25",30:"0.3",35:"0.35",40:"0.4",45:"0.45",50:"0.5",55:"0.55",60:"0.6",65:"0.65",70:"0.7",75:"0.75",80:"0.8",85:"0.85",90:"0.9",95:"0.95",100:"1",...b},order:{first:"-9999",last:"9999",none:"0",1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",10:"10",11:"11",12:"12",...V},outlineColor:({theme:e})=>e("colors"),outlineOffset:{0:"0px",1:"1px",2:"2px",4:"4px",8:"8px",...D},outlineWidth:{0:"0px",1:"1px",2:"2px",4:"4px",8:"8px",...D},padding:({theme:e})=>e("spacing"),placeholderColor:({theme:e})=>e("colors"),placeholderOpacity:({theme:e})=>e("opacity"),ringColor:({theme:e})=>({DEFAULT:"currentcolor",...e("colors")}),ringOffsetColor:({theme:e})=>e("colors"),ringOffsetWidth:{0:"0px",1:"1px",2:"2px",4:"4px",8:"8px",...D},ringOpacity:({theme:e})=>({DEFAULT:"0.5",...e("opacity")}),ringWidth:{DEFAULT:"3px",0:"0px",1:"1px",2:"2px",4:"4px",8:"8px",...D},rotate:{0:"0deg",1:"1deg",2:"2deg",3:"3deg",6:"6deg",12:"12deg",45:"45deg",90:"90deg",180:"180deg",...de},saturate:{0:"0",50:".5",100:"1",150:"1.5",200:"2",...b},scale:{0:"0",50:".5",75:".75",90:".9",95:".95",100:"1",105:"1.05",110:"1.1",125:"1.25",150:"1.5",...b},screens:{sm:"40rem",md:"48rem",lg:"64rem",xl:"80rem","2xl":"96rem"},scrollMargin:({theme:e})=>e("spacing"),scrollPadding:({theme:e})=>e("spacing"),sepia:{0:"0",DEFAULT:"100%",...b},skew:{0:"0deg",1:"1deg",2:"2deg",3:"3deg",6:"6deg",12:"12deg",...de},space:({theme:e})=>e("spacing"),spacing:{px:"1px",0:"0px",.5:"0.125rem",1:"0.25rem",1.5:"0.375rem",2:"0.5rem",2.5:"0.625rem",3:"0.75rem",3.5:"0.875rem",4:"1rem",5:"1.25rem",6:"1.5rem",7:"1.75rem",8:"2rem",9:"2.25rem",10:"2.5rem",11:"2.75rem",12:"3rem",14:"3.5rem",16:"4rem",20:"5rem",24:"6rem",28:"7rem",32:"8rem",36:"9rem",40:"10rem",44:"11rem",48:"12rem",52:"13rem",56:"14rem",60:"15rem",64:"16rem",72:"18rem",80:"20rem",96:"24rem"},stroke:({theme:e})=>({none:"none",...e("colors")}),strokeWidth:{0:"0",1:"1",2:"2",...V},supports:{},data:{},textColor:({theme:e})=>e("colors"),textDecorationColor:({theme:e})=>e("colors"),textDecorationThickness:{auto:"auto","from-font":"from-font",0:"0px",1:"1px",2:"2px",4:"4px",8:"8px",...D},textIndent:({theme:e})=>e("spacing"),textOpacity:({theme:e})=>e("opacity"),textUnderlineOffset:{auto:"auto",0:"0px",1:"1px",2:"2px",4:"4px",8:"8px",...D},transformOrigin:{center:"center",top:"top","top-right":"top right",right:"right","bottom-right":"bottom right",bottom:"bottom","bottom-left":"bottom left",left:"left","top-left":"top left"},transitionDelay:{0:"0s",75:"75ms",100:"100ms",150:"150ms",200:"200ms",300:"300ms",500:"500ms",700:"700ms",1e3:"1000ms",...ht},transitionDuration:{DEFAULT:"150ms",0:"0s",75:"75ms",100:"100ms",150:"150ms",200:"200ms",300:"300ms",500:"500ms",700:"700ms",1e3:"1000ms",...ht},transitionProperty:{none:"none",all:"all",DEFAULT:"color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter",colors:"color, background-color, border-color, outline-color, text-decoration-color, fill, stroke",opacity:"opacity",shadow:"box-shadow",transform:"transform"},transitionTimingFunction:{DEFAULT:"cubic-bezier(0.4, 0, 0.2, 1)",linear:"linear",in:"cubic-bezier(0.4, 0, 1, 1)",out:"cubic-bezier(0, 0, 0.2, 1)","in-out":"cubic-bezier(0.4, 0, 0.2, 1)"},translate:({theme:e})=>({"1/2":"50%","1/3":"33.333333%","2/3":"66.666667%","1/4":"25%","2/4":"50%","3/4":"75%",full:"100%",...e("spacing")}),size:({theme:e})=>({auto:"auto","1/2":"50%","1/3":"33.333333%","2/3":"66.666667%","1/4":"25%","2/4":"50%","3/4":"75%","1/5":"20%","2/5":"40%","3/5":"60%","4/5":"80%","1/6":"16.666667%","2/6":"33.333333%","3/6":"50%","4/6":"66.666667%","5/6":"83.333333%","1/12":"8.333333%","2/12":"16.666667%","3/12":"25%","4/12":"33.333333%","5/12":"41.666667%","6/12":"50%","7/12":"58.333333%","8/12":"66.666667%","9/12":"75%","10/12":"83.333333%","11/12":"91.666667%",full:"100%",min:"min-content",max:"max-content",fit:"fit-content",...e("spacing")}),width:({theme:e})=>({auto:"auto","1/2":"50%","1/3":"33.333333%","2/3":"66.666667%","1/4":"25%","2/4":"50%","3/4":"75%","1/5":"20%","2/5":"40%","3/5":"60%","4/5":"80%","1/6":"16.666667%","2/6":"33.333333%","3/6":"50%","4/6":"66.666667%","5/6":"83.333333%","1/12":"8.333333%","2/12":"16.666667%","3/12":"25%","4/12":"33.333333%","5/12":"41.666667%","6/12":"50%","7/12":"58.333333%","8/12":"66.666667%","9/12":"75%","10/12":"83.333333%","11/12":"91.666667%",full:"100%",screen:"100vw",svw:"100svw",lvw:"100lvw",dvw:"100dvw",min:"min-content",max:"max-content",fit:"fit-content",...e("spacing")}),willChange:{auto:"auto",scroll:"scroll-position",contents:"contents",transform:"transform"},zIndex:{auto:"auto",0:"0",10:"10",20:"20",30:"30",40:"40",50:"50",...V}};var Ur=64;function z(e,r=[]){return{kind:"rule",selector:e,nodes:r}}function $(e,r="",t=[]){return{kind:"at-rule",name:e,params:r,nodes:t}}function I(e,r=[]){return e.charCodeAt(0)===Ur?ee(e,r):z(e,r)}function R(e,r,t=!1){return{kind:"declaration",property:e,value:r,important:t}}function Ne(e){return{kind:"comment",value:e}}function M(e,r){let t=0,i={file:null,code:""};function o(n,s=0){let a="",u=" ".repeat(s);if(n.kind==="declaration"){if(a+=`${u}${n.property}: ${n.value}${n.important?" !important":""}; +`,r){t+=u.length;let p=t;t+=n.property.length,t+=2,t+=n.value?.length??0,n.important&&(t+=11);let c=t;t+=2,n.dst=[i,p,c]}}else if(n.kind==="rule"){if(a+=`${u}${n.selector} { +`,r){t+=u.length;let p=t;t+=n.selector.length,t+=1;let c=t;n.dst=[i,p,c],t+=2}for(let p of n.nodes)a+=o(p,s+1);a+=`${u}} +`,r&&(t+=u.length,t+=2)}else if(n.kind==="at-rule"){if(n.nodes.length===0){let p=`${u}${n.name} ${n.params}; +`;if(r){t+=u.length;let c=t;t+=n.name.length,t+=1,t+=n.params.length;let f=t;t+=2,n.dst=[i,c,f]}return p}if(a+=`${u}${n.name}${n.params?` ${n.params} `:" "}{ +`,r){t+=u.length;let p=t;t+=n.name.length,n.params&&(t+=1,t+=n.params.length),t+=1;let c=t;n.dst=[i,p,c],t+=2}for(let p of n.nodes)a+=o(p,s+1);a+=`${u}} +`,r&&(t+=u.length,t+=2)}else if(n.kind==="comment"){if(a+=`${u}/*${n.value}*/ +`,r){t+=u.length;let p=t;t+=2+n.value.length+2;let c=t;n.dst=[i,p,c],t+=1}}else if(n.kind==="context"||n.kind==="at-root")return"";return a}let l="";for(let n of e)l+=o(n,0);return i.code=l,l}function Lr(e,r){if(typeof e!="string")throw new TypeError("expected path to be a string");if(e==="\\"||e==="/")return"/";var t=e.length;if(t<=1)return e;var i="";if(t>4&&e[3]==="\\"){var o=e[2];(o==="?"||o===".")&&e.slice(0,2)==="\\\\"&&(e=e.slice(2),i="//")}var l=e.split(/[/\\]+/);return r!==!1&&l[l.length-1]===""&&l.pop(),i+l.join("/")}function me(e){let r=Lr(e);return e.startsWith("\\\\")&&r.startsWith("/")&&!r.startsWith("//")?`/${r}`:r}var Oe=/(?[\w-]+\([^)]*\)|"[^"]*"|'[^']*'|[^,]\S*[^,])\s*(?:\s(?\w[^,]+))?(?:,|$)/g,Wr=/(?Kr.test(e),Gr=e=>Mr.test(e);async function wt({css:e,base:r,root:t}){if(!e.includes("url(")&&!e.includes("image-set("))return e;let i=te(e),o=[];function l(n){if(n[0]==="/")return n;let s=Re.posix.join(me(r),n),a=Re.posix.relative(me(t),s);return a.startsWith(".")||(a="./"+a),a}return v(i,n=>{if(n.kind!=="declaration"||!n.value)return;let s=Oe.test(n.value),a=kt.test(n.value);if(s||a){let u=a?Hr:yt;o.push(u(n.value,l).then(p=>{n.value=p}))}}),o.length&&await Promise.all(o),M(i)}function yt(e,r){return xt(e,Oe,async t=>{let[i,o]=t;return await bt(o.trim(),i,r)})}async function Hr(e,r){return await xt(e,kt,async t=>{let[,i]=t;return await Zr(i,async({url:l})=>Oe.test(l)?await yt(l,r):zr.test(l)?l:await bt(l,l,r))})}async function bt(e,r,t,i="url"){let o="",l=e[0];if((l==='"'||l==="'")&&(o=l,e=e.slice(1,-1)),qr(e))return r;let n=await t(e);return o===""&&n!==encodeURI(n)&&(o='"'),o==="'"&&n.includes("'")&&(o='"'),o==='"'&&n.includes('"')&&(n=n.replace(Wr,'\\"')),`${i}(${o}${n}${o})`}function qr(e,r){return Gr(e)||Yr(e)||!e[0].match(/[.a-zA-Z0-9_]/)||Fr.test(e)}function Zr(e,r){return Promise.all(Qr(e).map(async({url:t,descriptor:i})=>({url:await r({url:t,descriptor:i}),descriptor:i}))).then(Jr)}function Qr(e){let r=e.trim().replace(Br," ").replace(/\r?\n/,"").replace(/,\s+/,", ").replaceAll(/\s+/g," ").matchAll(jr);return Array.from(r,({groups:t})=>({url:t?.url?.trim()??"",descriptor:t?.descriptor?.trim()??""})).filter(({url:t})=>!!t)}function Jr(e){return e.map(({url:r,descriptor:t})=>r+(t?` ${t}`:"")).join(", ")}async function xt(e,r,t){let i,o=e,l="";for(;i=r.exec(o);)l+=o.slice(0,i.index),l+=await t(i),o=o.slice(i.index+i[0].length);return l+=o,l}var li={};function Tt({base:e,from:r,polyfills:t,onDependency:i,shouldRewriteUrls:o,customCssResolver:l,customJsResolver:n}){return{base:e,polyfills:t,from:r,async loadModule(s,a){return De(s,a,i,n)},async loadStylesheet(s,a){let u=await Nt(s,a,i,l);return o&&(u.content=await wt({css:u.content,root:e,base:u.base})),u}}}async function Et(e){if(e.root&&e.root!=="none"){let r=/[*{]/,t=[];for(let o of e.root.pattern.split("/")){if(r.test(o))break;t.push(o)}if(!await Ie.default.stat(re.default.resolve(e.root.base,t.join("/"))).then(o=>o.isDirectory()).catch(()=>!1))throw new Error(`The \`source(${e.root.pattern})\` does not exist or is not a directory.`)}}async function Xr(e,r){let t=await(0,O.compileAst)(e,Tt(r));return await Et(t),t}async function ei(e,r){let t=await(0,O.compile)(e,Tt(r));return await Et(t),t}async function ti(e,{base:r}){return(0,O.__unstable__loadDesignSystem)(e,{base:r,async loadModule(t,i){return De(t,i,()=>{})},async loadStylesheet(t,i){return Nt(t,i,()=>{})}})}async function De(e,r,t,i){if(e[0]!=="."){let s=await St(e,r,i);if(!s)throw new Error(`Could not resolve '${e}' from '${r}'`);let a=await Ct((0,Pe.pathToFileURL)(s).href);return{path:s,base:re.default.dirname(s),module:a.default??a}}let o=await St(e,r,i);if(!o)throw new Error(`Could not resolve '${e}' from '${r}'`);let[l,n]=await Promise.all([Ct((0,Pe.pathToFileURL)(o).href+"?id="+Date.now()),Fe(o)]);for(let s of n)t(s);return{path:o,base:re.default.dirname(o),module:l.default??l}}async function Nt(e,r,t,i){let o=await ii(e,r,i);if(!o)throw new Error(`Could not resolve '${e}' from '${r}'`);t(o);let l=await Ie.default.readFile(o,"utf-8");return{path:o,base:re.default.dirname(o),content:l}}var At=null;async function Ct(e){if(typeof globalThis.__tw_load=="function"){let r=await globalThis.__tw_load(e);if(r)return r}try{return await import(e)}catch{return At??=(0,$t.createJiti)(li.url,{moduleCache:!1,fsCache:!1}),await At.import(e)}}var Ue=["node_modules",...process.env.NODE_PATH?[process.env.NODE_PATH]:[]],ri=j.default.ResolverFactory.createResolver({fileSystem:new j.default.CachedInputFileSystem(ge.default,4e3),useSyncFileSystemCalls:!0,extensions:[".css"],mainFields:["style"],conditionNames:["style"],modules:Ue});async function ii(e,r,t){if(typeof globalThis.__tw_resolve=="function"){let i=globalThis.__tw_resolve(e,r);if(i)return Promise.resolve(i)}if(t){let i=await t(e,r);if(i)return i}return _e(ri,e,r)}var ni=j.default.ResolverFactory.createResolver({fileSystem:new j.default.CachedInputFileSystem(ge.default,4e3),useSyncFileSystemCalls:!0,extensions:[".js",".json",".node",".ts"],conditionNames:["node","import"],modules:Ue}),oi=j.default.ResolverFactory.createResolver({fileSystem:new j.default.CachedInputFileSystem(ge.default,4e3),useSyncFileSystemCalls:!0,extensions:[".js",".json",".node",".ts"],conditionNames:["node","require"],modules:Ue});async function St(e,r,t){if(typeof globalThis.__tw_resolve=="function"){let i=globalThis.__tw_resolve(e,r);if(i)return Promise.resolve(i)}if(t){let i=await t(e,r);if(i)return i}return _e(ni,e,r).catch(()=>_e(oi,e,r))}function _e(e,r,t){return new Promise((i,o)=>e.resolve({},t,r,{},(l,n)=>{if(l)return o(l);i(n)}))}Symbol.dispose??=Symbol("Symbol.dispose");Symbol.asyncDispose??=Symbol("Symbol.asyncDispose");var Le=class{constructor(r=t=>void process.stderr.write(`${t} +`)){this.defaultFlush=r}#r=new g(()=>({value:0}));#t=new g(()=>({value:0n}));#e=[];hit(r){this.#r.get(r).value++}start(r){let t=this.#e.map(o=>o.label).join("//"),i=`${t}${t.length===0?"":"//"}${r}`;this.#r.get(i).value++,this.#t.get(i),this.#e.push({id:i,label:r,namespace:t,value:process.hrtime.bigint()})}end(r){let t=process.hrtime.bigint();if(this.#e[this.#e.length-1].label!==r)throw new Error(`Mismatched timer label: \`${r}\`, expected \`${this.#e[this.#e.length-1].label}\``);let i=this.#e.pop(),o=t-i.value;this.#t.get(i.id).value+=o}reset(){this.#r.clear(),this.#t.clear(),this.#e.splice(0)}report(r=this.defaultFlush){let t=[],i=!1;for(let n=this.#e.length-1;n>=0;n--)this.end(this.#e[n].label);for(let[n,{value:s}]of this.#r.entries()){if(this.#t.has(n))continue;t.length===0&&(i=!0,t.push("Hits:"));let a=n.split("//").length;t.push(`${" ".repeat(a)}${n} ${he(Vt(`\xD7 ${s}`))}`)}this.#t.size>0&&i&&t.push(` +Timers:`);let o=-1/0,l=new Map;for(let[n,{value:s}]of this.#t){let a=`${(Number(s)/1e6).toFixed(2)}ms`;l.set(n,a),o=Math.max(o,a.length)}for(let n of this.#t.keys()){let s=n.split("//").length;t.push(`${he(`[${l.get(n).padStart(o," ")}]`)}${" ".repeat(s-1)}${s===1?" ":he(" \u21B3 ")}${n.split("//").pop()} ${this.#r.get(n).value===1?"":he(Vt(`\xD7 ${this.#r.get(n).value}`))}`.trimEnd())}r(` +${t.join(` +`)} +`),this.reset()}[Symbol.dispose](){ve&&this.report()}};function he(e){return`\x1B[2m${e}\x1B[22m`}function Vt(e){return`\x1B[34m${e}\x1B[39m`}var Rt=T(require("@jridgewell/remapping")),U=require("lightningcss"),Ot=T(require("magic-string"));function ai(e,{file:r="input.css",minify:t=!1,map:i}={}){function o(a,u){return(0,U.transform)({filename:r,code:a,minify:t,sourceMap:typeof u<"u",inputSourceMap:u,drafts:{customMedia:!0},nonStandard:{deepSelectorCombinator:!0},include:U.Features.Nesting|U.Features.MediaQueries,exclude:U.Features.LogicalProperties|U.Features.DirSelector|U.Features.LightDark,targets:{safari:16<<16|1024,ios_saf:16<<16|1024,firefox:8388608,chrome:7274496},errorRecovery:!0})}let l=o(Buffer.from(e),i);if(i=l.map?.toString(),l.warnings=l.warnings.filter(a=>!/'(deep|slotted|global)' is not recognized as a valid pseudo-/.test(a.message)),l.warnings.length>0){let a=e.split(` +`),u=[`Found ${l.warnings.length} ${l.warnings.length===1?"warning":"warnings"} while optimizing generated CSS:`];for(let[p,c]of l.warnings.entries()){u.push(""),l.warnings.length>1&&u.push(`Issue #${p+1}:`);let f=2,d=Math.max(0,c.loc.line-f-1),m=Math.min(a.length,c.loc.line+f),x=a.slice(d,m).map((h,L)=>d+L+1===c.loc.line?`${ie("\u2502")} ${h}`:ie(`\u2502 ${h}`));x.splice(c.loc.line-d,0,`${ie("\u2506")}${" ".repeat(c.loc.column-1)} ${si(`${ie("^--")} ${c.message}`)}`,`${ie("\u2506")}`),u.push(...x)}u.push(""),console.warn(u.join(` +`))}l=o(l.code,i),i=l.map?.toString();let n=l.code.toString(),s=new Ot.default(n);if(s.replaceAll("@media not (","@media not all and ("),i!==void 0&&s.hasChanged()){let a=s.generateMap({source:"original",hires:"boundary"}).toString();i=(0,Rt.default)([a,i],()=>null).toString()}return n=s.toString(),{code:n,map:i}}function ie(e){return`\x1B[2m${e}\x1B[22m`}function si(e){return`\x1B[33m${e}\x1B[39m`}var Pt=require("source-map-js");function ui(e){let r=new Pt.SourceMapGenerator,t=1,i=new g(o=>({url:o?.url??``,content:o?.content??""}));for(let o of e.mappings){let l=i.get(o.originalPosition?.source??null);r.addMapping({generated:o.generatedPosition,original:o.originalPosition,source:l.url,name:o.name}),r.setSourceContent(l.url,l.content)}return r.toString()}function ci(e){let r=typeof e=="string"?e:ui(e);function t(i){return`/*# sourceMappingURL=${i} */ +`}return{raw:r,get inline(){let i=Buffer.from(r,"utf-8").toString("base64");return t(`data:application/json;base64,${i}`)},comment:t}}process.versions.bun||_t.register?.((0,It.pathToFileURL)(require.resolve("@tailwindcss/node/esm-cache-loader")));0&&(module.exports={Features,Instrumentation,Polyfills,__unstable__loadDesignSystem,compile,compileAst,env,loadModule,normalizePath,optimize,toSourceMap}); diff --git a/node_modules/@tailwindcss/node/dist/index.mjs b/node_modules/@tailwindcss/node/dist/index.mjs new file mode 100644 index 0000000000..224ebf79b8 --- /dev/null +++ b/node_modules/@tailwindcss/node/dist/index.mjs @@ -0,0 +1,18 @@ +var $t=Object.defineProperty;var Tt=(e,r)=>{for(var t in r)$t(e,t,{get:r[t],enumerable:!0})};import*as ce from"module";import{pathToFileURL as Xr}from"url";var pe={};Tt(pe,{DEBUG:()=>fe});var fe=Et(process.env.DEBUG);function Et(e){if(typeof e=="boolean")return e;if(e===void 0)return!1;if(e==="true"||e==="1")return!0;if(e==="false"||e==="0")return!1;if(e==="*")return!0;let r=e.split(",").map(t=>t.split(":")[0]);return r.includes("-tailwindcss")?!1:!!r.includes("tailwindcss")}import F from"enhanced-resolve";import{createJiti as zr}from"jiti";import Re from"fs";import wt from"fs/promises";import se from"path";import{pathToFileURL as gt}from"url";import{__unstable__loadDesignSystem as Kr,compile as Mr,compileAst as Fr,Features as nu,Polyfills as ou}from"tailwindcss";import de from"fs/promises";import j from"path";var Nt=[/import[\s\S]*?['"](.{3,}?)['"]/gi,/import[\s\S]*from[\s\S]*?['"](.{3,}?)['"]/gi,/export[\s\S]*from[\s\S]*?['"](.{3,}?)['"]/gi,/require\(['"`](.+)['"`]\)/gi],Vt=[".js",".cjs",".mjs"],Rt=["",".js",".cjs",".mjs",".ts",".cts",".mts",".jsx",".tsx"],Ot=["",".ts",".cts",".mts",".tsx",".js",".cjs",".mjs",".jsx"];async function Pt(e,r){for(let t of r){let i=`${e}${t}`;if((await de.stat(i).catch(()=>null))?.isFile())return i}for(let t of r){let i=`${e}/index${t}`;if(await de.access(i).then(()=>!0,()=>!1))return i}return null}async function Pe(e,r,t,i){let o=Vt.includes(i)?Rt:Ot,l=await Pt(j.resolve(t,r),o);if(l===null||e.has(l))return;e.add(l),t=j.dirname(l),i=j.extname(l);let n=await de.readFile(l,"utf-8"),s=[];for(let a of Nt)for(let u of n.matchAll(a))u[1].startsWith(".")&&s.push(Pe(e,u[1],t,i));await Promise.all(s)}async function _e(e){let r=new Set;return await Pe(r,e,j.dirname(e),j.extname(e)),Array.from(r)}import*as Ee from"path";function M(e){return{kind:"word",value:e}}function _t(e,r){return{kind:"function",value:e,nodes:r}}function It(e){return{kind:"separator",value:e}}function S(e){let r="";for(let t of e)switch(t.kind){case"word":case"separator":{r+=t.value;break}case"function":r+=t.value+"("+S(t.nodes)+")"}return r}var Ie=92,Dt=41,De=58,Ue=44,Ut=34,Le=61,ze=62,Ke=60,Me=10,Lt=40,zt=39,Kt=47,Fe=32,je=9;function A(e){e=e.replaceAll(`\r +`,` +`);let r=[],t=[],i=null,o="",l;for(let n=0;n0){let u=M(o);i?i.nodes.push(u):r.push(u),o=""}let a=M(e[n]);i?i.nodes.push(a):r.push(a);break}case De:case Ue:case Le:case ze:case Ke:case Me:case Fe:case je:{if(o.length>0){let c=M(o);i?i.nodes.push(c):r.push(c),o=""}let a=n,u=n+1;for(;u0){let u=M(o);a?.nodes.push(u),o=""}t.length>0?i=t[t.length-1]:i=null;break}default:o+=String.fromCharCode(s)}}return o.length>0&&r.push(M(o)),r}var g=class extends Map{constructor(t){super();this.factory=t}get(t){let i=super.get(t);return i===void 0&&(i=this.factory(t,this),this.set(t,i)),i}};var ui=new Uint8Array(256);var te=new Uint8Array(256);function w(e,r){let t=0,i=[],o=0,l=e.length,n=r.charCodeAt(0);for(let s=0;s0&&a===te[t-1]&&t--;break}}return i.push(e.slice(o)),i}var me=(n=>(n[n.Continue=0]="Continue",n[n.Skip=1]="Skip",n[n.Stop=2]="Stop",n[n.Replace=3]="Replace",n[n.ReplaceSkip=4]="ReplaceSkip",n[n.ReplaceStop=5]="ReplaceStop",n))(me||{}),k={Continue:{kind:0},Skip:{kind:1},Stop:{kind:2},Replace:e=>({kind:3,nodes:Array.isArray(e)?e:[e]}),ReplaceSkip:e=>({kind:4,nodes:Array.isArray(e)?e:[e]}),ReplaceStop:e=>({kind:5,nodes:Array.isArray(e)?e:[e]})};function v(e,r){typeof r=="function"?We(e,r):We(e,r.enter,r.exit)}function We(e,r=()=>k.Continue,t=()=>k.Continue){let i={value:[e,0,null],prev:null},o={parent:null,depth:0,path(){let l=[],n=i;for(;n;){let s=n.value[2];s&&l.push(s),n=n.prev}return l.reverse(),l}};for(;i!==null;){let l=i.value,n=l[0],s=l[1],a=l[2];if(s>=n.length){i=i.prev,o.depth-=1;continue}if(o.parent=a,s>=0){let f=n[s],d=r(f,o)??k.Continue;switch(d.kind){case 0:{f.nodes&&f.nodes.length>0&&(o.depth+=1,i={value:[f.nodes,0,f],prev:i}),l[1]=~s;continue}case 2:return;case 1:{l[1]=~s;continue}case 3:{n.splice(s,1,...d.nodes);continue}case 5:{n.splice(s,1,...d.nodes);return}case 4:{n.splice(s,1,...d.nodes),l[1]+=d.nodes.length;continue}default:throw new Error(`Invalid \`WalkAction.${me[d.kind]??`Unknown(${d.kind})`}\` in enter.`)}}let u=~s,p=n[u],c=t(p,o)??k.Continue;switch(c.kind){case 0:l[1]=u+1;continue;case 2:return;case 3:{n.splice(u,1,...c.nodes),l[1]=u+c.nodes.length;continue}case 5:{n.splice(u,1,...c.nodes);return}case 4:{n.splice(u,1,...c.nodes),l[1]=u+c.nodes.length;continue}default:throw new Error(`Invalid \`WalkAction.${me[c.kind]??`Unknown(${c.kind})`}\` in exit.`)}}}var yi=new g(e=>{let r=A(e),t=new Set;return v(r,(i,o)=>{let l=o.parent===null?r:o.parent.nodes??[];if(i.kind==="word"&&(i.value==="+"||i.value==="-"||i.value==="*"||i.value==="/")){let n=l.indexOf(i)??-1;if(n===-1)return;let s=l[n-1];if(s?.kind!=="separator"||s.value!==" ")return;let a=l[n+1];if(a?.kind!=="separator"||a.value!==" ")return;t.add(s),t.add(a)}else i.kind==="separator"&&i.value.length>0&&i.value.trim()===""?(l[0]===i||l[l.length-1]===i)&&t.add(i):i.kind==="separator"&&i.value.trim()===","&&(i.value=",")}),t.size>0&&v(r,i=>{if(t.has(i))return t.delete(i),k.ReplaceSkip([])}),ge(r),S(r)});var bi=new g(e=>{let r=A(e);return r.length===3&&r[0].kind==="word"&&r[0].value==="&"&&r[1].kind==="separator"&&r[1].value===":"&&r[2].kind==="function"&&r[2].value==="is"?S(r[2].nodes):e});function ge(e){for(let r of e)switch(r.kind){case"function":{if(r.value==="url"||r.value.endsWith("_url")){r.value=W(r.value);break}if(r.value==="var"||r.value.endsWith("_var")||r.value==="theme"||r.value.endsWith("_theme")){r.value=W(r.value);for(let t=0;t{let r=A(e);return r.length===1&&r[0].kind==="function"&&r[0].value==="var"});function Mt(e){throw new Error(`Unexpected value: ${e}`)}function W(e){return e.replaceAll("_",String.raw`\_`).replaceAll(" ","_")}var Ft=process.env.FEATURES_ENV!=="stable";var O=/[+-]?\d*\.?\d+(?:[eE][+-]?\d+)?/,Pi=new RegExp(`^${O.source}$`);var _i=new RegExp(`^${O.source}%$`);var Ii=new RegExp(`^${O.source}\\s*/\\s*${O.source}$`);var jt=["cm","mm","Q","in","pc","pt","px","em","ex","ch","rem","lh","rlh","vw","vh","vmin","vmax","vb","vi","svw","svh","lvw","lvh","dvw","dvh","cqw","cqh","cqi","cqb","cqmin","cqmax"],Di=new RegExp(`^${O.source}(${jt.join("|")})$`);var Wt=["deg","rad","grad","turn"],Ui=new RegExp(`^${O.source}(${Wt.join("|")})$`);var Li=new RegExp(`^${O.source} +${O.source} +${O.source}$`);function C(e){let r=Number(e);return Number.isInteger(r)&&r>=0&&String(r)===String(e)}function B(e,r){if(r===null)return e;let t=Number(r);return Number.isNaN(t)||(r=`${t*100}%`),r==="100%"?e:`color-mix(in oklab, ${e} ${r}, transparent)`}var Yt={"--alpha":Gt,"--spacing":Ht,"--theme":qt,theme:Zt};function Gt(e,r,t,...i){let[o,l]=w(t,"/").map(n=>n.trim());if(!o||!l)throw new Error(`The --alpha(\u2026) function requires a color and an alpha value, e.g.: \`--alpha(${o||"var(--my-color)"} / ${l||"50%"})\``);if(i.length>0)throw new Error(`The --alpha(\u2026) function only accepts one argument, e.g.: \`--alpha(${o||"var(--my-color)"} / ${l||"50%"})\``);return B(o,l)}function Ht(e,r,t,...i){if(!t)throw new Error("The --spacing(\u2026) function requires an argument, but received none.");if(i.length>0)throw new Error(`The --spacing(\u2026) function only accepts a single argument, but received ${i.length+1}.`);let o=e.theme.resolve(null,["--spacing"]);if(!o)throw new Error("The --spacing(\u2026) function requires that the `--spacing` theme variable exists, but it was not found.");return`calc(${o} * ${t})`}function qt(e,r,t,...i){if(!t.startsWith("--"))throw new Error("The --theme(\u2026) function can only be used with CSS variables from your theme.");let o=!1;t.endsWith(" inline")&&(o=!0,t=t.slice(0,-7)),r.kind==="at-rule"&&(o=!0);let l=e.resolveThemeValue(t,o);if(!l){if(i.length>0)return i.join(", ");throw new Error(`Could not resolve value for theme function: \`theme(${t})\`. Consider checking if the variable name is correct or provide a fallback value to silence this error.`)}if(i.length===0)return l;let n=i.join(", ");if(n==="initial")return l;if(l==="initial")return n;if(l.startsWith("var(")||l.startsWith("theme(")||l.startsWith("--theme(")){let s=A(l);return Jt(s,n),S(s)}return l}function Zt(e,r,t,...i){t=Qt(t);let o=e.resolveThemeValue(t);if(!o&&i.length>0)return i.join(", ");if(!o)throw new Error(`Could not resolve value for theme function: \`theme(${t})\`. Consider checking if the path is correct or provide a fallback value to silence this error.`);return o}var an=new RegExp(Object.keys(Yt).map(e=>`${e}\\(`).join("|"));function Qt(e){if(e[0]!=="'"&&e[0]!=='"')return e;let r="",t=e[0];for(let i=1;i{if(t.kind==="function"&&!(t.value!=="var"&&t.value!=="theme"&&t.value!=="--theme"))if(t.nodes.length===1)t.nodes.push({kind:"word",value:`, ${r}`});else{let i=t.nodes[t.nodes.length-1];i.kind==="word"&&i.value==="initial"&&(i.value=r)}})}var er=/^(?[-+]?(?:\d*\.)?\d+)(?[a-z]+|%)?$/i,He=new g(e=>{let r=er.exec(e);if(!r)return null;let t=r.groups?.value;if(t===void 0)return null;let i=Number(t);if(Number.isNaN(i))return null;let o=r.groups?.unit;return o===void 0?[i,null]:[i,o]});function qe(e,r="top",t="right",i="bottom",o="left"){return Ze(`${e}-${r}`,`${e}-${t}`,`${e}-${i}`,`${e}-${o}`)}function Ze(e="top",r="right",t="bottom",i="left"){return{1:[[e,0],[r,0],[t,0],[i,0]],2:[[e,0],[r,1],[t,0],[i,1]],3:[[e,0],[r,1],[t,2],[i,1]],4:[[e,0],[r,1],[t,2],[i,3]]}}function U(e,r){return{1:[[e,0],[r,0]],2:[[e,0],[r,1]]}}var Sn={inset:Ze(),margin:qe("margin"),padding:qe("padding"),gap:U("row-gap","column-gap")},$n={"inset-block":U("top","bottom"),"inset-inline":U("left","right"),"margin-block":U("margin-top","margin-bottom"),"margin-inline":U("margin-left","margin-right"),"padding-block":U("padding-top","padding-bottom"),"padding-inline":U("padding-left","padding-right")};var to=Symbol();var ro=Symbol();var io=Symbol();var no=Symbol();var oo=Symbol();var lo=Symbol();var ao=Symbol();var so=Symbol();var uo=Symbol();var co=Symbol();var fo=Symbol();var po=Symbol();var mo=Symbol();function we(e){let r=[0];for(let o=0;o0;){let a=(n|0)>>1,u=l+a;r[u]<=o?(l=u+1,n=n-a-1):n=a}l-=1;let s=o-r[l];return{line:l+1,column:s}}function i({line:o,column:l}){o-=1,o=Math.min(Math.max(o,0),r.length-1);let n=r[o],s=r[o+1]??n;return Math.min(Math.max(n+l,0),s)}return{find:t,findOffset:i}}var H=92,ie=47,ne=42,tt=34,rt=39,pr=58,oe=59,T=10,le=13,q=32,Z=9,it=123,ye=125,Ae=40,nt=41,dr=91,mr=93,ot=45,be=64,gr=33,E=class e extends Error{loc;constructor(r,t){if(t){let i=t[0],o=we(i.code).find(t[1]);r=`${i.file}:${o.line}:${o.column+1}: ${r}`}super(r),this.name="CssSyntaxError",this.loc=t,Error.captureStackTrace&&Error.captureStackTrace(this,e)}};function J(e,r){let t=r?.from?{file:r.from,code:e}:null;e[0]==="\uFEFF"&&(e=" "+e.slice(1));let i=[],o=[],l=[],n=null,s=null,a="",u="",p=0,c;for(let f=0;f0&&e[y]===m[m.length-1]&&(m=m.slice(0,-1));let I=xe(a,h);if(!I)throw new E("Invalid custom property, expected a value",t?[t,x,f]:null);t&&(I.src=[t,x,f],I.dst=[t,x,f]),n?n.nodes.push(I):i.push(I),a=""}else if(d===oe&&a.charCodeAt(0)===be)s=Q(a),t&&(s.src=[t,p,f],s.dst=[t,p,f]),n?n.nodes.push(s):i.push(s),a="",s=null;else if(d===oe&&u[u.length-1]!==")"){let m=xe(a);if(!m){if(a.length===0)continue;throw new E(`Invalid declaration: \`${a.trim()}\``,t?[t,p,f]:null)}t&&(m.src=[t,p,f],m.dst=[t,p,f]),n?n.nodes.push(m):i.push(m),a=""}else if(d===it&&u[u.length-1]!==")")u+="}",s=P(a.trim()),t&&(s.src=[t,p,f],s.dst=[t,p,f]),n&&n.nodes.push(s),l.push(n),n=s,a="",s=null;else if(d===ye&&u[u.length-1]!==")"){if(u==="")throw new E("Missing opening {",t?[t,f,f]:null);if(u=u.slice(0,-1),a.length>0)if(a.charCodeAt(0)===be)s=Q(a),t&&(s.src=[t,p,f],s.dst=[t,p,f]),n?n.nodes.push(s):i.push(s),a="",s=null;else{let x=a.indexOf(":");if(n){let h=xe(a,x);if(!h)throw new E(`Invalid declaration: \`${a.trim()}\``,t?[t,p,f]:null);t&&(h.src=[t,p,f],h.dst=[t,p,f]),n.nodes.push(h)}}let m=l.pop()??null;m===null&&n&&i.push(n),n=m,a="",s=null}else if(d===Ae)u+=")",a+="(";else if(d===nt){if(u[u.length-1]!==")")throw new E("Missing opening (",t?[t,f,f]:null);u=u.slice(0,-1),a+=")"}else{if(a.length===0&&(d===q||d===T||d===Z))continue;a===""&&(p=f),a+=String.fromCharCode(d)}}}if(a.charCodeAt(0)===be){let f=Q(a);t&&(f.src=[t,p,e.length],f.dst=[t,p,e.length]),i.push(f)}if(u.length>0&&n){if(n.kind==="rule")throw new E(`Missing closing } at ${n.selector}`,n.src?[n.src[0],n.src[1],n.src[1]]:null);if(n.kind==="at-rule")throw new E(`Missing closing } at ${n.name} ${n.params}`,n.src?[n.src[0],n.src[1],n.src[1]]:null)}return o.length>0?o.concat(i):i}function Q(e,r=[]){let t=e,i="";for(let o=5;o{if(C(e.value))return e.value}),b=z(e=>{if(C(e.value))return`${e.value}%`}),_=z(e=>{if(C(e.value))return`${e.value}px`}),st=z(e=>{if(C(e.value))return`${e.value}ms`}),ae=z(e=>{if(C(e.value))return`${e.value}deg`}),yr=z(e=>{if(e.fraction===null)return;let[r,t]=w(e.fraction,"/");if(!(!C(r)||!C(t)))return e.fraction}),ut=z(e=>{if(C(Number(e.value)))return`repeat(${e.value}, minmax(0, 1fr))`}),br={accentColor:({theme:e})=>e("colors"),animation:{none:"none",spin:"spin 1s linear infinite",ping:"ping 1s cubic-bezier(0, 0, 0.2, 1) infinite",pulse:"pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite",bounce:"bounce 1s infinite"},aria:{busy:'busy="true"',checked:'checked="true"',disabled:'disabled="true"',expanded:'expanded="true"',hidden:'hidden="true"',pressed:'pressed="true"',readonly:'readonly="true"',required:'required="true"',selected:'selected="true"'},aspectRatio:{auto:"auto",square:"1 / 1",video:"16 / 9",...yr},backdropBlur:({theme:e})=>e("blur"),backdropBrightness:({theme:e})=>({...e("brightness"),...b}),backdropContrast:({theme:e})=>({...e("contrast"),...b}),backdropGrayscale:({theme:e})=>({...e("grayscale"),...b}),backdropHueRotate:({theme:e})=>({...e("hueRotate"),...ae}),backdropInvert:({theme:e})=>({...e("invert"),...b}),backdropOpacity:({theme:e})=>({...e("opacity"),...b}),backdropSaturate:({theme:e})=>({...e("saturate"),...b}),backdropSepia:({theme:e})=>({...e("sepia"),...b}),backgroundColor:({theme:e})=>e("colors"),backgroundImage:{none:"none","gradient-to-t":"linear-gradient(to top, var(--tw-gradient-stops))","gradient-to-tr":"linear-gradient(to top right, var(--tw-gradient-stops))","gradient-to-r":"linear-gradient(to right, var(--tw-gradient-stops))","gradient-to-br":"linear-gradient(to bottom right, var(--tw-gradient-stops))","gradient-to-b":"linear-gradient(to bottom, var(--tw-gradient-stops))","gradient-to-bl":"linear-gradient(to bottom left, var(--tw-gradient-stops))","gradient-to-l":"linear-gradient(to left, var(--tw-gradient-stops))","gradient-to-tl":"linear-gradient(to top left, var(--tw-gradient-stops))"},backgroundOpacity:({theme:e})=>e("opacity"),backgroundPosition:{bottom:"bottom",center:"center",left:"left","left-bottom":"left bottom","left-top":"left top",right:"right","right-bottom":"right bottom","right-top":"right top",top:"top"},backgroundSize:{auto:"auto",cover:"cover",contain:"contain"},blur:{0:"0",none:"",sm:"4px",DEFAULT:"8px",md:"12px",lg:"16px",xl:"24px","2xl":"40px","3xl":"64px"},borderColor:({theme:e})=>({DEFAULT:"currentcolor",...e("colors")}),borderOpacity:({theme:e})=>e("opacity"),borderRadius:{none:"0px",sm:"0.125rem",DEFAULT:"0.25rem",md:"0.375rem",lg:"0.5rem",xl:"0.75rem","2xl":"1rem","3xl":"1.5rem",full:"9999px"},borderSpacing:({theme:e})=>e("spacing"),borderWidth:{DEFAULT:"1px",0:"0px",2:"2px",4:"4px",8:"8px",..._},boxShadow:{sm:"0 1px 2px 0 rgb(0 0 0 / 0.05)",DEFAULT:"0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)",md:"0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)",lg:"0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)",xl:"0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)","2xl":"0 25px 50px -12px rgb(0 0 0 / 0.25)",inner:"inset 0 2px 4px 0 rgb(0 0 0 / 0.05)",none:"none"},boxShadowColor:({theme:e})=>e("colors"),brightness:{0:"0",50:".5",75:".75",90:".9",95:".95",100:"1",105:"1.05",110:"1.1",125:"1.25",150:"1.5",200:"2",...b},caretColor:({theme:e})=>e("colors"),colors:()=>({...$e}),columns:{auto:"auto",1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",10:"10",11:"11",12:"12","3xs":"16rem","2xs":"18rem",xs:"20rem",sm:"24rem",md:"28rem",lg:"32rem",xl:"36rem","2xl":"42rem","3xl":"48rem","4xl":"56rem","5xl":"64rem","6xl":"72rem","7xl":"80rem",...N},container:{},content:{none:"none"},contrast:{0:"0",50:".5",75:".75",100:"1",125:"1.25",150:"1.5",200:"2",...b},cursor:{auto:"auto",default:"default",pointer:"pointer",wait:"wait",text:"text",move:"move",help:"help","not-allowed":"not-allowed",none:"none","context-menu":"context-menu",progress:"progress",cell:"cell",crosshair:"crosshair","vertical-text":"vertical-text",alias:"alias",copy:"copy","no-drop":"no-drop",grab:"grab",grabbing:"grabbing","all-scroll":"all-scroll","col-resize":"col-resize","row-resize":"row-resize","n-resize":"n-resize","e-resize":"e-resize","s-resize":"s-resize","w-resize":"w-resize","ne-resize":"ne-resize","nw-resize":"nw-resize","se-resize":"se-resize","sw-resize":"sw-resize","ew-resize":"ew-resize","ns-resize":"ns-resize","nesw-resize":"nesw-resize","nwse-resize":"nwse-resize","zoom-in":"zoom-in","zoom-out":"zoom-out"},divideColor:({theme:e})=>e("borderColor"),divideOpacity:({theme:e})=>e("borderOpacity"),divideWidth:({theme:e})=>({...e("borderWidth"),..._}),dropShadow:{sm:"0 1px 1px rgb(0 0 0 / 0.05)",DEFAULT:["0 1px 2px rgb(0 0 0 / 0.1)","0 1px 1px rgb(0 0 0 / 0.06)"],md:["0 4px 3px rgb(0 0 0 / 0.07)","0 2px 2px rgb(0 0 0 / 0.06)"],lg:["0 10px 8px rgb(0 0 0 / 0.04)","0 4px 3px rgb(0 0 0 / 0.1)"],xl:["0 20px 13px rgb(0 0 0 / 0.03)","0 8px 5px rgb(0 0 0 / 0.08)"],"2xl":"0 25px 25px rgb(0 0 0 / 0.15)",none:"0 0 #0000"},fill:({theme:e})=>e("colors"),flex:{1:"1 1 0%",auto:"1 1 auto",initial:"0 1 auto",none:"none"},flexBasis:({theme:e})=>({auto:"auto","1/2":"50%","1/3":"33.333333%","2/3":"66.666667%","1/4":"25%","2/4":"50%","3/4":"75%","1/5":"20%","2/5":"40%","3/5":"60%","4/5":"80%","1/6":"16.666667%","2/6":"33.333333%","3/6":"50%","4/6":"66.666667%","5/6":"83.333333%","1/12":"8.333333%","2/12":"16.666667%","3/12":"25%","4/12":"33.333333%","5/12":"41.666667%","6/12":"50%","7/12":"58.333333%","8/12":"66.666667%","9/12":"75%","10/12":"83.333333%","11/12":"91.666667%",full:"100%",...e("spacing")}),flexGrow:{0:"0",DEFAULT:"1",...N},flexShrink:{0:"0",DEFAULT:"1",...N},fontFamily:{sans:["ui-sans-serif","system-ui","sans-serif",'"Apple Color Emoji"','"Segoe UI Emoji"','"Segoe UI Symbol"','"Noto Color Emoji"'],serif:["ui-serif","Georgia","Cambria",'"Times New Roman"',"Times","serif"],mono:["ui-monospace","SFMono-Regular","Menlo","Monaco","Consolas",'"Liberation Mono"','"Courier New"',"monospace"]},fontSize:{xs:["0.75rem",{lineHeight:"1rem"}],sm:["0.875rem",{lineHeight:"1.25rem"}],base:["1rem",{lineHeight:"1.5rem"}],lg:["1.125rem",{lineHeight:"1.75rem"}],xl:["1.25rem",{lineHeight:"1.75rem"}],"2xl":["1.5rem",{lineHeight:"2rem"}],"3xl":["1.875rem",{lineHeight:"2.25rem"}],"4xl":["2.25rem",{lineHeight:"2.5rem"}],"5xl":["3rem",{lineHeight:"1"}],"6xl":["3.75rem",{lineHeight:"1"}],"7xl":["4.5rem",{lineHeight:"1"}],"8xl":["6rem",{lineHeight:"1"}],"9xl":["8rem",{lineHeight:"1"}]},fontWeight:{thin:"100",extralight:"200",light:"300",normal:"400",medium:"500",semibold:"600",bold:"700",extrabold:"800",black:"900"},gap:({theme:e})=>e("spacing"),gradientColorStops:({theme:e})=>e("colors"),gradientColorStopPositions:{"0%":"0%","5%":"5%","10%":"10%","15%":"15%","20%":"20%","25%":"25%","30%":"30%","35%":"35%","40%":"40%","45%":"45%","50%":"50%","55%":"55%","60%":"60%","65%":"65%","70%":"70%","75%":"75%","80%":"80%","85%":"85%","90%":"90%","95%":"95%","100%":"100%",...b},grayscale:{0:"0",DEFAULT:"100%",...b},gridAutoColumns:{auto:"auto",min:"min-content",max:"max-content",fr:"minmax(0, 1fr)"},gridAutoRows:{auto:"auto",min:"min-content",max:"max-content",fr:"minmax(0, 1fr)"},gridColumn:{auto:"auto","span-1":"span 1 / span 1","span-2":"span 2 / span 2","span-3":"span 3 / span 3","span-4":"span 4 / span 4","span-5":"span 5 / span 5","span-6":"span 6 / span 6","span-7":"span 7 / span 7","span-8":"span 8 / span 8","span-9":"span 9 / span 9","span-10":"span 10 / span 10","span-11":"span 11 / span 11","span-12":"span 12 / span 12","span-full":"1 / -1"},gridColumnEnd:{auto:"auto",1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",10:"10",11:"11",12:"12",13:"13",...N},gridColumnStart:{auto:"auto",1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",10:"10",11:"11",12:"12",13:"13",...N},gridRow:{auto:"auto","span-1":"span 1 / span 1","span-2":"span 2 / span 2","span-3":"span 3 / span 3","span-4":"span 4 / span 4","span-5":"span 5 / span 5","span-6":"span 6 / span 6","span-7":"span 7 / span 7","span-8":"span 8 / span 8","span-9":"span 9 / span 9","span-10":"span 10 / span 10","span-11":"span 11 / span 11","span-12":"span 12 / span 12","span-full":"1 / -1"},gridRowEnd:{auto:"auto",1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",10:"10",11:"11",12:"12",13:"13",...N},gridRowStart:{auto:"auto",1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",10:"10",11:"11",12:"12",13:"13",...N},gridTemplateColumns:{none:"none",subgrid:"subgrid",1:"repeat(1, minmax(0, 1fr))",2:"repeat(2, minmax(0, 1fr))",3:"repeat(3, minmax(0, 1fr))",4:"repeat(4, minmax(0, 1fr))",5:"repeat(5, minmax(0, 1fr))",6:"repeat(6, minmax(0, 1fr))",7:"repeat(7, minmax(0, 1fr))",8:"repeat(8, minmax(0, 1fr))",9:"repeat(9, minmax(0, 1fr))",10:"repeat(10, minmax(0, 1fr))",11:"repeat(11, minmax(0, 1fr))",12:"repeat(12, minmax(0, 1fr))",...ut},gridTemplateRows:{none:"none",subgrid:"subgrid",1:"repeat(1, minmax(0, 1fr))",2:"repeat(2, minmax(0, 1fr))",3:"repeat(3, minmax(0, 1fr))",4:"repeat(4, minmax(0, 1fr))",5:"repeat(5, minmax(0, 1fr))",6:"repeat(6, minmax(0, 1fr))",7:"repeat(7, minmax(0, 1fr))",8:"repeat(8, minmax(0, 1fr))",9:"repeat(9, minmax(0, 1fr))",10:"repeat(10, minmax(0, 1fr))",11:"repeat(11, minmax(0, 1fr))",12:"repeat(12, minmax(0, 1fr))",...ut},height:({theme:e})=>({auto:"auto","1/2":"50%","1/3":"33.333333%","2/3":"66.666667%","1/4":"25%","2/4":"50%","3/4":"75%","1/5":"20%","2/5":"40%","3/5":"60%","4/5":"80%","1/6":"16.666667%","2/6":"33.333333%","3/6":"50%","4/6":"66.666667%","5/6":"83.333333%",full:"100%",screen:"100vh",svh:"100svh",lvh:"100lvh",dvh:"100dvh",min:"min-content",max:"max-content",fit:"fit-content",...e("spacing")}),hueRotate:{0:"0deg",15:"15deg",30:"30deg",60:"60deg",90:"90deg",180:"180deg",...ae},inset:({theme:e})=>({auto:"auto","1/2":"50%","1/3":"33.333333%","2/3":"66.666667%","1/4":"25%","2/4":"50%","3/4":"75%",full:"100%",...e("spacing")}),invert:{0:"0",DEFAULT:"100%",...b},keyframes:{spin:{to:{transform:"rotate(360deg)"}},ping:{"75%, 100%":{transform:"scale(2)",opacity:"0"}},pulse:{"50%":{opacity:".5"}},bounce:{"0%, 100%":{transform:"translateY(-25%)",animationTimingFunction:"cubic-bezier(0.8,0,1,1)"},"50%":{transform:"none",animationTimingFunction:"cubic-bezier(0,0,0.2,1)"}}},letterSpacing:{tighter:"-0.05em",tight:"-0.025em",normal:"0em",wide:"0.025em",wider:"0.05em",widest:"0.1em"},lineHeight:{none:"1",tight:"1.25",snug:"1.375",normal:"1.5",relaxed:"1.625",loose:"2",3:".75rem",4:"1rem",5:"1.25rem",6:"1.5rem",7:"1.75rem",8:"2rem",9:"2.25rem",10:"2.5rem"},listStyleType:{none:"none",disc:"disc",decimal:"decimal"},listStyleImage:{none:"none"},margin:({theme:e})=>({auto:"auto",...e("spacing")}),lineClamp:{1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",...N},maxHeight:({theme:e})=>({none:"none",full:"100%",screen:"100vh",svh:"100svh",lvh:"100lvh",dvh:"100dvh",min:"min-content",max:"max-content",fit:"fit-content",...e("spacing")}),maxWidth:({theme:e})=>({none:"none",xs:"20rem",sm:"24rem",md:"28rem",lg:"32rem",xl:"36rem","2xl":"42rem","3xl":"48rem","4xl":"56rem","5xl":"64rem","6xl":"72rem","7xl":"80rem",full:"100%",min:"min-content",max:"max-content",fit:"fit-content",prose:"65ch",...e("spacing")}),minHeight:({theme:e})=>({full:"100%",screen:"100vh",svh:"100svh",lvh:"100lvh",dvh:"100dvh",min:"min-content",max:"max-content",fit:"fit-content",...e("spacing")}),minWidth:({theme:e})=>({full:"100%",min:"min-content",max:"max-content",fit:"fit-content",...e("spacing")}),objectPosition:{bottom:"bottom",center:"center",left:"left","left-bottom":"left bottom","left-top":"left top",right:"right","right-bottom":"right bottom","right-top":"right top",top:"top"},opacity:{0:"0",5:"0.05",10:"0.1",15:"0.15",20:"0.2",25:"0.25",30:"0.3",35:"0.35",40:"0.4",45:"0.45",50:"0.5",55:"0.55",60:"0.6",65:"0.65",70:"0.7",75:"0.75",80:"0.8",85:"0.85",90:"0.9",95:"0.95",100:"1",...b},order:{first:"-9999",last:"9999",none:"0",1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",10:"10",11:"11",12:"12",...N},outlineColor:({theme:e})=>e("colors"),outlineOffset:{0:"0px",1:"1px",2:"2px",4:"4px",8:"8px",..._},outlineWidth:{0:"0px",1:"1px",2:"2px",4:"4px",8:"8px",..._},padding:({theme:e})=>e("spacing"),placeholderColor:({theme:e})=>e("colors"),placeholderOpacity:({theme:e})=>e("opacity"),ringColor:({theme:e})=>({DEFAULT:"currentcolor",...e("colors")}),ringOffsetColor:({theme:e})=>e("colors"),ringOffsetWidth:{0:"0px",1:"1px",2:"2px",4:"4px",8:"8px",..._},ringOpacity:({theme:e})=>({DEFAULT:"0.5",...e("opacity")}),ringWidth:{DEFAULT:"3px",0:"0px",1:"1px",2:"2px",4:"4px",8:"8px",..._},rotate:{0:"0deg",1:"1deg",2:"2deg",3:"3deg",6:"6deg",12:"12deg",45:"45deg",90:"90deg",180:"180deg",...ae},saturate:{0:"0",50:".5",100:"1",150:"1.5",200:"2",...b},scale:{0:"0",50:".5",75:".75",90:".9",95:".95",100:"1",105:"1.05",110:"1.1",125:"1.25",150:"1.5",...b},screens:{sm:"40rem",md:"48rem",lg:"64rem",xl:"80rem","2xl":"96rem"},scrollMargin:({theme:e})=>e("spacing"),scrollPadding:({theme:e})=>e("spacing"),sepia:{0:"0",DEFAULT:"100%",...b},skew:{0:"0deg",1:"1deg",2:"2deg",3:"3deg",6:"6deg",12:"12deg",...ae},space:({theme:e})=>e("spacing"),spacing:{px:"1px",0:"0px",.5:"0.125rem",1:"0.25rem",1.5:"0.375rem",2:"0.5rem",2.5:"0.625rem",3:"0.75rem",3.5:"0.875rem",4:"1rem",5:"1.25rem",6:"1.5rem",7:"1.75rem",8:"2rem",9:"2.25rem",10:"2.5rem",11:"2.75rem",12:"3rem",14:"3.5rem",16:"4rem",20:"5rem",24:"6rem",28:"7rem",32:"8rem",36:"9rem",40:"10rem",44:"11rem",48:"12rem",52:"13rem",56:"14rem",60:"15rem",64:"16rem",72:"18rem",80:"20rem",96:"24rem"},stroke:({theme:e})=>({none:"none",...e("colors")}),strokeWidth:{0:"0",1:"1",2:"2",...N},supports:{},data:{},textColor:({theme:e})=>e("colors"),textDecorationColor:({theme:e})=>e("colors"),textDecorationThickness:{auto:"auto","from-font":"from-font",0:"0px",1:"1px",2:"2px",4:"4px",8:"8px",..._},textIndent:({theme:e})=>e("spacing"),textOpacity:({theme:e})=>e("opacity"),textUnderlineOffset:{auto:"auto",0:"0px",1:"1px",2:"2px",4:"4px",8:"8px",..._},transformOrigin:{center:"center",top:"top","top-right":"top right",right:"right","bottom-right":"bottom right",bottom:"bottom","bottom-left":"bottom left",left:"left","top-left":"top left"},transitionDelay:{0:"0s",75:"75ms",100:"100ms",150:"150ms",200:"200ms",300:"300ms",500:"500ms",700:"700ms",1e3:"1000ms",...st},transitionDuration:{DEFAULT:"150ms",0:"0s",75:"75ms",100:"100ms",150:"150ms",200:"200ms",300:"300ms",500:"500ms",700:"700ms",1e3:"1000ms",...st},transitionProperty:{none:"none",all:"all",DEFAULT:"color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter",colors:"color, background-color, border-color, outline-color, text-decoration-color, fill, stroke",opacity:"opacity",shadow:"box-shadow",transform:"transform"},transitionTimingFunction:{DEFAULT:"cubic-bezier(0.4, 0, 0.2, 1)",linear:"linear",in:"cubic-bezier(0.4, 0, 1, 1)",out:"cubic-bezier(0, 0, 0.2, 1)","in-out":"cubic-bezier(0.4, 0, 0.2, 1)"},translate:({theme:e})=>({"1/2":"50%","1/3":"33.333333%","2/3":"66.666667%","1/4":"25%","2/4":"50%","3/4":"75%",full:"100%",...e("spacing")}),size:({theme:e})=>({auto:"auto","1/2":"50%","1/3":"33.333333%","2/3":"66.666667%","1/4":"25%","2/4":"50%","3/4":"75%","1/5":"20%","2/5":"40%","3/5":"60%","4/5":"80%","1/6":"16.666667%","2/6":"33.333333%","3/6":"50%","4/6":"66.666667%","5/6":"83.333333%","1/12":"8.333333%","2/12":"16.666667%","3/12":"25%","4/12":"33.333333%","5/12":"41.666667%","6/12":"50%","7/12":"58.333333%","8/12":"66.666667%","9/12":"75%","10/12":"83.333333%","11/12":"91.666667%",full:"100%",min:"min-content",max:"max-content",fit:"fit-content",...e("spacing")}),width:({theme:e})=>({auto:"auto","1/2":"50%","1/3":"33.333333%","2/3":"66.666667%","1/4":"25%","2/4":"50%","3/4":"75%","1/5":"20%","2/5":"40%","3/5":"60%","4/5":"80%","1/6":"16.666667%","2/6":"33.333333%","3/6":"50%","4/6":"66.666667%","5/6":"83.333333%","1/12":"8.333333%","2/12":"16.666667%","3/12":"25%","4/12":"33.333333%","5/12":"41.666667%","6/12":"50%","7/12":"58.333333%","8/12":"66.666667%","9/12":"75%","10/12":"83.333333%","11/12":"91.666667%",full:"100%",screen:"100vw",svw:"100svw",lvw:"100lvw",dvw:"100dvw",min:"min-content",max:"max-content",fit:"fit-content",...e("spacing")}),willChange:{auto:"auto",scroll:"scroll-position",contents:"contents",transform:"transform"},zIndex:{auto:"auto",0:"0",10:"10",20:"20",30:"30",40:"40",50:"50",...N}};var Ar=64;function D(e,r=[]){return{kind:"rule",selector:e,nodes:r}}function $(e,r="",t=[]){return{kind:"at-rule",name:e,params:r,nodes:t}}function P(e,r=[]){return e.charCodeAt(0)===Ar?Q(e,r):D(e,r)}function V(e,r,t=!1){return{kind:"declaration",property:e,value:r,important:t}}function Se(e){return{kind:"comment",value:e}}function L(e,r){let t=0,i={file:null,code:""};function o(n,s=0){let a="",u=" ".repeat(s);if(n.kind==="declaration"){if(a+=`${u}${n.property}: ${n.value}${n.important?" !important":""}; +`,r){t+=u.length;let p=t;t+=n.property.length,t+=2,t+=n.value?.length??0,n.important&&(t+=11);let c=t;t+=2,n.dst=[i,p,c]}}else if(n.kind==="rule"){if(a+=`${u}${n.selector} { +`,r){t+=u.length;let p=t;t+=n.selector.length,t+=1;let c=t;n.dst=[i,p,c],t+=2}for(let p of n.nodes)a+=o(p,s+1);a+=`${u}} +`,r&&(t+=u.length,t+=2)}else if(n.kind==="at-rule"){if(n.nodes.length===0){let p=`${u}${n.name} ${n.params}; +`;if(r){t+=u.length;let c=t;t+=n.name.length,t+=1,t+=n.params.length;let f=t;t+=2,n.dst=[i,c,f]}return p}if(a+=`${u}${n.name}${n.params?` ${n.params} `:" "}{ +`,r){t+=u.length;let p=t;t+=n.name.length,n.params&&(t+=1,t+=n.params.length),t+=1;let c=t;n.dst=[i,p,c],t+=2}for(let p of n.nodes)a+=o(p,s+1);a+=`${u}} +`,r&&(t+=u.length,t+=2)}else if(n.kind==="comment"){if(a+=`${u}/*${n.value}*/ +`,r){t+=u.length;let p=t;t+=2+n.value.length+2;let c=t;n.dst=[i,p,c],t+=1}}else if(n.kind==="context"||n.kind==="at-root")return"";return a}let l="";for(let n of e)l+=o(n,0);return i.code=l,l}function Cr(e,r){if(typeof e!="string")throw new TypeError("expected path to be a string");if(e==="\\"||e==="/")return"/";var t=e.length;if(t<=1)return e;var i="";if(t>4&&e[3]==="\\"){var o=e[2];(o==="?"||o===".")&&e.slice(0,2)==="\\\\"&&(e=e.slice(2),i="//")}var l=e.split(/[/\\]+/);return r!==!1&&l[l.length-1]===""&&l.pop(),i+l.join("/")}function Te(e){let r=Cr(e);return e.startsWith("\\\\")&&r.startsWith("/")&&!r.startsWith("//")?`/${r}`:r}var Ne=/(?[\w-]+\([^)]*\)|"[^"]*"|'[^']*'|[^,]\S*[^,])\s*(?:\s(?\w[^,]+))?(?:,|$)/g,Vr=/(?$r.test(e),Pr=e=>Tr.test(e);async function ft({css:e,base:r,root:t}){if(!e.includes("url(")&&!e.includes("image-set("))return e;let i=J(e),o=[];function l(n){if(n[0]==="/")return n;let s=Ee.posix.join(Te(r),n),a=Ee.posix.relative(Te(t),s);return a.startsWith(".")||(a="./"+a),a}return v(i,n=>{if(n.kind!=="declaration"||!n.value)return;let s=Ne.test(n.value),a=ct.test(n.value);if(s||a){let u=a?_r:pt;o.push(u(n.value,l).then(p=>{n.value=p}))}}),o.length&&await Promise.all(o),L(i)}function pt(e,r){return mt(e,Ne,async t=>{let[i,o]=t;return await dt(o.trim(),i,r)})}async function _r(e,r){return await mt(e,ct,async t=>{let[,i]=t;return await Dr(i,async({url:l})=>Ne.test(l)?await pt(l,r):Sr.test(l)?l:await dt(l,l,r))})}async function dt(e,r,t,i="url"){let o="",l=e[0];if((l==='"'||l==="'")&&(o=l,e=e.slice(1,-1)),Ir(e))return r;let n=await t(e);return o===""&&n!==encodeURI(n)&&(o='"'),o==="'"&&n.includes("'")&&(o='"'),o==='"'&&n.includes('"')&&(n=n.replace(Vr,'\\"')),`${i}(${o}${n}${o})`}function Ir(e,r){return Pr(e)||Or(e)||!e[0].match(/[.a-zA-Z0-9_]/)||Er.test(e)}function Dr(e,r){return Promise.all(Ur(e).map(async({url:t,descriptor:i})=>({url:await r({url:t,descriptor:i}),descriptor:i}))).then(Lr)}function Ur(e){let r=e.trim().replace(Rr," ").replace(/\r?\n/,"").replace(/,\s+/,", ").replaceAll(/\s+/g," ").matchAll(Nr);return Array.from(r,({groups:t})=>({url:t?.url?.trim()??"",descriptor:t?.descriptor?.trim()??""})).filter(({url:t})=>!!t)}function Lr(e){return e.map(({url:r,descriptor:t})=>r+(t?` ${t}`:"")).join(", ")}async function mt(e,r,t){let i,o=e,l="";for(;i=r.exec(o);)l+=o.slice(0,i.index),l+=await t(i),o=o.slice(i.index+i[0].length);return l+=o,l}function yt({base:e,from:r,polyfills:t,onDependency:i,shouldRewriteUrls:o,customCssResolver:l,customJsResolver:n}){return{base:e,polyfills:t,from:r,async loadModule(s,a){return xt(s,a,i,n)},async loadStylesheet(s,a){let u=await At(s,a,i,l);return o&&(u.content=await ft({css:u.content,root:e,base:u.base})),u}}}async function bt(e){if(e.root&&e.root!=="none"){let r=/[*{]/,t=[];for(let o of e.root.pattern.split("/")){if(r.test(o))break;t.push(o)}if(!await wt.stat(se.resolve(e.root.base,t.join("/"))).then(o=>o.isDirectory()).catch(()=>!1))throw new Error(`The \`source(${e.root.pattern})\` does not exist or is not a directory.`)}}async function su(e,r){let t=await Fr(e,yt(r));return await bt(t),t}async function uu(e,r){let t=await Mr(e,yt(r));return await bt(t),t}async function cu(e,{base:r}){return Kr(e,{base:r,async loadModule(t,i){return xt(t,i,()=>{})},async loadStylesheet(t,i){return At(t,i,()=>{})}})}async function xt(e,r,t,i){if(e[0]!=="."){let s=await kt(e,r,i);if(!s)throw new Error(`Could not resolve '${e}' from '${r}'`);let a=await vt(gt(s).href);return{path:s,base:se.dirname(s),module:a.default??a}}let o=await kt(e,r,i);if(!o)throw new Error(`Could not resolve '${e}' from '${r}'`);let[l,n]=await Promise.all([vt(gt(o).href+"?id="+Date.now()),_e(o)]);for(let s of n)t(s);return{path:o,base:se.dirname(o),module:l.default??l}}async function At(e,r,t,i){let o=await Wr(e,r,i);if(!o)throw new Error(`Could not resolve '${e}' from '${r}'`);t(o);let l=await wt.readFile(o,"utf-8");return{path:o,base:se.dirname(o),content:l}}var ht=null;async function vt(e){if(typeof globalThis.__tw_load=="function"){let r=await globalThis.__tw_load(e);if(r)return r}try{return await import(e)}catch{return ht??=zr(import.meta.url,{moduleCache:!1,fsCache:!1}),await ht.import(e)}}var Oe=["node_modules",...process.env.NODE_PATH?[process.env.NODE_PATH]:[]],jr=F.ResolverFactory.createResolver({fileSystem:new F.CachedInputFileSystem(Re,4e3),useSyncFileSystemCalls:!0,extensions:[".css"],mainFields:["style"],conditionNames:["style"],modules:Oe});async function Wr(e,r,t){if(typeof globalThis.__tw_resolve=="function"){let i=globalThis.__tw_resolve(e,r);if(i)return Promise.resolve(i)}if(t){let i=await t(e,r);if(i)return i}return Ve(jr,e,r)}var Br=F.ResolverFactory.createResolver({fileSystem:new F.CachedInputFileSystem(Re,4e3),useSyncFileSystemCalls:!0,extensions:[".js",".json",".node",".ts"],conditionNames:["node","import"],modules:Oe}),Yr=F.ResolverFactory.createResolver({fileSystem:new F.CachedInputFileSystem(Re,4e3),useSyncFileSystemCalls:!0,extensions:[".js",".json",".node",".ts"],conditionNames:["node","require"],modules:Oe});async function kt(e,r,t){if(typeof globalThis.__tw_resolve=="function"){let i=globalThis.__tw_resolve(e,r);if(i)return Promise.resolve(i)}if(t){let i=await t(e,r);if(i)return i}return Ve(Br,e,r).catch(()=>Ve(Yr,e,r))}function Ve(e,r,t){return new Promise((i,o)=>e.resolve({},t,r,{},(l,n)=>{if(l)return o(l);i(n)}))}Symbol.dispose??=Symbol("Symbol.dispose");Symbol.asyncDispose??=Symbol("Symbol.asyncDispose");var Ct=class{constructor(r=t=>void process.stderr.write(`${t} +`)){this.defaultFlush=r}#r=new g(()=>({value:0}));#t=new g(()=>({value:0n}));#e=[];hit(r){this.#r.get(r).value++}start(r){let t=this.#e.map(o=>o.label).join("//"),i=`${t}${t.length===0?"":"//"}${r}`;this.#r.get(i).value++,this.#t.get(i),this.#e.push({id:i,label:r,namespace:t,value:process.hrtime.bigint()})}end(r){let t=process.hrtime.bigint();if(this.#e[this.#e.length-1].label!==r)throw new Error(`Mismatched timer label: \`${r}\`, expected \`${this.#e[this.#e.length-1].label}\``);let i=this.#e.pop(),o=t-i.value;this.#t.get(i.id).value+=o}reset(){this.#r.clear(),this.#t.clear(),this.#e.splice(0)}report(r=this.defaultFlush){let t=[],i=!1;for(let n=this.#e.length-1;n>=0;n--)this.end(this.#e[n].label);for(let[n,{value:s}]of this.#r.entries()){if(this.#t.has(n))continue;t.length===0&&(i=!0,t.push("Hits:"));let a=n.split("//").length;t.push(`${" ".repeat(a)}${n} ${ue(St(`\xD7 ${s}`))}`)}this.#t.size>0&&i&&t.push(` +Timers:`);let o=-1/0,l=new Map;for(let[n,{value:s}]of this.#t){let a=`${(Number(s)/1e6).toFixed(2)}ms`;l.set(n,a),o=Math.max(o,a.length)}for(let n of this.#t.keys()){let s=n.split("//").length;t.push(`${ue(`[${l.get(n).padStart(o," ")}]`)}${" ".repeat(s-1)}${s===1?" ":ue(" \u21B3 ")}${n.split("//").pop()} ${this.#r.get(n).value===1?"":ue(St(`\xD7 ${this.#r.get(n).value}`))}`.trimEnd())}r(` +${t.join(` +`)} +`),this.reset()}[Symbol.dispose](){fe&&this.report()}};function ue(e){return`\x1B[2m${e}\x1B[22m`}function St(e){return`\x1B[34m${e}\x1B[39m`}import Gr from"@jridgewell/remapping";import{Features as X,transform as Hr}from"lightningcss";import qr from"magic-string";function vu(e,{file:r="input.css",minify:t=!1,map:i}={}){function o(a,u){return Hr({filename:r,code:a,minify:t,sourceMap:typeof u<"u",inputSourceMap:u,drafts:{customMedia:!0},nonStandard:{deepSelectorCombinator:!0},include:X.Nesting|X.MediaQueries,exclude:X.LogicalProperties|X.DirSelector|X.LightDark,targets:{safari:16<<16|1024,ios_saf:16<<16|1024,firefox:8388608,chrome:7274496},errorRecovery:!0})}let l=o(Buffer.from(e),i);if(i=l.map?.toString(),l.warnings=l.warnings.filter(a=>!/'(deep|slotted|global)' is not recognized as a valid pseudo-/.test(a.message)),l.warnings.length>0){let a=e.split(` +`),u=[`Found ${l.warnings.length} ${l.warnings.length===1?"warning":"warnings"} while optimizing generated CSS:`];for(let[p,c]of l.warnings.entries()){u.push(""),l.warnings.length>1&&u.push(`Issue #${p+1}:`);let f=2,d=Math.max(0,c.loc.line-f-1),m=Math.min(a.length,c.loc.line+f),x=a.slice(d,m).map((h,I)=>d+I+1===c.loc.line?`${ee("\u2502")} ${h}`:ee(`\u2502 ${h}`));x.splice(c.loc.line-d,0,`${ee("\u2506")}${" ".repeat(c.loc.column-1)} ${Zr(`${ee("^--")} ${c.message}`)}`,`${ee("\u2506")}`),u.push(...x)}u.push(""),console.warn(u.join(` +`))}l=o(l.code,i),i=l.map?.toString();let n=l.code.toString(),s=new qr(n);if(s.replaceAll("@media not (","@media not all and ("),i!==void 0&&s.hasChanged()){let a=s.generateMap({source:"original",hires:"boundary"}).toString();i=Gr([a,i],()=>null).toString()}return n=s.toString(),{code:n,map:i}}function ee(e){return`\x1B[2m${e}\x1B[22m`}function Zr(e){return`\x1B[33m${e}\x1B[39m`}import{SourceMapGenerator as Qr}from"source-map-js";function Jr(e){let r=new Qr,t=1,i=new g(o=>({url:o?.url??``,content:o?.content??""}));for(let o of e.mappings){let l=i.get(o.originalPosition?.source??null);r.addMapping({generated:o.generatedPosition,original:o.originalPosition,source:l.url,name:o.name}),r.setSourceContent(l.url,l.content)}return r.toString()}function bu(e){let r=typeof e=="string"?e:Jr(e);function t(i){return`/*# sourceMappingURL=${i} */ +`}return{raw:r,get inline(){let i=Buffer.from(r,"utf-8").toString("base64");return t(`data:application/json;base64,${i}`)},comment:t}}if(!process.versions.bun){let e=ce.createRequire(import.meta.url);ce.register?.(Xr(e.resolve("@tailwindcss/node/esm-cache-loader")))}export{nu as Features,Ct as Instrumentation,ou as Polyfills,cu as __unstable__loadDesignSystem,uu as compile,su as compileAst,pe as env,xt as loadModule,Te as normalizePath,vu as optimize,bu as toSourceMap}; diff --git a/node_modules/@tailwindcss/node/dist/require-cache.d.ts b/node_modules/@tailwindcss/node/dist/require-cache.d.ts new file mode 100644 index 0000000000..de970b93e0 --- /dev/null +++ b/node_modules/@tailwindcss/node/dist/require-cache.d.ts @@ -0,0 +1,3 @@ +declare function clearRequireCache(files: string[]): void; + +export { clearRequireCache }; diff --git a/node_modules/@tailwindcss/node/dist/require-cache.js b/node_modules/@tailwindcss/node/dist/require-cache.js new file mode 100644 index 0000000000..398995fad9 --- /dev/null +++ b/node_modules/@tailwindcss/node/dist/require-cache.js @@ -0,0 +1 @@ +"use strict";var i=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var n=(r,e)=>{for(var t in e)i(r,t,{get:e[t],enumerable:!0})},u=(r,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let c of f(e))!l.call(r,c)&&c!==t&&i(r,c,{get:()=>e[c],enumerable:!(o=a(e,c))||o.enumerable});return r};var h=r=>u(i({},"__esModule",{value:!0}),r);var d={};n(d,{clearRequireCache:()=>q});module.exports=h(d);function q(r){for(let e of r)delete require.cache[e]}0&&(module.exports={clearRequireCache}); diff --git a/node_modules/@tailwindcss/node/package.json b/node_modules/@tailwindcss/node/package.json new file mode 100644 index 0000000000..d192e58d4f --- /dev/null +++ b/node_modules/@tailwindcss/node/package.json @@ -0,0 +1,48 @@ +{ + "name": "@tailwindcss/node", + "version": "4.2.2", + "description": "A utility-first CSS framework for rapidly building custom user interfaces.", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/tailwindlabs/tailwindcss.git", + "directory": "packages/@tailwindcss-node" + }, + "bugs": "https://github.com/tailwindlabs/tailwindcss/issues", + "homepage": "https://tailwindcss.com", + "files": [ + "dist/" + ], + "publishConfig": { + "provenance": true, + "access": "public" + }, + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.mjs", + "require": "./dist/index.js" + }, + "./require-cache": { + "types": "./dist/require-cache.d.ts", + "default": "./dist/require-cache.js" + }, + "./esm-cache-loader": { + "types": "./dist/esm-cache.loader.d.mts", + "default": "./dist/esm-cache.loader.mjs" + } + }, + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "enhanced-resolve": "^5.19.0", + "jiti": "^2.6.1", + "lightningcss": "1.32.0", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.2.2" + }, + "scripts": { + "build": "tsup-node", + "dev": "pnpm run build -- --watch" + } +} \ No newline at end of file diff --git a/node_modules/@tailwindcss/oxide-darwin-arm64/LICENSE b/node_modules/@tailwindcss/oxide-darwin-arm64/LICENSE new file mode 100644 index 0000000000..d6a8229073 --- /dev/null +++ b/node_modules/@tailwindcss/oxide-darwin-arm64/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Tailwind Labs, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/@tailwindcss/oxide-darwin-arm64/README.md b/node_modules/@tailwindcss/oxide-darwin-arm64/README.md new file mode 100644 index 0000000000..1ab04aa379 --- /dev/null +++ b/node_modules/@tailwindcss/oxide-darwin-arm64/README.md @@ -0,0 +1,3 @@ +# `@tailwindcss/oxide-darwin-arm64` + +This is the **aarch64-apple-darwin** binary for `@tailwindcss/oxide` diff --git a/node_modules/@tailwindcss/oxide-darwin-arm64/package.json b/node_modules/@tailwindcss/oxide-darwin-arm64/package.json new file mode 100644 index 0000000000..d84465d63b --- /dev/null +++ b/node_modules/@tailwindcss/oxide-darwin-arm64/package.json @@ -0,0 +1,27 @@ +{ + "name": "@tailwindcss/oxide-darwin-arm64", + "version": "4.2.2", + "repository": { + "type": "git", + "url": "git+https://github.com/tailwindlabs/tailwindcss.git", + "directory": "crates/node/npm/darwin-arm64" + }, + "os": [ + "darwin" + ], + "cpu": [ + "arm64" + ], + "main": "tailwindcss-oxide.darwin-arm64.node", + "files": [ + "tailwindcss-oxide.darwin-arm64.node" + ], + "publishConfig": { + "provenance": true, + "access": "public" + }, + "license": "MIT", + "engines": { + "node": ">= 20" + } +} \ No newline at end of file diff --git a/node_modules/@tailwindcss/oxide-darwin-arm64/tailwindcss-oxide.darwin-arm64.node b/node_modules/@tailwindcss/oxide-darwin-arm64/tailwindcss-oxide.darwin-arm64.node new file mode 100644 index 0000000000000000000000000000000000000000..9edc052f49be950bea7ff96e718291ff3c71bb7f GIT binary patch literal 2939760 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

>)RR{0i6u zfS$2$z27Rgow@wPa^ynGMkZRA!P>xYsEWOqdXN4)b2hr47yTQst536dk)LlvyW<0F zA%lV2i;T~q>+U2Tu_lE_45yFcHy>PfZAkR|pv@=5YYsq1A5N+#nb&L;ZKRy!hWDVs z*Hf+yo+X}Ar2617s!wOZi|5SY_Yif7M@r7vM|sH)A-g~7$9u?Fs&gIn9P)5}@?6#j z^{UPfbWeR+Ym!06X-vFV9pZb=I1Vuv>JNJ1O&LRy`*W7bKQ$)xWv0eu(sN{(q`J1- z{ZT(e?`O~#Yb@#E>2_Z<9`!}J>r_|3hLQTB@~T(=#Xp>WePH)1k^(2e=ne4xJ+m(t zHjcYlaJjIt=O&B)Cc`6;)V}(pKB#@sk`oUEV&~8g$xN61Aii-TaDq;m@{aFL`ouR5 zO_<60e9)!|(se7IlYdfzCJX_;ve{2pT_#^6rYMzfG_1E|v@^ePGVHGQ_(pukVja*4jl*2~&jn(aP=CAU_ht-dhvY!$kaWWrIkz{OQDON` zj;M&8&v(no*_N!6HUA6ezVNL#7rK9!r6)S}`=Xnmi##*$Z$dvnAC&LLxHazJkhH`e zLX-O!<&mY>F_Fi6-sP9+GHv2r*B}>S^Ncj|E)$!_J60WnuS>E$GVE2vqB*vp=4x`^ z@=SKSM(V#2c|CcLzrNPiW3lo1;L$a@M}AkoWTSUK=MF}O{Ox|ZkZUyN)V>|X4-)^n zSahQ0(---?QQMUsz@Knf@OwSRirv^xk6mWOn$QEy@or{JjMdRo!+hiDsS)A!8@z`O z_sqS%tY`nAGVkXC&saL*klbFHuT7%|S!J-xuLGmw_3GmvK4G02x@+A#uYuJw)fccy(V$>tF-Z65cm4`A!i zyabw?%CW!1YK9r?7a6f^;L^i96b$}Czn!)M8*PCLyB>Dhg29#8X`9L`u+!hiEWxK&9Xy>GC-D#5R+A*Ov6+VYI|4eTd# zhXj|eC4Yz3%ajB@wu*lI4WFsV1Y<=y_G9^Qsl1Q2O}`4(jkV{N-n)i)rJB-2y{UdI zzom}kz6y7=f96Z_kEtM5D2nYQ{XFXb9C9YI7<@d~GjVu`y%Tf42fNJ<@80rYv=Mvx zN&JdGGCGggxGy@_j=b3{+-FVvDQc|14hK~uV?6vxt?uZw3lz99@|E97VRS^ zN8fP8dd7qMbBBZb#@W&-UO-+x*+NN+Uq$fIS;)fpmz@kVv~Vo`rDjC%UO5t zVJFvE#<;TETCqDW!|td(nRQ=$;;k7^y!c_;_jY|a66b>3}W+l>6c!WZUOEhM*8V>4@&b8nGlGa3u^A02(tXpT_?={Ga6ubdqo{>)6Ub>~;1&<`LV4-15xp>`zFh$wH=iFvVZ13p=}f z`{poj-IURsZ`XbX^A=;?9DI;ZANhW2i_SGRs(#^Hw|q~bZDt+l*V=!4$*xDZs`siV zdG6;>N7rs-AtSGMJGqov-J`3{;Ldn_^z}~4|6lo1+`_m;U&j&CQrVOre6rEAVj^qZysyi~r`6iC zxsB&KBk=#KUF{y2Lj4Y(!%n>7za;CipDsK80bmf2eHlA&!1Nbj|H z$}gB79>TL-&bW;$gFkV;iHr}*2CE$RW|_dbLGAgf964&OXT~`8D#_17nXOJ81=E7x z=iW#Mjz^F~)SfXV=)&GSiRYX6&U{vPUa%P&askg?<{9}`cliGGl3?o~bc_k);uY=d zIwz<+(efqUml=qi%eNhTdvxXG*Vx5fjF5a8)05-~3())lBQ;t%zt~KWd6(485 zZ!Zm&Qs0eMeLK7r=LVJA#e4@|T*A8=?k6)Z8@FB&WPZ)uK;yZeYm^`-4mWcG{TbWN zHGF#|-ySpD@>y*)j}J!Epp_5EKa2jQ1!6(^XVU8AJ{67)9%HQ9cW~kFa3SAF_Sb%x zg*Q{cx$JNu&-dc5XW`cs!Ow9|Ux|Yo6WmGr%3ouRyDaG9-uz!s7W^yUY5#$8oX

vFM4O^FqglD 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 z%0Aa_v-obIPa?k`eZ0iaw|nP?SG3!?+JWa>U=Sg{)nZF>qxU;CTdd!!*;4eqf-Ty2 z3bvqc**6zmi${Eg@x_$9XfmFa*hZyJsc)`~sU98BHQpX{P(4>*OOb41jcGixj^^0B`EzYw$vfM4ME>ZYJ#@0Z+v_#2dZq?=WWvs`2>%1_wSs7OY1OhBv$;b3aBa%>f=do}>p1ylgm8 z)9y&TW3N5&`o@D3v8z5f>}k9FERL7cSs#K!2U5sq*0rMjIJg={{}V<>8lD8sA+LvC z#Aj!L-9L))_uSy^k#{O=WB2NNy0L*pjMc!;@rh}HPZpH)u8H;JtUkdvtB99+09|)U z)dP8%mh|e0{67MGmo0ywdu+6@{eFIS+xTp|#rwnz+qlM;thR{uBku`hh|&gY+TNq- z_QuRD(T8?k_YZwVY3v)H*iIsbV)@HuH6ubx+cUp?e?6_^MOF5C2w-?I6kUVYwh6W+)= ztU@Q5%&)qBVcsx))s|t<+sTU~CVgoo^j2u?wdn5367hXVdg)p0r}J-18`^j!Yb29( zaaYRiCpM5%?kF^-hw(iQ?0$7Px=rTu1pPRUudV3(T${b9ncB3XY6PZ)ERzxB{9lH0OQFm5vR% z@e2E;$DlV~(6AoWu8TqYJlub*y(w z(s;|3MGniBa?5``o0wAf>|?~)NQ}Se{R&@?mW}}iSIQY{@Th*c%GwfLi0}Zx)u?S4 zzUTwzSU>O+Id5q2=fYRnC+CMm@4>!C&UD%!x{>Y)z6#*4^ilPF=gr`Il`rSTG~z8@t7-+Z#3$mxnH`d6Bj+G!i>YLa|?TYD?ah{k!Q5ja{Nsbin76 z;rBz4wT2;U4M(Rq0>4X}Fa1<;{8JO{aRg$=tz1h(UoK}mn*?T;dhad-WKs668m@& zG|NHROxMutZs?B4s}c6x4Vl_`;`e6Z`E$J6urTAi36{*uyTLc(S#6qD8bLnJz&|ji z|7n*8fr!@SXE$Ou->M99liZH>?1uP_Ff`?G;qebeJXm;Ny^s6 z`EVXz2sv9|c=AfEr#qU&najF=x%iTwdW(Huik6Gvr$^v%8}Erf)`>f?K}ntH+ps&~ zPnfOhInMV|kGYNrbp)}K-3gs8uq7OJV+*opdY@p-hw%w6?Y7yU%dlzB6 zwR?6959AdN4?K1LvgdpFwu`mph~C?t94%`f`ch^4Lh?m^VRYlVKU3dhd?Wrc8}M`U z&$_YQvtdNQQR7wLb)$-f=8iDtdnR>B@G`Ec=22 zi@VxInZQ@pmxJ{se4BV>e`o;Mu95jUmXuRK|0M6EF+S<1j8WoGhjafp@c0OLe6(^z z;Df^9jnBG<1wOE4WItsY5xD;RvgZREh6d*B5T7i2z!=X4_?q}4lM8eIA?nxHnbOa< zxzH`iKGwj!o?jIDyTr~JO3FE(cNI>Qdt$c8Au*q`B!4IlHy--6zCRqrHzWCpKk&f5 z!20=^qK6q{&?{%Q((7f#><#^O2mSqD4d2%__}Ga)u36X9w8`0WW<8DQ^)=bQD%l_< zkozM0PUL}@j;2jNM^4}C%DeJyEqZLF6G0!XbTsIqkJX?LLH8~;O3_Ql^kHp=KFrWj zXG;B?DQD7MwV8F)a;}_7-?2JgclCRLnXUi1M4}5##a7UOUZXdzlYAR0t`i@&EzlWR zdrhnq!3Oj^A@(jtTZ&d*;!)=;W`P4G4(){j-&x{TXBNu7-+VUd4)G^=AYJ@l zS3f*udhc0t!e5TOd-{yC=Dg5>a@rZNjc&J3Y)bKMY!F@Ev%~c^f)}YX)kPQAZw%k? z40x8F@$FqFIV*1pJfWDgQ!DU4pnrSmAN@b%s-5Ax>NIDg9!l)(e;vNId!o9 zH=n)#{rXU(_aQ(VY7X9Z`!1C8{!HifNgp>3&<7X1(mu%ftc(}`jx*0^rM&H2=d+4! zY9RZc;8{9&Hoc5BiM*uxTRNFFnHtzR;F|1jFEi|9vL4;Ke%!PkQ+w@fqEEsnU$4K_ zqw4RB)o<2~tM*TM`ruWs`3~67HS_K*0`#IPt$MjJImG# zE5SJpy?H5fyHd_dQF`-Kr8hU$zmqj8>;34WzH=l8(TDf0|6kRQ?^gX)<6+L}m%=*eYF9^2q!DnlnO`EZ1OdAM&t=dc!9 z;)hR{AX7cby`gJ2a75nC;wLbvJ)D#)z98}M7|+WN^|QP6r)eLZou+;B>@-c;J6;i7 zAEM2Orx!Z}&&#IxWSz#-3-#>YDRMq0=VxLglr_(uLf-xJfzxXzF&^RLgV4h^SLvk# z(mLj-&9(Yc!MoMwby`8a+o?AkcaAdt1f@l^72kJN&&*4GI|t~ydUoNNZOFUp2WSIb zJ@O}Q;6EKl*V|k_zSLJitaLnlm}h9-6rG;N(Y)^t(1w9;63-#{WP!t49X7yVxoNBP`X}$oqLF~pA85*k;~W@ z_c%6azGVE|hoX0l6l*<`S$EZ(krlzGBVx1q9;02(k80aOwBHvv`~1&KCvfIfg8#!@ zoBtV}JW|6-p1LA%JenX>oYBhl$< z{zP=U27kMYx;DLcdaclZV-5?!yOm-mR(wJ~Z`hba4ZG>Fs3rf%B9Y~Z13?y6b4X5i zHHYMM53%>cmKU4Dq5k;sJ_Fw{kM|jP!MVm81SZn&X2xM>+%n#5#x|F+8{_VpXz?3k zH^wdFHO9V^vC4SA%6OX&3oc!2_*C@6rB>+vV7OE}09}u*XT_60KrUquw-oz)sl=h| zkbNS1Gg+6Sr*N=F)EI7d5gRBmB=*2g=$QC8c;E#lT}GShPN%PqXW~OKU>%8lb!73L zGfsY0a4B)=G`$U(172}pqJDmPap##d-GcmwjGt@JLh-LPc;iYFEfgOKqo3u>hpYAi zpOyB7UK!=8?Pr}n8Jm%3QO@-gI%U)ejL%I+i)G!8V7-lGy|QL)2?}ls=K0_mXW2Wz zi{uW?x0l=;)#aD?Lch@b!wz#+J?m@4XwIT{S$yGNSp1HuoJqe!^X=okshyYjy8dYO zC$A))V}^b%{lP!l{2%<0HTK6u|3`lu;(vwr9xK1p7k)m;zlVEI$EChQa#sB>9RASr z$)Yo8vzLD%b~gP`zl>e^Aqz~VIDHl1n(!y{+4Kr7OY(fr$DK_t@54y+Hkv;=iFy){<8&v^eR@9)%QFsWy+Q9k7Y&UUx-p2_}uqkIYFMV!ON z{K)$+8Rgq4uj?ysk#d>)8>gtV>Fc25^8WM2`w5xUZ|yy^ev46l8|6h-UmZFsd4ID} zzMJwo&Y+Lgv%x5Tm-3yQWgqL$)0BVKv*XRUDL8m`{JIfbx&fL!&mV>Miym>X{kp{L zD*wQ~y+NDnDUscwiNHS?c6C9YWK zr-SP_1ZHRRHHq^xG4aVheCR+{NrL6H*=w>Z)s`$k$p)O?CK0gyvf0S>;z(wL38jkZBQhp}&=bp!yuBy%TnCy!=-%Rj5hWjGd={E3z+mF*#oiW!^k6Bms z*mM1KRsH5!-j((~hpws@riQNS8&ZFNT~$B4uQlna6y1x1nZo^Iu`B4gw+I4FI2n8#e+?yfjTAr*RE+Qz9wuLu~+Q+*phulP94$Ba_)_X z{8TOC%N;G&{SGR{wy`q7x9U{1&4a$Yc~XJSvpVu(I!){y#LzYuWA8x6M=VC0i!;%J zHqH0N8MZa8{MY#Z0rwxGyJ$ksB4^4H+tRiuI9bk%ZF@L4-Pg(c<@ki|;k~o@I*4zG z@a@W2Tzcdik^{L&os;-{8aZ6qv&b`%P2c4iKERwI3>}1rWDp1cKXHcep`acgPri=R`dNPPIfwyEEKLt^L$ex~?|&C1!p{o|$C_hpM-&rVFZ*p?)B z$&O*M+_uC|97T4OG8gfhm05lNC0|_{IA2NJ`UXv#?iilhnC+6B#oD$RI~H!QVlPp^ zcVep%zVz1pz>#;GMkI{TmQO#`z&ItBg2owOTJ06YuA<+DUUAKDuxmN0JlI!`{6}tA z-jVmcSNh1i)#K%TxlRV>u)X$#Ky15Zl25}9D*lq;$qD{%$oU)0-+FBL=s-)$&_kw^ zQ=^i6o(_C{8|19kM+)(W(8zB{ys@Qrmg-wNFo~Uqtik(NG7s1wwn;x^JdR<--Pm1w z#J8nuqSY@xDv}>zJu%}lW^i_^%Q@ATQ9~|X=F9=EsJ3WBqYd$;Ajfl$v{iL6{sD!+ z<6_pXDfZilbJNK+M95VaUKXl~)AX zK<*audem5yZ6bv2Qsr`~N$|UwuV!#W@*q`OIscK^fAQy&wQb?MTj4DojpVw5R=h&q zsWq%M@+5y8nk;@b;3oT*U{c|h1K52#Igcxt!g;BjH|yqGb++W=)-ApBMvP4g^X7yG z1|KOVU!H|M{Z(A8T#HoxJaUxapFsQkmsk|($1&P9{Mw9Iv7_`y!G}734t$)koOY7C zF3kHP-(>(p3s<2hQqKX(1y`O1PNN0>^|G=Vmh>5HjjfDs1C>r}7bq{3s5cw$>+b_oU6I)$dFHthKtX;E>g1y347y4rK?^}Cq z09m@e_~n17Jp(j7LG)pV%z8c9KkVdryk74d`Y`OZ1M1&bpG*JVKNp}bR~vI6>%Lxx z|2E{^{L}<3KP5q6t>@1cnrf^W4>0Rr7d*v8KbFSo5j=%w4qDHcGwM0BPhW}ERT--* z^%c!CP@fX0OZ+cSuOL4LcmZt{{hrbXT*o?EWz%Lj63K&?$eQFlbaJught?BQz?_I5 z0(NYF^F(c*fkUB579EFNxx5pLNkFI2L0v{2{omL0_d9a2vx=@jZ)d=FHstDfxfxn9 z30ltjaqbw#XO< zY`Z*9jVEMk+r#)mn{9sOYq3f5jeb>pE%f?yUOHr7c;aaCT%U(8L<;)0RP=6X?BUW` z-(!g3O7uxC4xt5|_;r<#heWN3yJU@JC>suOx{Bx3qQmRktKCW+w@}y3)LBa13)mCR zC-?D9UyIs?sI^@#JniT3j0<hCo{Q(aJtE%;e`Ef7Dg#{cO@JP( z)=qQg`_S51+;6pi=bF*aN2mNAW)nk8bLj_w7& z9{cjL?hrnpVf28jpi|*nZ+T9}ktu#l%)c62X|AtG;C7kL%Qb8rFT=OwJ$>wP&l&el zo~vhf_J3B3zXfsDJAo1PvW{gF5Ns0!{gfhN8*-PTDl; zub29<=g5EL_TIQ|14iCM(HSB911**@&tzQ;tTU0DkjqQBPpALnyP7XPvdEeHqq&R~ zm?)ha^AMVJl|Og*n8s5h?2S?Dgh&&5vSZ{!v*Y`cir>q9z_-AbrtT%xBv`kR>>SV8#_8oHM z(1x7hE^TP|ibxw(BefS!@LcLT!rV$eYl$;v4bKo?SXozlG;PN6*uBw?e}p#O&G+Oo z+$Q6dGj=7W{}?_h$MIQ|zS_k<2RNcv!QQIJ(;INq{z>dR-!HVKSG(x{ujq(Okd6QCok!Jhq?x;5)?F zTW2xte*{h9lx4y>r>E8YT2#En{tMPs)7>yk)LSWv|!# z$wTeO(4nM{*7h9-mdp9}*Wkw;T;GNk{CMIJU-SLn*lyt4HfYcD@8tNO2e(dr)dBlV z_Mb3tDb~(|GQVv}xw7AT?L1AL{~p4|BXtlr<6A@j*U7ie4he{6vM zf0cR#9!-Br%C%nvZoHt^*;`LXUp<4>aSL@c?M=#+bzv`0jLD0Rn4b}N9XFP{eku5& z1#SchkZvW(G-X|R0FP$eeyfxW-0=c==_%E`1U-hh}v7%?C_!5ORURXLLD1_s(AbrH#Ir=hT1|c#6GG zLsti!w%Kc2pNO&_Wj|lqz}^&kcF2X^Ti03X`d5*sk?V7RMcaz^ux|bIA-w7AZJXPD zcc0#_mGR16UDt;VoXb>lR>bQD(tztr4}I(7R@OoDr*qqzcb&hz`AKb`L;O@bplzQM z4z2XZnW*Kybg@^}85?_>j9vCSLL+3{P5AJMep%os?=~S{G+(TpC+$~8q1(S?Uqe4) zuvi`MCu_`u85SF8+l$Up_R91>RoX`GSnXo&rR|DX+g@}Tvd0=|A1=1@Q}-kylMS5L zRMvp>xwr1ea?hAk!GXU*r<$#;w-X0&`#TSj4+8iepGZ8|sp#sAY018P+CO2l_}*eY ztgtzVPfpJceWdx1FG}$DL@fTEs1+GQY^C~{FpCAQjLkjqwQ(<4-O1*$ujr=w_D!;vtYi*&?*(~3#8vcbZTHyLNIl81dYErj&k+90^W8j; z@87HF3@TqnCYCn;OfDeaseCQ=|8MyG%m2>U|9_GnQ~rM#`~R`G=Og)lBG%_mMZc!^ zGknhgeWo4O?F*`Yxl(VloQGMFu# z!OVPn(BEZ0ix1gFFRzQB?_F;l8UaS7>#Ze+tDrr0@FF>(3Heg%Np@P;L-s!hz|hxT z$G$@JTytHoteea}hP(uO#pik=bxbDL;(GiY1&3>vd%8vcI~N?;fIKMYNOssXzq3s2 z4-RBG$r+Zc=MZL}FEV8}|3Beu`|p!KN^&EFlpnt2+V=V-k|MAGy;~u*GSqdv-25X=yJ^J)Tr_a$9fqKbrOOy1B#?EQA;AM2CG4*?!6L z?C$LU)N_&-()a9EbcasHbL^pZsaN6zRso+9^w#%{(0so}hB0712iaO+J$<=*J2|F% z+`IL-vX#^WpImJ(|04M@wSdz*gj|d|ualhWp&y=JE4k1mzCh$=_bc8W>+%`fn?=vt zCOSi{Mf}0wbE}J*X0fIvx1u9(?`4YjZ7m84FHKfu)q2_LBJGR4@BKSvvd2GLjAb;5 zcEE+P;KEZEzqxK%mgN1_0_n#eY9E6>HTv@GeCb;W_~+!A>{&C5^>`0(WPd*M$R5(? zzy`3`nobUzwW`zDL2SVxA|13s-S{lnwW!JF!w$dI!+9$QnQMH%16vZco4yaeK8t+%7;!T1 z0JAXhUXQ!}wk}9~SEiO4*_o=9-m{{tJ8Bsk*$tg0?xh<3P};;hAKHdx|Ap&ns}?yl zZS^{zb!6o5G~YVW36A0{n0+bQwncn<*NS`iIlC9FxU75Pg@0Q&m3XgF{61m~)a7&W ztB2k+UG(O;%`I=Q%uOzk;7O%*PtqYA+w=6J2ce{hsYYM+)d8It1c(G9uV`O0!*W zuIsWTXCJ)3YWsTN83bmvv2j`PIgPOX4>BHkCi5nFZJN=4lpu2@_qLUw&s8B_b-))| zu_p5Pv9lmV*>AbN%c0z|1)4%Miwe9TL4!h{1z-Bve6WCl2OoXRj%k^Bb zyFuFsd;lchwId*L1p2+uj?_T;7i?=hl!@L&%1;7^gU|pqr@FkoIwo(gR`ND$TjcF1 z-;viPRrMX2Tk4uendD!TdcxEbw2f44lu$m3@+X;B>~UK)ug&KGKO_dYa~QPDJIhzg zGl^k-`%=yp;+}HWitvK;!0VJb(V?5iAu%KZ57D8EeDDS`fyB$py#b?yyLA{@)ipKn zyRSk2Yy5ZSU9$cQxROt(^wLA#p1|_O z+ZS4_)h^1L;j?1r^s^p3zn$T;U#R&@&^g-eT91pq9b_N69v)LC{DE(?zI4g6sRSR|NHZ#O2f{V{vLpDwpzca;FMU^nNo6kC51QSs&@}3C>-9m%ZEQltyBU zTWpD%oSp7-hcsl3nBA57h0n+5&N2MH#s7%Cq}W(ji;Xq3Il(V`n9$}#{Nti+cHa~q z@ut4;rXjkHcEbc;6>}8Y%-L@>Hge$MLq{B#vSXE~>PuNA$soj&h-8WW>Aj@pVy4!r{)9KIr7gND%+HgXlPC1_C5x@v$(rqC4e)>82aH4TGs^r|vbLkAZHMiAH=Orb>%NbOd%B1FTCuI8 zOD*ErF7&APoT_gB=wx)8(T5ssRHT(0GwAL1DLmUZ4O<|(bJnETNYiK|xa)T_%XU6I zGq~&bTsfO#*B`ikcV@VT^9LW&T7tXCPrtL4@*P|`qhr@ju60~@ajl;zwzj*mwaNNg z#{FP;1D#zRv!$@kWx(P;G5=b^VwL4Tc! z4m=GTS0d+KB{J6u&>Dxrx&(2&(&UV zpxc~F4F5uOR3ak`eX!<<8e;o5QrDjQCwJQ&au$bO@tOwN(;lV@I`=S-yaL>4GL)r)`tCzoY2wO3+=6g-?_el5Yrmipt9fERNrb{_!$w z@z62J#YJ3rc4(5;5=O`Ng)Lrx$qP68Kfvy6MXt!iER$9p?xS5;-6Zfo}JEtC z$)t=uvMSqw@4|1838Zd$*USI4+LT<0y?oI!CFdl1|1#EM7`<(#A+QlI&q67`O~x|VitlDf4iIcj}VhlgjY99qtcT3&CN zo3ar8WG`C0Il>n^XkTL4ud!-tWPUz+XvxQ7>9b`h8>L z{E)MKvjKV)`m~BX5ngN_X^|q}_Qw5gY&`nDri%TX;76uqT%-^iP;i07NKZiC@b+BA zS_z>Kl72{kq+in3ZtQdpOY80A|F}JDb7U_>e)cf-#hg`Ow`3=GQO9lU5sh~WR%%Ok zAwP-kPH+#~MoaUhT5dyNaeH`@w*`DpcJtpYxOth@(t^yp9-KLTD`%H6XX|5l69R8u zJ_x%6S1B`>Fhy_E1KxtiY- zoZDu`IldK~+ZKm&0n6F(M{sUi9M1jwIq+0)t^vF$`Fr#XJn_Fx9*G#9Jhh@fj^Ia8 z`ge58UC72y4iOzcbn9xJRUw0yxRY70f4twJf_R(GB z?*A!uVVhUyqKb|G(Q4Zouamh1&+M9(Um{m*>Y_tA312xvocW2%ye(oUGk^C0-_>5w z_g!X!*20`CJ796#w?g}c7K*LZ$uo)fHu_UJ0Nr2I7A+OqpQ7We4Mj)!w&bTb``r_F zuPaOw8!P!_p|=%dDIe|aNrk4$`e(=;#{qpKeRE=S0bSRK^^9z_Tl` zV|8J3InI7+K>}wRk<%knON(@7fT#DDb-TxE+eAJIK2-C(lv`a)xXI)V8$OV)0Ydj9Rc z=i~@^RdYfYjT}E?0zV_~oz@+l{;KBgSKdOo_qdc#=~qtf*fq7ENO@kr@;^}CN)GJl zYTfkJ|2E}j+Ps0>dehZ9>3iqLtS$39E007=d%*3r(7^^1O|D~1VQ8J~h4(<4yP?g` zTQedKa5{*sh`cOoYOIz>2W#;Fa#aPg%o`&lPnNW03;b=dZH=rqnQyyQn{L#V42`}P z8ZA1#h;3+g4SGQb^L3qTFLe5nWXFoh-9veY^B!)mc@TMox#?nWas*qf#1G27)G7a$ z%6}b?0AE0*kw2H%!Qw4(<1A>R=!vDY2;6sD7A9iZ6<+Q{{^kyBhhCb@)p=_Q0LAA>Wttz487|wMMOt4)FQeh<7R%m*v?L$6+(HE_G3^$sF*Gojz194(Dm)pKx2da~D$P z<@wRrzSYvKt&#KaQpp?Zw^}0_d%LO7b*VRmyc=dcRxS?e-+vm-u_x$lYyke)l%aFh z$OhJN7T?U(9D6fsZA)ctOL&%vE&`hYXXj8~t6p9iD|b^ad|m3ueA~8^bzQoU`~$my zX#-`FgHCh`!HM`jlS^IBVEHn>OW1^4L{`M+rP>#LgXkKhAA%DCd)cp4F78x)F0pjy z?%u4eu`|8~t6j~J**;*{28?lO^sE0E*b}1@lR9M#JAscr21lfsd_;Qxtg3%AV*TR` zqFk|oyE)5LY}gJQOGap0$xoklJY;IxRk9HX@JhC00Y)s!tBo186e6jP30 zV!oX+jWVZW#I(OahosI1Y`-#IbG-tCRfqf6JrTKgpt_|zzU~L9Ti_=15F+;o=Sv;l z#8u|OJigQTjR^ch_!;fyo8(dBrirfPYo`03a_^n$$j08Kt{b?j^|e9r>+0+45l`$K zf(@C_61{AZQC8SjR!*6sKfw!p7s?vJJ}^-3#f|vdsI_uFc*puU#`-`O*!Pk(CDMHP zljLDZAwNu-lHm(DBhPw)tXuXztQUCFK6GSDHP(q6{xlb#rTXzI&xBgLzh~YZm7%;< zw(i^-&ZP{a!>M7NY@8tU>%P7)Bt_Q^Z4<{XvB@+3!!$1ZCwEmDh4PWPv^qeIYj zMp@vc&|q1A>|K>Vb}HW#(dJ~XRrHVkE)|_h%}Q_&{FZNvn3siGa>T)!c^&xH?C5(| z5ql>4l{TIU{i*r8ZD}QIS=QG?u2M%G<+8?PeajplNB`xqw--u%ED3cIKr3k7lhqSMpo=nB7tser=VTs`^<;fbR zoFr%N9EUqM+2ZY)bNZ@w*n7>?)pQSKc2t!znZ>&nEqxz^vct7PhZ>ay?Xd~>rCr{q6bEd zFM43~09H zg!-!=95%lC!O;tr(9UAdu<>(eQHO(^hvdgUNdF$K@+^~m@q`>#eDft$ zp1c|0zJu{a$e-WE`yt+)JY3J6f5~ud+NF&9ZgS_>AX7GyJO5g8)DNYO0?z#klV7lb zK8^k?b&xy%Y;_1eN&80b{0io1pxpV=mcU!!5Q5%{PqK{HF6RO8J!4u1AMriPJ6Ge| zkO19|&y~OF_i?%M>j#cclsp>K?$q;KtQ4E~nvviPzD?+1T0diKqLJr9;aqPHE!{s# z)j_U?m4c6LGpSq8m-Emc@oyqNS9A;I;ww5pjs%tGLgI2wx#eqPak(l-LM)foDzRn9 za?AI&Q?DuC?z?D5!#=FqAm6#zYl>J8JMeMy5~IlbDxOn~nR4l`_!|5Um=6|HV#hxu zgx-3C#75@sn#0REd zzKYL_mxJ-dpot%@6dv&IDBn)#@BsYqkn5>YIzL;Tr}I1FGUVNR+Y~=Mq%~*HnP$*(oi_ECC1vj_zFxoo_L(`;;@6CiC>#(DF9P3lc9!o-N1A0Ca}9V4cobiN6;^8 zjk;_tbVg+FoBtA%y>(i%HJ;X7&-2eoYX*$z1~1MT(`|1Wh}IN#4@7G;Y&0Ez`ONgD z%{4f^X>&nOpf_y~ujUMNp*QS1WN$Kpu@{O=RGTUErtRT-C-%}|ksF5mFT&^s_A z4KaGd7(UP1iS0Yixptmu?6>b2aLqJ*cA4>vHS?s@ukSn5S~2#j>A*X-@90NkjP;`S z9mSvR%<38BR+Ida(AU*2&Xtq1pCryIi)$}no^Xm$<4k(;W#mq@pY9EJ0xd11#Q&FxmHH5%CcCl$}&@~N;z-20UM-o z-me@+<6DeZ z&bN}jq@m;M;hd}Ed@Fg(#fMw^F0sLxJUj+5PAZoxCr$IT@pRk38-MF332I zoFbpxIu{>^Iru=7-~(|Dd68^-T)(1iz?!~GpB&WB`PexEOY|LM;^Us|W!Ln|R2vwl z^v{T08h<`HgF5@mSC*K3Rc1}{{p8P_l_hmDHu-Mk`I4)IeQAYl%|9oe8DnLy?W3tX z&?Qz{``0acb`=vwxzUH~psU8c$a|G_-hMQ=1N)%*26?rX{&23B>Q8*#D@}Fh{zdQS zZ2I}1^fOv7`De&Ivx0LjfTPGwVlNUKK@?nw){qy!#?DobUk%kHb3YWDjKy~yvU@P; zDwQiJm~=H)^1>t)^V7C`mhVMox-wQrS>39c<#mtFlzPhQ8o7Ur`(o}N;l6?ULhkFi z$A>qGTr+jw;r_eaa|UwVO781s+L29bvNS(Aae(3V=sT{%KSsw5Wdozn$-%}mkO^bQ(f8e{dozg@T7-X22$(srA6(){ZIm;R>anYa zZPNqKV5{a_)x!De$^8D^=IOE zu$7k9kgH65faY3K8|PZm_7)IhF*i~B^q3vV?F-#-223TUt*$q`$=4z z-JkM`iNEcTYPm8;g-OB4Mb<|q5X-A_kt$&n4{@^c=vKmCq1?U^F(Q}M&zZB1)T zA+Hj;^is}{?S%m`**XlIz<}IdGFO{oa}^*4?0R(MFP*Q?m-v1f^YwG$^i~ZY(YV(% zUmxMiYRuP1E`7dU;(Q=|zJ~5)&h{33N9$(34(~W~zEpk#`-QS5u3=5gMi)q|s!fko ztwmndN)mk7pxTPc(tU;ah2NcJTT?=L%-3kEo?~v7_!_m@EfZq#?8G?`N87v$A5HiP zzDDSBCMdb=r!Hbl*n5eNQPy}T>#UwJKFsef@;Ip&4T%?P^7=2quTWsq8IG1#LBB-a z*3f5n@O}KZH_NwtC;sNU)4e@=SbN6zS)40Y&-c=<7S#7+(yk4fkic&?-$E;T9L}r! zmkih2+=$sy_`X zPw{y;^Q=kECLP9^9BSPh+JB9#8(r7yX4VgF~&Vb=J zjqh$|z2&gh{G3yFblR$QtFRM@onQRO#Kv#T+Z)quYr>m~)SRscPbNYWL>tCBVy~AfZH1{v^vs`kP03k*iU#UyO3^^<&}JIgBet_pio`Jz1GK>A z_pWT68AL{%v$C)|OsqkrRRd33XO-2}&J^1Rd0Cjh*{r{-S%2hm+@;&Ch4)B3!b^f< zygfe#{=%2O!c}xzr&rj>g+weLaChSCF%&*TJk|ah;wGHLW6c5Po(+Y54>+9-%*mT!uRClR(O7VSPPZ;&J%4B$rTC2N;|HG@F~ZV#ndW_NRGrReI$8gk zm9rA9bj32cm?|sJvZ;xeYBY6q;9fI}| zkJNKF@E+l`Ag2^VyL8xXu@(3`=u(!ARE?_wKM0AJ!$!YVs~zskhGyA=g}w4%A^4>0*k<>Wxyl)XtQoD=;+y!&0JOtY zhv0n~xsr`_``vLuJNnnxOFPKTJd(9)$dvNk{p0jC`PM?)nw#j~8MMRHRw2Bl^7g`h z`oNX6uhuu^E!16^b$##nI#_R&JB#|gzr%Q+a-+}BFh=8E$)IulFUJ>6wL$;i*&AKU zS+Qfvb`H~XrI~b-a*m(8_ZshX3e5%Yo`TmE$_ySt;6Um<#oJ^ z?3QYey<1i^)c5p7I_w?;c2>$y-SeNUI}7X23J&RODq25rU(`kn5k4NW4&A9mDt^dI z-Ie3;?=Bw48E7NLKJSaZZ|R91u=HF9&PPvLdJfvGJqL$cd#d;!J}@djY8##Z!LFps zzc$*w{ev;1^MiYLkSlEEtPh?p?)hLm@AA&UCyQH__>#5{n|l5Bg9QmK(G=cG`pTBh zkqh~eTM@ZAXxlNXBWcI1&Y?SI9T>S|7JNFtb0m2hk*%v;CEby0Z9S1mMLpM+YuzII z1|ONQB`CSPKB}D+A)i#lHX^^nR=lOdHh#<8LT`8E%IlX$o*%NDTmbns4sGc{Vm-Q^ zvGhD@8Jay8zftlJwA8TAD`(7-n?UHrP;wdsAGwn@)3*daqVC_+&bowg9$aDRiPTtn zu4S)V_NCTYaxMR!?4>h!_YQtzw?u67@}VL5(WK$|T|u9FFeT}?(Hl6Wl5v%I*{4n(vAjfJyvWuQs^)i}ttVJN!FT0P zn9rAh%`V`Y1U&x8bz<$T;4dh9Udn*qZ@7PvpN)OUGh8?Cn1yXcY=&E!SWg|)W6eVb z0Vje(AefHQFlcpS2K4FDtCToYD$cC>?wiNDP2)|rBb^W?z;~CF)kUmg&eEa+iK^h0zcVX$UDir6X9D-f%_%@U6p0kx)KX#fWptTL~?h0MbGzp zGqC#Re9d2mOu~GqdaTsL8iYO;vo4ERpM~t_f7dK@#u>{GD)7hy9H?_-Ux z_`1-Fp}t!3jf(E&lg!wjkbdH8!?TpY{d{|fa*>M$JB!;Kt4W?Ka&zc=X?F&5?wGCe zM#?%HJA8J&tTSR*&~*tsBo2KH@yp~#Mz(#A{U5nM)*v_d!5bxS5y$GsuPYTfXB)X& zds-x44c|-oqVx2))EfAtS;jEVtTtqgZv0k+2EIp|GA5C)-=&{ZX4%&0Im45PMa@93 zG8X;HINlx4yi9;zo{w%IiQKe__(mr%E-hGVLlbPoI_!R#AX{Tqm z|9Z#|*2#WBV(}IM|G%ZvFXA8U#EG@Chp^C|lltD`o!dF{)er9MW`A$DjA!3HE)pV! z@W3+ScVxeToVAeibn97DVcV5~fOSIeUJg9$l|fUPtMSNRQeQKAn$RRYhP{EcCVnEH zS078?r7);@^Tq_W{LL@`g(v^%6IwRi(W8vpSNXqcT&zN z;(K0AmOVN3l2c;?RoQO-KZHhG@Us z4Za=)H|zOM{F`@ESMv$tH|U2v+rzh>(a70Ly&ey=?PcJ&-j)$5TFkke_s{I!{b}@t zJ$wgTh&4{xD`TBNT(VpC3Y3K=3r?l%-SM*`zuPt8X${=WBwnN9tH>L~qzQgy6N9$U zV()SxFO@*s+{D^sdN^`YptVN<>N>xoUaABvU^n}OcnrSkUglQJ9feN*B&B=$khj29aI9|?W&aG`@qx$}9p@nBTN?MR-SqAx*T ziTnE*m?-k-;5+ZGuE=AZZ&rlQOA{%v|anI7WA(bq^! zQ^!B?kEM<*{!1P5Y)2?sI@Q#_PU7s0c)ig3Nx9jkXMX&+jAwS95xX>I=Rf<}>@3yW z3|nXC!w0H^?-AF@JJMzy_tNIQ^i%$8{NJeFugEjrFMBsyI)e8%4%6e9GG)B;^g7Ms zRb#;C-$Q*yOmS^zv@}Yrt2}dZe~Nnp<{y|~UedwYS+Vzm!D#8u8>rvb7Z>Iwo>awz z@hoDhDK_=9@bA&mzw#}y483!nHCLb8&Nl@{ zWiq$1*!#*nftfdPHgck4i#PEauE|`{<3Ezb6+QkVcCJNS6S)?19l}-i8aA$lTobl< zhG;q4O=G$Hq)tOp09a5y3K9Fr;NUNz&nX= z3%!<96*GCOLH0wD&J_#>U``jlmfkgEKY;XKW14*chC#F*svm2*XpP%@XpJ zeup-#)NjP?URD)NI|BSpU<6p|F z?mB%oUIovI<5hDm8JJhOE;jQjc-*;p)oK^KYC`XPXEcr*gjXH?-{V!Qs~wjQ&a3u$ zJ;%WHL3l4YKS%jOHIP3$lV?S}yelJ8M<0du_VOb5Q#$WR zzpXLeW%OVAUHNWOj_@jZuEDo?P@ebkGSm3UFCcA6J*s~4Zge5@nE6Cm zN3`@4Xqu{@`y<>NsgCDNu(Fd|`z@Yj z_3|^uOujrbFDi-kwG+Lwxu34Lqotf(GNzMUa$Xfr%zTg0=X>WH{~CVgfS>)sG?rf< z>YLkU_*FB{grDg!jq$Qq;br8~CilV^V;*mNP3KWE523#%<*egbUL4;NUiQ@fe-SU+ zpOpI`ZQA!I<*eYkb6+1%E8iC_{T5}y)9@EiJgtj$?qOV_j}V?C`$K;==T^jY3NI<0 z!k5tl+=)Km4)g-IqaXMZdYap?ttTnJi`EL!VT@;AHm=uhvzYvLd$M%9jqH~nU(oavFF?`x?fnnE%y9PKnK!5O~=5-zxlZ0&;CepvEX`8tr?)xbJDz zFF|Ucl>g1*FBFUC*KL>fz&xY8Q1S>^WA;#cprrSEsXrrdmGNJ-ml5z9|5bY#ftkjC z)m}y*kN^GK6CIL0aJf<5+n!#23FU*u`WMGy{dW!!>+fJ+C^7jJak2h|>^rpqV*N{E zvHoQ|H{y+lJf*2ve~E=BIpO?s#rxai;{B(Cpa0!>f2rfM#`~B5u7AA0eEV7A{a;zz z8}Fa2pU~ z43raNCio+|t$}i4*pY9Def|GUPK>AUtwTSpa$@X2_k(@^j5Q+sQvCUhoEVkl#IVKI zh{$Nz)X%w2g6K};^J0`xCc3rwycnEG(l0N@J+VIS9waY@|G$wJauC3KqDl2lHNqp_SA>&c1H(3=wjT`{_H$%)a)duPjuv4}izVlzQD znNKb*l@ntRJf;T!xIN&V+G3=E`^DM;6+mj?GMrx!CKMILY zF8iTQuLT#;Pxi}wQ420f?u(7IJ%_eMUl<}EhSXJ# zACj*~@_oGdgFf7l{Ov}b9>GP8@k`VzV%_)*Dw;$z;* zRVQq~uz_dd>lR$Zd5Pf1QSiaY_faVD9Iw;XCh$;fIJ@CFVelY??mC&gKH?+#4*5R% z&F^o)J=)UeH>EevMvXbo2JNlHm&qM#1KiJ%Io9QsGv_}vsYuVmvRU&B{@yM)iQPli z&x?%7nA6*tKgs8C;;RYl5fa%e3}MfZgzeDIxt3OSuB98_C9#A0$(<)QQ1SON@-0bz z+isQHI5ChXw$F*=vgExt$uHc=_zz6;wn&~T$-^W4c#m%l`{nyN`1&Ma=fYO1A+HAO z$>nRszaRQsi7j9lb0uwM#p(^=Yu-hjVd|`6pCjY1WY1&eJ>7=d|BROtUzM|Wb$>~C zUXS=Ymc`D@tp{fpIg@=4bA4Dl&(}#i<%zZPPl0cS4Liu3U3{zV*A=?u>}TmlcO~sx zXxDlcUa0k4oyWD5YbE|RA#9+bE47xHz`m0F(9E~WvD*QzzB^QW)Sx`rOB?PhBt0m39=JAqyRaoZ zO>4mypjw{GdprK2mCAc!H?K_awyb(l*LQ}Yedc;rJ&#QU-6wrjaOM227CZY&@kOh` zuPl5mW4KbCNjN`TptV%d*Kn@Z@*Z|LKW8h4leC_b)4V+xym}_m7B<3`&_u08^seM& zY>C`c;@|x?XJ^;_ab`!|j+sGxzdP^|57zDGx|3@iSNz56_HfRzENaZ3ljAuM8&vszjMn5|jn`Sb; z7#^`}*4unuY^fdBO0L?m*fqxo-lbiq*fkGeJNzr>rP1!mZ)3ND-giv`C#3xXbj~Ra z<)uCk|mBt?9LojtQ&;cU{g@ z-;q1SACfc69iA!(Y+w($|yNEWbHaYjj|13tt2L z$Ug(VDV;(O_Skg#9$u)m2>-DU*KW$h)>!u>e48`xT7Q6l+%?|qE1v#gG==$lF(83O*R`QXfu>ow1A{3qmnf$53$T1&@#>GQaV<7N6k zk9?-f@82G}g*lonFw!DnXoSEuychmfgq{bxYXSZYn(&kbLPyA{{#*Uo6<>01H|krp zn= z8n3v@yIpcf-Fp1fwUQ%D?9NSMcg6<1AxkSAhm9o#8?eZV4&ax*;=b-d=fIohyT&vJ z9_WJu7^S0!W-b(*BzLg=57X}&$;Z)c zW}L;Io%-xYlu@_fbP@W|Fm;ITa4~I}ZL#ZlcL}y+^Y^05ZY3X>*kQ}@e-Ben0rg}_ zjxg$xbs_I;_%K?!D6W4Go;3CEgQVO$;+_{DG(AU8zd-trP1)T3D%_rb1cX%_gU_hkvW?DY4Ylo#+mXFqI{@yeQxAG3T<&W}=0)skL&Y+1~% zEYCFVzYy2w1{2K1mMpq@dAA8Yf6;aWwo4RDB(J%^trb1|gt&TGAH8$8``x76RGvSJ z9{X&4MX%Yfua=mu{uTCz(uWFczg@Ahir%|ga0#1dmFS6?Hz_N_p4lb*AaTf+GHjaO z#3Zg)aZTWQHP=M0MO>|1i@DmkVwX*l_pr+**|&tzV6i$yf~>j4(f*s%kY4p1(z>yWdXA{mUSAl)OcbM&lXzLX0}Z-W+CZ zPR1rSXD4G5o3oR#iOt!`*u>`SWNcz{b}}|)b7pMH<}735d%+Vo_GQu4htSJ!;rc9g zWCMp}PF=4@OE*&<-guqg`QW&xEt>tAjX!4o;fDq6dz!hIv(PR72i$}w62FOG5qi>G zZ_nR3EB+~|n=xlHZ#!Sc4+sC5Irz^+fXPA1tHH?{@V>%Ta{ul<{dtM?={{cK=3e;7 zEzq?==@@)B?GA(Q4$Mn7{^9Jrr1|%{kJ8zA$Hc9$wPsf|vXU^$x;I z+Nzg+HeT{GGp&yC5;L!P^+ezLZsx4y70|0CX*%7p!VBW)PTRkN?)X!+oG%NV{GdON z5dNdVn`B*XfbJVSs^VaO9@PQgxSsDH!)9ynLn}1e#1Grd{P1h=7&8q19PWcbLpUk- z3hKH}>SE0rGNQqMYT+H1%X93>=I1xW_*U)v(b9@X&g5II@R1AoPUv|V_b%?ueLz3d z%Qq_D-<8!`#;Gq>~ALJ{wmhzy4S$LO(lMjjo^K~ zeKvTB*m|Gg-6e56rGxL}+ygUDu`Xs#V?4#qz3`NBuJJsjWPxqX5Bb*MDOpcNOAC>W z&A2Cf5C7NE+aW89@6fol(dp(rN>ODWU#aB&Ec=r-7d)l*OMUcA{EN){ldLso=O^wb z&&^ND@F)H(dlS#Uot>XJz6uNn*_%}0Zz#{q{KUVAva|3LPsO?U$p-Q@54Ja%a`a4o z;==zSes40Cy@`1bq5Gz)J%r*X&R+PZHyZq8Y$E5E$M$ftH*uGLetwcnz482neMwvO zk1qFlK8}v!Y_?^F@2NpYYl(Ax6dGd2H#6=xe4Lb1C(n(22>zgh(cQBDw3Yq8` zdz71a7U4W4Ll#8#?4^-4BFl+?XH1TjeajB`(N*X8rb5Z}y6h|ZF!3GA<(r_uiZeBu z;3akV(dzx=Yz>>f#|gqi#E;16Yoxocug2cQ3Y(#Ok*s8r(~GgZiRPb zEimS)Ozmr&?7sz$LG~ZRP4!sJ?ZZ>VkH~1_`(}RAnUpI&uf`l~gpU|=V8)qHFeyiT zUX40DCK<#IZ~2gCXQTgn-o|%^y@>d{HgN6a%HAYL?M;xeMb1|;1HP@|M`WhEMPFph zF}hpAz0lnaT;u6(*G;xH;ztzv?rgt?uE(xfp6M*+TXa35L$zPUH|U6k_7-wqf}9?j zq_u>Q*)8k|I_tguH>txRx<_<05Io?~29zxcU$1=V#j7|*r?Gqi@o|s2MV~ zqIb{{t@7$VilS4JxKW)R<4=knq#;IUl%6O{*Awl@qo3rdP-ykjux znXYXci;n0dc()BWihjskU*WM{{g9IB{nRJ^2WI_{qQN(v=~FrWXms26cvs0`=tJc^ zvggce@d&=hanFOtO|$}eU(QK*D}(bF_+F>I#Ebyj8qVw63Eed4EINfg*3t14 zUFYtrS779g>82#+;8WBSGy7C(19E;blBWZ@%w%4g#HfQlXi#~HMi4w!Qkz5vTulQr|B(nhf|LMt1SK- z^9*g=YV02>|CW@~%6q~;jQ&TUtp@M*yw2VMnf}FCUCsDhs`2Xk2Q}XR$^8RP!Mo@FUSng}BeOq(^Fr zH;}!k@DbrDS7V_I)mwdYIEyx$vuHau4flr@*?e7_M)--L($Av3&+6;iJklR}1iD7N zo4xlu+GNh79p)E1Q)nTyS;fL}9_=Qp@5)iwY_ZR|oth8$ul5k*mrb6kh3N6!#PB-G zz4;Q`6|yy~3t{^kK|iEVVv7@dhTKc+fn3El6|!Nwxm5FqvE4d|jlh;kY;T`UxqD#| zzM~T3`v(={i+*=&QER$yH~lc~#jY&pw@)z2v~>I?^>dkLjW)lR5%{(74t40?*#jet zvfl5~1D6@!m8JNG7|)$!_$DLZ@BM!P|NlSQ-aJ04>i++~GXt4P!XjiL1llAZl7OvR zkVS`*#U&tWfhcupnLt|;sI{qD7iygll>jb`Mrom+4?+8>nX%Jag(|hJ0n`SyRkXE> z{nbfm>x9r&L@`15ah$jk13`r6KT*1PSRzT0;J zztxwAxM$EM9{P=b{c)=~C$iejPrr7!`NE1Tmv3xJw|yinH}*p}4f|Qa@G9HB}48_GsQg$i+{>hERgupi#f71;7>8CV);Gg*<^i+#CRZpBF{n+D0 z$QEiZ<7_Z`N%X|{KDm107Ic$`kfApqBW}yMz}!zxovD|L#wvGj_^|wk*V_Sv2}iWGO29F!}+N)weSJAJC6ODgL>YfA`M}4fwv}&;9+Z zMCK#;%y{t$PMdqY-~nVUA@~5vXVj*60(=~^^bUj2 z{;?*J#e9tKkkH#mhdLFt4Ad&yQDIKjI;?&@XK7sI#t{x7;<>5iof_Qz|{ z1-}QqnF@zH_VtgU4WHu!qE~4zmHrOA<)86a(seGma2JlQU4fkqa`VnNkxj!B=uY8* zWs6Dwty|aNIAi(ub-&UT+hggZywUys!9Vj^>Q6%d|BUBPr8{ufw|LLr_g0B7 zh#K8*w$c5TqtlEovuW%~{ug-iy0-Fc>C^o}_hGB``HS%vP~FsL&WD%rHADA1r3l?G zX)9N(MDLqn^u7VUrJe!1&~v(HK+FABmGJ*Ga8fF+uw}&kXTZkA%mw&6Fsctn_niS= z^vdoTP?d59G~RlSIRgT1wruFQGr+MQD)8C%LvNz<9Z-MY8E~ZU49M>)!4Atl18yDk z4A_IcR{t5`*bg~p!0JZ(o8&_F8Ia!X{40zzylb-DM_V&KPkVn% z!SzOV;plqXkpZb6yTJ7>Zms6O&Vcd6l+ZUXxK`i56B}F^h0d)nayF!nb4f=(&Z^w+ zpIPeE;f~KeH{3HID7~*U_W8~^Bb{&gy5r9oS4OYCNat(ErI5|IeFoo<3V-~2C(y3) zN=9G4rvJ<+MX#VUHH0ikI^Wd3PfUr6fPe2y$%ej@e%zVSH+I$iF#hDJ=h{wWKtl%9 z`NtG^v>^jhT#BEf$92b?3QyI!8vZ1;&O&UF{y`ai+l7CxgTptt@)u%J%y^sc4*oa& zOU3``$nFEk?EgfbXWs1H=HPmh?>~v_li>R2oqjIE?{{E7-7}ztv)~!>ePh5`&`z1{ zq}ykKZ3ooxrT()Z$$y;%W!I#h1;nf6EO_%GU(@#}E12pmSoqhJ?wsIMKqNU_b~sWueBQ|*V=&sx;GQFiGz z&K_^#LNq#jfoQ~K=#7m{srZ87dFv&65kJtfagej1y0m1iu_eVv9G!H4eparU)h#{2 ziOz)XzB3`OYaV=(eJ0#I=$TN09=88X$m`Nwu`XZGvBds1tM5#pzNPM&Fl&%AA+KxC z=j}5gaFR2jo%?ac7u2Tc3T8Qc!L9=zJrk<)t*SidOxWTb-xWPMU$8-TKu;|E=VwA- z=|}m3yc3@Z#DB<+e202d_k5*xs%Qj z`BX%~f3@5XKX<6-tax2-m3(iic}kXC3$9{*jcl&ggS?rw`J!dbT*2O-k33;Tx@Bb0 zQ@9t^l>-@ni~{^6B)_`OKSOdQ;fhXVN5XxQfvL{s5c_~wb2TCV%w~K@w&Fw5j1S3H zd`Oz{A=!!#Ni#kqTk#=j#)o7pJ|xZfkZi?=q!}NQt@w~Uj1NgOJ|r#pkZi?=WGg-- z5933!6(5q86;{u)$UBnA<1|*a>HQqB7Vs-k+_C-WfhDVxoUV3RZ&f>bV&%JuIM&F# z_PRJd@TI|VdM7f+H;LP0~98tyY->#iyB=o_?!BSTnAmRE!P2mpZQVzJ!}X%TXYGn;9aBZ zon+&0Z2PxCtM_~snd9{LzxjIOXzt%VR{r`{=X?x!Jj7k}c1@g!{utl2F!W0lKB;7s z2cH?@5l*o7P6^CkU&dOPzq01(xzV{LCHTZ6g*Rjj#vHx z%9})nqdn~fp4!t-u|8zbfs`K^s$Qr_heaT-{{m^ z?37{3m24~EA4+(EmM&onKw1T(gAE15FN!&Ko+Xsu&?D_?Z zxs)dsPE{vmT{)0wdKagg`guQnz!<)nGB-8ga@lmc@JWETCrq~cWB3_Y7fX8nfO-z6 zz^WL0KHBN?JY+&kzeoR+GXIW@M`wt;=1P$Lv|+a?8IRzMteJ>i^+%-T9nV*gKH3o_lgPP}ml{1HvEtA< zPV`3h28>Q}gLI{?p7YnFv5wxc(*m)Z()-_UNcr#TQ`_A9^wrj<=EXYQe0^!e19sEU zl|JK^G3{o@KJR`r?|HE+-SFFP(x`q;eKXO2tLJ<)lwi`+Ey zs&WEH&8n`Paic>E=@%dX9fi0+#=)*8Lv znl-a?9Dc-wvct1(Ar8vy36!78Ig;+PrU&@HE;GDnUQzm#`TSSj`Jc;M46UWSw*-b* z(~~PpXQ$ukS(s68EfhUac^1C2nbz#&b%Ugjv}UiS9{EG34==qxaO}L-Gh|CzKhwlU z)mc;WvB2WuvcQzJnfDPtA$`g^@(WK6Y`gMk@7d*~>t3{WAN0x-`1WU^ry^!=vzK$` z(XwdEzyRo--Ti9FLbM=M3rXJ41N}o+*s_c90 z@x~G5-NiM;z*l|v-{&^-8EmLZ(UY&413wsHPPz1V)^;erSJ(^r-m1eCyu@GRmP^Hl=#}+)YnT);xKb{ zCeJk*c?@FLoE`6jldVC+ekr|8n`=GovjIk75`y|E|7)cB{`lj|98L#N* zMq;e7CVDJS>zq#TeWB;BU;y4FpFSL};5@jU@7K#$e_gP!{&{|@`MtoeA=ul+-E5o} z(vMeWjalExoTPiK9@(0!uOIL&@d)vYiC5c6O!k0BeNXQSUx@sP^v@2pnhLtDy1N-) z!FPFz-f2cph)z-OWynwx4fxJCyc7%(_ceJ9@+RNd?nDFr^$l&o>IUu|ppWg;_3&=* z-pQF(({}n&ko43YkS^^gGK5h)zwD`NA46SE-fxc}#>3{a9o?5+9PL_sNwnwsOQWrK zajzR~?D1aM9i@$(tIOi5|G=Zr{=lNd+x#`@5)<<|d(+O3?|&o>U&*25U(h|zGpu{3 z_q=$Shw{64-#M&%Px-}9&np}LboVRy(XQ9WMSBj7kA~LZPkE;|9`#*88Gm}iPpP^|H&&9nPk6=fscv}T6;F&bw|9xULLwEkOxon~CPig)R zcQPO+M_PLC{g*C}@qa?ghDVJd)s+zBsth<*6M+v(AxONb4^y(~%Q z!(yL$*rSEagZA2O>_M$1?FIaqtFW$|datHlot=7Dzjaq$6=~B_(!8uGr7cWJ zdl-D7w67?ww6sohJ^t**O~`H^n}EDRb>&?F{z4{h@t$*;4XerYS$B-OI5boco+JF( z;>+z8Ea%bZ#o*g4?gsgeFMIvcsa9P}?t`0jww4V2)}~NF>zr0^eK6*`y!%D3xBJj_ zR?pE#Mn*f=5YHjYv!i$MklEKbeX6C*^t0D)A{NtQtC4x+(4S|CkrC#9p3@&6{V_Ph z!RZ70Gl~9u$D6f&F8v6M`Igg<2RA{x5GUoGcNb&#bh193H%MQ^ce{NlJ1EkDvdOek3@DQemRI+-iqDxaptu zqlt=`?iHt%`eExv5dj^~2ARzDxC&h*50u6`ky{NVN{bdP1hDC^)_ z>JFT>c2hO?1VM)#9L`!-?4VNiTETGZV38kLmU|BP!;2Q3?`!h#3{A4ng8Yyb&Hkz< z8XD6&#|nh!wD_vJ19?`@>(qNF1uqNVUI~nn0c(3|eV=yfOH4Rf=t_stc&E zudXy`VAaJlTsU}L*AJ+pjIk+pRkg1?-in+vlvx&U&G5z#tsEZhUOXat6dP8Jr){;5 z^YpG@Ut1%>i%y}f=8rk&p}}vz0Kc^bz4d#7o`5&*sedu($qUc%)IUes^Q2j%y%2no zK6oroJQX$`U@jcdS3mIWKF@}8VgBG_apC;HfH4`n3iteLofav($Ugr>4`o3M{p=X{ z_ursl7P3|izQ4X7$3eSS9jfs39J$cb zT?DKrkiR|C7Z(n8%M{fU4~g}xbN5geci;XSWfF|z`=hL;Nt8VRZGFU-855nPKD9t6 zsZXMlRR7_NN)25p8XNl3(A_!Q0sptph~~{Pbhqe|_rZOldzJ4R=G8qb>N)q$o=Ds; zzim6d9X^1&VD^sZE}j;L4`_xizLGNH13Jk!>tZW<&O%RgcAYn>JAn(K-;x#LTg&4` z&~C+-`H9ap{G>L#H<-SRjh#omukW{_>Q5VV_q()l1p4ztxMMfCV>#pQ0l#!U$`AM? zvY_{-T0Q$3)&x5m?t%`!Gx!tgL2mG>RXEx3H|BrqX_4%qK10{k=r<#O1B$h(~+%4r^Lu>u&GfeVn(7Gj}=VO`gv{}Y9gUGD#IVdPo< zTdXY)H0y7DzNSp(QSZOzf57?gVgJ6$yLcPBpVK2hqFi5$GTNKU8c>Wyb1xQaVlwZG z-FLpvSYtI^obnDXZJNjX6#8h&kSCusollcUD|7Qgr_ZPCr+F`M@@nn0!n1ATJ}|AD z&#`{qN0xE~IBNa05c^we=XVu8)>T$)6VFqevSXck#rIk4wcoDxQAchJc|g-)_KoTo zO5UQBd}`~>)n1eDSC=T?IFm1xKl>SNlnerO9 zjf-+(=TV35xlQBw4a#;e{ph`rnuBci&vf|BpWbCP)oemuo^$W22sD zQqK+4um68@(vGFvXV<;-xt7U{HBffm!g=iHf+A?Xv)1NAXVksScn9W{3`a526i#myPW3Uo%ZluwKYwJ6-oVcBg5DS?mDiaO!1N4?aD7$g&0#$Irsw~1JO=A;9H2~Sf)zP1-fGf5od}GT$AzKRkM_apPgzZ)_^$t-g0LV5T+&8++eySFrXC-vpcIY14&`z5cRe z+XWBgHzD9L*qXl9flJ?7cKZK>>3`~4&W=4SICXHRnOQSAv1Ppf&gW|q{)V>Z9==TW z?y&*McgA)Vv3`!N`V8eR zrTit-1OIx>0(`G7;;bBE;`SdwPW$0LE7An5+f-f{QA}mc$1(2c2q3poJqdgyl=drw z6YcnY#Qz{BGjatz;Zb$3dEgs?#Ra!nb;D@4O)(~~uzA|RtE(3kSb>$L)MI$UdhQ<3 z+TO``J%^RnN%yQ6o!p;(e+d^jmK^gMTi+JqHmgqq)00O=&QzbG^r_%(bi3WXRTg(G zC%At(0R5HBw0er!E9PG6ah%uW<*aYYmCTQEovnSSvB87pkS0DjKs!gVy?SWn*|RuT zBJWeqg+Um)TXoz+dnRTp|F==!TT_5Rz^Z!7>#g%L7V)3Yg0puDW({_H((Mh$HcH;t zd%d;eEpK7n1i|Nv22x)ThFs{R3>0Y0Dm44t@%`v5C}kD!;$yAW!~ndGsHQRd`OGJNocd9Blrd$ zlD(YvEc{aB!~2jMqN7Vs4=-w*n7%ppGUC!U?1lz=E@<7!-KP!D2d&}ZIoO-@q!*!M zQ!GI4-d5d`wW?lsUdzxkE0%*zUrmZ!>+Pq9zV4ibPnV(7ODQYallGfnmsB3sjA*JK z^Iz%0M~_iP>*ZRWiaC62)llxw^l*=`6-&2DqZ1awBOsr^_p@giXQ|?4YyBwxFn%>> zVe3+5Xu;5g2r{c!JN=SfgYwA_K49r?vDVpz#429v?Vgc76dUy%Yqa7KH&9RdDc0!B z^wQZYNn0^CV~XMtPgMQGxyz0;i?qV@5!2*XlyOS_H0b}B>~9n&T>hGF?B~i4dp86| z6-PQJT9N3)xlx;jop8KPqJkKf(8S0dUoEmGMx^KXAJ0G0E$mL;dk8Q2iD(hqz z`}Qi*vt{o4%8Xm) zKCodtb!S;RPk0#aHnYrqUw)pt(=5PKcbTQddsebWptI&;j}$`o)afsKLjOylDJ}7| z@LAsamxAroQ`Y?|YE6)G@fcjd&EnK(J>9s@{L( z;wbT34G;5%csssl!RNfOz^+sLmSitKB0lHO`Tx`hz1xIuFQqN<-}#JvrWyMfXY9GL z+Cj#?>GM|fq5sg>&!qnM&De8dSDCTr#HK2Zv83{BhOT5RkC?I8JR7ok)BghUr@}|P z++by!Qp(nFCbi)Ir}3X`O$17P;`bl7T2GH`w|q^aFACYn)_Yb2`;o`XL#IbP=z}Zx zmaV-d8p(NzCbO7#59@qquNN|rvcPxsFv>NHzR8MhCtWn!@#*-UlU~Rj-ooL+SJ}Wu zGudtDo&wei zYvdNnm8PVxQ9A1}{fxoaVuHQjw-%9+s*W1!m`NS_pUs+^?$nn$SK@iDr!Q(>Yqpho zZZP)q5WKenR?Sd~gou^N-=>v*0NdYbS(!Tz!A4 zV}A5SV(k_bLwhscUi2RpIv&OpnZ^1Lo{)~FmHhBR?C0#*&&e;E-0;BYc2@9z{@Lp` zNk=4pR(ynH@=tYSM8lkuUQh004==KM#49Ydvbsb!8~O-);RCb@ef0PptrN`}+{bvn z#Tcp$jg)0*Mb_~m!#hAz)mYs#0?= z-uF01Y`V`AyOS{{&=(ba)l*lGKIpK|A9;{{+C0VPOw%|mP}f#%Jmtl?#-D^v1E_}~dvPsf_F_%fXl_yu_W zr*+QVz`oi0Vz5>A$=-{)6VThuzWalcOSd#+qgT)BevtF_H@V$UH34UM9i6x4UUjXv zF{}rjwIA@GIo*CW^?lIbjRY1Hj4o)Wf9N#SKiRLequ0ki0-Bfm)(jt;7qi>0?`u18 zJ+!#`{(;rg*#(_)A3WsWkby9tl7$u*wQZ{XS^aD2*2C|nC)(ddzrVkp`3)TKER_7C zypX-Ii}P?5yu*m_oJxbE-g!4vZtYMVwWB?=MVr)4u%gT8uWT#&&p`Zn7|YwA z)){yU_2>-zbuh#kcoS#fjhq9O;J6yjK*>6v_Ra@p*|E|8!g?LcdM)sceat%@e^2Ii zsq~Wke+EB#)#0HI!TQF`?xzG(!TUGd$4xfA{YH%Z&TnD zV6hjSC2`6%-V$K8e~ssf3{UgB8J@(u+)cAT0Uw(1rLiBfW1pDpte2N;ek-w@^}_jX zua^b=>*c>%=Tv*GxNz`z=j@#2%UdtL_UmIdZ_<7pJ9N_~#YR`Xg5!hqS8FPiOP$Q? zH#kcL!}KA{12C*vmKOc`mypLJKR#LP7Z=V?gIE6Oi#SOxoLl+t!ue6^5S-tC zuNO8f{8}pfh66trX7jD)*XDa|cmeCG<_6zhjVl9rVk>t3(iw_BXhmr_=eYV@)@4ru z9dmVBcupw86W3iMPeZS`>mS+TyRFz4yZu>0f7Es>x`&KW+7>tmJA3 zPUAesf8<2CfHQZ;Jl5+mY<3Gadg@L`E?VIC)Gd%s_YgKn;H`oWiHpd6QcB;6&BDOC zlIXluN3GX0TYfMFuVBLjEl{x8Qx`&3RPYQoF|v<(iSpP-4J_~Cr6~BMmj3Js^IT`$ zqL}K>`bKw`$@cM-vm)5!J-$3K6JB`;_ISR%3qI~^D#*mHgSAz###2`)yQ%e_x~=q8 zZD>sj_n9>bep<^~*IZkSQF!KU;ttDRryiWDHPiu}qjmi(FpIK|S{fG3!mi*o-CMKE;#9l_T7+j!o|a}UqE zf-&~j3iej({kwS&ll~mfdY;eoT+Qh%STd`CRCq04!Gnl;K@S36`|sCc@G-PjDmqkb%3I>a#N|2ywa#qMSQ@=K%d zFa1n3v1T4P%fs3iE&~Pzhhh8n4CkyTvumf;zW8JCRy{b&@X+9`df_bb&)|`7U2a7; z0;hU#$&KGDjm~s<%SOg7`depaEcJ* z^fk2-n_cvP`fr6Bf}XJ5e=B?^|Ly);;rd`+6?UottH%>w9aNi1-$>3{&T;CMoY|3A z;3rT5jhz+qRp7e;4X(8jy32+^4Kzn!RE{0v1{sE65gO4tM{ui|fUFH4u8>#n;h^~P zM&|r$j8Sa_M%X+E^T}C$ybkZ^bkrTfuH6u(g2g0${tvf$bItwrAu2Bw6MA z#53E2|5|5;wVitI-!qyyWlh;Kvp~Gs$jbbjcjt58(^}543wW*zcC20>Oq{Fp@9toS z4>_UEx{=5USvULe0o2`5wZNrwGqknV73(7X?(**BME`8@LAN9S5`BuCXhTtJNu+wc z)zp@c>;ze4&4l#LI^#SZFK2BfPY=(Fcn;w?pQn%K#XQq^F5n5Q)?A1@(u%i=M_7Gd zunju0rC}U4O!?i-zHbM&X5MCGKsC&3+sBC?&6p(%YGb@DUTbul*Ed_TnZ|E=qN_(k zlcmAiN10FX#EIrjI>z2rRu5}@L($`B>O9)8++qziAo~Y~E%?Dm1^`~!U=>b@JbKjI zq;+r6j)yh;^AA&bdtc;Y;#;QnOJ~v#&h<5&3Jx;+pE|SCEhBpR_tbMk(F;f`8?!1DKA$sV(*8@ zq+PkQ{ANZG(>U>@cZckt>+y4aT6;pWxVg5D!j((c3}rvl{xD?I!;np9Ae+{DSX+|5 zxr>;w47eTc5%3Sc7{!|z9k$H|HP zp19A#EA#lt-f}RWJRcrst}p+whq1TJx{CD=uiwo7F-yeb5RZ#GRJUXSsw->g1Dig~ z-MFb0oRU}^p3?@tNr@SH-~OZ`I6mx76x^n5v(ctua>_9yjxA((hd&tC)+&*<3}OgyXS zbHT(9!*j+m7v;3!@;q1g#;&({99yS#wbs{S_KSRa8;NQG}bu#sE?p0w&*U~`BzCGXfp{Q0YR{|E1VvTVj_WZCuH zS;trM;mW}^7hoLDuq zfrSje75r;t`0yk;i=IKwI2YaDQQ{yT&9ruuq5CQ|XG~_iaw6+$H#p44-tlF`nM-8e zLnEJWuywQ_uzwT&?C9+;T`=2X-rCP$jZL(+$rd5^YAbqpsn&09?C*a2?Eg96-(PC= zoX4C9Cnx-);)x4e=aifFM#n3C=XEEid3s7m!t?n)+P>PJOWUg7ZTrx;GW2OcuX1iJZpW<=d7skdvct|?5{BEC5vUA_>ZSqQe~ZWz|8a;x%G1T-3+~@c}e&e+4`Aj_-Yi2?_Fs6xtMki(NA}+ zTuzzN4|=zo^NzLSJ>qTB{cEmG`Z#RT=laGy)&Za9;=~01U7Xm!d6Y;KXv*_ zd)9)tmb&_M?HA(Wz5mFi(JY5H7EZ%2>tHi$P_*$)7xdG{N$^OGqqBH-_VM!N8}Wm3 z>qsqsO-lJ1+OKrZ@ZO3MCzKDpIop?gvhRj|0oNM(rPZNd!tATv8IcagbaTG1X&Ugd z>6box%ncTN(c{eJ=_mLW<(q6^O}XZ&ky_r1csJ{SJrM5kHp$k>V$X@rC=9l!% z&^e@inzRX|wYh1);OR6wZMT!gyg78y(8!PYHj($A_T|rseUteV4%MC)&ar8zp^@*A zSN5bo>dTuOyWYtwd?_0OH}7Whs*Vrw*V7sPUAGK<%%P8VdU%mb?}^@gz1}VZ9y9X# zjZT?qyc?beysvWLj~#8qzR)_>nGj-qiihkCSWQoIpRekgPa6sF*cEzKSdnhNrQ(HP znl)3tP3o`KsB|^Ib#y2{J74F9Z9A%UUJQ+*vuPG%{WxXnoPG@~_rsKOW_>$!?G(z1 z_B=2Pzig+h`mVjVRefiUZYRd4){NGYo*K_f^jYufV`|^sv;^noF7l}E-%$5O)ZJT= z#=Xng*m&h&>y?Ym*BETY@~{<4bMBVz*HK)}-2%Snu2Zb4jnK3Sc#me}>Phh) z6Re&jJVwnajvWqshVG0IJUZcXWOI>+%|!sYQlCtebGg~rDtO~96TtPzK(`wH3;un# z6}g2u7XCFlcj(W+-HW>4_xqxvP~&i_sqi8nU{B zz@%BRTHuLVh#f5cD1l6(xnUD_Ll+_Af@gB@r_TGo0Gn2933R@ltZ$3xTWgvXZC>*Y zXd&qa-V7%2AJW=8JaLG0{_nt@%}GGJybm0bw0#`!U0NJTJZweY!oE4_@PRGxfr&Mo zk@zOs{2g=@_VgBa8Yb3YBQSIb&vKrUZ&dJ{0Qfx3f%v>6@Yh`DK}%}9 zqSZ8B#bdX1N#Qx|>r0Wrq66X_tAP((X7hosiVqCI2OeAXS=Pi7*2d+mk;||HtilE` z&Da3;jP6ArF-G^KXI{6%6ehzlRg8hfPheX<;pL-{IqWH4+R06m3`Z*ES@H>Hf@?}RA z{Wj-*H@-;nGyd%>_btk03<=7~pIb897ULIN+7rT$ySialaG7k|GDpX28_w(Qg#N7N zZu55EC}jQPyUI?J3~Ui=2b&XU8u=uMrfF|LS4Lf50l%~%FP5!iA+ghxb~WQHsPWWY zEBQEMEks{XaD&J8_3ZZ4Rl_SP-}&^TfcJLfy}PJm8F3}&`n+A~S?K>(ICg5tz$@hU z_bvPwB_G~KyeRpKQvPg}=e?bDl`qe>%i}-MS3bu7X_RjRXDAL|<*8QH9^&M+frDyg z+rhaZn4E(wGqE znq()E3g0J&QP+oMJLdVVQOM9&T6y$$4Kj8=_ltfA&-?)MyJmsmeI%=C_n}8IGDz`0 z7xC`uQGD^*-3z)qGd(@E6&F9 z_p@B``&Qn!aX+`dob>{H#*|GCrj-RN4V|L0EqKm8Z$ zpFsT&QNLmcX`N}l-V^&SwF?3(D>0&JjSL?0-`e zp3I7Umgldi)0~6sp>MMGl)i}cHqv{2Y4{F|=8Vtctk34m&*ALPg&u?^+&vU}(1*Q> z?y%_B&HR=#S#cT)!AX*dysme}4KQ?SZtNAk6F*=lu^>9J1$h&iF@!uv_VzVbv9FQ$ z+|0T5G_-FzzI?UlA8OD$j2V@_zGp>gv}dI^8qBl~c5v2&kn^aH!umUcwb*Mm`yN8y zn}=P>nC{N*=67uAFPp?K@QdOojuu-O!E-NT;w67^`@&vG^b18j0~WA{5Sv1#?(*wcK=Wv`0{ znZdIXeq-KpD}oRA!4eNL(#h7r0ME)N8#m3{XGOM*v<}XjwszC}iJr(@pLKA)Z{4Q3 z_?MLIVx_(xmcoB!q(5lFn5|fepAYU>xtE;~fJ?rSNZkGNDejv== zt!M9s(xi(D2XpeQp4~--*(mkCGd}YJhZ^xNy>`p#78+i!* z3mf~L-`O^-$YmeYTEj<4HmtPMqy2Tf9jIOY?Lo@R4m7pA?5+0W*O6e~V!w7Ucg>bf zeK;0b$n+E(TLY{m%TSxgRxM$VUCv&+j6GMy-dl{H%_3}I(jqNq`?62=U3jVx`p`Nx zCsGdnC=XAMc<`-z>wRyN?r5=qh3qEv6wYwv37_M8-#c@31@FpN$l6?neX=c+$cbG{ zx@(`AntmbaeR2i%!0%Ss`kAM|Wrm;MZABgh7NSp|aMOSfaU%>)RGvQEWq9bE*nt$> zCHM$;2|m{Vd!0okJh!-YfwNA5Ur_o)(!WjmN$K^945L$)Y}NFSXO#HovU}KBVO1Ti z7#cZDn?{euJ~6aA`(_n5Wfgd-2D~J_=#BKJWprSD-WN-w-Pa6_7J!!?1~0Y3TZJ3$ zCVqf$()~f%%C%rCcZBj+R$#wHxt|<|NAhC}G_Gs3%nB){_%EpL(Q^*bMz19x8k^Cbo*$u77}Dl<$jpKgkhV>9=h&G$!^Kuxw%O zll!<&i2Z;pd52^oTN|(kY2YrZA+!@3y1tz5%uK_f(zawpKSSTT<~jy3%)gAFKeFVpZL-8`LRErp!_BWmxzZQtlS$X zDOc&>phSfy@_UcfbUXOtCh&)=)BLfsM<$v*l56{=vR(tkl+YgOtvIp0+{WoXV{?$4 zIHcqp=2+`tKkMND^IPyZyafD$N#pq;V=Z{kQ>X7mPTGs~!(xp3{;0k~zetXx_g`{$a|SH3 z$G5g`T_x>zCA>|y);~dM6ozEH){IFSAG!SMFv4*t< z=Tm;2Y$>TDgM5kI;HF)71j9R@=Xod37lNH{mF`&kO>0MZ7xp5%UmzWyy4}Cv3EjNA zjVC&j-FtX81a+=z9@l4BI~GxA-<$%g&jPzH=0@<9T}CH!q&c~rxW$5ZvcVH+hgZ`4 zm~z}h=FVB_TD7HT28W-8&9y7 zwLSvao@hODPuq@p{D**=sTkT?+wQuyxLYCl7P5<(&|=fDAD8_XGEeaXpU|4MptX=$ z1OhIetPk#yJnu=?U_g2!wJa_V}=edjL zYM#4!HU!tQ=C$4*q`uTXrtTrPk6QEp%061}>?8L4jxhB?x4mk8Ay;(UtL3FkfIFip@SyoHF1IjcxmOUBDAs+xU1vL&GD>x9cm^qj8_Z(*j=@-4D+Ibrez_n(bAa zmgDZpcWr+3`1G9EuSqvCKPV^uMBmN+;5=~43x~C{-uIB#rTertK8a7W)`euLv);35 zKdoosM`_Lg$FE#7ko6aoEOq}{2C7aO|ntsTg|Lj z;xrtT&#me!gs+8NGM-;VRigI=1em=E-$nE&FVq>ps#QQrB?z<~G{*L=#CT|?Orb$o$50nRr!ro>v}SXe_#dk(VxJ@mz$6^!?9@ zEiv_G$Hwy1_nNy(yNQu;Fhldp_%y#7V+eTN@2ry%i~Ev-v-JmW`*XyRe6~Eu%66)DNpfRn){H_CJ_sTr`D$UB<(-ucDw4C>h$+- zXK5{G#lS^P(%!212Oc#SUUdvSD>}keWARN-iySt#Z^#9Ndsr(*hq1;N z?Y#&&+wI;cXKqhEeu9dNQfaZjfL~nj10Kk#4LmHtg}unP5e41rOD{2#pMkOPpAzhoGYl`$iIGjB}JWEZ}O|DI{jsHw~`4 zzjGXVS!@TQr)6v|uC=1)R(qn;zvzt`U1EXad13oQ%;m#S0Q~%Z0Wjn|kuJ0yeDQn6P`Q~hW#=uNTV&M<58>CBKNq{* zWz1ct-kmX7%*URT_pRXNN^C>&cB1Rub9}qSt?BbAqxVX5L7zCQH2TSOa7Ye5m*6(xu(v$c!7rqj9trbb@|d^4OJ(de+S)t( zf4N)Y+od~(0h`l-@7?Lv!rMK=R+bZkq>Fy-r!P~8J@;ku3@6Vg$g{;We5Kaaml>O4 zy#=Uq7-P-i-Q*ut+H)OsUsUgn93eKu=_Q`%)H&b)){^dnfL>uN){Zu4lLem7cW-gd*Nf^u*S!V& zyPP`b*DvkfZ&};fH+xrju=}U23S!O#{Bie=jJ$oklXV!8hbDm(Hj;*=^-1u2=1WA zkmsQ@Z%B)5J5%z!6Mq*?+$mc+WU2>Pd-d3yuEtigeZ4PUkF91qa@PGT;cYhZTa4@z zo4wW8>k(@^-o-i#4V7HAA|67fU0siDIbCS$rv9v$XsKhX%INE^7PovSeGpBR&N%el zO|R|k-LCZ+;QT(0u4LUCx{`hr^Iv_jYHGTB&Y(PPHd0>zx=(5Ek)}FQ`=vgOm+!NI zrQMhPNusKtCi*|I@y0mjMeGv`1#LStk*Q{~iD?0KuQ|CwL?q#Rl zfwJlIsmGiN0T$1u;s?`YlAA7GI>&Q$n6(bv8`-XEyll({lvYUMmXa6DYT zn*x`uPMgcs=8~T=hs^UTZ}eD$70IIg8w{PE9eW=CR>AMVzBbFrTgKYl-LirDv@Z4i z9_Rad^F;Q4f_gRn)cLP<=D*&oLwo+U&j-@{H&WjXhUU+XH9LL!s?+ANRsDThnbM~k z=lhq;GbdKevv;=_d$lz7m7g&L7)v_i&S2bL;s+oTtpFEK9uNbl!s;ow)asdr++-|w z8_e$YMskTQCf$bOgB7o=nN>MNvhtkRFX80^KH0rwbu~kKDDA)hM%t-^$1iJu)^p>R z9RLQ6$9hftvYn!5t=yF%&Qj5Wy30Z|xQSh+C$Y=I#4a;un$w5C(UCJP>G05v8e4Yw zXtysO>NDT45i;KWe}Bc?v5|6yZKlN0+2{V!;>>U_@o3cdf? zs%yl)M&tVu@6u<=-(WTEHCRIHlNsJ`j$bt{lq4Vk*9?`(L>{AZ6u$^>92kF*O;z-)Tw@2 z9?$x%S=ggN!yf)5yrc4Y#;gyp7Bucf%r!Pa)Aj#T?6oI2*ECk;cVm*2?X1V%Wi7+`iqa zE9F^2|7#d$)@a+F`+9V&jeRi{vSPdFcL-g!Y!StyTuWZn;lZ{FS}3v<{>I0D$%`%m z_jYpc`S6_5SqpA^Z1a}eLhtVPZ^@7Ev=%-)$*OB(-Nlfz#5}_?OQ3h4<)-2XTQ$wG zC4UlHGqvqUXgiGF%57V+1?`*EHP#9bBKZ9V__=$egLag5XyVDJ1uW!O8V%&GQH8TYMe?^t|$RCD6&oyMd7 znUAErYcFl#eGIgzbnZI4-Izw#GcMyVAi2AI1CYCKbYdE{kypB(PH5Mq@O_oE=fZXv z^LRI~+yX3X)OX-N|E$b$!17=bV_Ju7Pc&kq*XogN%3y6*ouus++LkU_I81d1z+1;w z%?HQL1J_l8^Dcy*ydVk=jOZMNmU`R@1tY)uyBFDTzx)olU0;lyKmN_8vr_AP;}h(K zlr~-)@cyd-?=SLR3~qIKZSfCV1tT3N8ylCo)%ARQSs+c|B6qoC@Hea z;!{pPFS@{zu4LFs#YZnFv*VZQj>xd)b+$dfMt*WWe)htTpCeuf`(?q9(j9XtR}J4M zUb{Tp8mtKK3@*q9KY50A9e@|{-M#NC6YlQ#N_k$xCFRA{Bg$LqK6$Zq+Q)zCvu1ps zJAM}A;XguN$!ZEELm&Aq?wo;!1HTsDQEu!N3N8G-u-&b;O0mtvMiX1vP=LJP+ZxIz zwb$`U?HE}W_YU)zvC3DqV`K&IKHj}?-9@BvPoNF26`pfCZ43)oJrnLOk9+U-#wXB* zcRaZLR9}f=nrECoB&z%a&u`h-5c=RL(Ljg5A*p*(K88PIKD3r?yXdT#h3u%1wUavU zpJ(2sLps~6eLI%dcFH}3U-JVQT37vNuKJ+$lUn`~$`7PT(%8?m1-{IR{dGUSH_!rs zh1ilndr2>s0N1$mq?!M)CsGo!BKWfyJC}k}Z9A9Z#~U}L2e^kZfej4&XvvxDHccr+ zA8A@@in@g4u? zbn>S!w2Vwdb^xg~Kkb+~w`pq&zYm9IJKfiGJ^Qj3d+6?^KKAbr`a&$nRorvc;EBwn z-Q)zbr|uW*%GnpHBb|NUIRX8~l=GvR#F3sSe!qT5q-$dM{`t3MZpO^xwfW%b(>>{X z?}o4C+ur$n--6$HDLAOG{x#yfzm6X}d$Io4*ujP8OlO?a)4HEJ8#;OVaqB5NHU$`l z<%3Gw-Oz!OwMl<{JkHFHokqS!)=~}l>1J@{4ZuPBAtW4{Y1`guJm9UpN&0_m)dh_A ze8znqc&h@OWy8tftkN?hPcTQyR|(7mThDajLK2e@SoijNqS~AGe4NRAu!hJ#IF8GX zJ#xUtajEV97w|u+O^7dZulAB)ez?IOX|C|?U4>n^;v=~Jj=S)6Y|l(5P73iG@kiBN z5W9$}(w^xjt<8>|;tQDADIU)JgkNz7fX8C+1~FU`e)$4g*fJ{S3-0Sl3uRVPO^6=(0PJ9&n3S=AEyoT6A@ZrsCZZ)=%f>ANDn3_$*-a}s1 ziA^~7h^?QC9AqCjZlElGo+HcOiS4h-;xiWEu3OeM>u033UGhQo(T?MyI4e#Z7sg@7 zaZzj+JB~}V;Yt%_dwAJ?^}FRl2x?o=EB+G!vWqYbA0=5RPezl^#Urzu8bH^=ui37`y6PL0vVc`AdFI{)GQxgP%?8oix_6 zY}17!WVg>=uV$Ysu2u+qaMQA3B{ipIl{`r~i*@em-l4%9pHO@u_V>$3P5;1i>YwcY zb#9sU4Ib4R2smk}>rU%UvT&WB|8VG%-%dGktoz>GqxSatEaZg8$Flf5xFGR>Z-?;o zR`g)deNoYTdmP!%PWolR2k6chYY6@;imeMDpcp*XkaC`0p3v2th3WJ&gfCt-cctq+ zL_9LlDCl<FjvT+c;6O)PO14MXV?_`S0wxHMwTbDPCJ*%^3baM;>BRtjRI-!zB3V z5I$we$^M9iPg%{C)O($$=P>@ut>^%+dRu#|GTwTZd@1Jf#E%dki&o)Q)^F=wvLiX4 zCo#K#MU8wt)?67+jI5v2o>fm@>F=2OImzAlMNRW!pGGW)H3j^xpd5KJ$)k7kV&y7y4^n>!DwUw0m=eiILX`mG`KnYzV4 zs&4UAs@sCEOuXdjd4K8<>{8Ps?f8Gsx*mDFzslIbBo~+UG%~mCzQyr+d`0ks8`bzC zHgL=h^BmE<7qgzanP2rIjQ@%H5&jf-ntn8{u=^2)*3vk`X?8zkW21f;8yx!a{!CzU zZkhCXk+AkPI2ZlWLD4R`_|aT=cE655K6U0?CeI9Dk=hq`O-bKqO|&9^|7-6?_TES0 zB)NC1^gd#IQ8pAMj4#TD<)xpDB!GeZ)nCrQE`hN@S8uQqXGC5CXGnK#;zLso`g%iP z>n9`lwuzpm4!i6J#2gXMFyG70=>Hx*!_+;7bzjWfiT4S7*NPS#^+Z2S-ID!SqWE_G`DU&Rh0 z6`sFArZvgQpPDXQu#qydy-;16E9jf5-#K?{yg9vJ|B^aiFP02GU-gD&#Sex$)2Z`A z;Gufe&TXU#Hs&4NBfAdC)mKs1LGlgc@dH+APY%3u7QETB#K#Row`aqj`I7%Uu8v~e zdObOhHPau(w=L({D8EYi|M4GRq78R6Pl9jK-O*Xl1zEAT=!4>mDZg|^h2YzPGJr;J z|J?v3y}keEy8(1(g?l%^+x*wv0Ds|m!kBLj!;F1?YW$>~!ebMOhl`)7^zG=az|HVS z;Pm8mWqq_FoG! z;zlQjExY#b64ryO<2$_E7fJZRYs5)PJPA&O-s)Ug*3&84%TL@J;w1_HD4vq>DJ5=_ z+mD3*GyKO-(Z2-z9R`16SL^>Q|5x)Lp2U9%-@rk{=1WYY-VdScCJx6WbOGtY&lmF( z{#N`taFAcVe!}14FRl1?&bg<+ZA&t(?MdJgGH1~!J8qfplz1m;B}LfYHk=N?p@nm~#lhVzw3)mQJ>qHd_34i@XY6Z$LoxJ%+V5=`_7VK4 zICH-(CLYKMzKJJAej^|D4Mnz}--hLdpTN%#pKAJfBX_uKPusZl6OkKI@SWD)@K!Y5lmSM*W6wQony#Z0k4cc)snFO|bShdaNdl+O|Oh8Qk|p z+7gZE;+OmQuKm57a=)isFEn8H(sbl48OU8SkuwcLUgpDRuRngn0pU;VptYy!$6^mg zKN8Rqi7d`R(GgQw+w^Ie=)E*sANCey3X=F{OTNLkp?tHPZ@=T4`crT-^?_6L{TTSm z!tdlT{sMY`#VH?lzQ51+(q8|}eSF^v4OwjY4DM@&m$})>?b=PhavAqqUQgG@g|-!S))Y@18DTK=ck>@(ko^Ix`iDx-5vJg43t(R(R`ZB+;4`wlTq~CtUpcWC=)0cJ z@f7WiKU`G-{&=dhU>y1#bP{de(j9v;N^i-y@9srY{`UQ^6?igM7TO@HTwR!=AEv-4c` zq}D6)#P;>r_CR-Txz$rAABknir)qXtvlnu6yZ-fSKA-8JCO%5-b{VbSH{S>TZ+3p0F+D>D=C(sypczaY!oDOsL)7;_$k?-zY9 z`GU?Mowe^j;-4*Dm11v8#xME4@DpQvr>OL-$PaI%ZRbpCR@_b6*O_!JeH3pcd5htz zp5p9zjC%xl7Y`q%A1#WJ%K4I``-n@+nh+l=c%{Oq%z;sWcov29-D*B7^7`BTG`INGMSn(5k3Czsz_U2l+OBmSfKDkcw0eq9XMS>Re`Rzkduy4q70kJGDzi(_sUSCZ<62`^U9}&6 zNHMNM#EsDWhSMsH4O}?wJf1_KBg>2pTo`$>Y~;eoZ(X=IvnQpOpZQ4n>^#=NEatMX z;e}vP!!KB;=tdj3d$$389-6L@xGY7)Wf5Ih*zg?x;q9UA3W?29MBEn9cS&qZiD|M@ zYgXrfpo|~&r``jZ&OMO&hW@PX0Qh<>Hn(#rQ%#w**fA=9N!fV|jm=n*RW}8D+D_I0 z^76U`l8G|`H9NqdO2!`Im`R=iQcSaC=NW5rStj72{S#*#t0b=^+6R(yV# zrod>`|Q{a%$MRh+IB@J zu3vY+ZG%SsF|;poHmCmF*iWcm^YQ`bzU9~f^w*yoyPEoChax$O#;6!Gq7k0Z9LQE! zazWV%BZI#Q+kmfgel?O;dS1z?YQCcLEbXLvy~FSnUhLL78v6S$n25jZ;Qni!jqSd> zg1wJ;qq6^&KiM7|;A~(Y-%rc;LN;bV!zcjHNf5I>Cq1# z!B6D@@9bjgH0N+8{_l?{4wNVI@vrFYqo43!?%H^iwe7BrcJ3YH1$v8K2f~oG0279@{W0| z9C^uD;6cogAC>Yye~I=ax>W}rswXh?+neT%*|cdt_jC>hlNRn|CSKVI;qtp{ZMf8@ zz@<7BF476emN8{b4208GVAH%$_Ic>7h?!*jq`nXg;UC??Jp(nY#er*7vHaw#T5yY} zPW30DgCA?~?G53xE1NvEAzjyg_GOef3^DYo(1FB^*@^z=!C*;!dAIE2qrP19tz)`t zmm%ljOm62)4y{HG!kOH`nY40$zO8;fMYoac>?URekUOpEE;}N!TGPpqV5p3AnQ)qtHxnzC- zBewVP_&t7q%;U^C=W{;G`}6+1Kkx1He(#*s@THK}%wE>a&?K+rs{tL_X`esMj9l?o z+kZoA*?=B(zDtjc;GG|MB|f{@dglL~_|gu4Y$wjqJ&e`$$L=_L!C3Fqc)+D|xvrp} zCT&?fF#RgGe9Y4$S-g9Sck;_Qd6$Ph|Fgb1uAh+NxUUAMm6J<8Z-S@jXII~rlXs1? z{9AhbEuOWKJxP80krgLBJ@Re7|Dtu9ZLQnvR}|x@9X*WJZIu5foLo@fR3Dre={c<1 z6VS3uXjy~eq>n}YQ;q$8%DVgXD)zVvU=1BV9Q8uu$sr^^)#}?l;fKHG4L?Y( zk%bBQuRd>F(v!Kk@K4Q)@B&;o!2j;_+NoxFAdK(b8TxI`;A<`>{R{Are!B+RARV^> z9g)s@E%0}9xZTZv9nbSml_IW3oW${r{TXk zr$^0{YgxM=0hsmVi%tbkE>1H--T{L~93;loA+!IE%RGJR%?pehOVf?H9(412h$GN| zUgDqL{@4}!L^fwMm0UW+7_jEk_~?t1gMqEep}W{ScPly|bAU16;;aL;~kc} zh1|M~Vj8+>L> z^^6kpWJG8yZBhUFLAf4tP7Qv&dreP0{@`zP zmqX8je`P29e+4eg_yYSvV(#JpFYF7SpTpg>d?n>`=dK6YbQb}u%Ee7%8qg!i#@v9M zFB@|Ma()%@TGtUvRXor-4|$}3-BEBOh96QJIow5;r33VhfFD7BauM?@ePdMc$0w+gDzClCATNo3S2C-1A)=ye6;?Ik9b_WyS7729JZ^-m+$+XKM6y-WEr%DXa@d}{U* z4?=vp>mM^OpR5(fb|6}%#H`qU`=;u0kIX`;*26#O`zIqMtdg{9ue2#g_ z-nDoN`mS|Xg};%;qkZLJWO6@pax(SJLq;j&e-*xh)P>x1W=!P$^xYt#F&BSkU zb@0}ALzh_J)u6-uyzl1movA!ytReLL)56#!hnc~7_(26)pLk*l`IY8G@Tc;d6CX9$ zBR{X6yVO2<^t077jD0}$G|`R)v)aeUECpsQ#lQ@kNXu}eeGBVBFsi1{?)Wa`|Mk=_ zcy4At({+<`{h6+;v1lo>;oxAqRWEc!^~P$^>3-X2PbY@e8^Au1CRBi1t~_9L%5e_= zlpfjNY|C+-YfC=e>5(Ac>D*=|I?);MpV9H`^XO0?n!-6&#)s_Q2(7YsfGT1H{aWw^ zZdZB-*LMq>lw}r-m$@*;Hu`xmmY#c!=$&I{QB2ep=198qCiKZ`9sHU=85h4~pSJdn zj#!uJmfso%AMF@Sjh`t01>d`XYaR4Qan9wFScaZXyjVW#M`v~Fr+>OK zb|lz%d?7Z-B=*xwz~5TR!;86oXUFn@6>}q4X>J|{Mq&KLtASC~$H`&jiuS7gDd7%y zL9=QYqwgok8%f4xK|k~-$>{I<34ThS*z$2~K6)&zH{={^y-7D9y@2Fjc;UZ&1zweU z#rwp)DPecc4cgs7e}aY3wi}GF)vrM|&glGYrF>7Wr?150Zh4t;XpYe{R(q1dRbNjL z@76xS!9hQ;k(?}=mcv!>8tmX>4p+DTQF5<)=)Z^l3y$)2x>xq}`P9$;*Ua9x7rNYB zPrPE~h`a=w1N)CLrX%g=c;_Lb-p=$+wWdGar zHabDhus_APjXcgricX?~U>$eFg%pgea=@pSa{Gau-~WGu(QIJ!=r#6PoG5!tGd@=G zr*3%@9+-E{^;fN*v5Z)=jAI7*FEoxBi;eY5EuQh)n(>zA?p5}M-0ySN ziEnO$f3RuDG7G;H3qWy774uX$qZp{f#(j-kL*Z(2gI0ab3^$XnYz8?QoAE_m`)%Y> z{2vrc_c!c`QG5zIXvG~it*~Tlc%Io8o8fuHjJN!zr4vGq{h9dFR{BEhwAlB9;n-dM z@KYe4l;&T)uFSu?UVP-AiVf`>{yZGeddTat9+nY@k#h^gKNddPG;IveqNQrTW=xDV zT-ArQgik_8zX#j>uEN*(4EhG27K6@K9Y*$rM>*Tv?egOnz}mHBSn`-*(?feJeni_z6R}eWu71KUuE3B_NT8cS3=w82OIZq9gn^tr)~ce!Nv%2RIPnrTm0(V7g(JF*?-n9nY@4%x@kr zl|Q(_`a;&(H9X=efmq zF*kLbXVv+;?=V-g!Me{E^IWptQ#_Xq)_uN!=i;ZI;JN+G8@lG8_Vt00o_;$XfrVG_ zmcpxXJkz@#ToZNQ`qpRs-_A#0L|yk==c9?!On+3rt2@5{T(xK=&kC%z(<6V&bx(e~rt|IlX}Xs#mpy*8rOQo^T(4*7a>wzkguO{|tVcNSDx7zF z;VTtCXE^Vq+tvN8+zStMKMp#m_%Q{#C)ZpR|Fh8p@9|{6vSkE$02qUE%i&`)t=Qs= z(<7IuZbxU5N?y4bIurDOVZU^e?9YXYf6N|zrPG)5oxaSZ?Ge;p=Cr*S8EGo_V-wm| z4yT14ayY?bjHc~9v>oNY+xCEjwtY#@t&&~h6z!|+81OfW?DiFBIa)5dmyZ6PJ!B4f zoo1C=wriaUL;o<%E|33~iJpfw7@K9Z-vnQ!x%6%2tQfLm8o4f~o0)U`#Hh#bC{)yp ztb{Cnzjt80^kcGrH#08j=l*s#enot%dPSE;GcNc3@`N!C)EK=3Us2xdV#XL3eEC1d zf$tyxOzcNw85hRBq?OhX%Fh{-b74}8^U zA2v0eH!q{#Rc2;A_ObT+J%c;?FPu{UH`4#(%tx%;?td}=B@epKbibc|8P0i$RQT97 z&hmzbrM~C~hK1L0whZ0ym^@E-^kySK4*SqC2fu&IK79K=Bh(N}Db`$_07g-4`x-}7 zXMvn`@+|tcV}4|N8c9Ai;zVffRIu@o?tC}(*@drmNxs}sg@+rK%M#rV&= zW2xc4JC^YYW63_-Smb{X9%(*f_-uUMct)kSy{WOhhn^yFECqFQDP9P9{dP2KL6v`MF%vE^`BESb_BVk zMp0Lcx(b2i2EK=>KkZzPNPso&*M#4oo0*|S3Y2lo68>TTgUaVEBB(FbBJxXYFLJG=6&xj_xP4A zv&yH`=vM#*%7S|DjdWitu?7 z51pDsEVa`&?XKk9Y}%TIMU!qc2Kcz&?=6g=&wHg3m@3vqtEcCr+{b$yx{&Yi4_{S; z|I|l}VST7KXY{dyTxv{vmHm67*{i4YaqDOUy+}y0T}}4y82d@pp_Jk$X|pHw`OIKr zVmr;uMH_2q6!Tdr97NZ40vzAu$!gWSejZ+)xVY`jbnvnmf1*zMoE4eJS`c2!?pA{h zeFg0bZ#H}gA3YWQE4XCByXe__>^Ireu?b(0eZ$bvv%Xf-?qdG?<{Y)oP+Y|S_js=U zY$?+7W7hL~_}|EPCN`Rt!`j|_6JMmne%zAK55s3{ypMippXj7BwtPF4a?+t#z8B~o zEZ+;q-g^Px{IRg@%?0ekt9M)zP(Fz=%ENnE`;X~Oub2LR9M860jy)saKHIkKa-;pj zF9q9w(${#S?Rs*u?lHs1u?ha^3V37Ay)44VMKZu~c%QG(hW>Z|yy!omsEqmS;t>sMoEh!l~zh*-6j_ zWc4Y@;YX2ab!J5PV6A`V?TdIM<(A&$8T86x&LjQ_Iw0Q<;ZP;_4>|Q*N<9`Xi5C@( zgSNdt#Ez>WdYB0wASj+Ohkqx3c^iG!`u+rbiT3G2=V;@JKY7SIZo~57c-ihYPe#3u zGrYe0;j`9|%aojHp37cXC7$3tsoa*tu;dh@YvhHn^gL>fHNCD@8H($TH~p{ zde27-cGr|k*DxgVUFwo=ax=dg&SS=gmWN*`AWz*?GrVf3C;Tk!?!P41xQzIUKF)P) zBVK@TR{{^DW5C3Fh!L)&a#JS%d)#*gm}0c0)Op!hP1%c=R5oN$vjqki=;WA4bT z7gh=1a*|$JW$(k{<+3By8lUuF%8iS?WIp=yM_3Eh;BYl-q3Y)3@B?2<313NHg%8rf zYP~k|t?>RfzK?AUHlp`$R6Z-^yxvQFd$VfBZU+v~)zEg}FmubIF*CNn?`$E~%w(g{ zT^r&w;R6W0fR9;j82OE^_nSY?@yM#_p$o6nWFK=5fEXr&jL z*#p{{1Pvt)%={GM(wH4_X=F3x4EoC44d&d7#Lw(B=N{1Y4Sb!jwdMZWoI8X4v4U}x z(a+op_#M5UX3niaj?Voq@43exDR70}|BmO_s&b>8+hz>g_-+Kx*Kxg!>vNW`3i+uV zUzNZ9@r&uM?2) zgkO%=j>$wUUQ2E$@n+ZWVa-33^`f)pS2=6mmL=}C=FM62%=H4+{DZ8yRCmqKOb$Q9 zn*S?n-dzjB64t`d&)_NXCqJT=|(p$&@v^XAT>Lf7~z7J##&SyDSEF}#sSffWtpQJj zueL0d`57N4#qZga4E(7_^Jx^pw{a%lcN_a^mh^+rNcfGLh%;o(G5VgwIqnBsZP|f2 z?zC@q%<*f$=uBS8o)4eqqf4Bjhv7*yCl&D5Hc!%htf4O&&qNMnrOJcXRchDo4&vi?7Y<O5@i4uQ8vVe?9P< z3>>cmp4S4`Nvzq4tXZ3vobd8Q{BzB)VDU4?qJ3Pxc#9bK^T1Hg-*m<}6aA3(U$1h? zN@q-&o4D8cB$ay~x(aO`X?^p4d?n_{cjtLJ^~o9NJEa#y{(EKZjp(0&O)j*pf&aHz zdbiBTOKQu}DGyG1e$^QG27R**e;~nr6uj8RasH5au!>2qr>>v;WES>M9sslKE^m&dk3BZ-^o%Q8m9eq{utSGQu@mj|s_pT32?ruvAz z*-`G2WUE}qH#>~LBYY!Uzi;7ysXk(Hc9b38tFx@Wqin}_?-+sS`L4|AvmKi=yS1Eg z2sVn%*}PS8YqBGK!J7)o`ONHk!D=I8(b)9Pjl=mj;(w_w<$7@8CRwpYdkwf;2VN)Q z@`5m5G0vWo3C!6o_f81o zE46&qv?16B#j}W)9vr!f@lAXB^h$D`G{#t`2a3^0JTX4J|K*BsPh{rRNyZN=;jxch zf}gXeXML_=w&o+B9DMVt@W;qL{mp(m@?{5$o*TM^>p#nKLqqA0@OKM1a2xf@&x9Ps zfvOy%STXDI0|>_o$^y^gKfZ}Gvia5-*kdK7rg_t8ViURn z=>xnqb*s)ZGwS~it}Zl^TcgbJ-@M6@|Mn!;?_tba0>-re?qP(+SAVtSxvH<0#EI?M zgxsSx8a#b=7)DZk2Jhty8O679wP{##x6#AcrTRU5?=>>&7gE>W65<=skAmu1C94hZ zoCfOI=;>E~0KZK6Lb~>$9M-e=lyTUEZelI7cl|KP|2v(v9A^D>uH|P}$!=lc61335 zCFtS%BODw$gC1r@zAV^{>ck<@Ll?&4FB0K=tIGCu_=$pGy9?tMY}b|y0Y9+-e-6bi z5}vFDPo`^}%>PHji95@juST!(^rE^|HQ>}G%;P`JUONPr#qb3OhX&hkDs_m-tM+%6{4tK5(9Uw4ZPHS?zgS8<_vS_)5O)@mh1Xb~w4d zncu4@pHwxIc}ud|i>f`tQ!ia{zVp2oonr&v*>g`{`PM&sR>@U{w|>dN=_Ru)oUr?= zdH)mN&WOdQX)WZj@A>I5G}f!I#Jprg)N@>66yO8f55Ap24m8?1{12wqB1c@Gf;NBG#_z^5E;_)}^y}pQ)?C41G^^CD0BpaeREt zW&6-;iVkr0@YsjtVRTOEY2f)Jvnf!0jxk_I@3zsCl7fM|@gpu>gl{qaY{UB-1Fpjt zZavRl&FM9)bhCHvES^v39SjultcYjTseMLFr!MuaOy^Uqb~8GBrGhu(D+SGJ`A2!U zC52cEexulyTSeE{PqMu$ehPlXpmPsvUFzfO#1U*0kI%PjS=%$&3l=KJJlB{L3+2~tKMm}7)Z0w`>f=lFQLug$ z-#+LseBZgybYDdCy@)D!VS$bK|Vc0HDb({J5Za4$Kgw9K|+>pYYE+=KMhTK9Zo`ME>S zBm9S+FBd(33i_}H-Kua{<(iywRYu!rAGneWe&}rXd(bM)`(EmEaZ+&Tf|JXa_{pIT z9B%^_&(NPZcp&~s{F1&G9Nxnp86JMQE2rf$FAdyEoWX~FVF$jDr)G8+ ze5sM2vh)F+_!6Lf=}D!N5xxlD{>pkPwrQ@@c2>lo{z~j}pRmVh-*#!P{00(n=M=fQ zH9vy$0rY$OhX)&{mzi@#+xMd@ItO>T5x(&>`%^OKuF&ozF%uqJCNb(TjYS z=i)Eo(!Wtj-ldm?yp)^OMC^dqbymg*-Pz_@A-lU@x|d2%=nlToT!@GCK?~%^A{>hG z3|u`ZoeA;~`n-(DSKs%nDB!(tS9YZ+GB}wJt2GeJ4M`_&KnK$(a}2$Sc*-a-<7k9c>i9 zXz4}hYZY@TTzP=GkxZ5-1B~FATQ2r#obzvIz8}u}#PUPC+!t^k_j-}bl93-$kRyD^ z6RF4*-ePl*fP>1Zxm9l9d4_ARpl8IfJW7E^7bzXSW0CR2>I<;vsSJvjH|FC5?wXHs6 z0J}}kpa)Qy-`e_sO@ATBCcc+Gr;qY$QrRMYntMIhf6YxQSG^N1>bdUIyjhm6a}vG+ z7jpk3=ZK>8vy!uRAJNZyhMD0xm!pd%oT2w|&*@pDhAE*B(xbHXp`jwLb_Qluv)^ zN9K)bn~fWLV(;tqxOwCHzBN;No4wOE9Wv&AL|p3C*Z>cVcxuo>uB{`U97Npwx%)?O z)&)9UaT(`dIKORNS~tj!3DkqLVcpC4C!n#3XOgp+^M=|%Z%OXX8=7z?nfdogzP9E+ zBT@{%8RSfqc*CsUop~m?fq6EtuSfCO_sK5_xTu^#-M${S{n7)E;wwkiJm1zC_>iBK z)515EeH6W;^fy1^9LRd+{729?t3G0hSoMvkKFLYM5Q#}ny3%O>eSYV8;!YZ$8Ts$b z&z>jlT<5I+-*R?Z%w zh)y4kEc5$ui8(DezisKhG9rz@(1i^$|1^ES6kN!S+1G3NUcP8$mMl#?3Cc^yXz4>J zpCfs5ye&&F;yX9T#UE~Qb6nW6`-RjKpM_mQxhs^j!ejfVwUFzg2>H6D)(pg+Fax)M zpIWz8ZVPf;bj@wCpK>jfi`AQfhbb!>>*lu5J2$t*e#*2^CiZPJu#$4hJ)wSfm)oMb zRNBBj9Ir*dXzZi^RxkG{jnZ83j$e5HIAy5_d%M@%@?@8-4;{s@<9ux|?gDuJ0~ zVc9z^e8Ns^;nQ#%KNr)6Z|H<@DY>-{fS;v0_XNC&nQ&+Zdw8nszWsxN*-sOv=i2|d zPiID!5(CIECp;=0<~GJB{^>KgD*7p075xNPA0R))d(i6@#H#7U)%3_G8Q4WT@>8To zwC8BfoBj^3NF9ck7*EvU^Y(13lddp9U#whYXX>zQ+w1}A{0tsDw%IxdkF^e^!_pd@ zL_MW>#v%09(@Kl%{F;oLxbeYxjQd^2eR$db{NixhMF&K$T9^LjNqhXPdFd|;g)^LQ z@xjwah{a^Vh*(B~Q5kp|14fGPhz-3x{OhOQUHa%&WbbKtQ29<+~GKD~n1 zU>jbt7b%WVY&iF<{msCxVU~T)`ftS5YpDHTjOhNl+B@ts)?L=^I>z}+##Pk?W?OiM zj>+a_{0=V@ED2e4gNsGSZM|tCy%_VJvp+PHgwBI@h`$h@d?x>p9=V)y;vW)Wdm(d? zcwfkUyj*epJ?u@y^q=2@7-wck{w>>*$qkJENFr_C0N&?vCh}#@un3=D)qT{Mo6r64 zh;6M{tlFpb?j2}tlWEiEwa$0aRq5S->Hbf4{*r zGwJXmkq%V$Lwsls#qe)bU*%gnjQ7)dUkQ&gog6cwZS0X&?os$K z%fCZ)%wexwi2tRJb*p-2_f8uIPFs0Q#9PP@B(dB!c#mrzJ7+4sETa<3i)Z&4FHRwz z^+d&|X*s=VN|BjyIk-7TXIU*C13!Mjx)LAC2e8%5!k@oNYyVv%F#B@(6m*^?WPU9_ z0*lZ7c~%J7`rx?AfW>DQfg{%QOP%LNAhd=vP6h7squF-(nkzz!u-EM1c_Hn@78(KT zyH~Sq{@Y+r5v=`Jg!V2ZCnjZAQ?`P#$Asfvb5~;C2*nkO!hieybSH;pvqvcLf8nS;2tc z^bIRb;(Qb9*XJ>cMW<3j!9a`Auh_`zXy;(w&wGT%@vZne_c^k}hPe)Oe|r>pNR*#rG<0uTNPzHBo4w$1=QN7JvT&oM&3J@nW! zzeOiF1AO~InXyazo4#AlcRIIhpfA#Qdz|l7MzZGO>W{~a8{+?Z!IHgSpE+dhgtkBj7#51hS$68MDcmFl{W3_zVFGe>EZz=hsiT}1vlh~-#@$f8k zrr0Rt+p|6Sg;jOvHDlne55J+#k@9;8FhHC+i6F9L8WtlGxxqG{OI7R_W?(XFMAfgJs+Btk565OakweZrlpf8 zYuRxeo5r2+9~JO7tFdXU!SBx2(_}{;y6N;v<%NyoJ5lP`GzwjthSy`+8HnROB9`I_ zNKY=CMyX@dD0FQaZaLW|C?_7y`lhERFpqD98-=b-!!0YDhFezOQMTi|zMjAfd?!1E z`fT%LIcM55ys}&5L_Qek+B9-3n?{7OXl#1t+B7y0J4toPrs2YP5%j>qkJ_bUEd00y z+R_tzDRB1pNk;p~JUgz;G;*X?B%CXMlQwJouAMGDqWFbYUGN50UGP#j6W3Dn+QPg- zn=D&L9y&NZ>%+WPI{6Yi>Y$&Abx5C<%05Y+mWhhXwx4}+BKxHH zy)D3Zg_HknB)mc5IL8T&9r@qv{5;*k`%5Zkos0X{7@hs9!q-Z6@&~Zz_#Ala{9biF zes_I&kKd8vTy|I2@UzTajInF(q?ZzIX-}_)j$zAa-=Bj0>yomt&Jk8!VKlB&*~3O4 zmJ)2NI_~&ta9&L`(g%&MfPX$c|3>KO4bao;p{tXjuh*exxR&^9whj1UXpeAnEchzf zO*&Q4Ht|xjlj;6u?xj<8Z9kdlRO6n^R~7?TmrmC3zXID&tgkJ*6bb(a8jaTaK(4XY z2Xf6u?B7w=u0l; zr=vsUtm2jEQYHU+LX*hRuD#Uy-WU^_$T!-*#G7iLhacbR`dZ!kuFYph(O(~>pY61p zI3L&3-^BY#+{bIBU-L0HsmxItbJdeMBfjwb-t2u|>pWQ@b6Ur~XXk>q{UEgG71Hlg z^b~&i9KdT^=gr`kD#+W{!gz}EhK5S!RlPORC%BuDtJ3ZA*ZvYCf2CzJPb^CgOO@^T zj`G%b-!?3nKhGJ1EAtl=8Pn8n%Vu6Hn>qSc=B1EwlKBgP@1PXp#$v{LVw^uDop=gu z>ziz6Z&#VyQ=s3DEc6}r;h?j}-~SH02j}1<`!_gy`iz8mNZixw(9u-MPo6#9&wtIq z&6G{_QyAm)UwgXpyIZiQ&x?Tnhv1uF{uw_72R@dc04hy=Gm>a%=4Kr&yM`9zYFth3+9678thW?E7cei{S_LCN2EIc z$$0(J?cpC=DBa#r=nuS~_`Z?&B8%QkW1mf=`M;o@n!%m>xYobmd;xRj?$620*)Zzg zkN!jboPg}6eGgrNwFml{=Ti3RD7HbZ8|{zX(fSRvrP%M*KJECKy8DLqY2vJ;_oPls z=9CT+x;-74vzGso5%unF_S7fYQ=eo{y+?8-dush6bgk^E*RrS9Xir5R)wi?zrwv1X zwD!~hbr)ObFEb*)5Drq`1b&|v-_F&)FUF^$<188fue5CX8Id=r!?o!T;w;&GeEclf z18)oVz)hM8sgWY118?d48;?G2dHB{ z#REL#?*GXD`&bk5$J9Qagr>-CCKLK7#y4=@r zZ=L_fUMSt1WMKn4>tFv2f6sXmgZv(^_p@`LcNc@%_dNR2va4>i)<7P*8DjjRXPPVB zkSpIO=9HIw2_2sMDtJe(r@7L_RH5tZn*Xop)3}|Z9r~bomkltNc(mFdAE12A79(`s zZugS!JRRn)kXzAoTB9#S0y<5n8q&sD1IZ-e=a>4edlcRXa_zXL1^=Edh<}Hl5ka#SGKIhy6YeTx;j8x8} z;zyea{5IP1z)sf&|0UWMzthfsU^srX@OK+*{w^aDeaEvRhqYDA+OlP7`&{a1zMJRx zGRJg&V5YaIh8W4B`!!C^y|cytGnWR#QS?|h5l<#2J|Et9e|cHk>@7yy{@h^W>`cx> z(EsW*`2J*U+3$@%UD?Mtt^6-qV~KrylRn04J>;uMhSsD&bA0fUjB|9`$sQeiCuAHWqx_s+nbomvajEYPL6S(ozM+rZ z#=0+Pqo%j~bL?C`#IIh#o?e`+HgY)Eb!Hno^ZsCuV~f*9O;5Xxx?X1=M`ar0NG=QS zWgKrL8!MVpjpC2MMfJbUg;5W??!DA)c_=VJ~p7U-tJ)E)T0yjZxi3z&pmX+>a$h1^rXc5SAP~e zbz`To>rUu%cXdb2&VEk<=IGyx!-;hZXAau%nCak*ANzqle)6DngM+dyTR3$jYc%%S zgLyZQYeqQd^iALTKTRn7QHwC;x}~h2PZwIB|}M20g0cZ1uPO`}M1C;dfm1ACHf+`tB2K z3`_UD^wHBRgU3>eCv?-Ua7=KkJW9J>!43Zcz7v1F1sILTwhj5LB-%HcIqR!6x!37;qJ6`9w`6DtearGC zl|>=hH)>}Z7TtY)-szRtKbGg!VE@p2KkHiW!Joy{^$PE;@1GwU`mTZfWy2urz3d}1 zdH*u+TmC)!$cFChBb&7se35;mR(ZKS>=9n}3hapU$<2-J=>$3m@etFnH4A1(ZZ8l2 z0s3c+tDnxZ4YX*9@U8|wTX&y5J^yOzxr+Lrm(w|SRO{HWoc+oAo>)kNLw9AhKgHN@ zVrEyGH_+N|)Ls*3))g~bYejT=AGBlnH&3sOvZf`2TKHzslz|pa(KqU!!TS@?lp}X^ z(iGLRmGv=;^|9A$ufNBrtA_P$)swLP!put(>)ORB!60AtQoneSCgD}NXV>ZZ?BibI zo16#Flj1KfOfBT7cCc~6V?CzA6CCuNb7`pb7pZf%vS+o>=I}g&JhwGdE^J*q<-q74 z-`D%x7pHvv+l!~%+pA{4!Q7XoZ1~@X`wn5-9QMsuUz~XQp54K#dk^-E@k|}JpwHlO z3;ItD8hr;FV}j2V^*45TZkzeY%;wxjjCqxhRQ@9Oky1~;Ir_E`p19SUHf;J+=3M!) z&K~QTdN*xMe5}{tiI4T4dN*xNx~SLSIb*2@exv8SIgcEmZ}rthkMLb&A+qjXcm`zF zT~$d#F5l0)it3^g*}YO3TPuD>dKUBcj12E>4CqD7stbD?BQ9dhU;nb%pYP|^U-tB% zN!5iVIujs0bBnikq>g^||5xhxvvJlsQjy)%{%~v?U&Ri#7Th0Kmma!`{KC?w7e20O&gqq>=OYust69EM zTTSNO&S@W`z0@0wP#Q8%1UpxRH9ql&gF^e!t77!nHHSK^SO_l+4gID)zG3~1C85^g zJ;EQ2@P^-Z-~DW;^4l(7-#j9;A73%(g~glggC@=TF6T~1m|<+8%YO;&`3KMbv0-Sa zl{~RYLE*5^;@`ePUH8vdKjHnh+UxN1_)W$7hSzMYU@Z%mzcZ8g>U}@E-kab{wBEmH zf3N9wy?4)#)^%C$cHQ>cQhQqOQDR0*7k%-4@HgClhx#+2?~)U`u6KQ-I<(%!LmZja zx!!9W9zwi+cRYmEPOTA2r=4iq=kH-gH*`SlidOy@d}?vv=`)*dPwU@wdyIX^H)CkX zciZf?;m9d-%F;tK_+Q>jbSxD*=8K5-eUXk?^Q1P4uPqPHhaOur{wsydd6q?sDxpQv z-K-<0SL4jG@JZ}!+u+CA$N}`y1;NIeK22jYuq{gmJrMhH#n9j*v3=$v@rR8-Ci5y? z#3v6Mp-I5?)(qo~7o2a>6TS&P5j=&>;57MI1MuP2H!o3sjJIF0zOBTDs<|@BO)EaP z%H^9MxsZNlM6}0Qd_b~MT-nnudmMPH-xpEOZTmqJDTs^zPyvQ^Izi&Cu`YMup1x z`b#3<+4yS|M& z->2;p`R7&S)oDhJ+fyEBMIvJ<=&EdLewwN3AY*%Q%&xnJ?1Y`HnocdvKnyYa{h;{N=!q;_%FhcC)2B z(Ak&FNG*8i!|o>CL<8q#Yw$<*ovPSPy8*R*q#!9w+XsC=1g>XkyQAHAJmDkv(k}7y z65IWr+D$i#e-G`&2EI%2{q_J~->JKHqs!Z#si(fNyVNueEhR?}dXqyw z@6uJZ)%#A*+Ffxp{zk>8d)|%3ot#pK8#bGFY5gjaRPJIZnK1%EHE2b}Xla@>=px#E491TOUwa}l^;dTy& zx*bnh`6EkL^PIA!_uDZT>gwyQIB#`5zh&jd=9_lksjA(Ylcnebbxz_v_;7y@jVC9P z&;KUPll+fonSu7{Mx%VI>LxvH$3tjcGDUXYy85T5#9lY%#a~Wp^93pUD`Q^lWPF3~ z#>+z|$-5+cv2f4ygkqeNXpj5CjH(87BI&|k>dRWmotx>`12ym4Q^Lf4p zEd`VAas3bWvc|^M^rTMCv$2N${x)$*^eoylB-(4j6F2irXHdF3dy=5fY)n1hxG|gc zmA%yy%HoXSiJ7UPQuOy*u%)f@4tZ;x*WAVa7uNbXQQ!^7;yuDGvxxCo01fc6$80r1 zKfmtu%DUvBRhPb<$+_HhTL-_jZlJkq-K;TZd>f`d>s#v3w;TC3svLtl@1F%MskcL4 zfX+7Wrv;&Wbi-ORuX~5IHPj9%+4P+uCG2g)jX5v$73k8EXm5B8bJsrlvzC7T=s`=S zU!IrV`FiOh{Wxgj?7lwBDjOBBF(S!J7=iWEN zT((N~&iss}t6YCcjYl}}I^&U#v}I4={NW90#ODE@t$S$2wcJ;F&3^PFBqBjdH&SLobv{}lixsUhB2b$S4Q9_%E>n&m-B@3 zO-OyL*VH1;^S3zVbgm%nqT~_#DQkVR!w5XcH}XwLeQdzgBF^)lQTFOyR@sj4C~tko zdH!elt^yw3wM7gDUQJFO6XBQ6We(xlG4u?_dJ;1%0Z;esXPy~%gRYG8WoV^4-@WMf zcF|DgyBS*P&UdgSZuvBK2lqthM`qMO%n?M{yvh2L>~q@fub^8Bfx#n5MK{ecgzkF-Tko5em$^5e=a#~BRb)S3|sc?$9l1B zIr!__ywkwQjy5}|Xe#gAeKk>*b8(R~Qlp7SaY#I*>eCt(KkR;EwY{^m?XLS#*Rz=G zk~8X8Y{9-kY`*NxopPRdzLVIHI5Qpk6Ef0E1?Pm`WL=&}yQo9{)_2)kvA-i{J%_BP zF-ZsQ_9ao?tC75C@reT?%bl^h-{+yvRDOwe^iDH8IZC*BGdRBI?Q5(YDje)w5hS*wXtwo?SdGOzGk6A{zthNT z8hZjAEp*SCixTS1?q{?ce>LtkY8Imcs2!7AVKinxZ_LXrF#|R71t7nS^n>#0y^ZoO zV9&3~gx{_;Lxa%O4@S3r>WKN;f}5T_EdHeJ9nKRV-yJ3XmwaHCO&1jaZigBVl9 zY%E*UM2u*2ed}<1K+&Vu5YM*-xl(awg5nArS+ z7qB^)0=)2*lP*FqIU6i0r7I<7sO+uH)ADbcp&W6*>KJeH;^2C7 z5ilmMqhZ#JJq9ckV=u8^uPhuH4!?4Fc;hVZt{>x%JptW%(dnyp=RY>&MW4x8GGerB z#h;-;?ItI!UpIhrzQk~k6g(WBZu(j);gy!sRuOY>?PlrwdqrCL-QD}kZL5K65IRx` ztgSvPRwj8K?_mx;y2EI{a8YiX`qrG>H1@z9!S)OLvqwL^=v5B!TXk^`EVPg|W}vT$ zkW)r**L*gVdv+B}LBGY^m&EaV;d%}B&FJ`G`(j{u)4@3EB>WO*+4@Q^`%4e-V?MFd zj!YdFwsOtz?%ILI3d`SIK0Ltee!e|D|4!D|9jvq4S#P(o?rz1;>=tYaDV9wEI8HH{ zvk|}YkUkF|E!|W1CEUC3F66&>7p)8F2itBmR*0v4ZX5Zid8RhEL9f-O{NwC$10z#u zUod|1y}imiO(0F->ovDBU}ya8JT*HUcdy;ML)LTCu;DW zY<7{o}_wXz&aJ$6Xq)VAlX&p74N39Ze9`jd%555<@>tD!M1gL zQ^Oe{w@gZkH{Ja&dyinII#ssHDf?-%U3U}LL|6<27HV_dr?%hJkHDkK%wYRrr@UM5 z$H{hn6TNG7-nCfQ^vEl!(;CCT$bUQE?{&&Voib~=W_Otf^>LZg?(@!fZhP-0wD*ov zM~JK2&XZ30ZO*%8T#at(e-@Zk;h!d$K{GmF_G9XI+Y-!FugVEtD)*XG?*m-VnorQ1 zx+}^angjmF?@A71+Iu%%kP@jvgm-r>yfCo0)sP?76#mXp!8a81O6=6}YgO#=p5tUEt&bn6rU`T^ga_%J1W zoVJdmA3shz?bIJQ9pAX0K1KH_hPHe&JI@2YN-U(<9Tnj}@V;BPdeb}M>P>(v|1bDF zxYneEeh3`?HMowq;aUq^Z|Q`q*5jJLB)~SB5_*X`|A}w44O`AjfG?kgZFb~&3%1!7 zY#(u8d!Gf{jL0{*9zh?ceMndF&Burhb?nNO##m zJD?@%U&9CLpEq<4c>k_q>G5nQ*Yq>yCY#t%M&y3#IO@(#ismLeqITMtAM~>ub?&rt zemY}NUggZsuXr#2;A7Xr7nXZMx6`+-^CkMWt~P@_uiMBw|D28gFMD?VRJj5Z@ZZ9H zBN^M385;jD&eL>kfU5tBBx9qyHbp~<85gvugZ~#DDFiQl-Ov)BLrX-9S~!1DXu=m} z81498q{pHCg zD+&1b;FrNqb1{(iDpCg3ry{EsdQ*uRm=hWHvJsMeasXS8WLD*sQk=t!_+89TJYWvr z8YRKTfyTgL6QSErZUzSM%t7Rhdy%30URoBAZl5#fQ#?z?g%^3uS4LjC`UBG+Y#eU% zoc+TAp;b5ZTfWNl^nYa(&wHbX?meutk{Lke!)g$^wB1~ z)M~?grG4n?LFXAg>i@$0bN+nFnUlTtP6Q2VUUTqEK&!-)0T$ES; zWoK6X*qU_y0lh6Y57QX1pL4jg&EPY{?`)6g{z{|qZC#1yiqFy;v(tm^vzp+g#|9f; zGzSm6_Ud5cOXiSa*Y*!KPV9|LiOjzm{dzDpc(R6m{OvnE!q6n_OvsY|T(G++XV4DS zleTDjn~$=S%7Tp#nVG{TO$atVY-SCc)LBnxVM0BH&e>w&Rs-|dKzRza49y$E4hy3N~}R2GN#U_3YUa4vgH)^ z#`Xn|;^JQ1n|jtv5r8LPuwG{|Kd3XH*M{dtvh64eeZm?Sg=3_zKZLQ8KW&X8KEx;29*0Ru5G~J zb!Yrt`%7*65*U|90wL-~@8vcfHQWQVm!47XoM`1vq^_5?8lftFxn^c-6X!fXfnTobYs*HJ+$)AxCA@?5 zXO-{|Iv-fY-ci*dFA~EEncI>TpXjxI-E?Hd524FD;6XTl30_Q#?Yk}9{yuwMN>2S1 zj5pOgsQ#^4#o={BOTw|?^wG?)c>JxDm0a6Ef9*UhgYX~muGk2Fe~iAqMeby+*N@<} zv?sj7yTtzIk=si&D*D8=HZS}kyzq2*VcJk0%{BPVDsM_N`#@fUFZ99n#tP}Dt!L0% z@$;@O>@8wA9ew}muwoRSf_|Uc#Jb#?6#6Y~OaI>l|MG0I?GF<#$O*@H8|~}pn~?|Z zmnVmszih0Kt^9TLa_eeu<$Shr=qRxa*)QJ+dv9$kOyaB^x+dv)e24aw@P6)*H&+iD z$u}-OXz%_ZW2~$pmWMZem~7)d_HUmLevi06M$MuzU3J0(SueS)70pKr@)GOJk}(TS zPk1;n^MyY(=qeYZ9~IAUE;ZJJ*JID)9sJ$9FVe=QdyB)HyxDD<+3ZC7`??Ha( z)Y5-adrRB4Pb+s<%`bUtAo_;aDJz}-YEMpU19Dm&`V#T@n)^0zxaKdxuxtcVs%;;$ z4nHP%w&&pCwtafn?(Lt>+5PsX-`G7JI7O15T~*3;sdt&>S5$#tQJne9L$|ihdrMoc zV(7!;2^Xxn^!E(?sp#~|511>x_W|Pu`ZylgCDGp>=^1*6J=D=m{<9-5UmX@KHx0GN z39t3;I%r2K{T7%4gl{3y6jJX=U zo7$G1P&&VAbVbG3xzwf!UuX3ddhvsD{Hy3&D}61bojB{4I7RKz>G+A=RWo*vhnQf* zx;+j)#a>PhM8T!!?gZb#X$!yLzf5>{eY+0aS_2HC%;Q+%TfdI}M16<}r<}3B>5Sci z-*98vsdugp*JbODpn$CB?U_SY*a)6h$cm0rlDXzNqv5oxaJht_}k^i<& z+y>)k{KsY#gLbs>6Uy)pQNT<_pkKj*zuQ_9pJ)<$8!He8zEy-z;2yXr3DGaY_xckIYFU)uz1V_!3- z9X}a-MrSSEbtB$sANi`AzUtCZ@`dq!&p6|d2OLVJF6nJWS62Xwo8$3~dRD}<>g3G& zQer7=r|qSEvg#L-Z)GO`^25C$NWpn8d`=x=<|SbyJJOVem0hn_VK@ntliK z&s;Cm8bqGo_~FCh(Zm?~aqX=ou|2niiK$}cS!{up?MJ8F3XF=t`QYQhQ#1G(Pp-Mx zxYd7guQ9#)^foRy_f@l(&id~&c9gP5cv-VsfWOf@3mr^GSUlZ_|gVKb*BMy?!opN8H+&3*+3vGlJ?4=*Iz`h6j+LwvnraoG_74SS- zyA0b?{h0VvREsigA5HC&9%R_#b$= zkF}1~zeNQ`sFiZ3i0w5UoNU4es{))9Emkbd^T0`Xn`!91H$GQT7T(^+S3fL|xLm;f zDsWPKWzpv8Zj}Ks&N+ZIV(1U&yM?E{ zbGMB&rd?=C0*`5$j|UzH--|ZxJO;8fb>Q_lq8>{TAl^buarS^B#8Q z{o5V$p53ZFN%Nk`y#F*|-q(QhuRy=jsCzqC=GD?c+OD1!@o-27F=0wfw z9yP$T&&)aFGm`8%AJApazuqzDL+m*}X3zOQ4DSl`{_L-vb6&t$uHqN{UFV!9&g}<$ zBRy(#67&Q)O1f6*nD+tqlPigp;pIGb9x+O}p9cS*exb2(KYM!6bos#q+ER55`6u`;k*@rP z{xyt;uTL9Tues1ZnOka~Gg7>8)$ty%dX^j}iQjGFJO9;u$66rEgAcMHDwbr{JA!F?qA*gS_1E8t$XHfD)q(7&#q_CI3j6^PncG}kbajF6MPrlPu!Felw z#2V95#^#P`A3no-Jmw*6Y1VwK2PWy%_3(A$!VjWrS#Vid;Gvvg`=g`E0(YZxkUo6njV!_W_fD1WF4A4_OP`zdr(FVUB$=*w?By(aW!0&~g-mM=&D>j+NeJ2L2UbTv|A&Ms_y;axm9)`}Xr%!I#+tHb= zVvG~v%a*ZDhS6S{zGIziGP7GhE+!tgr_b!{flsYkk-2)6_(8#G7-ggbmOgzDz9!hS zrlhfV=y@yt|MkFZAutmU*HiTYw@v8vKYn8MpoQK(vjfyOKWp`>pFuAKN5MsBk_5w- zyvBgr`LUjM%70OOaci7-qU2RguQbAgzhZ{7uJwd7(Pb%Li~J)p&}9t~FN_Xrkn~s3 z6pJ60{tCJx{Z(Ot{%SUDJ^1$p&n!*LsGt4uf@gXeW~hEK=Ymoft~ZA?OfF}BzLK-$ z)u&8zSHn`{+Q)}{ck)w<@U!CoQ>G`hWa;W_e>LR4Cx46k1Dp|@ScZ)T8ZKV38DB-^ zncTkj(P!TN`=e*Cdr?B&{I}{}^W6P1f6#sXd8R1>fka&VEs6x3xF7<7+Yx zUlYa9^iijBF%~MPJ#$;c`~9^&$eoxGx#`{b8!h ze#Wdei_F26Pe;*XIWLNar2Ti_|Wuld|^h| zC;5CJG4U5>hFiW9Y(M!E_;>1VDaa0sAC~P&a`sEeOKMX(swVi1JIG^tgt1p)qm|Ac z9pyA~aUpYW9@E0U>4(>s{Ot#CC3hDtl1(x}zQxz10(j~h?Xy2Ujvj~W+b6j0!7jr( zv1BIp%r($9TZU-DuJH_VL|NM!??9OA^wzDsvt^X52zKNtUgqBcPV`ilCe?2RL;EMKP ztqpYA%f|)BTDr8`co*QE%1Wnw2lu16cgu)J6hD4F&$aKn1wSuD|>S$ zB7-v#>5(Sh7dY>=hp8UUNNgBaIg)lWB3JTWKI-aI;`32Fm#*aqaBM)hHjd)UtnnDV zLnbt0J?~|Y(tCTH_Sud{c&_!J=WD>F&Ue`nKkwuhqP_jy*rf9VR`=UPMUT1%{o+)v>CCh9uR zdA^eKR^y!indHI~PlX~mU9i!d4B{uN_rh7^ z3`<8MIoK^HUQ5rT@LFxB*{f6P^Ni+|8nI(}VU7!06Z*%pR6Fi_p=@ZFM*!>!lS zogwq>qb}_)?)QSr$?J?2;vw|xev5C+i2RXqi88@^>I*RHOIzyGv)uQjz0W%r?&|4B zVf#BqUmiwJQ_T6xN6^tocZc0}n$H^yq^1xTm$NC0pt&w@F&aGA8rV%6qqsI<6IEIE zuz>cpn3otO(2yJGv+mt z$KG5$NNv0Q5Rda3eF*lE?l1FS(*0#PxH!9fDenu6V~`e10G`h_Bl&Cu2hxm z+0b0qM`s55x^0}n*8V(^pU$Ps;W}qjJ$g9*+=-Xz>X}=7*|JsJ`j9src~oa*NkK`?#+iI~%&QLh!JX{&p9O z=f=|>>&&a_Qkyzc*Il2LD@Xk?RN8g?3Rc|%J-Pzl- z9k^DaHx*o~@bMH}yX%|m2AR-k(HYUtLqD}`k1jp_hzuIZ7# zoN{e410%DXXMg0`XXB-r@MuOP16zU*Up?u<*08r)`zq(#L@V+q;ui=krPo}SpZcQu zZ=esBZ>+&Sv<_aWE={(NarktW;nTTwo$K?aJ`EQAqn<|EzXaN>cBChn1iWmY-}+U< zcy=w%R>NP^1LIO;tj)}OcQNwZbyMx)Dt^<+d$k6g%nbTn z!|y0<}YX-n|PBOd5$z#-bp7h zdm_6bw+-hf*%#a(G>(yud|ccUd2E;?laN;jW zdicaKKm0jk7Vom3*a>L?d^-5i#vJ*nrQsJboS*KSnTxbC?)h2ob&tQqaDLW%=u8@N z@o;|Dd)*@o59epS*En(*13&ItMbCQXF;0GxJLJ{xsEe&#YSKp-*kHx(J9w)wvDpZ z*|sZF7}7 zbQSN(Gsbx&WF?&onb9K@`+ib5`ZD|L2qV=0PR>~C%s6N3E6IhUJ*>*2V-?Ub&J^I+ zCD_B4ZZK+cLi?y=mOm*(Zo&;qnl2Bmr8H=t5iMNc#IJVB zX%34nOdiofS?e3%{D3nrg$tbc)rn=VB7U{z(EX0`)_2Uy3ch>L8INs~MJ{Aa>bHSh zCfMt|;xoWyohQ9sFz<@@z{`TY#;-A}ymY?j@tZ~LNY$^LRq?Gl*Okiofi%t$^knbp z1&oPFKA)WIwce1gk~3@P8pVROk3BAy0uO(Vwa(scBmRDG;+1~Py#BWNvd|D>^B+sG zeGsGIf`Ps-#=Y|F8t5Eyjf_@Lo;{A#-bQ`#SA#`yPtKf};*i6m6)p5kEzQWC8-5di zx)DoP4V%|9H0iPRFYc(G^VUK$=l>D+=J8Qi*Z==}W`N8jpg{J3CLvl95G}G!4P^o< zVX-PiaVJ1+1955Gkt!3SB^YWMiPD1o5TyN@8I8390=AzLpbLtv0&Z1X0@yksZtMwy z`8{9ng-l{VZGXS-?~i%B=Y8LIKj)rv?z!ijTbft?$g%hr^lqm#5e^1M82*80)p$qG%qzXHE( z7kfk5-sO4vPUz{$>NVJvmY^71L)|r#gBSiHWB*uBUPG#}L2`QRyni|(uwnn$v3v_` z*o|)D0^<0Y^NKE2y5Z5D)Y2O82fE*@$=!ECcj_*s?s=Ru93?)N2R&3#SK~_kA6;;< zsT-6mr?$6X4=g)E*(yuU(RZB(ayD1G2Yxv^I%xlVcu(HQ9?Qk^rjah5H?V;74dn3I z=t{G}1I`-P>Rfo?gQtUWQYSFB)7rt_)KjP0~` z@FeX^Fit8RK-&0|FitAn1P`3Xy*T6H-4p#ime0~2h54S{qo7&yGy6d6n%${J%cmo_ z1BW@g{_ul4wLh;vqstk_980f%H|u>6Jv z%dlj3-HB3g?jy^7%v0Y-78%vKz_Mh9;Xg6=d#v-zSnrcq_Y+zF6Yw7z&v}T)q#JAc z56i2aN$i7T+(EesyRN6Zg=?n}TjA-ra0&N5d8cQD##2}HX%9XE+=sD>xGVjQmg#)U zZonUTFEI;Wa#z>uy!x68LNjy+RZXAJCg??_lm7nsR(hZha}k_8pL8=HabiWYrtz-$ zz`9%h*bm+G(?fr|&~M@l+VRpvmy)1ML(xZxKKj7Hg>GY*e6SWG3pPTpijiMNFqh&F zwe01sJ|>#H;my`B%ze%*_+HlE$DKgFIAP8abFF#OdDLisplmugeYka*X?KB~d8O_l z3A?|156LRzQNcxe(oK{x+X^I^ZM|f-kYRnUbk4pMTe(N6#_XdF;UVW?y#}~aCQO8O zOmJl+NM70tF1MmrM|VU_=JcuwKGwfISNrILmvWDIjiD2muZfhMWYV1slkO;1h3;(` zIrx!`{PIUK99%BPc1XBt&RbSW=vL-T;}LA-4~Jf)*QxG+k#BB zg1fUXGwU^yO?X^w!^7Jnxhmzxw)uGx9eEDxbsn&(XAX)bFLY0;(s}#(7I*bMq<0qQ z`S|SxtRIW-7K86beOl-)aM=8xl^!Z{{v!+B#((s9i^miXqc2w6n2j53{4Y*6@qdN$ zUa$Tt{!nscnUhwNWafE-_l|qgLoxTOrg*J=>8`eY>GRo!V(unJzC9k_E5_#Sno`9X zfqqh z2hXPyv*l#H#qpuPc2cj--IV7(;E;QgZnuw-dhCY<(Ct5)`T~b`I{0)ZxN$mIIka;P zx)*Cci3i{@hKjzOiiWMCpVpY6VT_r)eus`d0lf_%iw|dRJEOJLPT7VP+~H)*F~McAo_}oDFFeA|$lsV5oa~E%iPp6T z+-bM2yRfdY6WGih;?}x8_58~J;3e{k#@@&NA}uE+B%QBCV>7;l1Byu}+%@Seuy^R} ze8y+fS^sFph3?Cwqhm<7>8O9U+ZZaEE7~dC6rOg9pQ7KwPu5btJ$~6rLUUd>jI>Y@ zIAH!SP77Vh|IOmVF*N6?^(M`EeT+?W<~#2(H0J>)4VvTV)9xef#N3Ve_H*w=j1S%q zo8kE;FSh*Wjj!Q9b7Jl$6Mr4uTsP`&^|*<<7=a$ z2Jz@&n0HhElF%iv;VSNWobbRl>WFVTf-WHK#xY^l{R(^DOpmeugN(qj8tO`=o_O+4 z!*;Yeabbq+I&=mvdk?3~BVV)*H8zbsE?sK|dKd1fIG&Eaqz^ih*!fFk{(`K>#4C(& z3bxp3H@L%nI8V4flpf9ZV9QOvg98b4(p(o~!V@@t*ZZ2VtE@rOALJ!7-8*>V7 zWe!bQ&Y9Qe*GZmoBTscDUpMmOTQ}89dF~CE%U$o-c%?8$_xOyVL#`Mb-hkr5Uojwb zY=|rL9&+H^)xOa2y+-I>Vj~=NyF;A6qK8kJ_>S8fpV=B$_AETp%N(ia=Qd-!sPs z%4&G(Y$dZbv+Ne-^LWb)ee?7ztLH3Pd?3@~E-U7Lrl(6;7Ej@Z?pCTt7RihYlm&UB z^fcSbQd%PQvz~Ppr5G{h-3iE#**BaMk}l@N+zHI-c;>c{IUdJcUkXevK{jxQijB;- zG;cZ!I$b{LO}@<6*@L6!O@yyzx)PhhjOTIqH}z7hI^{ok6*yFE-)mv{Q>H`) z0{blV-9hr}d`)?$A5~g#@)Ea!U9e)gwdeEV56U-{e1b(f&(rY}@%!Wi;{HKnRaW#e zMQgNa?#_&IW4q|4)`jRL{C&H>!irmJz}MfywtNO>5GCk;q-)ilW;(L)UF>JY&x&X} z@I~velD+5#XIi?!V%FZgy@r3@Ov7Iy-IHzaG?2Ve+Q`IC#%BK9Xaz@aYKP zGon7E(LVh!&qvZ{8r$DZ;rzT}T63XiTC=JDrVj-bH#H~mu09N*UV}b(JpuptifP!2 z`%2XZXn}uPMdrv{Y~qkD)+leh`T!li7yi~UR(UMXmTvL*?H+KX3%Jr1oaqMcwCNfh zUA@6vdf6it{&?&1@m<_iBlbVAvlaX6>F~(trw_c)ihSqge+#mo=*iS>#u_We752@|yd^0sGQJaMY?r=KeUkkJ2gzofMa!NvE%Fg}Sik=RBm5>~e`|&jnv30lY&^y1 zR=9~l$+?U_v2s}=`d5ec={)fr$~9m!sk=>&gLksc_ENvjan$eVdu{!m!8*jYZjJPX z1~!NF=pVg4{Jm&13LK*Br5j|s0S;whS1+XVY7<;Lv>C3T~R;nI5j&48Juj2g#zasXM+4eVxy;R+gdrjC|rDYr2 zAE!OV*VTUEm>qZN_sHIgyR;NtLc6$2luOHD{X(<9N!+C$*yB{YDlfhN-+=Gejk|O; zgGUcjp%Mc2`}Qo3*_xI z&NaUgUQjL#`u0un;z4_y)pq%BiWj$0{nyR+~(KlHVt{U#4E`MEpNh<(80*aJw`XrtT7k=chizsElNAbe#f z^jrKSHNd`rH5^6%Ci@fV0AwTZ{(Orch~DqUCQ-g##gyMVBj7(YV|2L14L$6~{(n9( zkI8!ko56YRK26&D9fpSfopTGnr+MAG(9${Z+O~eAM+&J&va@VhWHnc}R zyujiW#IFB3e1LxIjJBD29D3gXFVQ~hoi!G17tJ^KQ^qh;7qf$O$vvX!qThe{_zUPa zG3^dP>to^@iKi!J86nx=R5Qjqk%e|5yHw7f)?C@zx+Vy}I7S)WD;paFr?a#CZ+hRI zcur=A`|c`f?^O5QVGm;7cb83HGr8|hdo1ze;qIC{mQb#Evk{sy5}m*+(ov?Ax`30? zu))U%#7J6l@-Do@c6Z^S%VTa*BA+uxwO@<8`Ud}1_RoCtQC9pg2%Oh37m|G{?R)XY zx8SD)U)J1qJnMb-klVDIO`*K(XPthPBd4kEWcnq!UH_k@9qFImUF)t^USz`k_2hHz z(EAnNojdf@NA*W-E}=h?i?8Cjjj|o(bW^W_oGw1kUc%(}KOyg3j74b(PG(xHy!{~k zw&d-k$Xv62Vn*_ey+iMA-fQ}yQ!vXXMuzeJ4DGkaE%f2Qhclx)J{|#FmI*FNr7MBk zU5r8PA2R2j*l?7;)9h1XggaJETy^m6I{IVHZvpb?=Gy7NM!2K2DU?$^$vp9gG|z=Z zXD;KtnEv&mf3i7zh`wq4<>E+ z)7E19+oN{9SMYS&eAF(#z|Qlqoo5`+|E2BD@Kkg0+wZV$S*w}YRecPcGx3Le6}k%D z-fys1h7Rw~V&A58WNq_&q9bnpj(HW{eynoXSJgnrHb9pK+ zHq)~I5v>YByV19X-U4Tfu@OoR7@?hvNwiON+Y3Kd8`Ifii;k$zh1kbxpEH`eou}%m zg@x=6CG3 zxz_0SuVebHzQAux-l8+IO7#yM_Y$`~IJ=~|5Ab>Xe5>B2cDWQAcGCBjkXK{tMVk1M zb6@K$(hc}hf|>Wrys0aATz3aXD}kN9jo4zXh1L27E)b8WNbn2@#=z5j0?z{8{|K!y^;+Np`dJeff_j1r z0iMuoGu~9)IgL3N{;c;mXiNQhg6Ca)lZ`cVS1nm-98Z1w8Q;2s-x`;2 zr-8cGjgdYNe@y06cYYoNe~zzi%Ok$)GfUEjeJV*>+My<5fF%^K7Dyjx@sI ze@49#I&Zimn};)z-W12IF$Y(VQJ=HMO6>6q-!xvUukG&wzTNJ#<~nvBqtxTf zb!jPsqZdxZ6-yYxBGN~-Da#jH6W%>{q67P zn$P6Ohx@-7Jf1iOJbImMw>>-(P63aHP63Zr`eVY?d?rOU@*D;{I$C*`V0=6xs{Lqh@dfXE9%d<>9XxltF_Gzk@^WNQ-|hzi@2|Qo!2by@R|q4{&?0E(bmTns zdnM+B*lycxeu#jGOH)HYwTb0kEJU$X9>nG-vS#JZrZN=zNb@ty;U+vt( zsq&5JWAf0)#53=lcQsWo@A23#5sw)-#5Z|(&ooj@*m&_%X7ABdh^{ueXYOM@VDkvD z;Se@52{;7H1Cz$^>vBsru*tsdJklP*w=!@`4zS6&EsOtoz{P}5xdj_@Jj9RDUeV|P zn*+~V=NYlE`Ixj;Pgl+odvKO`2KwGJ(fjs9&)$oDO>fS<5;;rk5<1R0ItFYcXBR^E zWM6+$-i9Z;SW9ErJ9PFffc>0o*as1tTQ>2p_U4J4V_@?xpGUzOD1lm)L}?88AKI$6g}j1xC|2LuEf$)cm$D+%lE6 zR1fyLvd7P2p5!C68=dwZ^zbwA-HQ&S4brmk(`z8kyy7M_B;t2MEFY#D-#hF_Y_xr(7b2jMNXJMRmpLRZAQkAg=i-nYMjY!J2eCJpeEXFs#_ zCMtV~xz(6U$Ww!F;IH|%%birJ{%U<|e)4{xx&3U1#!j4)q764g_foKd;*2A&G4Pn+ zxcOG>ikOFN4{=G@Lz;3cXDwF))2qvx*G&a4t{wu(0c> z8l4-YM8<)aPJY4h7vvAzYWcv#!myBgISbLd4WVuMKe&>x{jUi4r(RJIj%IMDmE(&| z9hKCPRchhF5W#bjg$s$`!d>bgd(kIu@-Ejm#pe*r=eg6GYQAq2;itRZfp_kOox^+e z)REy0__>;S2|mx)PV!{KGdyrbd;sJtO?Os!9Sk9 z&hrc@odxZk=NVcm{Pmdshm_v+#F7jLZo-QU@;2OHozJ01@N3+TFIWxq`CY~mPRXbm zz}lP5{{b$}Cy|vzlLnOE)I5QHY;$XUP8%t^ymNek`*%Z!p&d<|;E{sYCi(f+pBeh$ z;V+gRW-e=~ukW=+xUbJ>={w!pH9 zH{3olyuKYSB}Ys-%ccb%n7E`nnlmED@F{QkbbPq^BtE4!6*Dio)9?su{2(|dyy|P? z)sr!JRcYf@5d8S{r)_w3+$@*E`b>?epWO3i;@Feq5pQweqqX@0X~kD`zOL4!oqAn0 zj3@R4^~(?5SzCqNEzub*?YOq4NapOYuKvy4>;KKVx;bY2vFmCY>CU=(40xGq33==c zdo2yH*HSL{cI)6xxvZm!i?B`dy1G{(>un!E+$OCbUq6eMLbF=p6vwPA;9qE1d@K{5 zk%bHs>*rX5{A1pggg@{;&S%jHY##{CZPcC7(A~YXSIQc_R8`2oM^;IE*E z4dCTOa96y@S)N{}T&Woi(QQB!BWG)|+f)BriJgn|d;i z*l~5^J!=$pm&9|#U)hWUA$cI`!A_fgE=@q+!5Xc_muf3Ez>UmvCf_ADECtpp(X&fV zRU5+J&*_WyCtAz9$d8`G%+KL`O9Syd0@ySumWTM%Lg=#i%9N=__*&i{=3Oz&boP>d zs}Y87wggFw?eDwPpGDkuQ(sR!yG)m{-;rfzxmR4*CeQdvuN$&3qp`a&lryHuhnVLV zndhVZ$C&br+TvVpp4(_ihEEsMZx{D}YEOA5?cGiK0qABeWhGl`{v|VY zwg!>ek|cZOa`%su_chYQd&PHs;=51#tXLlGgIbX>OSnJLi(i_>gU@KHN7lw(Ae3Ad z$Wz)zci+-N`uGX7CyKrJMzA968@ADH z`F_lK8*qZC_3m?23*nuC~H>_mL*mtjyY_j)bceTd7jyn&IvEHNb>^{jERV5Y1 zcI2uxCD=PIY_x;;{BFj`&4_Pb=Wl4*KVy7_>?1GTz>G2rO_$S zL*S-*z0{k8oRP}9*WT3!O>P`=$@+a$0vjAz!@Mg47z<9D1si0J(Vo7gFXMak34FT( zywVf;of?bNQG8{ijM1U3HOS=4i1)1ah0jGD@VN$k$=AW>jf~U5XFqe+aX&Caei-03 zXI7?+>a?#l)xeznU2}Q?W2X;!b|2U`h1fss7hQ>WVdG}6DfG4eWEXc7QhheWQ^;oi8=mF#X=J26QcU|MwTlI`zE5|L!sM z{+V~}Bb@J>c^6%F-v7XR7Pe(B(o8>C8m`wfA!K z%j9R4hi=FYR{x8*YmGgK_20yaWo+I&F#vRf1nHR$Rkb z20r%6L*Ha~>EuxvwXb^AM?RRc#eDKAj>xeeb_FN8fg5q)h!_0~w#j4N`1*RxbLRWd z%~bM}%$~_!A{*W+T4jLmkFyV1flPuNv8Iwec`Uyb?hhk97WY@urf`2wy!NQ6P36d= zccXiGF=oy9(F6Rw!l z@=Jb#K5xbLH51>!Jb2nu*q^6Eb4uukLqDW<75p6o@hvS?joF0=U4rEdEeZf9sAc= zeW&YRY#Uj?Q*9i9-Ux=LYD0ANRDG7Ldd$-$^5&t|rG*~)D_kLF>L$wEhdhG~c~g)( zhXwbC7-Iu_%vZ?!f%J6bck%>2w(>aR&*H9{Hh3kQ_SZrBDE{arCQg*{<0;Rc$22&(y^|*+?ozhf+%z6*FYT`h$tIC^A zEH&u2>e+`pKC#D5&GXoA8O&8cIyGYRP3nO^cMkW~mUCAfvGtq+ zs(XYr=X01trE3iJAEKi%*A=oO|7(!njJxteo3V2oQ+#Hq93QG~&sua$Wu;3pV}3(d ze@9Fq&4=_2=2?0U=eO7xDIau^XHw)I`r(|jLr=`KGSWJpH6?++TASjDlEV|Rk^L&3 zxZED2bc<>;_FSpDN%jkEXJ4`bk$(Afy5&RAF6sYe_tlWd-Gz3aq%RGElM9(M{nt5q z342J%P9^LkkAN5a-ym8lKL~i|@OA7j4E8XxE{+49YI7aq%xzsB^@$ukWBmGpr=R=Pwp;yV^sc1X4d!|iWBD&IA8+U3L<0baI zZsotTrs@mu2cZo|f4p}LG?@2)vwx{1UkNY>QulDm3XYY~*n_NrXlL_tG;YN0%n#?@ z+^uCm1FZRxzeFy-Sr2-bmpr)D9LF%mv4;7n?Jz&JW6@zSH$&0uIP-HMZ8xOa^OM!n zj1!lFej|1q!He3DV^zL2j;)L%5#BG}T@P>2ShWY2-e4!^V!PsjaU>9K<>^a~uWH;C zM=TCscpozT>~Ethg7)w87%igz(f;GY(z7%S!k3@(gNa?oG;_~Q3n9{X%;W4OFwiJ! zLO0>t9SD1;qnG3k9LaIf{$0Y-b?QDB$(FS}tr)!Dfqthp&fTf={jK6R$;nlT?9mk~ z*63=*C6XK}JuUQLe*^yhg*oUAx*5YoClg(1&pb37ITPE@HhfBq{CgksHQb8%y}E*Z zOhtOLbQWtp86%}{9t(ZboO}*W7kd(`cK6p=L0aUWl>4zet?KvWe;nP!l(*-F6|>*# z>I+>=ZrV#MoMKO3`_8fC$PV&X61TCI{88@7DKv}`8);)TWoq}jwi~WZ#8+IJ|0Z)T zSg|K;+GP4&rbO7UJfB_PJCyU;7fUxmXQI%{t<9}#uV-AJ4{lyJ1-;=#;8EMS`b3_m zy})40KS6hFNlqHdxK{7{@)+Ih(`)F1OL8A$b7F5iMEs`TT|Otg)^puRwVTX$$@hxc zX!+{&i9AU=H!#mT?S4D^H_-vJ-$w7y;ZMId&2G{|bZ?!Rgh+QYuWKuf%2= zkA6cqoMPj!)4p(6dnw_t)0S|UJ<$FDdp8Sr)1Uc%mQgeWTG|HV#K;K7o|R>+IS&0e z=wU66HO#owhjQHLKGK^ikbx}R?Q7vKu$2w-1(ds6_hXR1TDZG&UKpH|?gZRTYT65J zF9ugF7!!+y{I%|+D(&O7ri8n#w4u9sqg!0i81A5jMjR5o0C&Z|T;P=az)c(o^a|Yt z4r~EVI-59n=a>7snRAi`>auXK?T);?|Ld;){5AXrbH?~zqrCETj1lv$^1MARjJ;Q? zFI2F;@lIodcT>Uo=#aSev3;6OEQ*tT3ib?LPM;KCJ_-($nEaFb{~F=T=y#8?#$sV! zPFd|kqVSVE@j~Q}A;=?aRzjk8wr8_{ z!zIX$h2Vzj5kGQttUKvXY&|ROdPEx>esqvJvWWAgwRXvY)}^uE3ZPpvs84u$a4b9* znp;DkhtlWdm2JFF=aPqLE0*{D#BNLF4owUQN7jhXMaM~AN^Yu04w%LI$wqIT1s$Fb zZ~7%=gd-)a70q94Uy8}EKK7-Lhqz1Paa(S4c(2A9+x`#i_N4=~;DY@xX&P^Ay^`@` z`SDEb{?t$S^M){clR|9uUZ$Tz3b3PM-3d;2!tbRo)V`#Ix%?`9;SXu|Zuq$Lh44qS zzC7yl+V$Dz%%-kn0JOl-m2e*KALg?5CE}%x=sU8|E2zJx(Vbdq)cKGp4>j}*H4r;ewDa9sD+a61l`T28H#TkhmK52^w5*5+BVKDj^Bq}BZJvBbwoqMy^+xh$+5ThVfhF*w8ffLAsHLBg>?`_G z0z4W<2U=v)uKm2ylaaf`Pa4T9J8Y%h$vijErw>T;+G$J7e0?IjNE7|m9^I@LUSQ$~ zYxo_$i9Y;k7&7))SLm_bUo2JsgnQ?jwr)w0CFC*7#jN>PNE6Tb6LPzgKi$s1z|OBa zlI*nkq;+N^=lDP7Av34O$jvTf`BrFRF>Cb+;6EIG@HluG=Kogg;DW5xc%${PZP>`n z=1gfC`k@(=A?EoG*(s~+N_fFtxfG>OxnYl@?#TS-M7_^ zafd!bC$%4YqfhyL!mq}4UGqxU4b4xvZfYKljZEI);Ih$fSJU7N%a^rsPx+^V=P#@2 zTG+gcZ-3)k&)$}8%V<|G@`jd;cAd%dXFSi~`RKCqfZYUF!nSA7ft7CJJPf&SG`uly z@S0Axn**w?T{Ltl>8-5%% zLW^wOne2BOn4>Uz)6D6_;V6esn`dXlD5nkSde+-?M!vJo{?Kcmu^Oy}N%s8QYtsJY zNFncz+^(}L?cFS2<2GBc=4pR4{r|rz78$R+Nf){e> z`x+Y-;&1pXY=650e{1~E!qt0hSp183)g?XE0m^gP;958Hp*p+rUc%hzfAkzDP4 zp{%Y2bqx#Lby>aYNA>F(sN1u^RX3hE0@<55LtWshJ4zioC$!{&KBgTs``n^F;PB_j zNcS@j(>&=-#n{qCdwZ)CPZOId_Mh=hv;;g=|H9IpF+US_4@9>^{Ag2$7w}J<-#f-<-61 z=%{dGqv)b!3;gAZbru1w{{eXwv-mCcc|PVO*B5Bn#Tr{l|KwZXgVrj~{U)9zMJCdw z>K2c8>X)72Rpj{+O{Oi;WX1k;XzHK>ho*X=sn&XorKy?FP4CyFsVCPhG}Q}Db=IUq zQ}dD&s&u!mX7l-I(P(L8awat_PpyZlSXjw>(tRv z*VgiHYyIAB&+B2{rQ0*%k^_&1Z+%r9H~Ar6gbm&i@Uc7lg!{l5-vaalsi{?Y*lNR#(r`0^YG33H^;c%BTIE{HhMaKR;0appEmACpC>> z-CqV=)XpAkf030Ik0FNIJO4-W47O|FpvDlN>a9{AW$zW+clAg29!tnFI{KfbIxc&&Z-Gxivsn|1fd3;6AFomsk)K67>uT0!0dcwm%% zUIxEdk$hQGKkB&^yA;*AkbGu8gNiGc9C?+#s{fm5(@bwj4AqjRcCyVmPKbyPsce*U zOZL|L_flU3T$;w3LeEu{$Gkc8Vf?IFBagBcMxW&=%jKJB%|C2^i__si(x;Y=L1ncU z(o^ttc#6RqjzWhTnZrtW&j9w=w*0+aG+uGqNjLe9QzrYh)}nIG<~F8SJar>|_b@lD zmm2%G08c018_?n)u=I|_28T8rdQAQM(b1jy9F#dbYUh`nA>C8GXd!zQhaP9n#9oEH zo{xRr0GGEa`gWIa<3QpBu|CC*{x;NIt@wwcLy9FO-LK~C^-mlfb+Wm46VKDRbmJ;) zC84d^w9}7w@xcING+~!z!E`F{lRbSaIyTwV@1~tQUbfD}96D$2%Vrv(n~qt2C9nRA zGGleF)p>jmuWTJ?yR}t!L8A*$yu_9*#AL6?PeHEHIe^Z}gg3H-N!8f_I)Lmde7osG znQ(xZhQd+BQ_)znfrawRw@H4`mEFcPujjjD`Yh&aFMS%u7n@tes)mW*+LG!+nFY+It6yVP2V%yv-nvc^bBYl0kN%+pA$6ls{tiZ32CRS8>-C zzB{zPmH(7$*+LyUmx|IC^+|B~18K4i%LNCCV+vjSa-0su6JGN#>EAp5CSAPbUwB}o z1w4;Zm)DcNts%u*wbh-r&5eAZ{ncM+i!(QK%$mc#Kb4Oa@o-32*>vVE_Ir~3{aU_z zkwG0@K^Al814fN%$3CmdqYdfAVsRb#SiGBc?VQ)eyX<|e&JVVnKE|bN(}e?G+VaxY z-S|C<&)-J;`%TCMobRm3qRlGcUBX<~f)AQg#Q_{N)TmbMU%h)56<~)ptvMc?8=Yr_ zv01llGJ=`SNz}ap-d|2%4^!@wAu30#WZKA_Gqm|};CDCo^WKdQhPft;T27iwtkLW&E)K?Uh~yUN?=$Rzdgu1jovzye~L^Mx-Y=`Uz`(72}wW?^Z5ne#r5UOFwZ<5&2xi4U7`;S{?87&>V|<+I{B9B|Tz-D#yIM?QAah%x7+ zMM-O|h~wNW4f~ID&ipet^Y6o%e_zi0&*IEKF7!EPxY{!|v+j3SbqVin?P}SCwRQ`e zG@G-u)>Y^|#~HGhS?n$NRw!D*{bRtUl6A_t`2IRzEnmnQ)~bA4>zRYhLD)_s$3)2& zod_-Oj}C`6rh1L)0&q(HkHx@3ic+UbUrf7x7JXc){-y)^M(!$N4^l?~;pEruH#nUipl&0JydF zR_;+?y*u}A8qlznW8K>~jix@kuTCBPs6%V8c0yoIn0pSg%Ds_><>+#c7w?Q-=gu<1{u|-(Iq0gg-C@x}+3m>=TQMGnA*WU@X@fEN&<@7I zein=izXapHk#L+*-H(10E^q5&o{uS=^U}oi8qkiSv&i``{j0S zr5%m6k@_5XXn+55%=>ikP4G-*Z|8lveP2X7hPYN__+2ZOc^Si7?#g9?i~M5G6KZ@jSv+vV+_gC}0_sHBwppl=L>eb9@a*ZFI>!Cqj}IIR^1nal($fEBk1>j_J)=ENdC%mXIVrr(U~3e7tkPq&RAQr9h|f?w z<9I~+8pfDFTa(UBSYGAAMp*VG{ez=|tSrKq)l^up3C}Vtfqe&W6iS1n#Wih?XhMuR-+ht zXOA_)SObi;fU!0**71y0G;#M7%Owyol+3cbHRf){7H@cpdt2(WeDy94XBo}%VAiMw?h>5|jd z@gDu+ft|INx4&yW_j04?rHU!doP`np(D=-c)PevqbwvY+5d)>@j3c z&DmA-v-ZQgx$AOD^JwJUO~`z*mA39zPsJwh>)o#&_FUDR=Stru9dQnRmg=j~Bb~mc zMn=$Hu53*_+)KH|z5QPosjpX$4AWn$uPGy~^?q@k0bP*X;DR=kbl{PHz`s>kJRNQD^b! zFXO?`4tU@upNR)?o#VlgQ5GH~$KZi>o}&MOI12}MGu~Jn7D;y6 zNI&!JexB~G^)~pYHsv6r?xCMXSHV9yvW~W}mplpoM6;h?4gbmx@c(WH_y;w9;BVqJ z@c%LIbL(5zUM|`Io@t$E%~k-rF4T1w@u7t4*CJQ6eNTw4wu-nbl($}%&xm0-96AjsqZqP5X#omdPZ=F4xA3SQ0Bgv7q_)o7mj_oV^64}n{ z>Ff=iz3Q{%(Ozo`@}c%xFWdPK^=B;TF3?duCcCN`x-TA``$EoQbcb9R`9*SLHtCh5 z<)+#40{>T>K_2#3jx1zcV97$pkl-lELh^Yees7Cpp&Dqp_Or%pxHjxpM7RB%he;n?LOJcvOgv}4H#dOy;EDMTZ2!RfiMcnj|Gxn}!1d?@ zu0t1ihJp2?_Fd2Zo3bC#xB1-nUcRtvT@z)WVQfv*U4l-h7`w6A>2P{SGGe^EY6`G^0D^1q<`-KQ#Fkbdg^j z4)3a0y6sQND|&FUorZHm`$$9ROFE297Nl>R6>~*f+F`ygDy# zMgOIJqGE$`pP&r&s;52a-NW>C#sko|nCwcnY>F3(d^X#W+m2@xtf8wf^&Uq1eHK%Gvbjgcc zD7vFOXWMxy$fNHytQ*d`t7T_$m@ztOpF=~`_s?R|@DHh$&k{k!tEE?R@_t6TC2v^r zRjoaq-7#f9B#(IRR*e~+yMjFG&#{NCK2PKQ&6xb}kzca(>vo#*ero6Cq7vfExQYGq z<@+fd+oh2P;~r>i_x0zVCG<OR?Ed~j6e1)RsB|H$Xt5%@p+g!;fG z^e&PGd=pMAJqqt+@9?_z4hDDd&S4z&oR>!3#$?eeAHL&0?w|1WgvN89g%O0-1}pM2 z3(*~N_e5@1aI*LHF87s?xAHn8{5bmWpmf``y%~A1OL z0q8RGHHG=rIxvvCbk}>s|5$4ynQ~6rd!%Wd$^K1a6P{TAQzAabrMz0BN-Ggx&NH@q z&$VI;dBFqtl!*t^kyjt*ytD*8s?v(#!!7>=FFCvUo%u|R%(C%N;~dU^eOtq~0pR87 z?%?)Ank)jf(qO_gWBh{Ppb5e4!c4!7Rpsj$;3L zz*pmm#u;nxxoK>;8QfjzMfcf|!@Q+L=4*aDqu;9M9;g!Z)`h)$jwnC~$j0VUbFMr( zV^yA-OkylB4%vjg`nT4lSw3ULN3Pk(CMl#jF8 z$c<@3dSm5L8_J^?c*T8<5%rQuXs6$soXukYwL{~F@YL zo2gT@Pvbt>r!MLfYs+qr{g65C%ARfGw)$j^+v!t%sxdKqCb+;Su z71nswAC~X@EiW4@pzHz&AH^Rz^AB7G5rt1 zOSsq7-}!BZgs2YD_Y2(xQmaGb3i|ZYLELm1goU4*v z#t5C?`a;+bFm5B;YG=Cc5BOu3&=}f5Kba(a*c#t)UfRRTII|5_(KlL`2AktX{E)H* zx?|;vLFQbmKH-n%BG|(iad@8LKQfIwBDga^>sU0gAg>w;cvIAKc#*B;P5x?zlk^0|H4?K zI{0bpFzrR!=BGpdyZq<)bBT#JW*go?COm~VHBE6NPU4hcUDM69C5(ap zXW1pWp?-oF`E|a|SzPbV@YIZ_+%8VKb>GdGXcsg{dhe)BJEd0@off?)=D%p$N}i&n zCG69@tP6d2VtlF{(a~mtofaW;kO(wtQPHAbBuk0i?^eE=U$uAhWC}YZv zF|nbC+I1g!zx`Y%!s7(Xe}b=izDQg$!7kU%@6>xv%)DpY-!jc7JVXD3HT*X<)w>|j=C$+6bOclPcRs;Mxx@1<@x`2GQ7$SORsv|Qzj<3knb3dBQ{p5dfdl0M%E z&A0O>IqC0^zPT;`8BV&95UOxhm!G7BD& z$JwTrd);e2H#LhtG#Z`r2klW#MK_QMPtpv>fBsZ5k7AA@ZSsy{%gg_hI=J)bUd~|4B@gu+YRNKu`$Il=sh@}&aRGAxTwk~NT%yS*R8H*% zj>nmN;^53SJ{Pq4ToBnmhR?n3@VTS(`D9!03&Cg=ZPmBLjZnOZ0^(O>m*`%S4~hVBf+0y<=S=!AWbz+r?O`b?)U%&}$ei-bI0CYg|U1Ij)4@sAOo3V_Spn z!@9t!xoR|fnE zivs@m#R0#sI^f@fo#~OOe_#$=;lcGr=+Y1F-&w#soy$+U+p+wv;CDH{@A2E*-MvkI zJx_!CySzqOqI*HcA)_K=mtmAWZY;?7&?wK?)x{|L(dNY&6`LzE9;$ylBfEY<#+U}| z*V#{e>nCGJ?&@xo^}r@`SCUcoDm>AwtEW-+H`juUPmP~t90oSK`V!BRJY8v1Hj{(< z8ofuec6zzWGs^X!wpY3y%9z3bY5bq>s>tx1ZSw>0xWZ(OUL8xx0~D(3RAJzw&AN(mD0z z_Br(wOE=s2jKTV_bhE{~@ZlLt{J90=>xwHX^QWVq-S-SFmSbWwHhN^|!7{54XN;w7kI_R`T1r+E}Y| z2E`FuOTQF1k2BE6(xDOE!NbpYA`_ZE>tDad@N%aooejA_4mwICUdYEI}gTaerF$h5#MWf-5XX69>wACQRmg1e_Hyal*r$} z=@w`$FkV~KO@4~0kr(9$2pp}mrj$teCFqBioBE-XYhnMp=!gDn-L2G!jwlxx9p!9l zAN$@p{1-1#8?Ta2d)?S|w1>2YKUrmEuL+$ubxg7clJ7ynKqH(m&=pQ#4{GX~Dx}v( z*EG@C;2Yxddq?oQ$mQ1uF28-X^MHUiTyFwMM#HMPp> z+iUbq>!e|Uudd-<`0`ZtpRdV(iLo?yO$FMV^m z6J5?8{x?R83w@X9nzQBtTF;kiJqyOt0VYL=p;#RS#zx%5bu|kvs&j0br;lR{3+C1t z6~TO0MR|TJ=Q(CM=x73VSG`$_;&FS0h3>Ta>gD+TX+o7+*1JT#8=&K)Gc)}=Jy=Cfs zFIG%lFMOQ%cS3QATwbgxNvur=J@wrr6-bFXIvllmUxgj@n zU7r(6OTH-F`Lg?_=G<9BM^?%{0DN&^p1Y{69r3uWPoIANPX}}3|C}D?eQcPQENtIq z;jd5M=4oNh`i|wP?O;9(|IJE!{o`-das5}$=B&Jjapi329rk%;L%3&tUN@txdm8-i z5@XnK(nUAV$9^w%osMA5b+%5k2RQ5WVb>_!>oliJD7zbe7vPd`KNnnR%}EQl zZfoO_x%V4u#UFnMUM9jjlA(dJtv&b`^G zjrZRnrVen9e%881^jf??e5}Uv_xuL&u`L!K+k}mDgU9A$4Vj_FbB*dB!N;C~?$3kf zPtUXDy6yulxvu+p__N(?$#kxpjiTB4#_-GGQ}ftoOdrIZg5bX7zS~HbUsNnW;?lnn@?B&;$SObA6!~}I@cyN0QDaQMSP{514`)IYu~-%5`w`F0X^9S^fMow~EA>sjhHeu6(QG|y`oe%0TQ zlN4sZ@VfCbd>>hYabPoH`Eo!f7iS0ZLN(O+OXka=v6ax+24qprltwj7;fei0!&GYz zD;oM1?MenAw#oigoDUY_@1i~L_{)9E^9qOwKgI|JT)XnKUH{B4aIMJCa{W(!fIE@1 zNh_evEYbp9^?mo(n=6?-k z7gE;5jX#OsKbCL)|Hrr!HJ-%dPCY9tJlo^JNBQn;9XN7?3xACo(pFNhp1%i2YvSgx z2YZ;g`APmpY$qS0pS7&n+$-Djy4*Ydb6!{cqp#RQVh>xu{ziA3e4Tydo&RjxN504Z zTI9tN{EDM{={Nh6qr0Fv-Mm#k^x0wdBi{YHMwYmnhyVRuY^%T%$*s~U$xdy0GBJjS z6l`clhT%N2%(#_(;i>@o-wbpMvX@JVYY6pJMUC{eA#OrlV1dE8)I^@Hy2AcOcr5Lh`(N-wc=9Uidwjk{ zCpQsOZko%uqmcgkh>JL+S7pX4;L|fX#t8B4J}R4Sl$}Qz?gl9<2H!@XWt1s4Ha_xq zc!N6km_NCv@*#87V_UAVtjw~%6aU7S#W}vdpUXVLFGlAXW!cVmqmq4E4d*td9r0x8 zXP4X-*dW}OPD69QiKl3H?W5NIzJ@+jqA#f2Q{Yc`8RpsdFZd7LTx{x9pj$Tq8*Izh zn7a13@6{O(8FjniQ7$7mYPBbA{fpDi&jTlV*N#maSyPeP>`h`WdjSX9o6bDx{4$sO z=;m>k{K2>t87i~YZA@- z!8>eL4g#;E*IyNuj(~%Qq3c}6u&v;!&Y?x4wsKCWXAQC7gPbe$W(-qkM`>sBU*}8W zqdV*}ilL|a6%$wW?^NDC&~#5_zT);AWRDWvl@vb0KIMNY`_5Yqo+qEg^QV(6JU{B- z`DFY9O*~gTNW~pXj`X5!;WNBH$%MI44$L2#yo7h*lj1srd%!=TQ?9J?9n;HK9@w;d z*8$P2EAS~qw}X8UwiG-in^<}R-Mf(zIrbL&_73~lL%?yxE0_8W;P?^WizlHwAdk@n zyk;L`c!Q%3PIPTJ`d(rfKeHAScG(u}q`TP-e)!OnTpHyN%c`iSNrsA`#l3 zk&ZnM_4g?Ygww7q2pibwHN*u+rH&75NFQ9_H`~S*MXZ#jBig)|`h`R-@ z!6p>jr^IvcuS$d7$I%~bR#FR%4e8jdWMZ!(`8}#}!c)X^q#taE8(U|vchtV|TKdr$ zEH3T8Ux=6z-J2JK~t|c z!dE32#Da7Aze^un+1>%7_pg83qWh0_p!>4Xa(ITTVa4P>lTUacTY8hO0q;!i3pp}% zN?3G9Iz9`QU3hxxj!f+q-d*7``LE&-n7BjCdtbovUAAy(@#OKWf6<+j>zBE|jd2Et z8Pbcs9;+A4JkGphFI0R+7u44k`H9TC_vgl(%#p;br*E3ygBQ6rNJrt&+heRJ(dj}D zzMNZpoENs~=bNXE!3MMd8_++S@qw1!5!j%${V(j}^*oARY!ClSzWCwJO6+i>39ULLgOH??^#cE*L! z-{=a~uuaz+py!RN@fRA14wk*L@ErZoYV4|aOHW?Tr58d>s0@lLNR{lePB)R9G$muyk;#gBGYn)zGk!o z@;yfxJKxDNIjJM>qKtHNC12dJ)7zu3mG{q-bMiXn$a}KfkkpaYl#@)sI$G;Re^!h9 zxtcxuPI$8;x84(@8*nk#j&8ukS&i4FSjI_BGgA~_;HGB7<*E{|m8|~3o1B%;zp2^l zN~+pA|LkVrp93e+)3^8@7-Yq`b;`U=+L0+qVRPQ6B!(qd&x@6-vvN(j`Y-+3bZ&jd5d6H`%f+_Gb67ZFCc{F-{80eqMVVbH7pC zhkZ_$P|f4+>YSK<_NG3k&u8+#Z_Kv@-qTLiR(Zy$+p5nn+j^L`yr(L^+p#C^q_0_4 z`MW9KES#{%+L+VF8s|w{YP&3J^yD~YOU*ccK-oshnq#ZU3%$d8TRrxCowRB0qz|%b zrk*0o5l_piCzu=hGw;G($)D%&>rLFiP2jNZfEaxy=Ss*I+E;JF-`0Z3`5~=q3kK(h z#8;H>RVN?%2s7XG0d4te285*F*Z#}we^zGb1KM4yvWeKVz(1@q7sQmgfHPRWa~2?< zSM&Ss^V+^=4GNuam*4GtUpcVtd&9ucxAa~5lCF07mEVr}{_W5JzMJ)KiW!q}LCCgu zUhH+nwrhGrb_D-@)@tIB0D&g3sPx5o_VN zEBr~dySnUT{=sea2M2eWe-HU@Cck5^c{}gU|6BNfQ_Qy#-mi;!|32?m$GjKwKAHD^ zvdu1b>~K>eMWj#aB>j7&UrPE$;2FgB%qTuP^dsPT^1bG)&@Hj=^=F4lc=yMaG0qOn zByA{ZX1|fUzDvEbCp%eB;H=PfuN zMmE1Z{)@K+)X(~1p~RFEOH*UpXy_X%pbh2MUhFLL>ulPo&q`Y}2amKa&Efq{+LUdZ(j|8feZ#WFy3l+Q<78*s zIs697D9=DUPoABpi9FM($Eo{=~hB`!BH^Gy1G zjQncn_dGAO^JV22p)KSio?p_Sn6fiT)0)V2(tzzq-p%py|6Kmh;HPz9rKLxNKhFQN zod5Lg3hKIn_hhFo(k7BNg|wb_8g`*(S&jV$zDX~mdGhkTkmp2xqDiWsJ>VLhZDzA? ztF4&YT#Jo)4SS-^j7xb`#}MimZT~m;FT3@_)fT)umPh6^%fCQ*(KVINp^W4z{r~K6 z>r&zVzwGi#Ya%U=w1$|pf0L#)@m@^YZqmG@y%m%8K54RF*lwpuE{vnSWYWy}voHUFyuE^r$cKE_eqR*Nc?vJQk`u@>G}Rb+U1g zU5)l@2btfkCw+huxo5x?`3ZGsjcV`OOr7lC*J`afYgIPT{g+rVdn8Ajw#%eFNV#?W zT>kag^RJdYe>cwgIJaIo-;!Bs=2zsOnEU0pod)~1*t&aC_vvC@Ierntx)UD}-Oqij zt^2&jaNWnDcw_R3$n{`H9EVPU7#5qbqj1KkF>5TB(O307E8V{Pmi)lZue2k?fH^|! zj)$1*EA-eU+8Mcb! zo9RloJA5B8)}a}u-{(Ed1Gd=qS#5Hp;VtY^*sD7Fr0K{ITit;TYEQPGnFWEeQl6#5 zs)%oxRW^ZmqM0st*@(f9EZcfUa+R0+VDvtNavHPllFDXoa^tw48JpQGWOrwb&5Tib zG|!^Dhp!(SHth(IYhEPQpW@aCw?vof&#>lR@_|!EbxU{IS>F_^PyHLoJ=IsyM`s>W zm`Ba!J3E+5;th)D6SpAj#s5V6$&PcFX3t?U_^CNmj4I9H>EeQ=ob-XworWoq!cmqF zjME3Tzn=E-CusA5xdtB?bP8X~2j*&Id94|IU`ph}!G838WJAr@0_t_zamM;f(z3vP z=-KnJd+5%_>+GQmnU_k*5_TJv&8?=N$f?FXYlk~26&`HqbW$SUe#~v&5#`7~=kYFB zIq$i=OBUthV^Z*+^>q#^%g|MDX1Fy+zab!&m=J>b3rL($7Y^j~+3H1ogS+mXJeL|zNI ztIN>|KXKETuz12hrN7^+I~Zhtks5iI_jOhGqBE9%b!ubE@47~r+U0Qeq#)*9Nwdh|WeZAu<`f=2r6lkO(j7}EF`xBqI&JV*bVrv+NB z0iTb}ioBzMt{%IBUv z5dG+{2MW*s^gx!Y@YwE4IY&&GWA`;ZqVoy$GkPp;gxb)09m)DqJKWWqlm!Gx+R$4DREm>*Zth97H?JT9mS!vmJ+PO;eT4{N9+90L*thB*)+AyWXTWNkf zZIsdyth530`bUW?lO{0u1J*~7^ z{I3j}^I+^Acfv?>orrS&@m-zi#?XaL#B6F@g}oU%N!`=4k~Peo9{4#Mp%2)H?q&UE z$j2WU;Uqsswyl1uz+Ym=`3a)?1NVmOoVWJP)}?pZ|Njafm+r5)o2#xNl{5L?!BM*_ z0(H~fM%{_IS3~=*f(8~r3#UL6C!_bgG7OD0ecwgjT%7A1L0>K%SSIKD?je=SQe0`< z;DMhRH+Vz34=Nr!^8PrmBoiCqt;Dqo!`DpNX3N55h4{G4L4WVBI5+gJ+Z)ME&8RZ6 z1L3~h&+Z=l^JSt#$6jwMU+JktjxhGWwRzdHcds@=o#p@JRQb>EJpZ0k9=*o$>zpiDjqC|3WAEx02sa-C4vw10E;m^68ko zf<+~F)r(d}!LPqU=j2DMyMYcs`+tC}aP)^0!kHuR$3#vOT`|t$InJ`D&AcAn(go0& za{}Q34T0v;XBX{gnpk^a;&ZPa7pp^>cW;W8 zR_>^*d+tEVqklU|djhVB$7FM%_O19J>5(&u6M6}K$V5j~gUyEUs{oq~ldkm)%-Of^ zr#mJ*`s{&y6Sp3i@SN(7Z_2&pr<36i_q)g+Ti0)>>q6@CJWEq~4Je}cJzCcbXPGeWPz{1snm*|hD3PfBjPiZt`+*laTW3iz`P;2a_k*40_ns<$eCO-t_-mc7`%|rh z&tmd_optj;C;3mcZvGyVS97x!KHeHblaFx5w+y&u=M;qdb@x^YAJ)otNBGSD)&ZP* zktakRuLrxkgutBHvlmUCaDLq#;BBe*(ML_Zt-@9aA(`-0%4nDf+kvI6R{bmVxTF?4*c>e4Na+L7u)xRE?4Gx)d6zem}`YdF9=CVE| zM{UASHg=sXLXIjCerinz0{+t3i*`&rzwST+YqjZ_DD`kR#LphxQTuA$fs*t8dLa5& ztDcfGILl()75qQUy?cC=)wTHjJTnQI$&G~EAVG6e$#78+xkRCvBwj+esDRa~Z35Vu zFo>d96HrNrm%xB#G)fJgLx9to8Hw5oRcucQ(E1Bv6~t=W)0PCPoe(b|f(eN8e%EtJ zCPTRB>F<5tKj!nyv!8ugd+oK>UVH7e*AAKw#NR7Rn-7M_e6UC61L2X!LU0*6A5<_O z46eCSn-6R~^T7~g*mK%^@YA63edvz)puha{&y=6}puhY-I#Yh;gZ}c*JX3z=gZ}bg zdxrc%*S4PdptrwQ2IUW>>;Cdz+E0F=>%mgDHXroXogI`{=(_3Mz!nu6z8+Z#Emd-d zWA1SOs+mHgP0>{vjWU*;aZq#r#-5`o8)dB;LtUlAHGQ#8`J<-u)v0^g?`9u9N8%{_ z$w>Q)q-pwMo$`17$5l<%_Rwlc$Y)R)^E#CqgZQg*ijZ7DQO`vT# z(~yCkNA@}9z$d$gKQ^;t#4qmkW9JYXP#bBj#gB2W;1~BEBCSNVxmrk*|0C3}cH~)#yI&(IM|6)wn+2ry1o- zd+O7_XBh7eHIe-EgSAEn?G;mBp0sbgzx5Vyxqfl4q&bbWNXp2&((^u8dl&y6se^kF zdAGUR*-OfiIR}~43f_u7e(_%U9$D?Yv2&0!SLzUd!BTa~k~Z=R&Z6?2H-5r5!CMvS z*gdp54{7;rT7D<#r6K7K>XGyeBRw+T86Vn43pA^>QSFQmZbN8U((T*zG9}) z#Y-}bZ&H_}OFJ68tjYDh=Es|`*)$l6mQ?XgqqU&9!G9Zef(_6j^4sx_r9KXtv#}nP z{e>cMBzA8pBevr*-bYG0@56c4@}48exk%d)#E2}$0s&L%h88=;wS#= zj}kv`u-iXR=lf?k_u|hk%%m`P$E7CXzr)$EDswrM?<5^3e6k*}`6IoVT1K9#li z9ieH+*AmjizArE}p?`>e`OF_J^`;G9=&V)FO+jY~;9TEJN%6_}%Ks=cjdf$E7ON$} zH-+-@O}o#{uuW8vCbo$(d1rs*LEdE_;Cnm+HCE2dMzJo8#wHfSnOSQen;3IOw~h1E ztPK}AS##QkU=!OxYz~VaZ?qkMzTi1S+Ct|Mo8xzyGsK?WQy+L+Kz%LAMt!=?qAtj0 zQK#rOi#oN}W>II@Eb7!=n?;?X+brtTUYkW7_g~6dy-p36b-iY@s8e*CMV;Dfv#3*a zn?;@4YqO|Rbelz;+H13@Q*@g}oqDmJ;5(QK$CWEb0{9W>Kg1 z+AQi6-DXjzUL*BsHj6q%w^`Jwy*7(FMYmbhsl7IfIz_ix)TzBTi#kQOS=6aN?y*_a zDZMs}x?r1yCX3A2O+#yDMlufE-@MtMQuCC3Fz=+f&;ecXV>}DE8)da>cQ>wZPFuwt z3CnqgEm*%W{EqbtoeMTD%)evf!e~X$^It0zEl(9s{C9qt$(dk{R_+3((T{24f%oKO z<%-89*Un>(w+`TrQ~24+UIlst=Y#6SULrchKS>i`*msFzA#wlOYThJ9;Qzsw&(d?& ztQxyXTSS2tr=|8y{DHBPNUWKf_mEK$*hx4yIR|^8*kXjA#19~&dWU8^%)l>DY=<2; za}U@hz(74_{xWRjrC{SnabIGt7bzf6}@;Qi9j zG-&;{&@^!TebO`;!5)tAuf%p+^|sExGkBhD4{SWV+xnEwyQRcLEs9nq1lzldTJ&!% z;7I&z+mWYpu=!gQ!nAd_XE zRn9WWzLR;kgxJ@ol5fde#ruG1`ZPKKACVfI#I)MYy86GI?4c<~ zE*j!I;bc5RW5l#EPk%!`k^5$xl3kw#Qcm3Y8*G6pG;D#Et;_+$POwVc1jV;PWIyiJ^H9khc*SB=2kFl|AWp z)(WEY$XZoAB@-0f2imUwxwyyJwMu^MK-`zX^R!{M=U&E8M<9x#COqxM~eKA#;4uWPRVOwOQF>!!J|D zNzSOZ{t@^jwxV%H{j_)i1C4Xd2}ZmC{8YuyOp9y(wt3bgzqyLDFV*-d9vT5}a7Lmh zUcieA@dCCJF94plhBr5+I!}pT_A&Gz|13Q=$9mwame?E$G0SQ!o^STxzm9xv6F=;* zuvn#X+}BO4yZyHzulb(H8K`F%YdQb0iG3A0n=mJvIbo;HTjJmTRTq2T^YA&i?P_m# zVScVTF55>#^Wdh5U(PE!E}H0%oGZ;~)o~&Io&Cm6=m!_#OC`7{ee*nU(JZ)V(PJk> zgf}OP{=C1~8?YoBx^uFjJ16=a@Q#xh>2reOq(>7cJ%%{xo7Cvx4#w;g;-q(gLkDrv z^Ek7=^9^P84lVY$#K=zcadTC@-;(S$@%H9L%&7-OZyplqKS@heE1!g*{v^t1vzNSxqZzmfZv zIEM)iS0a<6SaS_`M6I2oO8i~UPJlxv^dK>3it*<^WYAL{I8=aN?njWl4wIfbp(lww z{GyycB>qHogT&I`&ix5GJ$dJHMu4^KxG}Y<mVukVS#gr+`yn`4Bsk&BO#59rPJ(%?_A;Hvnx5**V@;f|{;oXM_RDkA)%K@@ z=_;&QXgevtFt>KOt_xH#Ud%7!+pHGPpmzgn?l=BV;0$Lid265P3vbcO-yPm6Xk3pW z(mRHsGNJmZV0gouk4<%U-(>K@an?=dy#c+k_><2&7Jn~4By}F-EWI9!U-*H2fwzPo zl6v^TV(>%9JYy|+j`9Edr-3!UWzYCHI5TxHO}1VRZi8e`BWLzC*>iJW*`uwir0f$q zzFXm$R(Qr{oGovKXLi9e=Ocsn8*<0F@!a^{?(U24q#n5wdgsA+kvmD9)}ICAInj55 zyA6Z!+?0L3awpmM2snO*y;Z^SF652q9;VE3j8w*ZS*H?EcIFa(OVPQOK49}O=g%CD z-dgM#=h>|&anmZxD_r(y_Yl%k_?4>ZA4neJyJ+vCAKuDuDT>h2SF>fEoydA%YsXm2 z>m3Q#yxx(mY;CI%AA{w@3x88zFXZX#g~hk3-pb`lZb!CrYxyAZk1cpz*6v#QSB>%` z&QkvSM)?s&`Bw{GFTX_DT87SfJN*`ZY`Q0eAD{VO@FTL}to+D%%=HiVrH^1*zFGFH z(})RhkTZ^+#7c2 zIskK!2KVtGxVIBuNXxT9-@nW-@^p{~_htGP*{NnIgl5Kf@bVR@JC?6Vm45!3J_gT~ zwdik4*ng2e7tQP2XMgQ??{miE=kBw5e{i3}n%@A1n+p4v_5T$l>!U^1n`dW{xA;MA zJ|;G*e$LKzX=i5zkG*GSpBf-%3Y}ZOO4rZMHa_{1o!}Y2@=$*mDf| z-1ao~ou{fMl`%ig$x?EM2wu;#jM&uAl=l$z&lh`N*l6{X}SO$v1Uny z77kI5%su9O!#q{D^j|j5^`xI+9@?{XU$$q8@!c#tfjS!arGeX}J7YZgXZyY}#v^jr zEGzTgM1F#6t^Fr$9yup*#`bq+J{|{?%VywMko#5R@ zjFK{|Gq>FE{f->7BGp#CA~iBYaoj>2hkmm&tDCXI zwHiA6Yw)V6w~HU>MfmwI7Jo4QPx)hD&Fixs@U|jfn=a!HXU;`zt+{2Qtm{pkl2|9& zn&Z3Zlr1xQvop$Ucp*p;Jd0#pEZ`Ua&_SGqW%vcA@*aYx)erwre-{*${YbwOf z%9{9c>gly7-h{1XHa3@8*j{F0gSipkxf`(i>b`TS(3~l=G+7tK!)ChBWsfWi;$gF_ zgYRqk4S|PqgLt^#?*-$YhUUClY@@2VQoB^0JNZ(Ms->@OlpX>u?(B(Xzbns z+iT(@jV!X^-yAB3{G-3S9Lm6N@my<{c4B)5uK~KyYyBS$R@=LNqH{6zOkceZk_JB)MP7LOlV#1_U~8*<)R@eHSIZcy1n+2>z2jk3do%65E+Q+jp$%5OsB4t&SDeotNd zD68w}eed9_d5$>{d-0XfP=DW-8s7_v8_?Sin@$rwXV(pyK>zQd3GM8<;`upkZ|(#4 z`Imi`vOn)r)}W`*c7tirX!mi-K1*41EV_Ar>O0o8n6h#{$E@pP-j{vHy5>;!9?JIO zI=RP}B*Vb^evmJ%mGzT1rQKfym`xtzT= z{7%HK|K=l>df9`~`q-G^=>X22_tH$yM}6Ke^0f0V_ChUxMwaLAykAMbddjq1?3V7X+33~*`9Yu8$p^0lk9~FOzVSTa%Omhj(h4?GCeK9?~U1>-}2s5 zZ%d}5SLVNx#gyh@tb)-<@=vOF*IE^D-Q<}%u6FJAU4hWM7#w(JA;O;7PXNO}h6 z&$K;OS)(N=o5e57d@sWHLDp=|zbC$8g0iK7Z%+q($40URq1&6Ev)Qsfk@7NMHiau& zRtJBVb3)Yj9Q6s!F}Ei=&F`$unaj6SoA1DrBWJeBznc6%4NA9hK2p*jC%qz8*@8}> zwK(p;noO>*yePv3q*n$YBJL1}YHiz4m&M%tgj zo1FdD#!2iatUbQOej>WnAjVYo>)+q0`+0PggtPt_z&a#?JzpF9^cL3P&_c!ZcJYpRQ*wRiv$EeG+@^~*a~O|W z;;YO0ItRSwMDq^p@bliBXr&wfYi-ZQ#(nTgIQ_?$TCuZtZL6A`M}FD!FTw{v#>9L- zwR9U}t$0c$ZU%bYq({VWPvvfy-g_>j-E{2pDtc^275m0j+b2ogW~?jo9t!6AS0uKN zoR43h{XK6Pb=rF7T?HLb^)}Tgd;P==n!~qDnRjX1OW#C3>SLbZd-)^m+>Gle@VQao z*(vaF=f=_joU7IE-4L42;a&>Ucd$tOd9t}D7CdfyVX}8y&4pb`Cb3U9DtlkNkaG&y zI_-?VZ=-z?JB;a<_f&8vR;$;~LJhsoHqSoYN;!V>f0I`QUe0vaD1Ce$O*)e^%hTvz2IH4x#C9#SD1tM5zX~WXcTeop zd_SsyS7MPIUJfp-R{S&uU?YgYR$wC!_n==NNn26gQ#*+TXH~ieK>|Idf8XOpGnGGb(7+t4v*AvEYL8MbGeJW4@b?)c<$CE&?0*lNv>AzGTi@- zx~P@+Z9It^I{WBAIr}Yps`@%l;!T+Enee~h`=&t(;+Xq9zDZw{!}@3&&kiXY=q)>k zJ!HvSOy2SVO1!`o30zZx;er>%7i!nTakK2iLG<$6r6^Y%4Xo>dp^Y{VlV_X7vZ#i8 z30?&c>#PZ`cG`OtT%_|~{EuGM@F9Eq2`=$d?qJ>S2ve?jIU_W@x0+&(L&7BFz9J!BB+DZ0pvt%qP0JjsUcR&A$mD`iA_2B`t z>_1Mu+&{2tP;0U>b~Hn1IE5ZnY)ZK z-1#?q8~Fu}fuwCB|0?o-M*f$`w}rOuAzkL+O%D&6wd$^+mw(PT?K^e7tmTQGRYxA7 z*H-e_$(kq+j;Ppomwcahvb6YEO^ zrcvZSLLTuu6+g-YI~C2gEjW;Rr0kKq`Fi5T5t(ynyH3 zJTn!1+NL6-ijh@QkXc2@uIsRGa_5v)_iI&Td3zrgAl&fV!#v5kt)@%-}nua~Hb3%h-TeYL86>yx$% zy9N3Cr2V*`v@!jp4e2M1yVg#tk2}~-OJkqVLA&MU<*(-ne2>;Pl*JI|g`nK>u6UeF z{1eutia(~z^?{w%y(jLB1m{uUKAJJW2Y+cSbCUSs>%M&BZ+ChF`xWo;{VGq3*BP!1 zY)e;82_F4cH8=3IQkjIl(S^PxzPj&ozws92e^nr`! zhHcz6KNq>g{>poz<4awE>~L>@^XLKQ*T6uf+a`XhtFJrNmZF?0leVB$f1&EJGu{q0 z%;SH->h*qe^}ZbTtZWyI_T>G+eqJ_XuzgfB5aS#iyq3b6yjZrcScV%6u?3E%U+n zSsBW}G-Z;8b3GJ4YXR-dcSNTZPo@syK1Wv0uh;~9E6W`fhv2Ca2Y8?y_P)JE;X^O?@vW%b zF;VzESJ5POk?$JSzFTk~h9A7dIurYgr;c+e+YWBUA2IQ*z?!e-g?R&a5>MzhtG5=vABDK; zZ7Ep3!+8?(S9Hd<^s32bxlb7LT4K}`p{txLFMi(jZ8baCD`x+bI061)z?H>*C4SWH z5)WOA6)*!@oDNM+gEprk5AZ$Qsmp>46fOn5&5>zPKLq8keAto^h#&RWt!bu!75_&)JXh;cx^#1G~w9_V`SpQx{O zc}Z7oAh5ZGdAyaf-Hc5c|FyQzJ$8~-2Hsl9TMAx+^|jx&$Q_V<^|!#z0ed^L6Yu)^ z?j-t}OrKNe`(SV|1b$3~ALY)uJO49{F_joYfma!~3F!A16?&Dh!3#%aIJMTMRF>y{LFU#jbkD8ngQl`d>%3&0EhIq51-BGRy4VA;jMPE3sue zW+~kof8VT}`edgiH*lX?DQhkNFyh_{pTUnB-{T7@_qh9asvgmyKji#R754KkWX9K5 zvF5;rE$1dWvRP*hlXVBamIC*%Xm7x!bW2S4ZPui&CTsH7<)nLSk|)|vUA^xR^4^CJ zWhAf_!{ff1lrD|0k;#XmoZX$sE#Zro=-1uw_Pg-*yYTkQ@OB)$y$IgJXZx@+bhKv< zymtT|-vE!7J@oEc8~hzTDlTm`JlgzFd>X%5o5rYVtAsb<@0eTes+bOcM^`MUmQN|r-FU4On&Fd#V*hv@uPmGI2P3znU9CCNGjOn)QE7+S(>T2iS zl1A>DY8xxD%5UmA%6NS>k2017;@zfoe$AX)lSW+pJDuHC)&%w&WSyPn8wSn$vCHT@ zkmR%QexD`Ht@k^bvI(6BQ|UK-KE}BUMNOvcP;Fg2n7kiY65Pk3=?8>gN&jLS^=UYx zENdtSWxvM$gKtmwl!!-W+RMjR6an{FbwRNw+PzVf7HM6^piY%e-GI-`Byz^68S0UFDeqdkw6}T4rp`_!-@LupY zkqu&FIS%evr*t-QcC?jx21AF-IP;i=?$}|y%6Ap#r35xt?{#QVVetKc2{|8n_1 zb-XMK!TaxkPw?J`T$GrG!e?gP!=-I_S$OjT$)mw1v9}U>@??@nc+G#?wcd+@@)Q8O zSd^9&@9AAQ^pj^68oiIgI}uH*)q7F#ZNlx z0_MS6nbUs2+;$6d+|A5&-$&2C$=i`V`!41{&2EBz&vMG{`NuNdrf!k5tQnlQVEo!s zxR-!*(T~sr_859VouLQp(ewahr|1Ej$(Lc+)F*`NGUXD=$-M3dXF2F9ZOAa8FV#pF z+7$WK2<^W2JBfdmLCdhJ}cu>4#bcf%*%lJ8Bry@2x> zNu39>zJHoet7wq>@p7GgGP|1+w-u=2lqr~0c7OVaLIe9iMF zD@V%Uf2pIC^(X7+_ae((6HC;=t`=m8i?u}_@jB)pv&3E-d4b|7KJw60#qht_5k_!N zkBp0yi>BN<%3%Z4%3%l4%1IuvKP%;jCMiR+7S4I3ZDGdH#u?GdPyRDz(%>1Z)R>id z){%#*sjoO+@klwZ=-2r2wosRyx^0~C?6gGgcBx6bqsz;+b{fggeCt_8K7mjCy+)9) z$r9yGB0VWi;T%mur&Vl5oMCCDp9iCq=4Hv;af5Er!T44&hnzr0XKrU53GVNaF(F;< zTsau!Y_^4Sw+6V`NLz9aX3FuvY#HMe>K1u#3sdpUWjro&dgtSlA?MaIX@|Awd#9G_ zw!!20*>{x`Lidc-PTfwJsoHi++w8ZqXQR4ptdr0owEJpvxWiSU4m;;pW&Pyf?%Cls zWpCa%?rTwN8xFx|B5y<|uwjE;Z?Wx$KD(v9^``<`4v;<BAUKKlGx~g_Amo+kW!bmyqkL~ywtMj`O z?c9^W9NBKxuh=+aCgWlA4WJFNtJ{EA=EfC9I~hhh8MISPJ8Gid&IalT)w!h}X;*AN z!QVa~0q=^;DV6@%e8(TM)T@khaGrU?xO1*X-D}?SEV#F;#G_!%TC9#o568D3+7#b@ z@#$wSCx-Y%o+&2+dmM9ydYXpid07|N+1l-%m#ACrLbt{^yYo4}n>q0U&kpqQKZK^g zpW?|v*V`7Fz9-oudx3rGXv+4?CHC9q(DY479^u_Sc?S>jl!T@YP4+w-ns!5?Cp$E4 z@KDbN&X3A|WS=^7(mcztN7jd?*T#9~lKw{EYJh9`^IkrPAH zbFw`a@OpV@x-HeS16>zeUf+8BgOPoDY!F*GzGbq9H&!{FZs$be1B^{(82dGa%3fL9 z`4d?01uWi-utM*FLd7$RwTJBgn0r5c;N5e9XD;W^Wskg1`p|UGT;c-BoZKhYYO;P$?JYl z{MST2Be?@N)ne-y< zi#(V0h}ouDz61S52`3KzZ!KE97BjsZdz`=(T&L8RNZVIf8t+wF6c76Z^<{54x0a&Y zbGM1BT9cdk=o~wm-p7B*Y|F)efjNhAvL{zg89Cc1`K9bG>;YE#ApcAGFY`hHFu#s0 zJ?s7EHIaJ-rX=bfN8L8g5T~n2u6$&48S{cvd+rX_I9;%<9I^Myc;-MNRxgY&yMhX#lA-A z0Par;vl7?xYMx;{*)t~QROx^Mo)(_WanOOpaV}jBJy@zHPqZ}7l=EK|4cyH{z3llO zzHe@f=VT4>@vVwibS0ab5+$$-%qF}Wh=ueuc9b^qtpRtxC8lC^gtE6CdOg89!g0fp zwVA53x!oGpoDp8ooNdo1zQlm$gHhqlnbn2OIa8e7SwmVT``zqQ)ZH3tKTvd|~xjEzdKiJ{qtZhUjziatL@w=Lzz1ja8b!*2q zRUZ%bko-@xhNqoI>$8)T3*<>y`%HQMY?5-ZewIV*gmMp{5+l#2Cn@prte>PL$@7^> zVk>O4)=d(-BIbS0e*6I&;G2^UaE|04_CbqkZB{d}GitWM9g{5J*P^P;7Q50c=P2w` zxC=VQ(meP%W$Tx+)&Mu_tzmmD;Cle$=wI{y9gJTyUj4x-af{YNf9%6*YdWW0sTbI* zX7$4U;cqPU&tpTAIvz%c%S89p@ck%vSw~#etUP)R&q+KBc;@mffDL9%pi1V*9T7I;Bm@PCD0j&)Gi8@Ju#EwLtdmcpY&H5Shb`Z;!y z#d88VmQr2vIyyD+xs=)YHI}`%?JRk{^j^zeOG4GmXKD9=&+;6C2Pt>oa*Idm$!9(A zhBdBBaMQ?Gf5bTC(@2*gKwmd|iXcCb3P( z8X~F6;`!)J@hwR5os>SqZ)KW2D$zFscmg$%XT85mllin2yVSHXM|l1l_{1Jk`JkRA zHX4y}0{c3#Kf~w$!BgbrJw_gZn|l+rSmrJxO<-&R#@E1u!1o*A6x-d25I8RaPMI4% ze#26KJ7xR3XF=rZX|j^o3~y6^fA=4VEKHXe28>fWzB#N_v_0g|InBWuM&>ka{Q%xG z>66IdYRV<^J|3C=G;&<#g@?ZhtdY5f*!wP#-;#C}c#zmGPj7H~Q&_i2Kd_HzW0TC- zbp1ibCRrPsTIy-y-iP<;zm$D55LhF7>@r?e%nb+Vzs!%^m!{3DQ@R726POpJ&d@%7 z_=Y7>))q4F%F~3)oX=QOX?MX$JDX@n^pYzX3f#=uzfjdH#~Ti|LE}Pc+hk*CAfu)^&nJ-!HWK6MSVnkI_dn zy^;6EEX9LeRilei-anxI{^%lj?oF2QY0&52cE<01`Xcb-YoPJRO6s{^gDuJTsgV|n z*J|MVHgpzDV`6_Sqs>qnn_|)!G$T5Q_%;ZQwKE3&jcpO%@9&`};%x-c(;Y$dByIV- z16#x|M8=Fcz57P`C^S@N&`>$C+eEj5)>4EggP$>>wm{S5&lGliYGy% zA$-uZG3kxBb0K4)!j!KdhgQiss`Gp9@*)pbEhn@PQeR;~!Plz6n&ex_QwbRh;V0G&x^Bt(?9b$3u7kErz0uSwb^X!Q zD@{GSXB|P=%F13JxYAT-H}i;wqXpD?U`gL`ly=cC`QAJJ|4CoX@n1_B!S4@wo=Fb0 zQoiglXBYDR$fqLrFW_zfcn%&tqF@h#=Z;`+(bB8&kJ8)fi%ZrVDY7r{sgz^g(}=xC z_Pj^OfjVO>$Prn6u1!LS@g2 zp!||o>>*O`GmMAuWizxab4V!Mnr;EyzYT(0U}65!<|C%ThK$M~t&fZ%U1U_2miKg;9||3)louKin2Y$|Vayjfk2<^B zuz|`LN6MIkn+1%A%;yR+Vb%(r-`{=RQojj#CTS5%PiZpXEz&d^k#f+6=zH?s&huaJ zbqeihG$7xF2IMI;z*A(P(126YpaEI$C87TaUi|ndOFN%YztGq#JiDMxkwKCkX29el zJp(?FehIC#QO9cqqC+J4egxi4T`46fkETxk*7?U0J;~26+{Kt+lj$6J7 zY`G8ImoQF31CmGjkT8T8N|Fxmu4l|6e@RR@_I#$sN4r1aY}cX7tlncg6%T`!m@vxO z9Sqm)0xv%QWtTX;%Yf}@6ld6hqv&GAD}Dy;^t(@e%ObpoUJmyjW6!GzTXLBix!Z#O zK#rQItwqFNvr$`zOm1$%|Dwq{w9A*h#9M+*-U)1W@;lgz$jc8uGM9Jpb(8jr@nv9- z!ZY$>r+3=V^Sm6^@D%gjfv?UovFD?c$bYXjwM%d!IBUcXypwx~UkAn!pFa51>dzkB zx4;tPenO3M?^mNcv+>~(_kB*tMDY1%pldimP} z7H#dKy;JVbyqn+t#Q%&QpX?;xa&RE}cV4Bg_Xw}5)F<=I&ewDsx;FnnNAsW~3wgD7 zU_(A@`L>epGRlYQ#-fib)?{p=Z?>i*B>E1KSD$lweQ7>=P1ob4%>%~wHtk8AFrNL@ zTNW}Wlp~X6P7r-f<`$9jvSt%|Q>`JNOOelSQQu-sJ}3GvGhq6I(PprY-Vy}Ue;eO_ zqdk*+5Ap18{uR9RtJ^S#jQD-uH4t)PbANL${XMsCqshKxUov&}w`TDeaL(entKxJW z!?bIf^Xd8GZYlNMr{RwC8R(cg{JIXg7`QdMfPNNf?I-%i@(dk2k!?2ir_A|Z=9y(8 z3y>k>ZghHW*iq9NH}tPMIk%xe&lS|8FwaZ<_$97-fkGtE@E5}Bf50BVWSN){f zhzXhUZOJQXn^13anhH)h^2N^4iXNg1i5^y`QT$MD-eTEcz@zTbXq zWmU|FZ4qj775lJl#581Y+v6aXr6cnKkAGOWx2GNCv()t-?I|_7I_Mf)`%JxG^yftEKkR#H^Mu&u7BjE2C$ah0lowx1xx-PR4lgtj2~DW%Q@30a zxwbYk(QWBix^Fq-S!+pli@tECHJ@o?Tcg=>5*Y_rwdCF8j~y zuNK@TI^sADE&9CgMxh4v$*vu-n~Pz$EyR{hZsV&r5&MU)*K=&}M)5 z{QrXuZ*{k6A2@#-Uc~mk^H3 z>GQE^zZoXuqS@{eUF)I0#mH5uA73&}wymZ7ebA)T^|_YTYbU4&9!WQC5a^PctxM8Y zQ%>r+o~K{xGwAnm-b;ZGyH>sUKK%~ZgwK2S2Z6=hAC!82MVqpIlmFZ=ufcRBb-WVN zC)1WCw%uTuT)=3`>oNnT;XKb2Pr5(ZlZ@<1VxF`iH<-_7cN|rJResYmn(RqAby{%TGn3iV#g~CG z({1L0LsN$RW3#1xHuZcf87Ak#0^03Bf=c%9%i@hZe+meb6NA}2Dk;e+<#0HCA zaU_$m6p0S-UeTNFoR9VL)cMcm`x7`397$f2{zsADEWd&BwacAdO_ZrZ zzMFae&t}oJb^TT5b(Jzwr{pa&^8U`KyNYKpE+k+1CY`=nkF6SMCr;TqOquyCO%{HGf z%C9u?)Eaq;dA87Ye{)rT{3mn&PmQ@BU1_$BwXW>>nD%+G^MQNDL$~t@U*U+g`AoVB;W(_~3>w?_6q&r3f{JNxSex_u~tc8(c)HuuxcGqm$z zPdh0g?WDLj(9S~IkvLz{j>v~d-mA{i|HbH)qThr?uBE_s zN}c`LQ=f&dO+1_HDb1creu24(MEdT<{o7RS;NG;U?g+{wJZaipm7qK_K4l^c8B6J};Jwml|0fOz zXzDZKoAkwTQ`hX>i)zGnATZ0m)PxW_!d%A1lvyQ4dzn1@=p`Y3ORIwF!)~YP95)zc z2l1>0#!#Iv*fymi8>L@`S{b30Ufb07fXAH2rN1J-bG0Y(?N|NRTNc7!=WAcdre4!F z^*6&dbzwg+4GDrN+4!Dl!1O^sFonu-J8L)_ay*gw)Pa3e)^Ov{osu(+Gjq%PKQkx& zl{0gutbMje)+TGRb_Fz&$^Bm$Ny+XFhnDV30H#)CZLKELdvPjrt>_X8cJpH!0x9B? zd;DfAYwh0H6cTGf@*p>VnZcft(1e2R$Ie_6*}ZI^_?A!Moa{<;J<%)1Rj+IipJMOB zyVeG*_RjV2n|DBxrt5Tk{?M;V6nkeGX?|!~;IxI?+&1)}4s5~x6a{@!_l1=8^1*rd z74m+PI9q=1=>&#FvL5tfbA2XD!Ip3huwIQ_ps>eJQeYGR^9SyQMjm%^FK2>pG5-UF z662!xjuf*`3VqVY<;;D$Li&V1=?bGy)xf{v<0bpDViI?U_NkmcMSiqoUr~&0_u2aN zWEP!fxA#r(zS`S^bQQ)+f&4+s-jAM~KT5Dksj;uRR5A7kTdL?U(jmF8%s<@zg~j zbQgOTo|68ZgQvFk)4y}^)HtJmA_p%&%b1;$?znHpaq6M7)7?47M`D0|i}4}uTZ$*V zcYL&W^(=ijZ@R-LsSn*@OE@Fl$^3MVe$D!}{c@&w-n~bc2O2-|zMJ5j7~r_r70bRqg)58a(Z-&^)A`UU^IQqY*`IeB*vKWXn@ z@qRA4Qx3&kUh{XtP{j$ zDQm|jBeq5(Yo8-88?iN5ABb*HN?P!ms^ev`yY*cUoXP%_O#3$4Ka;(eeICu;drY(U zCixzDLAQxq%DT7_``bIfBKF=|&bM!2y(xAWvG>Xu5?KrAu=VwS+pfXaH%-Yt(%a&tO~#EyieLo8Swz zx86j(G7e&IovD?_?^?=}7Hn^wYJ7{~SrdY5)86{!FLe8XX>a|WR;Jh9dSy^s6O3=; zjC#L%skcqj-g>E#XQYwmGxFRavad$s{c%_Qop$z?BUwxKy-)e1ac`!?$&`NNJwnW( zWX?eogK6h=@LPeL^-AmXPvQSJ`NZe6xwl=Y9Py4(X0OEO#tqMjKhmLL>r&UlpDQmR zjr~?L&0Wl$u$Mc##oy=?Bai$0qEbCc#(>X(;PW&3HA9Vc zH^)EOFkOvtzeRh3uM+xb;_5Bh6MUIz^MTDvo_qM^fzu8HHZOVZ;b*4h(as)lAvkp1yafbsj@;B#jUTF$H zIm2HKujUZ@V+uccFCeBvx;3q{X*jlXY%;d%hpz3QKZls_rrtPot=PbA+m*fRWNZf2 zHZ+ePx>j(W1cw|9EiE}VI<=`o%V!Qh4)qZJd$yqPMc<0Cw4w! zNOU^MFZKJf^m=8yGi2O3t1opPV*f?XnKfZ+lYLRawZuG$N6x9%q)r*1rkMh>>N|w} zEONxqwNBtusK-e?5?g@!J;k))U~U#)%`M<0ow7BV_=8gRqe4Bl!$IPx{1d;9Ut${- zTG{p(KDVC*X8(rRCW50{@}IOS#6|7J(_55}21hPpFi1a^ow6=+fhX5xy?B}fo=U;f z(ulPUI-VjsHvsoka3r|W=pbTUsw;Edt-DVJ#!UrJg0J9oiRG}LJ0ZkQDDBK=oXl~^ zr+%kaKfXKkRebie^C}T(eQ@^sW@41n55Za4EWugQdE-p_zmXVF+==wwV#*3`P6Gej zj{>vrlh`lXxJZ1R1Y#|x`6Ld`f)u6xMQ~GvkI{1ci{`A<&%l~;uN?UzV^zR7WzvTX z`rx1(F)-f?a87#$|3AA->Gl!7Vg&ojF2?^8tLoX0%u*tWg^3R2sl2-@&!QZOA+Fiy z#JJ3Z<}8fy;Soyrr32#K?^5Oo%Ru+t{Nj)SM~GJ`zU(o;)y{u>d9-_aGped4Wk<`| z!M{$*z~2uY+A{`yE)MyTuEcaYIb*>7j63s_2lwqzRrf#n{^bzC{e7P+u^ku`1jGOA9XEL!aL{U^DBB?7Eej9A|`ShcL`V7q6A zpVoL^IC;eXII~6B`v||Ev(NFE66J1rgD0lYZro} zLyTW1W69npu2lowF6c?MC^LuWY+7r-WYb!3&HVX9gTk0v7*n-YX;$d_rB`lR`wn%D zwm6@T89#FE=lr+9Z%%B=qoMH|`K4RpI}aldL|+&Uec#B>OiQQUG0e*u)SD%=V(`pf z$~E$%-OeMForC}LUdlD{Gt)kxKTW{-Hb3@g$BRGr^f4a-Kp;QQ3l>Db+;p({;AXDUW_nnE0+B5d$h&1PMOFTE`@T#Ezk z9~R~nn|>e=uEjr^!?(=RaQxm>kM%D2Y@zPAsmEE7^fctwVBbdzSO+mrgvztOZxTH{ z+4nHdz)lOgTR80x0FDUYu>lwUg-eOojE~@#hVFJ8nI}H}qPr~zr(NQcMjgx}+WdD+ z=D+34e^y0eDQfYv{j8~EK1>>}T(R?;!hP+@R=15kfVsEZ*6z2cM+z9PPp@=3axQW@ z_N#W6=y%&xn@jYPV%42Gb+n{MyF>@u#vCYf`5)EQsnT|d8l(9YxEo zQ;SraHh0~^+$C$fHuAS5DD~WT<6|9jqm6Y|+9~GcVNQpCnAP!MY_glP`#bw=X`Z#Dsh}A?6)L#`ll;nUa{cfbJpmRPhHZ7&(tSU@6J^A?q`0xd(e{&LZ?S6uk5=15BUx=Z@R_i z61x3dtxLTpU)dWV?>&R+8jxMxGpw=hch!MzWyz&oGqx9KIFowwC?oXxj_OIpF;=U8 z(I8KQ6JOYjC6{&Gcmcjo+|wy}%=$-L>QY_R$QyWJ(I9t&6B_?ajdlN3jdN#Ee{r>( z0f_0`2+w~S8|{|=2ax5`Hxt(2ez|)39XH<0kX(80d7nCAG5@TSHz3YX|7h#yE)F$T|GbQ-_8* zy^fevcX3RzTjC|=6PrMBDho56>cT?%vgQJ(W#K%hbzw$$UUOE=@=e96x>w-X%{h`h z#iq?skzyyZM7pJ(PC5I*`3$L#wfb(Gn(ChVXi3+IN0lz*%r7@0^WT78_5;(-tMCPm zO?7|7KAS!tB_dae=gL0papE?WJWgC8e_-~rz$!Gl2=v)K#ggvrYYIb;CgD=jF=Wu9*MMhi=Whu`ZEC z&CuEth05M-(9gm_Pc+0qKO?Qt?$zkydn!kEMQ<&jj9xD~xa)JutWuv$eR7^&ztCqK z^mDj!RM$Z0XPJ?wMAhpTT7JI9q~+%u;-DYyT6aIE#<~wvzYY3HN9Pmz>4;5p%YO@U z&+K0>yuE#UzNc@`H^f3CFVVMLV3x8%L(4dOUj+?GK0Dvbm+&2X$VupE7j$IeQu6OS z7MOhiI?4*7qjfLh8x%Xl{a4Enjh0HX`_fX;(TAS0*N7g7F8m#6sf7E%MBnM9r6K*$ z(vZ_=X+Q8}kI?DjE97<$-Fy(xVz%pipvToa$b2dK&a=p~3CLbe7Dg#YYAzwR0lKC5 z`!?k$vu_II@B20T4JCQX5j%Ka42??cI6a16qVHF!O1)xDcF(~ddAUXPyu`cAF;lEb zy9It?o^)Chl-a+9ZcEaYBP)oPZX1^Gknzhy*6K1hvPb6HM-)1u#uhkAped2#W}YeP ziqxpCS^5C4RU!9Qqw-cfXRfx*>jGocoaKbj-0k9qEe2)kgUeRn_W= zR92=kPdj$R(5_;2wTlch@?x{ZhhQ2c%yH4EaiRs%3hH z8y#zA*z{~S{z!|~)2Hwl)!j^=2E@d;U%0{PxcLsJW1VG)>r2W8loZ#$cs_13;;I^yxaS%Q;?_3IVP30= zd$d9FHPhGa6kWA=Dk>L-ZjTh<~_luFTScFs`AdRXy74sbXRocg02w`eCI14=o*=+dc~$5 zOf&PKe|$s}ZSYW;1z&`v_ji>o8P}B)l5YpHyi<$sZu3Qu|1;$LA62D$6?!(Z*|QG% zYeYX-4K3b{Z6?NbSJ$U}e~Eir4o_aj92D#Ne2vU!F|NZrWxfpH+aT+|&p97=5Bg+0 zcHDSi_#FRE1wA;v;9*C)C05IyN4X=Ei?euAU*U{{=%a1O3y~em@n?vFE*5~F7a5FwcR~Ct!RB7@L_xB)>vm1_Gytx%uw$ySpwU&tc%qxOSO?7~NVs>B>M?8|{s; zRHfz(AXWhIv{_?(M~H8q$-I+QRnnEk`T(4Fws1Z#E9_zDJ2EL{~;8bdDNR+oLNtQ+_&Q>X?3+TiTWHN{@bAj2=1#eY6O@^g8s@YtfI1<+W2k zw}O6L*Q*~B8(PzktzNm48U46U(~ptmSIxK7Pj~g`$8`lQq94mW+{wNR_@?_q^~%L$ zpXkO(zSq3}d);_Rf4XsGU)^}zC|x&h{od+zsdUfc^ARW3w&hm;*TPQm809}U`9q4TRboKNTJ^Es2h4j0QA3Yj;N}C(ee-4Ts&7GX49$f-Wiyqx3dUREx-`!oeVYH8PR;W)y}DZ2J2hCZW?xX#tEsm~ucrPUz51h)iV+tp70A>+ zdUatwdi4PGYVHCF)~nNk^y;jSiCqosqE{D@|1`aNfUZ{;KwFW}X%uuC4UNS>WBuu$ ztD|~#>sV+E{j(wl8jFR-WPTLA8r*6+xvWEjQYwFuVYd!il`Rsg0->x`K-v-Chz7=|t`7e}~YV=-=}$J6-=i@ZOpA?}3R*{SSil z@15ARP5s+H($K%z`|i=dq2*xxo4b8_^>6mS2>jHme*?d!f3rvSA@r^3--+no+~sWN zE@yLWO&uHCf3F_SUCoi))f~mW&e7cKZ0d7nUQHjrE(g5^ef+vnnm#@a-E2kps)m6P zc6VLUs)qOoO&`x~gHPtbFLQaCI(HwvoVh8JxoHP^c9O@`jm^Bh`uXa9_45~l^mDJF zpO1nkUZTENsE_q+ZamMJrSmE@Jsn1O8Bn|c0#r>UFw(ck&@A>W?kxt8ad_4rlirN^&2Pd)xF zi&BX$U*Q^{RHDmQ%#Tzm(dR45W0guxp9h{1z%!la44xu?#GWQ{OV(wkUcXY;>noz; zRyB-Jsf#;ZqAC|u3=dZ-N7$80^!p0#Ppa(E?+uz1{a#|Zq7PJ}-&dmFSD@cl^yv3S zzASX;e)RiFO~2=!5Yg{NZ+?ROF|LIb_gG@xG1T`GdmAr5WSbR#pk!j)7sR2q3^erh z*dBd79sPMb`txD*{6!Y*RR>Bc*ek1yV?SAR=ZqaC6UV&AT|bl+9Y0-(?a{qGnyw$` z{=1>;9|+R*WnCJg>sM;JKJYd(--?_o1?D(lzPtRMiYjbn#9XgD49rJ>S#2wss2m1n zC0=XK)ZZ1>is@mj4}rNIoxcs8-=aji3)@O63Mmgybyfj)VN1!xf;}Y@ODHe;{xbCc zgFFkAnpB0D+nkT~6aar5W&a|2Kl@Zsz%?70yBfW+kKPZDFel|=56>OL^E~wb%Ijqw zz6SmO8uWk4JxMwCV{;dsrM$5YsAL^bv5K;*fae`q2ZXZ@;J>T`)?-IUukrBhOzVJ3 z)&Z4{Ygh+R$G2Gr6mj>?nbraMd^6Vpxp!LXrb3&m-UP-ANo_z8}oi^F;8y<4$z% zdCuGn)iykjb*`K#v{{r1er%O??mz8N;wC7WIvnj0^!xW=9yvoV@e<5*?Tmj}jwg$B zflpDCLFV}``l#(Y{M-9FdU&6{z8`<~zP`=(|F`Q}%kli5M^E<@IwP5?ew4Z`M`JUY?y_4nJha zkv8hJQSVe@=cBJr9L4iep4+gYwW!mUw4rB7T?%6&Pw}@4K09LGfmUnA5P`PtgeIND z{}7q$ui=g??$lZFP3gYGixh|4Yt?2YwgR*lfcDy~5|0mmE%xfgXT&`3K|9)b!wY-N z`?BSn$cZ28XRZ8VzrnAIa^0h8PkfKQ__?LNBm0fJPTZ-oCbzIQ4?X8XOp`rMZ!PgH zWWSgG@0EC4JJ~-S;cz-ejnVDYpGB}&!Tz)8CZA`oyH#{su_y1hW4~iOL^pR;uV&7Q zb`_6Vm0BFG#5>S)m!apBAw$<8=ZR}Od$V2HEIPm3ck>l|^yf%r&)|(I9swtVE|9Q^6>l*G;&*8UPpW*q-p*zYK%J~cYg zy#brAm`7P4YB_TnwTlYtykMvw69 z09OT7$)3z`;&(IVSt1il<&K6#-*Mix@Ay>9K4Ck16@N0*IL9DqdwKs=41S5!c`llD zLZ@&1T#s4Phh`tP%}V4RNBAZ8yV7k2b?5V&20Y?d7fiRyX;a4JYMy6{`7P!8qg(Fh zm_35|Z#eVcD0EN!B+#c~T;GX)nfpqh0g1&W^m_pMt>=#L{^(cEM>Y*eai^+EZd$mK z+lP+1%TVaJ(V$}oV{6i})Y&w^pkv^+1NQ=+E}lY%q4d0;zU(mQd9Khi^q)%pH1eBt zy&ak~>H5@{0gbLj_c$wE1GgQxHQF}dT~EC3v(k1Lw9R@cm$5n%ZGV0Do7!E&p|pLH zyKCic+Wu(!TIeE}w)1!orR@vNG=sKNdA})6sekS~Xj|bNg!Si~yG9s6uR4~{^+||&PAS&T&9isJ5HzXxBg3~?^QfcpSQVtntNb|+nn7coO9}A9^&3^ z?;+-e&UyO0aFv`D?P*{45jORJP+of3Xlv1TZ0p`WeLZ_y^+sFYm$uF@A7cO2?m}+? z=Nrk_NKCCh_>Z;CX#babw=y(y#;$PuCGOuoS-rY_q5RLP+&)>k`oKbwJxb2{SefHj zep9wDlm8?5Kj(r0Gt{uig_#$`&dA8gj8)>4-$o|(FQX3i>6b2#gXY#(WNys>#_jyF z?>K!7e_-@AP5O$SdHiM-yLYdyIgatWNsAYz--T-Xv(uZ2&+~puQs;VjcLaJyB>NFw z<~WDw8_0tN=oojQW6a=rJaz}2jAGt{fvtxSc*~zGLWFo%oil{RKT}7GX3S#H(XfjR2M2pUK}VB$ z^0a=kr+Z;YKi}qz^>^)O4SftlXYvz==k$JxUyX%1*@~_dhOQLOxN8zjOFfzuh?_Cg6GkJN_U<$rW4tv=>oQ}!S26eTeBmt zi?Q|Lx9Q^CaHP7jqb6Q=VsnPZ_iAocYMih+{1i<9qyQV9lqb zeZqb2rRW*9uoO2j+xpBs>DH9a0{j!CU71&kX+zp{k6GPNd-?MX>FnKzpP{7v?DC&A z)L&BDkURGIhUX`6FCS&Ik^jK{NG7*~_6%H7wfw z+D6WglO|)+0sT1U=yWJPZIV~?2%RRc1FzSD-)q40)!@63eIo9*vg-Rp$o@ULUK6dg zxs5h8II7}$;P_87twmsyy`dQ2bEHwn|9T8%>@Kr3YU6li&^T@|$1!@a`)~Lp*fX7u zmD=8VBzoe?RPf38xzRt6j%W*qNQ9H#!zGlsOu7;aq| zfnSg@hDBrR`;6f&V}I6g>o6I^`iA=P`WP1WGltiLr_;s|-czHa-PdmXzcYq2%<&2u z!%=2h&=}^BCb9E6vaQ@}8wPEJLnEih(UTZVTLvqeH9q7iJSlfuitlYMe3+BKI)4J| z9b}sp3-(_M_uM6STDXsM_`o#x6mVGv-$ccvxEFH=S04A)h>sHYS$ZCaUMu)sOnSOC z(q&=nL@w>Oa8KO8AYQCW@GK_pI!mN$<#NW~YIoVku1J;jLQ|4{-`fuEO<9HvSRRc` zOh7)wq`6nVunhkK_|Pa5O_^oLd+Z|kTH9R(p4m&vp|uiV%JAH>WI6Ye%6~8LmE<}X zsqplnK*P-Ow9S1tGxNAJPu4b)CbTh!e38oYGwpmI&Kf96Svzy88ddxmchbDAX2iSH z*eGeQ5dRRlr*G<*pQYYf{j=0<1y?Wnf%Uo6%@%j+{pvH?J9G5xb);8Q=Lz`iOYq5_ zccO`pcG7!fQ|Tbjb)O~Zl zSK{YOy8IW}x}P=R_F(v126<9~;I{#P;+$Uir5?G(Zpo4ah>)v9Am+ zjQ5CNgspP?*P=&DpQX$;)}G=6CG@v}aVpOu&S>QWUkg30$CjYY$H>>N7rt2|cstCT z`#$wrSucp(>|IL|s|Y^*;fDTsRF|!NV@961^BQF9)vPfK?=s^@D%=;RaFFFNNn@(W%-ua_2mB`YCr`e#ZPOIG>xU%zi6e7&(DRQJFxZT()RG9 z+{4J6|Kf$ppk?r=i}_*||JNZaRx#%bKenjD$Y+FUaTsY&(Dwa zHF#Dw+#V>}x5QdC{-$-e?7L-Msit=cJ%;l0T}J|IK6?#*5q?JJ#3v+olCe${`j$RP z+hSvpvn|rL7k)T_o&Uj8Mf-*`f6iBxE4uK#JqGVdUK`(qXLDI+ehJ-cJo{B(ww#kl zB0u`nOjEuz!tV#*2aSi3D@o*$GNMz+Q+T{viCA~qI@jdS0DFl& zJk5Cyc|U+HCkHqZ!;^hU;VELL()e3ov=MJ}$dUAkvepmgb8G{iE&K$YJoKj)gXcvy z3(rTYN$ww@-`@(239e;7#N_=1;1nEpXuOYaA!FHx_rr#`MbG-t`m^zV5&Uu;d~+@Q za}9iSHM~!Zm_l8z>W}YTbNc7|ACun8-@5P34@nEa?)g7*q;sZ z7;6xTwZ^zewORC$J%ws$OoQza9k%7HZKPa(_>%h%6=3JSiIft2 zB8#B$_1KH^xG$Ec=ASKbt0j-vBW>tXc5Btl;a}(Po2uH}3phU(UAEx$b*j~6IaD;0fHj1J<FKt*TSxIuU z_5W`Be@W>7x)q`Kl*g81hUhC{eSy&YtxL}TGptRda6?@ojY)`sNS_XeBB)wRbL+L3F=GuaD7;R zh4|elcYAn$*)F@k24F9|Zqb0cr5Ag5%kQ3i5SNXo;jg{Bbtg`17(TvC#wT6z>8-5! zex1b+=7xTkv$!v=`uA?4SIcrZaEh0QEJ2zQpGP zoA9^QhgEJr7#1!P~T={O+6=;47Y~F%}%Xgl}%@D|N4!(d(c4d;fcqeO1O91MLZJo*8B?I9g^@ zZs(nRoL0jF>@X*MLU&qr7&+FR6ySgHit?-+(GIIFc8H^_UweG5WX3GkC^vbdSt)o= zk3nX38M#{DHt0y{Nd6D!Kfd$epv9%!-$nnE`z_|-qK_=T)o(jzp>3iA`(v6GMuHck z{Cm=Y;Wqc)86M-zVc9^ou?LE&c>(x+hyB#uqhHQ98h-(8ADDmI$#H6}Q~d~Vq3jF^ zO@AnMZN84a!5fDQxaU+*Z|99z%yaEq__I5Cc7fa>=i$xT+^dP5k8L9 z*qTCYbt7kZ@NVjR9`HYwj34*`S8ZJfxtNmC>0a2suI@GF`r5v$g59Id;DIqo0fW3L zscIDH{FdKuX_7_P}jZQ7_|JNp~`=1@bY&IRX%O-^0y3Ce)Qnwrwmmd z-e|D-P8_0qJLluT7>~6+Nnz_VHmtnIS)b>hs2i$$)DYzlj2ZiZwv7R01vB83!@?o$ z?-vG=b0e&L_b)K6^y}b@p&M14&rA0Y9)p>)j;;3EU|VYS!ee~Sd>P#9zOs%g9KMQE zh~dc@Z61T44EUg#bAOEgwcy!xk=VIj+6Y`lR;0&*BhAA5Ox~qqFZ8@|jg_yska1IX z&$`i+UHO8aIh{&U4njHQd;Bf&0qbL);}j zX)k!p4{p-$9^yuP(w!7IFlM~94->-n_(wnLKR>0RJxnf*FCP{5k4wLhg6}@_JH}_)mp>lt!`B{6JvhaJwSCm*4&M`l!CHC< z*3J|2`@aKg?yz}(99TQ|5B)GISaa6vzYSX@R|TJ8jg~Nvp=eL|-Cpr%;)TS6>rCnQ zA30Ow++za`W5!u$YCQarYuaY$3Ne<###`v%&3%7g_nIrIRs4s})NXKMJ!fi6SiN6` z)f2on02iY5;%W3P9>0EgK6;wLaiH`%L+NxxoAJQwGSRW56zPpX707y8-`8Nh_Ih|L(gLL zY?%ElF7zx>&xYI2#)Y0;t!E?bXQ`oQ*XfzZe&!23o2+ME``NV6vzzrS(teg3dUmUx zMcL2tL(gv4vuOL-?9j7$dKP0pTM&Bo89f_mKf5dR>`QtUYd>2OdiGW9t`Vc`XJ!1Z zt+v*|ICjS+Bgwqf?x|k*Bj7+hPzw4=(JRSe#R=rX;y-)3$2SVvQ@Va(d3vKwd(bOd zv`6wmNVYJ*$=9%dZ3&_Md*hBv-=$p(CQ3g@i?-26s`A(v*9Dbhu7LVq13yT|-u@*1 z)bO`?z|9i!qL(5cf!}*p+3l_Jc^J=u%jssd^z*b)Jj3WJoVuQyAd5B(LqGlRz@1@SQakN#mvwjS81*E7|J#M$CobLpK^>T* z|7v>-KfA}OXPitXXFc*qha35QqU~2PX?wq41-VVerb!mW51^WUOmIu;7ehWN&NIe! z70)c$!qEXBV=QE>8cPD-lCj@I4?UQi9nRyG(#HT9Vv}*x&A~6xMz{>|0_6m2=aC`C zvOX7FQ-gmTiJfZ@8Df4|T?fuyLx%Vxa5Gr>f+5NufCq0Mga^+GEAPO~f#)BuJ3j~< zWQLU;3JyHsa4^vbjsOmh@vXI7VD0Ot&~4t1ZgUpvITPI`IzVjlqCFpVozH8XuM$7@ zc-kqwZ?xAEB|3@d^oJ^M_uD* z8vEC{n>hIc<^BK88fOWIUOQloORotw4H%z|Gas)T1027$ItzUHou3beFMk+T&sk$j z7Isw)T7J_I<%hy&Ys1PrYkc7fvgFD^$`6JAR)m%PsCzOyY)>BhkUjChFNxkUa%FO0{2RhP^;rG62Fu!;F;SZ*MnBV(M*CEF? zh~M0v^bsl9>E870NO+Ff4@NA4=R4@RdTKE5x8BPAvci~x5rFy&2TL$cwpp&f(POj z`Hk2K#ti?XKJKcz?pnHX>9ORM#;TH)CBIExY26#AuJ~x~(PR{(!)rudD!i$g?xp0poYy0qvDjjy!CrQF{V#u&Ub&wjH7;KVA{ju=ai-AMA1gxtwv=B zcCuQ=B^&sMw()1)nrU3qJQ=@0qnz?YkRGDJK~J!LUnDSnm(sCKx}sc4tx_jH|6py#K!j z<8H<291gu30p0UJ|Gdya;ym3Sg-@CbUoaPTRoiyv58Y|mtF!Y`eBYfB>2!DF>-sHp zG}51rVqZ$hA$frNCw5%6_@)=f+i|C4iz-R$yOVM-b;H$`&Q*IMJmL2mSo41e(|zlDIW^U`V7`MnI(ammeoE=5?QDNP=-Upa zl1J0&i=6KGW4eI3&_qp9|fLI z^=8N(rLyubIBAz%<%uwEYOlbL{ULKfBsLS}Xf2#pJH9=N`QJ0h^H?KyHSNeR$Q$E- zRPict+Bs8HlMT*eOl4&`zN!Kc6=;cn&ddiFcAJ}&xwp*=}=n*>7U}6L| zk9d5zu#?sUukAm{Z)~{Xw#J4v+zIOGJ>y%F6l}QR)<(${9@7*1M~XS2N{rwgAZ|Jhwxi?3zgD5Fb0mx5`h?{9?q zuEo}WjPsirH-5VE!AnnAHZ3wk>oNVo(j$t$XaGBgKRWpIT|?!>vu#gR=vg$zzq>f| z$S=ut)IeUIq?p83(-<3Y8A*W?;6ePzh-YRr)wsqIFDePTnn3JLVtVpiu(yQgOReXM z$(h)ME%^z_v$CPZ5MQYF`oUxTReWOb7=OC2oC^NQ!&6`v~>JcyoI$3JIwlf^T@m9L!T%6Rea65x~k!xuGL!e z2(#;T*7rDc!tKZ38#@;D$=}(3U&4V+ozHKwe!h#}Ia1~}c6X4s0>8gb54c9>>w@hg zVdab089Vg^yaN1|^z-5qdWYM6>0HSVwYJ{2kUe16Rw0>@Q0;?GE8(J9?Q;N z{aIVzq`Oql(uZ^-_wjwDdvd)qqYk|uYwS5b#pn^Apz(T)?nl!NParSC--S+YaoO-i zt&!+)^GwsqsTw7`6tM5|2<;z!;`a)gV^)J-%ETCt~2a&+~$oBBU zLfs*Sry!oyJ3lcScUQO$-NHOP-XnF;|DF@sM$h>h41D#7sYt)Fy~+Qg7vG-k`2C)v z-xhKq$xlZ6rMNpCvHm?B5k?lgO_vv+tR&*L>b~ajDSq1X_e4;C7=8chWbYIDpU(fN zVM$GQ(w6SAF2koXYHGgEn@&tO?4*KE@P~z;iimRu63$Y&z2Fknoy{kMxL`#w34u;@ z$;6Zl%rVIoXZSBgtu?y+4<%ppaA$}7#*3%ZhsK&`dOFjIkrhRZfoY+B>%l=C=mjU! zj@o?YH;R8oJQ?~w%DGp3hk)Xxx{YjNZ|NRT@D%ZeJBc%(xz|9uBtLzWHmcxnOkjGj zc9zgihwkB6yh3)9r>^Qr|!m+(~X{YGmRcQhB7`SH~4#8 zrr9dE%>-Ug#(t_%{Z1Gb-}G)Ke*D16R(Sf^*nlo_zqg_MfgEsX#R*{I0)C_I==qXX zJlV*0zcr6eY)HKa}Q(ntV&)K zk(kV#Z}}*X>w_D?%#FZ|#&QcjG0DVZTumE_i+w-y*Ld)wT0D=nxdl0+p8Fn!1KK=> zKdS?WYHxg~J+O0<;Sc7e2MXt91{BjgBJO{^SA*ZF^499EWWqbWyX41pdIJ8vnSNg; z@q3Gb(}D3IGiWD|wxi-}>MA%7PkqOknLH+RSEe-+{;K zoQN%ky_>KqySu48JEw|s?*mTd%e#5_oWNh+Jz4;kCuEsau z+12JXj7Mju?fV}>XZAy9Zh+3*V$+#6aKPV^&b;#zccVjRI;Q)3GE>c9Mn190r5U8gl}0QmwN-t6;+76zwU6f90L>XT2+g?#nsY}# z&H3qHpgH^(E)&fuW1mDzp2U_InZ(^9_*MM#JC}&oUCV#?KfUk3&r#2pa=shgMwaS} zMyw|v+Z^B}V{+n_Q@`{#HbHv=W>lc$A>tv&RFNMfkK7jIvM`nR;vZ%#-I%un`SR9^ zy;j_cL&!n9Z)XgeOE^uM$ul4Q6w(L&ItkF!p7qRGeM)W;Z!P*$L_1mo@zrzCAIz;G zES~PCT zu*Q>l&^Y)R`F!dgf^d_{+H@|Vsgm;|*f^PI!^Z^f5xfh3a$zR^#?Tfoc4>>&LHj&q zHoaTJ-7<^b&2$Y)@3NqGM?>^Z`ixrFnAU`OiCg|SD7{l24Cq}5W`#4|z^lfiab1{c z^n4*i_Y`Xa*=Fp2gy>!&bnkP_OJycN`%)GqZYdm$_Jy^5>W%)kMgNvT=S2S|hUi~5 z^skq(H=qN~p*@@aZN_JBY+!=cnYP5w9w$C~8f#Y?qJcUi9qcH)Iyt*e7m>QPTozPmIP?rqW4OG5yeuS8}p@Z#TQ?}cQddo{!8~RJivDJnlE=J zho0%)#f2`>LVF)i-C*|_PWMXacPahWkf)-0_?j8{!**}US+aYJP5>sE4=?Gbkdtrv#@c*Aartg$_M2vqh_JBVC^s8?6Q27pmzrgkg4QnJ87})pB(<|2As2 z@_j`aYYnt78QKRvkc=g{?{7-`Zs@0d#2i%IfI}Tm8I3qE9{L3^(?{=afZlN$=J*Wqj})06W|O-&Ptb@#eaw9Ev7BeG&er& zQTWwFN2B9KFA#}dU@&>>#gM#ZTE0Occ?-FzXc+R=2wUEQZmyc!RlG9#T4Uv$uH=

OApoKYiLhgzS|*;tQ?55y)Nf+!;aU5`BW^yyy+d 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

j7U)?fnitmeM&hRt6 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