diff --git a/.envrc b/.envrc index 8392d15..bc86160 100644 --- a/.envrc +++ b/.envrc @@ -1 +1,3 @@ -use flake \ No newline at end of file +use flake + +export DENO_FUTURE=1 diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index a93a2b8..4387c56 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -32,15 +32,8 @@ jobs: # uses: denoland/setup-deno@v1 uses: denoland/setup-deno@9db7f66e8e16b5699a514448ce994936c63f0d54 with: - deno-version: v1.x + deno-version: v1.44.4 - - name: Setup Just - uses: extractions/setup-just@v1 - - - name: Setup NodeJS - uses: actions/setup-node@v3 - with: - node-version: "18.x" - - - name: Build & Release - run: just cd + - name: Release to JSR + run: | + deno publish diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 51ca870..22775ea 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -32,14 +32,12 @@ jobs: uses: denoland/setup-deno@v1 with: deno-version: v1.x + - name: Lint + run: deno lint - - name: Setup Just - uses: extractions/setup-just@v1 + - name: Test + run: deno test - - name: Setup NodeJS - uses: actions/setup-node@v3 - with: - node-version: "18.x" - - - name: Check & Build - run: just ci + - name: Dry Run Release to JSR + run: | + deno publish --dry-run diff --git a/README.md b/README.md index 34e7171..e71ef18 100644 --- a/README.md +++ b/README.md @@ -1,299 +1 @@ -# Hello Deno! - -An opinionated deno project starter template. - -This template provides examples and a batteries included experience for starting -a new project in Deno land. - -> ```shell -> $ just all -> ``` - -## Features - -- Sane VSCode defaults for deno -- Benchmarking example -- Compiled executable example -- Testing example -- Vendoring capabilities -- NPM Compatibility -- Deno confiugration -- Import Map usage example -- Standard MIT Licence -- Executable entry point (main.ts) -- Library entry points (mod.ts) - -## Requirements - -- [Deno](https://deno.land/manual/getting_started/installation) -- [VSCode Deno Extension](https://marketplace.visualstudio.com/items?itemName=denoland.vscode-deno) -- [Just](https://github.com/casey/just) - -## Install guide - -### Deno VSCode Extension - -```sh -code --install-extension denoland.vscode-deno -``` - -Manual - -> https://deno.land/manual/vscode_deno - -### Deno - -Refer to -[deno manual installation](https://deno.land/manual@v1.28.2/getting_started/installation) - -### Just - -Refer to [just packages installation](https://github.com/casey/just#packages) - -Note: Windows users, please use `git-bash` to interact with `just` - -## Structure - -- `.vscode` [VSCode configurations](.vscode/) - - `extensions.json` [VSCode extensions](.vscode/extensions.json) - - `settings.json` [VSCode settings](.vscode/settings.json) -- `bin/` [`deno compile` output](bin/hello_deno) - - `build_npm_package.ts` - [transforming for `npm` with `dnt`](./build_npm_package.ts) - - `deno.json` [using `deno.json` config file](./deno.json) - - `import_map.json` [using `import_map.json`](./import_map.json) - - `lock.json` [lockfile](./lock.json) - - `vendor` [Vendored dependencies](vendor) -- `hello_bench.ts` [`deno bench` example](hello_bench.ts) -- `hello_test.ts` [`deno test` example](hello_test.ts) -- `justfile` [Justfile for running tasks](justfile) -- `LICENCE` [default MIT licence](LICENCE) -- `main.ts` [compilation entry-point `main.ts`](main.ts) -- `mod.ts` [library entry point `mod.ts`](mod.ts) - -## Justfile - -### Dependencies and Tasks - -> Tasks can be considered the equivalent of `npm` scripts. Deno counterpart -> exposes `deno task` command, and it's not ideal to write your tasks in -> `deno.json` config. Therefore the author's best current advice is just using a -> `makefile`. The sections are organized into Chores and Tasks. - -### Configuration - -#### `dev_flags` - -```make -dev_flags = --unstable -A -c ./deno.json -``` - -Default run flags: - -- Enabling Deno Unstable APIs -- allowing All Permissions. -- Setting Deno Conifg path - -#### `prod_flags` - -```make -prod_flags = --check --cached-only --no-remote --import-map=vendor/import_map.json --lock ./lock.json -``` - -Production flags: - -- always type-check (tsc) -- use only cached deps -- no remote dependencies allowed -- point to vendored import-map always -- validate dependencies against lock file - -> Locking settings, defining the lock file. - -#### `dep_flags` - -```make -dep_flags = --import-map ./import_map.json --lock ./lock.json -``` - -Dependency flags: - -- use import map to resolve dependencies -- use/write lock file to `./lock.json` - -#### `test_files` - -> Path to test files (e.g. `./*_test.ts`) - -#### `source_files` - -> Path to source files, default is any file in the root, (e.g. `./*.ts`) - -#### `all_files` - -```make -all_files = "./*.ts ./node/*.ts" -``` - -> Source + Test files. - -#### `udd` - -```make -udd = deno run -A https://deno.land/x/udd@0.7.3/main.ts -``` - -> Alias for UDD library. Used for automatically updating dependencies. - -### Most important commands - -- `just chores`: Update dependencies, write lock file, reload cache, vendor - dependencies and load them into cache. -- `just build`: Build `bin`, `lib` and `npm` package. -- `just`: chores && build - -### Dependencies - -Modules are typically registered in the import-map. - -#### Check for updates - -```make -update: - $(udd) main.ts $(dep_flags) --test="make test" - make deps -``` - -> Look over import_map and dependency tree stemming from `main.ts` entry-point -> and update them to latest versions. - -#### Run dependency related task chain - -```make -deps: lock reload vendor cache -``` - -> Reload dependency tree without updating it. - -#### Lock when you add new dependencies - -```make -lock: - deno cache $(dep_flags) --lock-write $(source_files) -``` - -> Produce a lock file of the dependency tree. - -#### Reload cache - -```make -reload: - deno cache -r $(dep_flags) $(source_files) -``` - -> Reload local cache. - -#### Vendor the dependencies - -Import map overridden as config sets the vendored import-map. Obviously the -vendoring can't depend on the import map it outputs. - -```make -vendor: - deno vendor $(dep_flags) --force $(source_files) -``` - -> Vendor dependencies for production builds. - -# Cache the locked dependencies - -```make -cache: - deno cache $(lock_flags) $(source_files) -``` - -> Populate local cache from vendored dependencies for all source files. - -### Tasks - -### Run the benchmark(s) - -### Benchmarks end in `_bench.ts` - -```make -bench: clean - deno bench $(run_flags) -``` - -> Run benchmarks. - -### Build the bin - -```make -build-bin: cache - deno compile -o bin/hello_deno --import-map vendor/import_map.json $(run_flags) ./main.ts -``` - -> Compile into a single executable. - -### Build for NPM - -```make -build-npm: - deno run -A ./build_npm_package.ts $$VERSION -``` - -> Build a package to be published on npm. - -```make -clean: - rm -rf bin npm -``` - -> Clean previously built artifacts. - -### Publish the npm module from CI - -```make -publish: deno build-npm - cd npm && npm publish -``` - -> Release to NPM. - -### Profiling - -```make -debug: - deno run --v8-flags=--prof --inspect-brk $(run_flags) bench/run_suite.ts -``` - -> Debug - -### Linting - -```make -lint: - deno lint $(all_files) -``` - -> Run linter. - -### Formatting - -```make -format: - deno fmt $(all_files) $(docs) -``` - -> Run formatting. - -### Testing - -```make -test: clean - deno test $(run_flags) --coverage=cov_profile $(test_files) - deno test $(run_flags) --doc mod.ts -``` - -> Run tests. +# TODO: Rewrite md. diff --git a/deno.json b/deno.json index 7c15631..35faf07 100644 --- a/deno.json +++ b/deno.json @@ -1,13 +1,24 @@ { - "minDenoVersion": "1.41", - "name": "hello_deno", - "version": "1.2.0" - "include": ["**/*"], - "exclude": ["vendor/*"], + "minDenoVersion": "1.44", + "name": "@tdd/hello-deno", + "version": "2.0.0-rc-0", + "tasks": { + "install": "deno cache **/*.ts" + }, + "include": [ + "**/*" + ], + "exclude": [ + "vendor/*" + ], "vendor": true, "lock": true, "imports": { - "effect": "npm:effect", + "effect": "npm:effect@3.5.0", "std/": "https://deno.land/std@0.217.0/" + }, + "exports": { + ".": "./mod.ts", + "./hello": "./hello.ts" } } diff --git a/deno.lock b/deno.lock index 3b72a4a..74f3dff 100644 --- a/deno.lock +++ b/deno.lock @@ -2,11 +2,24 @@ "version": "3", "packages": { "specifiers": { - "npm:effect": "npm:effect@2.4.0" + "jsr:@std/assert": "jsr:@std/assert@0.226.0", + "jsr:@std/internal@^1.0.0": "jsr:@std/internal@1.0.0", + "npm:effect@3.5.0": "npm:effect@3.5.0" + }, + "jsr": { + "@std/assert@0.226.0": { + "integrity": "0dfb5f7c7723c18cec118e080fec76ce15b4c31154b15ad2bd74822603ef75b3", + "dependencies": [ + "jsr:@std/internal@^1.0.0" + ] + }, + "@std/internal@1.0.0": { + "integrity": "ac6a6dfebf838582c4b4f61a6907374e27e05bedb6ce276e0f1608fe84e7cd9a" + } }, "npm": { - "effect@2.4.0": { - "integrity": "sha512-HAtFVAbAGYDzfGbrSrX1gzMzXym15zk1+ps72X8W1wdZY0vxq+u23w8u9DhAZjiJPHT4W9ZYL7QWQqpP4t+dSg==", + "effect@3.5.0": { + "integrity": "sha512-q4JBEXYnFgbGsuxY03yUdkdMI7N2d2sMS93ulZle+a0M2Mt/rJv9xFDotkaxJILzYK2v6Uu5qJBOBJ0RD1OGCg==", "dependencies": {} } } @@ -102,6 +115,9 @@ "https://deno.land/std@0.205.0/assert/unimplemented.ts": "d56fbeecb1f108331a380f72e3e010a1f161baa6956fd0f7cf3e095ae1a4c75a", "https://deno.land/std@0.205.0/assert/unreachable.ts": "4600dc0baf7d9c15a7f7d234f00c23bca8f3eba8b140286aaca7aa998cf9a536", "https://deno.land/std@0.205.0/fmt/colors.ts": "c51c4642678eb690dcf5ffee5918b675bf01a33fba82acf303701ae1a4f8c8d9", + "https://deno.land/std@0.217.0/assert/assert_exists.ts": "24a7bf965e634f909242cd09fbaf38bde6b791128ece08e33ab08586a7cc55c9", + "https://deno.land/std@0.217.0/assert/assertion_error.ts": "9f689a101ee586c4ce92f52fa7ddd362e86434ffdf1f848e45987dc7689976b8", + "https://deno.land/std@0.217.0/flags/mod.ts": "9f13f3a49c54618277ac49195af934f1c7d235731bcf80fd33b8b234e6839ce9", "https://deno.land/x/code_block_writer@12.0.0/mod.ts": "2c3448060e47c9d08604c8f40dee34343f553f33edcdfebbf648442be33205e5", "https://deno.land/x/code_block_writer@12.0.0/utils/string_utils.ts": "60cb4ec8bd335bf241ef785ccec51e809d576ff8e8d29da43d2273b69ce2a6ff", "https://deno.land/x/deno_cache@0.5.2/auth_tokens.ts": "5d1d56474c54a9d152e44d43ea17c2e6a398dd1e9682c69811a313567c01ee1e", @@ -228,7 +244,7 @@ }, "workspace": { "dependencies": [ - "npm:effect" + "npm:effect@3.5.0" ] } } diff --git a/flake.lock b/flake.lock index 2ddc5f0..98c4a36 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "nixpkgs": { "locked": { - "lastModified": 1706683685, - "narHash": "sha256-FtPPshEpxH/ewBOsdKBNhlsL2MLEFv1hEnQ19f/bFsQ=", + "lastModified": 1721116560, + "narHash": "sha256-++TYlGMAJM1Q+0nMVaWBSEvEUjRs7ZGiNQOpqbQApCU=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "5ad9903c16126a7d949101687af0aa589b1d7d3d", + "rev": "9355fa86e6f27422963132c2c9aeedb0fb963d93", "type": "github" }, "original": { diff --git a/hello.ts b/hello.ts index c39977b..64b7fab 100644 --- a/hello.ts +++ b/hello.ts @@ -1,5 +1,5 @@ -import { toUpperCase } from "npm:effect/String"; +import { toUpperCase } from "effect/String"; -export function hello_deno() { +export function hello_deno(): string { return toUpperCase("Hello deno!"); } diff --git a/hello_test.ts b/hello_test.ts index a94757b..6696799 100644 --- a/hello_test.ts +++ b/hello_test.ts @@ -1,4 +1,4 @@ -import { assertStrictEquals } from "https://deno.land/std/assert/mod.ts"; +import { assertStrictEquals } from "jsr:@std/assert"; import { hello_deno } from "./mod.ts"; Deno.test("Be nice, say hello!", () => { diff --git a/justfile b/justfile deleted file mode 100644 index c499d9e..0000000 --- a/justfile +++ /dev/null @@ -1,127 +0,0 @@ -# -# Variables -# - -# Dev flags, unstable apis enabled and every permission allowed. -dev_flags := "--unstable --allow-all" - -# Should write strict --allow-xxx flags here for your prod build -prod_flags := "" - -# Set config path, use locked dependencies, override import map (config used vendored import-map) -dep_flags := "" - -# Examples docs and such -doc_files := "examples/*.ts **/*.md" - -# Source files -source_files := "./*.ts" - -# Test Files -test_files := "./*_test.ts" - -# All files -all_files := "./*.ts ./scripts/*.ts" - -# Default action shows help (remove to make `just` run all by default) -default: - just --list - -# -# Tasks -# - -# Run all tasks (chores && build) -all: chores && build - -# Run the benchmark(s) -bench: - deno bench {{dev_flags}} {{prod_flags}} - -# build binary, bundle, node module -build: _build-bin _build-lib _build-npm - -# Run CI/CD Related tasks only -ci: _check test bench build - -cd: build && _publish-npm - -# update deps (+ lock, cahce, vendor), lint and format all files, run tests and benchmarks -chores: update _lint _format test bench - -# Essentially npm install --lock -deps: _reload _cache - -# Profiling -debug: - deno run --v8-flags=--prof --inspect-brk {{dev_flags}} main.ts - -# Run a script locally in dev mode -run $ENTRYPOINT="main.ts" $ARGS="": - deno run --allow-all {{prod_flags}} {{ENTRYPOINT}} {{ARGS}} - -# run tests with coverage and doc-tests -test: _clean - deno test --no-check {{dev_flags}} {{prod_flags}} --doc --coverage=cov_profile {{test_files}} - -# Check for updates -update: && deps - just _udd "{{all_files}} deno.json" - -# -# Helper tasks -# - -# Build the bin -_build-bin: _cache - deno compile {{prod_flags}} -o bin/hello_deno ./main.ts - -# Build the lib -_build-lib: _cache - mkdir -p lib - deno bundle --no-check {{prod_flags}} mod.ts lib/index.js - -# Build the npm module VERSION needs to be set e.g. export VERSION=v1.0.0 -_build-npm: _cache - just run ./scripts/download_dnt_wasm.ts - just run ./scripts/build_npm_package.ts {{env_var_or_default('VERSION', 'v1.0.0')}} - -# locally cache (locked) dependencies -_cache: - deno cache {{prod_flags}} {{all_files}} - -# Run checks -_check: - deno check {{dep_flags}} {{all_files}} - deno fmt --check {{all_files}} {{doc_files}} - -# Clean before build -_clean: - rm -rf bin cov_profile lib npm - -# `deno fmt` docs and files -_format: - deno fmt {{all_files}} {{doc_files}} - -# `deno lint` all files -_lint: - deno lint {{all_files}} - -# Lock when you add new dependencies -_lock: - deno cache {{dep_flags}} --lock-write {{all_files}} - -# Publish the npm module from CI -_publish-npm: - cd npm && npm publish - -# Reload cache -_reload: - just _lock && deno cache -r {{dep_flags}} {{all_files}} - -# Update dependencies to latest versions. -_udd paths: - deno run {{dev_flags}} https://deno.land/x/udd/mod.ts {{paths}} - -_setup-pre-commit: - echo '#!/bin/sh\njust ci' > .git/hooks/pre-commit && chmod +x .git/hooks/pre-commit diff --git a/scripts/build_npm_package.ts b/scripts/build_npm_package.ts deleted file mode 100644 index a059a8e..0000000 --- a/scripts/build_npm_package.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { build, emptyDir } from "https://deno.land/x/dnt/mod.ts"; -import _deno_json from "../deno.json" assert { type: "json" }; - -const { name, version } = _deno_json.metadata; - -await emptyDir("./npm"); -await build({ - entryPoints: ["./mod.ts"], - outDir: "./npm", - importMap: "./deno.json", - typeCheck: false, - skipSourceOutput: true, - test: true, - shims: { - // see JS docs for overview and more options - deno: true, - }, - package: { - // package.json properties - name, - version, - description: "Hello NPM, yours truly, Deno.", - license: "MIT", - repository: { - type: "git", - url: "https://github.com/type-driven/hello_deno", - }, - }, - scriptModule: "cjs", -}); - -// post build steps -Deno.copyFileSync("LICENSE", "npm/LICENSE"); -Deno.copyFileSync("README.md", "npm/README.md"); -Deno.writeTextFileSync( - "npm/.npmrc", - "//registry.npmjs.org/:_authToken=${NPM_TOKEN}", -); diff --git a/scripts/check_min_version.ts b/scripts/check_min_version.ts deleted file mode 100644 index a38209f..0000000 --- a/scripts/check_min_version.ts +++ /dev/null @@ -1,16 +0,0 @@ -import _deno_json from "../deno.json" assert { type: "json" }; -import { compare } from "https://deno.land/x/semver/mod.ts"; - -const required = _deno_json.metadata.minDenoVersion; - -function atLeast(version: string): boolean { - const ord = compare(Deno.version.deno, version); - if (ord === 1 || ord === 0) return true; - return false; -} - -if (atLeast(required)) { - console.log(`Deno version is at least ${required}`); -} else { - console.error(`Deno version must be at least ${required}`); -} diff --git a/scripts/download_dnt_wasm.ts b/scripts/download_dnt_wasm.ts deleted file mode 100644 index 27b13f2..0000000 --- a/scripts/download_dnt_wasm.ts +++ /dev/null @@ -1,38 +0,0 @@ -// need to fetch the WASM that `deno vendor` ignores -const dntDir = Array - .from(Deno.readDirSync("./vendor/deno.land/x")) - .find((f) => f.name.startsWith("dnt@"))?.name; - -if (!dntDir) { - throw new Error("Could not find dnt in vendor directory."); -} - -const out = `./vendor/deno.land/x/${dntDir}/lib/pkg/dnt_wasm_bg.wasm`; -let shouldDownload = true; - -try { - await Deno.stat(out); - shouldDownload = false; -} catch (e) { - if (!(e instanceof Deno.errors.NotFound)) { - throw e; - } -} - -if (shouldDownload) { - const dntWasm = await fetch( - "https://github.com/denoland/dnt/blob/main/lib/pkg/dnt_wasm_bg.wasm?raw=true", - ); - if (dntWasm.body) { - const wasm = await Deno.open( - out, - { - write: true, - create: true, - }, - ); - await dntWasm.body.pipeTo(wasm.writable); - } -} - -console.log("Downloaded dnt WASM.", out); diff --git a/scripts/release.ts b/scripts/release.ts deleted file mode 100755 index aa70337..0000000 --- a/scripts/release.ts +++ /dev/null @@ -1,75 +0,0 @@ -#!/usr/bin/env -S deno run --allow-env --allow-read --allow-run -import { - env, - fallback, - flag, - pipeline, - schema, -} from "https://deno.land/x/konfig@v0.1.2/mod.ts"; -import { boolean } from "https://deno.land/x/fun/decoder.ts"; -import { pipe } from "https://deno.land/x/fun@v2.0.0-alpha.10/fn.ts"; -import { match } from "https://deno.land/x/fun@v.2.0.0-alpha.11/either.ts"; -import { identity } from "https://deno.land/x/fun@v.2.0.0-alpha.11/fn.ts"; -import { - DecodeError, - draw, -} from "https://deno.land/x/fun@v.2.0.0-alpha.11/decoder.ts"; - -const _throw = (cause: DecodeError) => { - const err = draw(cause); - throw new Error("Failed to load config" + "\n" + err, { cause }); -}; -const config = pipe( - schema({ - dry_run: pipeline( - env("DRY_RUN", boolean), - flag("dry-run"), - flag("D"), - fallback(false), - ), - verbose: pipeline( - env("VERBOSE", boolean), - flag("verbose"), - flag("V"), - fallback(false), - ), - }), - (config) => config.read(), - match(_throw, identity), -); -console.log("Config", config); - -const _run = async ([command, ...args]: string[]) => { - console.log(`Running: ${cmd.join(" ")}`); - if (!config.dry_run) { - const p = new Deno.Command(command, { - args, - stderr: "piped", - stdout: "piped", - }); - if (config.verbose) { - const { code, stdout, stderr } = await p.output(); - console.log("Status", code); - console.log("Stdout", new TextDecoder().decode(stdout)); - console.log("Stderr", new TextDecoder().decode(stderr)); - } - } -}; - -const { metadata } = JSON.parse(Deno.readTextFileSync("./deno.json")); -console.log("Metadata", metadata); - -// set tag from version in metadata -let cmd = [ - "git", - "tag", - "-a", - `v${metadata.version}`, - "-m", - `"release: v${metadata.version}"`, -]; -await _run(cmd); - -// push tag -cmd = ["git", "push", "origin", "--tags"]; -await _run(cmd); diff --git a/vendor/deno.land/std@0.140.0/_util/assert.ts b/vendor/deno.land/std@0.140.0/_util/assert.ts deleted file mode 100644 index daa45f2..0000000 --- a/vendor/deno.land/std@0.140.0/_util/assert.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -export class DenoStdInternalError extends Error { - constructor(message: string) { - super(message); - this.name = "DenoStdInternalError"; - } -} - -/** Make an assertion, if not `true`, then throw. */ -export function assert(expr: unknown, msg = ""): asserts expr { - if (!expr) { - throw new DenoStdInternalError(msg); - } -} diff --git a/vendor/deno.land/std@0.140.0/_util/os.ts b/vendor/deno.land/std@0.140.0/_util/os.ts deleted file mode 100644 index fb9bed8..0000000 --- a/vendor/deno.land/std@0.140.0/_util/os.ts +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -export type OSType = "windows" | "linux" | "darwin"; - -export const osType: OSType = (() => { - // deno-lint-ignore no-explicit-any - const { Deno } = globalThis as any; - if (typeof Deno?.build?.os === "string") { - return Deno.build.os; - } - - // deno-lint-ignore no-explicit-any - const { navigator } = globalThis as any; - if (navigator?.appVersion?.includes?.("Win")) { - return "windows"; - } - - return "linux"; -})(); - -export const isWindows = osType === "windows"; -export const isLinux = osType === "linux"; diff --git a/vendor/deno.land/std@0.140.0/bytes/bytes_list.ts b/vendor/deno.land/std@0.140.0/bytes/bytes_list.ts deleted file mode 100644 index 3f12038..0000000 --- a/vendor/deno.land/std@0.140.0/bytes/bytes_list.ts +++ /dev/null @@ -1,161 +0,0 @@ -// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -/** - * An abstraction of multiple Uint8Arrays - */ -export class BytesList { - private len = 0; - private chunks: { - value: Uint8Array; - start: number; // start offset from head of chunk - end: number; // end offset from head of chunk - offset: number; // offset of head in all bytes - }[] = []; - constructor() {} - - /** - * Total size of bytes - */ - size() { - return this.len; - } - /** - * Push bytes with given offset infos - */ - add(value: Uint8Array, start = 0, end = value.byteLength) { - if (value.byteLength === 0 || end - start === 0) { - return; - } - checkRange(start, end, value.byteLength); - this.chunks.push({ - value, - end, - start, - offset: this.len, - }); - this.len += end - start; - } - - /** - * Drop head `n` bytes. - */ - shift(n: number) { - if (n === 0) { - return; - } - if (this.len <= n) { - this.chunks = []; - this.len = 0; - return; - } - const idx = this.getChunkIndex(n); - this.chunks.splice(0, idx); - const [chunk] = this.chunks; - if (chunk) { - const diff = n - chunk.offset; - chunk.start += diff; - } - let offset = 0; - for (const chunk of this.chunks) { - chunk.offset = offset; - offset += chunk.end - chunk.start; - } - this.len = offset; - } - - /** - * Find chunk index in which `pos` locates by binary-search - * returns -1 if out of range - */ - getChunkIndex(pos: number): number { - let max = this.chunks.length; - let min = 0; - while (true) { - const i = min + Math.floor((max - min) / 2); - if (i < 0 || this.chunks.length <= i) { - return -1; - } - const { offset, start, end } = this.chunks[i]; - const len = end - start; - if (offset <= pos && pos < offset + len) { - return i; - } else if (offset + len <= pos) { - min = i + 1; - } else { - max = i - 1; - } - } - } - - /** - * Get indexed byte from chunks - */ - get(i: number): number { - if (i < 0 || this.len <= i) { - throw new Error("out of range"); - } - const idx = this.getChunkIndex(i); - const { value, offset, start } = this.chunks[idx]; - return value[start + i - offset]; - } - - /** - * Iterator of bytes from given position - */ - *iterator(start = 0): IterableIterator { - const startIdx = this.getChunkIndex(start); - if (startIdx < 0) return; - const first = this.chunks[startIdx]; - let firstOffset = start - first.offset; - for (let i = startIdx; i < this.chunks.length; i++) { - const chunk = this.chunks[i]; - for (let j = chunk.start + firstOffset; j < chunk.end; j++) { - yield chunk.value[j]; - } - firstOffset = 0; - } - } - - /** - * Returns subset of bytes copied - */ - slice(start: number, end: number = this.len): Uint8Array { - if (end === start) { - return new Uint8Array(); - } - checkRange(start, end, this.len); - const result = new Uint8Array(end - start); - const startIdx = this.getChunkIndex(start); - const endIdx = this.getChunkIndex(end - 1); - let written = 0; - for (let i = startIdx; i < endIdx; i++) { - const chunk = this.chunks[i]; - const len = chunk.end - chunk.start; - result.set(chunk.value.subarray(chunk.start, chunk.end), written); - written += len; - } - const last = this.chunks[endIdx]; - const rest = end - start - written; - result.set(last.value.subarray(last.start, last.start + rest), written); - return result; - } - /** - * Concatenate chunks into single Uint8Array copied. - */ - concat(): Uint8Array { - const result = new Uint8Array(this.len); - let sum = 0; - for (const { value, start, end } of this.chunks) { - result.set(value.subarray(start, end), sum); - sum += end - start; - } - return result; - } -} - -function checkRange(start: number, end: number, len: number) { - if (start < 0 || len < start || end < 0 || len < end || end < start) { - throw new Error("invalid range"); - } -} diff --git a/vendor/deno.land/std@0.140.0/bytes/equals.ts b/vendor/deno.land/std@0.140.0/bytes/equals.ts deleted file mode 100644 index 748f877..0000000 --- a/vendor/deno.land/std@0.140.0/bytes/equals.ts +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -/** Check whether binary arrays are equal to each other using 8-bit comparisons. - * @private - * @param a first array to check equality - * @param b second array to check equality - */ -export function equalsNaive(a: Uint8Array, b: Uint8Array): boolean { - if (a.length !== b.length) return false; - for (let i = 0; i < b.length; i++) { - if (a[i] !== b[i]) return false; - } - return true; -} - -/** Check whether binary arrays are equal to each other using 32-bit comparisons. - * @private - * @param a first array to check equality - * @param b second array to check equality - */ -export function equalsSimd(a: Uint8Array, b: Uint8Array): boolean { - if (a.length !== b.length) return false; - const len = a.length; - const compressable = Math.floor(len / 4); - const compressedA = new Uint32Array(a.buffer, 0, compressable); - const compressedB = new Uint32Array(b.buffer, 0, compressable); - for (let i = compressable * 4; i < len; i++) { - if (a[i] !== b[i]) return false; - } - for (let i = 0; i < compressedA.length; i++) { - if (compressedA[i] !== compressedB[i]) return false; - } - return true; -} - -/** Check whether binary arrays are equal to each other. - * @param a first array to check equality - * @param b second array to check equality - */ -export function equals(a: Uint8Array, b: Uint8Array): boolean { - if (a.length < 1000) return equalsNaive(a, b); - return equalsSimd(a, b); -} diff --git a/vendor/deno.land/std@0.140.0/bytes/mod.ts b/vendor/deno.land/std@0.140.0/bytes/mod.ts deleted file mode 100644 index a50657d..0000000 --- a/vendor/deno.land/std@0.140.0/bytes/mod.ts +++ /dev/null @@ -1,271 +0,0 @@ -// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -/** - * Provides helper functions to manipulate `Uint8Array` byte slices that are not - * included on the `Uint8Array` prototype. - * - * @module - */ - -/** Returns the index of the first occurrence of the needle array in the source - * array, or -1 if it is not present. - * - * A start index can be specified as the third argument that begins the search - * at that given index. The start index defaults to the start of the array. - * - * The complexity of this function is O(source.lenth * needle.length). - * - * ```ts - * import { indexOfNeedle } from "./mod.ts"; - * const source = new Uint8Array([0, 1, 2, 1, 2, 1, 2, 3]); - * const needle = new Uint8Array([1, 2]); - * console.log(indexOfNeedle(source, needle)); // 1 - * console.log(indexOfNeedle(source, needle, 2)); // 3 - * ``` - */ -export function indexOfNeedle( - source: Uint8Array, - needle: Uint8Array, - start = 0, -): number { - if (start >= source.length) { - return -1; - } - if (start < 0) { - start = Math.max(0, source.length + start); - } - const s = needle[0]; - for (let i = start; i < source.length; i++) { - if (source[i] !== s) continue; - const pin = i; - let matched = 1; - let j = i; - while (matched < needle.length) { - j++; - if (source[j] !== needle[j - pin]) { - break; - } - matched++; - } - if (matched === needle.length) { - return pin; - } - } - return -1; -} - -/** Returns the index of the last occurrence of the needle array in the source - * array, or -1 if it is not present. - * - * A start index can be specified as the third argument that begins the search - * at that given index. The start index defaults to the end of the array. - * - * The complexity of this function is O(source.lenth * needle.length). - * - * ```ts - * import { lastIndexOfNeedle } from "./mod.ts"; - * const source = new Uint8Array([0, 1, 2, 1, 2, 1, 2, 3]); - * const needle = new Uint8Array([1, 2]); - * console.log(lastIndexOfNeedle(source, needle)); // 5 - * console.log(lastIndexOfNeedle(source, needle, 4)); // 3 - * ``` - */ -export function lastIndexOfNeedle( - source: Uint8Array, - needle: Uint8Array, - start = source.length - 1, -): number { - if (start < 0) { - return -1; - } - if (start >= source.length) { - start = source.length - 1; - } - const e = needle[needle.length - 1]; - for (let i = start; i >= 0; i--) { - if (source[i] !== e) continue; - const pin = i; - let matched = 1; - let j = i; - while (matched < needle.length) { - j--; - if (source[j] !== needle[needle.length - 1 - (pin - j)]) { - break; - } - matched++; - } - if (matched === needle.length) { - return pin - needle.length + 1; - } - } - return -1; -} - -/** Returns true if the prefix array appears at the start of the source array, - * false otherwise. - * - * The complexity of this function is O(prefix.length). - * - * ```ts - * import { startsWith } from "./mod.ts"; - * const source = new Uint8Array([0, 1, 2, 1, 2, 1, 2, 3]); - * const prefix = new Uint8Array([0, 1, 2]); - * console.log(startsWith(source, prefix)); // true - * ``` - */ -export function startsWith(source: Uint8Array, prefix: Uint8Array): boolean { - for (let i = 0, max = prefix.length; i < max; i++) { - if (source[i] !== prefix[i]) return false; - } - return true; -} - -/** Returns true if the suffix array appears at the end of the source array, - * false otherwise. - * - * The complexity of this function is O(suffix.length). - * - * ```ts - * import { endsWith } from "./mod.ts"; - * const source = new Uint8Array([0, 1, 2, 1, 2, 1, 2, 3]); - * const suffix = new Uint8Array([1, 2, 3]); - * console.log(endsWith(source, suffix)); // true - * ``` - */ -export function endsWith(source: Uint8Array, suffix: Uint8Array): boolean { - for ( - let srci = source.length - 1, sfxi = suffix.length - 1; - sfxi >= 0; - srci--, sfxi-- - ) { - if (source[srci] !== suffix[sfxi]) return false; - } - return true; -} - -/** Returns a new Uint8Array composed of `count` repetitions of the `source` - * array. - * - * If `count` is negative, a `RangeError` is thrown. - * - * ```ts - * import { repeat } from "./mod.ts"; - * const source = new Uint8Array([0, 1, 2]); - * console.log(repeat(source, 3)); // [0, 1, 2, 0, 1, 2, 0, 1, 2] - * console.log(repeat(source, 0)); // [] - * console.log(repeat(source, -1)); // RangeError - * ``` - */ -export function repeat(source: Uint8Array, count: number): Uint8Array { - if (count === 0) { - return new Uint8Array(); - } - - if (count < 0) { - throw new RangeError("bytes: negative repeat count"); - } else if ((source.length * count) / count !== source.length) { - throw new Error("bytes: repeat count causes overflow"); - } - - const int = Math.floor(count); - - if (int !== count) { - throw new Error("bytes: repeat count must be an integer"); - } - - const nb = new Uint8Array(source.length * count); - - let bp = copy(source, nb); - - for (; bp < nb.length; bp *= 2) { - copy(nb.slice(0, bp), nb, bp); - } - - return nb; -} - -/** Concatenate the given arrays into a new Uint8Array. - * - * ```ts - * import { concat } from "./mod.ts"; - * const a = new Uint8Array([0, 1, 2]); - * const b = new Uint8Array([3, 4, 5]); - * console.log(concat(a, b)); // [0, 1, 2, 3, 4, 5] - */ -export function concat(...buf: Uint8Array[]): Uint8Array { - let length = 0; - for (const b of buf) { - length += b.length; - } - - const output = new Uint8Array(length); - let index = 0; - for (const b of buf) { - output.set(b, index); - index += b.length; - } - - return output; -} - -/** Returns true if the source array contains the needle array, false otherwise. - * - * A start index can be specified as the third argument that begins the search - * at that given index. The start index defaults to the beginning of the array. - * - * The complexity of this function is O(source.length * needle.length). - * - * ```ts - * import { includesNeedle } from "./mod.ts"; - * const source = new Uint8Array([0, 1, 2, 1, 2, 1, 2, 3]); - * const needle = new Uint8Array([1, 2]); - * console.log(includesNeedle(source, needle)); // true - * console.log(includesNeedle(source, needle, 6)); // false - * ``` - */ -export function includesNeedle( - source: Uint8Array, - needle: Uint8Array, - start = 0, -): boolean { - return indexOfNeedle(source, needle, start) !== -1; -} - -/** Copy bytes from the `src` array to the `dst` array. Returns the number of - * bytes copied. - * - * If the `src` array is larger than what the `dst` array can hold, only the - * amount of bytes that fit in the `dst` array are copied. - * - * An offset can be specified as the third argument that begins the copy at - * that given index in the `dst` array. The offset defaults to the beginning of - * the array. - * - * ```ts - * import { copy } from "./mod.ts"; - * const src = new Uint8Array([9, 8, 7]); - * const dst = new Uint8Array([0, 1, 2, 3, 4, 5]); - * console.log(copy(src, dst)); // 3 - * console.log(dst); // [9, 8, 7, 3, 4, 5] - * ``` - * - * ```ts - * import { copy } from "./mod.ts"; - * const src = new Uint8Array([1, 1, 1, 1]); - * const dst = new Uint8Array([0, 0, 0, 0]); - * console.log(copy(src, dst, 1)); // 3 - * console.log(dst); // [0, 1, 1, 1] - * ``` - */ -export function copy(src: Uint8Array, dst: Uint8Array, off = 0): number { - off = Math.max(0, Math.min(off, dst.byteLength)); - const dstBytesAvailable = dst.byteLength - off; - if (src.byteLength > dstBytesAvailable) { - src = src.subarray(0, dstBytesAvailable); - } - dst.set(src, off); - return src.byteLength; -} - -export { equals } from "./equals.ts"; diff --git a/vendor/deno.land/std@0.140.0/fmt/colors.ts b/vendor/deno.land/std@0.140.0/fmt/colors.ts deleted file mode 100644 index 5e9e4a5..0000000 --- a/vendor/deno.land/std@0.140.0/fmt/colors.ts +++ /dev/null @@ -1,536 +0,0 @@ -// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. -// A module to print ANSI terminal colors. Inspired by chalk, kleur, and colors -// on npm. -// This module is browser compatible. - -/** - * ```ts - * import { bgBlue, red, bold } from "https://deno.land/std@$STD_VERSION/fmt/colors.ts"; - * console.log(bgBlue(red(bold("Hello world!")))); - * ``` - * - * This module supports `NO_COLOR` environmental variable disabling any coloring - * if `NO_COLOR` is set. - * - * @module - */ -// This module is browser compatible. - -// deno-lint-ignore no-explicit-any -const { Deno } = globalThis as any; -const noColor = typeof Deno?.noColor === "boolean" - ? Deno.noColor as boolean - : true; - -interface Code { - open: string; - close: string; - regexp: RegExp; -} - -/** RGB 8-bits per channel. Each in range `0->255` or `0x00->0xff` */ -interface Rgb { - r: number; - g: number; - b: number; -} - -let enabled = !noColor; - -/** - * Set changing text color to enabled or disabled - * @param value - */ -export function setColorEnabled(value: boolean): void { - if (noColor) { - return; - } - - enabled = value; -} - -/** Get whether text color change is enabled or disabled. */ -export function getColorEnabled(): boolean { - return enabled; -} - -/** - * Builds color code - * @param open - * @param close - */ -function code(open: number[], close: number): Code { - return { - open: `\x1b[${open.join(";")}m`, - close: `\x1b[${close}m`, - regexp: new RegExp(`\\x1b\\[${close}m`, "g"), - }; -} - -/** - * Applies color and background based on color code and its associated text - * @param str text to apply color settings to - * @param code color code to apply - */ -function run(str: string, code: Code): string { - return enabled - ? `${code.open}${str.replace(code.regexp, code.open)}${code.close}` - : str; -} - -/** - * Reset the text modified - * @param str text to reset - */ -export function reset(str: string): string { - return run(str, code([0], 0)); -} - -/** - * Make the text bold. - * @param str text to make bold - */ -export function bold(str: string): string { - return run(str, code([1], 22)); -} - -/** - * The text emits only a small amount of light. - * @param str text to dim - */ -export function dim(str: string): string { - return run(str, code([2], 22)); -} - -/** - * Make the text italic. - * @param str text to make italic - */ -export function italic(str: string): string { - return run(str, code([3], 23)); -} - -/** - * Make the text underline. - * @param str text to underline - */ -export function underline(str: string): string { - return run(str, code([4], 24)); -} - -/** - * Invert background color and text color. - * @param str text to invert its color - */ -export function inverse(str: string): string { - return run(str, code([7], 27)); -} - -/** - * Make the text hidden. - * @param str text to hide - */ -export function hidden(str: string): string { - return run(str, code([8], 28)); -} - -/** - * Put horizontal line through the center of the text. - * @param str text to strike through - */ -export function strikethrough(str: string): string { - return run(str, code([9], 29)); -} - -/** - * Set text color to black. - * @param str text to make black - */ -export function black(str: string): string { - return run(str, code([30], 39)); -} - -/** - * Set text color to red. - * @param str text to make red - */ -export function red(str: string): string { - return run(str, code([31], 39)); -} - -/** - * Set text color to green. - * @param str text to make green - */ -export function green(str: string): string { - return run(str, code([32], 39)); -} - -/** - * Set text color to yellow. - * @param str text to make yellow - */ -export function yellow(str: string): string { - return run(str, code([33], 39)); -} - -/** - * Set text color to blue. - * @param str text to make blue - */ -export function blue(str: string): string { - return run(str, code([34], 39)); -} - -/** - * Set text color to magenta. - * @param str text to make magenta - */ -export function magenta(str: string): string { - return run(str, code([35], 39)); -} - -/** - * Set text color to cyan. - * @param str text to make cyan - */ -export function cyan(str: string): string { - return run(str, code([36], 39)); -} - -/** - * Set text color to white. - * @param str text to make white - */ -export function white(str: string): string { - return run(str, code([37], 39)); -} - -/** - * Set text color to gray. - * @param str text to make gray - */ -export function gray(str: string): string { - return brightBlack(str); -} - -/** - * Set text color to bright black. - * @param str text to make bright-black - */ -export function brightBlack(str: string): string { - return run(str, code([90], 39)); -} - -/** - * Set text color to bright red. - * @param str text to make bright-red - */ -export function brightRed(str: string): string { - return run(str, code([91], 39)); -} - -/** - * Set text color to bright green. - * @param str text to make bright-green - */ -export function brightGreen(str: string): string { - return run(str, code([92], 39)); -} - -/** - * Set text color to bright yellow. - * @param str text to make bright-yellow - */ -export function brightYellow(str: string): string { - return run(str, code([93], 39)); -} - -/** - * Set text color to bright blue. - * @param str text to make bright-blue - */ -export function brightBlue(str: string): string { - return run(str, code([94], 39)); -} - -/** - * Set text color to bright magenta. - * @param str text to make bright-magenta - */ -export function brightMagenta(str: string): string { - return run(str, code([95], 39)); -} - -/** - * Set text color to bright cyan. - * @param str text to make bright-cyan - */ -export function brightCyan(str: string): string { - return run(str, code([96], 39)); -} - -/** - * Set text color to bright white. - * @param str text to make bright-white - */ -export function brightWhite(str: string): string { - return run(str, code([97], 39)); -} - -/** - * Set background color to black. - * @param str text to make its background black - */ -export function bgBlack(str: string): string { - return run(str, code([40], 49)); -} - -/** - * Set background color to red. - * @param str text to make its background red - */ -export function bgRed(str: string): string { - return run(str, code([41], 49)); -} - -/** - * Set background color to green. - * @param str text to make its background green - */ -export function bgGreen(str: string): string { - return run(str, code([42], 49)); -} - -/** - * Set background color to yellow. - * @param str text to make its background yellow - */ -export function bgYellow(str: string): string { - return run(str, code([43], 49)); -} - -/** - * Set background color to blue. - * @param str text to make its background blue - */ -export function bgBlue(str: string): string { - return run(str, code([44], 49)); -} - -/** - * Set background color to magenta. - * @param str text to make its background magenta - */ -export function bgMagenta(str: string): string { - return run(str, code([45], 49)); -} - -/** - * Set background color to cyan. - * @param str text to make its background cyan - */ -export function bgCyan(str: string): string { - return run(str, code([46], 49)); -} - -/** - * Set background color to white. - * @param str text to make its background white - */ -export function bgWhite(str: string): string { - return run(str, code([47], 49)); -} - -/** - * Set background color to bright black. - * @param str text to make its background bright-black - */ -export function bgBrightBlack(str: string): string { - return run(str, code([100], 49)); -} - -/** - * Set background color to bright red. - * @param str text to make its background bright-red - */ -export function bgBrightRed(str: string): string { - return run(str, code([101], 49)); -} - -/** - * Set background color to bright green. - * @param str text to make its background bright-green - */ -export function bgBrightGreen(str: string): string { - return run(str, code([102], 49)); -} - -/** - * Set background color to bright yellow. - * @param str text to make its background bright-yellow - */ -export function bgBrightYellow(str: string): string { - return run(str, code([103], 49)); -} - -/** - * Set background color to bright blue. - * @param str text to make its background bright-blue - */ -export function bgBrightBlue(str: string): string { - return run(str, code([104], 49)); -} - -/** - * Set background color to bright magenta. - * @param str text to make its background bright-magenta - */ -export function bgBrightMagenta(str: string): string { - return run(str, code([105], 49)); -} - -/** - * Set background color to bright cyan. - * @param str text to make its background bright-cyan - */ -export function bgBrightCyan(str: string): string { - return run(str, code([106], 49)); -} - -/** - * Set background color to bright white. - * @param str text to make its background bright-white - */ -export function bgBrightWhite(str: string): string { - return run(str, code([107], 49)); -} - -/* Special Color Sequences */ - -/** - * Clam and truncate color codes - * @param n - * @param max number to truncate to - * @param min number to truncate from - */ -function clampAndTruncate(n: number, max = 255, min = 0): number { - return Math.trunc(Math.max(Math.min(n, max), min)); -} - -/** - * Set text color using paletted 8bit colors. - * https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit - * @param str text color to apply paletted 8bit colors to - * @param color code - */ -export function rgb8(str: string, color: number): string { - return run(str, code([38, 5, clampAndTruncate(color)], 39)); -} - -/** - * Set background color using paletted 8bit colors. - * https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit - * @param str text color to apply paletted 8bit background colors to - * @param color code - */ -export function bgRgb8(str: string, color: number): string { - return run(str, code([48, 5, clampAndTruncate(color)], 49)); -} - -/** - * Set text color using 24bit rgb. - * `color` can be a number in range `0x000000` to `0xffffff` or - * an `Rgb`. - * - * To produce the color magenta: - * - * ```ts - * import { rgb24 } from "./colors.ts"; - * rgb24("foo", 0xff00ff); - * rgb24("foo", {r: 255, g: 0, b: 255}); - * ``` - * @param str text color to apply 24bit rgb to - * @param color code - */ -export function rgb24(str: string, color: number | Rgb): string { - if (typeof color === "number") { - return run( - str, - code( - [38, 2, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff], - 39, - ), - ); - } - return run( - str, - code( - [ - 38, - 2, - clampAndTruncate(color.r), - clampAndTruncate(color.g), - clampAndTruncate(color.b), - ], - 39, - ), - ); -} - -/** - * Set background color using 24bit rgb. - * `color` can be a number in range `0x000000` to `0xffffff` or - * an `Rgb`. - * - * To produce the color magenta: - * - * ```ts - * import { bgRgb24 } from "./colors.ts"; - * bgRgb24("foo", 0xff00ff); - * bgRgb24("foo", {r: 255, g: 0, b: 255}); - * ``` - * @param str text color to apply 24bit rgb to - * @param color code - */ -export function bgRgb24(str: string, color: number | Rgb): string { - if (typeof color === "number") { - return run( - str, - code( - [48, 2, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff], - 49, - ), - ); - } - return run( - str, - code( - [ - 48, - 2, - clampAndTruncate(color.r), - clampAndTruncate(color.g), - clampAndTruncate(color.b), - ], - 49, - ), - ); -} - -// https://github.com/chalk/ansi-regex/blob/02fa893d619d3da85411acc8fd4e2eea0e95a9d9/index.js -const ANSI_PATTERN = new RegExp( - [ - "[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)", - "(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))", - ].join("|"), - "g", -); - -/** - * Remove ANSI escape codes from the string. - * @param string to remove ANSI escape codes from - */ -export function stripColor(string: string): string { - return string.replace(ANSI_PATTERN, ""); -} diff --git a/vendor/deno.land/std@0.140.0/fs/_util.ts b/vendor/deno.land/std@0.140.0/fs/_util.ts deleted file mode 100644 index 47c5e18..0000000 --- a/vendor/deno.land/std@0.140.0/fs/_util.ts +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. -import * as path from "../path/mod.ts"; - -/** - * Test whether or not `dest` is a sub-directory of `src` - * @param src src file path - * @param dest dest file path - * @param sep path separator - */ -export function isSubdir( - src: string, - dest: string, - sep: string = path.sep, -): boolean { - if (src === dest) { - return false; - } - const srcArray = src.split(sep); - const destArray = dest.split(sep); - return srcArray.every((current, i) => destArray[i] === current); -} - -export type PathType = "file" | "dir" | "symlink"; - -/** - * Get a human readable file type string. - * - * @param fileInfo A FileInfo describes a file and is returned by `stat`, - * `lstat` - */ -export function getFileInfoType(fileInfo: Deno.FileInfo): PathType | undefined { - return fileInfo.isFile - ? "file" - : fileInfo.isDirectory - ? "dir" - : fileInfo.isSymlink - ? "symlink" - : undefined; -} diff --git a/vendor/deno.land/std@0.140.0/fs/ensure_dir.ts b/vendor/deno.land/std@0.140.0/fs/ensure_dir.ts deleted file mode 100644 index a24dd47..0000000 --- a/vendor/deno.land/std@0.140.0/fs/ensure_dir.ts +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. -import { getFileInfoType } from "./_util.ts"; - -/** - * Ensures that the directory exists. - * If the directory structure does not exist, it is created. Like mkdir -p. - * Requires the `--allow-read` and `--allow-write` flag. - */ -export async function ensureDir(dir: string) { - try { - const fileInfo = await Deno.lstat(dir); - if (!fileInfo.isDirectory) { - throw new Error( - `Ensure path exists, expected 'dir', got '${ - getFileInfoType(fileInfo) - }'`, - ); - } - } catch (err) { - if (err instanceof Deno.errors.NotFound) { - // if dir not exists. then create it. - await Deno.mkdir(dir, { recursive: true }); - return; - } - throw err; - } -} - -/** - * Ensures that the directory exists. - * If the directory structure does not exist, it is created. Like mkdir -p. - * Requires the `--allow-read` and `--allow-write` flag. - */ -export function ensureDirSync(dir: string): void { - try { - const fileInfo = Deno.lstatSync(dir); - if (!fileInfo.isDirectory) { - throw new Error( - `Ensure path exists, expected 'dir', got '${ - getFileInfoType(fileInfo) - }'`, - ); - } - } catch (err) { - if (err instanceof Deno.errors.NotFound) { - // if dir not exists. then create it. - Deno.mkdirSync(dir, { recursive: true }); - return; - } - throw err; - } -} diff --git a/vendor/deno.land/std@0.140.0/io/buffer.ts b/vendor/deno.land/std@0.140.0/io/buffer.ts deleted file mode 100644 index 1797b87..0000000 --- a/vendor/deno.land/std@0.140.0/io/buffer.ts +++ /dev/null @@ -1,1017 +0,0 @@ -// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. -import { assert } from "../_util/assert.ts"; -import { BytesList } from "../bytes/bytes_list.ts"; -import { concat, copy } from "../bytes/mod.ts"; -import type { Reader, ReaderSync, Writer, WriterSync } from "./types.d.ts"; - -// MIN_READ is the minimum ArrayBuffer size passed to a read call by -// buffer.ReadFrom. As long as the Buffer has at least MIN_READ bytes beyond -// what is required to hold the contents of r, readFrom() will not grow the -// underlying buffer. -const MIN_READ = 32 * 1024; -const MAX_SIZE = 2 ** 32 - 2; - -/** A variable-sized buffer of bytes with `read()` and `write()` methods. - * - * Buffer is almost always used with some I/O like files and sockets. It allows - * one to buffer up a download from a socket. Buffer grows and shrinks as - * necessary. - * - * Buffer is NOT the same thing as Node's Buffer. Node's Buffer was created in - * 2009 before JavaScript had the concept of ArrayBuffers. It's simply a - * non-standard ArrayBuffer. - * - * ArrayBuffer is a fixed memory allocation. Buffer is implemented on top of - * ArrayBuffer. - * - * Based on [Go Buffer](https://golang.org/pkg/bytes/#Buffer). */ - -export class Buffer { - #buf: Uint8Array; // contents are the bytes buf[off : len(buf)] - #off = 0; // read at buf[off], write at buf[buf.byteLength] - - constructor(ab?: ArrayBufferLike | ArrayLike) { - this.#buf = ab === undefined ? new Uint8Array(0) : new Uint8Array(ab); - } - - /** Returns a slice holding the unread portion of the buffer. - * - * The slice is valid for use only until the next buffer modification (that - * is, only until the next call to a method like `read()`, `write()`, - * `reset()`, or `truncate()`). If `options.copy` is false the slice aliases the buffer content at - * least until the next buffer modification, so immediate changes to the - * slice will affect the result of future reads. - * @param options Defaults to `{ copy: true }` - */ - bytes(options = { copy: true }): Uint8Array { - if (options.copy === false) return this.#buf.subarray(this.#off); - return this.#buf.slice(this.#off); - } - - /** Returns whether the unread portion of the buffer is empty. */ - empty(): boolean { - return this.#buf.byteLength <= this.#off; - } - - /** A read only number of bytes of the unread portion of the buffer. */ - get length(): number { - return this.#buf.byteLength - this.#off; - } - - /** The read only capacity of the buffer's underlying byte slice, that is, - * the total space allocated for the buffer's data. */ - get capacity(): number { - return this.#buf.buffer.byteLength; - } - - /** Discards all but the first `n` unread bytes from the buffer but - * continues to use the same allocated storage. It throws if `n` is - * negative or greater than the length of the buffer. */ - truncate(n: number): void { - if (n === 0) { - this.reset(); - return; - } - if (n < 0 || n > this.length) { - throw Error("bytes.Buffer: truncation out of range"); - } - this.#reslice(this.#off + n); - } - - reset(): void { - this.#reslice(0); - this.#off = 0; - } - - #tryGrowByReslice(n: number) { - const l = this.#buf.byteLength; - if (n <= this.capacity - l) { - this.#reslice(l + n); - return l; - } - return -1; - } - - #reslice(len: number) { - assert(len <= this.#buf.buffer.byteLength); - this.#buf = new Uint8Array(this.#buf.buffer, 0, len); - } - - /** Reads the next `p.length` bytes from the buffer or until the buffer is - * drained. Returns the number of bytes read. If the buffer has no data to - * return, the return is EOF (`null`). */ - readSync(p: Uint8Array): number | null { - if (this.empty()) { - // Buffer is empty, reset to recover space. - this.reset(); - if (p.byteLength === 0) { - // this edge case is tested in 'bufferReadEmptyAtEOF' test - return 0; - } - return null; - } - const nread = copy(this.#buf.subarray(this.#off), p); - this.#off += nread; - return nread; - } - - /** Reads the next `p.length` bytes from the buffer or until the buffer is - * drained. Resolves to the number of bytes read. If the buffer has no - * data to return, resolves to EOF (`null`). - * - * NOTE: This methods reads bytes synchronously; it's provided for - * compatibility with `Reader` interfaces. - */ - read(p: Uint8Array): Promise { - const rr = this.readSync(p); - return Promise.resolve(rr); - } - - writeSync(p: Uint8Array): number { - const m = this.#grow(p.byteLength); - return copy(p, this.#buf, m); - } - - /** NOTE: This methods writes bytes synchronously; it's provided for - * compatibility with `Writer` interface. */ - write(p: Uint8Array): Promise { - const n = this.writeSync(p); - return Promise.resolve(n); - } - - #grow(n: number) { - const m = this.length; - // If buffer is empty, reset to recover space. - if (m === 0 && this.#off !== 0) { - this.reset(); - } - // Fast: Try to grow by means of a reslice. - const i = this.#tryGrowByReslice(n); - if (i >= 0) { - return i; - } - const c = this.capacity; - if (n <= Math.floor(c / 2) - m) { - // We can slide things down instead of allocating a new - // ArrayBuffer. We only need m+n <= c to slide, but - // we instead let capacity get twice as large so we - // don't spend all our time copying. - copy(this.#buf.subarray(this.#off), this.#buf); - } else if (c + n > MAX_SIZE) { - throw new Error("The buffer cannot be grown beyond the maximum size."); - } else { - // Not enough space anywhere, we need to allocate. - const buf = new Uint8Array(Math.min(2 * c + n, MAX_SIZE)); - copy(this.#buf.subarray(this.#off), buf); - this.#buf = buf; - } - // Restore this.#off and len(this.#buf). - this.#off = 0; - this.#reslice(Math.min(m + n, MAX_SIZE)); - return m; - } - - /** Grows the buffer's capacity, if necessary, to guarantee space for - * another `n` bytes. After `.grow(n)`, at least `n` bytes can be written to - * the buffer without another allocation. If `n` is negative, `.grow()` will - * throw. If the buffer can't grow it will throw an error. - * - * Based on Go Lang's - * [Buffer.Grow](https://golang.org/pkg/bytes/#Buffer.Grow). */ - grow(n: number): void { - if (n < 0) { - throw Error("Buffer.grow: negative count"); - } - const m = this.#grow(n); - this.#reslice(m); - } - - /** Reads data from `r` until EOF (`null`) and appends it to the buffer, - * growing the buffer as needed. It resolves to the number of bytes read. - * If the buffer becomes too large, `.readFrom()` will reject with an error. - * - * Based on Go Lang's - * [Buffer.ReadFrom](https://golang.org/pkg/bytes/#Buffer.ReadFrom). */ - async readFrom(r: Reader): Promise { - let n = 0; - const tmp = new Uint8Array(MIN_READ); - while (true) { - const shouldGrow = this.capacity - this.length < MIN_READ; - // read into tmp buffer if there's not enough room - // otherwise read directly into the internal buffer - const buf = shouldGrow - ? tmp - : new Uint8Array(this.#buf.buffer, this.length); - - const nread = await r.read(buf); - if (nread === null) { - return n; - } - - // write will grow if needed - if (shouldGrow) this.writeSync(buf.subarray(0, nread)); - else this.#reslice(this.length + nread); - - n += nread; - } - } - - /** Reads data from `r` until EOF (`null`) and appends it to the buffer, - * growing the buffer as needed. It returns the number of bytes read. If the - * buffer becomes too large, `.readFromSync()` will throw an error. - * - * Based on Go Lang's - * [Buffer.ReadFrom](https://golang.org/pkg/bytes/#Buffer.ReadFrom). */ - readFromSync(r: ReaderSync): number { - let n = 0; - const tmp = new Uint8Array(MIN_READ); - while (true) { - const shouldGrow = this.capacity - this.length < MIN_READ; - // read into tmp buffer if there's not enough room - // otherwise read directly into the internal buffer - const buf = shouldGrow - ? tmp - : new Uint8Array(this.#buf.buffer, this.length); - - const nread = r.readSync(buf); - if (nread === null) { - return n; - } - - // write will grow if needed - if (shouldGrow) this.writeSync(buf.subarray(0, nread)); - else this.#reslice(this.length + nread); - - n += nread; - } - } -} - -const DEFAULT_BUF_SIZE = 4096; -const MIN_BUF_SIZE = 16; -const MAX_CONSECUTIVE_EMPTY_READS = 100; -const CR = "\r".charCodeAt(0); -const LF = "\n".charCodeAt(0); - -export class BufferFullError extends Error { - override name = "BufferFullError"; - constructor(public partial: Uint8Array) { - super("Buffer full"); - } -} - -export class PartialReadError extends Error { - override name = "PartialReadError"; - partial?: Uint8Array; - constructor() { - super("Encountered UnexpectedEof, data only partially read"); - } -} - -/** Result type returned by of BufReader.readLine(). */ -export interface ReadLineResult { - line: Uint8Array; - more: boolean; -} - -/** BufReader implements buffering for a Reader object. */ -export class BufReader implements Reader { - #buf!: Uint8Array; - #rd!: Reader; // Reader provided by caller. - #r = 0; // buf read position. - #w = 0; // buf write position. - #eof = false; - // private lastByte: number; - // private lastCharSize: number; - - /** return new BufReader unless r is BufReader */ - static create(r: Reader, size: number = DEFAULT_BUF_SIZE): BufReader { - return r instanceof BufReader ? r : new BufReader(r, size); - } - - constructor(rd: Reader, size: number = DEFAULT_BUF_SIZE) { - if (size < MIN_BUF_SIZE) { - size = MIN_BUF_SIZE; - } - this.#reset(new Uint8Array(size), rd); - } - - /** Returns the size of the underlying buffer in bytes. */ - size(): number { - return this.#buf.byteLength; - } - - buffered(): number { - return this.#w - this.#r; - } - - // Reads a new chunk into the buffer. - #fill = async () => { - // Slide existing data to beginning. - if (this.#r > 0) { - this.#buf.copyWithin(0, this.#r, this.#w); - this.#w -= this.#r; - this.#r = 0; - } - - if (this.#w >= this.#buf.byteLength) { - throw Error("bufio: tried to fill full buffer"); - } - - // Read new data: try a limited number of times. - for (let i = MAX_CONSECUTIVE_EMPTY_READS; i > 0; i--) { - const rr = await this.#rd.read(this.#buf.subarray(this.#w)); - if (rr === null) { - this.#eof = true; - return; - } - assert(rr >= 0, "negative read"); - this.#w += rr; - if (rr > 0) { - return; - } - } - - throw new Error( - `No progress after ${MAX_CONSECUTIVE_EMPTY_READS} read() calls`, - ); - }; - - /** Discards any buffered data, resets all state, and switches - * the buffered reader to read from r. - */ - reset(r: Reader): void { - this.#reset(this.#buf, r); - } - - #reset = (buf: Uint8Array, rd: Reader): void => { - this.#buf = buf; - this.#rd = rd; - this.#eof = false; - // this.lastByte = -1; - // this.lastCharSize = -1; - }; - - /** reads data into p. - * It returns the number of bytes read into p. - * The bytes are taken from at most one Read on the underlying Reader, - * hence n may be less than len(p). - * To read exactly len(p) bytes, use io.ReadFull(b, p). - */ - async read(p: Uint8Array): Promise { - let rr: number | null = p.byteLength; - if (p.byteLength === 0) return rr; - - if (this.#r === this.#w) { - if (p.byteLength >= this.#buf.byteLength) { - // Large read, empty buffer. - // Read directly into p to avoid copy. - const rr = await this.#rd.read(p); - const nread = rr ?? 0; - assert(nread >= 0, "negative read"); - // if (rr.nread > 0) { - // this.lastByte = p[rr.nread - 1]; - // this.lastCharSize = -1; - // } - return rr; - } - - // One read. - // Do not use this.fill, which will loop. - this.#r = 0; - this.#w = 0; - rr = await this.#rd.read(this.#buf); - if (rr === 0 || rr === null) return rr; - assert(rr >= 0, "negative read"); - this.#w += rr; - } - - // copy as much as we can - const copied = copy(this.#buf.subarray(this.#r, this.#w), p, 0); - this.#r += copied; - // this.lastByte = this.buf[this.r - 1]; - // this.lastCharSize = -1; - return copied; - } - - /** reads exactly `p.length` bytes into `p`. - * - * If successful, `p` is returned. - * - * If the end of the underlying stream has been reached, and there are no more - * bytes available in the buffer, `readFull()` returns `null` instead. - * - * An error is thrown if some bytes could be read, but not enough to fill `p` - * entirely before the underlying stream reported an error or EOF. Any error - * thrown will have a `partial` property that indicates the slice of the - * buffer that has been successfully filled with data. - * - * Ported from https://golang.org/pkg/io/#ReadFull - */ - async readFull(p: Uint8Array): Promise { - let bytesRead = 0; - while (bytesRead < p.length) { - try { - const rr = await this.read(p.subarray(bytesRead)); - if (rr === null) { - if (bytesRead === 0) { - return null; - } else { - throw new PartialReadError(); - } - } - bytesRead += rr; - } catch (err) { - if (err instanceof PartialReadError) { - err.partial = p.subarray(0, bytesRead); - } else if (err instanceof Error) { - const e = new PartialReadError(); - e.partial = p.subarray(0, bytesRead); - e.stack = err.stack; - e.message = err.message; - e.cause = err.cause; - throw err; - } - throw err; - } - } - return p; - } - - /** Returns the next byte [0, 255] or `null`. */ - async readByte(): Promise { - while (this.#r === this.#w) { - if (this.#eof) return null; - await this.#fill(); // buffer is empty. - } - const c = this.#buf[this.#r]; - this.#r++; - // this.lastByte = c; - return c; - } - - /** readString() reads until the first occurrence of delim in the input, - * returning a string containing the data up to and including the delimiter. - * If ReadString encounters an error before finding a delimiter, - * it returns the data read before the error and the error itself - * (often `null`). - * ReadString returns err != nil if and only if the returned data does not end - * in delim. - * For simple uses, a Scanner may be more convenient. - */ - async readString(delim: string): Promise { - if (delim.length !== 1) { - throw new Error("Delimiter should be a single character"); - } - const buffer = await this.readSlice(delim.charCodeAt(0)); - if (buffer === null) return null; - return new TextDecoder().decode(buffer); - } - - /** `readLine()` is a low-level line-reading primitive. Most callers should - * use `readString('\n')` instead or use a Scanner. - * - * `readLine()` tries to return a single line, not including the end-of-line - * bytes. If the line was too long for the buffer then `more` is set and the - * beginning of the line is returned. The rest of the line will be returned - * from future calls. `more` will be false when returning the last fragment - * of the line. The returned buffer is only valid until the next call to - * `readLine()`. - * - * The text returned from ReadLine does not include the line end ("\r\n" or - * "\n"). - * - * When the end of the underlying stream is reached, the final bytes in the - * stream are returned. No indication or error is given if the input ends - * without a final line end. When there are no more trailing bytes to read, - * `readLine()` returns `null`. - * - * Calling `unreadByte()` after `readLine()` will always unread the last byte - * read (possibly a character belonging to the line end) even if that byte is - * not part of the line returned by `readLine()`. - */ - async readLine(): Promise { - let line: Uint8Array | null = null; - - try { - line = await this.readSlice(LF); - } catch (err) { - if (err instanceof Deno.errors.BadResource) { - throw err; - } - let partial; - if (err instanceof PartialReadError) { - partial = err.partial; - assert( - partial instanceof Uint8Array, - "bufio: caught error from `readSlice()` without `partial` property", - ); - } - - // Don't throw if `readSlice()` failed with `BufferFullError`, instead we - // just return whatever is available and set the `more` flag. - if (!(err instanceof BufferFullError)) { - throw err; - } - - partial = err.partial; - - // Handle the case where "\r\n" straddles the buffer. - if ( - !this.#eof && partial && - partial.byteLength > 0 && - partial[partial.byteLength - 1] === CR - ) { - // Put the '\r' back on buf and drop it from line. - // Let the next call to ReadLine check for "\r\n". - assert(this.#r > 0, "bufio: tried to rewind past start of buffer"); - this.#r--; - partial = partial.subarray(0, partial.byteLength - 1); - } - - if (partial) { - return { line: partial, more: !this.#eof }; - } - } - - if (line === null) { - return null; - } - - if (line.byteLength === 0) { - return { line, more: false }; - } - - if (line[line.byteLength - 1] == LF) { - let drop = 1; - if (line.byteLength > 1 && line[line.byteLength - 2] === CR) { - drop = 2; - } - line = line.subarray(0, line.byteLength - drop); - } - return { line, more: false }; - } - - /** `readSlice()` reads until the first occurrence of `delim` in the input, - * returning a slice pointing at the bytes in the buffer. The bytes stop - * being valid at the next read. - * - * If `readSlice()` encounters an error before finding a delimiter, or the - * buffer fills without finding a delimiter, it throws an error with a - * `partial` property that contains the entire buffer. - * - * If `readSlice()` encounters the end of the underlying stream and there are - * any bytes left in the buffer, the rest of the buffer is returned. In other - * words, EOF is always treated as a delimiter. Once the buffer is empty, - * it returns `null`. - * - * Because the data returned from `readSlice()` will be overwritten by the - * next I/O operation, most clients should use `readString()` instead. - */ - async readSlice(delim: number): Promise { - let s = 0; // search start index - let slice: Uint8Array | undefined; - - while (true) { - // Search buffer. - let i = this.#buf.subarray(this.#r + s, this.#w).indexOf(delim); - if (i >= 0) { - i += s; - slice = this.#buf.subarray(this.#r, this.#r + i + 1); - this.#r += i + 1; - break; - } - - // EOF? - if (this.#eof) { - if (this.#r === this.#w) { - return null; - } - slice = this.#buf.subarray(this.#r, this.#w); - this.#r = this.#w; - break; - } - - // Buffer full? - if (this.buffered() >= this.#buf.byteLength) { - this.#r = this.#w; - // #4521 The internal buffer should not be reused across reads because it causes corruption of data. - const oldbuf = this.#buf; - const newbuf = this.#buf.slice(0); - this.#buf = newbuf; - throw new BufferFullError(oldbuf); - } - - s = this.#w - this.#r; // do not rescan area we scanned before - - // Buffer is not full. - try { - await this.#fill(); - } catch (err) { - if (err instanceof PartialReadError) { - err.partial = slice; - } else if (err instanceof Error) { - const e = new PartialReadError(); - e.partial = slice; - e.stack = err.stack; - e.message = err.message; - e.cause = err.cause; - throw err; - } - throw err; - } - } - - // Handle last byte, if any. - // const i = slice.byteLength - 1; - // if (i >= 0) { - // this.lastByte = slice[i]; - // this.lastCharSize = -1 - // } - - return slice; - } - - /** `peek()` returns the next `n` bytes without advancing the reader. The - * bytes stop being valid at the next read call. - * - * When the end of the underlying stream is reached, but there are unread - * bytes left in the buffer, those bytes are returned. If there are no bytes - * left in the buffer, it returns `null`. - * - * If an error is encountered before `n` bytes are available, `peek()` throws - * an error with the `partial` property set to a slice of the buffer that - * contains the bytes that were available before the error occurred. - */ - async peek(n: number): Promise { - if (n < 0) { - throw Error("negative count"); - } - - let avail = this.#w - this.#r; - while (avail < n && avail < this.#buf.byteLength && !this.#eof) { - try { - await this.#fill(); - } catch (err) { - if (err instanceof PartialReadError) { - err.partial = this.#buf.subarray(this.#r, this.#w); - } else if (err instanceof Error) { - const e = new PartialReadError(); - e.partial = this.#buf.subarray(this.#r, this.#w); - e.stack = err.stack; - e.message = err.message; - e.cause = err.cause; - throw err; - } - throw err; - } - avail = this.#w - this.#r; - } - - if (avail === 0 && this.#eof) { - return null; - } else if (avail < n && this.#eof) { - return this.#buf.subarray(this.#r, this.#r + avail); - } else if (avail < n) { - throw new BufferFullError(this.#buf.subarray(this.#r, this.#w)); - } - - return this.#buf.subarray(this.#r, this.#r + n); - } -} - -abstract class AbstractBufBase { - buf: Uint8Array; - usedBufferBytes = 0; - err: Error | null = null; - - constructor(buf: Uint8Array) { - this.buf = buf; - } - - /** Size returns the size of the underlying buffer in bytes. */ - size(): number { - return this.buf.byteLength; - } - - /** Returns how many bytes are unused in the buffer. */ - available(): number { - return this.buf.byteLength - this.usedBufferBytes; - } - - /** buffered returns the number of bytes that have been written into the - * current buffer. - */ - buffered(): number { - return this.usedBufferBytes; - } -} - -/** BufWriter implements buffering for an deno.Writer object. - * If an error occurs writing to a Writer, no more data will be - * accepted and all subsequent writes, and flush(), will return the error. - * After all data has been written, the client should call the - * flush() method to guarantee all data has been forwarded to - * the underlying deno.Writer. - */ -export class BufWriter extends AbstractBufBase implements Writer { - #writer: Writer; - - /** return new BufWriter unless writer is BufWriter */ - static create(writer: Writer, size: number = DEFAULT_BUF_SIZE): BufWriter { - return writer instanceof BufWriter ? writer : new BufWriter(writer, size); - } - - constructor(writer: Writer, size: number = DEFAULT_BUF_SIZE) { - super(new Uint8Array(size <= 0 ? DEFAULT_BUF_SIZE : size)); - this.#writer = writer; - } - - /** Discards any unflushed buffered data, clears any error, and - * resets buffer to write its output to w. - */ - reset(w: Writer): void { - this.err = null; - this.usedBufferBytes = 0; - this.#writer = w; - } - - /** Flush writes any buffered data to the underlying io.Writer. */ - async flush() { - if (this.err !== null) throw this.err; - if (this.usedBufferBytes === 0) return; - - try { - const p = this.buf.subarray(0, this.usedBufferBytes); - let nwritten = 0; - while (nwritten < p.length) { - nwritten += await this.#writer.write(p.subarray(nwritten)); - } - } catch (e) { - if (e instanceof Error) { - this.err = e; - } - throw e; - } - - this.buf = new Uint8Array(this.buf.length); - this.usedBufferBytes = 0; - } - - /** Writes the contents of `data` into the buffer. If the contents won't fully - * fit into the buffer, those bytes that can are copied into the buffer, the - * buffer is the flushed to the writer and the remaining bytes are copied into - * the now empty buffer. - * - * @return the number of bytes written to the buffer. - */ - async write(data: Uint8Array): Promise { - if (this.err !== null) throw this.err; - if (data.length === 0) return 0; - - let totalBytesWritten = 0; - let numBytesWritten = 0; - while (data.byteLength > this.available()) { - if (this.buffered() === 0) { - // Large write, empty buffer. - // Write directly from data to avoid copy. - try { - numBytesWritten = await this.#writer.write(data); - } catch (e) { - if (e instanceof Error) { - this.err = e; - } - throw e; - } - } else { - numBytesWritten = copy(data, this.buf, this.usedBufferBytes); - this.usedBufferBytes += numBytesWritten; - await this.flush(); - } - totalBytesWritten += numBytesWritten; - data = data.subarray(numBytesWritten); - } - - numBytesWritten = copy(data, this.buf, this.usedBufferBytes); - this.usedBufferBytes += numBytesWritten; - totalBytesWritten += numBytesWritten; - return totalBytesWritten; - } -} - -/** BufWriterSync implements buffering for a deno.WriterSync object. - * If an error occurs writing to a WriterSync, no more data will be - * accepted and all subsequent writes, and flush(), will return the error. - * After all data has been written, the client should call the - * flush() method to guarantee all data has been forwarded to - * the underlying deno.WriterSync. - */ -export class BufWriterSync extends AbstractBufBase implements WriterSync { - #writer: WriterSync; - - /** return new BufWriterSync unless writer is BufWriterSync */ - static create( - writer: WriterSync, - size: number = DEFAULT_BUF_SIZE, - ): BufWriterSync { - return writer instanceof BufWriterSync - ? writer - : new BufWriterSync(writer, size); - } - - constructor(writer: WriterSync, size: number = DEFAULT_BUF_SIZE) { - super(new Uint8Array(size <= 0 ? DEFAULT_BUF_SIZE : size)); - this.#writer = writer; - } - - /** Discards any unflushed buffered data, clears any error, and - * resets buffer to write its output to w. - */ - reset(w: WriterSync): void { - this.err = null; - this.usedBufferBytes = 0; - this.#writer = w; - } - - /** Flush writes any buffered data to the underlying io.WriterSync. */ - flush(): void { - if (this.err !== null) throw this.err; - if (this.usedBufferBytes === 0) return; - - try { - const p = this.buf.subarray(0, this.usedBufferBytes); - let nwritten = 0; - while (nwritten < p.length) { - nwritten += this.#writer.writeSync(p.subarray(nwritten)); - } - } catch (e) { - if (e instanceof Error) { - this.err = e; - } - throw e; - } - - this.buf = new Uint8Array(this.buf.length); - this.usedBufferBytes = 0; - } - - /** Writes the contents of `data` into the buffer. If the contents won't fully - * fit into the buffer, those bytes that can are copied into the buffer, the - * buffer is the flushed to the writer and the remaining bytes are copied into - * the now empty buffer. - * - * @return the number of bytes written to the buffer. - */ - writeSync(data: Uint8Array): number { - if (this.err !== null) throw this.err; - if (data.length === 0) return 0; - - let totalBytesWritten = 0; - let numBytesWritten = 0; - while (data.byteLength > this.available()) { - if (this.buffered() === 0) { - // Large write, empty buffer. - // Write directly from data to avoid copy. - try { - numBytesWritten = this.#writer.writeSync(data); - } catch (e) { - if (e instanceof Error) { - this.err = e; - } - throw e; - } - } else { - numBytesWritten = copy(data, this.buf, this.usedBufferBytes); - this.usedBufferBytes += numBytesWritten; - this.flush(); - } - totalBytesWritten += numBytesWritten; - data = data.subarray(numBytesWritten); - } - - numBytesWritten = copy(data, this.buf, this.usedBufferBytes); - this.usedBufferBytes += numBytesWritten; - totalBytesWritten += numBytesWritten; - return totalBytesWritten; - } -} - -/** Generate longest proper prefix which is also suffix array. */ -function createLPS(pat: Uint8Array): Uint8Array { - const lps = new Uint8Array(pat.length); - lps[0] = 0; - let prefixEnd = 0; - let i = 1; - while (i < lps.length) { - if (pat[i] == pat[prefixEnd]) { - prefixEnd++; - lps[i] = prefixEnd; - i++; - } else if (prefixEnd === 0) { - lps[i] = 0; - i++; - } else { - prefixEnd = lps[prefixEnd - 1]; - } - } - return lps; -} - -/** Read delimited bytes from a Reader. */ -export async function* readDelim( - reader: Reader, - delim: Uint8Array, -): AsyncIterableIterator { - // Avoid unicode problems - const delimLen = delim.length; - const delimLPS = createLPS(delim); - const chunks = new BytesList(); - const bufSize = Math.max(1024, delimLen + 1); - - // Modified KMP - let inspectIndex = 0; - let matchIndex = 0; - while (true) { - const inspectArr = new Uint8Array(bufSize); - const result = await reader.read(inspectArr); - if (result === null) { - // Yield last chunk. - yield chunks.concat(); - return; - } else if (result < 0) { - // Discard all remaining and silently fail. - return; - } - chunks.add(inspectArr, 0, result); - let localIndex = 0; - while (inspectIndex < chunks.size()) { - if (inspectArr[localIndex] === delim[matchIndex]) { - inspectIndex++; - localIndex++; - matchIndex++; - if (matchIndex === delimLen) { - // Full match - const matchEnd = inspectIndex - delimLen; - const readyBytes = chunks.slice(0, matchEnd); - yield readyBytes; - // Reset match, different from KMP. - chunks.shift(inspectIndex); - inspectIndex = 0; - matchIndex = 0; - } - } else { - if (matchIndex === 0) { - inspectIndex++; - localIndex++; - } else { - matchIndex = delimLPS[matchIndex - 1]; - } - } - } - } -} - -/** Read delimited strings from a Reader. */ -export async function* readStringDelim( - reader: Reader, - delim: string, - decoderOpts?: { - encoding?: string; - fatal?: boolean; - ignoreBOM?: boolean; - }, -): AsyncIterableIterator { - const encoder = new TextEncoder(); - const decoder = new TextDecoder(decoderOpts?.encoding, decoderOpts); - for await (const chunk of readDelim(reader, encoder.encode(delim))) { - yield decoder.decode(chunk); - } -} - -/** Read strings line-by-line from a Reader. */ -export async function* readLines( - reader: Reader, - decoderOpts?: { - encoding?: string; - fatal?: boolean; - ignoreBOM?: boolean; - }, -): AsyncIterableIterator { - const bufReader = new BufReader(reader); - let chunks: Uint8Array[] = []; - const decoder = new TextDecoder(decoderOpts?.encoding, decoderOpts); - while (true) { - const res = await bufReader.readLine(); - if (!res) { - if (chunks.length > 0) { - yield decoder.decode(concat(...chunks)); - } - break; - } - chunks.push(res.line); - if (!res.more) { - yield decoder.decode(concat(...chunks)); - chunks = []; - } - } -} diff --git a/vendor/deno.land/std@0.140.0/io/types.d.ts b/vendor/deno.land/std@0.140.0/io/types.d.ts deleted file mode 100644 index cc168fc..0000000 --- a/vendor/deno.land/std@0.140.0/io/types.d.ts +++ /dev/null @@ -1,82 +0,0 @@ -// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. - -export interface Reader { - /** Reads up to `p.byteLength` bytes into `p`. It resolves to the number of - * bytes read (`0` < `n` <= `p.byteLength`) and rejects if any error - * encountered. Even if `read()` resolves to `n` < `p.byteLength`, it may - * use all of `p` as scratch space during the call. If some data is - * available but not `p.byteLength` bytes, `read()` conventionally resolves - * to what is available instead of waiting for more. - * - * When `read()` encounters end-of-file condition, it resolves to EOF - * (`null`). - * - * When `read()` encounters an error, it rejects with an error. - * - * Callers should always process the `n` > `0` bytes returned before - * considering the EOF (`null`). Doing so correctly handles I/O errors that - * happen after reading some bytes and also both of the allowed EOF - * behaviors. - * - * Implementations should not retain a reference to `p`. - * - * Use iter() from https://deno.land/std/io/util.ts to turn a Reader into an - * AsyncIterator. - */ - read(p: Uint8Array): Promise; -} - -export interface ReaderSync { - /** Reads up to `p.byteLength` bytes into `p`. It resolves to the number - * of bytes read (`0` < `n` <= `p.byteLength`) and rejects if any error - * encountered. Even if `read()` returns `n` < `p.byteLength`, it may use - * all of `p` as scratch space during the call. If some data is available - * but not `p.byteLength` bytes, `read()` conventionally returns what is - * available instead of waiting for more. - * - * When `readSync()` encounters end-of-file condition, it returns EOF - * (`null`). - * - * When `readSync()` encounters an error, it throws with an error. - * - * Callers should always process the `n` > `0` bytes returned before - * considering the EOF (`null`). Doing so correctly handles I/O errors that happen - * after reading some bytes and also both of the allowed EOF behaviors. - * - * Implementations should not retain a reference to `p`. - * - * Use iterSync() from https://deno.land/std/io/util.ts to turn a ReaderSync - * into an Iterator. - */ - readSync(p: Uint8Array): number | null; -} - -export interface Writer { - /** Writes `p.byteLength` bytes from `p` to the underlying data stream. It - * resolves to the number of bytes written from `p` (`0` <= `n` <= - * `p.byteLength`) or reject with the error encountered that caused the - * write to stop early. `write()` must reject with a non-null error if - * would resolve to `n` < `p.byteLength`. `write()` must not modify the - * slice data, even temporarily. - * - * Implementations should not retain a reference to `p`. - */ - write(p: Uint8Array): Promise; -} - -export interface WriterSync { - /** Writes `p.byteLength` bytes from `p` to the underlying data - * stream. It returns the number of bytes written from `p` (`0` <= `n` - * <= `p.byteLength`) and any error encountered that caused the write to - * stop early. `writeSync()` must throw a non-null error if it returns `n` < - * `p.byteLength`. `writeSync()` must not modify the slice data, even - * temporarily. - * - * Implementations should not retain a reference to `p`. - */ - writeSync(p: Uint8Array): number; -} - -export interface Closer { - close(): void; -} diff --git a/vendor/deno.land/std@0.140.0/path/_constants.ts b/vendor/deno.land/std@0.140.0/path/_constants.ts deleted file mode 100644 index ce07c0a..0000000 --- a/vendor/deno.land/std@0.140.0/path/_constants.ts +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. -// Copyright the Browserify authors. MIT License. -// Ported from https://github.com/browserify/path-browserify/ -// This module is browser compatible. - -// Alphabet chars. -export const CHAR_UPPERCASE_A = 65; /* A */ -export const CHAR_LOWERCASE_A = 97; /* a */ -export const CHAR_UPPERCASE_Z = 90; /* Z */ -export const CHAR_LOWERCASE_Z = 122; /* z */ - -// Non-alphabetic chars. -export const CHAR_DOT = 46; /* . */ -export const CHAR_FORWARD_SLASH = 47; /* / */ -export const CHAR_BACKWARD_SLASH = 92; /* \ */ -export const CHAR_VERTICAL_LINE = 124; /* | */ -export const CHAR_COLON = 58; /* : */ -export const CHAR_QUESTION_MARK = 63; /* ? */ -export const CHAR_UNDERSCORE = 95; /* _ */ -export const CHAR_LINE_FEED = 10; /* \n */ -export const CHAR_CARRIAGE_RETURN = 13; /* \r */ -export const CHAR_TAB = 9; /* \t */ -export const CHAR_FORM_FEED = 12; /* \f */ -export const CHAR_EXCLAMATION_MARK = 33; /* ! */ -export const CHAR_HASH = 35; /* # */ -export const CHAR_SPACE = 32; /* */ -export const CHAR_NO_BREAK_SPACE = 160; /* \u00A0 */ -export const CHAR_ZERO_WIDTH_NOBREAK_SPACE = 65279; /* \uFEFF */ -export const CHAR_LEFT_SQUARE_BRACKET = 91; /* [ */ -export const CHAR_RIGHT_SQUARE_BRACKET = 93; /* ] */ -export const CHAR_LEFT_ANGLE_BRACKET = 60; /* < */ -export const CHAR_RIGHT_ANGLE_BRACKET = 62; /* > */ -export const CHAR_LEFT_CURLY_BRACKET = 123; /* { */ -export const CHAR_RIGHT_CURLY_BRACKET = 125; /* } */ -export const CHAR_HYPHEN_MINUS = 45; /* - */ -export const CHAR_PLUS = 43; /* + */ -export const CHAR_DOUBLE_QUOTE = 34; /* " */ -export const CHAR_SINGLE_QUOTE = 39; /* ' */ -export const CHAR_PERCENT = 37; /* % */ -export const CHAR_SEMICOLON = 59; /* ; */ -export const CHAR_CIRCUMFLEX_ACCENT = 94; /* ^ */ -export const CHAR_GRAVE_ACCENT = 96; /* ` */ -export const CHAR_AT = 64; /* @ */ -export const CHAR_AMPERSAND = 38; /* & */ -export const CHAR_EQUAL = 61; /* = */ - -// Digits -export const CHAR_0 = 48; /* 0 */ -export const CHAR_9 = 57; /* 9 */ diff --git a/vendor/deno.land/std@0.140.0/path/_interface.ts b/vendor/deno.land/std@0.140.0/path/_interface.ts deleted file mode 100644 index 64e00a3..0000000 --- a/vendor/deno.land/std@0.140.0/path/_interface.ts +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -/** - * A parsed path object generated by path.parse() or consumed by path.format(). - */ -export interface ParsedPath { - /** - * The root of the path such as '/' or 'c:\' - */ - root: string; - /** - * The full directory path such as '/home/user/dir' or 'c:\path\dir' - */ - dir: string; - /** - * The file name including extension (if any) such as 'index.html' - */ - base: string; - /** - * The file extension (if any) such as '.html' - */ - ext: string; - /** - * The file name without extension (if any) such as 'index' - */ - name: string; -} - -export type FormatInputPathObject = Partial; diff --git a/vendor/deno.land/std@0.140.0/path/_util.ts b/vendor/deno.land/std@0.140.0/path/_util.ts deleted file mode 100644 index c08a92d..0000000 --- a/vendor/deno.land/std@0.140.0/path/_util.ts +++ /dev/null @@ -1,133 +0,0 @@ -// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. -// Copyright the Browserify authors. MIT License. -// Ported from https://github.com/browserify/path-browserify/ -// This module is browser compatible. - -import type { FormatInputPathObject } from "./_interface.ts"; -import { - CHAR_BACKWARD_SLASH, - CHAR_DOT, - CHAR_FORWARD_SLASH, - CHAR_LOWERCASE_A, - CHAR_LOWERCASE_Z, - CHAR_UPPERCASE_A, - CHAR_UPPERCASE_Z, -} from "./_constants.ts"; - -export function assertPath(path: string): void { - if (typeof path !== "string") { - throw new TypeError( - `Path must be a string. Received ${JSON.stringify(path)}`, - ); - } -} - -export function isPosixPathSeparator(code: number): boolean { - return code === CHAR_FORWARD_SLASH; -} - -export function isPathSeparator(code: number): boolean { - return isPosixPathSeparator(code) || code === CHAR_BACKWARD_SLASH; -} - -export function isWindowsDeviceRoot(code: number): boolean { - return ( - (code >= CHAR_LOWERCASE_A && code <= CHAR_LOWERCASE_Z) || - (code >= CHAR_UPPERCASE_A && code <= CHAR_UPPERCASE_Z) - ); -} - -// Resolves . and .. elements in a path with directory names -export function normalizeString( - path: string, - allowAboveRoot: boolean, - separator: string, - isPathSeparator: (code: number) => boolean, -): string { - let res = ""; - let lastSegmentLength = 0; - let lastSlash = -1; - let dots = 0; - let code: number | undefined; - for (let i = 0, len = path.length; i <= len; ++i) { - if (i < len) code = path.charCodeAt(i); - else if (isPathSeparator(code!)) break; - else code = CHAR_FORWARD_SLASH; - - if (isPathSeparator(code!)) { - if (lastSlash === i - 1 || dots === 1) { - // NOOP - } else if (lastSlash !== i - 1 && dots === 2) { - if ( - res.length < 2 || - lastSegmentLength !== 2 || - res.charCodeAt(res.length - 1) !== CHAR_DOT || - res.charCodeAt(res.length - 2) !== CHAR_DOT - ) { - if (res.length > 2) { - const lastSlashIndex = res.lastIndexOf(separator); - if (lastSlashIndex === -1) { - res = ""; - lastSegmentLength = 0; - } else { - res = res.slice(0, lastSlashIndex); - lastSegmentLength = res.length - 1 - res.lastIndexOf(separator); - } - lastSlash = i; - dots = 0; - continue; - } else if (res.length === 2 || res.length === 1) { - res = ""; - lastSegmentLength = 0; - lastSlash = i; - dots = 0; - continue; - } - } - if (allowAboveRoot) { - if (res.length > 0) res += `${separator}..`; - else res = ".."; - lastSegmentLength = 2; - } - } else { - if (res.length > 0) res += separator + path.slice(lastSlash + 1, i); - else res = path.slice(lastSlash + 1, i); - lastSegmentLength = i - lastSlash - 1; - } - lastSlash = i; - dots = 0; - } else if (code === CHAR_DOT && dots !== -1) { - ++dots; - } else { - dots = -1; - } - } - return res; -} - -export function _format( - sep: string, - pathObject: FormatInputPathObject, -): string { - const dir: string | undefined = pathObject.dir || pathObject.root; - const base: string = pathObject.base || - (pathObject.name || "") + (pathObject.ext || ""); - if (!dir) return base; - if (dir === pathObject.root) return dir + base; - return dir + sep + base; -} - -const WHITESPACE_ENCODINGS: Record = { - "\u0009": "%09", - "\u000A": "%0A", - "\u000B": "%0B", - "\u000C": "%0C", - "\u000D": "%0D", - "\u0020": "%20", -}; - -export function encodeWhitespace(string: string): string { - return string.replaceAll(/[\s]/g, (c) => { - return WHITESPACE_ENCODINGS[c] ?? c; - }); -} diff --git a/vendor/deno.land/std@0.140.0/path/common.ts b/vendor/deno.land/std@0.140.0/path/common.ts deleted file mode 100644 index 9dee2a6..0000000 --- a/vendor/deno.land/std@0.140.0/path/common.ts +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -import { SEP } from "./separator.ts"; - -/** Determines the common path from a set of paths, using an optional separator, - * which defaults to the OS default separator. - * - * ```ts - * import { common } from "https://deno.land/std@$STD_VERSION/path/mod.ts"; - * const p = common([ - * "./deno/std/path/mod.ts", - * "./deno/std/fs/mod.ts", - * ]); - * console.log(p); // "./deno/std/" - * ``` - */ -export function common(paths: string[], sep = SEP): string { - const [first = "", ...remaining] = paths; - if (first === "" || remaining.length === 0) { - return first.substring(0, first.lastIndexOf(sep) + 1); - } - const parts = first.split(sep); - - let endOfPrefix = parts.length; - for (const path of remaining) { - const compare = path.split(sep); - for (let i = 0; i < endOfPrefix; i++) { - if (compare[i] !== parts[i]) { - endOfPrefix = i; - } - } - - if (endOfPrefix === 0) { - return ""; - } - } - const prefix = parts.slice(0, endOfPrefix).join(sep); - return prefix.endsWith(sep) ? prefix : `${prefix}${sep}`; -} diff --git a/vendor/deno.land/std@0.140.0/path/glob.ts b/vendor/deno.land/std@0.140.0/path/glob.ts deleted file mode 100644 index 674376e..0000000 --- a/vendor/deno.land/std@0.140.0/path/glob.ts +++ /dev/null @@ -1,413 +0,0 @@ -// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -import { isWindows, osType } from "../_util/os.ts"; -import { SEP, SEP_PATTERN } from "./separator.ts"; -import * as _win32 from "./win32.ts"; -import * as _posix from "./posix.ts"; -import type { OSType } from "../_util/os.ts"; - -const path = isWindows ? _win32 : _posix; -const { join, normalize } = path; - -export interface GlobOptions { - /** Extended glob syntax. - * See https://www.linuxjournal.com/content/bash-extended-globbing. Defaults - * to true. */ - extended?: boolean; - /** Globstar syntax. - * See https://www.linuxjournal.com/content/globstar-new-bash-globbing-option. - * If false, `**` is treated like `*`. Defaults to true. */ - globstar?: boolean; - /** Whether globstar should be case insensitive. */ - caseInsensitive?: boolean; - /** Operating system. Defaults to the native OS. */ - os?: OSType; -} - -export type GlobToRegExpOptions = GlobOptions; - -const regExpEscapeChars = [ - "!", - "$", - "(", - ")", - "*", - "+", - ".", - "=", - "?", - "[", - "\\", - "^", - "{", - "|", -]; -const rangeEscapeChars = ["-", "\\", "]"]; - -/** Convert a glob string to a regular expression. - * - * Tries to match bash glob expansion as closely as possible. - * - * Basic glob syntax: - * - `*` - Matches everything without leaving the path segment. - * - `?` - Matches any single character. - * - `{foo,bar}` - Matches `foo` or `bar`. - * - `[abcd]` - Matches `a`, `b`, `c` or `d`. - * - `[a-d]` - Matches `a`, `b`, `c` or `d`. - * - `[!abcd]` - Matches any single character besides `a`, `b`, `c` or `d`. - * - `[[::]]` - Matches any character belonging to ``. - * - `[[:alnum:]]` - Matches any digit or letter. - * - `[[:digit:]abc]` - Matches any digit, `a`, `b` or `c`. - * - See https://facelessuser.github.io/wcmatch/glob/#posix-character-classes - * for a complete list of supported character classes. - * - `\` - Escapes the next character for an `os` other than `"windows"`. - * - \` - Escapes the next character for `os` set to `"windows"`. - * - `/` - Path separator. - * - `\` - Additional path separator only for `os` set to `"windows"`. - * - * Extended syntax: - * - Requires `{ extended: true }`. - * - `?(foo|bar)` - Matches 0 or 1 instance of `{foo,bar}`. - * - `@(foo|bar)` - Matches 1 instance of `{foo,bar}`. They behave the same. - * - `*(foo|bar)` - Matches _n_ instances of `{foo,bar}`. - * - `+(foo|bar)` - Matches _n > 0_ instances of `{foo,bar}`. - * - `!(foo|bar)` - Matches anything other than `{foo,bar}`. - * - See https://www.linuxjournal.com/content/bash-extended-globbing. - * - * Globstar syntax: - * - Requires `{ globstar: true }`. - * - `**` - Matches any number of any path segments. - * - Must comprise its entire path segment in the provided glob. - * - See https://www.linuxjournal.com/content/globstar-new-bash-globbing-option. - * - * Note the following properties: - * - The generated `RegExp` is anchored at both start and end. - * - Repeating and trailing separators are tolerated. Trailing separators in the - * provided glob have no meaning and are discarded. - * - Absolute globs will only match absolute paths, etc. - * - Empty globs will match nothing. - * - Any special glob syntax must be contained to one path segment. For example, - * `?(foo|bar/baz)` is invalid. The separator will take precedence and the - * first segment ends with an unclosed group. - * - If a path segment ends with unclosed groups or a dangling escape prefix, a - * parse error has occurred. Every character for that segment is taken - * literally in this event. - * - * Limitations: - * - A negative group like `!(foo|bar)` will wrongly be converted to a negative - * look-ahead followed by a wildcard. This means that `!(foo).js` will wrongly - * fail to match `foobar.js`, even though `foobar` is not `foo`. Effectively, - * `!(foo|bar)` is treated like `!(@(foo|bar)*)`. This will work correctly if - * the group occurs not nested at the end of the segment. */ -export function globToRegExp( - glob: string, - { - extended = true, - globstar: globstarOption = true, - os = osType, - caseInsensitive = false, - }: GlobToRegExpOptions = {}, -): RegExp { - if (glob == "") { - return /(?!)/; - } - - const sep = os == "windows" ? "(?:\\\\|/)+" : "/+"; - const sepMaybe = os == "windows" ? "(?:\\\\|/)*" : "/*"; - const seps = os == "windows" ? ["\\", "/"] : ["/"]; - const globstar = os == "windows" - ? "(?:[^\\\\/]*(?:\\\\|/|$)+)*" - : "(?:[^/]*(?:/|$)+)*"; - const wildcard = os == "windows" ? "[^\\\\/]*" : "[^/]*"; - const escapePrefix = os == "windows" ? "`" : "\\"; - - // Remove trailing separators. - let newLength = glob.length; - for (; newLength > 1 && seps.includes(glob[newLength - 1]); newLength--); - glob = glob.slice(0, newLength); - - let regExpString = ""; - - // Terminates correctly. Trust that `j` is incremented every iteration. - for (let j = 0; j < glob.length;) { - let segment = ""; - const groupStack: string[] = []; - let inRange = false; - let inEscape = false; - let endsWithSep = false; - let i = j; - - // Terminates with `i` at the non-inclusive end of the current segment. - for (; i < glob.length && !seps.includes(glob[i]); i++) { - if (inEscape) { - inEscape = false; - const escapeChars = inRange ? rangeEscapeChars : regExpEscapeChars; - segment += escapeChars.includes(glob[i]) ? `\\${glob[i]}` : glob[i]; - continue; - } - - if (glob[i] == escapePrefix) { - inEscape = true; - continue; - } - - if (glob[i] == "[") { - if (!inRange) { - inRange = true; - segment += "["; - if (glob[i + 1] == "!") { - i++; - segment += "^"; - } else if (glob[i + 1] == "^") { - i++; - segment += "\\^"; - } - continue; - } else if (glob[i + 1] == ":") { - let k = i + 1; - let value = ""; - while (glob[k + 1] != null && glob[k + 1] != ":") { - value += glob[k + 1]; - k++; - } - if (glob[k + 1] == ":" && glob[k + 2] == "]") { - i = k + 2; - if (value == "alnum") segment += "\\dA-Za-z"; - else if (value == "alpha") segment += "A-Za-z"; - else if (value == "ascii") segment += "\x00-\x7F"; - else if (value == "blank") segment += "\t "; - else if (value == "cntrl") segment += "\x00-\x1F\x7F"; - else if (value == "digit") segment += "\\d"; - else if (value == "graph") segment += "\x21-\x7E"; - else if (value == "lower") segment += "a-z"; - else if (value == "print") segment += "\x20-\x7E"; - else if (value == "punct") { - segment += "!\"#$%&'()*+,\\-./:;<=>?@[\\\\\\]^_‘{|}~"; - } else if (value == "space") segment += "\\s\v"; - else if (value == "upper") segment += "A-Z"; - else if (value == "word") segment += "\\w"; - else if (value == "xdigit") segment += "\\dA-Fa-f"; - continue; - } - } - } - - if (glob[i] == "]" && inRange) { - inRange = false; - segment += "]"; - continue; - } - - if (inRange) { - if (glob[i] == "\\") { - segment += `\\\\`; - } else { - segment += glob[i]; - } - continue; - } - - if ( - glob[i] == ")" && groupStack.length > 0 && - groupStack[groupStack.length - 1] != "BRACE" - ) { - segment += ")"; - const type = groupStack.pop()!; - if (type == "!") { - segment += wildcard; - } else if (type != "@") { - segment += type; - } - continue; - } - - if ( - glob[i] == "|" && groupStack.length > 0 && - groupStack[groupStack.length - 1] != "BRACE" - ) { - segment += "|"; - continue; - } - - if (glob[i] == "+" && extended && glob[i + 1] == "(") { - i++; - groupStack.push("+"); - segment += "(?:"; - continue; - } - - if (glob[i] == "@" && extended && glob[i + 1] == "(") { - i++; - groupStack.push("@"); - segment += "(?:"; - continue; - } - - if (glob[i] == "?") { - if (extended && glob[i + 1] == "(") { - i++; - groupStack.push("?"); - segment += "(?:"; - } else { - segment += "."; - } - continue; - } - - if (glob[i] == "!" && extended && glob[i + 1] == "(") { - i++; - groupStack.push("!"); - segment += "(?!"; - continue; - } - - if (glob[i] == "{") { - groupStack.push("BRACE"); - segment += "(?:"; - continue; - } - - if (glob[i] == "}" && groupStack[groupStack.length - 1] == "BRACE") { - groupStack.pop(); - segment += ")"; - continue; - } - - if (glob[i] == "," && groupStack[groupStack.length - 1] == "BRACE") { - segment += "|"; - continue; - } - - if (glob[i] == "*") { - if (extended && glob[i + 1] == "(") { - i++; - groupStack.push("*"); - segment += "(?:"; - } else { - const prevChar = glob[i - 1]; - let numStars = 1; - while (glob[i + 1] == "*") { - i++; - numStars++; - } - const nextChar = glob[i + 1]; - if ( - globstarOption && numStars == 2 && - [...seps, undefined].includes(prevChar) && - [...seps, undefined].includes(nextChar) - ) { - segment += globstar; - endsWithSep = true; - } else { - segment += wildcard; - } - } - continue; - } - - segment += regExpEscapeChars.includes(glob[i]) ? `\\${glob[i]}` : glob[i]; - } - - // Check for unclosed groups or a dangling backslash. - if (groupStack.length > 0 || inRange || inEscape) { - // Parse failure. Take all characters from this segment literally. - segment = ""; - for (const c of glob.slice(j, i)) { - segment += regExpEscapeChars.includes(c) ? `\\${c}` : c; - endsWithSep = false; - } - } - - regExpString += segment; - if (!endsWithSep) { - regExpString += i < glob.length ? sep : sepMaybe; - endsWithSep = true; - } - - // Terminates with `i` at the start of the next segment. - while (seps.includes(glob[i])) i++; - - // Check that the next value of `j` is indeed higher than the current value. - if (!(i > j)) { - throw new Error("Assertion failure: i > j (potential infinite loop)"); - } - j = i; - } - - regExpString = `^${regExpString}$`; - return new RegExp(regExpString, caseInsensitive ? "i" : ""); -} - -/** Test whether the given string is a glob */ -export function isGlob(str: string): boolean { - const chars: Record = { "{": "}", "(": ")", "[": "]" }; - const regex = - /\\(.)|(^!|\*|\?|[\].+)]\?|\[[^\\\]]+\]|\{[^\\}]+\}|\(\?[:!=][^\\)]+\)|\([^|]+\|[^\\)]+\))/; - - if (str === "") { - return false; - } - - let match: RegExpExecArray | null; - - while ((match = regex.exec(str))) { - if (match[2]) return true; - let idx = match.index + match[0].length; - - // if an open bracket/brace/paren is escaped, - // set the index to the next closing character - const open = match[1]; - const close = open ? chars[open] : null; - if (open && close) { - const n = str.indexOf(close, idx); - if (n !== -1) { - idx = n + 1; - } - } - - str = str.slice(idx); - } - - return false; -} - -/** Like normalize(), but doesn't collapse "**\/.." when `globstar` is true. */ -export function normalizeGlob( - glob: string, - { globstar = false }: GlobOptions = {}, -): string { - if (glob.match(/\0/g)) { - throw new Error(`Glob contains invalid characters: "${glob}"`); - } - if (!globstar) { - return normalize(glob); - } - const s = SEP_PATTERN.source; - const badParentPattern = new RegExp( - `(?<=(${s}|^)\\*\\*${s})\\.\\.(?=${s}|$)`, - "g", - ); - return normalize(glob.replace(badParentPattern, "\0")).replace(/\0/g, ".."); -} - -/** Like join(), but doesn't collapse "**\/.." when `globstar` is true. */ -export function joinGlobs( - globs: string[], - { extended = true, globstar = false }: GlobOptions = {}, -): string { - if (!globstar || globs.length == 0) { - return join(...globs); - } - if (globs.length === 0) return "."; - let joined: string | undefined; - for (const glob of globs) { - const path = glob; - if (path.length > 0) { - if (!joined) joined = path; - else joined += `${SEP}${path}`; - } - } - if (!joined) return "."; - return normalizeGlob(joined, { extended, globstar }); -} diff --git a/vendor/deno.land/std@0.140.0/path/mod.ts b/vendor/deno.land/std@0.140.0/path/mod.ts deleted file mode 100644 index bda7e8c..0000000 --- a/vendor/deno.land/std@0.140.0/path/mod.ts +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. -// Copyright the Browserify authors. MIT License. - -/** - * Ported mostly from https://github.com/browserify/path-browserify/ - * This module is browser compatible. - * @module - */ - -import { isWindows } from "../_util/os.ts"; -import * as _win32 from "./win32.ts"; -import * as _posix from "./posix.ts"; - -const path = isWindows ? _win32 : _posix; - -export const win32 = _win32; -export const posix = _posix; -export const { - basename, - delimiter, - dirname, - extname, - format, - fromFileUrl, - isAbsolute, - join, - normalize, - parse, - relative, - resolve, - sep, - toFileUrl, - toNamespacedPath, -} = path; - -export * from "./common.ts"; -export { SEP, SEP_PATTERN } from "./separator.ts"; -export * from "./_interface.ts"; -export * from "./glob.ts"; diff --git a/vendor/deno.land/std@0.140.0/path/posix.ts b/vendor/deno.land/std@0.140.0/path/posix.ts deleted file mode 100644 index 4fdc698..0000000 --- a/vendor/deno.land/std@0.140.0/path/posix.ts +++ /dev/null @@ -1,517 +0,0 @@ -// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. -// Copyright the Browserify authors. MIT License. -// Ported from https://github.com/browserify/path-browserify/ -// This module is browser compatible. - -import type { FormatInputPathObject, ParsedPath } from "./_interface.ts"; -import { CHAR_DOT, CHAR_FORWARD_SLASH } from "./_constants.ts"; - -import { - _format, - assertPath, - encodeWhitespace, - isPosixPathSeparator, - normalizeString, -} from "./_util.ts"; - -export const sep = "/"; -export const delimiter = ":"; - -// path.resolve([from ...], to) -/** - * Resolves `pathSegments` into an absolute path. - * @param pathSegments an array of path segments - */ -export function resolve(...pathSegments: string[]): string { - let resolvedPath = ""; - let resolvedAbsolute = false; - - for (let i = pathSegments.length - 1; i >= -1 && !resolvedAbsolute; i--) { - let path: string; - - if (i >= 0) path = pathSegments[i]; - else { - // deno-lint-ignore no-explicit-any - const { Deno } = globalThis as any; - if (typeof Deno?.cwd !== "function") { - throw new TypeError("Resolved a relative path without a CWD."); - } - path = Deno.cwd(); - } - - assertPath(path); - - // Skip empty entries - if (path.length === 0) { - continue; - } - - resolvedPath = `${path}/${resolvedPath}`; - resolvedAbsolute = path.charCodeAt(0) === CHAR_FORWARD_SLASH; - } - - // At this point the path should be resolved to a full absolute path, but - // handle relative paths to be safe (might happen when process.cwd() fails) - - // Normalize the path - resolvedPath = normalizeString( - resolvedPath, - !resolvedAbsolute, - "/", - isPosixPathSeparator, - ); - - if (resolvedAbsolute) { - if (resolvedPath.length > 0) return `/${resolvedPath}`; - else return "/"; - } else if (resolvedPath.length > 0) return resolvedPath; - else return "."; -} - -/** - * Normalize the `path`, resolving `'..'` and `'.'` segments. - * @param path to be normalized - */ -export function normalize(path: string): string { - assertPath(path); - - if (path.length === 0) return "."; - - const isAbsolute = path.charCodeAt(0) === CHAR_FORWARD_SLASH; - const trailingSeparator = - path.charCodeAt(path.length - 1) === CHAR_FORWARD_SLASH; - - // Normalize the path - path = normalizeString(path, !isAbsolute, "/", isPosixPathSeparator); - - if (path.length === 0 && !isAbsolute) path = "."; - if (path.length > 0 && trailingSeparator) path += "/"; - - if (isAbsolute) return `/${path}`; - return path; -} - -/** - * Verifies whether provided path is absolute - * @param path to be verified as absolute - */ -export function isAbsolute(path: string): boolean { - assertPath(path); - return path.length > 0 && path.charCodeAt(0) === CHAR_FORWARD_SLASH; -} - -/** - * Join all given a sequence of `paths`,then normalizes the resulting path. - * @param paths to be joined and normalized - */ -export function join(...paths: string[]): string { - if (paths.length === 0) return "."; - let joined: string | undefined; - for (let i = 0, len = paths.length; i < len; ++i) { - const path = paths[i]; - assertPath(path); - if (path.length > 0) { - if (!joined) joined = path; - else joined += `/${path}`; - } - } - if (!joined) return "."; - return normalize(joined); -} - -/** - * Return the relative path from `from` to `to` based on current working directory. - * @param from path in current working directory - * @param to path in current working directory - */ -export function relative(from: string, to: string): string { - assertPath(from); - assertPath(to); - - if (from === to) return ""; - - from = resolve(from); - to = resolve(to); - - if (from === to) return ""; - - // Trim any leading backslashes - let fromStart = 1; - const fromEnd = from.length; - for (; fromStart < fromEnd; ++fromStart) { - if (from.charCodeAt(fromStart) !== CHAR_FORWARD_SLASH) break; - } - const fromLen = fromEnd - fromStart; - - // Trim any leading backslashes - let toStart = 1; - const toEnd = to.length; - for (; toStart < toEnd; ++toStart) { - if (to.charCodeAt(toStart) !== CHAR_FORWARD_SLASH) break; - } - const toLen = toEnd - toStart; - - // Compare paths to find the longest common path from root - const length = fromLen < toLen ? fromLen : toLen; - let lastCommonSep = -1; - let i = 0; - for (; i <= length; ++i) { - if (i === length) { - if (toLen > length) { - if (to.charCodeAt(toStart + i) === CHAR_FORWARD_SLASH) { - // We get here if `from` is the exact base path for `to`. - // For example: from='/foo/bar'; to='/foo/bar/baz' - return to.slice(toStart + i + 1); - } else if (i === 0) { - // We get here if `from` is the root - // For example: from='/'; to='/foo' - return to.slice(toStart + i); - } - } else if (fromLen > length) { - if (from.charCodeAt(fromStart + i) === CHAR_FORWARD_SLASH) { - // We get here if `to` is the exact base path for `from`. - // For example: from='/foo/bar/baz'; to='/foo/bar' - lastCommonSep = i; - } else if (i === 0) { - // We get here if `to` is the root. - // For example: from='/foo'; to='/' - lastCommonSep = 0; - } - } - break; - } - const fromCode = from.charCodeAt(fromStart + i); - const toCode = to.charCodeAt(toStart + i); - if (fromCode !== toCode) break; - else if (fromCode === CHAR_FORWARD_SLASH) lastCommonSep = i; - } - - let out = ""; - // Generate the relative path based on the path difference between `to` - // and `from` - for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) { - if (i === fromEnd || from.charCodeAt(i) === CHAR_FORWARD_SLASH) { - if (out.length === 0) out += ".."; - else out += "/.."; - } - } - - // Lastly, append the rest of the destination (`to`) path that comes after - // the common path parts - if (out.length > 0) return out + to.slice(toStart + lastCommonSep); - else { - toStart += lastCommonSep; - if (to.charCodeAt(toStart) === CHAR_FORWARD_SLASH) ++toStart; - return to.slice(toStart); - } -} - -/** - * Resolves path to a namespace path - * @param path to resolve to namespace - */ -export function toNamespacedPath(path: string): string { - // Non-op on posix systems - return path; -} - -/** - * Return the directory name of a `path`. - * @param path to determine name for - */ -export function dirname(path: string): string { - assertPath(path); - if (path.length === 0) return "."; - const hasRoot = path.charCodeAt(0) === CHAR_FORWARD_SLASH; - let end = -1; - let matchedSlash = true; - for (let i = path.length - 1; i >= 1; --i) { - if (path.charCodeAt(i) === CHAR_FORWARD_SLASH) { - if (!matchedSlash) { - end = i; - break; - } - } else { - // We saw the first non-path separator - matchedSlash = false; - } - } - - if (end === -1) return hasRoot ? "/" : "."; - if (hasRoot && end === 1) return "//"; - return path.slice(0, end); -} - -/** - * Return the last portion of a `path`. Trailing directory separators are ignored. - * @param path to process - * @param ext of path directory - */ -export function basename(path: string, ext = ""): string { - if (ext !== undefined && typeof ext !== "string") { - throw new TypeError('"ext" argument must be a string'); - } - assertPath(path); - - let start = 0; - let end = -1; - let matchedSlash = true; - let i: number; - - if (ext !== undefined && ext.length > 0 && ext.length <= path.length) { - if (ext.length === path.length && ext === path) return ""; - let extIdx = ext.length - 1; - let firstNonSlashEnd = -1; - for (i = path.length - 1; i >= 0; --i) { - const code = path.charCodeAt(i); - if (code === CHAR_FORWARD_SLASH) { - // If we reached a path separator that was not part of a set of path - // separators at the end of the string, stop now - if (!matchedSlash) { - start = i + 1; - break; - } - } else { - if (firstNonSlashEnd === -1) { - // We saw the first non-path separator, remember this index in case - // we need it if the extension ends up not matching - matchedSlash = false; - firstNonSlashEnd = i + 1; - } - if (extIdx >= 0) { - // Try to match the explicit extension - if (code === ext.charCodeAt(extIdx)) { - if (--extIdx === -1) { - // We matched the extension, so mark this as the end of our path - // component - end = i; - } - } else { - // Extension does not match, so our result is the entire path - // component - extIdx = -1; - end = firstNonSlashEnd; - } - } - } - } - - if (start === end) end = firstNonSlashEnd; - else if (end === -1) end = path.length; - return path.slice(start, end); - } else { - for (i = path.length - 1; i >= 0; --i) { - if (path.charCodeAt(i) === CHAR_FORWARD_SLASH) { - // If we reached a path separator that was not part of a set of path - // separators at the end of the string, stop now - if (!matchedSlash) { - start = i + 1; - break; - } - } else if (end === -1) { - // We saw the first non-path separator, mark this as the end of our - // path component - matchedSlash = false; - end = i + 1; - } - } - - if (end === -1) return ""; - return path.slice(start, end); - } -} - -/** - * Return the extension of the `path` with leading period. - * @param path with extension - * @returns extension (ex. for `file.ts` returns `.ts`) - */ -export function extname(path: string): string { - assertPath(path); - let startDot = -1; - let startPart = 0; - let end = -1; - let matchedSlash = true; - // Track the state of characters (if any) we see before our first dot and - // after any path separator we find - let preDotState = 0; - for (let i = path.length - 1; i >= 0; --i) { - const code = path.charCodeAt(i); - if (code === CHAR_FORWARD_SLASH) { - // If we reached a path separator that was not part of a set of path - // separators at the end of the string, stop now - if (!matchedSlash) { - startPart = i + 1; - break; - } - continue; - } - if (end === -1) { - // We saw the first non-path separator, mark this as the end of our - // extension - matchedSlash = false; - end = i + 1; - } - if (code === CHAR_DOT) { - // If this is our first dot, mark it as the start of our extension - if (startDot === -1) startDot = i; - else if (preDotState !== 1) preDotState = 1; - } else if (startDot !== -1) { - // We saw a non-dot and non-path separator before our dot, so we should - // have a good chance at having a non-empty extension - preDotState = -1; - } - } - - if ( - startDot === -1 || - end === -1 || - // We saw a non-dot character immediately before the dot - preDotState === 0 || - // The (right-most) trimmed path component is exactly '..' - (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) - ) { - return ""; - } - return path.slice(startDot, end); -} - -/** - * Generate a path from `FormatInputPathObject` object. - * @param pathObject with path - */ -export function format(pathObject: FormatInputPathObject): string { - if (pathObject === null || typeof pathObject !== "object") { - throw new TypeError( - `The "pathObject" argument must be of type Object. Received type ${typeof pathObject}`, - ); - } - return _format("/", pathObject); -} - -/** - * Return a `ParsedPath` object of the `path`. - * @param path to process - */ -export function parse(path: string): ParsedPath { - assertPath(path); - - const ret: ParsedPath = { root: "", dir: "", base: "", ext: "", name: "" }; - if (path.length === 0) return ret; - const isAbsolute = path.charCodeAt(0) === CHAR_FORWARD_SLASH; - let start: number; - if (isAbsolute) { - ret.root = "/"; - start = 1; - } else { - start = 0; - } - let startDot = -1; - let startPart = 0; - let end = -1; - let matchedSlash = true; - let i = path.length - 1; - - // Track the state of characters (if any) we see before our first dot and - // after any path separator we find - let preDotState = 0; - - // Get non-dir info - for (; i >= start; --i) { - const code = path.charCodeAt(i); - if (code === CHAR_FORWARD_SLASH) { - // If we reached a path separator that was not part of a set of path - // separators at the end of the string, stop now - if (!matchedSlash) { - startPart = i + 1; - break; - } - continue; - } - if (end === -1) { - // We saw the first non-path separator, mark this as the end of our - // extension - matchedSlash = false; - end = i + 1; - } - if (code === CHAR_DOT) { - // If this is our first dot, mark it as the start of our extension - if (startDot === -1) startDot = i; - else if (preDotState !== 1) preDotState = 1; - } else if (startDot !== -1) { - // We saw a non-dot and non-path separator before our dot, so we should - // have a good chance at having a non-empty extension - preDotState = -1; - } - } - - if ( - startDot === -1 || - end === -1 || - // We saw a non-dot character immediately before the dot - preDotState === 0 || - // The (right-most) trimmed path component is exactly '..' - (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) - ) { - if (end !== -1) { - if (startPart === 0 && isAbsolute) { - ret.base = ret.name = path.slice(1, end); - } else { - ret.base = ret.name = path.slice(startPart, end); - } - } - } else { - if (startPart === 0 && isAbsolute) { - ret.name = path.slice(1, startDot); - ret.base = path.slice(1, end); - } else { - ret.name = path.slice(startPart, startDot); - ret.base = path.slice(startPart, end); - } - ret.ext = path.slice(startDot, end); - } - - if (startPart > 0) ret.dir = path.slice(0, startPart - 1); - else if (isAbsolute) ret.dir = "/"; - - return ret; -} - -/** - * Converts a file URL to a path string. - * - * ```ts - * import { fromFileUrl } from "./posix.ts"; - * fromFileUrl("file:///home/foo"); // "/home/foo" - * ``` - * @param url of a file URL - */ -export function fromFileUrl(url: string | URL): string { - url = url instanceof URL ? url : new URL(url); - if (url.protocol != "file:") { - throw new TypeError("Must be a file URL."); - } - return decodeURIComponent( - url.pathname.replace(/%(?![0-9A-Fa-f]{2})/g, "%25"), - ); -} - -/** - * Converts a path string to a file URL. - * - * ```ts - * import { toFileUrl } from "./posix.ts"; - * toFileUrl("/home/foo"); // new URL("file:///home/foo") - * ``` - * @param path to convert to file URL - */ -export function toFileUrl(path: string): URL { - if (!isAbsolute(path)) { - throw new TypeError("Must be an absolute path."); - } - const url = new URL("file:///"); - url.pathname = encodeWhitespace( - path.replace(/%/g, "%25").replace(/\\/g, "%5C"), - ); - return url; -} diff --git a/vendor/deno.land/std@0.140.0/path/separator.ts b/vendor/deno.land/std@0.140.0/path/separator.ts deleted file mode 100644 index 0396c06..0000000 --- a/vendor/deno.land/std@0.140.0/path/separator.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -import { isWindows } from "../_util/os.ts"; - -export const SEP = isWindows ? "\\" : "/"; -export const SEP_PATTERN = isWindows ? /[\\/]+/ : /\/+/; diff --git a/vendor/deno.land/std@0.140.0/path/win32.ts b/vendor/deno.land/std@0.140.0/path/win32.ts deleted file mode 100644 index 67b54e4..0000000 --- a/vendor/deno.land/std@0.140.0/path/win32.ts +++ /dev/null @@ -1,1009 +0,0 @@ -// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. -// Copyright the Browserify authors. MIT License. -// Ported from https://github.com/browserify/path-browserify/ -// This module is browser compatible. - -import type { FormatInputPathObject, ParsedPath } from "./_interface.ts"; -import { - CHAR_BACKWARD_SLASH, - CHAR_COLON, - CHAR_DOT, - CHAR_QUESTION_MARK, -} from "./_constants.ts"; - -import { - _format, - assertPath, - encodeWhitespace, - isPathSeparator, - isWindowsDeviceRoot, - normalizeString, -} from "./_util.ts"; -import { assert } from "../_util/assert.ts"; - -export const sep = "\\"; -export const delimiter = ";"; - -/** - * Resolves path segments into a `path` - * @param pathSegments to process to path - */ -export function resolve(...pathSegments: string[]): string { - let resolvedDevice = ""; - let resolvedTail = ""; - let resolvedAbsolute = false; - - for (let i = pathSegments.length - 1; i >= -1; i--) { - let path: string; - // deno-lint-ignore no-explicit-any - const { Deno } = globalThis as any; - if (i >= 0) { - path = pathSegments[i]; - } else if (!resolvedDevice) { - if (typeof Deno?.cwd !== "function") { - throw new TypeError("Resolved a drive-letter-less path without a CWD."); - } - path = Deno.cwd(); - } else { - if ( - typeof Deno?.env?.get !== "function" || typeof Deno?.cwd !== "function" - ) { - throw new TypeError("Resolved a relative path without a CWD."); - } - path = Deno.cwd(); - - // Verify that a cwd was found and that it actually points - // to our drive. If not, default to the drive's root. - if ( - path === undefined || - path.slice(0, 3).toLowerCase() !== `${resolvedDevice.toLowerCase()}\\` - ) { - path = `${resolvedDevice}\\`; - } - } - - assertPath(path); - - const len = path.length; - - // Skip empty entries - if (len === 0) continue; - - let rootEnd = 0; - let device = ""; - let isAbsolute = false; - const code = path.charCodeAt(0); - - // Try to match a root - if (len > 1) { - if (isPathSeparator(code)) { - // Possible UNC root - - // If we started with a separator, we know we at least have an - // absolute path of some kind (UNC or otherwise) - isAbsolute = true; - - if (isPathSeparator(path.charCodeAt(1))) { - // Matched double path separator at beginning - let j = 2; - let last = j; - // Match 1 or more non-path separators - for (; j < len; ++j) { - if (isPathSeparator(path.charCodeAt(j))) break; - } - if (j < len && j !== last) { - const firstPart = path.slice(last, j); - // Matched! - last = j; - // Match 1 or more path separators - for (; j < len; ++j) { - if (!isPathSeparator(path.charCodeAt(j))) break; - } - if (j < len && j !== last) { - // Matched! - last = j; - // Match 1 or more non-path separators - for (; j < len; ++j) { - if (isPathSeparator(path.charCodeAt(j))) break; - } - if (j === len) { - // We matched a UNC root only - device = `\\\\${firstPart}\\${path.slice(last)}`; - rootEnd = j; - } else if (j !== last) { - // We matched a UNC root with leftovers - - device = `\\\\${firstPart}\\${path.slice(last, j)}`; - rootEnd = j; - } - } - } - } else { - rootEnd = 1; - } - } else if (isWindowsDeviceRoot(code)) { - // Possible device root - - if (path.charCodeAt(1) === CHAR_COLON) { - device = path.slice(0, 2); - rootEnd = 2; - if (len > 2) { - if (isPathSeparator(path.charCodeAt(2))) { - // Treat separator following drive name as an absolute path - // indicator - isAbsolute = true; - rootEnd = 3; - } - } - } - } - } else if (isPathSeparator(code)) { - // `path` contains just a path separator - rootEnd = 1; - isAbsolute = true; - } - - if ( - device.length > 0 && - resolvedDevice.length > 0 && - device.toLowerCase() !== resolvedDevice.toLowerCase() - ) { - // This path points to another device so it is not applicable - continue; - } - - if (resolvedDevice.length === 0 && device.length > 0) { - resolvedDevice = device; - } - if (!resolvedAbsolute) { - resolvedTail = `${path.slice(rootEnd)}\\${resolvedTail}`; - resolvedAbsolute = isAbsolute; - } - - if (resolvedAbsolute && resolvedDevice.length > 0) break; - } - - // At this point the path should be resolved to a full absolute path, - // but handle relative paths to be safe (might happen when process.cwd() - // fails) - - // Normalize the tail path - resolvedTail = normalizeString( - resolvedTail, - !resolvedAbsolute, - "\\", - isPathSeparator, - ); - - return resolvedDevice + (resolvedAbsolute ? "\\" : "") + resolvedTail || "."; -} - -/** - * Normalizes a `path` - * @param path to normalize - */ -export function normalize(path: string): string { - assertPath(path); - const len = path.length; - if (len === 0) return "."; - let rootEnd = 0; - let device: string | undefined; - let isAbsolute = false; - const code = path.charCodeAt(0); - - // Try to match a root - if (len > 1) { - if (isPathSeparator(code)) { - // Possible UNC root - - // If we started with a separator, we know we at least have an absolute - // path of some kind (UNC or otherwise) - isAbsolute = true; - - if (isPathSeparator(path.charCodeAt(1))) { - // Matched double path separator at beginning - let j = 2; - let last = j; - // Match 1 or more non-path separators - for (; j < len; ++j) { - if (isPathSeparator(path.charCodeAt(j))) break; - } - if (j < len && j !== last) { - const firstPart = path.slice(last, j); - // Matched! - last = j; - // Match 1 or more path separators - for (; j < len; ++j) { - if (!isPathSeparator(path.charCodeAt(j))) break; - } - if (j < len && j !== last) { - // Matched! - last = j; - // Match 1 or more non-path separators - for (; j < len; ++j) { - if (isPathSeparator(path.charCodeAt(j))) break; - } - if (j === len) { - // We matched a UNC root only - // Return the normalized version of the UNC root since there - // is nothing left to process - - return `\\\\${firstPart}\\${path.slice(last)}\\`; - } else if (j !== last) { - // We matched a UNC root with leftovers - - device = `\\\\${firstPart}\\${path.slice(last, j)}`; - rootEnd = j; - } - } - } - } else { - rootEnd = 1; - } - } else if (isWindowsDeviceRoot(code)) { - // Possible device root - - if (path.charCodeAt(1) === CHAR_COLON) { - device = path.slice(0, 2); - rootEnd = 2; - if (len > 2) { - if (isPathSeparator(path.charCodeAt(2))) { - // Treat separator following drive name as an absolute path - // indicator - isAbsolute = true; - rootEnd = 3; - } - } - } - } - } else if (isPathSeparator(code)) { - // `path` contains just a path separator, exit early to avoid unnecessary - // work - return "\\"; - } - - let tail: string; - if (rootEnd < len) { - tail = normalizeString( - path.slice(rootEnd), - !isAbsolute, - "\\", - isPathSeparator, - ); - } else { - tail = ""; - } - if (tail.length === 0 && !isAbsolute) tail = "."; - if (tail.length > 0 && isPathSeparator(path.charCodeAt(len - 1))) { - tail += "\\"; - } - if (device === undefined) { - if (isAbsolute) { - if (tail.length > 0) return `\\${tail}`; - else return "\\"; - } else if (tail.length > 0) { - return tail; - } else { - return ""; - } - } else if (isAbsolute) { - if (tail.length > 0) return `${device}\\${tail}`; - else return `${device}\\`; - } else if (tail.length > 0) { - return device + tail; - } else { - return device; - } -} - -/** - * Verifies whether path is absolute - * @param path to verify - */ -export function isAbsolute(path: string): boolean { - assertPath(path); - const len = path.length; - if (len === 0) return false; - - const code = path.charCodeAt(0); - if (isPathSeparator(code)) { - return true; - } else if (isWindowsDeviceRoot(code)) { - // Possible device root - - if (len > 2 && path.charCodeAt(1) === CHAR_COLON) { - if (isPathSeparator(path.charCodeAt(2))) return true; - } - } - return false; -} - -/** - * Join all given a sequence of `paths`,then normalizes the resulting path. - * @param paths to be joined and normalized - */ -export function join(...paths: string[]): string { - const pathsCount = paths.length; - if (pathsCount === 0) return "."; - - let joined: string | undefined; - let firstPart: string | null = null; - for (let i = 0; i < pathsCount; ++i) { - const path = paths[i]; - assertPath(path); - if (path.length > 0) { - if (joined === undefined) joined = firstPart = path; - else joined += `\\${path}`; - } - } - - if (joined === undefined) return "."; - - // Make sure that the joined path doesn't start with two slashes, because - // normalize() will mistake it for an UNC path then. - // - // This step is skipped when it is very clear that the user actually - // intended to point at an UNC path. This is assumed when the first - // non-empty string arguments starts with exactly two slashes followed by - // at least one more non-slash character. - // - // Note that for normalize() to treat a path as an UNC path it needs to - // have at least 2 components, so we don't filter for that here. - // This means that the user can use join to construct UNC paths from - // a server name and a share name; for example: - // path.join('//server', 'share') -> '\\\\server\\share\\') - let needsReplace = true; - let slashCount = 0; - assert(firstPart != null); - if (isPathSeparator(firstPart.charCodeAt(0))) { - ++slashCount; - const firstLen = firstPart.length; - if (firstLen > 1) { - if (isPathSeparator(firstPart.charCodeAt(1))) { - ++slashCount; - if (firstLen > 2) { - if (isPathSeparator(firstPart.charCodeAt(2))) ++slashCount; - else { - // We matched a UNC path in the first part - needsReplace = false; - } - } - } - } - } - if (needsReplace) { - // Find any more consecutive slashes we need to replace - for (; slashCount < joined.length; ++slashCount) { - if (!isPathSeparator(joined.charCodeAt(slashCount))) break; - } - - // Replace the slashes if needed - if (slashCount >= 2) joined = `\\${joined.slice(slashCount)}`; - } - - return normalize(joined); -} - -/** - * It will solve the relative path from `from` to `to`, for instance: - * from = 'C:\\orandea\\test\\aaa' - * to = 'C:\\orandea\\impl\\bbb' - * The output of the function should be: '..\\..\\impl\\bbb' - * @param from relative path - * @param to relative path - */ -export function relative(from: string, to: string): string { - assertPath(from); - assertPath(to); - - if (from === to) return ""; - - const fromOrig = resolve(from); - const toOrig = resolve(to); - - if (fromOrig === toOrig) return ""; - - from = fromOrig.toLowerCase(); - to = toOrig.toLowerCase(); - - if (from === to) return ""; - - // Trim any leading backslashes - let fromStart = 0; - let fromEnd = from.length; - for (; fromStart < fromEnd; ++fromStart) { - if (from.charCodeAt(fromStart) !== CHAR_BACKWARD_SLASH) break; - } - // Trim trailing backslashes (applicable to UNC paths only) - for (; fromEnd - 1 > fromStart; --fromEnd) { - if (from.charCodeAt(fromEnd - 1) !== CHAR_BACKWARD_SLASH) break; - } - const fromLen = fromEnd - fromStart; - - // Trim any leading backslashes - let toStart = 0; - let toEnd = to.length; - for (; toStart < toEnd; ++toStart) { - if (to.charCodeAt(toStart) !== CHAR_BACKWARD_SLASH) break; - } - // Trim trailing backslashes (applicable to UNC paths only) - for (; toEnd - 1 > toStart; --toEnd) { - if (to.charCodeAt(toEnd - 1) !== CHAR_BACKWARD_SLASH) break; - } - const toLen = toEnd - toStart; - - // Compare paths to find the longest common path from root - const length = fromLen < toLen ? fromLen : toLen; - let lastCommonSep = -1; - let i = 0; - for (; i <= length; ++i) { - if (i === length) { - if (toLen > length) { - if (to.charCodeAt(toStart + i) === CHAR_BACKWARD_SLASH) { - // We get here if `from` is the exact base path for `to`. - // For example: from='C:\\foo\\bar'; to='C:\\foo\\bar\\baz' - return toOrig.slice(toStart + i + 1); - } else if (i === 2) { - // We get here if `from` is the device root. - // For example: from='C:\\'; to='C:\\foo' - return toOrig.slice(toStart + i); - } - } - if (fromLen > length) { - if (from.charCodeAt(fromStart + i) === CHAR_BACKWARD_SLASH) { - // We get here if `to` is the exact base path for `from`. - // For example: from='C:\\foo\\bar'; to='C:\\foo' - lastCommonSep = i; - } else if (i === 2) { - // We get here if `to` is the device root. - // For example: from='C:\\foo\\bar'; to='C:\\' - lastCommonSep = 3; - } - } - break; - } - const fromCode = from.charCodeAt(fromStart + i); - const toCode = to.charCodeAt(toStart + i); - if (fromCode !== toCode) break; - else if (fromCode === CHAR_BACKWARD_SLASH) lastCommonSep = i; - } - - // We found a mismatch before the first common path separator was seen, so - // return the original `to`. - if (i !== length && lastCommonSep === -1) { - return toOrig; - } - - let out = ""; - if (lastCommonSep === -1) lastCommonSep = 0; - // Generate the relative path based on the path difference between `to` and - // `from` - for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) { - if (i === fromEnd || from.charCodeAt(i) === CHAR_BACKWARD_SLASH) { - if (out.length === 0) out += ".."; - else out += "\\.."; - } - } - - // Lastly, append the rest of the destination (`to`) path that comes after - // the common path parts - if (out.length > 0) { - return out + toOrig.slice(toStart + lastCommonSep, toEnd); - } else { - toStart += lastCommonSep; - if (toOrig.charCodeAt(toStart) === CHAR_BACKWARD_SLASH) ++toStart; - return toOrig.slice(toStart, toEnd); - } -} - -/** - * Resolves path to a namespace path - * @param path to resolve to namespace - */ -export function toNamespacedPath(path: string): string { - // Note: this will *probably* throw somewhere. - if (typeof path !== "string") return path; - if (path.length === 0) return ""; - - const resolvedPath = resolve(path); - - if (resolvedPath.length >= 3) { - if (resolvedPath.charCodeAt(0) === CHAR_BACKWARD_SLASH) { - // Possible UNC root - - if (resolvedPath.charCodeAt(1) === CHAR_BACKWARD_SLASH) { - const code = resolvedPath.charCodeAt(2); - if (code !== CHAR_QUESTION_MARK && code !== CHAR_DOT) { - // Matched non-long UNC root, convert the path to a long UNC path - return `\\\\?\\UNC\\${resolvedPath.slice(2)}`; - } - } - } else if (isWindowsDeviceRoot(resolvedPath.charCodeAt(0))) { - // Possible device root - - if ( - resolvedPath.charCodeAt(1) === CHAR_COLON && - resolvedPath.charCodeAt(2) === CHAR_BACKWARD_SLASH - ) { - // Matched device root, convert the path to a long UNC path - return `\\\\?\\${resolvedPath}`; - } - } - } - - return path; -} - -/** - * Return the directory name of a `path`. - * @param path to determine name for - */ -export function dirname(path: string): string { - assertPath(path); - const len = path.length; - if (len === 0) return "."; - let rootEnd = -1; - let end = -1; - let matchedSlash = true; - let offset = 0; - const code = path.charCodeAt(0); - - // Try to match a root - if (len > 1) { - if (isPathSeparator(code)) { - // Possible UNC root - - rootEnd = offset = 1; - - if (isPathSeparator(path.charCodeAt(1))) { - // Matched double path separator at beginning - let j = 2; - let last = j; - // Match 1 or more non-path separators - for (; j < len; ++j) { - if (isPathSeparator(path.charCodeAt(j))) break; - } - if (j < len && j !== last) { - // Matched! - last = j; - // Match 1 or more path separators - for (; j < len; ++j) { - if (!isPathSeparator(path.charCodeAt(j))) break; - } - if (j < len && j !== last) { - // Matched! - last = j; - // Match 1 or more non-path separators - for (; j < len; ++j) { - if (isPathSeparator(path.charCodeAt(j))) break; - } - if (j === len) { - // We matched a UNC root only - return path; - } - if (j !== last) { - // We matched a UNC root with leftovers - - // Offset by 1 to include the separator after the UNC root to - // treat it as a "normal root" on top of a (UNC) root - rootEnd = offset = j + 1; - } - } - } - } - } else if (isWindowsDeviceRoot(code)) { - // Possible device root - - if (path.charCodeAt(1) === CHAR_COLON) { - rootEnd = offset = 2; - if (len > 2) { - if (isPathSeparator(path.charCodeAt(2))) rootEnd = offset = 3; - } - } - } - } else if (isPathSeparator(code)) { - // `path` contains just a path separator, exit early to avoid - // unnecessary work - return path; - } - - for (let i = len - 1; i >= offset; --i) { - if (isPathSeparator(path.charCodeAt(i))) { - if (!matchedSlash) { - end = i; - break; - } - } else { - // We saw the first non-path separator - matchedSlash = false; - } - } - - if (end === -1) { - if (rootEnd === -1) return "."; - else end = rootEnd; - } - return path.slice(0, end); -} - -/** - * Return the last portion of a `path`. Trailing directory separators are ignored. - * @param path to process - * @param ext of path directory - */ -export function basename(path: string, ext = ""): string { - if (ext !== undefined && typeof ext !== "string") { - throw new TypeError('"ext" argument must be a string'); - } - - assertPath(path); - - let start = 0; - let end = -1; - let matchedSlash = true; - let i: number; - - // Check for a drive letter prefix so as not to mistake the following - // path separator as an extra separator at the end of the path that can be - // disregarded - if (path.length >= 2) { - const drive = path.charCodeAt(0); - if (isWindowsDeviceRoot(drive)) { - if (path.charCodeAt(1) === CHAR_COLON) start = 2; - } - } - - if (ext !== undefined && ext.length > 0 && ext.length <= path.length) { - if (ext.length === path.length && ext === path) return ""; - let extIdx = ext.length - 1; - let firstNonSlashEnd = -1; - for (i = path.length - 1; i >= start; --i) { - const code = path.charCodeAt(i); - if (isPathSeparator(code)) { - // If we reached a path separator that was not part of a set of path - // separators at the end of the string, stop now - if (!matchedSlash) { - start = i + 1; - break; - } - } else { - if (firstNonSlashEnd === -1) { - // We saw the first non-path separator, remember this index in case - // we need it if the extension ends up not matching - matchedSlash = false; - firstNonSlashEnd = i + 1; - } - if (extIdx >= 0) { - // Try to match the explicit extension - if (code === ext.charCodeAt(extIdx)) { - if (--extIdx === -1) { - // We matched the extension, so mark this as the end of our path - // component - end = i; - } - } else { - // Extension does not match, so our result is the entire path - // component - extIdx = -1; - end = firstNonSlashEnd; - } - } - } - } - - if (start === end) end = firstNonSlashEnd; - else if (end === -1) end = path.length; - return path.slice(start, end); - } else { - for (i = path.length - 1; i >= start; --i) { - if (isPathSeparator(path.charCodeAt(i))) { - // If we reached a path separator that was not part of a set of path - // separators at the end of the string, stop now - if (!matchedSlash) { - start = i + 1; - break; - } - } else if (end === -1) { - // We saw the first non-path separator, mark this as the end of our - // path component - matchedSlash = false; - end = i + 1; - } - } - - if (end === -1) return ""; - return path.slice(start, end); - } -} - -/** - * Return the extension of the `path` with leading period. - * @param path with extension - * @returns extension (ex. for `file.ts` returns `.ts`) - */ -export function extname(path: string): string { - assertPath(path); - let start = 0; - let startDot = -1; - let startPart = 0; - let end = -1; - let matchedSlash = true; - // Track the state of characters (if any) we see before our first dot and - // after any path separator we find - let preDotState = 0; - - // Check for a drive letter prefix so as not to mistake the following - // path separator as an extra separator at the end of the path that can be - // disregarded - - if ( - path.length >= 2 && - path.charCodeAt(1) === CHAR_COLON && - isWindowsDeviceRoot(path.charCodeAt(0)) - ) { - start = startPart = 2; - } - - for (let i = path.length - 1; i >= start; --i) { - const code = path.charCodeAt(i); - if (isPathSeparator(code)) { - // If we reached a path separator that was not part of a set of path - // separators at the end of the string, stop now - if (!matchedSlash) { - startPart = i + 1; - break; - } - continue; - } - if (end === -1) { - // We saw the first non-path separator, mark this as the end of our - // extension - matchedSlash = false; - end = i + 1; - } - if (code === CHAR_DOT) { - // If this is our first dot, mark it as the start of our extension - if (startDot === -1) startDot = i; - else if (preDotState !== 1) preDotState = 1; - } else if (startDot !== -1) { - // We saw a non-dot and non-path separator before our dot, so we should - // have a good chance at having a non-empty extension - preDotState = -1; - } - } - - if ( - startDot === -1 || - end === -1 || - // We saw a non-dot character immediately before the dot - preDotState === 0 || - // The (right-most) trimmed path component is exactly '..' - (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) - ) { - return ""; - } - return path.slice(startDot, end); -} - -/** - * Generate a path from `FormatInputPathObject` object. - * @param pathObject with path - */ -export function format(pathObject: FormatInputPathObject): string { - if (pathObject === null || typeof pathObject !== "object") { - throw new TypeError( - `The "pathObject" argument must be of type Object. Received type ${typeof pathObject}`, - ); - } - return _format("\\", pathObject); -} - -/** - * Return a `ParsedPath` object of the `path`. - * @param path to process - */ -export function parse(path: string): ParsedPath { - assertPath(path); - - const ret: ParsedPath = { root: "", dir: "", base: "", ext: "", name: "" }; - - const len = path.length; - if (len === 0) return ret; - - let rootEnd = 0; - let code = path.charCodeAt(0); - - // Try to match a root - if (len > 1) { - if (isPathSeparator(code)) { - // Possible UNC root - - rootEnd = 1; - if (isPathSeparator(path.charCodeAt(1))) { - // Matched double path separator at beginning - let j = 2; - let last = j; - // Match 1 or more non-path separators - for (; j < len; ++j) { - if (isPathSeparator(path.charCodeAt(j))) break; - } - if (j < len && j !== last) { - // Matched! - last = j; - // Match 1 or more path separators - for (; j < len; ++j) { - if (!isPathSeparator(path.charCodeAt(j))) break; - } - if (j < len && j !== last) { - // Matched! - last = j; - // Match 1 or more non-path separators - for (; j < len; ++j) { - if (isPathSeparator(path.charCodeAt(j))) break; - } - if (j === len) { - // We matched a UNC root only - - rootEnd = j; - } else if (j !== last) { - // We matched a UNC root with leftovers - - rootEnd = j + 1; - } - } - } - } - } else if (isWindowsDeviceRoot(code)) { - // Possible device root - - if (path.charCodeAt(1) === CHAR_COLON) { - rootEnd = 2; - if (len > 2) { - if (isPathSeparator(path.charCodeAt(2))) { - if (len === 3) { - // `path` contains just a drive root, exit early to avoid - // unnecessary work - ret.root = ret.dir = path; - return ret; - } - rootEnd = 3; - } - } else { - // `path` contains just a drive root, exit early to avoid - // unnecessary work - ret.root = ret.dir = path; - return ret; - } - } - } - } else if (isPathSeparator(code)) { - // `path` contains just a path separator, exit early to avoid - // unnecessary work - ret.root = ret.dir = path; - return ret; - } - - if (rootEnd > 0) ret.root = path.slice(0, rootEnd); - - let startDot = -1; - let startPart = rootEnd; - let end = -1; - let matchedSlash = true; - let i = path.length - 1; - - // Track the state of characters (if any) we see before our first dot and - // after any path separator we find - let preDotState = 0; - - // Get non-dir info - for (; i >= rootEnd; --i) { - code = path.charCodeAt(i); - if (isPathSeparator(code)) { - // If we reached a path separator that was not part of a set of path - // separators at the end of the string, stop now - if (!matchedSlash) { - startPart = i + 1; - break; - } - continue; - } - if (end === -1) { - // We saw the first non-path separator, mark this as the end of our - // extension - matchedSlash = false; - end = i + 1; - } - if (code === CHAR_DOT) { - // If this is our first dot, mark it as the start of our extension - if (startDot === -1) startDot = i; - else if (preDotState !== 1) preDotState = 1; - } else if (startDot !== -1) { - // We saw a non-dot and non-path separator before our dot, so we should - // have a good chance at having a non-empty extension - preDotState = -1; - } - } - - if ( - startDot === -1 || - end === -1 || - // We saw a non-dot character immediately before the dot - preDotState === 0 || - // The (right-most) trimmed path component is exactly '..' - (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) - ) { - if (end !== -1) { - ret.base = ret.name = path.slice(startPart, end); - } - } else { - ret.name = path.slice(startPart, startDot); - ret.base = path.slice(startPart, end); - ret.ext = path.slice(startDot, end); - } - - // If the directory is the root, use the entire root as the `dir` including - // the trailing slash if any (`C:\abc` -> `C:\`). Otherwise, strip out the - // trailing slash (`C:\abc\def` -> `C:\abc`). - if (startPart > 0 && startPart !== rootEnd) { - ret.dir = path.slice(0, startPart - 1); - } else ret.dir = ret.root; - - return ret; -} - -/** - * Converts a file URL to a path string. - * - * ```ts - * import { fromFileUrl } from "./win32.ts"; - * fromFileUrl("file:///home/foo"); // "\\home\\foo" - * fromFileUrl("file:///C:/Users/foo"); // "C:\\Users\\foo" - * fromFileUrl("file://localhost/home/foo"); // "\\\\localhost\\home\\foo" - * ``` - * @param url of a file URL - */ -export function fromFileUrl(url: string | URL): string { - url = url instanceof URL ? url : new URL(url); - if (url.protocol != "file:") { - throw new TypeError("Must be a file URL."); - } - let path = decodeURIComponent( - url.pathname.replace(/\//g, "\\").replace(/%(?![0-9A-Fa-f]{2})/g, "%25"), - ).replace(/^\\*([A-Za-z]:)(\\|$)/, "$1\\"); - if (url.hostname != "") { - // Note: The `URL` implementation guarantees that the drive letter and - // hostname are mutually exclusive. Otherwise it would not have been valid - // to append the hostname and path like this. - path = `\\\\${url.hostname}${path}`; - } - return path; -} - -/** - * Converts a path string to a file URL. - * - * ```ts - * import { toFileUrl } from "./win32.ts"; - * toFileUrl("\\home\\foo"); // new URL("file:///home/foo") - * toFileUrl("C:\\Users\\foo"); // new URL("file:///C:/Users/foo") - * toFileUrl("\\\\127.0.0.1\\home\\foo"); // new URL("file://127.0.0.1/home/foo") - * ``` - * @param path to convert to file URL - */ -export function toFileUrl(path: string): URL { - if (!isAbsolute(path)) { - throw new TypeError("Must be an absolute path."); - } - const [, hostname, pathname] = path.match( - /^(?:[/\\]{2}([^/\\]+)(?=[/\\](?:[^/\\]|$)))?(.*)/, - )!; - const url = new URL("file:///"); - url.pathname = encodeWhitespace(pathname.replace(/%/g, "%25")); - if (hostname != null && hostname != "localhost") { - url.hostname = hostname; - if (!url.hostname) { - throw new TypeError("Invalid hostname."); - } - } - return url; -} diff --git a/vendor/deno.land/std@0.140.0/streams/conversion.ts b/vendor/deno.land/std@0.140.0/streams/conversion.ts deleted file mode 100644 index b4a4d43..0000000 --- a/vendor/deno.land/std@0.140.0/streams/conversion.ts +++ /dev/null @@ -1,528 +0,0 @@ -// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. - -import { Buffer } from "../io/buffer.ts"; - -const DEFAULT_CHUNK_SIZE = 16_640; -const DEFAULT_BUFFER_SIZE = 32 * 1024; - -function isCloser(value: unknown): value is Deno.Closer { - return typeof value === "object" && value != null && "close" in value && - // deno-lint-ignore no-explicit-any - typeof (value as Record)["close"] === "function"; -} - -/** Create a `Deno.Reader` from an iterable of `Uint8Array`s. - * - * ```ts - * import { readerFromIterable } from "./conversion.ts"; - * - * const file = await Deno.open("metrics.txt", { write: true }); - * const reader = readerFromIterable((async function* () { - * while (true) { - * await new Promise((r) => setTimeout(r, 1000)); - * const message = `data: ${JSON.stringify(Deno.metrics())}\n\n`; - * yield new TextEncoder().encode(message); - * } - * })()); - * await Deno.copy(reader, file); - * ``` - */ -export function readerFromIterable( - iterable: Iterable | AsyncIterable, -): Deno.Reader { - const iterator: Iterator | AsyncIterator = - (iterable as AsyncIterable)[Symbol.asyncIterator]?.() ?? - (iterable as Iterable)[Symbol.iterator]?.(); - const buffer = new Buffer(); - return { - async read(p: Uint8Array): Promise { - if (buffer.length == 0) { - const result = await iterator.next(); - if (result.done) { - return null; - } else { - if (result.value.byteLength <= p.byteLength) { - p.set(result.value); - return result.value.byteLength; - } - p.set(result.value.subarray(0, p.byteLength)); - await writeAll(buffer, result.value.subarray(p.byteLength)); - return p.byteLength; - } - } else { - const n = await buffer.read(p); - if (n == null) { - return this.read(p); - } - return n; - } - }, - }; -} - -/** Create a `Writer` from a `WritableStreamDefaultWriter`. */ -export function writerFromStreamWriter( - streamWriter: WritableStreamDefaultWriter, -): Deno.Writer { - return { - async write(p: Uint8Array): Promise { - await streamWriter.ready; - await streamWriter.write(p); - return p.length; - }, - }; -} - -/** Create a `Reader` from a `ReadableStreamDefaultReader`. */ -export function readerFromStreamReader( - streamReader: ReadableStreamDefaultReader, -): Deno.Reader { - const buffer = new Buffer(); - - return { - async read(p: Uint8Array): Promise { - if (buffer.empty()) { - const res = await streamReader.read(); - if (res.done) { - return null; // EOF - } - - await writeAll(buffer, res.value); - } - - return buffer.read(p); - }, - }; -} - -export interface WritableStreamFromWriterOptions { - /** - * If the `writer` is also a `Deno.Closer`, automatically close the `writer` - * when the stream is closed, aborted, or a write error occurs. - * - * Defaults to `true`. */ - autoClose?: boolean; -} - -/** Create a `WritableStream` from a `Writer`. */ -export function writableStreamFromWriter( - writer: Deno.Writer, - options: WritableStreamFromWriterOptions = {}, -): WritableStream { - const { autoClose = true } = options; - - return new WritableStream({ - async write(chunk, controller) { - try { - await writeAll(writer, chunk); - } catch (e) { - controller.error(e); - if (isCloser(writer) && autoClose) { - writer.close(); - } - } - }, - close() { - if (isCloser(writer) && autoClose) { - writer.close(); - } - }, - abort() { - if (isCloser(writer) && autoClose) { - writer.close(); - } - }, - }); -} - -/** Create a `ReadableStream` from any kind of iterable. - * - * ```ts - * import { readableStreamFromIterable } from "./conversion.ts"; - * - * const r1 = readableStreamFromIterable(["foo, bar, baz"]); - * const r2 = readableStreamFromIterable(async function* () { - * await new Promise(((r) => setTimeout(r, 1000))); - * yield "foo"; - * await new Promise(((r) => setTimeout(r, 1000))); - * yield "bar"; - * await new Promise(((r) => setTimeout(r, 1000))); - * yield "baz"; - * }()); - * ``` - * - * If the produced iterator (`iterable[Symbol.asyncIterator]()` or - * `iterable[Symbol.iterator]()`) is a generator, or more specifically is found - * to have a `.throw()` method on it, that will be called upon - * `readableStream.cancel()`. This is the case for the second input type above: - * - * ```ts - * import { readableStreamFromIterable } from "./conversion.ts"; - * - * const r3 = readableStreamFromIterable(async function* () { - * try { - * yield "foo"; - * } catch (error) { - * console.log(error); // Error: Cancelled by consumer. - * } - * }()); - * const reader = r3.getReader(); - * console.log(await reader.read()); // { value: "foo", done: false } - * await reader.cancel(new Error("Cancelled by consumer.")); - * ``` - */ -export function readableStreamFromIterable( - iterable: Iterable | AsyncIterable, -): ReadableStream { - const iterator: Iterator | AsyncIterator = - (iterable as AsyncIterable)[Symbol.asyncIterator]?.() ?? - (iterable as Iterable)[Symbol.iterator]?.(); - return new ReadableStream({ - async pull(controller) { - const { value, done } = await iterator.next(); - if (done) { - controller.close(); - } else { - controller.enqueue(value); - } - }, - async cancel(reason) { - if (typeof iterator.throw == "function") { - try { - await iterator.throw(reason); - } catch { /* `iterator.throw()` always throws on site. We catch it. */ } - } - }, - }); -} - -export interface ReadableStreamFromReaderOptions { - /** If the `reader` is also a `Deno.Closer`, automatically close the `reader` - * when `EOF` is encountered, or a read error occurs. - * - * Defaults to `true`. */ - autoClose?: boolean; - - /** The size of chunks to allocate to read, the default is ~16KiB, which is - * the maximum size that Deno operations can currently support. */ - chunkSize?: number; - - /** The queuing strategy to create the `ReadableStream` with. */ - strategy?: { highWaterMark?: number | undefined; size?: undefined }; -} - -/** - * Create a `ReadableStream` from from a `Deno.Reader`. - * - * When the pull algorithm is called on the stream, a chunk from the reader - * will be read. When `null` is returned from the reader, the stream will be - * closed along with the reader (if it is also a `Deno.Closer`). - * - * An example converting a `Deno.FsFile` into a readable stream: - * - * ```ts - * import { readableStreamFromReader } from "./mod.ts"; - * - * const file = await Deno.open("./file.txt", { read: true }); - * const fileStream = readableStreamFromReader(file); - * ``` - */ -export function readableStreamFromReader( - reader: Deno.Reader | (Deno.Reader & Deno.Closer), - options: ReadableStreamFromReaderOptions = {}, -): ReadableStream { - const { - autoClose = true, - chunkSize = DEFAULT_CHUNK_SIZE, - strategy, - } = options; - - return new ReadableStream({ - async pull(controller) { - const chunk = new Uint8Array(chunkSize); - try { - const read = await reader.read(chunk); - if (read === null) { - if (isCloser(reader) && autoClose) { - reader.close(); - } - controller.close(); - return; - } - controller.enqueue(chunk.subarray(0, read)); - } catch (e) { - controller.error(e); - if (isCloser(reader)) { - reader.close(); - } - } - }, - cancel() { - if (isCloser(reader) && autoClose) { - reader.close(); - } - }, - }, strategy); -} - -/** Read Reader `r` until EOF (`null`) and resolve to the content as - * Uint8Array`. - * - * ```ts - * import { Buffer } from "../io/buffer.ts"; - * import { readAll } from "./conversion.ts"; - * - * // Example from stdin - * const stdinContent = await readAll(Deno.stdin); - * - * // Example from file - * const file = await Deno.open("my_file.txt", {read: true}); - * const myFileContent = await readAll(file); - * Deno.close(file.rid); - * - * // Example from buffer - * const myData = new Uint8Array(100); - * // ... fill myData array with data - * const reader = new Buffer(myData.buffer); - * const bufferContent = await readAll(reader); - * ``` - */ -export async function readAll(r: Deno.Reader): Promise { - const buf = new Buffer(); - await buf.readFrom(r); - return buf.bytes(); -} - -/** Synchronously reads Reader `r` until EOF (`null`) and returns the content - * as `Uint8Array`. - * - * ```ts - * import { Buffer } from "../io/buffer.ts"; - * import { readAllSync } from "./conversion.ts"; - * - * // Example from stdin - * const stdinContent = readAllSync(Deno.stdin); - * - * // Example from file - * const file = Deno.openSync("my_file.txt", {read: true}); - * const myFileContent = readAllSync(file); - * Deno.close(file.rid); - * - * // Example from buffer - * const myData = new Uint8Array(100); - * // ... fill myData array with data - * const reader = new Buffer(myData.buffer); - * const bufferContent = readAllSync(reader); - * ``` - */ -export function readAllSync(r: Deno.ReaderSync): Uint8Array { - const buf = new Buffer(); - buf.readFromSync(r); - return buf.bytes(); -} - -/** Write all the content of the array buffer (`arr`) to the writer (`w`). - * - * ```ts - * import { Buffer } from "../io/buffer.ts"; - * import { writeAll } from "./conversion.ts"; - - * // Example writing to stdout - * let contentBytes = new TextEncoder().encode("Hello World"); - * await writeAll(Deno.stdout, contentBytes); - * - * // Example writing to file - * contentBytes = new TextEncoder().encode("Hello World"); - * const file = await Deno.open('test.file', {write: true}); - * await writeAll(file, contentBytes); - * Deno.close(file.rid); - * - * // Example writing to buffer - * contentBytes = new TextEncoder().encode("Hello World"); - * const writer = new Buffer(); - * await writeAll(writer, contentBytes); - * console.log(writer.bytes().length); // 11 - * ``` - */ -export async function writeAll(w: Deno.Writer, arr: Uint8Array) { - let nwritten = 0; - while (nwritten < arr.length) { - nwritten += await w.write(arr.subarray(nwritten)); - } -} - -/** Synchronously write all the content of the array buffer (`arr`) to the - * writer (`w`). - * - * ```ts - * import { Buffer } from "../io/buffer.ts"; - * import { writeAllSync } from "./conversion.ts"; - * - * // Example writing to stdout - * let contentBytes = new TextEncoder().encode("Hello World"); - * writeAllSync(Deno.stdout, contentBytes); - * - * // Example writing to file - * contentBytes = new TextEncoder().encode("Hello World"); - * const file = Deno.openSync('test.file', {write: true}); - * writeAllSync(file, contentBytes); - * Deno.close(file.rid); - * - * // Example writing to buffer - * contentBytes = new TextEncoder().encode("Hello World"); - * const writer = new Buffer(); - * writeAllSync(writer, contentBytes); - * console.log(writer.bytes().length); // 11 - * ``` - */ -export function writeAllSync(w: Deno.WriterSync, arr: Uint8Array): void { - let nwritten = 0; - while (nwritten < arr.length) { - nwritten += w.writeSync(arr.subarray(nwritten)); - } -} - -/** Turns a Reader, `r`, into an async iterator. - * - * ```ts - * import { iterateReader } from "./conversion.ts"; - * - * let f = await Deno.open("/etc/passwd"); - * for await (const chunk of iterateReader(f)) { - * console.log(chunk); - * } - * f.close(); - * ``` - * - * Second argument can be used to tune size of a buffer. - * Default size of the buffer is 32kB. - * - * ```ts - * import { iterateReader } from "./conversion.ts"; - * - * let f = await Deno.open("/etc/passwd"); - * const it = iterateReader(f, { - * bufSize: 1024 * 1024 - * }); - * for await (const chunk of it) { - * console.log(chunk); - * } - * f.close(); - * ``` - * - * Iterator uses an internal buffer of fixed size for efficiency; it returns - * a view on that buffer on each iteration. It is therefore caller's - * responsibility to copy contents of the buffer if needed; otherwise the - * next iteration will overwrite contents of previously returned chunk. - */ -export async function* iterateReader( - r: Deno.Reader, - options?: { - bufSize?: number; - }, -): AsyncIterableIterator { - const bufSize = options?.bufSize ?? DEFAULT_BUFFER_SIZE; - const b = new Uint8Array(bufSize); - while (true) { - const result = await r.read(b); - if (result === null) { - break; - } - - yield b.subarray(0, result); - } -} - -/** Turns a ReaderSync, `r`, into an iterator. - * - * ```ts - * import { iterateReaderSync } from "./conversion.ts"; - * - * let f = Deno.openSync("/etc/passwd"); - * for (const chunk of iterateReaderSync(f)) { - * console.log(chunk); - * } - * f.close(); - * ``` - * - * Second argument can be used to tune size of a buffer. - * Default size of the buffer is 32kB. - * - * ```ts - * import { iterateReaderSync } from "./conversion.ts"; - - * let f = await Deno.open("/etc/passwd"); - * const iter = iterateReaderSync(f, { - * bufSize: 1024 * 1024 - * }); - * for (const chunk of iter) { - * console.log(chunk); - * } - * f.close(); - * ``` - * - * Iterator uses an internal buffer of fixed size for efficiency; it returns - * a view on that buffer on each iteration. It is therefore caller's - * responsibility to copy contents of the buffer if needed; otherwise the - * next iteration will overwrite contents of previously returned chunk. - */ -export function* iterateReaderSync( - r: Deno.ReaderSync, - options?: { - bufSize?: number; - }, -): IterableIterator { - const bufSize = options?.bufSize ?? DEFAULT_BUFFER_SIZE; - const b = new Uint8Array(bufSize); - while (true) { - const result = r.readSync(b); - if (result === null) { - break; - } - - yield b.subarray(0, result); - } -} - -/** Copies from `src` to `dst` until either EOF (`null`) is read from `src` or - * an error occurs. It resolves to the number of bytes copied or rejects with - * the first error encountered while copying. - * - * ```ts - * import { copy } from "./conversion.ts"; - * - * const source = await Deno.open("my_file.txt"); - * const bytesCopied1 = await copy(source, Deno.stdout); - * const destination = await Deno.create("my_file_2.txt"); - * const bytesCopied2 = await copy(source, destination); - * ``` - * - * @param src The source to copy from - * @param dst The destination to copy to - * @param options Can be used to tune size of the buffer. Default size is 32kB - */ -export async function copy( - src: Deno.Reader, - dst: Deno.Writer, - options?: { - bufSize?: number; - }, -): Promise { - let n = 0; - const bufSize = options?.bufSize ?? DEFAULT_BUFFER_SIZE; - const b = new Uint8Array(bufSize); - let gotEOF = false; - while (gotEOF === false) { - const result = await src.read(b); - if (result === null) { - gotEOF = true; - } else { - let nwritten = 0; - while (nwritten < result) { - nwritten += await dst.write(b.subarray(nwritten, result)); - } - n += nwritten; - } - } - return n; -} diff --git a/vendor/deno.land/std@0.181.0/_util/asserts.ts b/vendor/deno.land/std@0.181.0/_util/asserts.ts deleted file mode 100644 index 3c5c346..0000000 --- a/vendor/deno.land/std@0.181.0/_util/asserts.ts +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -/** - * All internal non-test code, that is files that do not have `test` or `bench` in the name, must use the assertion functions within `_utils/asserts.ts` and not `testing/asserts.ts`. This is to create a separation of concerns between internal and testing assertions. - */ - -export class DenoStdInternalError extends Error { - constructor(message: string) { - super(message); - this.name = "DenoStdInternalError"; - } -} - -/** Make an assertion, if not `true`, then throw. */ -export function assert(expr: unknown, msg = ""): asserts expr { - if (!expr) { - throw new DenoStdInternalError(msg); - } -} - -/** Use this to assert unreachable code. */ -export function unreachable(): never { - throw new DenoStdInternalError("unreachable"); -} diff --git a/vendor/deno.land/std@0.181.0/_util/os.ts b/vendor/deno.land/std@0.181.0/_util/os.ts deleted file mode 100644 index a272eae..0000000 --- a/vendor/deno.land/std@0.181.0/_util/os.ts +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -export type OSType = "windows" | "linux" | "darwin" | "freebsd"; - -export const osType: OSType = (() => { - // deno-lint-ignore no-explicit-any - const { Deno } = globalThis as any; - if (typeof Deno?.build?.os === "string") { - return Deno.build.os; - } - - // deno-lint-ignore no-explicit-any - const { navigator } = globalThis as any; - if (navigator?.appVersion?.includes?.("Win")) { - return "windows"; - } - - return "linux"; -})(); - -export const isWindows = osType === "windows"; -export const isLinux = osType === "linux"; diff --git a/vendor/deno.land/std@0.181.0/fs/_util.ts b/vendor/deno.land/std@0.181.0/fs/_util.ts deleted file mode 100644 index f691399..0000000 --- a/vendor/deno.land/std@0.181.0/fs/_util.ts +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import * as path from "../path/mod.ts"; -import { basename, fromFileUrl, normalize } from "../path/mod.ts"; - -/** - * Test whether or not `dest` is a sub-directory of `src` - * @param src src file path - * @param dest dest file path - * @param sep path separator - */ -export function isSubdir( - src: string | URL, - dest: string | URL, - sep: string = path.sep, -): boolean { - if (src === dest) { - return false; - } - src = toPathString(src); - const srcArray = src.split(sep); - dest = toPathString(dest); - const destArray = dest.split(sep); - return srcArray.every((current, i) => destArray[i] === current); -} - -export type PathType = "file" | "dir" | "symlink"; - -/** - * Get a human readable file type string. - * - * @param fileInfo A FileInfo describes a file and is returned by `stat`, - * `lstat` - */ -export function getFileInfoType(fileInfo: Deno.FileInfo): PathType | undefined { - return fileInfo.isFile - ? "file" - : fileInfo.isDirectory - ? "dir" - : fileInfo.isSymlink - ? "symlink" - : undefined; -} - -export interface WalkEntry extends Deno.DirEntry { - path: string; -} - -/** Create WalkEntry for the `path` synchronously */ -export function createWalkEntrySync(path: string | URL): WalkEntry { - path = toPathString(path); - path = normalize(path); - const name = basename(path); - const info = Deno.statSync(path); - return { - path, - name, - isFile: info.isFile, - isDirectory: info.isDirectory, - isSymlink: info.isSymlink, - }; -} - -/** Create WalkEntry for the `path` asynchronously */ -export async function createWalkEntry(path: string | URL): Promise { - path = toPathString(path); - path = normalize(path); - const name = basename(path); - const info = await Deno.stat(path); - return { - path, - name, - isFile: info.isFile, - isDirectory: info.isDirectory, - isSymlink: info.isSymlink, - }; -} - -export function toPathString(path: string | URL): string { - return path instanceof URL ? fromFileUrl(path) : path; -} diff --git a/vendor/deno.land/std@0.181.0/fs/ensure_dir.ts b/vendor/deno.land/std@0.181.0/fs/ensure_dir.ts deleted file mode 100644 index a937f73..0000000 --- a/vendor/deno.land/std@0.181.0/fs/ensure_dir.ts +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import { getFileInfoType } from "./_util.ts"; - -/** - * Ensures that the directory exists. - * If the directory structure does not exist, it is created. Like mkdir -p. - * Requires the `--allow-read` and `--allow-write` flag. - * - * @example - * ```ts - * import { ensureDir } from "https://deno.land/std@$STD_VERSION/fs/mod.ts"; - * - * ensureDir("./bar"); // returns a promise - * ``` - */ -export async function ensureDir(dir: string | URL) { - try { - await Deno.mkdir(dir, { recursive: true }); - } catch (err) { - if (!(err instanceof Deno.errors.AlreadyExists)) { - throw err; - } - - const fileInfo = await Deno.lstat(dir); - if (!fileInfo.isDirectory) { - throw new Error( - `Ensure path exists, expected 'dir', got '${ - getFileInfoType(fileInfo) - }'`, - ); - } - } -} - -/** - * Ensures that the directory exists. - * If the directory structure does not exist, it is created. Like mkdir -p. - * Requires the `--allow-read` and `--allow-write` flag. - * - * @example - * ```ts - * import { ensureDirSync } from "https://deno.land/std@$STD_VERSION/fs/mod.ts"; - * - * ensureDirSync("./ensureDirSync"); // void - * ``` - */ -export function ensureDirSync(dir: string | URL) { - try { - Deno.mkdirSync(dir, { recursive: true }); - } catch (err) { - if (!(err instanceof Deno.errors.AlreadyExists)) { - throw err; - } - - const fileInfo = Deno.lstatSync(dir); - if (!fileInfo.isDirectory) { - throw new Error( - `Ensure path exists, expected 'dir', got '${ - getFileInfoType(fileInfo) - }'`, - ); - } - } -} diff --git a/vendor/deno.land/std@0.181.0/fs/expand_glob.ts b/vendor/deno.land/std@0.181.0/fs/expand_glob.ts deleted file mode 100644 index c2510db..0000000 --- a/vendor/deno.land/std@0.181.0/fs/expand_glob.ts +++ /dev/null @@ -1,306 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import { - GlobOptions, - globToRegExp, - isAbsolute, - isGlob, - joinGlobs, - resolve, - SEP_PATTERN, -} from "../path/mod.ts"; -import { walk, walkSync } from "./walk.ts"; -import { assert } from "../_util/asserts.ts"; -import { isWindows } from "../_util/os.ts"; -import { - createWalkEntry, - createWalkEntrySync, - toPathString, - WalkEntry, -} from "./_util.ts"; - -export interface ExpandGlobOptions extends Omit { - root?: string; - exclude?: string[]; - includeDirs?: boolean; - followSymlinks?: boolean; -} - -interface SplitPath { - segments: string[]; - isAbsolute: boolean; - hasTrailingSep: boolean; - // Defined for any absolute Windows path. - winRoot?: string; -} - -function split(path: string): SplitPath { - const s = SEP_PATTERN.source; - const segments = path - .replace(new RegExp(`^${s}|${s}$`, "g"), "") - .split(SEP_PATTERN); - const isAbsolute_ = isAbsolute(path); - return { - segments, - isAbsolute: isAbsolute_, - hasTrailingSep: !!path.match(new RegExp(`${s}$`)), - winRoot: isWindows && isAbsolute_ ? segments.shift() : undefined, - }; -} - -function throwUnlessNotFound(error: unknown) { - if (!(error instanceof Deno.errors.NotFound)) { - throw error; - } -} - -function comparePath(a: WalkEntry, b: WalkEntry): number { - if (a.path < b.path) return -1; - if (a.path > b.path) return 1; - return 0; -} - -/** - * Expand the glob string from the specified `root` directory and yield each - * result as a `WalkEntry` object. - * - * See [`globToRegExp()`](../path/glob.ts#globToRegExp) for details on supported - * syntax. - * - * @example - * ```ts - * import { expandGlob } from "https://deno.land/std@$STD_VERSION/fs/expand_glob.ts"; - * for await (const file of expandGlob("**\/*.ts")) { - * console.log(file); - * } - * ``` - */ -export async function* expandGlob( - glob: string | URL, - { - root = Deno.cwd(), - exclude = [], - includeDirs = true, - extended = true, - globstar = true, - caseInsensitive, - followSymlinks, - }: ExpandGlobOptions = {}, -): AsyncIterableIterator { - const globOptions: GlobOptions = { extended, globstar, caseInsensitive }; - const absRoot = resolve(root); - const resolveFromRoot = (path: string): string => resolve(absRoot, path); - const excludePatterns = exclude - .map(resolveFromRoot) - .map((s: string): RegExp => globToRegExp(s, globOptions)); - const shouldInclude = (path: string): boolean => - !excludePatterns.some((p: RegExp): boolean => !!path.match(p)); - const { - segments, - isAbsolute: isGlobAbsolute, - hasTrailingSep, - winRoot, - } = split(toPathString(glob)); - - let fixedRoot = isGlobAbsolute - ? winRoot != undefined ? winRoot : "/" - : absRoot; - while (segments.length > 0 && !isGlob(segments[0])) { - const seg = segments.shift(); - assert(seg != null); - fixedRoot = joinGlobs([fixedRoot, seg], globOptions); - } - - let fixedRootInfo: WalkEntry; - try { - fixedRootInfo = await createWalkEntry(fixedRoot); - } catch (error) { - return throwUnlessNotFound(error); - } - - async function* advanceMatch( - walkInfo: WalkEntry, - globSegment: string, - ): AsyncIterableIterator { - if (!walkInfo.isDirectory) { - return; - } else if (globSegment == "..") { - const parentPath = joinGlobs([walkInfo.path, ".."], globOptions); - try { - if (shouldInclude(parentPath)) { - return yield await createWalkEntry(parentPath); - } - } catch (error) { - throwUnlessNotFound(error); - } - return; - } else if (globSegment == "**") { - return yield* walk(walkInfo.path, { - skip: excludePatterns, - maxDepth: globstar ? Infinity : 1, - followSymlinks, - }); - } - const globPattern = globToRegExp(globSegment, globOptions); - for await ( - const walkEntry of walk(walkInfo.path, { - maxDepth: 1, - skip: excludePatterns, - followSymlinks, - }) - ) { - if ( - walkEntry.path != walkInfo.path && - walkEntry.name.match(globPattern) - ) { - yield walkEntry; - } - } - } - - let currentMatches: WalkEntry[] = [fixedRootInfo]; - for (const segment of segments) { - // Advancing the list of current matches may introduce duplicates, so we - // pass everything through this Map. - const nextMatchMap: Map = new Map(); - await Promise.all( - currentMatches.map(async (currentMatch) => { - for await (const nextMatch of advanceMatch(currentMatch, segment)) { - nextMatchMap.set(nextMatch.path, nextMatch); - } - }), - ); - currentMatches = [...nextMatchMap.values()].sort(comparePath); - } - - if (hasTrailingSep) { - currentMatches = currentMatches.filter( - (entry: WalkEntry): boolean => entry.isDirectory, - ); - } - if (!includeDirs) { - currentMatches = currentMatches.filter( - (entry: WalkEntry): boolean => !entry.isDirectory, - ); - } - yield* currentMatches; -} - -/** - * Synchronous version of `expandGlob()`. - * - * @example - * ```ts - * import { expandGlobSync } from "https://deno.land/std@$STD_VERSION/fs/expand_glob.ts"; - * for (const file of expandGlobSync("**\/*.ts")) { - * console.log(file); - * } - * ``` - */ -export function* expandGlobSync( - glob: string | URL, - { - root = Deno.cwd(), - exclude = [], - includeDirs = true, - extended = true, - globstar = true, - caseInsensitive, - followSymlinks, - }: ExpandGlobOptions = {}, -): IterableIterator { - const globOptions: GlobOptions = { extended, globstar, caseInsensitive }; - const absRoot = resolve(root); - const resolveFromRoot = (path: string): string => resolve(absRoot, path); - const excludePatterns = exclude - .map(resolveFromRoot) - .map((s: string): RegExp => globToRegExp(s, globOptions)); - const shouldInclude = (path: string): boolean => - !excludePatterns.some((p: RegExp): boolean => !!path.match(p)); - const { - segments, - isAbsolute: isGlobAbsolute, - hasTrailingSep, - winRoot, - } = split(toPathString(glob)); - - let fixedRoot = isGlobAbsolute - ? winRoot != undefined ? winRoot : "/" - : absRoot; - while (segments.length > 0 && !isGlob(segments[0])) { - const seg = segments.shift(); - assert(seg != null); - fixedRoot = joinGlobs([fixedRoot, seg], globOptions); - } - - let fixedRootInfo: WalkEntry; - try { - fixedRootInfo = createWalkEntrySync(fixedRoot); - } catch (error) { - return throwUnlessNotFound(error); - } - - function* advanceMatch( - walkInfo: WalkEntry, - globSegment: string, - ): IterableIterator { - if (!walkInfo.isDirectory) { - return; - } else if (globSegment == "..") { - const parentPath = joinGlobs([walkInfo.path, ".."], globOptions); - try { - if (shouldInclude(parentPath)) { - return yield createWalkEntrySync(parentPath); - } - } catch (error) { - throwUnlessNotFound(error); - } - return; - } else if (globSegment == "**") { - return yield* walkSync(walkInfo.path, { - skip: excludePatterns, - maxDepth: globstar ? Infinity : 1, - followSymlinks, - }); - } - const globPattern = globToRegExp(globSegment, globOptions); - for ( - const walkEntry of walkSync(walkInfo.path, { - maxDepth: 1, - skip: excludePatterns, - followSymlinks, - }) - ) { - if ( - walkEntry.path != walkInfo.path && - walkEntry.name.match(globPattern) - ) { - yield walkEntry; - } - } - } - - let currentMatches: WalkEntry[] = [fixedRootInfo]; - for (const segment of segments) { - // Advancing the list of current matches may introduce duplicates, so we - // pass everything through this Map. - const nextMatchMap: Map = new Map(); - for (const currentMatch of currentMatches) { - for (const nextMatch of advanceMatch(currentMatch, segment)) { - nextMatchMap.set(nextMatch.path, nextMatch); - } - } - currentMatches = [...nextMatchMap.values()].sort(comparePath); - } - - if (hasTrailingSep) { - currentMatches = currentMatches.filter( - (entry: WalkEntry): boolean => entry.isDirectory, - ); - } - if (!includeDirs) { - currentMatches = currentMatches.filter( - (entry: WalkEntry): boolean => !entry.isDirectory, - ); - } - yield* currentMatches; -} diff --git a/vendor/deno.land/std@0.181.0/fs/walk.ts b/vendor/deno.land/std@0.181.0/fs/walk.ts deleted file mode 100644 index 19bd6a2..0000000 --- a/vendor/deno.land/std@0.181.0/fs/walk.ts +++ /dev/null @@ -1,189 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -// Documentation and interface for walk were adapted from Go -// https://golang.org/pkg/path/filepath/#Walk -// Copyright 2009 The Go Authors. All rights reserved. BSD license. -import { assert } from "../_util/asserts.ts"; -import { join, normalize } from "../path/mod.ts"; -import { - createWalkEntry, - createWalkEntrySync, - toPathString, - WalkEntry, -} from "./_util.ts"; - -function include( - path: string, - exts?: string[], - match?: RegExp[], - skip?: RegExp[], -): boolean { - if (exts && !exts.some((ext): boolean => path.endsWith(ext))) { - return false; - } - if (match && !match.some((pattern): boolean => !!path.match(pattern))) { - return false; - } - if (skip && skip.some((pattern): boolean => !!path.match(pattern))) { - return false; - } - return true; -} - -function wrapErrorWithRootPath(err: unknown, root: string) { - if (err instanceof Error && "root" in err) return err; - const e = new Error() as Error & { root: string }; - e.root = root; - e.message = err instanceof Error - ? `${err.message} for path "${root}"` - : `[non-error thrown] for path "${root}"`; - e.stack = err instanceof Error ? err.stack : undefined; - e.cause = err instanceof Error ? err.cause : undefined; - return e; -} - -export interface WalkOptions { - /** @default {Infinity} */ - maxDepth?: number; - /** @default {true} */ - includeFiles?: boolean; - /** @default {true} */ - includeDirs?: boolean; - /** @default {false} */ - followSymlinks?: boolean; - exts?: string[]; - match?: RegExp[]; - skip?: RegExp[]; -} -export type { WalkEntry }; - -/** - * Walks the file tree rooted at root, yielding each file or directory in the - * tree filtered according to the given options. - * - * @example - * ```ts - * import { walk } from "https://deno.land/std@$STD_VERSION/fs/walk.ts"; - * import { assert } from "https://deno.land/std@$STD_VERSION/testing/asserts.ts"; - * - * for await (const entry of walk(".")) { - * console.log(entry.path); - * assert(entry.isFile); - * } - * ``` - */ -export async function* walk( - root: string | URL, - { - maxDepth = Infinity, - includeFiles = true, - includeDirs = true, - followSymlinks = false, - exts = undefined, - match = undefined, - skip = undefined, - }: WalkOptions = {}, -): AsyncIterableIterator { - if (maxDepth < 0) { - return; - } - root = toPathString(root); - if (includeDirs && include(root, exts, match, skip)) { - yield await createWalkEntry(root); - } - if (maxDepth < 1 || !include(root, undefined, undefined, skip)) { - return; - } - try { - for await (const entry of Deno.readDir(root)) { - assert(entry.name != null); - let path = join(root, entry.name); - - let { isSymlink, isDirectory } = entry; - - if (isSymlink) { - if (!followSymlinks) continue; - path = await Deno.realPath(path); - // Caveat emptor: don't assume |path| is not a symlink. realpath() - // resolves symlinks but another process can replace the file system - // entity with a different type of entity before we call lstat(). - ({ isSymlink, isDirectory } = await Deno.lstat(path)); - } - - if (isSymlink || isDirectory) { - yield* walk(path, { - maxDepth: maxDepth - 1, - includeFiles, - includeDirs, - followSymlinks, - exts, - match, - skip, - }); - } else if (includeFiles && include(path, exts, match, skip)) { - yield { path, ...entry }; - } - } - } catch (err) { - throw wrapErrorWithRootPath(err, normalize(root)); - } -} - -/** Same as walk() but uses synchronous ops */ -export function* walkSync( - root: string | URL, - { - maxDepth = Infinity, - includeFiles = true, - includeDirs = true, - followSymlinks = false, - exts = undefined, - match = undefined, - skip = undefined, - }: WalkOptions = {}, -): IterableIterator { - root = toPathString(root); - if (maxDepth < 0) { - return; - } - if (includeDirs && include(root, exts, match, skip)) { - yield createWalkEntrySync(root); - } - if (maxDepth < 1 || !include(root, undefined, undefined, skip)) { - return; - } - let entries; - try { - entries = Deno.readDirSync(root); - } catch (err) { - throw wrapErrorWithRootPath(err, normalize(root)); - } - for (const entry of entries) { - assert(entry.name != null); - let path = join(root, entry.name); - - let { isSymlink, isDirectory } = entry; - - if (isSymlink) { - if (!followSymlinks) continue; - path = Deno.realPathSync(path); - // Caveat emptor: don't assume |path| is not a symlink. realpath() - // resolves symlinks but another process can replace the file system - // entity with a different type of entity before we call lstat(). - ({ isSymlink, isDirectory } = Deno.lstatSync(path)); - } - - if (isSymlink || isDirectory) { - yield* walkSync(path, { - maxDepth: maxDepth - 1, - includeFiles, - includeDirs, - followSymlinks, - exts, - match, - skip, - }); - } else if (includeFiles && include(path, exts, match, skip)) { - yield { path, ...entry }; - } - } -} diff --git a/vendor/deno.land/std@0.181.0/path/_constants.ts b/vendor/deno.land/std@0.181.0/path/_constants.ts deleted file mode 100644 index 8da22a8..0000000 --- a/vendor/deno.land/std@0.181.0/path/_constants.ts +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -// Copyright the Browserify authors. MIT License. -// Ported from https://github.com/browserify/path-browserify/ -// This module is browser compatible. - -// Alphabet chars. -export const CHAR_UPPERCASE_A = 65; /* A */ -export const CHAR_LOWERCASE_A = 97; /* a */ -export const CHAR_UPPERCASE_Z = 90; /* Z */ -export const CHAR_LOWERCASE_Z = 122; /* z */ - -// Non-alphabetic chars. -export const CHAR_DOT = 46; /* . */ -export const CHAR_FORWARD_SLASH = 47; /* / */ -export const CHAR_BACKWARD_SLASH = 92; /* \ */ -export const CHAR_VERTICAL_LINE = 124; /* | */ -export const CHAR_COLON = 58; /* : */ -export const CHAR_QUESTION_MARK = 63; /* ? */ -export const CHAR_UNDERSCORE = 95; /* _ */ -export const CHAR_LINE_FEED = 10; /* \n */ -export const CHAR_CARRIAGE_RETURN = 13; /* \r */ -export const CHAR_TAB = 9; /* \t */ -export const CHAR_FORM_FEED = 12; /* \f */ -export const CHAR_EXCLAMATION_MARK = 33; /* ! */ -export const CHAR_HASH = 35; /* # */ -export const CHAR_SPACE = 32; /* */ -export const CHAR_NO_BREAK_SPACE = 160; /* \u00A0 */ -export const CHAR_ZERO_WIDTH_NOBREAK_SPACE = 65279; /* \uFEFF */ -export const CHAR_LEFT_SQUARE_BRACKET = 91; /* [ */ -export const CHAR_RIGHT_SQUARE_BRACKET = 93; /* ] */ -export const CHAR_LEFT_ANGLE_BRACKET = 60; /* < */ -export const CHAR_RIGHT_ANGLE_BRACKET = 62; /* > */ -export const CHAR_LEFT_CURLY_BRACKET = 123; /* { */ -export const CHAR_RIGHT_CURLY_BRACKET = 125; /* } */ -export const CHAR_HYPHEN_MINUS = 45; /* - */ -export const CHAR_PLUS = 43; /* + */ -export const CHAR_DOUBLE_QUOTE = 34; /* " */ -export const CHAR_SINGLE_QUOTE = 39; /* ' */ -export const CHAR_PERCENT = 37; /* % */ -export const CHAR_SEMICOLON = 59; /* ; */ -export const CHAR_CIRCUMFLEX_ACCENT = 94; /* ^ */ -export const CHAR_GRAVE_ACCENT = 96; /* ` */ -export const CHAR_AT = 64; /* @ */ -export const CHAR_AMPERSAND = 38; /* & */ -export const CHAR_EQUAL = 61; /* = */ - -// Digits -export const CHAR_0 = 48; /* 0 */ -export const CHAR_9 = 57; /* 9 */ diff --git a/vendor/deno.land/std@0.181.0/path/_interface.ts b/vendor/deno.land/std@0.181.0/path/_interface.ts deleted file mode 100644 index 153f3de..0000000 --- a/vendor/deno.land/std@0.181.0/path/_interface.ts +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -/** - * A parsed path object generated by path.parse() or consumed by path.format(). - */ -export interface ParsedPath { - /** - * The root of the path such as '/' or 'c:\' - */ - root: string; - /** - * The full directory path such as '/home/user/dir' or 'c:\path\dir' - */ - dir: string; - /** - * The file name including extension (if any) such as 'index.html' - */ - base: string; - /** - * The file extension (if any) such as '.html' - */ - ext: string; - /** - * The file name without extension (if any) such as 'index' - */ - name: string; -} - -export type FormatInputPathObject = Partial; diff --git a/vendor/deno.land/std@0.181.0/path/_util.ts b/vendor/deno.land/std@0.181.0/path/_util.ts deleted file mode 100644 index b84ff91..0000000 --- a/vendor/deno.land/std@0.181.0/path/_util.ts +++ /dev/null @@ -1,194 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -// Copyright the Browserify authors. MIT License. -// Ported from https://github.com/browserify/path-browserify/ -// This module is browser compatible. - -import type { FormatInputPathObject } from "./_interface.ts"; -import { - CHAR_BACKWARD_SLASH, - CHAR_DOT, - CHAR_FORWARD_SLASH, - CHAR_LOWERCASE_A, - CHAR_LOWERCASE_Z, - CHAR_UPPERCASE_A, - CHAR_UPPERCASE_Z, -} from "./_constants.ts"; - -export function assertPath(path: string) { - if (typeof path !== "string") { - throw new TypeError( - `Path must be a string. Received ${JSON.stringify(path)}`, - ); - } -} - -export function isPosixPathSeparator(code: number): boolean { - return code === CHAR_FORWARD_SLASH; -} - -export function isPathSeparator(code: number): boolean { - return isPosixPathSeparator(code) || code === CHAR_BACKWARD_SLASH; -} - -export function isWindowsDeviceRoot(code: number): boolean { - return ( - (code >= CHAR_LOWERCASE_A && code <= CHAR_LOWERCASE_Z) || - (code >= CHAR_UPPERCASE_A && code <= CHAR_UPPERCASE_Z) - ); -} - -// Resolves . and .. elements in a path with directory names -export function normalizeString( - path: string, - allowAboveRoot: boolean, - separator: string, - isPathSeparator: (code: number) => boolean, -): string { - let res = ""; - let lastSegmentLength = 0; - let lastSlash = -1; - let dots = 0; - let code: number | undefined; - for (let i = 0, len = path.length; i <= len; ++i) { - if (i < len) code = path.charCodeAt(i); - else if (isPathSeparator(code!)) break; - else code = CHAR_FORWARD_SLASH; - - if (isPathSeparator(code!)) { - if (lastSlash === i - 1 || dots === 1) { - // NOOP - } else if (lastSlash !== i - 1 && dots === 2) { - if ( - res.length < 2 || - lastSegmentLength !== 2 || - res.charCodeAt(res.length - 1) !== CHAR_DOT || - res.charCodeAt(res.length - 2) !== CHAR_DOT - ) { - if (res.length > 2) { - const lastSlashIndex = res.lastIndexOf(separator); - if (lastSlashIndex === -1) { - res = ""; - lastSegmentLength = 0; - } else { - res = res.slice(0, lastSlashIndex); - lastSegmentLength = res.length - 1 - res.lastIndexOf(separator); - } - lastSlash = i; - dots = 0; - continue; - } else if (res.length === 2 || res.length === 1) { - res = ""; - lastSegmentLength = 0; - lastSlash = i; - dots = 0; - continue; - } - } - if (allowAboveRoot) { - if (res.length > 0) res += `${separator}..`; - else res = ".."; - lastSegmentLength = 2; - } - } else { - if (res.length > 0) res += separator + path.slice(lastSlash + 1, i); - else res = path.slice(lastSlash + 1, i); - lastSegmentLength = i - lastSlash - 1; - } - lastSlash = i; - dots = 0; - } else if (code === CHAR_DOT && dots !== -1) { - ++dots; - } else { - dots = -1; - } - } - return res; -} - -export function _format( - sep: string, - pathObject: FormatInputPathObject, -): string { - const dir: string | undefined = pathObject.dir || pathObject.root; - const base: string = pathObject.base || - (pathObject.name || "") + (pathObject.ext || ""); - if (!dir) return base; - if (base === sep) return dir; - if (dir === pathObject.root) return dir + base; - return dir + sep + base; -} - -const WHITESPACE_ENCODINGS: Record = { - "\u0009": "%09", - "\u000A": "%0A", - "\u000B": "%0B", - "\u000C": "%0C", - "\u000D": "%0D", - "\u0020": "%20", -}; - -export function encodeWhitespace(string: string): string { - return string.replaceAll(/[\s]/g, (c) => { - return WHITESPACE_ENCODINGS[c] ?? c; - }); -} - -export function lastPathSegment( - path: string, - isSep: (char: number) => boolean, - start = 0, -): string { - let matchedNonSeparator = false; - let end = path.length; - - for (let i = path.length - 1; i >= start; --i) { - if (isSep(path.charCodeAt(i))) { - if (matchedNonSeparator) { - start = i + 1; - break; - } - } else if (!matchedNonSeparator) { - matchedNonSeparator = true; - end = i + 1; - } - } - - return path.slice(start, end); -} - -export function stripTrailingSeparators( - segment: string, - isSep: (char: number) => boolean, -): string { - if (segment.length <= 1) { - return segment; - } - - let end = segment.length; - - for (let i = segment.length - 1; i > 0; i--) { - if (isSep(segment.charCodeAt(i))) { - end = i; - } else { - break; - } - } - - return segment.slice(0, end); -} - -export function stripSuffix(name: string, suffix: string): string { - if (suffix.length >= name.length) { - return name; - } - - const lenDiff = name.length - suffix.length; - - for (let i = suffix.length - 1; i >= 0; --i) { - if (name.charCodeAt(lenDiff + i) !== suffix.charCodeAt(i)) { - return name; - } - } - - return name.slice(0, -suffix.length); -} diff --git a/vendor/deno.land/std@0.181.0/path/common.ts b/vendor/deno.land/std@0.181.0/path/common.ts deleted file mode 100644 index 791105a..0000000 --- a/vendor/deno.land/std@0.181.0/path/common.ts +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -import { SEP } from "./separator.ts"; - -/** Determines the common path from a set of paths, using an optional separator, - * which defaults to the OS default separator. - * - * ```ts - * import { common } from "https://deno.land/std@$STD_VERSION/path/mod.ts"; - * const p = common([ - * "./deno/std/path/mod.ts", - * "./deno/std/fs/mod.ts", - * ]); - * console.log(p); // "./deno/std/" - * ``` - */ -export function common(paths: string[], sep = SEP): string { - const [first = "", ...remaining] = paths; - if (first === "" || remaining.length === 0) { - return first.substring(0, first.lastIndexOf(sep) + 1); - } - const parts = first.split(sep); - - let endOfPrefix = parts.length; - for (const path of remaining) { - const compare = path.split(sep); - for (let i = 0; i < endOfPrefix; i++) { - if (compare[i] !== parts[i]) { - endOfPrefix = i; - } - } - - if (endOfPrefix === 0) { - return ""; - } - } - const prefix = parts.slice(0, endOfPrefix).join(sep); - return prefix.endsWith(sep) ? prefix : `${prefix}${sep}`; -} diff --git a/vendor/deno.land/std@0.181.0/path/glob.ts b/vendor/deno.land/std@0.181.0/path/glob.ts deleted file mode 100644 index 265dc4a..0000000 --- a/vendor/deno.land/std@0.181.0/path/glob.ts +++ /dev/null @@ -1,418 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -import { isWindows, osType } from "../_util/os.ts"; -import { SEP, SEP_PATTERN } from "./separator.ts"; -import * as _win32 from "./win32.ts"; -import * as _posix from "./posix.ts"; -import type { OSType } from "../_util/os.ts"; - -const path = isWindows ? _win32 : _posix; -const { join, normalize } = path; - -export interface GlobOptions { - /** Extended glob syntax. - * See https://www.linuxjournal.com/content/bash-extended-globbing. - * - * @default {true} - */ - extended?: boolean; - /** Globstar syntax. - * See https://www.linuxjournal.com/content/globstar-new-bash-globbing-option. - * If false, `**` is treated like `*`. - * - * @default {true} - */ - globstar?: boolean; - /** Whether globstar should be case-insensitive. */ - caseInsensitive?: boolean; - /** Operating system. Defaults to the native OS. */ - os?: OSType; -} - -export type GlobToRegExpOptions = GlobOptions; - -const regExpEscapeChars = [ - "!", - "$", - "(", - ")", - "*", - "+", - ".", - "=", - "?", - "[", - "\\", - "^", - "{", - "|", -]; -const rangeEscapeChars = ["-", "\\", "]"]; - -/** Convert a glob string to a regular expression. - * - * Tries to match bash glob expansion as closely as possible. - * - * Basic glob syntax: - * - `*` - Matches everything without leaving the path segment. - * - `?` - Matches any single character. - * - `{foo,bar}` - Matches `foo` or `bar`. - * - `[abcd]` - Matches `a`, `b`, `c` or `d`. - * - `[a-d]` - Matches `a`, `b`, `c` or `d`. - * - `[!abcd]` - Matches any single character besides `a`, `b`, `c` or `d`. - * - `[[::]]` - Matches any character belonging to ``. - * - `[[:alnum:]]` - Matches any digit or letter. - * - `[[:digit:]abc]` - Matches any digit, `a`, `b` or `c`. - * - See https://facelessuser.github.io/wcmatch/glob/#posix-character-classes - * for a complete list of supported character classes. - * - `\` - Escapes the next character for an `os` other than `"windows"`. - * - \` - Escapes the next character for `os` set to `"windows"`. - * - `/` - Path separator. - * - `\` - Additional path separator only for `os` set to `"windows"`. - * - * Extended syntax: - * - Requires `{ extended: true }`. - * - `?(foo|bar)` - Matches 0 or 1 instance of `{foo,bar}`. - * - `@(foo|bar)` - Matches 1 instance of `{foo,bar}`. They behave the same. - * - `*(foo|bar)` - Matches _n_ instances of `{foo,bar}`. - * - `+(foo|bar)` - Matches _n > 0_ instances of `{foo,bar}`. - * - `!(foo|bar)` - Matches anything other than `{foo,bar}`. - * - See https://www.linuxjournal.com/content/bash-extended-globbing. - * - * Globstar syntax: - * - Requires `{ globstar: true }`. - * - `**` - Matches any number of any path segments. - * - Must comprise its entire path segment in the provided glob. - * - See https://www.linuxjournal.com/content/globstar-new-bash-globbing-option. - * - * Note the following properties: - * - The generated `RegExp` is anchored at both start and end. - * - Repeating and trailing separators are tolerated. Trailing separators in the - * provided glob have no meaning and are discarded. - * - Absolute globs will only match absolute paths, etc. - * - Empty globs will match nothing. - * - Any special glob syntax must be contained to one path segment. For example, - * `?(foo|bar/baz)` is invalid. The separator will take precedence and the - * first segment ends with an unclosed group. - * - If a path segment ends with unclosed groups or a dangling escape prefix, a - * parse error has occurred. Every character for that segment is taken - * literally in this event. - * - * Limitations: - * - A negative group like `!(foo|bar)` will wrongly be converted to a negative - * look-ahead followed by a wildcard. This means that `!(foo).js` will wrongly - * fail to match `foobar.js`, even though `foobar` is not `foo`. Effectively, - * `!(foo|bar)` is treated like `!(@(foo|bar)*)`. This will work correctly if - * the group occurs not nested at the end of the segment. */ -export function globToRegExp( - glob: string, - { - extended = true, - globstar: globstarOption = true, - os = osType, - caseInsensitive = false, - }: GlobToRegExpOptions = {}, -): RegExp { - if (glob == "") { - return /(?!)/; - } - - const sep = os == "windows" ? "(?:\\\\|/)+" : "/+"; - const sepMaybe = os == "windows" ? "(?:\\\\|/)*" : "/*"; - const seps = os == "windows" ? ["\\", "/"] : ["/"]; - const globstar = os == "windows" - ? "(?:[^\\\\/]*(?:\\\\|/|$)+)*" - : "(?:[^/]*(?:/|$)+)*"; - const wildcard = os == "windows" ? "[^\\\\/]*" : "[^/]*"; - const escapePrefix = os == "windows" ? "`" : "\\"; - - // Remove trailing separators. - let newLength = glob.length; - for (; newLength > 1 && seps.includes(glob[newLength - 1]); newLength--); - glob = glob.slice(0, newLength); - - let regExpString = ""; - - // Terminates correctly. Trust that `j` is incremented every iteration. - for (let j = 0; j < glob.length;) { - let segment = ""; - const groupStack: string[] = []; - let inRange = false; - let inEscape = false; - let endsWithSep = false; - let i = j; - - // Terminates with `i` at the non-inclusive end of the current segment. - for (; i < glob.length && !seps.includes(glob[i]); i++) { - if (inEscape) { - inEscape = false; - const escapeChars = inRange ? rangeEscapeChars : regExpEscapeChars; - segment += escapeChars.includes(glob[i]) ? `\\${glob[i]}` : glob[i]; - continue; - } - - if (glob[i] == escapePrefix) { - inEscape = true; - continue; - } - - if (glob[i] == "[") { - if (!inRange) { - inRange = true; - segment += "["; - if (glob[i + 1] == "!") { - i++; - segment += "^"; - } else if (glob[i + 1] == "^") { - i++; - segment += "\\^"; - } - continue; - } else if (glob[i + 1] == ":") { - let k = i + 1; - let value = ""; - while (glob[k + 1] != null && glob[k + 1] != ":") { - value += glob[k + 1]; - k++; - } - if (glob[k + 1] == ":" && glob[k + 2] == "]") { - i = k + 2; - if (value == "alnum") segment += "\\dA-Za-z"; - else if (value == "alpha") segment += "A-Za-z"; - else if (value == "ascii") segment += "\x00-\x7F"; - else if (value == "blank") segment += "\t "; - else if (value == "cntrl") segment += "\x00-\x1F\x7F"; - else if (value == "digit") segment += "\\d"; - else if (value == "graph") segment += "\x21-\x7E"; - else if (value == "lower") segment += "a-z"; - else if (value == "print") segment += "\x20-\x7E"; - else if (value == "punct") { - segment += "!\"#$%&'()*+,\\-./:;<=>?@[\\\\\\]^_‘{|}~"; - } else if (value == "space") segment += "\\s\v"; - else if (value == "upper") segment += "A-Z"; - else if (value == "word") segment += "\\w"; - else if (value == "xdigit") segment += "\\dA-Fa-f"; - continue; - } - } - } - - if (glob[i] == "]" && inRange) { - inRange = false; - segment += "]"; - continue; - } - - if (inRange) { - if (glob[i] == "\\") { - segment += `\\\\`; - } else { - segment += glob[i]; - } - continue; - } - - if ( - glob[i] == ")" && groupStack.length > 0 && - groupStack[groupStack.length - 1] != "BRACE" - ) { - segment += ")"; - const type = groupStack.pop()!; - if (type == "!") { - segment += wildcard; - } else if (type != "@") { - segment += type; - } - continue; - } - - if ( - glob[i] == "|" && groupStack.length > 0 && - groupStack[groupStack.length - 1] != "BRACE" - ) { - segment += "|"; - continue; - } - - if (glob[i] == "+" && extended && glob[i + 1] == "(") { - i++; - groupStack.push("+"); - segment += "(?:"; - continue; - } - - if (glob[i] == "@" && extended && glob[i + 1] == "(") { - i++; - groupStack.push("@"); - segment += "(?:"; - continue; - } - - if (glob[i] == "?") { - if (extended && glob[i + 1] == "(") { - i++; - groupStack.push("?"); - segment += "(?:"; - } else { - segment += "."; - } - continue; - } - - if (glob[i] == "!" && extended && glob[i + 1] == "(") { - i++; - groupStack.push("!"); - segment += "(?!"; - continue; - } - - if (glob[i] == "{") { - groupStack.push("BRACE"); - segment += "(?:"; - continue; - } - - if (glob[i] == "}" && groupStack[groupStack.length - 1] == "BRACE") { - groupStack.pop(); - segment += ")"; - continue; - } - - if (glob[i] == "," && groupStack[groupStack.length - 1] == "BRACE") { - segment += "|"; - continue; - } - - if (glob[i] == "*") { - if (extended && glob[i + 1] == "(") { - i++; - groupStack.push("*"); - segment += "(?:"; - } else { - const prevChar = glob[i - 1]; - let numStars = 1; - while (glob[i + 1] == "*") { - i++; - numStars++; - } - const nextChar = glob[i + 1]; - if ( - globstarOption && numStars == 2 && - [...seps, undefined].includes(prevChar) && - [...seps, undefined].includes(nextChar) - ) { - segment += globstar; - endsWithSep = true; - } else { - segment += wildcard; - } - } - continue; - } - - segment += regExpEscapeChars.includes(glob[i]) ? `\\${glob[i]}` : glob[i]; - } - - // Check for unclosed groups or a dangling backslash. - if (groupStack.length > 0 || inRange || inEscape) { - // Parse failure. Take all characters from this segment literally. - segment = ""; - for (const c of glob.slice(j, i)) { - segment += regExpEscapeChars.includes(c) ? `\\${c}` : c; - endsWithSep = false; - } - } - - regExpString += segment; - if (!endsWithSep) { - regExpString += i < glob.length ? sep : sepMaybe; - endsWithSep = true; - } - - // Terminates with `i` at the start of the next segment. - while (seps.includes(glob[i])) i++; - - // Check that the next value of `j` is indeed higher than the current value. - if (!(i > j)) { - throw new Error("Assertion failure: i > j (potential infinite loop)"); - } - j = i; - } - - regExpString = `^${regExpString}$`; - return new RegExp(regExpString, caseInsensitive ? "i" : ""); -} - -/** Test whether the given string is a glob */ -export function isGlob(str: string): boolean { - const chars: Record = { "{": "}", "(": ")", "[": "]" }; - const regex = - /\\(.)|(^!|\*|\?|[\].+)]\?|\[[^\\\]]+\]|\{[^\\}]+\}|\(\?[:!=][^\\)]+\)|\([^|]+\|[^\\)]+\))/; - - if (str === "") { - return false; - } - - let match: RegExpExecArray | null; - - while ((match = regex.exec(str))) { - if (match[2]) return true; - let idx = match.index + match[0].length; - - // if an open bracket/brace/paren is escaped, - // set the index to the next closing character - const open = match[1]; - const close = open ? chars[open] : null; - if (open && close) { - const n = str.indexOf(close, idx); - if (n !== -1) { - idx = n + 1; - } - } - - str = str.slice(idx); - } - - return false; -} - -/** Like normalize(), but doesn't collapse "**\/.." when `globstar` is true. */ -export function normalizeGlob( - glob: string, - { globstar = false }: GlobOptions = {}, -): string { - if (glob.match(/\0/g)) { - throw new Error(`Glob contains invalid characters: "${glob}"`); - } - if (!globstar) { - return normalize(glob); - } - const s = SEP_PATTERN.source; - const badParentPattern = new RegExp( - `(?<=(${s}|^)\\*\\*${s})\\.\\.(?=${s}|$)`, - "g", - ); - return normalize(glob.replace(badParentPattern, "\0")).replace(/\0/g, ".."); -} - -/** Like join(), but doesn't collapse "**\/.." when `globstar` is true. */ -export function joinGlobs( - globs: string[], - { extended = true, globstar = false }: GlobOptions = {}, -): string { - if (!globstar || globs.length == 0) { - return join(...globs); - } - if (globs.length === 0) return "."; - let joined: string | undefined; - for (const glob of globs) { - const path = glob; - if (path.length > 0) { - if (!joined) joined = path; - else joined += `${SEP}${path}`; - } - } - if (!joined) return "."; - return normalizeGlob(joined, { extended, globstar }); -} diff --git a/vendor/deno.land/std@0.181.0/path/mod.ts b/vendor/deno.land/std@0.181.0/path/mod.ts deleted file mode 100644 index a51b831..0000000 --- a/vendor/deno.land/std@0.181.0/path/mod.ts +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -// Copyright the Browserify authors. MIT License. -// Ported mostly from https://github.com/browserify/path-browserify/ -// This module is browser compatible. - -/** - * Utilities for working with OS-specific file paths. - * - * Codes in the examples uses POSIX path but it automatically use Windows path - * on Windows. Use methods under `posix` or `win32` object instead to handle non - * platform specific path like: - * ```ts - * import { posix, win32 } from "https://deno.land/std@$STD_VERSION/path/mod.ts"; - * const p1 = posix.fromFileUrl("file:///home/foo"); - * const p2 = win32.fromFileUrl("file:///home/foo"); - * console.log(p1); // "/home/foo" - * console.log(p2); // "\\home\\foo" - * ``` - * - * This module is browser compatible. - * - * @module - */ - -import { isWindows } from "../_util/os.ts"; -import * as _win32 from "./win32.ts"; -import * as _posix from "./posix.ts"; - -const path = isWindows ? _win32 : _posix; - -export const win32 = _win32; -export const posix = _posix; -export const { - basename, - delimiter, - dirname, - extname, - format, - fromFileUrl, - isAbsolute, - join, - normalize, - parse, - relative, - resolve, - sep, - toFileUrl, - toNamespacedPath, -} = path; - -export * from "./common.ts"; -export { SEP, SEP_PATTERN } from "./separator.ts"; -export * from "./_interface.ts"; -export * from "./glob.ts"; diff --git a/vendor/deno.land/std@0.181.0/path/posix.ts b/vendor/deno.land/std@0.181.0/path/posix.ts deleted file mode 100644 index 472ccaf..0000000 --- a/vendor/deno.land/std@0.181.0/path/posix.ts +++ /dev/null @@ -1,487 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -// Copyright the Browserify authors. MIT License. -// Ported from https://github.com/browserify/path-browserify/ -// This module is browser compatible. - -import type { FormatInputPathObject, ParsedPath } from "./_interface.ts"; -import { CHAR_DOT } from "./_constants.ts"; - -import { - _format, - assertPath, - encodeWhitespace, - isPosixPathSeparator, - lastPathSegment, - normalizeString, - stripSuffix, - stripTrailingSeparators, -} from "./_util.ts"; - -export const sep = "/"; -export const delimiter = ":"; - -// path.resolve([from ...], to) -/** - * Resolves `pathSegments` into an absolute path. - * @param pathSegments an array of path segments - */ -export function resolve(...pathSegments: string[]): string { - let resolvedPath = ""; - let resolvedAbsolute = false; - - for (let i = pathSegments.length - 1; i >= -1 && !resolvedAbsolute; i--) { - let path: string; - - if (i >= 0) path = pathSegments[i]; - else { - // deno-lint-ignore no-explicit-any - const { Deno } = globalThis as any; - if (typeof Deno?.cwd !== "function") { - throw new TypeError("Resolved a relative path without a CWD."); - } - path = Deno.cwd(); - } - - assertPath(path); - - // Skip empty entries - if (path.length === 0) { - continue; - } - - resolvedPath = `${path}/${resolvedPath}`; - resolvedAbsolute = isPosixPathSeparator(path.charCodeAt(0)); - } - - // At this point the path should be resolved to a full absolute path, but - // handle relative paths to be safe (might happen when process.cwd() fails) - - // Normalize the path - resolvedPath = normalizeString( - resolvedPath, - !resolvedAbsolute, - "/", - isPosixPathSeparator, - ); - - if (resolvedAbsolute) { - if (resolvedPath.length > 0) return `/${resolvedPath}`; - else return "/"; - } else if (resolvedPath.length > 0) return resolvedPath; - else return "."; -} - -/** - * Normalize the `path`, resolving `'..'` and `'.'` segments. - * Note that resolving these segments does not necessarily mean that all will be eliminated. - * A `'..'` at the top-level will be preserved, and an empty path is canonically `'.'`. - * @param path to be normalized - */ -export function normalize(path: string): string { - assertPath(path); - - if (path.length === 0) return "."; - - const isAbsolute = isPosixPathSeparator(path.charCodeAt(0)); - const trailingSeparator = isPosixPathSeparator( - path.charCodeAt(path.length - 1), - ); - - // Normalize the path - path = normalizeString(path, !isAbsolute, "/", isPosixPathSeparator); - - if (path.length === 0 && !isAbsolute) path = "."; - if (path.length > 0 && trailingSeparator) path += "/"; - - if (isAbsolute) return `/${path}`; - return path; -} - -/** - * Verifies whether provided path is absolute - * @param path to be verified as absolute - */ -export function isAbsolute(path: string): boolean { - assertPath(path); - return path.length > 0 && isPosixPathSeparator(path.charCodeAt(0)); -} - -/** - * Join all given a sequence of `paths`,then normalizes the resulting path. - * @param paths to be joined and normalized - */ -export function join(...paths: string[]): string { - if (paths.length === 0) return "."; - let joined: string | undefined; - for (let i = 0, len = paths.length; i < len; ++i) { - const path = paths[i]; - assertPath(path); - if (path.length > 0) { - if (!joined) joined = path; - else joined += `/${path}`; - } - } - if (!joined) return "."; - return normalize(joined); -} - -/** - * Return the relative path from `from` to `to` based on current working directory. - * @param from path in current working directory - * @param to path in current working directory - */ -export function relative(from: string, to: string): string { - assertPath(from); - assertPath(to); - - if (from === to) return ""; - - from = resolve(from); - to = resolve(to); - - if (from === to) return ""; - - // Trim any leading backslashes - let fromStart = 1; - const fromEnd = from.length; - for (; fromStart < fromEnd; ++fromStart) { - if (!isPosixPathSeparator(from.charCodeAt(fromStart))) break; - } - const fromLen = fromEnd - fromStart; - - // Trim any leading backslashes - let toStart = 1; - const toEnd = to.length; - for (; toStart < toEnd; ++toStart) { - if (!isPosixPathSeparator(to.charCodeAt(toStart))) break; - } - const toLen = toEnd - toStart; - - // Compare paths to find the longest common path from root - const length = fromLen < toLen ? fromLen : toLen; - let lastCommonSep = -1; - let i = 0; - for (; i <= length; ++i) { - if (i === length) { - if (toLen > length) { - if (isPosixPathSeparator(to.charCodeAt(toStart + i))) { - // We get here if `from` is the exact base path for `to`. - // For example: from='/foo/bar'; to='/foo/bar/baz' - return to.slice(toStart + i + 1); - } else if (i === 0) { - // We get here if `from` is the root - // For example: from='/'; to='/foo' - return to.slice(toStart + i); - } - } else if (fromLen > length) { - if (isPosixPathSeparator(from.charCodeAt(fromStart + i))) { - // We get here if `to` is the exact base path for `from`. - // For example: from='/foo/bar/baz'; to='/foo/bar' - lastCommonSep = i; - } else if (i === 0) { - // We get here if `to` is the root. - // For example: from='/foo'; to='/' - lastCommonSep = 0; - } - } - break; - } - const fromCode = from.charCodeAt(fromStart + i); - const toCode = to.charCodeAt(toStart + i); - if (fromCode !== toCode) break; - else if (isPosixPathSeparator(fromCode)) lastCommonSep = i; - } - - let out = ""; - // Generate the relative path based on the path difference between `to` - // and `from` - for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) { - if (i === fromEnd || isPosixPathSeparator(from.charCodeAt(i))) { - if (out.length === 0) out += ".."; - else out += "/.."; - } - } - - // Lastly, append the rest of the destination (`to`) path that comes after - // the common path parts - if (out.length > 0) return out + to.slice(toStart + lastCommonSep); - else { - toStart += lastCommonSep; - if (isPosixPathSeparator(to.charCodeAt(toStart))) ++toStart; - return to.slice(toStart); - } -} - -/** - * Resolves path to a namespace path - * @param path to resolve to namespace - */ -export function toNamespacedPath(path: string): string { - // Non-op on posix systems - return path; -} - -/** - * Return the directory path of a `path`. - * @param path - path to extract the directory from. - */ -export function dirname(path: string): string { - if (path.length === 0) return "."; - - let end = -1; - let matchedNonSeparator = false; - - for (let i = path.length - 1; i >= 1; --i) { - if (isPosixPathSeparator(path.charCodeAt(i))) { - if (matchedNonSeparator) { - end = i; - break; - } - } else { - matchedNonSeparator = true; - } - } - - // No matches. Fallback based on provided path: - // - // - leading slashes paths - // "/foo" => "/" - // "///foo" => "/" - // - no slash path - // "foo" => "." - if (end === -1) { - return isPosixPathSeparator(path.charCodeAt(0)) ? "/" : "."; - } - - return stripTrailingSeparators( - path.slice(0, end), - isPosixPathSeparator, - ); -} - -/** - * Return the last portion of a `path`. - * Trailing directory separators are ignored, and optional suffix is removed. - * - * @param path - path to extract the name from. - * @param [suffix] - suffix to remove from extracted name. - */ -export function basename(path: string, suffix = ""): string { - assertPath(path); - - if (path.length === 0) return path; - - if (typeof suffix !== "string") { - throw new TypeError( - `Suffix must be a string. Received ${JSON.stringify(suffix)}`, - ); - } - - const lastSegment = lastPathSegment(path, isPosixPathSeparator); - const strippedSegment = stripTrailingSeparators( - lastSegment, - isPosixPathSeparator, - ); - return suffix ? stripSuffix(strippedSegment, suffix) : strippedSegment; -} - -/** - * Return the extension of the `path` with leading period. - * @param path with extension - * @returns extension (ex. for `file.ts` returns `.ts`) - */ -export function extname(path: string): string { - assertPath(path); - let startDot = -1; - let startPart = 0; - let end = -1; - let matchedSlash = true; - // Track the state of characters (if any) we see before our first dot and - // after any path separator we find - let preDotState = 0; - for (let i = path.length - 1; i >= 0; --i) { - const code = path.charCodeAt(i); - if (isPosixPathSeparator(code)) { - // If we reached a path separator that was not part of a set of path - // separators at the end of the string, stop now - if (!matchedSlash) { - startPart = i + 1; - break; - } - continue; - } - if (end === -1) { - // We saw the first non-path separator, mark this as the end of our - // extension - matchedSlash = false; - end = i + 1; - } - if (code === CHAR_DOT) { - // If this is our first dot, mark it as the start of our extension - if (startDot === -1) startDot = i; - else if (preDotState !== 1) preDotState = 1; - } else if (startDot !== -1) { - // We saw a non-dot and non-path separator before our dot, so we should - // have a good chance at having a non-empty extension - preDotState = -1; - } - } - - if ( - startDot === -1 || - end === -1 || - // We saw a non-dot character immediately before the dot - preDotState === 0 || - // The (right-most) trimmed path component is exactly '..' - (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) - ) { - return ""; - } - return path.slice(startDot, end); -} - -/** - * Generate a path from `FormatInputPathObject` object. - * @param pathObject with path - */ -export function format(pathObject: FormatInputPathObject): string { - if (pathObject === null || typeof pathObject !== "object") { - throw new TypeError( - `The "pathObject" argument must be of type Object. Received type ${typeof pathObject}`, - ); - } - return _format("/", pathObject); -} - -/** - * Return a `ParsedPath` object of the `path`. - * @param path to process - */ -export function parse(path: string): ParsedPath { - assertPath(path); - - const ret: ParsedPath = { root: "", dir: "", base: "", ext: "", name: "" }; - if (path.length === 0) return ret; - const isAbsolute = isPosixPathSeparator(path.charCodeAt(0)); - let start: number; - if (isAbsolute) { - ret.root = "/"; - start = 1; - } else { - start = 0; - } - let startDot = -1; - let startPart = 0; - let end = -1; - let matchedSlash = true; - let i = path.length - 1; - - // Track the state of characters (if any) we see before our first dot and - // after any path separator we find - let preDotState = 0; - - // Get non-dir info - for (; i >= start; --i) { - const code = path.charCodeAt(i); - if (isPosixPathSeparator(code)) { - // If we reached a path separator that was not part of a set of path - // separators at the end of the string, stop now - if (!matchedSlash) { - startPart = i + 1; - break; - } - continue; - } - if (end === -1) { - // We saw the first non-path separator, mark this as the end of our - // extension - matchedSlash = false; - end = i + 1; - } - if (code === CHAR_DOT) { - // If this is our first dot, mark it as the start of our extension - if (startDot === -1) startDot = i; - else if (preDotState !== 1) preDotState = 1; - } else if (startDot !== -1) { - // We saw a non-dot and non-path separator before our dot, so we should - // have a good chance at having a non-empty extension - preDotState = -1; - } - } - - if ( - startDot === -1 || - end === -1 || - // We saw a non-dot character immediately before the dot - preDotState === 0 || - // The (right-most) trimmed path component is exactly '..' - (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) - ) { - if (end !== -1) { - if (startPart === 0 && isAbsolute) { - ret.base = ret.name = path.slice(1, end); - } else { - ret.base = ret.name = path.slice(startPart, end); - } - } - // Fallback to '/' in case there is no basename - ret.base = ret.base || "/"; - } else { - if (startPart === 0 && isAbsolute) { - ret.name = path.slice(1, startDot); - ret.base = path.slice(1, end); - } else { - ret.name = path.slice(startPart, startDot); - ret.base = path.slice(startPart, end); - } - ret.ext = path.slice(startDot, end); - } - - if (startPart > 0) { - ret.dir = stripTrailingSeparators( - path.slice(0, startPart - 1), - isPosixPathSeparator, - ); - } else if (isAbsolute) ret.dir = "/"; - - return ret; -} - -/** - * Converts a file URL to a path string. - * - * ```ts - * import { fromFileUrl } from "https://deno.land/std@$STD_VERSION/path/posix.ts"; - * fromFileUrl("file:///home/foo"); // "/home/foo" - * ``` - * @param url of a file URL - */ -export function fromFileUrl(url: string | URL): string { - url = url instanceof URL ? url : new URL(url); - if (url.protocol != "file:") { - throw new TypeError("Must be a file URL."); - } - return decodeURIComponent( - url.pathname.replace(/%(?![0-9A-Fa-f]{2})/g, "%25"), - ); -} - -/** - * Converts a path string to a file URL. - * - * ```ts - * import { toFileUrl } from "https://deno.land/std@$STD_VERSION/path/posix.ts"; - * toFileUrl("/home/foo"); // new URL("file:///home/foo") - * ``` - * @param path to convert to file URL - */ -export function toFileUrl(path: string): URL { - if (!isAbsolute(path)) { - throw new TypeError("Must be an absolute path."); - } - const url = new URL("file:///"); - url.pathname = encodeWhitespace( - path.replace(/%/g, "%25").replace(/\\/g, "%5C"), - ); - return url; -} diff --git a/vendor/deno.land/std@0.181.0/path/separator.ts b/vendor/deno.land/std@0.181.0/path/separator.ts deleted file mode 100644 index 99e4dff..0000000 --- a/vendor/deno.land/std@0.181.0/path/separator.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -import { isWindows } from "../_util/os.ts"; - -export const SEP = isWindows ? "\\" : "/"; -export const SEP_PATTERN = isWindows ? /[\\/]+/ : /\/+/; diff --git a/vendor/deno.land/std@0.181.0/path/win32.ts b/vendor/deno.land/std@0.181.0/path/win32.ts deleted file mode 100644 index de4bd58..0000000 --- a/vendor/deno.land/std@0.181.0/path/win32.ts +++ /dev/null @@ -1,962 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -// Copyright the Browserify authors. MIT License. -// Ported from https://github.com/browserify/path-browserify/ -// This module is browser compatible. - -import type { FormatInputPathObject, ParsedPath } from "./_interface.ts"; -import { - CHAR_BACKWARD_SLASH, - CHAR_COLON, - CHAR_DOT, - CHAR_QUESTION_MARK, -} from "./_constants.ts"; - -import { - _format, - assertPath, - encodeWhitespace, - isPathSeparator, - isPosixPathSeparator, - isWindowsDeviceRoot, - lastPathSegment, - normalizeString, - stripSuffix, - stripTrailingSeparators, -} from "./_util.ts"; -import { assert } from "../_util/asserts.ts"; - -export const sep = "\\"; -export const delimiter = ";"; - -/** - * Resolves path segments into a `path` - * @param pathSegments to process to path - */ -export function resolve(...pathSegments: string[]): string { - let resolvedDevice = ""; - let resolvedTail = ""; - let resolvedAbsolute = false; - - for (let i = pathSegments.length - 1; i >= -1; i--) { - let path: string; - // deno-lint-ignore no-explicit-any - const { Deno } = globalThis as any; - if (i >= 0) { - path = pathSegments[i]; - } else if (!resolvedDevice) { - if (typeof Deno?.cwd !== "function") { - throw new TypeError("Resolved a drive-letter-less path without a CWD."); - } - path = Deno.cwd(); - } else { - if ( - typeof Deno?.env?.get !== "function" || typeof Deno?.cwd !== "function" - ) { - throw new TypeError("Resolved a relative path without a CWD."); - } - path = Deno.cwd(); - - // Verify that a cwd was found and that it actually points - // to our drive. If not, default to the drive's root. - if ( - path === undefined || - path.slice(0, 3).toLowerCase() !== `${resolvedDevice.toLowerCase()}\\` - ) { - path = `${resolvedDevice}\\`; - } - } - - assertPath(path); - - const len = path.length; - - // Skip empty entries - if (len === 0) continue; - - let rootEnd = 0; - let device = ""; - let isAbsolute = false; - const code = path.charCodeAt(0); - - // Try to match a root - if (len > 1) { - if (isPathSeparator(code)) { - // Possible UNC root - - // If we started with a separator, we know we at least have an - // absolute path of some kind (UNC or otherwise) - isAbsolute = true; - - if (isPathSeparator(path.charCodeAt(1))) { - // Matched double path separator at beginning - let j = 2; - let last = j; - // Match 1 or more non-path separators - for (; j < len; ++j) { - if (isPathSeparator(path.charCodeAt(j))) break; - } - if (j < len && j !== last) { - const firstPart = path.slice(last, j); - // Matched! - last = j; - // Match 1 or more path separators - for (; j < len; ++j) { - if (!isPathSeparator(path.charCodeAt(j))) break; - } - if (j < len && j !== last) { - // Matched! - last = j; - // Match 1 or more non-path separators - for (; j < len; ++j) { - if (isPathSeparator(path.charCodeAt(j))) break; - } - if (j === len) { - // We matched a UNC root only - device = `\\\\${firstPart}\\${path.slice(last)}`; - rootEnd = j; - } else if (j !== last) { - // We matched a UNC root with leftovers - - device = `\\\\${firstPart}\\${path.slice(last, j)}`; - rootEnd = j; - } - } - } - } else { - rootEnd = 1; - } - } else if (isWindowsDeviceRoot(code)) { - // Possible device root - - if (path.charCodeAt(1) === CHAR_COLON) { - device = path.slice(0, 2); - rootEnd = 2; - if (len > 2) { - if (isPathSeparator(path.charCodeAt(2))) { - // Treat separator following drive name as an absolute path - // indicator - isAbsolute = true; - rootEnd = 3; - } - } - } - } - } else if (isPathSeparator(code)) { - // `path` contains just a path separator - rootEnd = 1; - isAbsolute = true; - } - - if ( - device.length > 0 && - resolvedDevice.length > 0 && - device.toLowerCase() !== resolvedDevice.toLowerCase() - ) { - // This path points to another device so it is not applicable - continue; - } - - if (resolvedDevice.length === 0 && device.length > 0) { - resolvedDevice = device; - } - if (!resolvedAbsolute) { - resolvedTail = `${path.slice(rootEnd)}\\${resolvedTail}`; - resolvedAbsolute = isAbsolute; - } - - if (resolvedAbsolute && resolvedDevice.length > 0) break; - } - - // At this point the path should be resolved to a full absolute path, - // but handle relative paths to be safe (might happen when process.cwd() - // fails) - - // Normalize the tail path - resolvedTail = normalizeString( - resolvedTail, - !resolvedAbsolute, - "\\", - isPathSeparator, - ); - - return resolvedDevice + (resolvedAbsolute ? "\\" : "") + resolvedTail || "."; -} - -/** - * Normalizes a `path` - * @param path to normalize - */ -export function normalize(path: string): string { - assertPath(path); - const len = path.length; - if (len === 0) return "."; - let rootEnd = 0; - let device: string | undefined; - let isAbsolute = false; - const code = path.charCodeAt(0); - - // Try to match a root - if (len > 1) { - if (isPathSeparator(code)) { - // Possible UNC root - - // If we started with a separator, we know we at least have an absolute - // path of some kind (UNC or otherwise) - isAbsolute = true; - - if (isPathSeparator(path.charCodeAt(1))) { - // Matched double path separator at beginning - let j = 2; - let last = j; - // Match 1 or more non-path separators - for (; j < len; ++j) { - if (isPathSeparator(path.charCodeAt(j))) break; - } - if (j < len && j !== last) { - const firstPart = path.slice(last, j); - // Matched! - last = j; - // Match 1 or more path separators - for (; j < len; ++j) { - if (!isPathSeparator(path.charCodeAt(j))) break; - } - if (j < len && j !== last) { - // Matched! - last = j; - // Match 1 or more non-path separators - for (; j < len; ++j) { - if (isPathSeparator(path.charCodeAt(j))) break; - } - if (j === len) { - // We matched a UNC root only - // Return the normalized version of the UNC root since there - // is nothing left to process - - return `\\\\${firstPart}\\${path.slice(last)}\\`; - } else if (j !== last) { - // We matched a UNC root with leftovers - - device = `\\\\${firstPart}\\${path.slice(last, j)}`; - rootEnd = j; - } - } - } - } else { - rootEnd = 1; - } - } else if (isWindowsDeviceRoot(code)) { - // Possible device root - - if (path.charCodeAt(1) === CHAR_COLON) { - device = path.slice(0, 2); - rootEnd = 2; - if (len > 2) { - if (isPathSeparator(path.charCodeAt(2))) { - // Treat separator following drive name as an absolute path - // indicator - isAbsolute = true; - rootEnd = 3; - } - } - } - } - } else if (isPathSeparator(code)) { - // `path` contains just a path separator, exit early to avoid unnecessary - // work - return "\\"; - } - - let tail: string; - if (rootEnd < len) { - tail = normalizeString( - path.slice(rootEnd), - !isAbsolute, - "\\", - isPathSeparator, - ); - } else { - tail = ""; - } - if (tail.length === 0 && !isAbsolute) tail = "."; - if (tail.length > 0 && isPathSeparator(path.charCodeAt(len - 1))) { - tail += "\\"; - } - if (device === undefined) { - if (isAbsolute) { - if (tail.length > 0) return `\\${tail}`; - else return "\\"; - } else if (tail.length > 0) { - return tail; - } else { - return ""; - } - } else if (isAbsolute) { - if (tail.length > 0) return `${device}\\${tail}`; - else return `${device}\\`; - } else if (tail.length > 0) { - return device + tail; - } else { - return device; - } -} - -/** - * Verifies whether path is absolute - * @param path to verify - */ -export function isAbsolute(path: string): boolean { - assertPath(path); - const len = path.length; - if (len === 0) return false; - - const code = path.charCodeAt(0); - if (isPathSeparator(code)) { - return true; - } else if (isWindowsDeviceRoot(code)) { - // Possible device root - - if (len > 2 && path.charCodeAt(1) === CHAR_COLON) { - if (isPathSeparator(path.charCodeAt(2))) return true; - } - } - return false; -} - -/** - * Join all given a sequence of `paths`,then normalizes the resulting path. - * @param paths to be joined and normalized - */ -export function join(...paths: string[]): string { - const pathsCount = paths.length; - if (pathsCount === 0) return "."; - - let joined: string | undefined; - let firstPart: string | null = null; - for (let i = 0; i < pathsCount; ++i) { - const path = paths[i]; - assertPath(path); - if (path.length > 0) { - if (joined === undefined) joined = firstPart = path; - else joined += `\\${path}`; - } - } - - if (joined === undefined) return "."; - - // Make sure that the joined path doesn't start with two slashes, because - // normalize() will mistake it for an UNC path then. - // - // This step is skipped when it is very clear that the user actually - // intended to point at an UNC path. This is assumed when the first - // non-empty string arguments starts with exactly two slashes followed by - // at least one more non-slash character. - // - // Note that for normalize() to treat a path as an UNC path it needs to - // have at least 2 components, so we don't filter for that here. - // This means that the user can use join to construct UNC paths from - // a server name and a share name; for example: - // path.join('//server', 'share') -> '\\\\server\\share\\') - let needsReplace = true; - let slashCount = 0; - assert(firstPart != null); - if (isPathSeparator(firstPart.charCodeAt(0))) { - ++slashCount; - const firstLen = firstPart.length; - if (firstLen > 1) { - if (isPathSeparator(firstPart.charCodeAt(1))) { - ++slashCount; - if (firstLen > 2) { - if (isPathSeparator(firstPart.charCodeAt(2))) ++slashCount; - else { - // We matched a UNC path in the first part - needsReplace = false; - } - } - } - } - } - if (needsReplace) { - // Find any more consecutive slashes we need to replace - for (; slashCount < joined.length; ++slashCount) { - if (!isPathSeparator(joined.charCodeAt(slashCount))) break; - } - - // Replace the slashes if needed - if (slashCount >= 2) joined = `\\${joined.slice(slashCount)}`; - } - - return normalize(joined); -} - -/** - * It will solve the relative path from `from` to `to`, for instance: - * from = 'C:\\orandea\\test\\aaa' - * to = 'C:\\orandea\\impl\\bbb' - * The output of the function should be: '..\\..\\impl\\bbb' - * @param from relative path - * @param to relative path - */ -export function relative(from: string, to: string): string { - assertPath(from); - assertPath(to); - - if (from === to) return ""; - - const fromOrig = resolve(from); - const toOrig = resolve(to); - - if (fromOrig === toOrig) return ""; - - from = fromOrig.toLowerCase(); - to = toOrig.toLowerCase(); - - if (from === to) return ""; - - // Trim any leading backslashes - let fromStart = 0; - let fromEnd = from.length; - for (; fromStart < fromEnd; ++fromStart) { - if (from.charCodeAt(fromStart) !== CHAR_BACKWARD_SLASH) break; - } - // Trim trailing backslashes (applicable to UNC paths only) - for (; fromEnd - 1 > fromStart; --fromEnd) { - if (from.charCodeAt(fromEnd - 1) !== CHAR_BACKWARD_SLASH) break; - } - const fromLen = fromEnd - fromStart; - - // Trim any leading backslashes - let toStart = 0; - let toEnd = to.length; - for (; toStart < toEnd; ++toStart) { - if (to.charCodeAt(toStart) !== CHAR_BACKWARD_SLASH) break; - } - // Trim trailing backslashes (applicable to UNC paths only) - for (; toEnd - 1 > toStart; --toEnd) { - if (to.charCodeAt(toEnd - 1) !== CHAR_BACKWARD_SLASH) break; - } - const toLen = toEnd - toStart; - - // Compare paths to find the longest common path from root - const length = fromLen < toLen ? fromLen : toLen; - let lastCommonSep = -1; - let i = 0; - for (; i <= length; ++i) { - if (i === length) { - if (toLen > length) { - if (to.charCodeAt(toStart + i) === CHAR_BACKWARD_SLASH) { - // We get here if `from` is the exact base path for `to`. - // For example: from='C:\\foo\\bar'; to='C:\\foo\\bar\\baz' - return toOrig.slice(toStart + i + 1); - } else if (i === 2) { - // We get here if `from` is the device root. - // For example: from='C:\\'; to='C:\\foo' - return toOrig.slice(toStart + i); - } - } - if (fromLen > length) { - if (from.charCodeAt(fromStart + i) === CHAR_BACKWARD_SLASH) { - // We get here if `to` is the exact base path for `from`. - // For example: from='C:\\foo\\bar'; to='C:\\foo' - lastCommonSep = i; - } else if (i === 2) { - // We get here if `to` is the device root. - // For example: from='C:\\foo\\bar'; to='C:\\' - lastCommonSep = 3; - } - } - break; - } - const fromCode = from.charCodeAt(fromStart + i); - const toCode = to.charCodeAt(toStart + i); - if (fromCode !== toCode) break; - else if (fromCode === CHAR_BACKWARD_SLASH) lastCommonSep = i; - } - - // We found a mismatch before the first common path separator was seen, so - // return the original `to`. - if (i !== length && lastCommonSep === -1) { - return toOrig; - } - - let out = ""; - if (lastCommonSep === -1) lastCommonSep = 0; - // Generate the relative path based on the path difference between `to` and - // `from` - for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) { - if (i === fromEnd || from.charCodeAt(i) === CHAR_BACKWARD_SLASH) { - if (out.length === 0) out += ".."; - else out += "\\.."; - } - } - - // Lastly, append the rest of the destination (`to`) path that comes after - // the common path parts - if (out.length > 0) { - return out + toOrig.slice(toStart + lastCommonSep, toEnd); - } else { - toStart += lastCommonSep; - if (toOrig.charCodeAt(toStart) === CHAR_BACKWARD_SLASH) ++toStart; - return toOrig.slice(toStart, toEnd); - } -} - -/** - * Resolves path to a namespace path - * @param path to resolve to namespace - */ -export function toNamespacedPath(path: string): string { - // Note: this will *probably* throw somewhere. - if (typeof path !== "string") return path; - if (path.length === 0) return ""; - - const resolvedPath = resolve(path); - - if (resolvedPath.length >= 3) { - if (resolvedPath.charCodeAt(0) === CHAR_BACKWARD_SLASH) { - // Possible UNC root - - if (resolvedPath.charCodeAt(1) === CHAR_BACKWARD_SLASH) { - const code = resolvedPath.charCodeAt(2); - if (code !== CHAR_QUESTION_MARK && code !== CHAR_DOT) { - // Matched non-long UNC root, convert the path to a long UNC path - return `\\\\?\\UNC\\${resolvedPath.slice(2)}`; - } - } - } else if (isWindowsDeviceRoot(resolvedPath.charCodeAt(0))) { - // Possible device root - - if ( - resolvedPath.charCodeAt(1) === CHAR_COLON && - resolvedPath.charCodeAt(2) === CHAR_BACKWARD_SLASH - ) { - // Matched device root, convert the path to a long UNC path - return `\\\\?\\${resolvedPath}`; - } - } - } - - return path; -} - -/** - * Return the directory path of a `path`. - * @param path - path to extract the directory from. - */ -export function dirname(path: string): string { - assertPath(path); - const len = path.length; - if (len === 0) return "."; - let rootEnd = -1; - let end = -1; - let matchedSlash = true; - let offset = 0; - const code = path.charCodeAt(0); - - // Try to match a root - if (len > 1) { - if (isPathSeparator(code)) { - // Possible UNC root - - rootEnd = offset = 1; - - if (isPathSeparator(path.charCodeAt(1))) { - // Matched double path separator at beginning - let j = 2; - let last = j; - // Match 1 or more non-path separators - for (; j < len; ++j) { - if (isPathSeparator(path.charCodeAt(j))) break; - } - if (j < len && j !== last) { - // Matched! - last = j; - // Match 1 or more path separators - for (; j < len; ++j) { - if (!isPathSeparator(path.charCodeAt(j))) break; - } - if (j < len && j !== last) { - // Matched! - last = j; - // Match 1 or more non-path separators - for (; j < len; ++j) { - if (isPathSeparator(path.charCodeAt(j))) break; - } - if (j === len) { - // We matched a UNC root only - return path; - } - if (j !== last) { - // We matched a UNC root with leftovers - - // Offset by 1 to include the separator after the UNC root to - // treat it as a "normal root" on top of a (UNC) root - rootEnd = offset = j + 1; - } - } - } - } - } else if (isWindowsDeviceRoot(code)) { - // Possible device root - - if (path.charCodeAt(1) === CHAR_COLON) { - rootEnd = offset = 2; - if (len > 2) { - if (isPathSeparator(path.charCodeAt(2))) rootEnd = offset = 3; - } - } - } - } else if (isPathSeparator(code)) { - // `path` contains just a path separator, exit early to avoid - // unnecessary work - return path; - } - - for (let i = len - 1; i >= offset; --i) { - if (isPathSeparator(path.charCodeAt(i))) { - if (!matchedSlash) { - end = i; - break; - } - } else { - // We saw the first non-path separator - matchedSlash = false; - } - } - - if (end === -1) { - if (rootEnd === -1) return "."; - else end = rootEnd; - } - return stripTrailingSeparators(path.slice(0, end), isPosixPathSeparator); -} - -/** - * Return the last portion of a `path`. - * Trailing directory separators are ignored, and optional suffix is removed. - * - * @param path - path to extract name from. - * @param [suffix] - suffix to remove from extracted name. - */ -export function basename(path: string, suffix = ""): string { - assertPath(path); - - if (path.length === 0) return path; - - if (typeof suffix !== "string") { - throw new TypeError( - `Suffix must be a string. Received ${JSON.stringify(suffix)}`, - ); - } - - // Check for a drive letter prefix so as not to mistake the following - // path separator as an extra separator at the end of the path that can be - // disregarded - let start = 0; - if (path.length >= 2) { - const drive = path.charCodeAt(0); - if (isWindowsDeviceRoot(drive)) { - if (path.charCodeAt(1) === CHAR_COLON) start = 2; - } - } - - const lastSegment = lastPathSegment(path, isPathSeparator, start); - const strippedSegment = stripTrailingSeparators(lastSegment, isPathSeparator); - return suffix ? stripSuffix(strippedSegment, suffix) : strippedSegment; -} - -/** - * Return the extension of the `path` with leading period. - * @param path with extension - * @returns extension (ex. for `file.ts` returns `.ts`) - */ -export function extname(path: string): string { - assertPath(path); - let start = 0; - let startDot = -1; - let startPart = 0; - let end = -1; - let matchedSlash = true; - // Track the state of characters (if any) we see before our first dot and - // after any path separator we find - let preDotState = 0; - - // Check for a drive letter prefix so as not to mistake the following - // path separator as an extra separator at the end of the path that can be - // disregarded - - if ( - path.length >= 2 && - path.charCodeAt(1) === CHAR_COLON && - isWindowsDeviceRoot(path.charCodeAt(0)) - ) { - start = startPart = 2; - } - - for (let i = path.length - 1; i >= start; --i) { - const code = path.charCodeAt(i); - if (isPathSeparator(code)) { - // If we reached a path separator that was not part of a set of path - // separators at the end of the string, stop now - if (!matchedSlash) { - startPart = i + 1; - break; - } - continue; - } - if (end === -1) { - // We saw the first non-path separator, mark this as the end of our - // extension - matchedSlash = false; - end = i + 1; - } - if (code === CHAR_DOT) { - // If this is our first dot, mark it as the start of our extension - if (startDot === -1) startDot = i; - else if (preDotState !== 1) preDotState = 1; - } else if (startDot !== -1) { - // We saw a non-dot and non-path separator before our dot, so we should - // have a good chance at having a non-empty extension - preDotState = -1; - } - } - - if ( - startDot === -1 || - end === -1 || - // We saw a non-dot character immediately before the dot - preDotState === 0 || - // The (right-most) trimmed path component is exactly '..' - (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) - ) { - return ""; - } - return path.slice(startDot, end); -} - -/** - * Generate a path from `FormatInputPathObject` object. - * @param pathObject with path - */ -export function format(pathObject: FormatInputPathObject): string { - if (pathObject === null || typeof pathObject !== "object") { - throw new TypeError( - `The "pathObject" argument must be of type Object. Received type ${typeof pathObject}`, - ); - } - return _format("\\", pathObject); -} - -/** - * Return a `ParsedPath` object of the `path`. - * @param path to process - */ -export function parse(path: string): ParsedPath { - assertPath(path); - - const ret: ParsedPath = { root: "", dir: "", base: "", ext: "", name: "" }; - - const len = path.length; - if (len === 0) return ret; - - let rootEnd = 0; - let code = path.charCodeAt(0); - - // Try to match a root - if (len > 1) { - if (isPathSeparator(code)) { - // Possible UNC root - - rootEnd = 1; - if (isPathSeparator(path.charCodeAt(1))) { - // Matched double path separator at beginning - let j = 2; - let last = j; - // Match 1 or more non-path separators - for (; j < len; ++j) { - if (isPathSeparator(path.charCodeAt(j))) break; - } - if (j < len && j !== last) { - // Matched! - last = j; - // Match 1 or more path separators - for (; j < len; ++j) { - if (!isPathSeparator(path.charCodeAt(j))) break; - } - if (j < len && j !== last) { - // Matched! - last = j; - // Match 1 or more non-path separators - for (; j < len; ++j) { - if (isPathSeparator(path.charCodeAt(j))) break; - } - if (j === len) { - // We matched a UNC root only - - rootEnd = j; - } else if (j !== last) { - // We matched a UNC root with leftovers - - rootEnd = j + 1; - } - } - } - } - } else if (isWindowsDeviceRoot(code)) { - // Possible device root - - if (path.charCodeAt(1) === CHAR_COLON) { - rootEnd = 2; - if (len > 2) { - if (isPathSeparator(path.charCodeAt(2))) { - if (len === 3) { - // `path` contains just a drive root, exit early to avoid - // unnecessary work - ret.root = ret.dir = path; - ret.base = "\\"; - return ret; - } - rootEnd = 3; - } - } else { - // `path` contains just a relative drive root, exit early to avoid - // unnecessary work - ret.root = ret.dir = path; - return ret; - } - } - } - } else if (isPathSeparator(code)) { - // `path` contains just a path separator, exit early to avoid - // unnecessary work - ret.root = ret.dir = path; - ret.base = "\\"; - return ret; - } - - if (rootEnd > 0) ret.root = path.slice(0, rootEnd); - - let startDot = -1; - let startPart = rootEnd; - let end = -1; - let matchedSlash = true; - let i = path.length - 1; - - // Track the state of characters (if any) we see before our first dot and - // after any path separator we find - let preDotState = 0; - - // Get non-dir info - for (; i >= rootEnd; --i) { - code = path.charCodeAt(i); - if (isPathSeparator(code)) { - // If we reached a path separator that was not part of a set of path - // separators at the end of the string, stop now - if (!matchedSlash) { - startPart = i + 1; - break; - } - continue; - } - if (end === -1) { - // We saw the first non-path separator, mark this as the end of our - // extension - matchedSlash = false; - end = i + 1; - } - if (code === CHAR_DOT) { - // If this is our first dot, mark it as the start of our extension - if (startDot === -1) startDot = i; - else if (preDotState !== 1) preDotState = 1; - } else if (startDot !== -1) { - // We saw a non-dot and non-path separator before our dot, so we should - // have a good chance at having a non-empty extension - preDotState = -1; - } - } - - if ( - startDot === -1 || - end === -1 || - // We saw a non-dot character immediately before the dot - preDotState === 0 || - // The (right-most) trimmed path component is exactly '..' - (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) - ) { - if (end !== -1) { - ret.base = ret.name = path.slice(startPart, end); - } - } else { - ret.name = path.slice(startPart, startDot); - ret.base = path.slice(startPart, end); - ret.ext = path.slice(startDot, end); - } - - // Fallback to '\' in case there is no basename - ret.base = ret.base || "\\"; - - // If the directory is the root, use the entire root as the `dir` including - // the trailing slash if any (`C:\abc` -> `C:\`). Otherwise, strip out the - // trailing slash (`C:\abc\def` -> `C:\abc`). - if (startPart > 0 && startPart !== rootEnd) { - ret.dir = path.slice(0, startPart - 1); - } else ret.dir = ret.root; - - return ret; -} - -/** - * Converts a file URL to a path string. - * - * ```ts - * import { fromFileUrl } from "https://deno.land/std@$STD_VERSION/path/win32.ts"; - * fromFileUrl("file:///home/foo"); // "\\home\\foo" - * fromFileUrl("file:///C:/Users/foo"); // "C:\\Users\\foo" - * fromFileUrl("file://localhost/home/foo"); // "\\\\localhost\\home\\foo" - * ``` - * @param url of a file URL - */ -export function fromFileUrl(url: string | URL): string { - url = url instanceof URL ? url : new URL(url); - if (url.protocol != "file:") { - throw new TypeError("Must be a file URL."); - } - let path = decodeURIComponent( - url.pathname.replace(/\//g, "\\").replace(/%(?![0-9A-Fa-f]{2})/g, "%25"), - ).replace(/^\\*([A-Za-z]:)(\\|$)/, "$1\\"); - if (url.hostname != "") { - // Note: The `URL` implementation guarantees that the drive letter and - // hostname are mutually exclusive. Otherwise it would not have been valid - // to append the hostname and path like this. - path = `\\\\${url.hostname}${path}`; - } - return path; -} - -/** - * Converts a path string to a file URL. - * - * ```ts - * import { toFileUrl } from "https://deno.land/std@$STD_VERSION/path/win32.ts"; - * toFileUrl("\\home\\foo"); // new URL("file:///home/foo") - * toFileUrl("C:\\Users\\foo"); // new URL("file:///C:/Users/foo") - * toFileUrl("\\\\127.0.0.1\\home\\foo"); // new URL("file://127.0.0.1/home/foo") - * ``` - * @param path to convert to file URL - */ -export function toFileUrl(path: string): URL { - if (!isAbsolute(path)) { - throw new TypeError("Must be an absolute path."); - } - const [, hostname, pathname] = path.match( - /^(?:[/\\]{2}([^/\\]+)(?=[/\\](?:[^/\\]|$)))?(.*)/, - )!; - const url = new URL("file:///"); - url.pathname = encodeWhitespace(pathname.replace(/%/g, "%25")); - if (hostname != null && hostname != "localhost") { - url.hostname = hostname; - if (!url.hostname) { - throw new TypeError("Invalid hostname."); - } - } - return url; -} diff --git a/vendor/deno.land/std@0.182.0/_util/asserts.ts b/vendor/deno.land/std@0.182.0/_util/asserts.ts deleted file mode 100644 index 3c5c346..0000000 --- a/vendor/deno.land/std@0.182.0/_util/asserts.ts +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -/** - * All internal non-test code, that is files that do not have `test` or `bench` in the name, must use the assertion functions within `_utils/asserts.ts` and not `testing/asserts.ts`. This is to create a separation of concerns between internal and testing assertions. - */ - -export class DenoStdInternalError extends Error { - constructor(message: string) { - super(message); - this.name = "DenoStdInternalError"; - } -} - -/** Make an assertion, if not `true`, then throw. */ -export function assert(expr: unknown, msg = ""): asserts expr { - if (!expr) { - throw new DenoStdInternalError(msg); - } -} - -/** Use this to assert unreachable code. */ -export function unreachable(): never { - throw new DenoStdInternalError("unreachable"); -} diff --git a/vendor/deno.land/std@0.182.0/_util/os.ts b/vendor/deno.land/std@0.182.0/_util/os.ts deleted file mode 100644 index a272eae..0000000 --- a/vendor/deno.land/std@0.182.0/_util/os.ts +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -export type OSType = "windows" | "linux" | "darwin" | "freebsd"; - -export const osType: OSType = (() => { - // deno-lint-ignore no-explicit-any - const { Deno } = globalThis as any; - if (typeof Deno?.build?.os === "string") { - return Deno.build.os; - } - - // deno-lint-ignore no-explicit-any - const { navigator } = globalThis as any; - if (navigator?.appVersion?.includes?.("Win")) { - return "windows"; - } - - return "linux"; -})(); - -export const isWindows = osType === "windows"; -export const isLinux = osType === "linux"; diff --git a/vendor/deno.land/std@0.182.0/flags/mod.ts b/vendor/deno.land/std@0.182.0/flags/mod.ts deleted file mode 100644 index 39bf7c5..0000000 --- a/vendor/deno.land/std@0.182.0/flags/mod.ts +++ /dev/null @@ -1,787 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -/** - * Command line arguments parser based on - * [minimist](https://github.com/minimistjs/minimist). - * - * This module is browser compatible. - * - * @example - * ```ts - * import { parse } from "https://deno.land/std@$STD_VERSION/flags/mod.ts"; - * - * console.dir(parse(Deno.args)); - * ``` - * - * ```sh - * $ deno run https://deno.land/std/examples/flags.ts -a beep -b boop - * { _: [], a: 'beep', b: 'boop' } - * ``` - * - * ```sh - * $ deno run https://deno.land/std/examples/flags.ts -x 3 -y 4 -n5 -abc --beep=boop foo bar baz - * { _: [ 'foo', 'bar', 'baz' ], - * x: 3, - * y: 4, - * n: 5, - * a: true, - * b: true, - * c: true, - * beep: 'boop' } - * ``` - * - * @module - */ -import { assert } from "../_util/asserts.ts"; - -/** Combines recursively all intersection types and returns a new single type. */ -type Id = TRecord extends Record - ? TRecord extends infer InferredRecord - ? { [Key in keyof InferredRecord]: Id } - : never - : TRecord; - -/** Converts a union type `A | B | C` into an intersection type `A & B & C`. */ -type UnionToIntersection = - (TValue extends unknown ? (args: TValue) => unknown : never) extends - (args: infer R) => unknown ? R extends Record ? R : never - : never; - -type BooleanType = boolean | string | undefined; -type StringType = string | undefined; -type ArgType = StringType | BooleanType; - -type Collectable = string | undefined; -type Negatable = string | undefined; - -type UseTypes< - TBooleans extends BooleanType, - TStrings extends StringType, - TCollectable extends Collectable, -> = undefined extends ( - & (false extends TBooleans ? undefined : TBooleans) - & TCollectable - & TStrings -) ? false - : true; - -/** - * Creates a record with all available flags with the corresponding type and - * default type. - */ -type Values< - TBooleans extends BooleanType, - TStrings extends StringType, - TCollectable extends Collectable, - TNegatable extends Negatable, - TDefault extends Record | undefined, - TAliases extends Aliases | undefined, -> = UseTypes extends true ? - & Record - & AddAliases< - SpreadDefaults< - & CollectValues - & RecursiveRequired> - & CollectUnknownValues< - TBooleans, - TStrings, - TCollectable, - TNegatable - >, - DedotRecord - >, - TAliases - > - // deno-lint-ignore no-explicit-any - : Record; - -type Aliases = Partial< - Record, TAliasNames | ReadonlyArray> ->; - -type AddAliases< - TArgs, - TAliases extends Aliases | undefined, -> = { - [TArgName in keyof TArgs as AliasNames]: TArgs[TArgName]; -}; - -type AliasNames< - TArgName, - TAliases extends Aliases | undefined, -> = TArgName extends keyof TAliases - ? string extends TAliases[TArgName] ? TArgName - : TAliases[TArgName] extends string ? TArgName | TAliases[TArgName] - : TAliases[TArgName] extends Array - ? TArgName | TAliases[TArgName][number] - : TArgName - : TArgName; - -/** - * Spreads all default values of Record `TDefaults` into Record `TArgs` - * and makes default values required. - * - * **Example:** - * `SpreadValues<{ foo?: boolean, bar?: number }, { foo: number }>` - * - * **Result:** `{ foo: boolean | number, bar?: number }` - */ -type SpreadDefaults = TDefaults extends undefined ? TArgs - : TArgs extends Record ? - & Omit - & { - [Default in keyof TDefaults]: Default extends keyof TArgs - ? (TArgs[Default] & TDefaults[Default] | TDefaults[Default]) extends - Record - ? NonNullable> - : TDefaults[Default] | NonNullable - : unknown; - } - : never; - -/** - * Defines the Record for the `default` option to add - * auto-suggestion support for IDE's. - */ -type Defaults = Id< - UnionToIntersection< - & Record - // Dedotted auto suggestions: { foo: { bar: unknown } } - & MapTypes - & MapTypes - // Flat auto suggestions: { "foo.bar": unknown } - & MapDefaults - & MapDefaults - > ->; - -type MapDefaults = Partial< - Record ->; - -type RecursiveRequired = TRecord extends Record ? { - [Key in keyof TRecord]-?: RecursiveRequired; - } - : TRecord; - -/** Same as `MapTypes` but also supports collectable options. */ -type CollectValues< - TArgNames extends ArgType, - TType, - TCollectable extends Collectable, - TNegatable extends Negatable = undefined, -> = UnionToIntersection< - Extract extends string ? - & (Exclude extends never ? Record - : MapTypes, TType, TNegatable>) - & (Extract extends never ? Record - : RecursiveRequired< - MapTypes, Array, TNegatable> - >) - : MapTypes ->; - -/** Same as `Record` but also supports dotted and negatable options. */ -type MapTypes< - TArgNames extends ArgType, - TType, - TNegatable extends Negatable = undefined, -> = undefined extends TArgNames ? Record - : TArgNames extends `${infer Name}.${infer Rest}` ? { - [Key in Name]?: MapTypes< - Rest, - TType, - TNegatable extends `${Name}.${infer Negate}` ? Negate : undefined - >; - } - : TArgNames extends string ? Partial< - Record - > - : Record; - -type CollectUnknownValues< - TBooleans extends BooleanType, - TStrings extends StringType, - TCollectable extends Collectable, - TNegatable extends Negatable, -> = UnionToIntersection< - TCollectable extends TBooleans & TStrings ? Record - : DedotRecord< - // Unknown collectable & non-negatable args. - & Record< - Exclude< - Extract, string>, - Extract - >, - Array - > - // Unknown collectable & negatable args. - & Record< - Exclude< - Extract, string>, - Extract - >, - Array | false - > - > ->; - -/** Converts `{ "foo.bar.baz": unknown }` into `{ foo: { bar: { baz: unknown } } }`. */ -type DedotRecord = Record extends TRecord ? TRecord - : TRecord extends Record ? UnionToIntersection< - ValueOf< - { - [Key in keyof TRecord]: Key extends string ? Dedot - : never; - } - > - > - : TRecord; - -type Dedot = TKey extends - `${infer Name}.${infer Rest}` ? { [Key in Name]: Dedot } - : { [Key in TKey]: TValue }; - -type ValueOf = TValue[keyof TValue]; - -/** The value returned from `parse`. */ -export type Args< - // deno-lint-ignore no-explicit-any - TArgs extends Record = Record, - TDoubleDash extends boolean | undefined = undefined, -> = Id< - & TArgs - & { - /** Contains all the arguments that didn't have an option associated with - * them. */ - _: Array; - } - & (boolean extends TDoubleDash ? DoubleDash - : true extends TDoubleDash ? Required - : Record) ->; - -type DoubleDash = { - /** Contains all the arguments that appear after the double dash: "--". */ - "--"?: Array; -}; - -/** The options for the `parse` call. */ -export interface ParseOptions< - TBooleans extends BooleanType = BooleanType, - TStrings extends StringType = StringType, - TCollectable extends Collectable = Collectable, - TNegatable extends Negatable = Negatable, - TDefault extends Record | undefined = - | Record - | undefined, - TAliases extends Aliases | undefined = Aliases | undefined, - TDoubleDash extends boolean | undefined = boolean | undefined, -> { - /** - * When `true`, populate the result `_` with everything before the `--` and - * the result `['--']` with everything after the `--`. - * - * @default {false} - * - * @example - * ```ts - * // $ deno run example.ts -- a arg1 - * import { parse } from "https://deno.land/std@$STD_VERSION/flags/mod.ts"; - * console.dir(parse(Deno.args, { "--": false })); - * // output: { _: [ "a", "arg1" ] } - * console.dir(parse(Deno.args, { "--": true })); - * // output: { _: [], --: [ "a", "arg1" ] } - * ``` - */ - "--"?: TDoubleDash; - - /** - * An object mapping string names to strings or arrays of string argument - * names to use as aliases. - */ - alias?: TAliases; - - /** - * A boolean, string or array of strings to always treat as booleans. If - * `true` will treat all double hyphenated arguments without equal signs as - * `boolean` (e.g. affects `--foo`, not `-f` or `--foo=bar`). - * All `boolean` arguments will be set to `false` by default. - */ - boolean?: TBooleans | ReadonlyArray>; - - /** An object mapping string argument names to default values. */ - default?: TDefault & Defaults; - - /** - * When `true`, populate the result `_` with everything after the first - * non-option. - */ - stopEarly?: boolean; - - /** A string or array of strings argument names to always treat as strings. */ - string?: TStrings | ReadonlyArray>; - - /** - * A string or array of strings argument names to always treat as arrays. - * Collectable options can be used multiple times. All values will be - * collected into one array. If a non-collectable option is used multiple - * times, the last value is used. - * All Collectable arguments will be set to `[]` by default. - */ - collect?: TCollectable | ReadonlyArray>; - - /** - * A string or array of strings argument names which can be negated - * by prefixing them with `--no-`, like `--no-config`. - */ - negatable?: TNegatable | ReadonlyArray>; - - /** - * A function which is invoked with a command line parameter not defined in - * the `options` configuration object. If the function returns `false`, the - * unknown option is not added to `parsedArgs`. - */ - unknown?: (arg: string, key?: string, value?: unknown) => unknown; -} - -interface Flags { - bools: Record; - strings: Record; - collect: Record; - negatable: Record; - unknownFn: (arg: string, key?: string, value?: unknown) => unknown; - allBools: boolean; -} - -interface NestedMapping { - [key: string]: NestedMapping | unknown; -} - -const { hasOwn } = Object; - -function get( - obj: Record, - key: string, -): TValue | undefined { - if (hasOwn(obj, key)) { - return obj[key]; - } -} - -function getForce(obj: Record, key: string): TValue { - const v = get(obj, key); - assert(v != null); - return v; -} - -function isNumber(x: unknown): boolean { - if (typeof x === "number") return true; - if (/^0x[0-9a-f]+$/i.test(String(x))) return true; - return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(String(x)); -} - -function hasKey(obj: NestedMapping, keys: string[]): boolean { - let o = obj; - keys.slice(0, -1).forEach((key) => { - o = (get(o, key) ?? {}) as NestedMapping; - }); - - const key = keys[keys.length - 1]; - return hasOwn(o, key); -} - -/** Take a set of command line arguments, optionally with a set of options, and - * return an object representing the flags found in the passed arguments. - * - * By default, any arguments starting with `-` or `--` are considered boolean - * flags. If the argument name is followed by an equal sign (`=`) it is - * considered a key-value pair. Any arguments which could not be parsed are - * available in the `_` property of the returned object. - * - * By default, the flags module tries to determine the type of all arguments - * automatically and the return type of the `parse` method will have an index - * signature with `any` as value (`{ [x: string]: any }`). - * - * If the `string`, `boolean` or `collect` option is set, the return value of - * the `parse` method will be fully typed and the index signature of the return - * type will change to `{ [x: string]: unknown }`. - * - * Any arguments after `'--'` will not be parsed and will end up in `parsedArgs._`. - * - * Numeric-looking arguments will be returned as numbers unless `options.string` - * or `options.boolean` is set for that argument name. - * - * @example - * ```ts - * import { parse } from "https://deno.land/std@$STD_VERSION/flags/mod.ts"; - * const parsedArgs = parse(Deno.args); - * ``` - * - * @example - * ```ts - * import { parse } from "https://deno.land/std@$STD_VERSION/flags/mod.ts"; - * const parsedArgs = parse(["--foo", "--bar=baz", "./quux.txt"]); - * // parsedArgs: { foo: true, bar: "baz", _: ["./quux.txt"] } - * ``` - */ -export function parse< - TArgs extends Values< - TBooleans, - TStrings, - TCollectable, - TNegatable, - TDefaults, - TAliases - >, - TDoubleDash extends boolean | undefined = undefined, - TBooleans extends BooleanType = undefined, - TStrings extends StringType = undefined, - TCollectable extends Collectable = undefined, - TNegatable extends Negatable = undefined, - TDefaults extends Record | undefined = undefined, - TAliases extends Aliases | undefined = undefined, - TAliasArgNames extends string = string, - TAliasNames extends string = string, ->( - args: string[], - { - "--": doubleDash = false, - alias = {} as NonNullable, - boolean = false, - default: defaults = {} as TDefaults & Defaults, - stopEarly = false, - string = [], - collect = [], - negatable = [], - unknown = (i: string): unknown => i, - }: ParseOptions< - TBooleans, - TStrings, - TCollectable, - TNegatable, - TDefaults, - TAliases, - TDoubleDash - > = {}, -): Args { - const aliases: Record = {}; - const flags: Flags = { - bools: {}, - strings: {}, - unknownFn: unknown, - allBools: false, - collect: {}, - negatable: {}, - }; - - if (alias !== undefined) { - for (const key in alias) { - const val = getForce(alias, key); - if (typeof val === "string") { - aliases[key] = [val]; - } else { - aliases[key] = val as Array; - } - for (const alias of getForce(aliases, key)) { - aliases[alias] = [key].concat(aliases[key].filter((y) => alias !== y)); - } - } - } - - if (boolean !== undefined) { - if (typeof boolean === "boolean") { - flags.allBools = !!boolean; - } else { - const booleanArgs: ReadonlyArray = typeof boolean === "string" - ? [boolean] - : boolean; - - for (const key of booleanArgs.filter(Boolean)) { - flags.bools[key] = true; - const alias = get(aliases, key); - if (alias) { - for (const al of alias) { - flags.bools[al] = true; - } - } - } - } - } - - if (string !== undefined) { - const stringArgs: ReadonlyArray = typeof string === "string" - ? [string] - : string; - - for (const key of stringArgs.filter(Boolean)) { - flags.strings[key] = true; - const alias = get(aliases, key); - if (alias) { - for (const al of alias) { - flags.strings[al] = true; - } - } - } - } - - if (collect !== undefined) { - const collectArgs: ReadonlyArray = typeof collect === "string" - ? [collect] - : collect; - - for (const key of collectArgs.filter(Boolean)) { - flags.collect[key] = true; - const alias = get(aliases, key); - if (alias) { - for (const al of alias) { - flags.collect[al] = true; - } - } - } - } - - if (negatable !== undefined) { - const negatableArgs: ReadonlyArray = typeof negatable === "string" - ? [negatable] - : negatable; - - for (const key of negatableArgs.filter(Boolean)) { - flags.negatable[key] = true; - const alias = get(aliases, key); - if (alias) { - for (const al of alias) { - flags.negatable[al] = true; - } - } - } - } - - const argv: Args = { _: [] }; - - function argDefined(key: string, arg: string): boolean { - return ( - (flags.allBools && /^--[^=]+$/.test(arg)) || - get(flags.bools, key) || - !!get(flags.strings, key) || - !!get(aliases, key) - ); - } - - function setKey( - obj: NestedMapping, - name: string, - value: unknown, - collect = true, - ) { - let o = obj; - const keys = name.split("."); - keys.slice(0, -1).forEach(function (key) { - if (get(o, key) === undefined) { - o[key] = {}; - } - o = get(o, key) as NestedMapping; - }); - - const key = keys[keys.length - 1]; - const collectable = collect && !!get(flags.collect, name); - - if (!collectable) { - o[key] = value; - } else if (get(o, key) === undefined) { - o[key] = [value]; - } else if (Array.isArray(get(o, key))) { - (o[key] as unknown[]).push(value); - } else { - o[key] = [get(o, key), value]; - } - } - - function setArg( - key: string, - val: unknown, - arg: string | undefined = undefined, - collect?: boolean, - ) { - if (arg && flags.unknownFn && !argDefined(key, arg)) { - if (flags.unknownFn(arg, key, val) === false) return; - } - - const value = !get(flags.strings, key) && isNumber(val) ? Number(val) : val; - setKey(argv, key, value, collect); - - const alias = get(aliases, key); - if (alias) { - for (const x of alias) { - setKey(argv, x, value, collect); - } - } - } - - function aliasIsBoolean(key: string): boolean { - return getForce(aliases, key).some( - (x) => typeof get(flags.bools, x) === "boolean", - ); - } - - let notFlags: string[] = []; - - // all args after "--" are not parsed - if (args.includes("--")) { - notFlags = args.slice(args.indexOf("--") + 1); - args = args.slice(0, args.indexOf("--")); - } - - for (let i = 0; i < args.length; i++) { - const arg = args[i]; - - if (/^--.+=/.test(arg)) { - const m = arg.match(/^--([^=]+)=(.*)$/s); - assert(m != null); - const [, key, value] = m; - - if (flags.bools[key]) { - const booleanValue = value !== "false"; - setArg(key, booleanValue, arg); - } else { - setArg(key, value, arg); - } - } else if ( - /^--no-.+/.test(arg) && get(flags.negatable, arg.replace(/^--no-/, "")) - ) { - const m = arg.match(/^--no-(.+)/); - assert(m != null); - setArg(m[1], false, arg, false); - } else if (/^--.+/.test(arg)) { - const m = arg.match(/^--(.+)/); - assert(m != null); - const [, key] = m; - const next = args[i + 1]; - if ( - next !== undefined && - !/^-/.test(next) && - !get(flags.bools, key) && - !flags.allBools && - (get(aliases, key) ? !aliasIsBoolean(key) : true) - ) { - setArg(key, next, arg); - i++; - } else if (/^(true|false)$/.test(next)) { - setArg(key, next === "true", arg); - i++; - } else { - setArg(key, get(flags.strings, key) ? "" : true, arg); - } - } else if (/^-[^-]+/.test(arg)) { - const letters = arg.slice(1, -1).split(""); - - let broken = false; - for (let j = 0; j < letters.length; j++) { - const next = arg.slice(j + 2); - - if (next === "-") { - setArg(letters[j], next, arg); - continue; - } - - if (/[A-Za-z]/.test(letters[j]) && /=/.test(next)) { - setArg(letters[j], next.split(/=(.+)/)[1], arg); - broken = true; - break; - } - - if ( - /[A-Za-z]/.test(letters[j]) && - /-?\d+(\.\d*)?(e-?\d+)?$/.test(next) - ) { - setArg(letters[j], next, arg); - broken = true; - break; - } - - if (letters[j + 1] && letters[j + 1].match(/\W/)) { - setArg(letters[j], arg.slice(j + 2), arg); - broken = true; - break; - } else { - setArg(letters[j], get(flags.strings, letters[j]) ? "" : true, arg); - } - } - - const [key] = arg.slice(-1); - if (!broken && key !== "-") { - if ( - args[i + 1] && - !/^(-|--)[^-]/.test(args[i + 1]) && - !get(flags.bools, key) && - (get(aliases, key) ? !aliasIsBoolean(key) : true) - ) { - setArg(key, args[i + 1], arg); - i++; - } else if (args[i + 1] && /^(true|false)$/.test(args[i + 1])) { - setArg(key, args[i + 1] === "true", arg); - i++; - } else { - setArg(key, get(flags.strings, key) ? "" : true, arg); - } - } - } else { - if (!flags.unknownFn || flags.unknownFn(arg) !== false) { - argv._.push(flags.strings["_"] ?? !isNumber(arg) ? arg : Number(arg)); - } - if (stopEarly) { - argv._.push(...args.slice(i + 1)); - break; - } - } - } - - for (const [key, value] of Object.entries(defaults)) { - if (!hasKey(argv, key.split("."))) { - setKey(argv, key, value); - - if (aliases[key]) { - for (const x of aliases[key]) { - setKey(argv, x, value); - } - } - } - } - - for (const key of Object.keys(flags.bools)) { - if (!hasKey(argv, key.split("."))) { - const value = get(flags.collect, key) ? [] : false; - setKey( - argv, - key, - value, - false, - ); - } - } - - for (const key of Object.keys(flags.strings)) { - if (!hasKey(argv, key.split(".")) && get(flags.collect, key)) { - setKey( - argv, - key, - [], - false, - ); - } - } - - if (doubleDash) { - argv["--"] = []; - for (const key of notFlags) { - argv["--"].push(key); - } - } else { - for (const key of notFlags) { - argv._.push(key); - } - } - - return argv as Args; -} diff --git a/vendor/deno.land/std@0.182.0/fmt/colors.ts b/vendor/deno.land/std@0.182.0/fmt/colors.ts deleted file mode 100644 index b942a91..0000000 --- a/vendor/deno.land/std@0.182.0/fmt/colors.ts +++ /dev/null @@ -1,570 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. -// A module to print ANSI terminal colors. Inspired by chalk, kleur, and colors -// on npm. - -/** - * String formatters and utilities for dealing with ANSI color codes. - * - * This module is browser compatible. - * - * This module supports `NO_COLOR` environmental variable disabling any coloring - * if `NO_COLOR` is set. - * - * @example - * ```typescript - * import { - * bgBlue, - * bgRgb24, - * bgRgb8, - * bold, - * italic, - * red, - * rgb24, - * rgb8, - * } from "https://deno.land/std@$STD_VERSION/fmt/colors.ts"; - * - * console.log(bgBlue(italic(red(bold("Hello, World!"))))); - * - * // also supports 8bit colors - * - * console.log(rgb8("Hello, World!", 42)); - * - * console.log(bgRgb8("Hello, World!", 42)); - * - * // and 24bit rgb - * - * console.log(rgb24("Hello, World!", { - * r: 41, - * g: 42, - * b: 43, - * })); - * - * console.log(bgRgb24("Hello, World!", { - * r: 41, - * g: 42, - * b: 43, - * })); - * ``` - * - * @module - */ - -// deno-lint-ignore no-explicit-any -const { Deno } = globalThis as any; -const noColor = typeof Deno?.noColor === "boolean" - ? Deno.noColor as boolean - : true; - -interface Code { - open: string; - close: string; - regexp: RegExp; -} - -/** RGB 8-bits per channel. Each in range `0->255` or `0x00->0xff` */ -interface Rgb { - r: number; - g: number; - b: number; -} - -let enabled = !noColor; - -/** - * Set changing text color to enabled or disabled - * @param value - */ -export function setColorEnabled(value: boolean) { - if (noColor) { - return; - } - - enabled = value; -} - -/** Get whether text color change is enabled or disabled. */ -export function getColorEnabled(): boolean { - return enabled; -} - -/** - * Builds color code - * @param open - * @param close - */ -function code(open: number[], close: number): Code { - return { - open: `\x1b[${open.join(";")}m`, - close: `\x1b[${close}m`, - regexp: new RegExp(`\\x1b\\[${close}m`, "g"), - }; -} - -/** - * Applies color and background based on color code and its associated text - * @param str text to apply color settings to - * @param code color code to apply - */ -function run(str: string, code: Code): string { - return enabled - ? `${code.open}${str.replace(code.regexp, code.open)}${code.close}` - : str; -} - -/** - * Reset the text modified - * @param str text to reset - */ -export function reset(str: string): string { - return run(str, code([0], 0)); -} - -/** - * Make the text bold. - * @param str text to make bold - */ -export function bold(str: string): string { - return run(str, code([1], 22)); -} - -/** - * The text emits only a small amount of light. - * @param str text to dim - */ -export function dim(str: string): string { - return run(str, code([2], 22)); -} - -/** - * Make the text italic. - * @param str text to make italic - */ -export function italic(str: string): string { - return run(str, code([3], 23)); -} - -/** - * Make the text underline. - * @param str text to underline - */ -export function underline(str: string): string { - return run(str, code([4], 24)); -} - -/** - * Invert background color and text color. - * @param str text to invert its color - */ -export function inverse(str: string): string { - return run(str, code([7], 27)); -} - -/** - * Make the text hidden. - * @param str text to hide - */ -export function hidden(str: string): string { - return run(str, code([8], 28)); -} - -/** - * Put horizontal line through the center of the text. - * @param str text to strike through - */ -export function strikethrough(str: string): string { - return run(str, code([9], 29)); -} - -/** - * Set text color to black. - * @param str text to make black - */ -export function black(str: string): string { - return run(str, code([30], 39)); -} - -/** - * Set text color to red. - * @param str text to make red - */ -export function red(str: string): string { - return run(str, code([31], 39)); -} - -/** - * Set text color to green. - * @param str text to make green - */ -export function green(str: string): string { - return run(str, code([32], 39)); -} - -/** - * Set text color to yellow. - * @param str text to make yellow - */ -export function yellow(str: string): string { - return run(str, code([33], 39)); -} - -/** - * Set text color to blue. - * @param str text to make blue - */ -export function blue(str: string): string { - return run(str, code([34], 39)); -} - -/** - * Set text color to magenta. - * @param str text to make magenta - */ -export function magenta(str: string): string { - return run(str, code([35], 39)); -} - -/** - * Set text color to cyan. - * @param str text to make cyan - */ -export function cyan(str: string): string { - return run(str, code([36], 39)); -} - -/** - * Set text color to white. - * @param str text to make white - */ -export function white(str: string): string { - return run(str, code([37], 39)); -} - -/** - * Set text color to gray. - * @param str text to make gray - */ -export function gray(str: string): string { - return brightBlack(str); -} - -/** - * Set text color to bright black. - * @param str text to make bright-black - */ -export function brightBlack(str: string): string { - return run(str, code([90], 39)); -} - -/** - * Set text color to bright red. - * @param str text to make bright-red - */ -export function brightRed(str: string): string { - return run(str, code([91], 39)); -} - -/** - * Set text color to bright green. - * @param str text to make bright-green - */ -export function brightGreen(str: string): string { - return run(str, code([92], 39)); -} - -/** - * Set text color to bright yellow. - * @param str text to make bright-yellow - */ -export function brightYellow(str: string): string { - return run(str, code([93], 39)); -} - -/** - * Set text color to bright blue. - * @param str text to make bright-blue - */ -export function brightBlue(str: string): string { - return run(str, code([94], 39)); -} - -/** - * Set text color to bright magenta. - * @param str text to make bright-magenta - */ -export function brightMagenta(str: string): string { - return run(str, code([95], 39)); -} - -/** - * Set text color to bright cyan. - * @param str text to make bright-cyan - */ -export function brightCyan(str: string): string { - return run(str, code([96], 39)); -} - -/** - * Set text color to bright white. - * @param str text to make bright-white - */ -export function brightWhite(str: string): string { - return run(str, code([97], 39)); -} - -/** - * Set background color to black. - * @param str text to make its background black - */ -export function bgBlack(str: string): string { - return run(str, code([40], 49)); -} - -/** - * Set background color to red. - * @param str text to make its background red - */ -export function bgRed(str: string): string { - return run(str, code([41], 49)); -} - -/** - * Set background color to green. - * @param str text to make its background green - */ -export function bgGreen(str: string): string { - return run(str, code([42], 49)); -} - -/** - * Set background color to yellow. - * @param str text to make its background yellow - */ -export function bgYellow(str: string): string { - return run(str, code([43], 49)); -} - -/** - * Set background color to blue. - * @param str text to make its background blue - */ -export function bgBlue(str: string): string { - return run(str, code([44], 49)); -} - -/** - * Set background color to magenta. - * @param str text to make its background magenta - */ -export function bgMagenta(str: string): string { - return run(str, code([45], 49)); -} - -/** - * Set background color to cyan. - * @param str text to make its background cyan - */ -export function bgCyan(str: string): string { - return run(str, code([46], 49)); -} - -/** - * Set background color to white. - * @param str text to make its background white - */ -export function bgWhite(str: string): string { - return run(str, code([47], 49)); -} - -/** - * Set background color to bright black. - * @param str text to make its background bright-black - */ -export function bgBrightBlack(str: string): string { - return run(str, code([100], 49)); -} - -/** - * Set background color to bright red. - * @param str text to make its background bright-red - */ -export function bgBrightRed(str: string): string { - return run(str, code([101], 49)); -} - -/** - * Set background color to bright green. - * @param str text to make its background bright-green - */ -export function bgBrightGreen(str: string): string { - return run(str, code([102], 49)); -} - -/** - * Set background color to bright yellow. - * @param str text to make its background bright-yellow - */ -export function bgBrightYellow(str: string): string { - return run(str, code([103], 49)); -} - -/** - * Set background color to bright blue. - * @param str text to make its background bright-blue - */ -export function bgBrightBlue(str: string): string { - return run(str, code([104], 49)); -} - -/** - * Set background color to bright magenta. - * @param str text to make its background bright-magenta - */ -export function bgBrightMagenta(str: string): string { - return run(str, code([105], 49)); -} - -/** - * Set background color to bright cyan. - * @param str text to make its background bright-cyan - */ -export function bgBrightCyan(str: string): string { - return run(str, code([106], 49)); -} - -/** - * Set background color to bright white. - * @param str text to make its background bright-white - */ -export function bgBrightWhite(str: string): string { - return run(str, code([107], 49)); -} - -/* Special Color Sequences */ - -/** - * Clam and truncate color codes - * @param n - * @param max number to truncate to - * @param min number to truncate from - */ -function clampAndTruncate(n: number, max = 255, min = 0): number { - return Math.trunc(Math.max(Math.min(n, max), min)); -} - -/** - * Set text color using paletted 8bit colors. - * https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit - * @param str text color to apply paletted 8bit colors to - * @param color code - */ -export function rgb8(str: string, color: number): string { - return run(str, code([38, 5, clampAndTruncate(color)], 39)); -} - -/** - * Set background color using paletted 8bit colors. - * https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit - * @param str text color to apply paletted 8bit background colors to - * @param color code - */ -export function bgRgb8(str: string, color: number): string { - return run(str, code([48, 5, clampAndTruncate(color)], 49)); -} - -/** - * Set text color using 24bit rgb. - * `color` can be a number in range `0x000000` to `0xffffff` or - * an `Rgb`. - * - * To produce the color magenta: - * - * ```ts - * import { rgb24 } from "https://deno.land/std@$STD_VERSION/fmt/colors.ts"; - * rgb24("foo", 0xff00ff); - * rgb24("foo", {r: 255, g: 0, b: 255}); - * ``` - * @param str text color to apply 24bit rgb to - * @param color code - */ -export function rgb24(str: string, color: number | Rgb): string { - if (typeof color === "number") { - return run( - str, - code( - [38, 2, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff], - 39, - ), - ); - } - return run( - str, - code( - [ - 38, - 2, - clampAndTruncate(color.r), - clampAndTruncate(color.g), - clampAndTruncate(color.b), - ], - 39, - ), - ); -} - -/** - * Set background color using 24bit rgb. - * `color` can be a number in range `0x000000` to `0xffffff` or - * an `Rgb`. - * - * To produce the color magenta: - * - * ```ts - * import { bgRgb24 } from "https://deno.land/std@$STD_VERSION/fmt/colors.ts"; - * bgRgb24("foo", 0xff00ff); - * bgRgb24("foo", {r: 255, g: 0, b: 255}); - * ``` - * @param str text color to apply 24bit rgb to - * @param color code - */ -export function bgRgb24(str: string, color: number | Rgb): string { - if (typeof color === "number") { - return run( - str, - code( - [48, 2, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff], - 49, - ), - ); - } - return run( - str, - code( - [ - 48, - 2, - clampAndTruncate(color.r), - clampAndTruncate(color.g), - clampAndTruncate(color.b), - ], - 49, - ), - ); -} - -// https://github.com/chalk/ansi-regex/blob/02fa893d619d3da85411acc8fd4e2eea0e95a9d9/index.js -const ANSI_PATTERN = new RegExp( - [ - "[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)", - "(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))", - ].join("|"), - "g", -); - -/** - * Remove ANSI escape codes from the string. - * @param string to remove ANSI escape codes from - */ -export function stripColor(string: string): string { - return string.replace(ANSI_PATTERN, ""); -} diff --git a/vendor/deno.land/std@0.182.0/fs/_util.ts b/vendor/deno.land/std@0.182.0/fs/_util.ts deleted file mode 100644 index f691399..0000000 --- a/vendor/deno.land/std@0.182.0/fs/_util.ts +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import * as path from "../path/mod.ts"; -import { basename, fromFileUrl, normalize } from "../path/mod.ts"; - -/** - * Test whether or not `dest` is a sub-directory of `src` - * @param src src file path - * @param dest dest file path - * @param sep path separator - */ -export function isSubdir( - src: string | URL, - dest: string | URL, - sep: string = path.sep, -): boolean { - if (src === dest) { - return false; - } - src = toPathString(src); - const srcArray = src.split(sep); - dest = toPathString(dest); - const destArray = dest.split(sep); - return srcArray.every((current, i) => destArray[i] === current); -} - -export type PathType = "file" | "dir" | "symlink"; - -/** - * Get a human readable file type string. - * - * @param fileInfo A FileInfo describes a file and is returned by `stat`, - * `lstat` - */ -export function getFileInfoType(fileInfo: Deno.FileInfo): PathType | undefined { - return fileInfo.isFile - ? "file" - : fileInfo.isDirectory - ? "dir" - : fileInfo.isSymlink - ? "symlink" - : undefined; -} - -export interface WalkEntry extends Deno.DirEntry { - path: string; -} - -/** Create WalkEntry for the `path` synchronously */ -export function createWalkEntrySync(path: string | URL): WalkEntry { - path = toPathString(path); - path = normalize(path); - const name = basename(path); - const info = Deno.statSync(path); - return { - path, - name, - isFile: info.isFile, - isDirectory: info.isDirectory, - isSymlink: info.isSymlink, - }; -} - -/** Create WalkEntry for the `path` asynchronously */ -export async function createWalkEntry(path: string | URL): Promise { - path = toPathString(path); - path = normalize(path); - const name = basename(path); - const info = await Deno.stat(path); - return { - path, - name, - isFile: info.isFile, - isDirectory: info.isDirectory, - isSymlink: info.isSymlink, - }; -} - -export function toPathString(path: string | URL): string { - return path instanceof URL ? fromFileUrl(path) : path; -} diff --git a/vendor/deno.land/std@0.182.0/fs/empty_dir.ts b/vendor/deno.land/std@0.182.0/fs/empty_dir.ts deleted file mode 100644 index ed51926..0000000 --- a/vendor/deno.land/std@0.182.0/fs/empty_dir.ts +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import { join } from "../path/mod.ts"; -import { toPathString } from "./_util.ts"; - -/** - * Ensures that a directory is empty. - * Deletes directory contents if the directory is not empty. - * If the directory does not exist, it is created. - * The directory itself is not deleted. - * Requires the `--allow-read` and `--allow-write` flag. - * - * @example - * ```ts - * import { emptyDir } from "https://deno.land/std@$STD_VERSION/fs/mod.ts"; - * - * emptyDir("./foo"); // returns a promise - * ``` - */ -export async function emptyDir(dir: string | URL) { - try { - const items = []; - for await (const dirEntry of Deno.readDir(dir)) { - items.push(dirEntry); - } - - while (items.length) { - const item = items.shift(); - if (item && item.name) { - const filepath = join(toPathString(dir), item.name); - await Deno.remove(filepath, { recursive: true }); - } - } - } catch (err) { - if (!(err instanceof Deno.errors.NotFound)) { - throw err; - } - - // if not exist. then create it - await Deno.mkdir(dir, { recursive: true }); - } -} - -/** - * Ensures that a directory is empty. - * Deletes directory contents if the directory is not empty. - * If the directory does not exist, it is created. - * The directory itself is not deleted. - * Requires the `--allow-read` and `--allow-write` flag. - * - * @example - * ```ts - * import { emptyDirSync } from "https://deno.land/std@$STD_VERSION/fs/mod.ts"; - * - * emptyDirSync("./foo"); // void - * ``` - */ -export function emptyDirSync(dir: string | URL) { - try { - const items = [...Deno.readDirSync(dir)]; - - // If the directory exists, remove all entries inside it. - while (items.length) { - const item = items.shift(); - if (item && item.name) { - const filepath = join(toPathString(dir), item.name); - Deno.removeSync(filepath, { recursive: true }); - } - } - } catch (err) { - if (!(err instanceof Deno.errors.NotFound)) { - throw err; - } - // if not exist. then create it - Deno.mkdirSync(dir, { recursive: true }); - } -} diff --git a/vendor/deno.land/std@0.182.0/fs/expand_glob.ts b/vendor/deno.land/std@0.182.0/fs/expand_glob.ts deleted file mode 100644 index c2510db..0000000 --- a/vendor/deno.land/std@0.182.0/fs/expand_glob.ts +++ /dev/null @@ -1,306 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import { - GlobOptions, - globToRegExp, - isAbsolute, - isGlob, - joinGlobs, - resolve, - SEP_PATTERN, -} from "../path/mod.ts"; -import { walk, walkSync } from "./walk.ts"; -import { assert } from "../_util/asserts.ts"; -import { isWindows } from "../_util/os.ts"; -import { - createWalkEntry, - createWalkEntrySync, - toPathString, - WalkEntry, -} from "./_util.ts"; - -export interface ExpandGlobOptions extends Omit { - root?: string; - exclude?: string[]; - includeDirs?: boolean; - followSymlinks?: boolean; -} - -interface SplitPath { - segments: string[]; - isAbsolute: boolean; - hasTrailingSep: boolean; - // Defined for any absolute Windows path. - winRoot?: string; -} - -function split(path: string): SplitPath { - const s = SEP_PATTERN.source; - const segments = path - .replace(new RegExp(`^${s}|${s}$`, "g"), "") - .split(SEP_PATTERN); - const isAbsolute_ = isAbsolute(path); - return { - segments, - isAbsolute: isAbsolute_, - hasTrailingSep: !!path.match(new RegExp(`${s}$`)), - winRoot: isWindows && isAbsolute_ ? segments.shift() : undefined, - }; -} - -function throwUnlessNotFound(error: unknown) { - if (!(error instanceof Deno.errors.NotFound)) { - throw error; - } -} - -function comparePath(a: WalkEntry, b: WalkEntry): number { - if (a.path < b.path) return -1; - if (a.path > b.path) return 1; - return 0; -} - -/** - * Expand the glob string from the specified `root` directory and yield each - * result as a `WalkEntry` object. - * - * See [`globToRegExp()`](../path/glob.ts#globToRegExp) for details on supported - * syntax. - * - * @example - * ```ts - * import { expandGlob } from "https://deno.land/std@$STD_VERSION/fs/expand_glob.ts"; - * for await (const file of expandGlob("**\/*.ts")) { - * console.log(file); - * } - * ``` - */ -export async function* expandGlob( - glob: string | URL, - { - root = Deno.cwd(), - exclude = [], - includeDirs = true, - extended = true, - globstar = true, - caseInsensitive, - followSymlinks, - }: ExpandGlobOptions = {}, -): AsyncIterableIterator { - const globOptions: GlobOptions = { extended, globstar, caseInsensitive }; - const absRoot = resolve(root); - const resolveFromRoot = (path: string): string => resolve(absRoot, path); - const excludePatterns = exclude - .map(resolveFromRoot) - .map((s: string): RegExp => globToRegExp(s, globOptions)); - const shouldInclude = (path: string): boolean => - !excludePatterns.some((p: RegExp): boolean => !!path.match(p)); - const { - segments, - isAbsolute: isGlobAbsolute, - hasTrailingSep, - winRoot, - } = split(toPathString(glob)); - - let fixedRoot = isGlobAbsolute - ? winRoot != undefined ? winRoot : "/" - : absRoot; - while (segments.length > 0 && !isGlob(segments[0])) { - const seg = segments.shift(); - assert(seg != null); - fixedRoot = joinGlobs([fixedRoot, seg], globOptions); - } - - let fixedRootInfo: WalkEntry; - try { - fixedRootInfo = await createWalkEntry(fixedRoot); - } catch (error) { - return throwUnlessNotFound(error); - } - - async function* advanceMatch( - walkInfo: WalkEntry, - globSegment: string, - ): AsyncIterableIterator { - if (!walkInfo.isDirectory) { - return; - } else if (globSegment == "..") { - const parentPath = joinGlobs([walkInfo.path, ".."], globOptions); - try { - if (shouldInclude(parentPath)) { - return yield await createWalkEntry(parentPath); - } - } catch (error) { - throwUnlessNotFound(error); - } - return; - } else if (globSegment == "**") { - return yield* walk(walkInfo.path, { - skip: excludePatterns, - maxDepth: globstar ? Infinity : 1, - followSymlinks, - }); - } - const globPattern = globToRegExp(globSegment, globOptions); - for await ( - const walkEntry of walk(walkInfo.path, { - maxDepth: 1, - skip: excludePatterns, - followSymlinks, - }) - ) { - if ( - walkEntry.path != walkInfo.path && - walkEntry.name.match(globPattern) - ) { - yield walkEntry; - } - } - } - - let currentMatches: WalkEntry[] = [fixedRootInfo]; - for (const segment of segments) { - // Advancing the list of current matches may introduce duplicates, so we - // pass everything through this Map. - const nextMatchMap: Map = new Map(); - await Promise.all( - currentMatches.map(async (currentMatch) => { - for await (const nextMatch of advanceMatch(currentMatch, segment)) { - nextMatchMap.set(nextMatch.path, nextMatch); - } - }), - ); - currentMatches = [...nextMatchMap.values()].sort(comparePath); - } - - if (hasTrailingSep) { - currentMatches = currentMatches.filter( - (entry: WalkEntry): boolean => entry.isDirectory, - ); - } - if (!includeDirs) { - currentMatches = currentMatches.filter( - (entry: WalkEntry): boolean => !entry.isDirectory, - ); - } - yield* currentMatches; -} - -/** - * Synchronous version of `expandGlob()`. - * - * @example - * ```ts - * import { expandGlobSync } from "https://deno.land/std@$STD_VERSION/fs/expand_glob.ts"; - * for (const file of expandGlobSync("**\/*.ts")) { - * console.log(file); - * } - * ``` - */ -export function* expandGlobSync( - glob: string | URL, - { - root = Deno.cwd(), - exclude = [], - includeDirs = true, - extended = true, - globstar = true, - caseInsensitive, - followSymlinks, - }: ExpandGlobOptions = {}, -): IterableIterator { - const globOptions: GlobOptions = { extended, globstar, caseInsensitive }; - const absRoot = resolve(root); - const resolveFromRoot = (path: string): string => resolve(absRoot, path); - const excludePatterns = exclude - .map(resolveFromRoot) - .map((s: string): RegExp => globToRegExp(s, globOptions)); - const shouldInclude = (path: string): boolean => - !excludePatterns.some((p: RegExp): boolean => !!path.match(p)); - const { - segments, - isAbsolute: isGlobAbsolute, - hasTrailingSep, - winRoot, - } = split(toPathString(glob)); - - let fixedRoot = isGlobAbsolute - ? winRoot != undefined ? winRoot : "/" - : absRoot; - while (segments.length > 0 && !isGlob(segments[0])) { - const seg = segments.shift(); - assert(seg != null); - fixedRoot = joinGlobs([fixedRoot, seg], globOptions); - } - - let fixedRootInfo: WalkEntry; - try { - fixedRootInfo = createWalkEntrySync(fixedRoot); - } catch (error) { - return throwUnlessNotFound(error); - } - - function* advanceMatch( - walkInfo: WalkEntry, - globSegment: string, - ): IterableIterator { - if (!walkInfo.isDirectory) { - return; - } else if (globSegment == "..") { - const parentPath = joinGlobs([walkInfo.path, ".."], globOptions); - try { - if (shouldInclude(parentPath)) { - return yield createWalkEntrySync(parentPath); - } - } catch (error) { - throwUnlessNotFound(error); - } - return; - } else if (globSegment == "**") { - return yield* walkSync(walkInfo.path, { - skip: excludePatterns, - maxDepth: globstar ? Infinity : 1, - followSymlinks, - }); - } - const globPattern = globToRegExp(globSegment, globOptions); - for ( - const walkEntry of walkSync(walkInfo.path, { - maxDepth: 1, - skip: excludePatterns, - followSymlinks, - }) - ) { - if ( - walkEntry.path != walkInfo.path && - walkEntry.name.match(globPattern) - ) { - yield walkEntry; - } - } - } - - let currentMatches: WalkEntry[] = [fixedRootInfo]; - for (const segment of segments) { - // Advancing the list of current matches may introduce duplicates, so we - // pass everything through this Map. - const nextMatchMap: Map = new Map(); - for (const currentMatch of currentMatches) { - for (const nextMatch of advanceMatch(currentMatch, segment)) { - nextMatchMap.set(nextMatch.path, nextMatch); - } - } - currentMatches = [...nextMatchMap.values()].sort(comparePath); - } - - if (hasTrailingSep) { - currentMatches = currentMatches.filter( - (entry: WalkEntry): boolean => entry.isDirectory, - ); - } - if (!includeDirs) { - currentMatches = currentMatches.filter( - (entry: WalkEntry): boolean => !entry.isDirectory, - ); - } - yield* currentMatches; -} diff --git a/vendor/deno.land/std@0.182.0/fs/walk.ts b/vendor/deno.land/std@0.182.0/fs/walk.ts deleted file mode 100644 index fc7c746..0000000 --- a/vendor/deno.land/std@0.182.0/fs/walk.ts +++ /dev/null @@ -1,196 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -// Documentation and interface for walk were adapted from Go -// https://golang.org/pkg/path/filepath/#Walk -// Copyright 2009 The Go Authors. All rights reserved. BSD license. -import { assert } from "../_util/asserts.ts"; -import { join, normalize } from "../path/mod.ts"; -import { - createWalkEntry, - createWalkEntrySync, - toPathString, - WalkEntry, -} from "./_util.ts"; - -export class WalkError extends Error { - override cause: unknown; - override name = "WalkError"; - path: string; - - constructor(cause: unknown, path: string) { - super( - `${cause instanceof Error ? cause.message : cause} for path "${path}"`, - ); - this.path = path; - this.cause = cause; - } -} - -function include( - path: string, - exts?: string[], - match?: RegExp[], - skip?: RegExp[], -): boolean { - if (exts && !exts.some((ext): boolean => path.endsWith(ext))) { - return false; - } - if (match && !match.some((pattern): boolean => !!path.match(pattern))) { - return false; - } - if (skip && skip.some((pattern): boolean => !!path.match(pattern))) { - return false; - } - return true; -} - -function wrapErrorWithPath(err: unknown, root: string) { - if (err instanceof WalkError) return err; - return new WalkError(err, root); -} - -export interface WalkOptions { - /** @default {Infinity} */ - maxDepth?: number; - /** @default {true} */ - includeFiles?: boolean; - /** @default {true} */ - includeDirs?: boolean; - /** @default {false} */ - followSymlinks?: boolean; - exts?: string[]; - match?: RegExp[]; - skip?: RegExp[]; -} -export type { WalkEntry }; - -/** - * Walks the file tree rooted at root, yielding each file or directory in the - * tree filtered according to the given options. - * - * @example - * ```ts - * import { walk } from "https://deno.land/std@$STD_VERSION/fs/walk.ts"; - * import { assert } from "https://deno.land/std@$STD_VERSION/testing/asserts.ts"; - * - * for await (const entry of walk(".")) { - * console.log(entry.path); - * assert(entry.isFile); - * } - * ``` - */ -export async function* walk( - root: string | URL, - { - maxDepth = Infinity, - includeFiles = true, - includeDirs = true, - followSymlinks = false, - exts = undefined, - match = undefined, - skip = undefined, - }: WalkOptions = {}, -): AsyncIterableIterator { - if (maxDepth < 0) { - return; - } - root = toPathString(root); - if (includeDirs && include(root, exts, match, skip)) { - yield await createWalkEntry(root); - } - if (maxDepth < 1 || !include(root, undefined, undefined, skip)) { - return; - } - try { - for await (const entry of Deno.readDir(root)) { - assert(entry.name != null); - let path = join(root, entry.name); - - let { isSymlink, isDirectory } = entry; - - if (isSymlink) { - if (!followSymlinks) continue; - path = await Deno.realPath(path); - // Caveat emptor: don't assume |path| is not a symlink. realpath() - // resolves symlinks but another process can replace the file system - // entity with a different type of entity before we call lstat(). - ({ isSymlink, isDirectory } = await Deno.lstat(path)); - } - - if (isSymlink || isDirectory) { - yield* walk(path, { - maxDepth: maxDepth - 1, - includeFiles, - includeDirs, - followSymlinks, - exts, - match, - skip, - }); - } else if (includeFiles && include(path, exts, match, skip)) { - yield { path, ...entry }; - } - } - } catch (err) { - throw wrapErrorWithPath(err, normalize(root)); - } -} - -/** Same as walk() but uses synchronous ops */ -export function* walkSync( - root: string | URL, - { - maxDepth = Infinity, - includeFiles = true, - includeDirs = true, - followSymlinks = false, - exts = undefined, - match = undefined, - skip = undefined, - }: WalkOptions = {}, -): IterableIterator { - root = toPathString(root); - if (maxDepth < 0) { - return; - } - if (includeDirs && include(root, exts, match, skip)) { - yield createWalkEntrySync(root); - } - if (maxDepth < 1 || !include(root, undefined, undefined, skip)) { - return; - } - let entries; - try { - entries = Deno.readDirSync(root); - } catch (err) { - throw wrapErrorWithPath(err, normalize(root)); - } - for (const entry of entries) { - assert(entry.name != null); - let path = join(root, entry.name); - - let { isSymlink, isDirectory } = entry; - - if (isSymlink) { - if (!followSymlinks) continue; - path = Deno.realPathSync(path); - // Caveat emptor: don't assume |path| is not a symlink. realpath() - // resolves symlinks but another process can replace the file system - // entity with a different type of entity before we call lstat(). - ({ isSymlink, isDirectory } = Deno.lstatSync(path)); - } - - if (isSymlink || isDirectory) { - yield* walkSync(path, { - maxDepth: maxDepth - 1, - includeFiles, - includeDirs, - followSymlinks, - exts, - match, - skip, - }); - } else if (includeFiles && include(path, exts, match, skip)) { - yield { path, ...entry }; - } - } -} diff --git a/vendor/deno.land/std@0.182.0/path/_constants.ts b/vendor/deno.land/std@0.182.0/path/_constants.ts deleted file mode 100644 index 8da22a8..0000000 --- a/vendor/deno.land/std@0.182.0/path/_constants.ts +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -// Copyright the Browserify authors. MIT License. -// Ported from https://github.com/browserify/path-browserify/ -// This module is browser compatible. - -// Alphabet chars. -export const CHAR_UPPERCASE_A = 65; /* A */ -export const CHAR_LOWERCASE_A = 97; /* a */ -export const CHAR_UPPERCASE_Z = 90; /* Z */ -export const CHAR_LOWERCASE_Z = 122; /* z */ - -// Non-alphabetic chars. -export const CHAR_DOT = 46; /* . */ -export const CHAR_FORWARD_SLASH = 47; /* / */ -export const CHAR_BACKWARD_SLASH = 92; /* \ */ -export const CHAR_VERTICAL_LINE = 124; /* | */ -export const CHAR_COLON = 58; /* : */ -export const CHAR_QUESTION_MARK = 63; /* ? */ -export const CHAR_UNDERSCORE = 95; /* _ */ -export const CHAR_LINE_FEED = 10; /* \n */ -export const CHAR_CARRIAGE_RETURN = 13; /* \r */ -export const CHAR_TAB = 9; /* \t */ -export const CHAR_FORM_FEED = 12; /* \f */ -export const CHAR_EXCLAMATION_MARK = 33; /* ! */ -export const CHAR_HASH = 35; /* # */ -export const CHAR_SPACE = 32; /* */ -export const CHAR_NO_BREAK_SPACE = 160; /* \u00A0 */ -export const CHAR_ZERO_WIDTH_NOBREAK_SPACE = 65279; /* \uFEFF */ -export const CHAR_LEFT_SQUARE_BRACKET = 91; /* [ */ -export const CHAR_RIGHT_SQUARE_BRACKET = 93; /* ] */ -export const CHAR_LEFT_ANGLE_BRACKET = 60; /* < */ -export const CHAR_RIGHT_ANGLE_BRACKET = 62; /* > */ -export const CHAR_LEFT_CURLY_BRACKET = 123; /* { */ -export const CHAR_RIGHT_CURLY_BRACKET = 125; /* } */ -export const CHAR_HYPHEN_MINUS = 45; /* - */ -export const CHAR_PLUS = 43; /* + */ -export const CHAR_DOUBLE_QUOTE = 34; /* " */ -export const CHAR_SINGLE_QUOTE = 39; /* ' */ -export const CHAR_PERCENT = 37; /* % */ -export const CHAR_SEMICOLON = 59; /* ; */ -export const CHAR_CIRCUMFLEX_ACCENT = 94; /* ^ */ -export const CHAR_GRAVE_ACCENT = 96; /* ` */ -export const CHAR_AT = 64; /* @ */ -export const CHAR_AMPERSAND = 38; /* & */ -export const CHAR_EQUAL = 61; /* = */ - -// Digits -export const CHAR_0 = 48; /* 0 */ -export const CHAR_9 = 57; /* 9 */ diff --git a/vendor/deno.land/std@0.182.0/path/_interface.ts b/vendor/deno.land/std@0.182.0/path/_interface.ts deleted file mode 100644 index 153f3de..0000000 --- a/vendor/deno.land/std@0.182.0/path/_interface.ts +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -/** - * A parsed path object generated by path.parse() or consumed by path.format(). - */ -export interface ParsedPath { - /** - * The root of the path such as '/' or 'c:\' - */ - root: string; - /** - * The full directory path such as '/home/user/dir' or 'c:\path\dir' - */ - dir: string; - /** - * The file name including extension (if any) such as 'index.html' - */ - base: string; - /** - * The file extension (if any) such as '.html' - */ - ext: string; - /** - * The file name without extension (if any) such as 'index' - */ - name: string; -} - -export type FormatInputPathObject = Partial; diff --git a/vendor/deno.land/std@0.182.0/path/_util.ts b/vendor/deno.land/std@0.182.0/path/_util.ts deleted file mode 100644 index b84ff91..0000000 --- a/vendor/deno.land/std@0.182.0/path/_util.ts +++ /dev/null @@ -1,194 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -// Copyright the Browserify authors. MIT License. -// Ported from https://github.com/browserify/path-browserify/ -// This module is browser compatible. - -import type { FormatInputPathObject } from "./_interface.ts"; -import { - CHAR_BACKWARD_SLASH, - CHAR_DOT, - CHAR_FORWARD_SLASH, - CHAR_LOWERCASE_A, - CHAR_LOWERCASE_Z, - CHAR_UPPERCASE_A, - CHAR_UPPERCASE_Z, -} from "./_constants.ts"; - -export function assertPath(path: string) { - if (typeof path !== "string") { - throw new TypeError( - `Path must be a string. Received ${JSON.stringify(path)}`, - ); - } -} - -export function isPosixPathSeparator(code: number): boolean { - return code === CHAR_FORWARD_SLASH; -} - -export function isPathSeparator(code: number): boolean { - return isPosixPathSeparator(code) || code === CHAR_BACKWARD_SLASH; -} - -export function isWindowsDeviceRoot(code: number): boolean { - return ( - (code >= CHAR_LOWERCASE_A && code <= CHAR_LOWERCASE_Z) || - (code >= CHAR_UPPERCASE_A && code <= CHAR_UPPERCASE_Z) - ); -} - -// Resolves . and .. elements in a path with directory names -export function normalizeString( - path: string, - allowAboveRoot: boolean, - separator: string, - isPathSeparator: (code: number) => boolean, -): string { - let res = ""; - let lastSegmentLength = 0; - let lastSlash = -1; - let dots = 0; - let code: number | undefined; - for (let i = 0, len = path.length; i <= len; ++i) { - if (i < len) code = path.charCodeAt(i); - else if (isPathSeparator(code!)) break; - else code = CHAR_FORWARD_SLASH; - - if (isPathSeparator(code!)) { - if (lastSlash === i - 1 || dots === 1) { - // NOOP - } else if (lastSlash !== i - 1 && dots === 2) { - if ( - res.length < 2 || - lastSegmentLength !== 2 || - res.charCodeAt(res.length - 1) !== CHAR_DOT || - res.charCodeAt(res.length - 2) !== CHAR_DOT - ) { - if (res.length > 2) { - const lastSlashIndex = res.lastIndexOf(separator); - if (lastSlashIndex === -1) { - res = ""; - lastSegmentLength = 0; - } else { - res = res.slice(0, lastSlashIndex); - lastSegmentLength = res.length - 1 - res.lastIndexOf(separator); - } - lastSlash = i; - dots = 0; - continue; - } else if (res.length === 2 || res.length === 1) { - res = ""; - lastSegmentLength = 0; - lastSlash = i; - dots = 0; - continue; - } - } - if (allowAboveRoot) { - if (res.length > 0) res += `${separator}..`; - else res = ".."; - lastSegmentLength = 2; - } - } else { - if (res.length > 0) res += separator + path.slice(lastSlash + 1, i); - else res = path.slice(lastSlash + 1, i); - lastSegmentLength = i - lastSlash - 1; - } - lastSlash = i; - dots = 0; - } else if (code === CHAR_DOT && dots !== -1) { - ++dots; - } else { - dots = -1; - } - } - return res; -} - -export function _format( - sep: string, - pathObject: FormatInputPathObject, -): string { - const dir: string | undefined = pathObject.dir || pathObject.root; - const base: string = pathObject.base || - (pathObject.name || "") + (pathObject.ext || ""); - if (!dir) return base; - if (base === sep) return dir; - if (dir === pathObject.root) return dir + base; - return dir + sep + base; -} - -const WHITESPACE_ENCODINGS: Record = { - "\u0009": "%09", - "\u000A": "%0A", - "\u000B": "%0B", - "\u000C": "%0C", - "\u000D": "%0D", - "\u0020": "%20", -}; - -export function encodeWhitespace(string: string): string { - return string.replaceAll(/[\s]/g, (c) => { - return WHITESPACE_ENCODINGS[c] ?? c; - }); -} - -export function lastPathSegment( - path: string, - isSep: (char: number) => boolean, - start = 0, -): string { - let matchedNonSeparator = false; - let end = path.length; - - for (let i = path.length - 1; i >= start; --i) { - if (isSep(path.charCodeAt(i))) { - if (matchedNonSeparator) { - start = i + 1; - break; - } - } else if (!matchedNonSeparator) { - matchedNonSeparator = true; - end = i + 1; - } - } - - return path.slice(start, end); -} - -export function stripTrailingSeparators( - segment: string, - isSep: (char: number) => boolean, -): string { - if (segment.length <= 1) { - return segment; - } - - let end = segment.length; - - for (let i = segment.length - 1; i > 0; i--) { - if (isSep(segment.charCodeAt(i))) { - end = i; - } else { - break; - } - } - - return segment.slice(0, end); -} - -export function stripSuffix(name: string, suffix: string): string { - if (suffix.length >= name.length) { - return name; - } - - const lenDiff = name.length - suffix.length; - - for (let i = suffix.length - 1; i >= 0; --i) { - if (name.charCodeAt(lenDiff + i) !== suffix.charCodeAt(i)) { - return name; - } - } - - return name.slice(0, -suffix.length); -} diff --git a/vendor/deno.land/std@0.182.0/path/common.ts b/vendor/deno.land/std@0.182.0/path/common.ts deleted file mode 100644 index 791105a..0000000 --- a/vendor/deno.land/std@0.182.0/path/common.ts +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -import { SEP } from "./separator.ts"; - -/** Determines the common path from a set of paths, using an optional separator, - * which defaults to the OS default separator. - * - * ```ts - * import { common } from "https://deno.land/std@$STD_VERSION/path/mod.ts"; - * const p = common([ - * "./deno/std/path/mod.ts", - * "./deno/std/fs/mod.ts", - * ]); - * console.log(p); // "./deno/std/" - * ``` - */ -export function common(paths: string[], sep = SEP): string { - const [first = "", ...remaining] = paths; - if (first === "" || remaining.length === 0) { - return first.substring(0, first.lastIndexOf(sep) + 1); - } - const parts = first.split(sep); - - let endOfPrefix = parts.length; - for (const path of remaining) { - const compare = path.split(sep); - for (let i = 0; i < endOfPrefix; i++) { - if (compare[i] !== parts[i]) { - endOfPrefix = i; - } - } - - if (endOfPrefix === 0) { - return ""; - } - } - const prefix = parts.slice(0, endOfPrefix).join(sep); - return prefix.endsWith(sep) ? prefix : `${prefix}${sep}`; -} diff --git a/vendor/deno.land/std@0.182.0/path/glob.ts b/vendor/deno.land/std@0.182.0/path/glob.ts deleted file mode 100644 index 265dc4a..0000000 --- a/vendor/deno.land/std@0.182.0/path/glob.ts +++ /dev/null @@ -1,418 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -import { isWindows, osType } from "../_util/os.ts"; -import { SEP, SEP_PATTERN } from "./separator.ts"; -import * as _win32 from "./win32.ts"; -import * as _posix from "./posix.ts"; -import type { OSType } from "../_util/os.ts"; - -const path = isWindows ? _win32 : _posix; -const { join, normalize } = path; - -export interface GlobOptions { - /** Extended glob syntax. - * See https://www.linuxjournal.com/content/bash-extended-globbing. - * - * @default {true} - */ - extended?: boolean; - /** Globstar syntax. - * See https://www.linuxjournal.com/content/globstar-new-bash-globbing-option. - * If false, `**` is treated like `*`. - * - * @default {true} - */ - globstar?: boolean; - /** Whether globstar should be case-insensitive. */ - caseInsensitive?: boolean; - /** Operating system. Defaults to the native OS. */ - os?: OSType; -} - -export type GlobToRegExpOptions = GlobOptions; - -const regExpEscapeChars = [ - "!", - "$", - "(", - ")", - "*", - "+", - ".", - "=", - "?", - "[", - "\\", - "^", - "{", - "|", -]; -const rangeEscapeChars = ["-", "\\", "]"]; - -/** Convert a glob string to a regular expression. - * - * Tries to match bash glob expansion as closely as possible. - * - * Basic glob syntax: - * - `*` - Matches everything without leaving the path segment. - * - `?` - Matches any single character. - * - `{foo,bar}` - Matches `foo` or `bar`. - * - `[abcd]` - Matches `a`, `b`, `c` or `d`. - * - `[a-d]` - Matches `a`, `b`, `c` or `d`. - * - `[!abcd]` - Matches any single character besides `a`, `b`, `c` or `d`. - * - `[[::]]` - Matches any character belonging to ``. - * - `[[:alnum:]]` - Matches any digit or letter. - * - `[[:digit:]abc]` - Matches any digit, `a`, `b` or `c`. - * - See https://facelessuser.github.io/wcmatch/glob/#posix-character-classes - * for a complete list of supported character classes. - * - `\` - Escapes the next character for an `os` other than `"windows"`. - * - \` - Escapes the next character for `os` set to `"windows"`. - * - `/` - Path separator. - * - `\` - Additional path separator only for `os` set to `"windows"`. - * - * Extended syntax: - * - Requires `{ extended: true }`. - * - `?(foo|bar)` - Matches 0 or 1 instance of `{foo,bar}`. - * - `@(foo|bar)` - Matches 1 instance of `{foo,bar}`. They behave the same. - * - `*(foo|bar)` - Matches _n_ instances of `{foo,bar}`. - * - `+(foo|bar)` - Matches _n > 0_ instances of `{foo,bar}`. - * - `!(foo|bar)` - Matches anything other than `{foo,bar}`. - * - See https://www.linuxjournal.com/content/bash-extended-globbing. - * - * Globstar syntax: - * - Requires `{ globstar: true }`. - * - `**` - Matches any number of any path segments. - * - Must comprise its entire path segment in the provided glob. - * - See https://www.linuxjournal.com/content/globstar-new-bash-globbing-option. - * - * Note the following properties: - * - The generated `RegExp` is anchored at both start and end. - * - Repeating and trailing separators are tolerated. Trailing separators in the - * provided glob have no meaning and are discarded. - * - Absolute globs will only match absolute paths, etc. - * - Empty globs will match nothing. - * - Any special glob syntax must be contained to one path segment. For example, - * `?(foo|bar/baz)` is invalid. The separator will take precedence and the - * first segment ends with an unclosed group. - * - If a path segment ends with unclosed groups or a dangling escape prefix, a - * parse error has occurred. Every character for that segment is taken - * literally in this event. - * - * Limitations: - * - A negative group like `!(foo|bar)` will wrongly be converted to a negative - * look-ahead followed by a wildcard. This means that `!(foo).js` will wrongly - * fail to match `foobar.js`, even though `foobar` is not `foo`. Effectively, - * `!(foo|bar)` is treated like `!(@(foo|bar)*)`. This will work correctly if - * the group occurs not nested at the end of the segment. */ -export function globToRegExp( - glob: string, - { - extended = true, - globstar: globstarOption = true, - os = osType, - caseInsensitive = false, - }: GlobToRegExpOptions = {}, -): RegExp { - if (glob == "") { - return /(?!)/; - } - - const sep = os == "windows" ? "(?:\\\\|/)+" : "/+"; - const sepMaybe = os == "windows" ? "(?:\\\\|/)*" : "/*"; - const seps = os == "windows" ? ["\\", "/"] : ["/"]; - const globstar = os == "windows" - ? "(?:[^\\\\/]*(?:\\\\|/|$)+)*" - : "(?:[^/]*(?:/|$)+)*"; - const wildcard = os == "windows" ? "[^\\\\/]*" : "[^/]*"; - const escapePrefix = os == "windows" ? "`" : "\\"; - - // Remove trailing separators. - let newLength = glob.length; - for (; newLength > 1 && seps.includes(glob[newLength - 1]); newLength--); - glob = glob.slice(0, newLength); - - let regExpString = ""; - - // Terminates correctly. Trust that `j` is incremented every iteration. - for (let j = 0; j < glob.length;) { - let segment = ""; - const groupStack: string[] = []; - let inRange = false; - let inEscape = false; - let endsWithSep = false; - let i = j; - - // Terminates with `i` at the non-inclusive end of the current segment. - for (; i < glob.length && !seps.includes(glob[i]); i++) { - if (inEscape) { - inEscape = false; - const escapeChars = inRange ? rangeEscapeChars : regExpEscapeChars; - segment += escapeChars.includes(glob[i]) ? `\\${glob[i]}` : glob[i]; - continue; - } - - if (glob[i] == escapePrefix) { - inEscape = true; - continue; - } - - if (glob[i] == "[") { - if (!inRange) { - inRange = true; - segment += "["; - if (glob[i + 1] == "!") { - i++; - segment += "^"; - } else if (glob[i + 1] == "^") { - i++; - segment += "\\^"; - } - continue; - } else if (glob[i + 1] == ":") { - let k = i + 1; - let value = ""; - while (glob[k + 1] != null && glob[k + 1] != ":") { - value += glob[k + 1]; - k++; - } - if (glob[k + 1] == ":" && glob[k + 2] == "]") { - i = k + 2; - if (value == "alnum") segment += "\\dA-Za-z"; - else if (value == "alpha") segment += "A-Za-z"; - else if (value == "ascii") segment += "\x00-\x7F"; - else if (value == "blank") segment += "\t "; - else if (value == "cntrl") segment += "\x00-\x1F\x7F"; - else if (value == "digit") segment += "\\d"; - else if (value == "graph") segment += "\x21-\x7E"; - else if (value == "lower") segment += "a-z"; - else if (value == "print") segment += "\x20-\x7E"; - else if (value == "punct") { - segment += "!\"#$%&'()*+,\\-./:;<=>?@[\\\\\\]^_‘{|}~"; - } else if (value == "space") segment += "\\s\v"; - else if (value == "upper") segment += "A-Z"; - else if (value == "word") segment += "\\w"; - else if (value == "xdigit") segment += "\\dA-Fa-f"; - continue; - } - } - } - - if (glob[i] == "]" && inRange) { - inRange = false; - segment += "]"; - continue; - } - - if (inRange) { - if (glob[i] == "\\") { - segment += `\\\\`; - } else { - segment += glob[i]; - } - continue; - } - - if ( - glob[i] == ")" && groupStack.length > 0 && - groupStack[groupStack.length - 1] != "BRACE" - ) { - segment += ")"; - const type = groupStack.pop()!; - if (type == "!") { - segment += wildcard; - } else if (type != "@") { - segment += type; - } - continue; - } - - if ( - glob[i] == "|" && groupStack.length > 0 && - groupStack[groupStack.length - 1] != "BRACE" - ) { - segment += "|"; - continue; - } - - if (glob[i] == "+" && extended && glob[i + 1] == "(") { - i++; - groupStack.push("+"); - segment += "(?:"; - continue; - } - - if (glob[i] == "@" && extended && glob[i + 1] == "(") { - i++; - groupStack.push("@"); - segment += "(?:"; - continue; - } - - if (glob[i] == "?") { - if (extended && glob[i + 1] == "(") { - i++; - groupStack.push("?"); - segment += "(?:"; - } else { - segment += "."; - } - continue; - } - - if (glob[i] == "!" && extended && glob[i + 1] == "(") { - i++; - groupStack.push("!"); - segment += "(?!"; - continue; - } - - if (glob[i] == "{") { - groupStack.push("BRACE"); - segment += "(?:"; - continue; - } - - if (glob[i] == "}" && groupStack[groupStack.length - 1] == "BRACE") { - groupStack.pop(); - segment += ")"; - continue; - } - - if (glob[i] == "," && groupStack[groupStack.length - 1] == "BRACE") { - segment += "|"; - continue; - } - - if (glob[i] == "*") { - if (extended && glob[i + 1] == "(") { - i++; - groupStack.push("*"); - segment += "(?:"; - } else { - const prevChar = glob[i - 1]; - let numStars = 1; - while (glob[i + 1] == "*") { - i++; - numStars++; - } - const nextChar = glob[i + 1]; - if ( - globstarOption && numStars == 2 && - [...seps, undefined].includes(prevChar) && - [...seps, undefined].includes(nextChar) - ) { - segment += globstar; - endsWithSep = true; - } else { - segment += wildcard; - } - } - continue; - } - - segment += regExpEscapeChars.includes(glob[i]) ? `\\${glob[i]}` : glob[i]; - } - - // Check for unclosed groups or a dangling backslash. - if (groupStack.length > 0 || inRange || inEscape) { - // Parse failure. Take all characters from this segment literally. - segment = ""; - for (const c of glob.slice(j, i)) { - segment += regExpEscapeChars.includes(c) ? `\\${c}` : c; - endsWithSep = false; - } - } - - regExpString += segment; - if (!endsWithSep) { - regExpString += i < glob.length ? sep : sepMaybe; - endsWithSep = true; - } - - // Terminates with `i` at the start of the next segment. - while (seps.includes(glob[i])) i++; - - // Check that the next value of `j` is indeed higher than the current value. - if (!(i > j)) { - throw new Error("Assertion failure: i > j (potential infinite loop)"); - } - j = i; - } - - regExpString = `^${regExpString}$`; - return new RegExp(regExpString, caseInsensitive ? "i" : ""); -} - -/** Test whether the given string is a glob */ -export function isGlob(str: string): boolean { - const chars: Record = { "{": "}", "(": ")", "[": "]" }; - const regex = - /\\(.)|(^!|\*|\?|[\].+)]\?|\[[^\\\]]+\]|\{[^\\}]+\}|\(\?[:!=][^\\)]+\)|\([^|]+\|[^\\)]+\))/; - - if (str === "") { - return false; - } - - let match: RegExpExecArray | null; - - while ((match = regex.exec(str))) { - if (match[2]) return true; - let idx = match.index + match[0].length; - - // if an open bracket/brace/paren is escaped, - // set the index to the next closing character - const open = match[1]; - const close = open ? chars[open] : null; - if (open && close) { - const n = str.indexOf(close, idx); - if (n !== -1) { - idx = n + 1; - } - } - - str = str.slice(idx); - } - - return false; -} - -/** Like normalize(), but doesn't collapse "**\/.." when `globstar` is true. */ -export function normalizeGlob( - glob: string, - { globstar = false }: GlobOptions = {}, -): string { - if (glob.match(/\0/g)) { - throw new Error(`Glob contains invalid characters: "${glob}"`); - } - if (!globstar) { - return normalize(glob); - } - const s = SEP_PATTERN.source; - const badParentPattern = new RegExp( - `(?<=(${s}|^)\\*\\*${s})\\.\\.(?=${s}|$)`, - "g", - ); - return normalize(glob.replace(badParentPattern, "\0")).replace(/\0/g, ".."); -} - -/** Like join(), but doesn't collapse "**\/.." when `globstar` is true. */ -export function joinGlobs( - globs: string[], - { extended = true, globstar = false }: GlobOptions = {}, -): string { - if (!globstar || globs.length == 0) { - return join(...globs); - } - if (globs.length === 0) return "."; - let joined: string | undefined; - for (const glob of globs) { - const path = glob; - if (path.length > 0) { - if (!joined) joined = path; - else joined += `${SEP}${path}`; - } - } - if (!joined) return "."; - return normalizeGlob(joined, { extended, globstar }); -} diff --git a/vendor/deno.land/std@0.182.0/path/mod.ts b/vendor/deno.land/std@0.182.0/path/mod.ts deleted file mode 100644 index a51b831..0000000 --- a/vendor/deno.land/std@0.182.0/path/mod.ts +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -// Copyright the Browserify authors. MIT License. -// Ported mostly from https://github.com/browserify/path-browserify/ -// This module is browser compatible. - -/** - * Utilities for working with OS-specific file paths. - * - * Codes in the examples uses POSIX path but it automatically use Windows path - * on Windows. Use methods under `posix` or `win32` object instead to handle non - * platform specific path like: - * ```ts - * import { posix, win32 } from "https://deno.land/std@$STD_VERSION/path/mod.ts"; - * const p1 = posix.fromFileUrl("file:///home/foo"); - * const p2 = win32.fromFileUrl("file:///home/foo"); - * console.log(p1); // "/home/foo" - * console.log(p2); // "\\home\\foo" - * ``` - * - * This module is browser compatible. - * - * @module - */ - -import { isWindows } from "../_util/os.ts"; -import * as _win32 from "./win32.ts"; -import * as _posix from "./posix.ts"; - -const path = isWindows ? _win32 : _posix; - -export const win32 = _win32; -export const posix = _posix; -export const { - basename, - delimiter, - dirname, - extname, - format, - fromFileUrl, - isAbsolute, - join, - normalize, - parse, - relative, - resolve, - sep, - toFileUrl, - toNamespacedPath, -} = path; - -export * from "./common.ts"; -export { SEP, SEP_PATTERN } from "./separator.ts"; -export * from "./_interface.ts"; -export * from "./glob.ts"; diff --git a/vendor/deno.land/std@0.182.0/path/posix.ts b/vendor/deno.land/std@0.182.0/path/posix.ts deleted file mode 100644 index 472ccaf..0000000 --- a/vendor/deno.land/std@0.182.0/path/posix.ts +++ /dev/null @@ -1,487 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -// Copyright the Browserify authors. MIT License. -// Ported from https://github.com/browserify/path-browserify/ -// This module is browser compatible. - -import type { FormatInputPathObject, ParsedPath } from "./_interface.ts"; -import { CHAR_DOT } from "./_constants.ts"; - -import { - _format, - assertPath, - encodeWhitespace, - isPosixPathSeparator, - lastPathSegment, - normalizeString, - stripSuffix, - stripTrailingSeparators, -} from "./_util.ts"; - -export const sep = "/"; -export const delimiter = ":"; - -// path.resolve([from ...], to) -/** - * Resolves `pathSegments` into an absolute path. - * @param pathSegments an array of path segments - */ -export function resolve(...pathSegments: string[]): string { - let resolvedPath = ""; - let resolvedAbsolute = false; - - for (let i = pathSegments.length - 1; i >= -1 && !resolvedAbsolute; i--) { - let path: string; - - if (i >= 0) path = pathSegments[i]; - else { - // deno-lint-ignore no-explicit-any - const { Deno } = globalThis as any; - if (typeof Deno?.cwd !== "function") { - throw new TypeError("Resolved a relative path without a CWD."); - } - path = Deno.cwd(); - } - - assertPath(path); - - // Skip empty entries - if (path.length === 0) { - continue; - } - - resolvedPath = `${path}/${resolvedPath}`; - resolvedAbsolute = isPosixPathSeparator(path.charCodeAt(0)); - } - - // At this point the path should be resolved to a full absolute path, but - // handle relative paths to be safe (might happen when process.cwd() fails) - - // Normalize the path - resolvedPath = normalizeString( - resolvedPath, - !resolvedAbsolute, - "/", - isPosixPathSeparator, - ); - - if (resolvedAbsolute) { - if (resolvedPath.length > 0) return `/${resolvedPath}`; - else return "/"; - } else if (resolvedPath.length > 0) return resolvedPath; - else return "."; -} - -/** - * Normalize the `path`, resolving `'..'` and `'.'` segments. - * Note that resolving these segments does not necessarily mean that all will be eliminated. - * A `'..'` at the top-level will be preserved, and an empty path is canonically `'.'`. - * @param path to be normalized - */ -export function normalize(path: string): string { - assertPath(path); - - if (path.length === 0) return "."; - - const isAbsolute = isPosixPathSeparator(path.charCodeAt(0)); - const trailingSeparator = isPosixPathSeparator( - path.charCodeAt(path.length - 1), - ); - - // Normalize the path - path = normalizeString(path, !isAbsolute, "/", isPosixPathSeparator); - - if (path.length === 0 && !isAbsolute) path = "."; - if (path.length > 0 && trailingSeparator) path += "/"; - - if (isAbsolute) return `/${path}`; - return path; -} - -/** - * Verifies whether provided path is absolute - * @param path to be verified as absolute - */ -export function isAbsolute(path: string): boolean { - assertPath(path); - return path.length > 0 && isPosixPathSeparator(path.charCodeAt(0)); -} - -/** - * Join all given a sequence of `paths`,then normalizes the resulting path. - * @param paths to be joined and normalized - */ -export function join(...paths: string[]): string { - if (paths.length === 0) return "."; - let joined: string | undefined; - for (let i = 0, len = paths.length; i < len; ++i) { - const path = paths[i]; - assertPath(path); - if (path.length > 0) { - if (!joined) joined = path; - else joined += `/${path}`; - } - } - if (!joined) return "."; - return normalize(joined); -} - -/** - * Return the relative path from `from` to `to` based on current working directory. - * @param from path in current working directory - * @param to path in current working directory - */ -export function relative(from: string, to: string): string { - assertPath(from); - assertPath(to); - - if (from === to) return ""; - - from = resolve(from); - to = resolve(to); - - if (from === to) return ""; - - // Trim any leading backslashes - let fromStart = 1; - const fromEnd = from.length; - for (; fromStart < fromEnd; ++fromStart) { - if (!isPosixPathSeparator(from.charCodeAt(fromStart))) break; - } - const fromLen = fromEnd - fromStart; - - // Trim any leading backslashes - let toStart = 1; - const toEnd = to.length; - for (; toStart < toEnd; ++toStart) { - if (!isPosixPathSeparator(to.charCodeAt(toStart))) break; - } - const toLen = toEnd - toStart; - - // Compare paths to find the longest common path from root - const length = fromLen < toLen ? fromLen : toLen; - let lastCommonSep = -1; - let i = 0; - for (; i <= length; ++i) { - if (i === length) { - if (toLen > length) { - if (isPosixPathSeparator(to.charCodeAt(toStart + i))) { - // We get here if `from` is the exact base path for `to`. - // For example: from='/foo/bar'; to='/foo/bar/baz' - return to.slice(toStart + i + 1); - } else if (i === 0) { - // We get here if `from` is the root - // For example: from='/'; to='/foo' - return to.slice(toStart + i); - } - } else if (fromLen > length) { - if (isPosixPathSeparator(from.charCodeAt(fromStart + i))) { - // We get here if `to` is the exact base path for `from`. - // For example: from='/foo/bar/baz'; to='/foo/bar' - lastCommonSep = i; - } else if (i === 0) { - // We get here if `to` is the root. - // For example: from='/foo'; to='/' - lastCommonSep = 0; - } - } - break; - } - const fromCode = from.charCodeAt(fromStart + i); - const toCode = to.charCodeAt(toStart + i); - if (fromCode !== toCode) break; - else if (isPosixPathSeparator(fromCode)) lastCommonSep = i; - } - - let out = ""; - // Generate the relative path based on the path difference between `to` - // and `from` - for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) { - if (i === fromEnd || isPosixPathSeparator(from.charCodeAt(i))) { - if (out.length === 0) out += ".."; - else out += "/.."; - } - } - - // Lastly, append the rest of the destination (`to`) path that comes after - // the common path parts - if (out.length > 0) return out + to.slice(toStart + lastCommonSep); - else { - toStart += lastCommonSep; - if (isPosixPathSeparator(to.charCodeAt(toStart))) ++toStart; - return to.slice(toStart); - } -} - -/** - * Resolves path to a namespace path - * @param path to resolve to namespace - */ -export function toNamespacedPath(path: string): string { - // Non-op on posix systems - return path; -} - -/** - * Return the directory path of a `path`. - * @param path - path to extract the directory from. - */ -export function dirname(path: string): string { - if (path.length === 0) return "."; - - let end = -1; - let matchedNonSeparator = false; - - for (let i = path.length - 1; i >= 1; --i) { - if (isPosixPathSeparator(path.charCodeAt(i))) { - if (matchedNonSeparator) { - end = i; - break; - } - } else { - matchedNonSeparator = true; - } - } - - // No matches. Fallback based on provided path: - // - // - leading slashes paths - // "/foo" => "/" - // "///foo" => "/" - // - no slash path - // "foo" => "." - if (end === -1) { - return isPosixPathSeparator(path.charCodeAt(0)) ? "/" : "."; - } - - return stripTrailingSeparators( - path.slice(0, end), - isPosixPathSeparator, - ); -} - -/** - * Return the last portion of a `path`. - * Trailing directory separators are ignored, and optional suffix is removed. - * - * @param path - path to extract the name from. - * @param [suffix] - suffix to remove from extracted name. - */ -export function basename(path: string, suffix = ""): string { - assertPath(path); - - if (path.length === 0) return path; - - if (typeof suffix !== "string") { - throw new TypeError( - `Suffix must be a string. Received ${JSON.stringify(suffix)}`, - ); - } - - const lastSegment = lastPathSegment(path, isPosixPathSeparator); - const strippedSegment = stripTrailingSeparators( - lastSegment, - isPosixPathSeparator, - ); - return suffix ? stripSuffix(strippedSegment, suffix) : strippedSegment; -} - -/** - * Return the extension of the `path` with leading period. - * @param path with extension - * @returns extension (ex. for `file.ts` returns `.ts`) - */ -export function extname(path: string): string { - assertPath(path); - let startDot = -1; - let startPart = 0; - let end = -1; - let matchedSlash = true; - // Track the state of characters (if any) we see before our first dot and - // after any path separator we find - let preDotState = 0; - for (let i = path.length - 1; i >= 0; --i) { - const code = path.charCodeAt(i); - if (isPosixPathSeparator(code)) { - // If we reached a path separator that was not part of a set of path - // separators at the end of the string, stop now - if (!matchedSlash) { - startPart = i + 1; - break; - } - continue; - } - if (end === -1) { - // We saw the first non-path separator, mark this as the end of our - // extension - matchedSlash = false; - end = i + 1; - } - if (code === CHAR_DOT) { - // If this is our first dot, mark it as the start of our extension - if (startDot === -1) startDot = i; - else if (preDotState !== 1) preDotState = 1; - } else if (startDot !== -1) { - // We saw a non-dot and non-path separator before our dot, so we should - // have a good chance at having a non-empty extension - preDotState = -1; - } - } - - if ( - startDot === -1 || - end === -1 || - // We saw a non-dot character immediately before the dot - preDotState === 0 || - // The (right-most) trimmed path component is exactly '..' - (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) - ) { - return ""; - } - return path.slice(startDot, end); -} - -/** - * Generate a path from `FormatInputPathObject` object. - * @param pathObject with path - */ -export function format(pathObject: FormatInputPathObject): string { - if (pathObject === null || typeof pathObject !== "object") { - throw new TypeError( - `The "pathObject" argument must be of type Object. Received type ${typeof pathObject}`, - ); - } - return _format("/", pathObject); -} - -/** - * Return a `ParsedPath` object of the `path`. - * @param path to process - */ -export function parse(path: string): ParsedPath { - assertPath(path); - - const ret: ParsedPath = { root: "", dir: "", base: "", ext: "", name: "" }; - if (path.length === 0) return ret; - const isAbsolute = isPosixPathSeparator(path.charCodeAt(0)); - let start: number; - if (isAbsolute) { - ret.root = "/"; - start = 1; - } else { - start = 0; - } - let startDot = -1; - let startPart = 0; - let end = -1; - let matchedSlash = true; - let i = path.length - 1; - - // Track the state of characters (if any) we see before our first dot and - // after any path separator we find - let preDotState = 0; - - // Get non-dir info - for (; i >= start; --i) { - const code = path.charCodeAt(i); - if (isPosixPathSeparator(code)) { - // If we reached a path separator that was not part of a set of path - // separators at the end of the string, stop now - if (!matchedSlash) { - startPart = i + 1; - break; - } - continue; - } - if (end === -1) { - // We saw the first non-path separator, mark this as the end of our - // extension - matchedSlash = false; - end = i + 1; - } - if (code === CHAR_DOT) { - // If this is our first dot, mark it as the start of our extension - if (startDot === -1) startDot = i; - else if (preDotState !== 1) preDotState = 1; - } else if (startDot !== -1) { - // We saw a non-dot and non-path separator before our dot, so we should - // have a good chance at having a non-empty extension - preDotState = -1; - } - } - - if ( - startDot === -1 || - end === -1 || - // We saw a non-dot character immediately before the dot - preDotState === 0 || - // The (right-most) trimmed path component is exactly '..' - (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) - ) { - if (end !== -1) { - if (startPart === 0 && isAbsolute) { - ret.base = ret.name = path.slice(1, end); - } else { - ret.base = ret.name = path.slice(startPart, end); - } - } - // Fallback to '/' in case there is no basename - ret.base = ret.base || "/"; - } else { - if (startPart === 0 && isAbsolute) { - ret.name = path.slice(1, startDot); - ret.base = path.slice(1, end); - } else { - ret.name = path.slice(startPart, startDot); - ret.base = path.slice(startPart, end); - } - ret.ext = path.slice(startDot, end); - } - - if (startPart > 0) { - ret.dir = stripTrailingSeparators( - path.slice(0, startPart - 1), - isPosixPathSeparator, - ); - } else if (isAbsolute) ret.dir = "/"; - - return ret; -} - -/** - * Converts a file URL to a path string. - * - * ```ts - * import { fromFileUrl } from "https://deno.land/std@$STD_VERSION/path/posix.ts"; - * fromFileUrl("file:///home/foo"); // "/home/foo" - * ``` - * @param url of a file URL - */ -export function fromFileUrl(url: string | URL): string { - url = url instanceof URL ? url : new URL(url); - if (url.protocol != "file:") { - throw new TypeError("Must be a file URL."); - } - return decodeURIComponent( - url.pathname.replace(/%(?![0-9A-Fa-f]{2})/g, "%25"), - ); -} - -/** - * Converts a path string to a file URL. - * - * ```ts - * import { toFileUrl } from "https://deno.land/std@$STD_VERSION/path/posix.ts"; - * toFileUrl("/home/foo"); // new URL("file:///home/foo") - * ``` - * @param path to convert to file URL - */ -export function toFileUrl(path: string): URL { - if (!isAbsolute(path)) { - throw new TypeError("Must be an absolute path."); - } - const url = new URL("file:///"); - url.pathname = encodeWhitespace( - path.replace(/%/g, "%25").replace(/\\/g, "%5C"), - ); - return url; -} diff --git a/vendor/deno.land/std@0.182.0/path/separator.ts b/vendor/deno.land/std@0.182.0/path/separator.ts deleted file mode 100644 index 99e4dff..0000000 --- a/vendor/deno.land/std@0.182.0/path/separator.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -import { isWindows } from "../_util/os.ts"; - -export const SEP = isWindows ? "\\" : "/"; -export const SEP_PATTERN = isWindows ? /[\\/]+/ : /\/+/; diff --git a/vendor/deno.land/std@0.182.0/path/win32.ts b/vendor/deno.land/std@0.182.0/path/win32.ts deleted file mode 100644 index de4bd58..0000000 --- a/vendor/deno.land/std@0.182.0/path/win32.ts +++ /dev/null @@ -1,962 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -// Copyright the Browserify authors. MIT License. -// Ported from https://github.com/browserify/path-browserify/ -// This module is browser compatible. - -import type { FormatInputPathObject, ParsedPath } from "./_interface.ts"; -import { - CHAR_BACKWARD_SLASH, - CHAR_COLON, - CHAR_DOT, - CHAR_QUESTION_MARK, -} from "./_constants.ts"; - -import { - _format, - assertPath, - encodeWhitespace, - isPathSeparator, - isPosixPathSeparator, - isWindowsDeviceRoot, - lastPathSegment, - normalizeString, - stripSuffix, - stripTrailingSeparators, -} from "./_util.ts"; -import { assert } from "../_util/asserts.ts"; - -export const sep = "\\"; -export const delimiter = ";"; - -/** - * Resolves path segments into a `path` - * @param pathSegments to process to path - */ -export function resolve(...pathSegments: string[]): string { - let resolvedDevice = ""; - let resolvedTail = ""; - let resolvedAbsolute = false; - - for (let i = pathSegments.length - 1; i >= -1; i--) { - let path: string; - // deno-lint-ignore no-explicit-any - const { Deno } = globalThis as any; - if (i >= 0) { - path = pathSegments[i]; - } else if (!resolvedDevice) { - if (typeof Deno?.cwd !== "function") { - throw new TypeError("Resolved a drive-letter-less path without a CWD."); - } - path = Deno.cwd(); - } else { - if ( - typeof Deno?.env?.get !== "function" || typeof Deno?.cwd !== "function" - ) { - throw new TypeError("Resolved a relative path without a CWD."); - } - path = Deno.cwd(); - - // Verify that a cwd was found and that it actually points - // to our drive. If not, default to the drive's root. - if ( - path === undefined || - path.slice(0, 3).toLowerCase() !== `${resolvedDevice.toLowerCase()}\\` - ) { - path = `${resolvedDevice}\\`; - } - } - - assertPath(path); - - const len = path.length; - - // Skip empty entries - if (len === 0) continue; - - let rootEnd = 0; - let device = ""; - let isAbsolute = false; - const code = path.charCodeAt(0); - - // Try to match a root - if (len > 1) { - if (isPathSeparator(code)) { - // Possible UNC root - - // If we started with a separator, we know we at least have an - // absolute path of some kind (UNC or otherwise) - isAbsolute = true; - - if (isPathSeparator(path.charCodeAt(1))) { - // Matched double path separator at beginning - let j = 2; - let last = j; - // Match 1 or more non-path separators - for (; j < len; ++j) { - if (isPathSeparator(path.charCodeAt(j))) break; - } - if (j < len && j !== last) { - const firstPart = path.slice(last, j); - // Matched! - last = j; - // Match 1 or more path separators - for (; j < len; ++j) { - if (!isPathSeparator(path.charCodeAt(j))) break; - } - if (j < len && j !== last) { - // Matched! - last = j; - // Match 1 or more non-path separators - for (; j < len; ++j) { - if (isPathSeparator(path.charCodeAt(j))) break; - } - if (j === len) { - // We matched a UNC root only - device = `\\\\${firstPart}\\${path.slice(last)}`; - rootEnd = j; - } else if (j !== last) { - // We matched a UNC root with leftovers - - device = `\\\\${firstPart}\\${path.slice(last, j)}`; - rootEnd = j; - } - } - } - } else { - rootEnd = 1; - } - } else if (isWindowsDeviceRoot(code)) { - // Possible device root - - if (path.charCodeAt(1) === CHAR_COLON) { - device = path.slice(0, 2); - rootEnd = 2; - if (len > 2) { - if (isPathSeparator(path.charCodeAt(2))) { - // Treat separator following drive name as an absolute path - // indicator - isAbsolute = true; - rootEnd = 3; - } - } - } - } - } else if (isPathSeparator(code)) { - // `path` contains just a path separator - rootEnd = 1; - isAbsolute = true; - } - - if ( - device.length > 0 && - resolvedDevice.length > 0 && - device.toLowerCase() !== resolvedDevice.toLowerCase() - ) { - // This path points to another device so it is not applicable - continue; - } - - if (resolvedDevice.length === 0 && device.length > 0) { - resolvedDevice = device; - } - if (!resolvedAbsolute) { - resolvedTail = `${path.slice(rootEnd)}\\${resolvedTail}`; - resolvedAbsolute = isAbsolute; - } - - if (resolvedAbsolute && resolvedDevice.length > 0) break; - } - - // At this point the path should be resolved to a full absolute path, - // but handle relative paths to be safe (might happen when process.cwd() - // fails) - - // Normalize the tail path - resolvedTail = normalizeString( - resolvedTail, - !resolvedAbsolute, - "\\", - isPathSeparator, - ); - - return resolvedDevice + (resolvedAbsolute ? "\\" : "") + resolvedTail || "."; -} - -/** - * Normalizes a `path` - * @param path to normalize - */ -export function normalize(path: string): string { - assertPath(path); - const len = path.length; - if (len === 0) return "."; - let rootEnd = 0; - let device: string | undefined; - let isAbsolute = false; - const code = path.charCodeAt(0); - - // Try to match a root - if (len > 1) { - if (isPathSeparator(code)) { - // Possible UNC root - - // If we started with a separator, we know we at least have an absolute - // path of some kind (UNC or otherwise) - isAbsolute = true; - - if (isPathSeparator(path.charCodeAt(1))) { - // Matched double path separator at beginning - let j = 2; - let last = j; - // Match 1 or more non-path separators - for (; j < len; ++j) { - if (isPathSeparator(path.charCodeAt(j))) break; - } - if (j < len && j !== last) { - const firstPart = path.slice(last, j); - // Matched! - last = j; - // Match 1 or more path separators - for (; j < len; ++j) { - if (!isPathSeparator(path.charCodeAt(j))) break; - } - if (j < len && j !== last) { - // Matched! - last = j; - // Match 1 or more non-path separators - for (; j < len; ++j) { - if (isPathSeparator(path.charCodeAt(j))) break; - } - if (j === len) { - // We matched a UNC root only - // Return the normalized version of the UNC root since there - // is nothing left to process - - return `\\\\${firstPart}\\${path.slice(last)}\\`; - } else if (j !== last) { - // We matched a UNC root with leftovers - - device = `\\\\${firstPart}\\${path.slice(last, j)}`; - rootEnd = j; - } - } - } - } else { - rootEnd = 1; - } - } else if (isWindowsDeviceRoot(code)) { - // Possible device root - - if (path.charCodeAt(1) === CHAR_COLON) { - device = path.slice(0, 2); - rootEnd = 2; - if (len > 2) { - if (isPathSeparator(path.charCodeAt(2))) { - // Treat separator following drive name as an absolute path - // indicator - isAbsolute = true; - rootEnd = 3; - } - } - } - } - } else if (isPathSeparator(code)) { - // `path` contains just a path separator, exit early to avoid unnecessary - // work - return "\\"; - } - - let tail: string; - if (rootEnd < len) { - tail = normalizeString( - path.slice(rootEnd), - !isAbsolute, - "\\", - isPathSeparator, - ); - } else { - tail = ""; - } - if (tail.length === 0 && !isAbsolute) tail = "."; - if (tail.length > 0 && isPathSeparator(path.charCodeAt(len - 1))) { - tail += "\\"; - } - if (device === undefined) { - if (isAbsolute) { - if (tail.length > 0) return `\\${tail}`; - else return "\\"; - } else if (tail.length > 0) { - return tail; - } else { - return ""; - } - } else if (isAbsolute) { - if (tail.length > 0) return `${device}\\${tail}`; - else return `${device}\\`; - } else if (tail.length > 0) { - return device + tail; - } else { - return device; - } -} - -/** - * Verifies whether path is absolute - * @param path to verify - */ -export function isAbsolute(path: string): boolean { - assertPath(path); - const len = path.length; - if (len === 0) return false; - - const code = path.charCodeAt(0); - if (isPathSeparator(code)) { - return true; - } else if (isWindowsDeviceRoot(code)) { - // Possible device root - - if (len > 2 && path.charCodeAt(1) === CHAR_COLON) { - if (isPathSeparator(path.charCodeAt(2))) return true; - } - } - return false; -} - -/** - * Join all given a sequence of `paths`,then normalizes the resulting path. - * @param paths to be joined and normalized - */ -export function join(...paths: string[]): string { - const pathsCount = paths.length; - if (pathsCount === 0) return "."; - - let joined: string | undefined; - let firstPart: string | null = null; - for (let i = 0; i < pathsCount; ++i) { - const path = paths[i]; - assertPath(path); - if (path.length > 0) { - if (joined === undefined) joined = firstPart = path; - else joined += `\\${path}`; - } - } - - if (joined === undefined) return "."; - - // Make sure that the joined path doesn't start with two slashes, because - // normalize() will mistake it for an UNC path then. - // - // This step is skipped when it is very clear that the user actually - // intended to point at an UNC path. This is assumed when the first - // non-empty string arguments starts with exactly two slashes followed by - // at least one more non-slash character. - // - // Note that for normalize() to treat a path as an UNC path it needs to - // have at least 2 components, so we don't filter for that here. - // This means that the user can use join to construct UNC paths from - // a server name and a share name; for example: - // path.join('//server', 'share') -> '\\\\server\\share\\') - let needsReplace = true; - let slashCount = 0; - assert(firstPart != null); - if (isPathSeparator(firstPart.charCodeAt(0))) { - ++slashCount; - const firstLen = firstPart.length; - if (firstLen > 1) { - if (isPathSeparator(firstPart.charCodeAt(1))) { - ++slashCount; - if (firstLen > 2) { - if (isPathSeparator(firstPart.charCodeAt(2))) ++slashCount; - else { - // We matched a UNC path in the first part - needsReplace = false; - } - } - } - } - } - if (needsReplace) { - // Find any more consecutive slashes we need to replace - for (; slashCount < joined.length; ++slashCount) { - if (!isPathSeparator(joined.charCodeAt(slashCount))) break; - } - - // Replace the slashes if needed - if (slashCount >= 2) joined = `\\${joined.slice(slashCount)}`; - } - - return normalize(joined); -} - -/** - * It will solve the relative path from `from` to `to`, for instance: - * from = 'C:\\orandea\\test\\aaa' - * to = 'C:\\orandea\\impl\\bbb' - * The output of the function should be: '..\\..\\impl\\bbb' - * @param from relative path - * @param to relative path - */ -export function relative(from: string, to: string): string { - assertPath(from); - assertPath(to); - - if (from === to) return ""; - - const fromOrig = resolve(from); - const toOrig = resolve(to); - - if (fromOrig === toOrig) return ""; - - from = fromOrig.toLowerCase(); - to = toOrig.toLowerCase(); - - if (from === to) return ""; - - // Trim any leading backslashes - let fromStart = 0; - let fromEnd = from.length; - for (; fromStart < fromEnd; ++fromStart) { - if (from.charCodeAt(fromStart) !== CHAR_BACKWARD_SLASH) break; - } - // Trim trailing backslashes (applicable to UNC paths only) - for (; fromEnd - 1 > fromStart; --fromEnd) { - if (from.charCodeAt(fromEnd - 1) !== CHAR_BACKWARD_SLASH) break; - } - const fromLen = fromEnd - fromStart; - - // Trim any leading backslashes - let toStart = 0; - let toEnd = to.length; - for (; toStart < toEnd; ++toStart) { - if (to.charCodeAt(toStart) !== CHAR_BACKWARD_SLASH) break; - } - // Trim trailing backslashes (applicable to UNC paths only) - for (; toEnd - 1 > toStart; --toEnd) { - if (to.charCodeAt(toEnd - 1) !== CHAR_BACKWARD_SLASH) break; - } - const toLen = toEnd - toStart; - - // Compare paths to find the longest common path from root - const length = fromLen < toLen ? fromLen : toLen; - let lastCommonSep = -1; - let i = 0; - for (; i <= length; ++i) { - if (i === length) { - if (toLen > length) { - if (to.charCodeAt(toStart + i) === CHAR_BACKWARD_SLASH) { - // We get here if `from` is the exact base path for `to`. - // For example: from='C:\\foo\\bar'; to='C:\\foo\\bar\\baz' - return toOrig.slice(toStart + i + 1); - } else if (i === 2) { - // We get here if `from` is the device root. - // For example: from='C:\\'; to='C:\\foo' - return toOrig.slice(toStart + i); - } - } - if (fromLen > length) { - if (from.charCodeAt(fromStart + i) === CHAR_BACKWARD_SLASH) { - // We get here if `to` is the exact base path for `from`. - // For example: from='C:\\foo\\bar'; to='C:\\foo' - lastCommonSep = i; - } else if (i === 2) { - // We get here if `to` is the device root. - // For example: from='C:\\foo\\bar'; to='C:\\' - lastCommonSep = 3; - } - } - break; - } - const fromCode = from.charCodeAt(fromStart + i); - const toCode = to.charCodeAt(toStart + i); - if (fromCode !== toCode) break; - else if (fromCode === CHAR_BACKWARD_SLASH) lastCommonSep = i; - } - - // We found a mismatch before the first common path separator was seen, so - // return the original `to`. - if (i !== length && lastCommonSep === -1) { - return toOrig; - } - - let out = ""; - if (lastCommonSep === -1) lastCommonSep = 0; - // Generate the relative path based on the path difference between `to` and - // `from` - for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) { - if (i === fromEnd || from.charCodeAt(i) === CHAR_BACKWARD_SLASH) { - if (out.length === 0) out += ".."; - else out += "\\.."; - } - } - - // Lastly, append the rest of the destination (`to`) path that comes after - // the common path parts - if (out.length > 0) { - return out + toOrig.slice(toStart + lastCommonSep, toEnd); - } else { - toStart += lastCommonSep; - if (toOrig.charCodeAt(toStart) === CHAR_BACKWARD_SLASH) ++toStart; - return toOrig.slice(toStart, toEnd); - } -} - -/** - * Resolves path to a namespace path - * @param path to resolve to namespace - */ -export function toNamespacedPath(path: string): string { - // Note: this will *probably* throw somewhere. - if (typeof path !== "string") return path; - if (path.length === 0) return ""; - - const resolvedPath = resolve(path); - - if (resolvedPath.length >= 3) { - if (resolvedPath.charCodeAt(0) === CHAR_BACKWARD_SLASH) { - // Possible UNC root - - if (resolvedPath.charCodeAt(1) === CHAR_BACKWARD_SLASH) { - const code = resolvedPath.charCodeAt(2); - if (code !== CHAR_QUESTION_MARK && code !== CHAR_DOT) { - // Matched non-long UNC root, convert the path to a long UNC path - return `\\\\?\\UNC\\${resolvedPath.slice(2)}`; - } - } - } else if (isWindowsDeviceRoot(resolvedPath.charCodeAt(0))) { - // Possible device root - - if ( - resolvedPath.charCodeAt(1) === CHAR_COLON && - resolvedPath.charCodeAt(2) === CHAR_BACKWARD_SLASH - ) { - // Matched device root, convert the path to a long UNC path - return `\\\\?\\${resolvedPath}`; - } - } - } - - return path; -} - -/** - * Return the directory path of a `path`. - * @param path - path to extract the directory from. - */ -export function dirname(path: string): string { - assertPath(path); - const len = path.length; - if (len === 0) return "."; - let rootEnd = -1; - let end = -1; - let matchedSlash = true; - let offset = 0; - const code = path.charCodeAt(0); - - // Try to match a root - if (len > 1) { - if (isPathSeparator(code)) { - // Possible UNC root - - rootEnd = offset = 1; - - if (isPathSeparator(path.charCodeAt(1))) { - // Matched double path separator at beginning - let j = 2; - let last = j; - // Match 1 or more non-path separators - for (; j < len; ++j) { - if (isPathSeparator(path.charCodeAt(j))) break; - } - if (j < len && j !== last) { - // Matched! - last = j; - // Match 1 or more path separators - for (; j < len; ++j) { - if (!isPathSeparator(path.charCodeAt(j))) break; - } - if (j < len && j !== last) { - // Matched! - last = j; - // Match 1 or more non-path separators - for (; j < len; ++j) { - if (isPathSeparator(path.charCodeAt(j))) break; - } - if (j === len) { - // We matched a UNC root only - return path; - } - if (j !== last) { - // We matched a UNC root with leftovers - - // Offset by 1 to include the separator after the UNC root to - // treat it as a "normal root" on top of a (UNC) root - rootEnd = offset = j + 1; - } - } - } - } - } else if (isWindowsDeviceRoot(code)) { - // Possible device root - - if (path.charCodeAt(1) === CHAR_COLON) { - rootEnd = offset = 2; - if (len > 2) { - if (isPathSeparator(path.charCodeAt(2))) rootEnd = offset = 3; - } - } - } - } else if (isPathSeparator(code)) { - // `path` contains just a path separator, exit early to avoid - // unnecessary work - return path; - } - - for (let i = len - 1; i >= offset; --i) { - if (isPathSeparator(path.charCodeAt(i))) { - if (!matchedSlash) { - end = i; - break; - } - } else { - // We saw the first non-path separator - matchedSlash = false; - } - } - - if (end === -1) { - if (rootEnd === -1) return "."; - else end = rootEnd; - } - return stripTrailingSeparators(path.slice(0, end), isPosixPathSeparator); -} - -/** - * Return the last portion of a `path`. - * Trailing directory separators are ignored, and optional suffix is removed. - * - * @param path - path to extract name from. - * @param [suffix] - suffix to remove from extracted name. - */ -export function basename(path: string, suffix = ""): string { - assertPath(path); - - if (path.length === 0) return path; - - if (typeof suffix !== "string") { - throw new TypeError( - `Suffix must be a string. Received ${JSON.stringify(suffix)}`, - ); - } - - // Check for a drive letter prefix so as not to mistake the following - // path separator as an extra separator at the end of the path that can be - // disregarded - let start = 0; - if (path.length >= 2) { - const drive = path.charCodeAt(0); - if (isWindowsDeviceRoot(drive)) { - if (path.charCodeAt(1) === CHAR_COLON) start = 2; - } - } - - const lastSegment = lastPathSegment(path, isPathSeparator, start); - const strippedSegment = stripTrailingSeparators(lastSegment, isPathSeparator); - return suffix ? stripSuffix(strippedSegment, suffix) : strippedSegment; -} - -/** - * Return the extension of the `path` with leading period. - * @param path with extension - * @returns extension (ex. for `file.ts` returns `.ts`) - */ -export function extname(path: string): string { - assertPath(path); - let start = 0; - let startDot = -1; - let startPart = 0; - let end = -1; - let matchedSlash = true; - // Track the state of characters (if any) we see before our first dot and - // after any path separator we find - let preDotState = 0; - - // Check for a drive letter prefix so as not to mistake the following - // path separator as an extra separator at the end of the path that can be - // disregarded - - if ( - path.length >= 2 && - path.charCodeAt(1) === CHAR_COLON && - isWindowsDeviceRoot(path.charCodeAt(0)) - ) { - start = startPart = 2; - } - - for (let i = path.length - 1; i >= start; --i) { - const code = path.charCodeAt(i); - if (isPathSeparator(code)) { - // If we reached a path separator that was not part of a set of path - // separators at the end of the string, stop now - if (!matchedSlash) { - startPart = i + 1; - break; - } - continue; - } - if (end === -1) { - // We saw the first non-path separator, mark this as the end of our - // extension - matchedSlash = false; - end = i + 1; - } - if (code === CHAR_DOT) { - // If this is our first dot, mark it as the start of our extension - if (startDot === -1) startDot = i; - else if (preDotState !== 1) preDotState = 1; - } else if (startDot !== -1) { - // We saw a non-dot and non-path separator before our dot, so we should - // have a good chance at having a non-empty extension - preDotState = -1; - } - } - - if ( - startDot === -1 || - end === -1 || - // We saw a non-dot character immediately before the dot - preDotState === 0 || - // The (right-most) trimmed path component is exactly '..' - (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) - ) { - return ""; - } - return path.slice(startDot, end); -} - -/** - * Generate a path from `FormatInputPathObject` object. - * @param pathObject with path - */ -export function format(pathObject: FormatInputPathObject): string { - if (pathObject === null || typeof pathObject !== "object") { - throw new TypeError( - `The "pathObject" argument must be of type Object. Received type ${typeof pathObject}`, - ); - } - return _format("\\", pathObject); -} - -/** - * Return a `ParsedPath` object of the `path`. - * @param path to process - */ -export function parse(path: string): ParsedPath { - assertPath(path); - - const ret: ParsedPath = { root: "", dir: "", base: "", ext: "", name: "" }; - - const len = path.length; - if (len === 0) return ret; - - let rootEnd = 0; - let code = path.charCodeAt(0); - - // Try to match a root - if (len > 1) { - if (isPathSeparator(code)) { - // Possible UNC root - - rootEnd = 1; - if (isPathSeparator(path.charCodeAt(1))) { - // Matched double path separator at beginning - let j = 2; - let last = j; - // Match 1 or more non-path separators - for (; j < len; ++j) { - if (isPathSeparator(path.charCodeAt(j))) break; - } - if (j < len && j !== last) { - // Matched! - last = j; - // Match 1 or more path separators - for (; j < len; ++j) { - if (!isPathSeparator(path.charCodeAt(j))) break; - } - if (j < len && j !== last) { - // Matched! - last = j; - // Match 1 or more non-path separators - for (; j < len; ++j) { - if (isPathSeparator(path.charCodeAt(j))) break; - } - if (j === len) { - // We matched a UNC root only - - rootEnd = j; - } else if (j !== last) { - // We matched a UNC root with leftovers - - rootEnd = j + 1; - } - } - } - } - } else if (isWindowsDeviceRoot(code)) { - // Possible device root - - if (path.charCodeAt(1) === CHAR_COLON) { - rootEnd = 2; - if (len > 2) { - if (isPathSeparator(path.charCodeAt(2))) { - if (len === 3) { - // `path` contains just a drive root, exit early to avoid - // unnecessary work - ret.root = ret.dir = path; - ret.base = "\\"; - return ret; - } - rootEnd = 3; - } - } else { - // `path` contains just a relative drive root, exit early to avoid - // unnecessary work - ret.root = ret.dir = path; - return ret; - } - } - } - } else if (isPathSeparator(code)) { - // `path` contains just a path separator, exit early to avoid - // unnecessary work - ret.root = ret.dir = path; - ret.base = "\\"; - return ret; - } - - if (rootEnd > 0) ret.root = path.slice(0, rootEnd); - - let startDot = -1; - let startPart = rootEnd; - let end = -1; - let matchedSlash = true; - let i = path.length - 1; - - // Track the state of characters (if any) we see before our first dot and - // after any path separator we find - let preDotState = 0; - - // Get non-dir info - for (; i >= rootEnd; --i) { - code = path.charCodeAt(i); - if (isPathSeparator(code)) { - // If we reached a path separator that was not part of a set of path - // separators at the end of the string, stop now - if (!matchedSlash) { - startPart = i + 1; - break; - } - continue; - } - if (end === -1) { - // We saw the first non-path separator, mark this as the end of our - // extension - matchedSlash = false; - end = i + 1; - } - if (code === CHAR_DOT) { - // If this is our first dot, mark it as the start of our extension - if (startDot === -1) startDot = i; - else if (preDotState !== 1) preDotState = 1; - } else if (startDot !== -1) { - // We saw a non-dot and non-path separator before our dot, so we should - // have a good chance at having a non-empty extension - preDotState = -1; - } - } - - if ( - startDot === -1 || - end === -1 || - // We saw a non-dot character immediately before the dot - preDotState === 0 || - // The (right-most) trimmed path component is exactly '..' - (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) - ) { - if (end !== -1) { - ret.base = ret.name = path.slice(startPart, end); - } - } else { - ret.name = path.slice(startPart, startDot); - ret.base = path.slice(startPart, end); - ret.ext = path.slice(startDot, end); - } - - // Fallback to '\' in case there is no basename - ret.base = ret.base || "\\"; - - // If the directory is the root, use the entire root as the `dir` including - // the trailing slash if any (`C:\abc` -> `C:\`). Otherwise, strip out the - // trailing slash (`C:\abc\def` -> `C:\abc`). - if (startPart > 0 && startPart !== rootEnd) { - ret.dir = path.slice(0, startPart - 1); - } else ret.dir = ret.root; - - return ret; -} - -/** - * Converts a file URL to a path string. - * - * ```ts - * import { fromFileUrl } from "https://deno.land/std@$STD_VERSION/path/win32.ts"; - * fromFileUrl("file:///home/foo"); // "\\home\\foo" - * fromFileUrl("file:///C:/Users/foo"); // "C:\\Users\\foo" - * fromFileUrl("file://localhost/home/foo"); // "\\\\localhost\\home\\foo" - * ``` - * @param url of a file URL - */ -export function fromFileUrl(url: string | URL): string { - url = url instanceof URL ? url : new URL(url); - if (url.protocol != "file:") { - throw new TypeError("Must be a file URL."); - } - let path = decodeURIComponent( - url.pathname.replace(/\//g, "\\").replace(/%(?![0-9A-Fa-f]{2})/g, "%25"), - ).replace(/^\\*([A-Za-z]:)(\\|$)/, "$1\\"); - if (url.hostname != "") { - // Note: The `URL` implementation guarantees that the drive letter and - // hostname are mutually exclusive. Otherwise it would not have been valid - // to append the hostname and path like this. - path = `\\\\${url.hostname}${path}`; - } - return path; -} - -/** - * Converts a path string to a file URL. - * - * ```ts - * import { toFileUrl } from "https://deno.land/std@$STD_VERSION/path/win32.ts"; - * toFileUrl("\\home\\foo"); // new URL("file:///home/foo") - * toFileUrl("C:\\Users\\foo"); // new URL("file:///C:/Users/foo") - * toFileUrl("\\\\127.0.0.1\\home\\foo"); // new URL("file://127.0.0.1/home/foo") - * ``` - * @param path to convert to file URL - */ -export function toFileUrl(path: string): URL { - if (!isAbsolute(path)) { - throw new TypeError("Must be an absolute path."); - } - const [, hostname, pathname] = path.match( - /^(?:[/\\]{2}([^/\\]+)(?=[/\\](?:[^/\\]|$)))?(.*)/, - )!; - const url = new URL("file:///"); - url.pathname = encodeWhitespace(pathname.replace(/%/g, "%25")); - if (hostname != null && hostname != "localhost") { - url.hostname = hostname; - if (!url.hostname) { - throw new TypeError("Invalid hostname."); - } - } - return url; -} diff --git a/vendor/deno.land/std@0.203.0/assert/_constants.ts b/vendor/deno.land/std@0.203.0/assert/_constants.ts deleted file mode 100644 index 1482010..0000000 --- a/vendor/deno.land/std@0.203.0/assert/_constants.ts +++ /dev/null @@ -1,2 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -export const CAN_NOT_DISPLAY = "[Cannot display]"; diff --git a/vendor/deno.land/std@0.203.0/assert/_diff.ts b/vendor/deno.land/std@0.203.0/assert/_diff.ts deleted file mode 100644 index bd416e5..0000000 --- a/vendor/deno.land/std@0.203.0/assert/_diff.ts +++ /dev/null @@ -1,440 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -import { - bgGreen, - bgRed, - bold, - gray, - green, - red, - white, -} from "../fmt/colors.ts"; - -interface FarthestPoint { - y: number; - id: number; -} - -export enum DiffType { - removed = "removed", - common = "common", - added = "added", -} - -export interface DiffResult { - type: DiffType; - value: T; - details?: Array>; -} - -const REMOVED = 1; -const COMMON = 2; -const ADDED = 3; - -function createCommon(A: T[], B: T[], reverse?: boolean): T[] { - const common = []; - if (A.length === 0 || B.length === 0) return []; - for (let i = 0; i < Math.min(A.length, B.length); i += 1) { - if ( - A[reverse ? A.length - i - 1 : i] === B[reverse ? B.length - i - 1 : i] - ) { - common.push(A[reverse ? A.length - i - 1 : i]); - } else { - return common; - } - } - return common; -} - -/** - * Renders the differences between the actual and expected values - * @param A Actual value - * @param B Expected value - */ -export function diff(A: T[], B: T[]): Array> { - const prefixCommon = createCommon(A, B); - const suffixCommon = createCommon( - A.slice(prefixCommon.length), - B.slice(prefixCommon.length), - true, - ).reverse(); - A = suffixCommon.length - ? A.slice(prefixCommon.length, -suffixCommon.length) - : A.slice(prefixCommon.length); - B = suffixCommon.length - ? B.slice(prefixCommon.length, -suffixCommon.length) - : B.slice(prefixCommon.length); - const swapped = B.length > A.length; - [A, B] = swapped ? [B, A] : [A, B]; - const M = A.length; - const N = B.length; - if (!M && !N && !suffixCommon.length && !prefixCommon.length) return []; - if (!N) { - return [ - ...prefixCommon.map( - (c): DiffResult => ({ type: DiffType.common, value: c }), - ), - ...A.map( - (a): DiffResult => ({ - type: swapped ? DiffType.added : DiffType.removed, - value: a, - }), - ), - ...suffixCommon.map( - (c): DiffResult => ({ type: DiffType.common, value: c }), - ), - ]; - } - const offset = N; - const delta = M - N; - const size = M + N + 1; - const fp: FarthestPoint[] = Array.from( - { length: size }, - () => ({ y: -1, id: -1 }), - ); - /** - * INFO: - * This buffer is used to save memory and improve performance. - * The first half is used to save route and last half is used to save diff - * type. - * This is because, when I kept new uint8array area to save type,performance - * worsened. - */ - const routes = new Uint32Array((M * N + size + 1) * 2); - const diffTypesPtrOffset = routes.length / 2; - let ptr = 0; - let p = -1; - - function backTrace( - A: T[], - B: T[], - current: FarthestPoint, - swapped: boolean, - ): Array<{ - type: DiffType; - value: T; - }> { - const M = A.length; - const N = B.length; - const result = []; - let a = M - 1; - let b = N - 1; - let j = routes[current.id]; - let type = routes[current.id + diffTypesPtrOffset]; - while (true) { - if (!j && !type) break; - const prev = j; - if (type === REMOVED) { - result.unshift({ - type: swapped ? DiffType.removed : DiffType.added, - value: B[b], - }); - b -= 1; - } else if (type === ADDED) { - result.unshift({ - type: swapped ? DiffType.added : DiffType.removed, - value: A[a], - }); - a -= 1; - } else { - result.unshift({ type: DiffType.common, value: A[a] }); - a -= 1; - b -= 1; - } - j = routes[prev]; - type = routes[prev + diffTypesPtrOffset]; - } - return result; - } - - function createFP( - slide: FarthestPoint, - down: FarthestPoint, - k: number, - M: number, - ): FarthestPoint { - if (slide && slide.y === -1 && down && down.y === -1) { - return { y: 0, id: 0 }; - } - if ( - (down && down.y === -1) || - k === M || - (slide && slide.y) > (down && down.y) + 1 - ) { - const prev = slide.id; - ptr++; - routes[ptr] = prev; - routes[ptr + diffTypesPtrOffset] = ADDED; - return { y: slide.y, id: ptr }; - } else { - const prev = down.id; - ptr++; - routes[ptr] = prev; - routes[ptr + diffTypesPtrOffset] = REMOVED; - return { y: down.y + 1, id: ptr }; - } - } - - function snake( - k: number, - slide: FarthestPoint, - down: FarthestPoint, - _offset: number, - A: T[], - B: T[], - ): FarthestPoint { - const M = A.length; - const N = B.length; - if (k < -N || M < k) return { y: -1, id: -1 }; - const fp = createFP(slide, down, k, M); - while (fp.y + k < M && fp.y < N && A[fp.y + k] === B[fp.y]) { - const prev = fp.id; - ptr++; - fp.id = ptr; - fp.y += 1; - routes[ptr] = prev; - routes[ptr + diffTypesPtrOffset] = COMMON; - } - return fp; - } - - while (fp[delta + offset].y < N) { - p = p + 1; - for (let k = -p; k < delta; ++k) { - fp[k + offset] = snake( - k, - fp[k - 1 + offset], - fp[k + 1 + offset], - offset, - A, - B, - ); - } - for (let k = delta + p; k > delta; --k) { - fp[k + offset] = snake( - k, - fp[k - 1 + offset], - fp[k + 1 + offset], - offset, - A, - B, - ); - } - fp[delta + offset] = snake( - delta, - fp[delta - 1 + offset], - fp[delta + 1 + offset], - offset, - A, - B, - ); - } - return [ - ...prefixCommon.map( - (c): DiffResult => ({ type: DiffType.common, value: c }), - ), - ...backTrace(A, B, fp[delta + offset], swapped), - ...suffixCommon.map( - (c): DiffResult => ({ type: DiffType.common, value: c }), - ), - ]; -} - -/** - * Renders the differences between the actual and expected strings - * Partially inspired from https://github.com/kpdecker/jsdiff - * @param A Actual string - * @param B Expected string - */ -export function diffstr(A: string, B: string) { - function unescape(string: string): string { - // unescape invisible characters. - // ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String#escape_sequences - return string - .replaceAll("\b", "\\b") - .replaceAll("\f", "\\f") - .replaceAll("\t", "\\t") - .replaceAll("\v", "\\v") - .replaceAll( // does not remove line breaks - /\r\n|\r|\n/g, - (str) => str === "\r" ? "\\r" : str === "\n" ? "\\n\n" : "\\r\\n\r\n", - ); - } - - function tokenize(string: string, { wordDiff = false } = {}): string[] { - if (wordDiff) { - // Split string on whitespace symbols - const tokens = string.split(/([^\S\r\n]+|[()[\]{}'"\r\n]|\b)/); - // Extended Latin character set - const words = - /^[a-zA-Z\u{C0}-\u{FF}\u{D8}-\u{F6}\u{F8}-\u{2C6}\u{2C8}-\u{2D7}\u{2DE}-\u{2FF}\u{1E00}-\u{1EFF}]+$/u; - - // Join boundary splits that we do not consider to be boundaries and merge empty strings surrounded by word chars - for (let i = 0; i < tokens.length - 1; i++) { - if ( - !tokens[i + 1] && tokens[i + 2] && words.test(tokens[i]) && - words.test(tokens[i + 2]) - ) { - tokens[i] += tokens[i + 2]; - tokens.splice(i + 1, 2); - i--; - } - } - return tokens.filter((token) => token); - } else { - // Split string on new lines symbols - const tokens = [], lines = string.split(/(\n|\r\n)/); - - // Ignore final empty token when text ends with a newline - if (!lines[lines.length - 1]) { - lines.pop(); - } - - // Merge the content and line separators into single tokens - for (let i = 0; i < lines.length; i++) { - if (i % 2) { - tokens[tokens.length - 1] += lines[i]; - } else { - tokens.push(lines[i]); - } - } - return tokens; - } - } - - // Create details by filtering relevant word-diff for current line - // and merge "space-diff" if surrounded by word-diff for cleaner displays - function createDetails( - line: DiffResult, - tokens: Array>, - ) { - return tokens.filter(({ type }) => - type === line.type || type === DiffType.common - ).map((result, i, t) => { - if ( - (result.type === DiffType.common) && (t[i - 1]) && - (t[i - 1]?.type === t[i + 1]?.type) && /\s+/.test(result.value) - ) { - return { - ...result, - type: t[i - 1].type, - }; - } - return result; - }); - } - - // Compute multi-line diff - const diffResult = diff( - tokenize(`${unescape(A)}\n`), - tokenize(`${unescape(B)}\n`), - ); - - const added = [], removed = []; - for (const result of diffResult) { - if (result.type === DiffType.added) { - added.push(result); - } - if (result.type === DiffType.removed) { - removed.push(result); - } - } - - // Compute word-diff - const aLines = added.length < removed.length ? added : removed; - const bLines = aLines === removed ? added : removed; - for (const a of aLines) { - let tokens = [] as Array>, - b: undefined | DiffResult; - // Search another diff line with at least one common token - while (bLines.length) { - b = bLines.shift(); - tokens = diff( - tokenize(a.value, { wordDiff: true }), - tokenize(b?.value ?? "", { wordDiff: true }), - ); - if ( - tokens.some(({ type, value }) => - type === DiffType.common && value.trim().length - ) - ) { - break; - } - } - // Register word-diff details - a.details = createDetails(a, tokens); - if (b) { - b.details = createDetails(b, tokens); - } - } - - return diffResult; -} - -/** - * Colors the output of assertion diffs - * @param diffType Difference type, either added or removed - */ -function createColor( - diffType: DiffType, - { background = false } = {}, -): (s: string) => string { - // TODO(@littledivy): Remove this when we can detect - // true color terminals. - // https://github.com/denoland/deno_std/issues/2575 - background = false; - switch (diffType) { - case DiffType.added: - return (s: string): string => - background ? bgGreen(white(s)) : green(bold(s)); - case DiffType.removed: - return (s: string): string => background ? bgRed(white(s)) : red(bold(s)); - default: - return white; - } -} - -/** - * Prefixes `+` or `-` in diff output - * @param diffType Difference type, either added or removed - */ -function createSign(diffType: DiffType): string { - switch (diffType) { - case DiffType.added: - return "+ "; - case DiffType.removed: - return "- "; - default: - return " "; - } -} - -export function buildMessage( - diffResult: ReadonlyArray>, - { stringDiff = false } = {}, -): string[] { - const messages: string[] = [], diffMessages: string[] = []; - messages.push(""); - messages.push(""); - messages.push( - ` ${gray(bold("[Diff]"))} ${red(bold("Actual"))} / ${ - green(bold("Expected")) - }`, - ); - messages.push(""); - messages.push(""); - diffResult.forEach((result: DiffResult) => { - const c = createColor(result.type); - const line = result.details?.map((detail) => - detail.type !== DiffType.common - ? createColor(detail.type, { background: true })(detail.value) - : detail.value - ).join("") ?? result.value; - diffMessages.push(c(`${createSign(result.type)}${line}`)); - }); - messages.push(...(stringDiff ? [diffMessages.join("")] : diffMessages)); - messages.push(""); - - return messages; -} diff --git a/vendor/deno.land/std@0.203.0/assert/_format.ts b/vendor/deno.land/std@0.203.0/assert/_format.ts deleted file mode 100644 index 4496aa6..0000000 --- a/vendor/deno.land/std@0.203.0/assert/_format.ts +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -/** - * Converts the input into a string. Objects, Sets and Maps are sorted so as to - * make tests less flaky - * @param v Value to be formatted - */ -export function format(v: unknown): string { - // deno-lint-ignore no-explicit-any - const { Deno } = globalThis as any; - return typeof Deno?.inspect === "function" - ? Deno.inspect(v, { - depth: Infinity, - sorted: true, - trailingComma: true, - compact: false, - iterableLimit: Infinity, - // getters should be true in assertEquals. - getters: true, - }) - : `"${String(v).replace(/(?=["\\])/g, "\\")}"`; -} diff --git a/vendor/deno.land/std@0.203.0/assert/assert.ts b/vendor/deno.land/std@0.203.0/assert/assert.ts deleted file mode 100644 index 3f868f4..0000000 --- a/vendor/deno.land/std@0.203.0/assert/assert.ts +++ /dev/null @@ -1,9 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import { AssertionError } from "./assertion_error.ts"; - -/** Make an assertion, error will be thrown if `expr` does not have truthy value. */ -export function assert(expr: unknown, msg = ""): asserts expr { - if (!expr) { - throw new AssertionError(msg); - } -} diff --git a/vendor/deno.land/std@0.203.0/assert/assert_almost_equals.ts b/vendor/deno.land/std@0.203.0/assert/assert_almost_equals.ts deleted file mode 100644 index 4292730..0000000 --- a/vendor/deno.land/std@0.203.0/assert/assert_almost_equals.ts +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import { AssertionError } from "./assertion_error.ts"; - -/** - * Make an assertion that `actual` and `expected` are almost equal numbers through - * a given tolerance. It can be used to take into account IEEE-754 double-precision - * floating-point representation limitations. - * If the values are not almost equal then throw. - * - * @example - * ```ts - * import { assertAlmostEquals, assertThrows } from "https://deno.land/std@$STD_VERSION/assert/mod.ts"; - * - * assertAlmostEquals(0.1, 0.2); - * - * // Using a custom tolerance value - * assertAlmostEquals(0.1 + 0.2, 0.3, 1e-16); - * assertThrows(() => assertAlmostEquals(0.1 + 0.2, 0.3, 1e-17)); - * ``` - */ -export function assertAlmostEquals( - actual: number, - expected: number, - tolerance = 1e-7, - msg?: string, -) { - if (Object.is(actual, expected)) { - return; - } - const delta = Math.abs(expected - actual); - if (delta <= tolerance) { - return; - } - - const msgSuffix = msg ? `: ${msg}` : "."; - const f = (n: number) => Number.isInteger(n) ? n : n.toExponential(); - throw new AssertionError( - `Expected actual: "${f(actual)}" to be close to "${f(expected)}": \ -delta "${f(delta)}" is greater than "${f(tolerance)}"${msgSuffix}`, - ); -} diff --git a/vendor/deno.land/std@0.203.0/assert/assert_array_includes.ts b/vendor/deno.land/std@0.203.0/assert/assert_array_includes.ts deleted file mode 100644 index dd45948..0000000 --- a/vendor/deno.land/std@0.203.0/assert/assert_array_includes.ts +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import { equal } from "./equal.ts"; -import { format } from "./_format.ts"; -import { AssertionError } from "./assertion_error.ts"; - -/** - * Make an assertion that `actual` includes the `expected` values. - * If not then an error will be thrown. - * - * Type parameter can be specified to ensure values under comparison have the same type. - * - * @example - * ```ts - * import { assertArrayIncludes } from "https://deno.land/std@$STD_VERSION/assert/assert_array_includes.ts"; - * - * assertArrayIncludes([1, 2], [2]) - * ``` - */ -export function assertArrayIncludes( - actual: ArrayLike, - expected: ArrayLike, - msg?: string, -) { - const missing: unknown[] = []; - for (let i = 0; i < expected.length; i++) { - let found = false; - for (let j = 0; j < actual.length; j++) { - if (equal(expected[i], actual[j])) { - found = true; - break; - } - } - if (!found) { - missing.push(expected[i]); - } - } - if (missing.length === 0) { - return; - } - - const msgSuffix = msg ? `: ${msg}` : "."; - msg = `Expected actual: "${format(actual)}" to include: "${ - format(expected) - }"${msgSuffix}\nmissing: ${format(missing)}`; - throw new AssertionError(msg); -} diff --git a/vendor/deno.land/std@0.203.0/assert/assert_equals.ts b/vendor/deno.land/std@0.203.0/assert/assert_equals.ts deleted file mode 100644 index 4ed6e95..0000000 --- a/vendor/deno.land/std@0.203.0/assert/assert_equals.ts +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import { equal } from "./equal.ts"; -import { format } from "./_format.ts"; -import { AssertionError } from "./assertion_error.ts"; -import { red } from "../fmt/colors.ts"; -import { buildMessage, diff, diffstr } from "./_diff.ts"; -import { CAN_NOT_DISPLAY } from "./_constants.ts"; - -/** - * Make an assertion that `actual` and `expected` are equal, deeply. If not - * deeply equal, then throw. - * - * Type parameter can be specified to ensure values under comparison have the same type. - * - * @example - * ```ts - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; - * - * Deno.test("example", function (): void { - * assertEquals("world", "world"); - * assertEquals({ hello: "world" }, { hello: "world" }); - * }); - * ``` - * - * Note: formatter option is experimental and may be removed in the future. - */ -export function assertEquals( - actual: T, - expected: T, - msg?: string, - options: { formatter?: (value: unknown) => string } = {}, -) { - if (equal(actual, expected)) { - return; - } - const { formatter = format } = options; - const msgSuffix = msg ? `: ${msg}` : "."; - let message = `Values are not equal${msgSuffix}`; - - const actualString = formatter(actual); - const expectedString = formatter(expected); - try { - const stringDiff = (typeof actual === "string") && - (typeof expected === "string"); - const diffResult = stringDiff - ? diffstr(actual as string, expected as string) - : diff(actualString.split("\n"), expectedString.split("\n")); - const diffMsg = buildMessage(diffResult, { stringDiff }).join("\n"); - message = `${message}\n${diffMsg}`; - } catch { - message = `${message}\n${red(CAN_NOT_DISPLAY)} + \n\n`; - } - throw new AssertionError(message); -} diff --git a/vendor/deno.land/std@0.203.0/assert/assert_exists.ts b/vendor/deno.land/std@0.203.0/assert/assert_exists.ts deleted file mode 100644 index 3ce3600..0000000 --- a/vendor/deno.land/std@0.203.0/assert/assert_exists.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import { AssertionError } from "./assertion_error.ts"; - -/** - * Make an assertion that actual is not null or undefined. - * If not then throw. - */ -export function assertExists( - actual: T, - msg?: string, -): asserts actual is NonNullable { - if (actual === undefined || actual === null) { - const msgSuffix = msg ? `: ${msg}` : "."; - msg = - `Expected actual: "${actual}" to not be null or undefined${msgSuffix}`; - throw new AssertionError(msg); - } -} diff --git a/vendor/deno.land/std@0.203.0/assert/assert_false.ts b/vendor/deno.land/std@0.203.0/assert/assert_false.ts deleted file mode 100644 index cc8ce05..0000000 --- a/vendor/deno.land/std@0.203.0/assert/assert_false.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import { AssertionError } from "./assertion_error.ts"; - -type Falsy = false | 0 | 0n | "" | null | undefined; - -/** Make an assertion, error will be thrown if `expr` have truthy value. */ -export function assertFalse(expr: unknown, msg = ""): asserts expr is Falsy { - if (expr) { - throw new AssertionError(msg); - } -} diff --git a/vendor/deno.land/std@0.203.0/assert/assert_greater.ts b/vendor/deno.land/std@0.203.0/assert/assert_greater.ts deleted file mode 100644 index bac2a6a..0000000 --- a/vendor/deno.land/std@0.203.0/assert/assert_greater.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import { format } from "./_format.ts"; -import { AssertionError } from "./assertion_error.ts"; - -/** - * Make an assertion that `actual` is greater than `expected`. - * If not then throw. - */ -export function assertGreater(actual: T, expected: T, msg?: string) { - if (actual > expected) return; - - const actualString = format(actual); - const expectedString = format(expected); - throw new AssertionError(msg ?? `Expect ${actualString} > ${expectedString}`); -} diff --git a/vendor/deno.land/std@0.203.0/assert/assert_greater_or_equal.ts b/vendor/deno.land/std@0.203.0/assert/assert_greater_or_equal.ts deleted file mode 100644 index e738b83..0000000 --- a/vendor/deno.land/std@0.203.0/assert/assert_greater_or_equal.ts +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import { format } from "./_format.ts"; -import { AssertionError } from "./assertion_error.ts"; - -/** - * Make an assertion that `actual` is greater than or equal to `expected`. - * If not then throw. - */ -export function assertGreaterOrEqual(actual: T, expected: T, msg?: string) { - if (actual >= expected) return; - - const actualString = format(actual); - const expectedString = format(expected); - throw new AssertionError( - msg ?? `Expect ${actualString} >= ${expectedString}`, - ); -} diff --git a/vendor/deno.land/std@0.203.0/assert/assert_instance_of.ts b/vendor/deno.land/std@0.203.0/assert/assert_instance_of.ts deleted file mode 100644 index e5a7886..0000000 --- a/vendor/deno.land/std@0.203.0/assert/assert_instance_of.ts +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import { AssertionError } from "./assertion_error.ts"; - -// deno-lint-ignore no-explicit-any -type AnyConstructor = new (...args: any[]) => any; -type GetConstructorType = T extends // deno-lint-ignore no-explicit-any -new (...args: any) => infer C ? C - : never; - -/** - * Make an assertion that `obj` is an instance of `type`. - * If not then throw. - */ -export function assertInstanceOf( - actual: unknown, - expectedType: T, - msg = "", -): asserts actual is GetConstructorType { - if (actual instanceof expectedType) return; - - const msgSuffix = msg ? `: ${msg}` : "."; - const expectedTypeStr = expectedType.name; - - let actualTypeStr = ""; - if (actual === null) { - actualTypeStr = "null"; - } else if (actual === undefined) { - actualTypeStr = "undefined"; - } else if (typeof actual === "object") { - actualTypeStr = actual.constructor?.name ?? "Object"; - } else { - actualTypeStr = typeof actual; - } - - if (expectedTypeStr === actualTypeStr) { - msg = - `Expected object to be an instance of "${expectedTypeStr}"${msgSuffix}`; - } else if (actualTypeStr === "function") { - msg = - `Expected object to be an instance of "${expectedTypeStr}" but was not an instanced object${msgSuffix}`; - } else { - msg = - `Expected object to be an instance of "${expectedTypeStr}" but was "${actualTypeStr}"${msgSuffix}`; - } - - throw new AssertionError(msg); -} diff --git a/vendor/deno.land/std@0.203.0/assert/assert_is_error.ts b/vendor/deno.land/std@0.203.0/assert/assert_is_error.ts deleted file mode 100644 index 33132b7..0000000 --- a/vendor/deno.land/std@0.203.0/assert/assert_is_error.ts +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import { AssertionError } from "./assertion_error.ts"; -import { stripColor } from "../fmt/colors.ts"; - -/** - * Make an assertion that `error` is an `Error`. - * If not then an error will be thrown. - * An error class and a string that should be included in the - * error message can also be asserted. - */ -export function assertIsError( - error: unknown, - // deno-lint-ignore no-explicit-any - ErrorClass?: new (...args: any[]) => E, - msgIncludes?: string, - msg?: string, -): asserts error is E { - const msgSuffix = msg ? `: ${msg}` : "."; - if (error instanceof Error === false) { - throw new AssertionError( - `Expected "error" to be an Error object${msgSuffix}}`, - ); - } - if (ErrorClass && !(error instanceof ErrorClass)) { - msg = `Expected error to be instance of "${ErrorClass.name}", but was "${ - typeof error === "object" ? error?.constructor?.name : "[not an object]" - }"${msgSuffix}`; - throw new AssertionError(msg); - } - if ( - msgIncludes && (!(error instanceof Error) || - !stripColor(error.message).includes(stripColor(msgIncludes))) - ) { - msg = `Expected error message to include ${ - JSON.stringify(msgIncludes) - }, but got ${ - error instanceof Error - ? JSON.stringify(error.message) - : '"[not an Error]"' // TODO(kt3k): show more useful information - }${msgSuffix}`; - throw new AssertionError(msg); - } -} diff --git a/vendor/deno.land/std@0.203.0/assert/assert_less.ts b/vendor/deno.land/std@0.203.0/assert/assert_less.ts deleted file mode 100644 index 7dce989..0000000 --- a/vendor/deno.land/std@0.203.0/assert/assert_less.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import { format } from "./_format.ts"; -import { AssertionError } from "./assertion_error.ts"; - -/** - * Make an assertion that `actual` is less than `expected`. - * If not then throw. - */ -export function assertLess(actual: T, expected: T, msg?: string) { - if (actual < expected) return; - - const actualString = format(actual); - const expectedString = format(expected); - throw new AssertionError(msg ?? `Expect ${actualString} < ${expectedString}`); -} diff --git a/vendor/deno.land/std@0.203.0/assert/assert_less_or_equal.ts b/vendor/deno.land/std@0.203.0/assert/assert_less_or_equal.ts deleted file mode 100644 index f1ca984..0000000 --- a/vendor/deno.land/std@0.203.0/assert/assert_less_or_equal.ts +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import { format } from "./_format.ts"; -import { AssertionError } from "./assertion_error.ts"; - -/** - * Make an assertion that `actual` is less than or equal to `expected`. - * If not then throw. - */ -export function assertLessOrEqual(actual: T, expected: T, msg?: string) { - if (actual <= expected) return; - - const actualString = format(actual); - const expectedString = format(expected); - throw new AssertionError( - msg ?? `Expect ${actualString} <= ${expectedString}`, - ); -} diff --git a/vendor/deno.land/std@0.203.0/assert/assert_match.ts b/vendor/deno.land/std@0.203.0/assert/assert_match.ts deleted file mode 100644 index 253f49b..0000000 --- a/vendor/deno.land/std@0.203.0/assert/assert_match.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import { AssertionError } from "./assertion_error.ts"; - -/** - * Make an assertion that `actual` match RegExp `expected`. If not - * then throw. - */ -export function assertMatch( - actual: string, - expected: RegExp, - msg?: string, -) { - if (!expected.test(actual)) { - const msgSuffix = msg ? `: ${msg}` : "."; - msg = `Expected actual: "${actual}" to match: "${expected}"${msgSuffix}`; - throw new AssertionError(msg); - } -} diff --git a/vendor/deno.land/std@0.203.0/assert/assert_not_instance_of.ts b/vendor/deno.land/std@0.203.0/assert/assert_not_instance_of.ts deleted file mode 100644 index 1457113..0000000 --- a/vendor/deno.land/std@0.203.0/assert/assert_not_instance_of.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import { assertFalse } from "./assert_false.ts"; - -/** - * Make an assertion that `obj` is not an instance of `type`. - * If so, then throw. - */ -export function assertNotInstanceOf( - actual: A, - // deno-lint-ignore no-explicit-any - unexpectedType: new (...args: any[]) => T, - msg?: string, -): asserts actual is Exclude { - const msgSuffix = msg ? `: ${msg}` : "."; - msg = - `Expected object to not be an instance of "${typeof unexpectedType}"${msgSuffix}`; - assertFalse(actual instanceof unexpectedType, msg); -} diff --git a/vendor/deno.land/std@0.203.0/assert/assert_not_match.ts b/vendor/deno.land/std@0.203.0/assert/assert_not_match.ts deleted file mode 100644 index 42cc6bf..0000000 --- a/vendor/deno.land/std@0.203.0/assert/assert_not_match.ts +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import { AssertionError } from "./assertion_error.ts"; - -/** - * Make an assertion that `actual` not match RegExp `expected`. If match - * then throw. - */ -export function assertNotMatch( - actual: string, - expected: RegExp, - msg?: string, -) { - if (expected.test(actual)) { - const msgSuffix = msg ? `: ${msg}` : "."; - msg = - `Expected actual: "${actual}" to not match: "${expected}"${msgSuffix}`; - throw new AssertionError(msg); - } -} diff --git a/vendor/deno.land/std@0.203.0/assert/assert_not_strict_equals.ts b/vendor/deno.land/std@0.203.0/assert/assert_not_strict_equals.ts deleted file mode 100644 index 8676d6a..0000000 --- a/vendor/deno.land/std@0.203.0/assert/assert_not_strict_equals.ts +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import { AssertionError } from "./assertion_error.ts"; -import { format } from "./_format.ts"; - -/** - * Make an assertion that `actual` and `expected` are not strictly equal. - * If the values are strictly equal then throw. - * - * ```ts - * import { assertNotStrictEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_not_strict_equals.ts"; - * - * assertNotStrictEquals(1, 1) - * ``` - */ -export function assertNotStrictEquals( - actual: T, - expected: T, - msg?: string, -) { - if (!Object.is(actual, expected)) { - return; - } - - const msgSuffix = msg ? `: ${msg}` : "."; - throw new AssertionError( - `Expected "actual" to be strictly unequal to: ${ - format(actual) - }${msgSuffix}\n`, - ); -} diff --git a/vendor/deno.land/std@0.203.0/assert/assert_object_match.ts b/vendor/deno.land/std@0.203.0/assert/assert_object_match.ts deleted file mode 100644 index bd865c4..0000000 --- a/vendor/deno.land/std@0.203.0/assert/assert_object_match.ts +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import { assertEquals } from "./assert_equals.ts"; - -/** - * Make an assertion that `actual` object is a subset of `expected` object, deeply. - * If not, then throw. - */ -export function assertObjectMatch( - // deno-lint-ignore no-explicit-any - actual: Record, - expected: Record, - msg?: string, -) { - type loose = Record; - - function filter(a: loose, b: loose) { - const seen = new WeakMap(); - return fn(a, b); - - function fn(a: loose, b: loose): loose { - // Prevent infinite loop with circular references with same filter - if ((seen.has(a)) && (seen.get(a) === b)) { - return a; - } - try { - seen.set(a, b); - } catch (err) { - if (err instanceof TypeError) { - throw new TypeError( - `Cannot assertObjectMatch ${ - a === null ? null : `type ${typeof a}` - }`, - ); - } else throw err; - } - // Filter keys and symbols which are present in both actual and expected - const filtered = {} as loose; - const entries = [ - ...Object.getOwnPropertyNames(a), - ...Object.getOwnPropertySymbols(a), - ] - .filter((key) => key in b) - .map((key) => [key, a[key as string]]) as Array<[string, unknown]>; - for (const [key, value] of entries) { - // On array references, build a filtered array and filter nested objects inside - if (Array.isArray(value)) { - const subset = (b as loose)[key]; - if (Array.isArray(subset)) { - filtered[key] = fn({ ...value }, { ...subset }); - continue; - } - } // On regexp references, keep value as it to avoid loosing pattern and flags - else if (value instanceof RegExp) { - filtered[key] = value; - continue; - } // On nested objects references, build a filtered object recursively - else if (typeof value === "object" && value !== null) { - const subset = (b as loose)[key]; - if ((typeof subset === "object") && subset) { - // When both operands are maps, build a filtered map with common keys and filter nested objects inside - if ((value instanceof Map) && (subset instanceof Map)) { - filtered[key] = new Map( - [...value].filter(([k]) => subset.has(k)).map(( - [k, v], - ) => [k, typeof v === "object" ? fn(v, subset.get(k)) : v]), - ); - continue; - } - // When both operands are set, build a filtered set with common values - if ((value instanceof Set) && (subset instanceof Set)) { - filtered[key] = new Set([...value].filter((v) => subset.has(v))); - continue; - } - filtered[key] = fn(value as loose, subset as loose); - continue; - } - } - filtered[key] = value; - } - return filtered; - } - } - return assertEquals( - // get the intersection of "actual" and "expected" - // side effect: all the instances' constructor field is "Object" now. - filter(actual, expected), - // set (nested) instances' constructor field to be "Object" without changing expected value. - // see https://github.com/denoland/deno_std/pull/1419 - filter(expected, expected), - msg, - ); -} diff --git a/vendor/deno.land/std@0.203.0/assert/assert_strict_equals.ts b/vendor/deno.land/std@0.203.0/assert/assert_strict_equals.ts deleted file mode 100644 index 012882a..0000000 --- a/vendor/deno.land/std@0.203.0/assert/assert_strict_equals.ts +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import { format } from "./_format.ts"; -import { AssertionError } from "./assertion_error.ts"; -import { buildMessage, diff, diffstr } from "./_diff.ts"; -import { CAN_NOT_DISPLAY } from "./_constants.ts"; -import { red } from "../fmt/colors.ts"; - -/** - * Make an assertion that `actual` and `expected` are strictly equal. If - * not then throw. - * - * @example - * ```ts - * import { assertStrictEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_strict_equals.ts"; - * - * Deno.test("isStrictlyEqual", function (): void { - * const a = {}; - * const b = a; - * assertStrictEquals(a, b); - * }); - * - * // This test fails - * Deno.test("isNotStrictlyEqual", function (): void { - * const a = {}; - * const b = {}; - * assertStrictEquals(a, b); - * }); - * ``` - */ -export function assertStrictEquals( - actual: unknown, - expected: T, - msg?: string, -): asserts actual is T { - if (Object.is(actual, expected)) { - return; - } - - const msgSuffix = msg ? `: ${msg}` : "."; - let message: string; - - const actualString = format(actual); - const expectedString = format(expected); - - if (actualString === expectedString) { - const withOffset = actualString - .split("\n") - .map((l) => ` ${l}`) - .join("\n"); - message = - `Values have the same structure but are not reference-equal${msgSuffix}\n\n${ - red(withOffset) - }\n`; - } else { - try { - const stringDiff = (typeof actual === "string") && - (typeof expected === "string"); - const diffResult = stringDiff - ? diffstr(actual as string, expected as string) - : diff(actualString.split("\n"), expectedString.split("\n")); - const diffMsg = buildMessage(diffResult, { stringDiff }).join("\n"); - message = `Values are not strictly equal${msgSuffix}\n${diffMsg}`; - } catch { - message = `\n${red(CAN_NOT_DISPLAY)} + \n\n`; - } - } - - throw new AssertionError(message); -} diff --git a/vendor/deno.land/std@0.203.0/assert/assert_string_includes.ts b/vendor/deno.land/std@0.203.0/assert/assert_string_includes.ts deleted file mode 100644 index ec4c912..0000000 --- a/vendor/deno.land/std@0.203.0/assert/assert_string_includes.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import { AssertionError } from "./assertion_error.ts"; - -/** - * Make an assertion that actual includes expected. If not - * then throw. - */ -export function assertStringIncludes( - actual: string, - expected: string, - msg?: string, -) { - if (!actual.includes(expected)) { - const msgSuffix = msg ? `: ${msg}` : "."; - msg = `Expected actual: "${actual}" to contain: "${expected}"${msgSuffix}`; - throw new AssertionError(msg); - } -} diff --git a/vendor/deno.land/std@0.203.0/assert/assertion_error.ts b/vendor/deno.land/std@0.203.0/assert/assertion_error.ts deleted file mode 100644 index feecc9e..0000000 --- a/vendor/deno.land/std@0.203.0/assert/assertion_error.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -export class AssertionError extends Error { - override name = "AssertionError"; - constructor(message: string) { - super(message); - } -} diff --git a/vendor/deno.land/std@0.203.0/assert/fail.ts b/vendor/deno.land/std@0.203.0/assert/fail.ts deleted file mode 100644 index 6eef3fe..0000000 --- a/vendor/deno.land/std@0.203.0/assert/fail.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import { assert } from "./assert.ts"; - -/** - * Forcefully throws a failed assertion - */ -export function fail(msg?: string): never { - const msgSuffix = msg ? `: ${msg}` : "."; - assert(false, `Failed assertion${msgSuffix}`); -} diff --git a/vendor/deno.land/std@0.203.0/assert/unimplemented.ts b/vendor/deno.land/std@0.203.0/assert/unimplemented.ts deleted file mode 100644 index 6c62e4f..0000000 --- a/vendor/deno.land/std@0.203.0/assert/unimplemented.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import { AssertionError } from "./assertion_error.ts"; - -/** Use this to stub out methods that will throw when invoked. */ -export function unimplemented(msg?: string): never { - const msgSuffix = msg ? `: ${msg}` : "."; - throw new AssertionError(`Unimplemented${msgSuffix}`); -} diff --git a/vendor/deno.land/std@0.203.0/assert/unreachable.ts b/vendor/deno.land/std@0.203.0/assert/unreachable.ts deleted file mode 100644 index d9f36ef..0000000 --- a/vendor/deno.land/std@0.203.0/assert/unreachable.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import { AssertionError } from "./assertion_error.ts"; - -/** Use this to assert unreachable code. */ -export function unreachable(): never { - throw new AssertionError("unreachable"); -} diff --git a/vendor/deno.land/std@0.203.0/fmt/colors.ts b/vendor/deno.land/std@0.203.0/fmt/colors.ts deleted file mode 100644 index 405e02a..0000000 --- a/vendor/deno.land/std@0.203.0/fmt/colors.ts +++ /dev/null @@ -1,578 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. -// A module to print ANSI terminal colors. Inspired by chalk, kleur, and colors -// on npm. - -/** - * String formatters and utilities for dealing with ANSI color codes. - * - * This module is browser compatible. - * - * This module supports `NO_COLOR` environmental variable disabling any coloring - * if `NO_COLOR` is set. - * - * @example - * ```typescript - * import { - * bgBlue, - * bgRgb24, - * bgRgb8, - * bold, - * italic, - * red, - * rgb24, - * rgb8, - * } from "https://deno.land/std@$STD_VERSION/fmt/colors.ts"; - * - * console.log(bgBlue(italic(red(bold("Hello, World!"))))); - * - * // also supports 8bit colors - * - * console.log(rgb8("Hello, World!", 42)); - * - * console.log(bgRgb8("Hello, World!", 42)); - * - * // and 24bit rgb - * - * console.log(rgb24("Hello, World!", { - * r: 41, - * g: 42, - * b: 43, - * })); - * - * console.log(bgRgb24("Hello, World!", { - * r: 41, - * g: 42, - * b: 43, - * })); - * ``` - * - * @module - */ - -// deno-lint-ignore no-explicit-any -const { Deno } = globalThis as any; -const noColor = typeof Deno?.noColor === "boolean" - ? Deno.noColor as boolean - : false; - -interface Code { - open: string; - close: string; - regexp: RegExp; -} - -/** RGB 8-bits per channel. Each in range `0->255` or `0x00->0xff` */ -interface Rgb { - r: number; - g: number; - b: number; -} - -let enabled = !noColor; - -/** - * Set changing text color to enabled or disabled - * @param value - */ -export function setColorEnabled(value: boolean) { - if (Deno?.noColor) { - return; - } - - enabled = value; -} - -/** Get whether text color change is enabled or disabled. */ -export function getColorEnabled(): boolean { - return enabled; -} - -/** - * Builds color code - * @param open - * @param close - */ -function code(open: number[], close: number): Code { - return { - open: `\x1b[${open.join(";")}m`, - close: `\x1b[${close}m`, - regexp: new RegExp(`\\x1b\\[${close}m`, "g"), - }; -} - -/** - * Applies color and background based on color code and its associated text - * @param str text to apply color settings to - * @param code color code to apply - */ -function run(str: string, code: Code): string { - return enabled - ? `${code.open}${str.replace(code.regexp, code.open)}${code.close}` - : str; -} - -/** - * Reset the text modified - * @param str text to reset - */ -export function reset(str: string): string { - return run(str, code([0], 0)); -} - -/** - * Make the text bold. - * @param str text to make bold - */ -export function bold(str: string): string { - return run(str, code([1], 22)); -} - -/** - * The text emits only a small amount of light. - * @param str text to dim - */ -export function dim(str: string): string { - return run(str, code([2], 22)); -} - -/** - * Make the text italic. - * @param str text to make italic - */ -export function italic(str: string): string { - return run(str, code([3], 23)); -} - -/** - * Make the text underline. - * @param str text to underline - */ -export function underline(str: string): string { - return run(str, code([4], 24)); -} - -/** - * Invert background color and text color. - * @param str text to invert its color - */ -export function inverse(str: string): string { - return run(str, code([7], 27)); -} - -/** - * Make the text hidden. - * @param str text to hide - */ -export function hidden(str: string): string { - return run(str, code([8], 28)); -} - -/** - * Put horizontal line through the center of the text. - * @param str text to strike through - */ -export function strikethrough(str: string): string { - return run(str, code([9], 29)); -} - -/** - * Set text color to black. - * @param str text to make black - */ -export function black(str: string): string { - return run(str, code([30], 39)); -} - -/** - * Set text color to red. - * @param str text to make red - */ -export function red(str: string): string { - return run(str, code([31], 39)); -} - -/** - * Set text color to green. - * @param str text to make green - */ -export function green(str: string): string { - return run(str, code([32], 39)); -} - -/** - * Set text color to yellow. - * @param str text to make yellow - */ -export function yellow(str: string): string { - return run(str, code([33], 39)); -} - -/** - * Set text color to blue. - * @param str text to make blue - */ -export function blue(str: string): string { - return run(str, code([34], 39)); -} - -/** - * Set text color to magenta. - * @param str text to make magenta - */ -export function magenta(str: string): string { - return run(str, code([35], 39)); -} - -/** - * Set text color to cyan. - * @param str text to make cyan - */ -export function cyan(str: string): string { - return run(str, code([36], 39)); -} - -/** - * Set text color to white. - * @param str text to make white - */ -export function white(str: string): string { - return run(str, code([37], 39)); -} - -/** - * Set text color to gray. - * @param str text to make gray - */ -export function gray(str: string): string { - return brightBlack(str); -} - -/** - * Set text color to bright black. - * @param str text to make bright-black - */ -export function brightBlack(str: string): string { - return run(str, code([90], 39)); -} - -/** - * Set text color to bright red. - * @param str text to make bright-red - */ -export function brightRed(str: string): string { - return run(str, code([91], 39)); -} - -/** - * Set text color to bright green. - * @param str text to make bright-green - */ -export function brightGreen(str: string): string { - return run(str, code([92], 39)); -} - -/** - * Set text color to bright yellow. - * @param str text to make bright-yellow - */ -export function brightYellow(str: string): string { - return run(str, code([93], 39)); -} - -/** - * Set text color to bright blue. - * @param str text to make bright-blue - */ -export function brightBlue(str: string): string { - return run(str, code([94], 39)); -} - -/** - * Set text color to bright magenta. - * @param str text to make bright-magenta - */ -export function brightMagenta(str: string): string { - return run(str, code([95], 39)); -} - -/** - * Set text color to bright cyan. - * @param str text to make bright-cyan - */ -export function brightCyan(str: string): string { - return run(str, code([96], 39)); -} - -/** - * Set text color to bright white. - * @param str text to make bright-white - */ -export function brightWhite(str: string): string { - return run(str, code([97], 39)); -} - -/** - * Set background color to black. - * @param str text to make its background black - */ -export function bgBlack(str: string): string { - return run(str, code([40], 49)); -} - -/** - * Set background color to red. - * @param str text to make its background red - */ -export function bgRed(str: string): string { - return run(str, code([41], 49)); -} - -/** - * Set background color to green. - * @param str text to make its background green - */ -export function bgGreen(str: string): string { - return run(str, code([42], 49)); -} - -/** - * Set background color to yellow. - * @param str text to make its background yellow - */ -export function bgYellow(str: string): string { - return run(str, code([43], 49)); -} - -/** - * Set background color to blue. - * @param str text to make its background blue - */ -export function bgBlue(str: string): string { - return run(str, code([44], 49)); -} - -/** - * Set background color to magenta. - * @param str text to make its background magenta - */ -export function bgMagenta(str: string): string { - return run(str, code([45], 49)); -} - -/** - * Set background color to cyan. - * @param str text to make its background cyan - */ -export function bgCyan(str: string): string { - return run(str, code([46], 49)); -} - -/** - * Set background color to white. - * @param str text to make its background white - */ -export function bgWhite(str: string): string { - return run(str, code([47], 49)); -} - -/** - * Set background color to bright black. - * @param str text to make its background bright-black - */ -export function bgBrightBlack(str: string): string { - return run(str, code([100], 49)); -} - -/** - * Set background color to bright red. - * @param str text to make its background bright-red - */ -export function bgBrightRed(str: string): string { - return run(str, code([101], 49)); -} - -/** - * Set background color to bright green. - * @param str text to make its background bright-green - */ -export function bgBrightGreen(str: string): string { - return run(str, code([102], 49)); -} - -/** - * Set background color to bright yellow. - * @param str text to make its background bright-yellow - */ -export function bgBrightYellow(str: string): string { - return run(str, code([103], 49)); -} - -/** - * Set background color to bright blue. - * @param str text to make its background bright-blue - */ -export function bgBrightBlue(str: string): string { - return run(str, code([104], 49)); -} - -/** - * Set background color to bright magenta. - * @param str text to make its background bright-magenta - */ -export function bgBrightMagenta(str: string): string { - return run(str, code([105], 49)); -} - -/** - * Set background color to bright cyan. - * @param str text to make its background bright-cyan - */ -export function bgBrightCyan(str: string): string { - return run(str, code([106], 49)); -} - -/** - * Set background color to bright white. - * @param str text to make its background bright-white - */ -export function bgBrightWhite(str: string): string { - return run(str, code([107], 49)); -} - -/* Special Color Sequences */ - -/** - * Clam and truncate color codes - * @param n - * @param max number to truncate to - * @param min number to truncate from - */ -function clampAndTruncate(n: number, max = 255, min = 0): number { - return Math.trunc(Math.max(Math.min(n, max), min)); -} - -/** - * Set text color using paletted 8bit colors. - * https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit - * @param str text color to apply paletted 8bit colors to - * @param color code - */ -export function rgb8(str: string, color: number): string { - return run(str, code([38, 5, clampAndTruncate(color)], 39)); -} - -/** - * Set background color using paletted 8bit colors. - * https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit - * @param str text color to apply paletted 8bit background colors to - * @param color code - */ -export function bgRgb8(str: string, color: number): string { - return run(str, code([48, 5, clampAndTruncate(color)], 49)); -} - -/** - * Set text color using 24bit rgb. - * `color` can be a number in range `0x000000` to `0xffffff` or - * an `Rgb`. - * - * To produce the color magenta: - * - * ```ts - * import { rgb24 } from "https://deno.land/std@$STD_VERSION/fmt/colors.ts"; - * rgb24("foo", 0xff00ff); - * rgb24("foo", {r: 255, g: 0, b: 255}); - * ``` - * @param str text color to apply 24bit rgb to - * @param color code - */ -export function rgb24(str: string, color: number | Rgb): string { - if (typeof color === "number") { - return run( - str, - code( - [38, 2, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff], - 39, - ), - ); - } - return run( - str, - code( - [ - 38, - 2, - clampAndTruncate(color.r), - clampAndTruncate(color.g), - clampAndTruncate(color.b), - ], - 39, - ), - ); -} - -/** - * Set background color using 24bit rgb. - * `color` can be a number in range `0x000000` to `0xffffff` or - * an `Rgb`. - * - * To produce the color magenta: - * - * ```ts - * import { bgRgb24 } from "https://deno.land/std@$STD_VERSION/fmt/colors.ts"; - * bgRgb24("foo", 0xff00ff); - * bgRgb24("foo", {r: 255, g: 0, b: 255}); - * ``` - * @param str text color to apply 24bit rgb to - * @param color code - */ -export function bgRgb24(str: string, color: number | Rgb): string { - if (typeof color === "number") { - return run( - str, - code( - [48, 2, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff], - 49, - ), - ); - } - return run( - str, - code( - [ - 48, - 2, - clampAndTruncate(color.r), - clampAndTruncate(color.g), - clampAndTruncate(color.b), - ], - 49, - ), - ); -} - -// https://github.com/chalk/ansi-regex/blob/02fa893d619d3da85411acc8fd4e2eea0e95a9d9/index.js -const ANSI_PATTERN = new RegExp( - [ - "[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)", - "(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TXZcf-nq-uy=><~]))", - ].join("|"), - "g", -); - -/** - * @deprecated (will be removed in 1.0.0) Use `stripAnsiCode` instead. - * - * Remove ANSI escape codes from the string. - * @param string to remove ANSI escape codes from - */ -export const stripColor = stripAnsiCode; - -/** - * Remove ANSI escape codes from the string. - * @param string to remove ANSI escape codes from - */ -export function stripAnsiCode(string: string): string { - return string.replace(ANSI_PATTERN, ""); -} diff --git a/vendor/deno.land/std@0.203.0/testing/asserts.ts b/vendor/deno.land/std@0.203.0/testing/asserts.ts deleted file mode 100644 index 4cb1fcf..0000000 --- a/vendor/deno.land/std@0.203.0/testing/asserts.ts +++ /dev/null @@ -1,333 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. - -/** - * @deprecated (will be removed after 1.0.0) Import from `std/assert/mod.ts` instead. - * - * A library of assertion functions. - * If the assertion is false an `AssertionError` will be thrown which will - * result in pretty-printed diff of failing assertion. - * - * This module is browser compatible, but do not rely on good formatting of - * values for AssertionError messages in browsers. - * - * @module - */ - -export { - /** - * @deprecated (will be removed after 1.0.0) Import from `std/assert/assert.ts` instead. - * - * Make an assertion, error will be thrown if `expr` does not have truthy value. - */ - assert, - /** - * @deprecated (will be removed after 1.0.0) Import from `std/assert/assert_almost_equals.ts` instead. - * - * Make an assertion that `actual` and `expected` are almost equal numbers through - * a given tolerance. It can be used to take into account IEEE-754 double-precision - * floating-point representation limitations. - * If the values are not almost equal then throw. - * - * @example - * ```ts - * import { assertAlmostEquals, assertThrows } from "https://deno.land/std@$STD_VERSION/testing/asserts.ts"; - * - * assertAlmostEquals(0.1, 0.2); - * - * // Using a custom tolerance value - * assertAlmostEquals(0.1 + 0.2, 0.3, 1e-16); - * assertThrows(() => assertAlmostEquals(0.1 + 0.2, 0.3, 1e-17)); - * ``` - */ - assertAlmostEquals, - /** - * @deprecated (will be removed after 1.0.0) Import from `std/assert/assert_array_includes.ts` instead. - * - * Make an assertion that `actual` includes the `expected` values. - * If not then an error will be thrown. - * - * Type parameter can be specified to ensure values under comparison have the same type. - * - * @example - * ```ts - * import { assertArrayIncludes } from "https://deno.land/std@$STD_VERSION/testing/asserts.ts"; - * - * assertArrayIncludes([1, 2], [2]) - * ``` - */ - assertArrayIncludes, - /** - * @deprecated (will be removed after 1.0.0) Import from `std/assert/assert_equals.ts` instead. - * - * Make an assertion that `actual` and `expected` are equal, deeply. If not - * deeply equal, then throw. - * - * Type parameter can be specified to ensure values under comparison have the same type. - * - * @example - * ```ts - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/testing/asserts.ts"; - * - * Deno.test("example", function (): void { - * assertEquals("world", "world"); - * assertEquals({ hello: "world" }, { hello: "world" }); - * }); - * ``` - */ - assertEquals, - /** - * @deprecated (will be removed after 1.0.0) Import from `std/assert/assert_exists.ts` instead. - * - * Make an assertion that actual is not null or undefined. - * If not then throw. - */ - assertExists, - /** - * @deprecated (will be removed after 1.0.0) Import from `std/assert/assert_false.ts` instead. - * - * Make an assertion, error will be thrown if `expr` have truthy value. - */ - assertFalse, - /** - * @deprecated (will be removed after 1.0.0) Import from `std/assert/assert_instance_of.ts` instead. - * - * Make an assertion that `obj` is an instance of `type`. - * If not then throw. - */ - assertInstanceOf, - /** @deprecated (will be removed after 1.0.0) Import from `std/assert/assertion_error.ts` instead. */ - AssertionError, - /** - * @deprecated (will be removed after 1.0.0) Import from `std/assert/assert_is_error.ts` instead. - * - * Make an assertion that `error` is an `Error`. - * If not then an error will be thrown. - * An error class and a string that should be included in the - * error message can also be asserted. - */ - assertIsError, - /** - * @deprecated (will be removed after 1.0.0) Import from `std/assert/assert_match.ts` instead. - * - * Make an assertion that `actual` match RegExp `expected`. If not - * then throw. - */ - assertMatch, - /** - * @deprecated (will be removed after 1.0.0) Import from `std/assert/assert_not_equals.ts` instead. - * - * Make an assertion that `actual` and `expected` are not equal, deeply. - * If not then throw. - * - * Type parameter can be specified to ensure values under comparison have the same type. - * - * @example - * ```ts - * import { assertNotEquals } from "https://deno.land/std@$STD_VERSION/testing/asserts.ts"; - * - * assertNotEquals(1, 2) - * ``` - */ - assertNotEquals, - /** - * @deprecated (will be removed after 1.0.0) Import from `std/assert/assert_not_instance_of.ts` instead. - * - * Make an assertion that `obj` is not an instance of `type`. - * If so, then throw. - */ - assertNotInstanceOf, - /** - * @deprecated (will be removed after 1.0.0) Import from `std/assert/assert_not_match.ts` instead. - * - * Make an assertion that `actual` object is a subset of `expected` object, deeply. - * If not, then throw. - */ - assertNotMatch, - /** - * @deprecated (will be removed after 1.0.0) Import from `std/assert/assert_not_strict_equals.ts` instead. - * - * Make an assertion that `actual` and `expected` are not strictly equal. - * If the values are strictly equal then throw. - * - * ```ts - * import { assertNotStrictEquals } from "https://deno.land/std@$STD_VERSION/testing/asserts.ts"; - * - * assertNotStrictEquals(1, 1) - * ``` - */ - assertNotStrictEquals, - /** - * Make an assertion that `actual` object is a subset of `expected` object, deeply. - * If not, then throw. - */ - assertObjectMatch, - /** - * Executes a function which returns a promise, expecting it to reject. - * If it does not, then it throws. An error class and a string that should be - * included in the error message can also be asserted. - * - * @example - * ```ts - * import { assertRejects } from "https://deno.land/std@$STD_VERSION/testing/asserts.ts"; - * - * Deno.test("doesThrow", async function () { - * await assertRejects(async () => { - * throw new TypeError("hello world!"); - * }, TypeError); - * await assertRejects( - * async () => { - * throw new TypeError("hello world!"); - * }, - * TypeError, - * "hello", - * ); - * }); - * - * // This test will not pass. - * Deno.test("fails", async function () { - * await assertRejects( - * async () => { - * console.log("Hello world"); - * }, - * ); - * }); - * ``` - * - * * @example - * ```ts - * import { assertRejects } from "https://deno.land/std@$STD_VERSION/testing/asserts.ts"; - * - * Deno.test("doesThrow", async function () { - * await assertRejects( - * async () => { - * throw new TypeError("hello world!"); - * }, - * ); - * await assertRejects( - * async () => { - * return Promise.reject(new Error()); - * }, - * ); - * }); - * - * // This test will not pass. - * Deno.test("fails", async function () { - * await assertRejects( - * async () => { - * console.log("Hello world"); - * }, - * ); - * }); - * ``` - */ - assertRejects, - /** - * @deprecated (will be removed after 1.0.0) Import from `std/assert/assert_strict_equals.ts` instead. - * - * Make an assertion that `actual` and `expected` are strictly equal. If - * not then throw. - * - * @example - * ```ts - * import { assertStrictEquals } from "https://deno.land/std@$STD_VERSION/testing/asserts.ts"; - * - * Deno.test("isStrictlyEqual", function (): void { - * const a = {}; - * const b = a; - * assertStrictEquals(a, b); - * }); - * - * // This test fails - * Deno.test("isNotStrictlyEqual", function (): void { - * const a = {}; - * const b = {}; - * assertStrictEquals(a, b); - * }); - * ``` - */ - assertStrictEquals, - /** - * @deprecated (will be removed after 1.0.0) Import from `std/assert/assert_string_includes.ts` instead. - * - * Make an assertion that actual includes expected. If not - * then throw. - */ - assertStringIncludes, - /** - * @deprecated (will be removed after 1.0.0) Import from `std/assert/assert_throws.ts` instead. - * - * Executes a function, expecting it to throw. If it does not, then it - * throws. An error class and a string that should be included in the - * error message can also be asserted. - * - * @example - * ```ts - * import { assertThrows } from "https://deno.land/std@$STD_VERSION/testing/asserts.ts"; - * - * Deno.test("doesThrow", function (): void { - * assertThrows((): void => { - * throw new TypeError("hello world!"); - * }, TypeError); - * assertThrows( - * (): void => { - * throw new TypeError("hello world!"); - * }, - * TypeError, - * "hello", - * ); - * }); - * - * // This test will not pass. - * Deno.test("fails", function (): void { - * assertThrows((): void => { - * console.log("Hello world"); - * }); - * }); - * ``` - * - * @example - * ```ts - * import { assertThrows } from "https://deno.land/std@$STD_VERSION/testing/asserts.ts"; - * - * Deno.test("doesThrow", function (): void { - * assertThrows((): void => { - * throw new TypeError("hello world!"); - * }); - * }); - * - * // This test will not pass. - * Deno.test("fails", function (): void { - * assertThrows((): void => { - * console.log("Hello world"); - * }); - * }); - * ``` - */ - assertThrows, - /** - * @deprecated (will be removed after 1.0.0) Import from `std/assert/equal.ts` instead. - * - * Deep equality comparison used in assertions - * @param c actual value - * @param d expected value - */ - equal, - /** - * @deprecated (will be removed after 1.0.0) Import from `std/assert/fail.ts` instead. - * - * Forcefully throws a failed assertion - */ - fail, - /** - * @deprecated (will be removed after 1.0.0) Import from `std/assert/unimplemented.ts` instead. - * - * Use this to stub out methods that will throw when invoked. - */ - unimplemented, - /** - * @deprecated (will be removed after 1.0.0) Import from `std/assert/unreachable.ts` instead. - * - * Use this to assert unreachable code. - */ - unreachable, -} from "../assert/mod.ts"; diff --git a/vendor/deno.land/std@0.205.0/assert/_constants.ts b/vendor/deno.land/std@0.205.0/assert/_constants.ts deleted file mode 100644 index 1482010..0000000 --- a/vendor/deno.land/std@0.205.0/assert/_constants.ts +++ /dev/null @@ -1,2 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -export const CAN_NOT_DISPLAY = "[Cannot display]"; diff --git a/vendor/deno.land/std@0.205.0/assert/_diff.ts b/vendor/deno.land/std@0.205.0/assert/_diff.ts deleted file mode 100644 index e5c2ea0..0000000 --- a/vendor/deno.land/std@0.205.0/assert/_diff.ts +++ /dev/null @@ -1,443 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. - -import { - bgGreen, - bgRed, - bold, - gray, - green, - red, - white, -} from "../fmt/colors.ts"; - -interface FarthestPoint { - y: number; - id: number; -} - -export enum DiffType { - removed = "removed", - common = "common", - added = "added", -} - -export interface DiffResult { - type: DiffType; - value: T; - details?: Array>; -} - -const REMOVED = 1; -const COMMON = 2; -const ADDED = 3; - -function createCommon(A: T[], B: T[], reverse?: boolean): T[] { - const common = []; - if (A.length === 0 || B.length === 0) return []; - for (let i = 0; i < Math.min(A.length, B.length); i += 1) { - if ( - A[reverse ? A.length - i - 1 : i] === B[reverse ? B.length - i - 1 : i] - ) { - common.push(A[reverse ? A.length - i - 1 : i]); - } else { - return common; - } - } - return common; -} - -/** - * Renders the differences between the actual and expected values - * @param A Actual value - * @param B Expected value - */ -export function diff(A: T[], B: T[]): Array> { - const prefixCommon = createCommon(A, B); - const suffixCommon = createCommon( - A.slice(prefixCommon.length), - B.slice(prefixCommon.length), - true, - ).reverse(); - A = suffixCommon.length - ? A.slice(prefixCommon.length, -suffixCommon.length) - : A.slice(prefixCommon.length); - B = suffixCommon.length - ? B.slice(prefixCommon.length, -suffixCommon.length) - : B.slice(prefixCommon.length); - const swapped = B.length > A.length; - [A, B] = swapped ? [B, A] : [A, B]; - const M = A.length; - const N = B.length; - if (!M && !N && !suffixCommon.length && !prefixCommon.length) return []; - if (!N) { - return [ - ...prefixCommon.map( - (c): DiffResult => ({ type: DiffType.common, value: c }), - ), - ...A.map( - (a): DiffResult => ({ - type: swapped ? DiffType.added : DiffType.removed, - value: a, - }), - ), - ...suffixCommon.map( - (c): DiffResult => ({ type: DiffType.common, value: c }), - ), - ]; - } - const offset = N; - const delta = M - N; - const size = M + N + 1; - const fp: FarthestPoint[] = Array.from( - { length: size }, - () => ({ y: -1, id: -1 }), - ); - /** - * INFO: - * This buffer is used to save memory and improve performance. - * The first half is used to save route and last half is used to save diff - * type. - * This is because, when I kept new uint8array area to save type,performance - * worsened. - */ - const routes = new Uint32Array((M * N + size + 1) * 2); - const diffTypesPtrOffset = routes.length / 2; - let ptr = 0; - let p = -1; - - function backTrace( - A: T[], - B: T[], - current: FarthestPoint, - swapped: boolean, - ): Array<{ - type: DiffType; - value: T; - }> { - const M = A.length; - const N = B.length; - const result = []; - let a = M - 1; - let b = N - 1; - let j = routes[current.id]; - let type = routes[current.id + diffTypesPtrOffset]; - while (true) { - if (!j && !type) break; - const prev = j; - if (type === REMOVED) { - result.unshift({ - type: swapped ? DiffType.removed : DiffType.added, - value: B[b], - }); - b -= 1; - } else if (type === ADDED) { - result.unshift({ - type: swapped ? DiffType.added : DiffType.removed, - value: A[a], - }); - a -= 1; - } else { - result.unshift({ type: DiffType.common, value: A[a] }); - a -= 1; - b -= 1; - } - j = routes[prev]; - type = routes[prev + diffTypesPtrOffset]; - } - return result; - } - - function createFP( - slide: FarthestPoint, - down: FarthestPoint, - k: number, - M: number, - ): FarthestPoint { - if (slide && slide.y === -1 && down && down.y === -1) { - return { y: 0, id: 0 }; - } - if ( - (down && down.y === -1) || - k === M || - (slide && slide.y) > (down && down.y) + 1 - ) { - const prev = slide.id; - ptr++; - routes[ptr] = prev; - routes[ptr + diffTypesPtrOffset] = ADDED; - return { y: slide.y, id: ptr }; - } else { - const prev = down.id; - ptr++; - routes[ptr] = prev; - routes[ptr + diffTypesPtrOffset] = REMOVED; - return { y: down.y + 1, id: ptr }; - } - } - - function snake( - k: number, - slide: FarthestPoint, - down: FarthestPoint, - _offset: number, - A: T[], - B: T[], - ): FarthestPoint { - const M = A.length; - const N = B.length; - if (k < -N || M < k) return { y: -1, id: -1 }; - const fp = createFP(slide, down, k, M); - while (fp.y + k < M && fp.y < N && A[fp.y + k] === B[fp.y]) { - const prev = fp.id; - ptr++; - fp.id = ptr; - fp.y += 1; - routes[ptr] = prev; - routes[ptr + diffTypesPtrOffset] = COMMON; - } - return fp; - } - - while (fp[delta + offset].y < N) { - p = p + 1; - for (let k = -p; k < delta; ++k) { - fp[k + offset] = snake( - k, - fp[k - 1 + offset], - fp[k + 1 + offset], - offset, - A, - B, - ); - } - for (let k = delta + p; k > delta; --k) { - fp[k + offset] = snake( - k, - fp[k - 1 + offset], - fp[k + 1 + offset], - offset, - A, - B, - ); - } - fp[delta + offset] = snake( - delta, - fp[delta - 1 + offset], - fp[delta + 1 + offset], - offset, - A, - B, - ); - } - return [ - ...prefixCommon.map( - (c): DiffResult => ({ type: DiffType.common, value: c }), - ), - ...backTrace(A, B, fp[delta + offset], swapped), - ...suffixCommon.map( - (c): DiffResult => ({ type: DiffType.common, value: c }), - ), - ]; -} - -/** - * Renders the differences between the actual and expected strings - * Partially inspired from https://github.com/kpdecker/jsdiff - * @param A Actual string - * @param B Expected string - */ -export function diffstr(A: string, B: string) { - function unescape(string: string): string { - // unescape invisible characters. - // ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String#escape_sequences - return string - .replaceAll("\b", "\\b") - .replaceAll("\f", "\\f") - .replaceAll("\t", "\\t") - .replaceAll("\v", "\\v") - .replaceAll( // does not remove line breaks - /\r\n|\r|\n/g, - (str) => str === "\r" ? "\\r" : str === "\n" ? "\\n\n" : "\\r\\n\r\n", - ); - } - - function tokenize(string: string, { wordDiff = false } = {}): string[] { - if (wordDiff) { - // Split string on whitespace symbols - const tokens = string.split(/([^\S\r\n]+|[()[\]{}'"\r\n]|\b)/); - // Extended Latin character set - const words = - /^[a-zA-Z\u{C0}-\u{FF}\u{D8}-\u{F6}\u{F8}-\u{2C6}\u{2C8}-\u{2D7}\u{2DE}-\u{2FF}\u{1E00}-\u{1EFF}]+$/u; - - // Join boundary splits that we do not consider to be boundaries and merge empty strings surrounded by word chars - for (let i = 0; i < tokens.length - 1; i++) { - if ( - !tokens[i + 1] && tokens[i + 2] && words.test(tokens[i]) && - words.test(tokens[i + 2]) - ) { - tokens[i] += tokens[i + 2]; - tokens.splice(i + 1, 2); - i--; - } - } - return tokens.filter((token) => token); - } else { - // Split string on new lines symbols - const tokens = [], lines = string.split(/(\n|\r\n)/); - - // Ignore final empty token when text ends with a newline - if (!lines[lines.length - 1]) { - lines.pop(); - } - - // Merge the content and line separators into single tokens - for (let i = 0; i < lines.length; i++) { - if (i % 2) { - tokens[tokens.length - 1] += lines[i]; - } else { - tokens.push(lines[i]); - } - } - return tokens; - } - } - - // Create details by filtering relevant word-diff for current line - // and merge "space-diff" if surrounded by word-diff for cleaner displays - function createDetails( - line: DiffResult, - tokens: Array>, - ) { - return tokens.filter(({ type }) => - type === line.type || type === DiffType.common - ).map((result, i, t) => { - if ( - (result.type === DiffType.common) && (t[i - 1]) && - (t[i - 1]?.type === t[i + 1]?.type) && /\s+/.test(result.value) - ) { - return { - ...result, - type: t[i - 1].type, - }; - } - return result; - }); - } - - // Compute multi-line diff - const diffResult = diff( - tokenize(`${unescape(A)}\n`), - tokenize(`${unescape(B)}\n`), - ); - - const added = [], removed = []; - for (const result of diffResult) { - if (result.type === DiffType.added) { - added.push(result); - } - if (result.type === DiffType.removed) { - removed.push(result); - } - } - - // Compute word-diff - const hasMoreRemovedLines = added.length < removed.length; - const aLines = hasMoreRemovedLines ? added : removed; - const bLines = hasMoreRemovedLines ? removed : added; - for (const a of aLines) { - let tokens = [] as Array>, - b: undefined | DiffResult; - // Search another diff line with at least one common token - while (bLines.length) { - b = bLines.shift(); - const tokenized = [ - tokenize(a.value, { wordDiff: true }), - tokenize(b?.value ?? "", { wordDiff: true }), - ] as string[][]; - if (hasMoreRemovedLines) tokenized.reverse(); - tokens = diff(tokenized[0], tokenized[1]); - if ( - tokens.some(({ type, value }) => - type === DiffType.common && value.trim().length - ) - ) { - break; - } - } - // Register word-diff details - a.details = createDetails(a, tokens); - if (b) { - b.details = createDetails(b, tokens); - } - } - - return diffResult; -} - -/** - * Colors the output of assertion diffs - * @param diffType Difference type, either added or removed - */ -function createColor( - diffType: DiffType, - { background = false } = {}, -): (s: string) => string { - // TODO(@littledivy): Remove this when we can detect - // true color terminals. - // https://github.com/denoland/deno_std/issues/2575 - background = false; - switch (diffType) { - case DiffType.added: - return (s: string): string => - background ? bgGreen(white(s)) : green(bold(s)); - case DiffType.removed: - return (s: string): string => background ? bgRed(white(s)) : red(bold(s)); - default: - return white; - } -} - -/** - * Prefixes `+` or `-` in diff output - * @param diffType Difference type, either added or removed - */ -function createSign(diffType: DiffType): string { - switch (diffType) { - case DiffType.added: - return "+ "; - case DiffType.removed: - return "- "; - default: - return " "; - } -} - -export function buildMessage( - diffResult: ReadonlyArray>, - { stringDiff = false } = {}, -): string[] { - const messages: string[] = [], diffMessages: string[] = []; - messages.push(""); - messages.push(""); - messages.push( - ` ${gray(bold("[Diff]"))} ${red(bold("Actual"))} / ${ - green(bold("Expected")) - }`, - ); - messages.push(""); - messages.push(""); - diffResult.forEach((result: DiffResult) => { - const c = createColor(result.type); - const line = result.details?.map((detail) => - detail.type !== DiffType.common - ? createColor(detail.type, { background: true })(detail.value) - : detail.value - ).join("") ?? result.value; - diffMessages.push(c(`${createSign(result.type)}${line}`)); - }); - messages.push(...(stringDiff ? [diffMessages.join("")] : diffMessages)); - messages.push(""); - - return messages; -} diff --git a/vendor/deno.land/std@0.205.0/assert/assert.ts b/vendor/deno.land/std@0.205.0/assert/assert.ts deleted file mode 100644 index 3f868f4..0000000 --- a/vendor/deno.land/std@0.205.0/assert/assert.ts +++ /dev/null @@ -1,9 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import { AssertionError } from "./assertion_error.ts"; - -/** Make an assertion, error will be thrown if `expr` does not have truthy value. */ -export function assert(expr: unknown, msg = ""): asserts expr { - if (!expr) { - throw new AssertionError(msg); - } -} diff --git a/vendor/deno.land/std@0.205.0/assert/assert_almost_equals.ts b/vendor/deno.land/std@0.205.0/assert/assert_almost_equals.ts deleted file mode 100644 index 4292730..0000000 --- a/vendor/deno.land/std@0.205.0/assert/assert_almost_equals.ts +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import { AssertionError } from "./assertion_error.ts"; - -/** - * Make an assertion that `actual` and `expected` are almost equal numbers through - * a given tolerance. It can be used to take into account IEEE-754 double-precision - * floating-point representation limitations. - * If the values are not almost equal then throw. - * - * @example - * ```ts - * import { assertAlmostEquals, assertThrows } from "https://deno.land/std@$STD_VERSION/assert/mod.ts"; - * - * assertAlmostEquals(0.1, 0.2); - * - * // Using a custom tolerance value - * assertAlmostEquals(0.1 + 0.2, 0.3, 1e-16); - * assertThrows(() => assertAlmostEquals(0.1 + 0.2, 0.3, 1e-17)); - * ``` - */ -export function assertAlmostEquals( - actual: number, - expected: number, - tolerance = 1e-7, - msg?: string, -) { - if (Object.is(actual, expected)) { - return; - } - const delta = Math.abs(expected - actual); - if (delta <= tolerance) { - return; - } - - const msgSuffix = msg ? `: ${msg}` : "."; - const f = (n: number) => Number.isInteger(n) ? n : n.toExponential(); - throw new AssertionError( - `Expected actual: "${f(actual)}" to be close to "${f(expected)}": \ -delta "${f(delta)}" is greater than "${f(tolerance)}"${msgSuffix}`, - ); -} diff --git a/vendor/deno.land/std@0.205.0/assert/assert_array_includes.ts b/vendor/deno.land/std@0.205.0/assert/assert_array_includes.ts deleted file mode 100644 index dd45948..0000000 --- a/vendor/deno.land/std@0.205.0/assert/assert_array_includes.ts +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import { equal } from "./equal.ts"; -import { format } from "./_format.ts"; -import { AssertionError } from "./assertion_error.ts"; - -/** - * Make an assertion that `actual` includes the `expected` values. - * If not then an error will be thrown. - * - * Type parameter can be specified to ensure values under comparison have the same type. - * - * @example - * ```ts - * import { assertArrayIncludes } from "https://deno.land/std@$STD_VERSION/assert/assert_array_includes.ts"; - * - * assertArrayIncludes([1, 2], [2]) - * ``` - */ -export function assertArrayIncludes( - actual: ArrayLike, - expected: ArrayLike, - msg?: string, -) { - const missing: unknown[] = []; - for (let i = 0; i < expected.length; i++) { - let found = false; - for (let j = 0; j < actual.length; j++) { - if (equal(expected[i], actual[j])) { - found = true; - break; - } - } - if (!found) { - missing.push(expected[i]); - } - } - if (missing.length === 0) { - return; - } - - const msgSuffix = msg ? `: ${msg}` : "."; - msg = `Expected actual: "${format(actual)}" to include: "${ - format(expected) - }"${msgSuffix}\nmissing: ${format(missing)}`; - throw new AssertionError(msg); -} diff --git a/vendor/deno.land/std@0.205.0/assert/assert_equals.ts b/vendor/deno.land/std@0.205.0/assert/assert_equals.ts deleted file mode 100644 index 4ed6e95..0000000 --- a/vendor/deno.land/std@0.205.0/assert/assert_equals.ts +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import { equal } from "./equal.ts"; -import { format } from "./_format.ts"; -import { AssertionError } from "./assertion_error.ts"; -import { red } from "../fmt/colors.ts"; -import { buildMessage, diff, diffstr } from "./_diff.ts"; -import { CAN_NOT_DISPLAY } from "./_constants.ts"; - -/** - * Make an assertion that `actual` and `expected` are equal, deeply. If not - * deeply equal, then throw. - * - * Type parameter can be specified to ensure values under comparison have the same type. - * - * @example - * ```ts - * import { assertEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_equals.ts"; - * - * Deno.test("example", function (): void { - * assertEquals("world", "world"); - * assertEquals({ hello: "world" }, { hello: "world" }); - * }); - * ``` - * - * Note: formatter option is experimental and may be removed in the future. - */ -export function assertEquals( - actual: T, - expected: T, - msg?: string, - options: { formatter?: (value: unknown) => string } = {}, -) { - if (equal(actual, expected)) { - return; - } - const { formatter = format } = options; - const msgSuffix = msg ? `: ${msg}` : "."; - let message = `Values are not equal${msgSuffix}`; - - const actualString = formatter(actual); - const expectedString = formatter(expected); - try { - const stringDiff = (typeof actual === "string") && - (typeof expected === "string"); - const diffResult = stringDiff - ? diffstr(actual as string, expected as string) - : diff(actualString.split("\n"), expectedString.split("\n")); - const diffMsg = buildMessage(diffResult, { stringDiff }).join("\n"); - message = `${message}\n${diffMsg}`; - } catch { - message = `${message}\n${red(CAN_NOT_DISPLAY)} + \n\n`; - } - throw new AssertionError(message); -} diff --git a/vendor/deno.land/std@0.205.0/assert/assert_false.ts b/vendor/deno.land/std@0.205.0/assert/assert_false.ts deleted file mode 100644 index cc8ce05..0000000 --- a/vendor/deno.land/std@0.205.0/assert/assert_false.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import { AssertionError } from "./assertion_error.ts"; - -type Falsy = false | 0 | 0n | "" | null | undefined; - -/** Make an assertion, error will be thrown if `expr` have truthy value. */ -export function assertFalse(expr: unknown, msg = ""): asserts expr is Falsy { - if (expr) { - throw new AssertionError(msg); - } -} diff --git a/vendor/deno.land/std@0.205.0/assert/assert_greater.ts b/vendor/deno.land/std@0.205.0/assert/assert_greater.ts deleted file mode 100644 index bac2a6a..0000000 --- a/vendor/deno.land/std@0.205.0/assert/assert_greater.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import { format } from "./_format.ts"; -import { AssertionError } from "./assertion_error.ts"; - -/** - * Make an assertion that `actual` is greater than `expected`. - * If not then throw. - */ -export function assertGreater(actual: T, expected: T, msg?: string) { - if (actual > expected) return; - - const actualString = format(actual); - const expectedString = format(expected); - throw new AssertionError(msg ?? `Expect ${actualString} > ${expectedString}`); -} diff --git a/vendor/deno.land/std@0.205.0/assert/assert_greater_or_equal.ts b/vendor/deno.land/std@0.205.0/assert/assert_greater_or_equal.ts deleted file mode 100644 index e738b83..0000000 --- a/vendor/deno.land/std@0.205.0/assert/assert_greater_or_equal.ts +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import { format } from "./_format.ts"; -import { AssertionError } from "./assertion_error.ts"; - -/** - * Make an assertion that `actual` is greater than or equal to `expected`. - * If not then throw. - */ -export function assertGreaterOrEqual(actual: T, expected: T, msg?: string) { - if (actual >= expected) return; - - const actualString = format(actual); - const expectedString = format(expected); - throw new AssertionError( - msg ?? `Expect ${actualString} >= ${expectedString}`, - ); -} diff --git a/vendor/deno.land/std@0.205.0/assert/assert_is_error.ts b/vendor/deno.land/std@0.205.0/assert/assert_is_error.ts deleted file mode 100644 index 33132b7..0000000 --- a/vendor/deno.land/std@0.205.0/assert/assert_is_error.ts +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import { AssertionError } from "./assertion_error.ts"; -import { stripColor } from "../fmt/colors.ts"; - -/** - * Make an assertion that `error` is an `Error`. - * If not then an error will be thrown. - * An error class and a string that should be included in the - * error message can also be asserted. - */ -export function assertIsError( - error: unknown, - // deno-lint-ignore no-explicit-any - ErrorClass?: new (...args: any[]) => E, - msgIncludes?: string, - msg?: string, -): asserts error is E { - const msgSuffix = msg ? `: ${msg}` : "."; - if (error instanceof Error === false) { - throw new AssertionError( - `Expected "error" to be an Error object${msgSuffix}}`, - ); - } - if (ErrorClass && !(error instanceof ErrorClass)) { - msg = `Expected error to be instance of "${ErrorClass.name}", but was "${ - typeof error === "object" ? error?.constructor?.name : "[not an object]" - }"${msgSuffix}`; - throw new AssertionError(msg); - } - if ( - msgIncludes && (!(error instanceof Error) || - !stripColor(error.message).includes(stripColor(msgIncludes))) - ) { - msg = `Expected error message to include ${ - JSON.stringify(msgIncludes) - }, but got ${ - error instanceof Error - ? JSON.stringify(error.message) - : '"[not an Error]"' // TODO(kt3k): show more useful information - }${msgSuffix}`; - throw new AssertionError(msg); - } -} diff --git a/vendor/deno.land/std@0.205.0/assert/assert_less.ts b/vendor/deno.land/std@0.205.0/assert/assert_less.ts deleted file mode 100644 index 7dce989..0000000 --- a/vendor/deno.land/std@0.205.0/assert/assert_less.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import { format } from "./_format.ts"; -import { AssertionError } from "./assertion_error.ts"; - -/** - * Make an assertion that `actual` is less than `expected`. - * If not then throw. - */ -export function assertLess(actual: T, expected: T, msg?: string) { - if (actual < expected) return; - - const actualString = format(actual); - const expectedString = format(expected); - throw new AssertionError(msg ?? `Expect ${actualString} < ${expectedString}`); -} diff --git a/vendor/deno.land/std@0.205.0/assert/assert_less_or_equal.ts b/vendor/deno.land/std@0.205.0/assert/assert_less_or_equal.ts deleted file mode 100644 index f1ca984..0000000 --- a/vendor/deno.land/std@0.205.0/assert/assert_less_or_equal.ts +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import { format } from "./_format.ts"; -import { AssertionError } from "./assertion_error.ts"; - -/** - * Make an assertion that `actual` is less than or equal to `expected`. - * If not then throw. - */ -export function assertLessOrEqual(actual: T, expected: T, msg?: string) { - if (actual <= expected) return; - - const actualString = format(actual); - const expectedString = format(expected); - throw new AssertionError( - msg ?? `Expect ${actualString} <= ${expectedString}`, - ); -} diff --git a/vendor/deno.land/std@0.205.0/assert/assert_match.ts b/vendor/deno.land/std@0.205.0/assert/assert_match.ts deleted file mode 100644 index 253f49b..0000000 --- a/vendor/deno.land/std@0.205.0/assert/assert_match.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import { AssertionError } from "./assertion_error.ts"; - -/** - * Make an assertion that `actual` match RegExp `expected`. If not - * then throw. - */ -export function assertMatch( - actual: string, - expected: RegExp, - msg?: string, -) { - if (!expected.test(actual)) { - const msgSuffix = msg ? `: ${msg}` : "."; - msg = `Expected actual: "${actual}" to match: "${expected}"${msgSuffix}`; - throw new AssertionError(msg); - } -} diff --git a/vendor/deno.land/std@0.205.0/assert/assert_not_equals.ts b/vendor/deno.land/std@0.205.0/assert/assert_not_equals.ts deleted file mode 100644 index 1777f65..0000000 --- a/vendor/deno.land/std@0.205.0/assert/assert_not_equals.ts +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import { equal } from "./equal.ts"; -import { AssertionError } from "./assertion_error.ts"; - -/** - * Make an assertion that `actual` and `expected` are not equal, deeply. - * If not then throw. - * - * Type parameter can be specified to ensure values under comparison have the same type. - * - * @example - * ```ts - * import { assertNotEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_not_equals.ts"; - * - * assertNotEquals(1, 2) - * ``` - */ -export function assertNotEquals(actual: T, expected: T, msg?: string) { - if (!equal(actual, expected)) { - return; - } - let actualString: string; - let expectedString: string; - try { - actualString = String(actual); - } catch { - actualString = "[Cannot display]"; - } - try { - expectedString = String(expected); - } catch { - expectedString = "[Cannot display]"; - } - const msgSuffix = msg ? `: ${msg}` : "."; - throw new AssertionError( - `Expected actual: ${actualString} not to be: ${expectedString}${msgSuffix}`, - ); -} diff --git a/vendor/deno.land/std@0.205.0/assert/assert_not_instance_of.ts b/vendor/deno.land/std@0.205.0/assert/assert_not_instance_of.ts deleted file mode 100644 index 1457113..0000000 --- a/vendor/deno.land/std@0.205.0/assert/assert_not_instance_of.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import { assertFalse } from "./assert_false.ts"; - -/** - * Make an assertion that `obj` is not an instance of `type`. - * If so, then throw. - */ -export function assertNotInstanceOf( - actual: A, - // deno-lint-ignore no-explicit-any - unexpectedType: new (...args: any[]) => T, - msg?: string, -): asserts actual is Exclude { - const msgSuffix = msg ? `: ${msg}` : "."; - msg = - `Expected object to not be an instance of "${typeof unexpectedType}"${msgSuffix}`; - assertFalse(actual instanceof unexpectedType, msg); -} diff --git a/vendor/deno.land/std@0.205.0/assert/assert_not_match.ts b/vendor/deno.land/std@0.205.0/assert/assert_not_match.ts deleted file mode 100644 index 42cc6bf..0000000 --- a/vendor/deno.land/std@0.205.0/assert/assert_not_match.ts +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import { AssertionError } from "./assertion_error.ts"; - -/** - * Make an assertion that `actual` not match RegExp `expected`. If match - * then throw. - */ -export function assertNotMatch( - actual: string, - expected: RegExp, - msg?: string, -) { - if (expected.test(actual)) { - const msgSuffix = msg ? `: ${msg}` : "."; - msg = - `Expected actual: "${actual}" to not match: "${expected}"${msgSuffix}`; - throw new AssertionError(msg); - } -} diff --git a/vendor/deno.land/std@0.205.0/assert/assert_not_strict_equals.ts b/vendor/deno.land/std@0.205.0/assert/assert_not_strict_equals.ts deleted file mode 100644 index 8676d6a..0000000 --- a/vendor/deno.land/std@0.205.0/assert/assert_not_strict_equals.ts +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import { AssertionError } from "./assertion_error.ts"; -import { format } from "./_format.ts"; - -/** - * Make an assertion that `actual` and `expected` are not strictly equal. - * If the values are strictly equal then throw. - * - * ```ts - * import { assertNotStrictEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_not_strict_equals.ts"; - * - * assertNotStrictEquals(1, 1) - * ``` - */ -export function assertNotStrictEquals( - actual: T, - expected: T, - msg?: string, -) { - if (!Object.is(actual, expected)) { - return; - } - - const msgSuffix = msg ? `: ${msg}` : "."; - throw new AssertionError( - `Expected "actual" to be strictly unequal to: ${ - format(actual) - }${msgSuffix}\n`, - ); -} diff --git a/vendor/deno.land/std@0.205.0/assert/assert_rejects.ts b/vendor/deno.land/std@0.205.0/assert/assert_rejects.ts deleted file mode 100644 index d55d834..0000000 --- a/vendor/deno.land/std@0.205.0/assert/assert_rejects.ts +++ /dev/null @@ -1,144 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import { AssertionError } from "./assertion_error.ts"; -import { assertIsError } from "./assert_is_error.ts"; - -/** - * Executes a function which returns a promise, expecting it to reject. - * - * @example - * ```ts - * import { assertRejects } from "https://deno.land/std@$STD_VERSION/assert/assert_rejects.ts"; - * - * Deno.test("doesThrow", async function () { - * await assertRejects( - * async () => { - * throw new TypeError("hello world!"); - * }, - * ); - * await assertRejects( - * async () => { - * return Promise.reject(new Error()); - * }, - * ); - * }); - * - * // This test will not pass. - * Deno.test("fails", async function () { - * await assertRejects( - * async () => { - * console.log("Hello world"); - * }, - * ); - * }); - * ``` - */ -export function assertRejects( - fn: () => PromiseLike, - msg?: string, -): Promise; -/** - * Executes a function which returns a promise, expecting it to reject. - * If it does not, then it throws. An error class and a string that should be - * included in the error message can also be asserted. - * - * @example - * ```ts - * import { assertRejects } from "https://deno.land/std@$STD_VERSION/assert/assert_rejects.ts"; - * - * Deno.test("doesThrow", async function () { - * await assertRejects(async () => { - * throw new TypeError("hello world!"); - * }, TypeError); - * await assertRejects( - * async () => { - * throw new TypeError("hello world!"); - * }, - * TypeError, - * "hello", - * ); - * }); - * - * // This test will not pass. - * Deno.test("fails", async function () { - * await assertRejects( - * async () => { - * console.log("Hello world"); - * }, - * ); - * }); - * ``` - */ -export function assertRejects( - fn: () => PromiseLike, - // deno-lint-ignore no-explicit-any - ErrorClass: new (...args: any[]) => E, - msgIncludes?: string, - msg?: string, -): Promise; -export async function assertRejects( - fn: () => PromiseLike, - errorClassOrMsg?: - // deno-lint-ignore no-explicit-any - | (new (...args: any[]) => E) - | string, - msgIncludesOrMsg?: string, - msg?: string, -): Promise { - // deno-lint-ignore no-explicit-any - let ErrorClass: (new (...args: any[]) => E) | undefined = undefined; - let msgIncludes: string | undefined = undefined; - let err; - - if (typeof errorClassOrMsg !== "string") { - if ( - errorClassOrMsg === undefined || - errorClassOrMsg.prototype instanceof Error || - errorClassOrMsg.prototype === Error.prototype - ) { - // deno-lint-ignore no-explicit-any - ErrorClass = errorClassOrMsg as new (...args: any[]) => E; - msgIncludes = msgIncludesOrMsg; - } - } else { - msg = errorClassOrMsg; - } - let doesThrow = false; - let isPromiseReturned = false; - const msgSuffix = msg ? `: ${msg}` : "."; - try { - const possiblePromise = fn(); - if ( - possiblePromise && - typeof possiblePromise === "object" && - typeof possiblePromise.then === "function" - ) { - isPromiseReturned = true; - await possiblePromise; - } - } catch (error) { - if (!isPromiseReturned) { - throw new AssertionError( - `Function throws when expected to reject${msgSuffix}`, - ); - } - if (ErrorClass) { - if (error instanceof Error === false) { - throw new AssertionError(`A non-Error object was rejected${msgSuffix}`); - } - assertIsError( - error, - ErrorClass, - msgIncludes, - msg, - ); - } - err = error; - doesThrow = true; - } - if (!doesThrow) { - throw new AssertionError( - `Expected function to reject${msgSuffix}`, - ); - } - return err; -} diff --git a/vendor/deno.land/std@0.205.0/assert/assert_strict_equals.ts b/vendor/deno.land/std@0.205.0/assert/assert_strict_equals.ts deleted file mode 100644 index 012882a..0000000 --- a/vendor/deno.land/std@0.205.0/assert/assert_strict_equals.ts +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import { format } from "./_format.ts"; -import { AssertionError } from "./assertion_error.ts"; -import { buildMessage, diff, diffstr } from "./_diff.ts"; -import { CAN_NOT_DISPLAY } from "./_constants.ts"; -import { red } from "../fmt/colors.ts"; - -/** - * Make an assertion that `actual` and `expected` are strictly equal. If - * not then throw. - * - * @example - * ```ts - * import { assertStrictEquals } from "https://deno.land/std@$STD_VERSION/assert/assert_strict_equals.ts"; - * - * Deno.test("isStrictlyEqual", function (): void { - * const a = {}; - * const b = a; - * assertStrictEquals(a, b); - * }); - * - * // This test fails - * Deno.test("isNotStrictlyEqual", function (): void { - * const a = {}; - * const b = {}; - * assertStrictEquals(a, b); - * }); - * ``` - */ -export function assertStrictEquals( - actual: unknown, - expected: T, - msg?: string, -): asserts actual is T { - if (Object.is(actual, expected)) { - return; - } - - const msgSuffix = msg ? `: ${msg}` : "."; - let message: string; - - const actualString = format(actual); - const expectedString = format(expected); - - if (actualString === expectedString) { - const withOffset = actualString - .split("\n") - .map((l) => ` ${l}`) - .join("\n"); - message = - `Values have the same structure but are not reference-equal${msgSuffix}\n\n${ - red(withOffset) - }\n`; - } else { - try { - const stringDiff = (typeof actual === "string") && - (typeof expected === "string"); - const diffResult = stringDiff - ? diffstr(actual as string, expected as string) - : diff(actualString.split("\n"), expectedString.split("\n")); - const diffMsg = buildMessage(diffResult, { stringDiff }).join("\n"); - message = `Values are not strictly equal${msgSuffix}\n${diffMsg}`; - } catch { - message = `\n${red(CAN_NOT_DISPLAY)} + \n\n`; - } - } - - throw new AssertionError(message); -} diff --git a/vendor/deno.land/std@0.205.0/assert/assert_string_includes.ts b/vendor/deno.land/std@0.205.0/assert/assert_string_includes.ts deleted file mode 100644 index ec4c912..0000000 --- a/vendor/deno.land/std@0.205.0/assert/assert_string_includes.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import { AssertionError } from "./assertion_error.ts"; - -/** - * Make an assertion that actual includes expected. If not - * then throw. - */ -export function assertStringIncludes( - actual: string, - expected: string, - msg?: string, -) { - if (!actual.includes(expected)) { - const msgSuffix = msg ? `: ${msg}` : "."; - msg = `Expected actual: "${actual}" to contain: "${expected}"${msgSuffix}`; - throw new AssertionError(msg); - } -} diff --git a/vendor/deno.land/std@0.205.0/assert/assert_throws.ts b/vendor/deno.land/std@0.205.0/assert/assert_throws.ts deleted file mode 100644 index c47aba9..0000000 --- a/vendor/deno.land/std@0.205.0/assert/assert_throws.ts +++ /dev/null @@ -1,121 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import { assertIsError } from "./assert_is_error.ts"; -import { AssertionError } from "./assertion_error.ts"; - -/** - * Executes a function, expecting it to throw. If it does not, then it - * throws. - * - * @example - * ```ts - * import { assertThrows } from "https://deno.land/std@$STD_VERSION/assert/assert_throws.ts"; - * - * Deno.test("doesThrow", function (): void { - * assertThrows((): void => { - * throw new TypeError("hello world!"); - * }); - * }); - * - * // This test will not pass. - * Deno.test("fails", function (): void { - * assertThrows((): void => { - * console.log("Hello world"); - * }); - * }); - * ``` - */ -export function assertThrows( - fn: () => unknown, - msg?: string, -): unknown; -/** - * Executes a function, expecting it to throw. If it does not, then it - * throws. An error class and a string that should be included in the - * error message can also be asserted. - * - * @example - * ```ts - * import { assertThrows } from "https://deno.land/std@$STD_VERSION/assert/assert_throws.ts"; - * - * Deno.test("doesThrow", function (): void { - * assertThrows((): void => { - * throw new TypeError("hello world!"); - * }, TypeError); - * assertThrows( - * (): void => { - * throw new TypeError("hello world!"); - * }, - * TypeError, - * "hello", - * ); - * }); - * - * // This test will not pass. - * Deno.test("fails", function (): void { - * assertThrows((): void => { - * console.log("Hello world"); - * }); - * }); - * ``` - */ -export function assertThrows( - fn: () => unknown, - // deno-lint-ignore no-explicit-any - ErrorClass: new (...args: any[]) => E, - msgIncludes?: string, - msg?: string, -): E; -export function assertThrows( - fn: () => unknown, - errorClassOrMsg?: - // deno-lint-ignore no-explicit-any - | (new (...args: any[]) => E) - | string, - msgIncludesOrMsg?: string, - msg?: string, -): E | Error | unknown { - // deno-lint-ignore no-explicit-any - let ErrorClass: (new (...args: any[]) => E) | undefined = undefined; - let msgIncludes: string | undefined = undefined; - let err; - - if (typeof errorClassOrMsg !== "string") { - if ( - errorClassOrMsg === undefined || - errorClassOrMsg.prototype instanceof Error || - errorClassOrMsg.prototype === Error.prototype - ) { - // deno-lint-ignore no-explicit-any - ErrorClass = errorClassOrMsg as new (...args: any[]) => E; - msgIncludes = msgIncludesOrMsg; - } else { - msg = msgIncludesOrMsg; - } - } else { - msg = errorClassOrMsg; - } - let doesThrow = false; - const msgSuffix = msg ? `: ${msg}` : "."; - try { - fn(); - } catch (error) { - if (ErrorClass) { - if (error instanceof Error === false) { - throw new AssertionError(`A non-Error object was thrown${msgSuffix}`); - } - assertIsError( - error, - ErrorClass, - msgIncludes, - msg, - ); - } - err = error; - doesThrow = true; - } - if (!doesThrow) { - msg = `Expected function to throw${msgSuffix}`; - throw new AssertionError(msg); - } - return err; -} diff --git a/vendor/deno.land/std@0.205.0/assert/assertion_error.ts b/vendor/deno.land/std@0.205.0/assert/assertion_error.ts deleted file mode 100644 index feecc9e..0000000 --- a/vendor/deno.land/std@0.205.0/assert/assertion_error.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -export class AssertionError extends Error { - override name = "AssertionError"; - constructor(message: string) { - super(message); - } -} diff --git a/vendor/deno.land/std@0.205.0/assert/equal.ts b/vendor/deno.land/std@0.205.0/assert/equal.ts deleted file mode 100644 index 288471d..0000000 --- a/vendor/deno.land/std@0.205.0/assert/equal.ts +++ /dev/null @@ -1,111 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -function isKeyedCollection(x: unknown): x is Set { - return [Symbol.iterator, "size"].every((k) => k in (x as Set)); -} - -function constructorsEqual(a: object, b: object) { - return a.constructor === b.constructor || - a.constructor === Object && !b.constructor || - !a.constructor && b.constructor === Object; -} - -/** - * Deep equality comparison used in assertions - * @param c actual value - * @param d expected value - */ -export function equal(c: unknown, d: unknown): boolean { - const seen = new Map(); - return (function compare(a: unknown, b: unknown): boolean { - // Have to render RegExp & Date for string comparison - // unless it's mistreated as object - if ( - a && - b && - ((a instanceof RegExp && b instanceof RegExp) || - (a instanceof URL && b instanceof URL)) - ) { - return String(a) === String(b); - } - if (a instanceof Date && b instanceof Date) { - const aTime = a.getTime(); - const bTime = b.getTime(); - // Check for NaN equality manually since NaN is not - // equal to itself. - if (Number.isNaN(aTime) && Number.isNaN(bTime)) { - return true; - } - return aTime === bTime; - } - if (typeof a === "number" && typeof b === "number") { - return Number.isNaN(a) && Number.isNaN(b) || a === b; - } - if (Object.is(a, b)) { - return true; - } - if (a && typeof a === "object" && b && typeof b === "object") { - if (a && b && !constructorsEqual(a, b)) { - return false; - } - if (a instanceof WeakMap || b instanceof WeakMap) { - if (!(a instanceof WeakMap && b instanceof WeakMap)) return false; - throw new TypeError("cannot compare WeakMap instances"); - } - if (a instanceof WeakSet || b instanceof WeakSet) { - if (!(a instanceof WeakSet && b instanceof WeakSet)) return false; - throw new TypeError("cannot compare WeakSet instances"); - } - if (seen.get(a) === b) { - return true; - } - if (Object.keys(a || {}).length !== Object.keys(b || {}).length) { - return false; - } - seen.set(a, b); - if (isKeyedCollection(a) && isKeyedCollection(b)) { - if (a.size !== b.size) { - return false; - } - - let unmatchedEntries = a.size; - - for (const [aKey, aValue] of a.entries()) { - for (const [bKey, bValue] of b.entries()) { - /* Given that Map keys can be references, we need - * to ensure that they are also deeply equal */ - if ( - (aKey === aValue && bKey === bValue && compare(aKey, bKey)) || - (compare(aKey, bKey) && compare(aValue, bValue)) - ) { - unmatchedEntries--; - break; - } - } - } - - return unmatchedEntries === 0; - } - const merged = { ...a, ...b }; - for ( - const key of [ - ...Object.getOwnPropertyNames(merged), - ...Object.getOwnPropertySymbols(merged), - ] - ) { - type Key = keyof typeof merged; - if (!compare(a && a[key as Key], b && b[key as Key])) { - return false; - } - if (((key in a) && (!(key in b))) || ((key in b) && (!(key in a)))) { - return false; - } - } - if (a instanceof WeakRef || b instanceof WeakRef) { - if (!(a instanceof WeakRef && b instanceof WeakRef)) return false; - return compare(a.deref(), b.deref()); - } - return true; - } - return false; - })(c, d); -} diff --git a/vendor/deno.land/std@0.205.0/assert/fail.ts b/vendor/deno.land/std@0.205.0/assert/fail.ts deleted file mode 100644 index 6eef3fe..0000000 --- a/vendor/deno.land/std@0.205.0/assert/fail.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import { assert } from "./assert.ts"; - -/** - * Forcefully throws a failed assertion - */ -export function fail(msg?: string): never { - const msgSuffix = msg ? `: ${msg}` : "."; - assert(false, `Failed assertion${msgSuffix}`); -} diff --git a/vendor/deno.land/std@0.205.0/assert/mod.ts b/vendor/deno.land/std@0.205.0/assert/mod.ts deleted file mode 100644 index 3bd767c..0000000 --- a/vendor/deno.land/std@0.205.0/assert/mod.ts +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. - -/** A library of assertion functions. - * If the assertion is false an `AssertionError` will be thrown which will - * result in pretty-printed diff of failing assertion. - * - * This module is browser compatible, but do not rely on good formatting of - * values for AssertionError messages in browsers. - * - * @module - */ - -export * from "./assert_almost_equals.ts"; -export * from "./assert_array_includes.ts"; -export * from "./assert_equals.ts"; -export * from "./assert_exists.ts"; -export * from "./assert_false.ts"; -export * from "./assert_greater_or_equal.ts"; -export * from "./assert_greater.ts"; -export * from "./assert_instance_of.ts"; -export * from "./assert_is_error.ts"; -export * from "./assert_less_or_equal.ts"; -export * from "./assert_less.ts"; -export * from "./assert_match.ts"; -export * from "./assert_not_equals.ts"; -export * from "./assert_not_instance_of.ts"; -export * from "./assert_not_match.ts"; -export * from "./assert_not_strict_equals.ts"; -export * from "./assert_object_match.ts"; -export * from "./assert_rejects.ts"; -export * from "./assert_strict_equals.ts"; -export * from "./assert_string_includes.ts"; -export * from "./assert_throws.ts"; -export * from "./assert.ts"; -export * from "./assertion_error.ts"; -export * from "./equal.ts"; -export * from "./fail.ts"; -export * from "./unimplemented.ts"; -export * from "./unreachable.ts"; diff --git a/vendor/deno.land/std@0.205.0/assert/unimplemented.ts b/vendor/deno.land/std@0.205.0/assert/unimplemented.ts deleted file mode 100644 index 6c62e4f..0000000 --- a/vendor/deno.land/std@0.205.0/assert/unimplemented.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import { AssertionError } from "./assertion_error.ts"; - -/** Use this to stub out methods that will throw when invoked. */ -export function unimplemented(msg?: string): never { - const msgSuffix = msg ? `: ${msg}` : "."; - throw new AssertionError(`Unimplemented${msgSuffix}`); -} diff --git a/vendor/deno.land/std@0.205.0/assert/unreachable.ts b/vendor/deno.land/std@0.205.0/assert/unreachable.ts deleted file mode 100644 index d9f36ef..0000000 --- a/vendor/deno.land/std@0.205.0/assert/unreachable.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -import { AssertionError } from "./assertion_error.ts"; - -/** Use this to assert unreachable code. */ -export function unreachable(): never { - throw new AssertionError("unreachable"); -} diff --git a/vendor/deno.land/std@0.205.0/fmt/colors.ts b/vendor/deno.land/std@0.205.0/fmt/colors.ts deleted file mode 100644 index 405e02a..0000000 --- a/vendor/deno.land/std@0.205.0/fmt/colors.ts +++ /dev/null @@ -1,578 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -// This module is browser compatible. -// A module to print ANSI terminal colors. Inspired by chalk, kleur, and colors -// on npm. - -/** - * String formatters and utilities for dealing with ANSI color codes. - * - * This module is browser compatible. - * - * This module supports `NO_COLOR` environmental variable disabling any coloring - * if `NO_COLOR` is set. - * - * @example - * ```typescript - * import { - * bgBlue, - * bgRgb24, - * bgRgb8, - * bold, - * italic, - * red, - * rgb24, - * rgb8, - * } from "https://deno.land/std@$STD_VERSION/fmt/colors.ts"; - * - * console.log(bgBlue(italic(red(bold("Hello, World!"))))); - * - * // also supports 8bit colors - * - * console.log(rgb8("Hello, World!", 42)); - * - * console.log(bgRgb8("Hello, World!", 42)); - * - * // and 24bit rgb - * - * console.log(rgb24("Hello, World!", { - * r: 41, - * g: 42, - * b: 43, - * })); - * - * console.log(bgRgb24("Hello, World!", { - * r: 41, - * g: 42, - * b: 43, - * })); - * ``` - * - * @module - */ - -// deno-lint-ignore no-explicit-any -const { Deno } = globalThis as any; -const noColor = typeof Deno?.noColor === "boolean" - ? Deno.noColor as boolean - : false; - -interface Code { - open: string; - close: string; - regexp: RegExp; -} - -/** RGB 8-bits per channel. Each in range `0->255` or `0x00->0xff` */ -interface Rgb { - r: number; - g: number; - b: number; -} - -let enabled = !noColor; - -/** - * Set changing text color to enabled or disabled - * @param value - */ -export function setColorEnabled(value: boolean) { - if (Deno?.noColor) { - return; - } - - enabled = value; -} - -/** Get whether text color change is enabled or disabled. */ -export function getColorEnabled(): boolean { - return enabled; -} - -/** - * Builds color code - * @param open - * @param close - */ -function code(open: number[], close: number): Code { - return { - open: `\x1b[${open.join(";")}m`, - close: `\x1b[${close}m`, - regexp: new RegExp(`\\x1b\\[${close}m`, "g"), - }; -} - -/** - * Applies color and background based on color code and its associated text - * @param str text to apply color settings to - * @param code color code to apply - */ -function run(str: string, code: Code): string { - return enabled - ? `${code.open}${str.replace(code.regexp, code.open)}${code.close}` - : str; -} - -/** - * Reset the text modified - * @param str text to reset - */ -export function reset(str: string): string { - return run(str, code([0], 0)); -} - -/** - * Make the text bold. - * @param str text to make bold - */ -export function bold(str: string): string { - return run(str, code([1], 22)); -} - -/** - * The text emits only a small amount of light. - * @param str text to dim - */ -export function dim(str: string): string { - return run(str, code([2], 22)); -} - -/** - * Make the text italic. - * @param str text to make italic - */ -export function italic(str: string): string { - return run(str, code([3], 23)); -} - -/** - * Make the text underline. - * @param str text to underline - */ -export function underline(str: string): string { - return run(str, code([4], 24)); -} - -/** - * Invert background color and text color. - * @param str text to invert its color - */ -export function inverse(str: string): string { - return run(str, code([7], 27)); -} - -/** - * Make the text hidden. - * @param str text to hide - */ -export function hidden(str: string): string { - return run(str, code([8], 28)); -} - -/** - * Put horizontal line through the center of the text. - * @param str text to strike through - */ -export function strikethrough(str: string): string { - return run(str, code([9], 29)); -} - -/** - * Set text color to black. - * @param str text to make black - */ -export function black(str: string): string { - return run(str, code([30], 39)); -} - -/** - * Set text color to red. - * @param str text to make red - */ -export function red(str: string): string { - return run(str, code([31], 39)); -} - -/** - * Set text color to green. - * @param str text to make green - */ -export function green(str: string): string { - return run(str, code([32], 39)); -} - -/** - * Set text color to yellow. - * @param str text to make yellow - */ -export function yellow(str: string): string { - return run(str, code([33], 39)); -} - -/** - * Set text color to blue. - * @param str text to make blue - */ -export function blue(str: string): string { - return run(str, code([34], 39)); -} - -/** - * Set text color to magenta. - * @param str text to make magenta - */ -export function magenta(str: string): string { - return run(str, code([35], 39)); -} - -/** - * Set text color to cyan. - * @param str text to make cyan - */ -export function cyan(str: string): string { - return run(str, code([36], 39)); -} - -/** - * Set text color to white. - * @param str text to make white - */ -export function white(str: string): string { - return run(str, code([37], 39)); -} - -/** - * Set text color to gray. - * @param str text to make gray - */ -export function gray(str: string): string { - return brightBlack(str); -} - -/** - * Set text color to bright black. - * @param str text to make bright-black - */ -export function brightBlack(str: string): string { - return run(str, code([90], 39)); -} - -/** - * Set text color to bright red. - * @param str text to make bright-red - */ -export function brightRed(str: string): string { - return run(str, code([91], 39)); -} - -/** - * Set text color to bright green. - * @param str text to make bright-green - */ -export function brightGreen(str: string): string { - return run(str, code([92], 39)); -} - -/** - * Set text color to bright yellow. - * @param str text to make bright-yellow - */ -export function brightYellow(str: string): string { - return run(str, code([93], 39)); -} - -/** - * Set text color to bright blue. - * @param str text to make bright-blue - */ -export function brightBlue(str: string): string { - return run(str, code([94], 39)); -} - -/** - * Set text color to bright magenta. - * @param str text to make bright-magenta - */ -export function brightMagenta(str: string): string { - return run(str, code([95], 39)); -} - -/** - * Set text color to bright cyan. - * @param str text to make bright-cyan - */ -export function brightCyan(str: string): string { - return run(str, code([96], 39)); -} - -/** - * Set text color to bright white. - * @param str text to make bright-white - */ -export function brightWhite(str: string): string { - return run(str, code([97], 39)); -} - -/** - * Set background color to black. - * @param str text to make its background black - */ -export function bgBlack(str: string): string { - return run(str, code([40], 49)); -} - -/** - * Set background color to red. - * @param str text to make its background red - */ -export function bgRed(str: string): string { - return run(str, code([41], 49)); -} - -/** - * Set background color to green. - * @param str text to make its background green - */ -export function bgGreen(str: string): string { - return run(str, code([42], 49)); -} - -/** - * Set background color to yellow. - * @param str text to make its background yellow - */ -export function bgYellow(str: string): string { - return run(str, code([43], 49)); -} - -/** - * Set background color to blue. - * @param str text to make its background blue - */ -export function bgBlue(str: string): string { - return run(str, code([44], 49)); -} - -/** - * Set background color to magenta. - * @param str text to make its background magenta - */ -export function bgMagenta(str: string): string { - return run(str, code([45], 49)); -} - -/** - * Set background color to cyan. - * @param str text to make its background cyan - */ -export function bgCyan(str: string): string { - return run(str, code([46], 49)); -} - -/** - * Set background color to white. - * @param str text to make its background white - */ -export function bgWhite(str: string): string { - return run(str, code([47], 49)); -} - -/** - * Set background color to bright black. - * @param str text to make its background bright-black - */ -export function bgBrightBlack(str: string): string { - return run(str, code([100], 49)); -} - -/** - * Set background color to bright red. - * @param str text to make its background bright-red - */ -export function bgBrightRed(str: string): string { - return run(str, code([101], 49)); -} - -/** - * Set background color to bright green. - * @param str text to make its background bright-green - */ -export function bgBrightGreen(str: string): string { - return run(str, code([102], 49)); -} - -/** - * Set background color to bright yellow. - * @param str text to make its background bright-yellow - */ -export function bgBrightYellow(str: string): string { - return run(str, code([103], 49)); -} - -/** - * Set background color to bright blue. - * @param str text to make its background bright-blue - */ -export function bgBrightBlue(str: string): string { - return run(str, code([104], 49)); -} - -/** - * Set background color to bright magenta. - * @param str text to make its background bright-magenta - */ -export function bgBrightMagenta(str: string): string { - return run(str, code([105], 49)); -} - -/** - * Set background color to bright cyan. - * @param str text to make its background bright-cyan - */ -export function bgBrightCyan(str: string): string { - return run(str, code([106], 49)); -} - -/** - * Set background color to bright white. - * @param str text to make its background bright-white - */ -export function bgBrightWhite(str: string): string { - return run(str, code([107], 49)); -} - -/* Special Color Sequences */ - -/** - * Clam and truncate color codes - * @param n - * @param max number to truncate to - * @param min number to truncate from - */ -function clampAndTruncate(n: number, max = 255, min = 0): number { - return Math.trunc(Math.max(Math.min(n, max), min)); -} - -/** - * Set text color using paletted 8bit colors. - * https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit - * @param str text color to apply paletted 8bit colors to - * @param color code - */ -export function rgb8(str: string, color: number): string { - return run(str, code([38, 5, clampAndTruncate(color)], 39)); -} - -/** - * Set background color using paletted 8bit colors. - * https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit - * @param str text color to apply paletted 8bit background colors to - * @param color code - */ -export function bgRgb8(str: string, color: number): string { - return run(str, code([48, 5, clampAndTruncate(color)], 49)); -} - -/** - * Set text color using 24bit rgb. - * `color` can be a number in range `0x000000` to `0xffffff` or - * an `Rgb`. - * - * To produce the color magenta: - * - * ```ts - * import { rgb24 } from "https://deno.land/std@$STD_VERSION/fmt/colors.ts"; - * rgb24("foo", 0xff00ff); - * rgb24("foo", {r: 255, g: 0, b: 255}); - * ``` - * @param str text color to apply 24bit rgb to - * @param color code - */ -export function rgb24(str: string, color: number | Rgb): string { - if (typeof color === "number") { - return run( - str, - code( - [38, 2, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff], - 39, - ), - ); - } - return run( - str, - code( - [ - 38, - 2, - clampAndTruncate(color.r), - clampAndTruncate(color.g), - clampAndTruncate(color.b), - ], - 39, - ), - ); -} - -/** - * Set background color using 24bit rgb. - * `color` can be a number in range `0x000000` to `0xffffff` or - * an `Rgb`. - * - * To produce the color magenta: - * - * ```ts - * import { bgRgb24 } from "https://deno.land/std@$STD_VERSION/fmt/colors.ts"; - * bgRgb24("foo", 0xff00ff); - * bgRgb24("foo", {r: 255, g: 0, b: 255}); - * ``` - * @param str text color to apply 24bit rgb to - * @param color code - */ -export function bgRgb24(str: string, color: number | Rgb): string { - if (typeof color === "number") { - return run( - str, - code( - [48, 2, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff], - 49, - ), - ); - } - return run( - str, - code( - [ - 48, - 2, - clampAndTruncate(color.r), - clampAndTruncate(color.g), - clampAndTruncate(color.b), - ], - 49, - ), - ); -} - -// https://github.com/chalk/ansi-regex/blob/02fa893d619d3da85411acc8fd4e2eea0e95a9d9/index.js -const ANSI_PATTERN = new RegExp( - [ - "[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)", - "(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TXZcf-nq-uy=><~]))", - ].join("|"), - "g", -); - -/** - * @deprecated (will be removed in 1.0.0) Use `stripAnsiCode` instead. - * - * Remove ANSI escape codes from the string. - * @param string to remove ANSI escape codes from - */ -export const stripColor = stripAnsiCode; - -/** - * Remove ANSI escape codes from the string. - * @param string to remove ANSI escape codes from - */ -export function stripAnsiCode(string: string): string { - return string.replace(ANSI_PATTERN, ""); -} diff --git a/vendor/deno.land/x/code_block_writer@12.0.0/mod.ts b/vendor/deno.land/x/code_block_writer@12.0.0/mod.ts deleted file mode 100644 index a161972..0000000 --- a/vendor/deno.land/x/code_block_writer@12.0.0/mod.ts +++ /dev/null @@ -1,997 +0,0 @@ -import { escapeForWithinString, getStringFromStrOrFunc } from "./utils/string_utils.ts"; - -/** @internal */ -enum CommentChar { - Line, - Star, -} - -/** - * Options for the writer. - */ -export interface Options { - /** - * Newline character. - * @remarks Defaults to \n. - */ - newLine: "\n" | "\r\n"; - /** - * Number of spaces to indent when `useTabs` is false. - * @remarks Defaults to 4. - */ - indentNumberOfSpaces: number; - /** - * Whether to use tabs (true) or spaces (false). - * @remarks Defaults to false. - */ - useTabs: boolean; - /** - * Whether to use a single quote (true) or double quote (false). - * @remarks Defaults to false. - */ - useSingleQuote: boolean; -} - -// Using the char codes is a performance improvement (about 5.5% faster when writing because it eliminates additional string allocations). -const CHARS = { - BACK_SLASH: "\\".charCodeAt(0), - FORWARD_SLASH: "/".charCodeAt(0), - NEW_LINE: "\n".charCodeAt(0), - CARRIAGE_RETURN: "\r".charCodeAt(0), - ASTERISK: "*".charCodeAt(0), - DOUBLE_QUOTE: "\"".charCodeAt(0), - SINGLE_QUOTE: "'".charCodeAt(0), - BACK_TICK: "`".charCodeAt(0), - OPEN_BRACE: "{".charCodeAt(0), - CLOSE_BRACE: "}".charCodeAt(0), - DOLLAR_SIGN: "$".charCodeAt(0), - SPACE: " ".charCodeAt(0), - TAB: "\t".charCodeAt(0), -}; -const isCharToHandle = new Set([ - CHARS.BACK_SLASH, - CHARS.FORWARD_SLASH, - CHARS.NEW_LINE, - CHARS.CARRIAGE_RETURN, - CHARS.ASTERISK, - CHARS.DOUBLE_QUOTE, - CHARS.SINGLE_QUOTE, - CHARS.BACK_TICK, - CHARS.OPEN_BRACE, - CHARS.CLOSE_BRACE, -]); - -/** - * Code writer that assists with formatting and visualizing blocks of JavaScript or TypeScript code. - */ -export default class CodeBlockWriter { - /** @internal */ - private readonly _indentationText: string; - /** @internal */ - private readonly _newLine: "\n" | "\r\n"; - /** @internal */ - private readonly _useTabs: boolean; - /** @internal */ - private readonly _quoteChar: string; - /** @internal */ - private readonly _indentNumberOfSpaces: number; - /** @internal */ - private _currentIndentation = 0; - /** @internal */ - private _queuedIndentation: number | undefined; - /** @internal */ - private _queuedOnlyIfNotBlock: true | undefined; - /** @internal */ - private _length = 0; - /** @internal */ - private _newLineOnNextWrite = false; - /** @internal */ - private _currentCommentChar: CommentChar | undefined = undefined; - /** @internal */ - private _stringCharStack: number[] = []; - /** @internal */ - private _isInRegEx = false; - /** @internal */ - private _isOnFirstLineOfBlock = true; - // An array of strings is used rather than a single string because it was - // found to be ~11x faster when printing a 10K line file (~11s to ~1s). - /** @internal */ - private _texts: string[] = []; - - /** - * Constructor. - * @param opts - Options for the writer. - */ - constructor(opts: Partial = {}) { - this._newLine = opts.newLine || "\n"; - this._useTabs = opts.useTabs || false; - this._indentNumberOfSpaces = opts.indentNumberOfSpaces || 4; - this._indentationText = getIndentationText(this._useTabs, this._indentNumberOfSpaces); - this._quoteChar = opts.useSingleQuote ? "'" : `"`; - } - - /** - * Gets the options. - */ - getOptions(): Options { - return { - indentNumberOfSpaces: this._indentNumberOfSpaces, - newLine: this._newLine, - useTabs: this._useTabs, - useSingleQuote: this._quoteChar === "'", - }; - } - - /** - * Queues the indentation level for the next lines written. - * @param indentationLevel - Indentation level to queue. - */ - queueIndentationLevel(indentationLevel: number): this; - /** - * Queues the indentation level for the next lines written using the provided indentation text. - * @param whitespaceText - Gets the indentation level from the indentation text. - */ - queueIndentationLevel(whitespaceText: string): this; - /** @internal */ - queueIndentationLevel(countOrText: string | number): this; - queueIndentationLevel(countOrText: string | number) { - this._queuedIndentation = this._getIndentationLevelFromArg(countOrText); - this._queuedOnlyIfNotBlock = undefined; - return this; - } - - /** - * Writes the text within the provided action with hanging indentation. - * @param action - Action to perform with hanging indentation. - */ - hangingIndent(action: () => void): this { - return this._withResetIndentation(() => this.queueIndentationLevel(this.getIndentationLevel() + 1), action); - } - - /** - * Writes the text within the provided action with hanging indentation unless writing a block. - * @param action - Action to perform with hanging indentation unless a block is written. - */ - hangingIndentUnlessBlock(action: () => void): this { - return this._withResetIndentation(() => { - this.queueIndentationLevel(this.getIndentationLevel() + 1); - this._queuedOnlyIfNotBlock = true; - }, action); - } - - /** - * Sets the current indentation level. - * @param indentationLevel - Indentation level to be at. - */ - setIndentationLevel(indentationLevel: number): this; - /** - * Sets the current indentation using the provided indentation text. - * @param whitespaceText - Gets the indentation level from the indentation text. - */ - setIndentationLevel(whitespaceText: string): this; - /** @internal */ - setIndentationLevel(countOrText: string | number): this; - setIndentationLevel(countOrText: string | number) { - this._currentIndentation = this._getIndentationLevelFromArg(countOrText); - return this; - } - - /** - * Sets the indentation level within the provided action and restores the writer's indentation - * state afterwards. - * @remarks Restores the writer's state after the action. - * @param indentationLevel - Indentation level to set. - * @param action - Action to perform with the indentation. - */ - withIndentationLevel(indentationLevel: number, action: () => void): this; - /** - * Sets the indentation level with the provided indentation text within the provided action - * and restores the writer's indentation state afterwards. - * @param whitespaceText - Gets the indentation level from the indentation text. - * @param action - Action to perform with the indentation. - */ - withIndentationLevel(whitespaceText: string, action: () => void): this; - withIndentationLevel(countOrText: string | number, action: () => void) { - return this._withResetIndentation(() => this.setIndentationLevel(countOrText), action); - } - - /** @internal */ - private _withResetIndentation(setStateAction: () => void, writeAction: () => void) { - const previousState = this._getIndentationState(); - setStateAction(); - try { - writeAction(); - } finally { - this._setIndentationState(previousState); - } - return this; - } - - /** - * Gets the current indentation level. - */ - getIndentationLevel(): number { - return this._currentIndentation; - } - - /** - * Writes a block using braces. - * @param block - Write using the writer within this block. - */ - block(block?: () => void): this { - this._newLineIfNewLineOnNextWrite(); - if (this.getLength() > 0 && !this.isLastNewLine()) { - this.spaceIfLastNot(); - } - this.inlineBlock(block); - this._newLineOnNextWrite = true; - return this; - } - - /** - * Writes an inline block with braces. - * @param block - Write using the writer within this block. - */ - inlineBlock(block?: () => void): this { - this._newLineIfNewLineOnNextWrite(); - this.write("{"); - this._indentBlockInternal(block); - this.newLineIfLastNot().write("}"); - - return this; - } - - /** - * Indents the code one level for the current line. - */ - indent(times?: number): this; - /** - * Indents a block of code. - * @param block - Block to indent. - */ - indent(block: () => void): this; - indent(timesOrBlock: number | (() => void) = 1) { - if (typeof timesOrBlock === "number") { - this._newLineIfNewLineOnNextWrite(); - return this.write(this._indentationText.repeat(timesOrBlock)); - } else { - this._indentBlockInternal(timesOrBlock); - if (!this.isLastNewLine()) { - this._newLineOnNextWrite = true; - } - return this; - } - } - - /** @internal */ - private _indentBlockInternal(block?: () => void) { - if (this.getLastChar() != null) { - this.newLineIfLastNot(); - } - this._currentIndentation++; - this._isOnFirstLineOfBlock = true; - if (block != null) { - block(); - } - this._isOnFirstLineOfBlock = false; - this._currentIndentation = Math.max(0, this._currentIndentation - 1); - } - - /** - * Conditionally writes a line of text. - * @param condition - Condition to evaluate. - * @param textFunc - A function that returns a string to write if the condition is true. - */ - conditionalWriteLine(condition: boolean | undefined, textFunc: () => string): this; - /** - * Conditionally writes a line of text. - * @param condition - Condition to evaluate. - * @param text - Text to write if the condition is true. - */ - conditionalWriteLine(condition: boolean | undefined, text: string): this; - conditionalWriteLine(condition: boolean | undefined, strOrFunc: string | (() => string)) { - if (condition) { - this.writeLine(getStringFromStrOrFunc(strOrFunc)); - } - - return this; - } - - /** - * Writes a line of text. - * @param text - String to write. - */ - writeLine(text: string): this { - this._newLineIfNewLineOnNextWrite(); - if (this.getLastChar() != null) { - this.newLineIfLastNot(); - } - this._writeIndentingNewLines(text); - this.newLine(); - - return this; - } - - /** - * Writes a newline if the last line was not a newline. - */ - newLineIfLastNot(): this { - this._newLineIfNewLineOnNextWrite(); - - if (!this.isLastNewLine()) { - this.newLine(); - } - - return this; - } - - /** - * Writes a blank line if the last written text was not a blank line. - */ - blankLineIfLastNot(): this { - if (!this.isLastBlankLine()) { - this.blankLine(); - } - return this; - } - - /** - * Writes a blank line if the condition is true. - * @param condition - Condition to evaluate. - */ - conditionalBlankLine(condition: boolean | undefined): this { - if (condition) { - this.blankLine(); - } - return this; - } - - /** - * Writes a blank line. - */ - blankLine(): this { - return this.newLineIfLastNot().newLine(); - } - - /** - * Writes a newline if the condition is true. - * @param condition - Condition to evaluate. - */ - conditionalNewLine(condition: boolean | undefined): this { - if (condition) { - this.newLine(); - } - return this; - } - - /** - * Writes a newline. - */ - newLine(): this { - this._newLineOnNextWrite = false; - this._baseWriteNewline(); - return this; - } - - /** - * Writes a quote character. - */ - quote(): this; - /** - * Writes text surrounded in quotes. - * @param text - Text to write. - */ - quote(text: string): this; - quote(text?: string) { - this._newLineIfNewLineOnNextWrite(); - this._writeIndentingNewLines(text == null ? this._quoteChar : this._quoteChar + escapeForWithinString(text, this._quoteChar) + this._quoteChar); - return this; - } - - /** - * Writes a space if the last character was not a space. - */ - spaceIfLastNot(): this { - this._newLineIfNewLineOnNextWrite(); - - if (!this.isLastSpace()) { - this._writeIndentingNewLines(" "); - } - - return this; - } - - /** - * Writes a space. - * @param times - Number of times to write a space. - */ - space(times = 1): this { - this._newLineIfNewLineOnNextWrite(); - this._writeIndentingNewLines(" ".repeat(times)); - return this; - } - - /** - * Writes a tab if the last character was not a tab. - */ - tabIfLastNot(): this { - this._newLineIfNewLineOnNextWrite(); - - if (!this.isLastTab()) { - this._writeIndentingNewLines("\t"); - } - - return this; - } - - /** - * Writes a tab. - * @param times - Number of times to write a tab. - */ - tab(times = 1): this { - this._newLineIfNewLineOnNextWrite(); - this._writeIndentingNewLines("\t".repeat(times)); - return this; - } - - /** - * Conditionally writes text. - * @param condition - Condition to evaluate. - * @param textFunc - A function that returns a string to write if the condition is true. - */ - conditionalWrite(condition: boolean | undefined, textFunc: () => string): this; - /** - * Conditionally writes text. - * @param condition - Condition to evaluate. - * @param text - Text to write if the condition is true. - */ - conditionalWrite(condition: boolean | undefined, text: string): this; - conditionalWrite(condition: boolean | undefined, textOrFunc: string | (() => string)) { - if (condition) { - this.write(getStringFromStrOrFunc(textOrFunc)); - } - - return this; - } - - /** - * Writes the provided text. - * @param text - Text to write. - */ - write(text: string): this { - this._newLineIfNewLineOnNextWrite(); - this._writeIndentingNewLines(text); - return this; - } - - /** - * Writes text to exit a comment if in a comment. - */ - closeComment(): this { - const commentChar = this._currentCommentChar; - - switch (commentChar) { - case CommentChar.Line: - this.newLine(); - break; - case CommentChar.Star: - if (!this.isLastNewLine()) { - this.spaceIfLastNot(); - } - this.write("*/"); - break; - default: { - const _assertUndefined: undefined = commentChar; - break; - } - } - - return this; - } - - /** - * Inserts text at the provided position. - * - * This method is "unsafe" because it won't update the state of the writer unless - * inserting at the end position. It is biased towards being fast at inserting closer - * to the start or end, but slower to insert in the middle. Only use this if - * absolutely necessary. - * @param pos - Position to insert at. - * @param text - Text to insert. - */ - unsafeInsert(pos: number, text: string): this { - const textLength = this._length; - const texts = this._texts; - verifyInput(); - - if (pos === textLength) { - return this.write(text); - } - - updateInternalArray(); - this._length += text.length; - - return this; - - function verifyInput() { - if (pos < 0) { - throw new Error(`Provided position of '${pos}' was less than zero.`); - } - if (pos > textLength) { - throw new Error(`Provided position of '${pos}' was greater than the text length of '${textLength}'.`); - } - } - - function updateInternalArray() { - const { index, localIndex } = getArrayIndexAndLocalIndex(); - - if (localIndex === 0) { - texts.splice(index, 0, text); - } else if (localIndex === texts[index].length) { - texts.splice(index + 1, 0, text); - } else { - const textItem = texts[index]; - const startText = textItem.substring(0, localIndex); - const endText = textItem.substring(localIndex); - texts.splice(index, 1, startText, text, endText); - } - } - - function getArrayIndexAndLocalIndex() { - if (pos < textLength / 2) { - // start searching from the front - let endPos = 0; - for (let i = 0; i < texts.length; i++) { - const textItem = texts[i]; - const startPos = endPos; - endPos += textItem.length; - if (endPos >= pos) { - return { index: i, localIndex: pos - startPos }; - } - } - } else { - // start searching from the back - let startPos = textLength; - for (let i = texts.length - 1; i >= 0; i--) { - const textItem = texts[i]; - startPos -= textItem.length; - if (startPos <= pos) { - return { index: i, localIndex: pos - startPos }; - } - } - } - - throw new Error("Unhandled situation inserting. This should never happen."); - } - } - - /** - * Gets the length of the string in the writer. - */ - getLength(): number { - return this._length; - } - - /** - * Gets if the writer is currently in a comment. - */ - isInComment(): boolean { - return this._currentCommentChar !== undefined; - } - - /** - * Gets if the writer is currently at the start of the first line of the text, block, or indentation block. - */ - isAtStartOfFirstLineOfBlock(): boolean { - return this.isOnFirstLineOfBlock() && (this.isLastNewLine() || this.getLastChar() == null); - } - - /** - * Gets if the writer is currently on the first line of the text, block, or indentation block. - */ - isOnFirstLineOfBlock(): boolean { - return this._isOnFirstLineOfBlock; - } - - /** - * Gets if the writer is currently in a string. - */ - isInString(): boolean { - return this._stringCharStack.length > 0 && this._stringCharStack[this._stringCharStack.length - 1] !== CHARS.OPEN_BRACE; - } - - /** - * Gets if the last chars written were for a newline. - */ - isLastNewLine(): boolean { - const lastChar = this.getLastChar(); - return lastChar === "\n" || lastChar === "\r"; - } - - /** - * Gets if the last chars written were for a blank line. - */ - isLastBlankLine(): boolean { - let foundCount = 0; - - // todo: consider extracting out iterating over past characters, but don't use - // an iterator because it will be slow. - for (let i = this._texts.length - 1; i >= 0; i--) { - const currentText = this._texts[i]; - for (let j = currentText.length - 1; j >= 0; j--) { - const currentChar = currentText.charCodeAt(j); - if (currentChar === CHARS.NEW_LINE) { - foundCount++; - if (foundCount === 2) { - return true; - } - } else if (currentChar !== CHARS.CARRIAGE_RETURN) { - return false; - } - } - } - - return false; - } - - /** - * Gets if the last char written was a space. - */ - isLastSpace(): boolean { - return this.getLastChar() === " "; - } - - /** - * Gets if the last char written was a tab. - */ - isLastTab(): boolean { - return this.getLastChar() === "\t"; - } - - /** - * Gets the last char written. - */ - getLastChar(): string | undefined { - const charCode = this._getLastCharCodeWithOffset(0); - return charCode == null ? undefined : String.fromCharCode(charCode); - } - - /** - * Gets if the writer ends with the provided text. - * @param text - Text to check if the writer ends with the provided text. - */ - endsWith(text: string): boolean { - const length = this._length; - return this.iterateLastCharCodes((charCode, index) => { - const offset = length - index; - const textIndex = text.length - offset; - if (text.charCodeAt(textIndex) !== charCode) { - return false; - } - return textIndex === 0 ? true : undefined; - }) || false; - } - - /** - * Iterates over the writer characters in reverse order. The iteration stops when a non-null or - * undefined value is returned from the action. The returned value is then returned by the method. - * - * @remarks It is much more efficient to use this method rather than `#toString()` since `#toString()` - * will combine the internal array into a string. - */ - iterateLastChars(action: (char: string, index: number) => T | undefined): T | undefined { - return this.iterateLastCharCodes((charCode, index) => action(String.fromCharCode(charCode), index)); - } - - /** - * Iterates over the writer character char codes in reverse order. The iteration stops when a non-null or - * undefined value is returned from the action. The returned value is then returned by the method. - * - * @remarks It is much more efficient to use this method rather than `#toString()` since `#toString()` - * will combine the internal array into a string. Additionally, this is slightly more efficient that - * `iterateLastChars` as this won't allocate a string per character. - */ - iterateLastCharCodes(action: (charCode: number, index: number) => T | undefined): T | undefined { - let index = this._length; - for (let i = this._texts.length - 1; i >= 0; i--) { - const currentText = this._texts[i]; - for (let j = currentText.length - 1; j >= 0; j--) { - index--; - const result = action(currentText.charCodeAt(j), index); - if (result != null) { - return result; - } - } - } - return undefined; - } - - /** - * Gets the writer's text. - */ - toString(): string { - if (this._texts.length > 1) { - const text = this._texts.join(""); - this._texts.length = 0; - this._texts.push(text); - } - - return this._texts[0] || ""; - } - - /** @internal */ - private static readonly _newLineRegEx = /\r?\n/; - /** @internal */ - private _writeIndentingNewLines(text: string) { - text = text || ""; - if (text.length === 0) { - writeIndividual(this, ""); - return; - } - - const items = text.split(CodeBlockWriter._newLineRegEx); - items.forEach((s, i) => { - if (i > 0) { - this._baseWriteNewline(); - } - - if (s.length === 0) { - return; - } - - writeIndividual(this, s); - }); - - function writeIndividual(writer: CodeBlockWriter, s: string) { - if (!writer.isInString()) { - const isAtStartOfLine = writer.isLastNewLine() || writer.getLastChar() == null; - if (isAtStartOfLine) { - writer._writeIndentation(); - } - } - - writer._updateInternalState(s); - writer._internalWrite(s); - } - } - - /** @internal */ - private _baseWriteNewline() { - if (this._currentCommentChar === CommentChar.Line) { - this._currentCommentChar = undefined; - } - - const lastStringCharOnStack = this._stringCharStack[this._stringCharStack.length - 1]; - if ((lastStringCharOnStack === CHARS.DOUBLE_QUOTE || lastStringCharOnStack === CHARS.SINGLE_QUOTE) && this._getLastCharCodeWithOffset(0) !== CHARS.BACK_SLASH) { - this._stringCharStack.pop(); - } - - this._internalWrite(this._newLine); - this._isOnFirstLineOfBlock = false; - this._dequeueQueuedIndentation(); - } - - /** @internal */ - private _dequeueQueuedIndentation() { - if (this._queuedIndentation == null) { - return; - } - - if (this._queuedOnlyIfNotBlock && wasLastBlock(this)) { - this._queuedIndentation = undefined; - this._queuedOnlyIfNotBlock = undefined; - } else { - this._currentIndentation = this._queuedIndentation; - this._queuedIndentation = undefined; - } - - function wasLastBlock(writer: CodeBlockWriter) { - let foundNewLine = false; - return writer.iterateLastCharCodes(charCode => { - switch (charCode) { - case CHARS.NEW_LINE: - if (foundNewLine) { - return false; - } else { - foundNewLine = true; - } - break; - case CHARS.CARRIAGE_RETURN: - return undefined; - case CHARS.OPEN_BRACE: - return true; - default: - return false; - } - }); - } - } - - /** @internal */ - private _updateInternalState(str: string) { - for (let i = 0; i < str.length; i++) { - const currentChar = str.charCodeAt(i); - - // This is a performance optimization to short circuit all the checks below. If the current char - // is not in this set then it won't change any internal state so no need to continue and do - // so many other checks (this made it 3x faster in one scenario I tested). - if (!isCharToHandle.has(currentChar)) { - continue; - } - - const pastChar = i === 0 ? this._getLastCharCodeWithOffset(0) : str.charCodeAt(i - 1); - const pastPastChar = i === 0 ? this._getLastCharCodeWithOffset(1) : i === 1 ? this._getLastCharCodeWithOffset(0) : str.charCodeAt(i - 2); - - // handle regex - if (this._isInRegEx) { - if (pastChar === CHARS.FORWARD_SLASH && pastPastChar !== CHARS.BACK_SLASH || pastChar === CHARS.NEW_LINE) { - this._isInRegEx = false; - } else { - continue; - } - } else if (!this.isInString() && !this.isInComment() && isRegExStart(currentChar, pastChar, pastPastChar)) { - this._isInRegEx = true; - continue; - } - - // handle comments - if (this._currentCommentChar == null && pastChar === CHARS.FORWARD_SLASH && currentChar === CHARS.FORWARD_SLASH) { - this._currentCommentChar = CommentChar.Line; - } else if (this._currentCommentChar == null && pastChar === CHARS.FORWARD_SLASH && currentChar === CHARS.ASTERISK) { - this._currentCommentChar = CommentChar.Star; - } else if (this._currentCommentChar === CommentChar.Star && pastChar === CHARS.ASTERISK && currentChar === CHARS.FORWARD_SLASH) { - this._currentCommentChar = undefined; - } - - if (this.isInComment()) { - continue; - } - - // handle strings - const lastStringCharOnStack = this._stringCharStack.length === 0 ? undefined : this._stringCharStack[this._stringCharStack.length - 1]; - if (pastChar !== CHARS.BACK_SLASH && (currentChar === CHARS.DOUBLE_QUOTE || currentChar === CHARS.SINGLE_QUOTE || currentChar === CHARS.BACK_TICK)) { - if (lastStringCharOnStack === currentChar) { - this._stringCharStack.pop(); - } else if (lastStringCharOnStack === CHARS.OPEN_BRACE || lastStringCharOnStack === undefined) { - this._stringCharStack.push(currentChar); - } - } else if (pastPastChar !== CHARS.BACK_SLASH && pastChar === CHARS.DOLLAR_SIGN && currentChar === CHARS.OPEN_BRACE && lastStringCharOnStack === CHARS.BACK_TICK) { - this._stringCharStack.push(currentChar); - } else if (currentChar === CHARS.CLOSE_BRACE && lastStringCharOnStack === CHARS.OPEN_BRACE) { - this._stringCharStack.pop(); - } - } - } - - /** @internal - This is private, but exposed for testing. */ - _getLastCharCodeWithOffset(offset: number) { - if (offset >= this._length || offset < 0) { - return undefined; - } - - for (let i = this._texts.length - 1; i >= 0; i--) { - const currentText = this._texts[i]; - if (offset >= currentText.length) { - offset -= currentText.length; - } else { - return currentText.charCodeAt(currentText.length - 1 - offset); - } - } - return undefined; - } - - /** @internal */ - private _writeIndentation() { - const flooredIndentation = Math.floor(this._currentIndentation); - this._internalWrite(this._indentationText.repeat(flooredIndentation)); - - const overflow = this._currentIndentation - flooredIndentation; - if (this._useTabs) { - if (overflow > 0.5) { - this._internalWrite(this._indentationText); - } - } else { - const portion = Math.round(this._indentationText.length * overflow); - - // build up the string first, then append it for performance reasons - let text = ""; - for (let i = 0; i < portion; i++) { - text += this._indentationText[i]; - } - this._internalWrite(text); - } - } - - /** @internal */ - private _newLineIfNewLineOnNextWrite() { - if (!this._newLineOnNextWrite) { - return; - } - this._newLineOnNextWrite = false; - this.newLine(); - } - - /** @internal */ - private _internalWrite(text: string) { - if (text.length === 0) { - return; - } - - this._texts.push(text); - this._length += text.length; - } - - /** @internal */ - private static readonly _spacesOrTabsRegEx = /^[ \t]*$/; - /** @internal */ - private _getIndentationLevelFromArg(countOrText: string | number) { - if (typeof countOrText === "number") { - if (countOrText < 0) { - throw new Error("Passed in indentation level should be greater than or equal to 0."); - } - return countOrText; - } else if (typeof countOrText === "string") { - if (!CodeBlockWriter._spacesOrTabsRegEx.test(countOrText)) { - throw new Error("Provided string must be empty or only contain spaces or tabs."); - } - - const { spacesCount, tabsCount } = getSpacesAndTabsCount(countOrText); - return tabsCount + spacesCount / this._indentNumberOfSpaces; - } else { - throw new Error("Argument provided must be a string or number."); - } - } - - /** @internal */ - private _setIndentationState(state: IndentationLevelState) { - this._currentIndentation = state.current; - this._queuedIndentation = state.queued; - this._queuedOnlyIfNotBlock = state.queuedOnlyIfNotBlock; - } - - /** @internal */ - private _getIndentationState(): IndentationLevelState { - return { - current: this._currentIndentation, - queued: this._queuedIndentation, - queuedOnlyIfNotBlock: this._queuedOnlyIfNotBlock, - }; - } -} - -interface IndentationLevelState { - current: number; - queued: number | undefined; - queuedOnlyIfNotBlock: true | undefined; -} - -function isRegExStart(currentChar: number, pastChar: number | undefined, pastPastChar: number | undefined) { - return pastChar === CHARS.FORWARD_SLASH - && currentChar !== CHARS.FORWARD_SLASH - && currentChar !== CHARS.ASTERISK - && pastPastChar !== CHARS.ASTERISK - && pastPastChar !== CHARS.FORWARD_SLASH; -} - -function getIndentationText(useTabs: boolean, numberSpaces: number) { - if (useTabs) { - return "\t"; - } - return Array(numberSpaces + 1).join(" "); -} - -function getSpacesAndTabsCount(str: string) { - let spacesCount = 0; - let tabsCount = 0; - - for (let i = 0; i < str.length; i++) { - const charCode = str.charCodeAt(i); - if (charCode === CHARS.SPACE) { - spacesCount++; - } else if (charCode === CHARS.TAB) { - tabsCount++; - } - } - - return { spacesCount, tabsCount }; -} diff --git a/vendor/deno.land/x/code_block_writer@12.0.0/utils/string_utils.ts b/vendor/deno.land/x/code_block_writer@12.0.0/utils/string_utils.ts deleted file mode 100644 index 8fd241c..0000000 --- a/vendor/deno.land/x/code_block_writer@12.0.0/utils/string_utils.ts +++ /dev/null @@ -1,27 +0,0 @@ -const newlineRegex = /(\r?\n)/g; - -/** @internal */ -export function escapeForWithinString(str: string, quoteKind: string) { - return escapeChar(str, quoteKind).replace(newlineRegex, "\\$1"); -} - -/** @internal */ -export function escapeChar(str: string, char: string) { - if (char.length !== 1) { - throw new Error(`Specified char must be one character long.`); - } - - let result = ""; - for (let i = 0; i < str.length; i++) { - if (str[i] === char) { - result += "\\"; - } - result += str[i]; - } - return result; -} - -/** @internal */ -export function getStringFromStrOrFunc(strOrFunc: string | (() => string)) { - return strOrFunc instanceof Function ? strOrFunc() : strOrFunc; -} diff --git a/vendor/deno.land/x/deno_cache@0.5.2/auth_tokens.ts b/vendor/deno.land/x/deno_cache@0.5.2/auth_tokens.ts deleted file mode 100644 index b16f9e9..0000000 --- a/vendor/deno.land/x/deno_cache@0.5.2/auth_tokens.ts +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. - -interface BearerAuthToken { - type: "bearer"; - host: string; - token: string; -} - -interface BasicAuthToken { - type: "basic"; - host: string; - username: string; - password: string; -} - -type AuthToken = BearerAuthToken | BasicAuthToken; - -export function splitLast( - value: string, - delimiter: string, -): [string, string] { - const split = value.split(delimiter); - return [split.slice(0, -1).join(delimiter)].concat(split.slice(-1)) as [ - string, - string, - ]; -} - -function tokenAsValue(authToken: AuthToken): string { - return authToken.type === "basic" - ? `Basic ${btoa(`${authToken.username}:${authToken.password}`)}` - : `Bearer ${authToken.token}`; -} - -export class AuthTokens { - #tokens: AuthToken[]; - constructor(tokensStr = "") { - const tokens: AuthToken[] = []; - for (const tokenStr of tokensStr.split(";").filter((s) => s.length > 0)) { - if (tokensStr.includes("@")) { - const [token, host] = splitLast(tokenStr, "@"); - if (token.includes(":")) { - const [username, password] = splitLast(token, ":"); - tokens.push({ type: "basic", host, username, password }); - } else { - tokens.push({ type: "bearer", host, token }); - } - } else { - console.error("Badly formed auth token discarded."); - } - } - this.#tokens = tokens; - } - - get(specifier: URL): string | undefined { - for (const token of this.#tokens) { - if (token.host.endsWith(specifier.host)) { - return tokenAsValue(token); - } - } - } -} diff --git a/vendor/deno.land/x/deno_cache@0.5.2/cache.ts b/vendor/deno.land/x/deno_cache@0.5.2/cache.ts deleted file mode 100644 index e696924..0000000 --- a/vendor/deno.land/x/deno_cache@0.5.2/cache.ts +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. - -import type { LoadResponse } from "./deps.ts"; -import type { FileFetcher } from "./file_fetcher.ts"; - -/** Provides an interface to Deno's CLI cache. - * - * It is better to use the {@linkcode createCache} function directly. */ -export class FetchCacher { - #fileFetcher: FileFetcher; - - constructor(fileFetcher: FileFetcher) { - this.#fileFetcher = fileFetcher; - } - - load = (specifier: string): Promise => { - const url = new URL(specifier); - return this.#fileFetcher.fetch(url); - }; -} diff --git a/vendor/deno.land/x/deno_cache@0.5.2/deno_dir.ts b/vendor/deno.land/x/deno_cache@0.5.2/deno_dir.ts deleted file mode 100644 index b456deb..0000000 --- a/vendor/deno.land/x/deno_cache@0.5.2/deno_dir.ts +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. - -import { isAbsolute, join, normalize, resolve } from "./deps.ts"; -import { DiskCache } from "./disk_cache.ts"; -import { cacheDir, homeDir } from "./dirs.ts"; -import { HttpCache } from "./http_cache.ts"; -import { assert } from "./util.ts"; - -export class DenoDir { - readonly root: string; - - constructor(root?: string | URL) { - const resolvedRoot = DenoDir.tryResolveRootPath(root); - assert(resolvedRoot, "Could not set the Deno root directory"); - assert( - isAbsolute(resolvedRoot), - `The root directory "${resolvedRoot}" is not absolute.`, - ); - Deno.permissions.request({ name: "read", path: resolvedRoot }); - this.root = resolvedRoot; - } - - createGenCache(): DiskCache { - return new DiskCache(join(this.root, "gen")); - } - - createHttpCache( - options?: { vendorRoot?: string | URL; readOnly?: boolean }, - ): HttpCache { - return new HttpCache({ - root: join(this.root, "deps"), - vendorRoot: options?.vendorRoot == null - ? undefined - : resolvePathOrUrl(options.vendorRoot), - readOnly: options?.readOnly, - }); - } - - static tryResolveRootPath( - root: string | URL | undefined, - ): string | undefined { - if (root) { - root = resolvePathOrUrl(root); - } else { - Deno.permissions.request({ name: "env", variable: "DENO_DIR" }); - const dd = Deno.env.get("DENO_DIR"); - if (dd) { - if (!isAbsolute(dd)) { - root = normalize(join(Deno.cwd(), dd)); - } else { - root = dd; - } - } else { - const cd = cacheDir(); - if (cd) { - root = join(cd, "deno"); - } else { - const hd = homeDir(); - if (hd) { - root = join(hd, ".deno"); - } - } - } - } - return root; - } -} - -function resolvePathOrUrl(path: URL | string) { - if (path instanceof URL) { - path = path.toString(); - } - return resolve(path); -} diff --git a/vendor/deno.land/x/deno_cache@0.5.2/deps.ts b/vendor/deno.land/x/deno_cache@0.5.2/deps.ts deleted file mode 100644 index 5b08c79..0000000 --- a/vendor/deno.land/x/deno_cache@0.5.2/deps.ts +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. - -// std library dependencies - -export { ensureDir } from "https://deno.land/std@0.140.0/fs/ensure_dir.ts"; -export * as colors from "https://deno.land/std@0.140.0/fmt/colors.ts"; -export { - dirname, - extname, - fromFileUrl, - isAbsolute, - join, - normalize, - resolve, - sep, -} from "https://deno.land/std@0.140.0/path/mod.ts"; -export { - readAll, - writeAll, -} from "https://deno.land/std@0.140.0/streams/conversion.ts"; - -// type only dependencies of `deno_graph` - -export type { - CacheInfo, - LoadResponse, -} from "https://deno.land/x/deno_graph@0.26.0/mod.ts"; diff --git a/vendor/deno.land/x/deno_cache@0.5.2/dirs.ts b/vendor/deno.land/x/deno_cache@0.5.2/dirs.ts deleted file mode 100644 index 4cba718..0000000 --- a/vendor/deno.land/x/deno_cache@0.5.2/dirs.ts +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. - -import { join } from "./deps.ts"; - -export function cacheDir(): string | undefined { - if (Deno.build.os === "darwin") { - const home = homeDir(); - if (home) { - return join(home, "Library/Caches"); - } - } else if (Deno.build.os === "windows") { - Deno.permissions.request({ name: "env", variable: "LOCALAPPDATA" }); - return Deno.env.get("LOCALAPPDATA"); - } else { - Deno.permissions.request({ name: "env", variable: "XDG_CACHE_HOME" }); - const cacheHome = Deno.env.get("XDG_CACHE_HOME"); - if (cacheHome) { - return cacheHome; - } else { - const home = homeDir(); - if (home) { - return join(home, ".cache"); - } - } - } -} - -export function homeDir(): string | undefined { - if (Deno.build.os === "windows") { - Deno.permissions.request({ name: "env", variable: "USERPROFILE" }); - return Deno.env.get("USERPROFILE"); - } else { - Deno.permissions.request({ name: "env", variable: "HOME" }); - return Deno.env.get("HOME"); - } -} diff --git a/vendor/deno.land/x/deno_cache@0.5.2/disk_cache.ts b/vendor/deno.land/x/deno_cache@0.5.2/disk_cache.ts deleted file mode 100644 index 95e8f70..0000000 --- a/vendor/deno.land/x/deno_cache@0.5.2/disk_cache.ts +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. - -import { - dirname, - ensureDir, - isAbsolute, - join, - readAll, - writeAll, -} from "./deps.ts"; -import { assert, CACHE_PERM } from "./util.ts"; -import { instantiate } from "./lib/deno_cache_dir.generated.js"; - -export class DiskCache { - location: string; - - constructor(location: string) { - assert(isAbsolute(location)); - this.location = location; - } - - async get(filename: string): Promise { - const path = join(this.location, filename); - const file = await Deno.open(path, { read: true }); - const value = await readAll(file); - file.close(); - return value; - } - - async set(filename: string, data: Uint8Array): Promise { - const path = join(this.location, filename); - const parentFilename = dirname(path); - await ensureDir(parentFilename); - const file = await Deno.open(path, { - write: true, - create: true, - mode: CACHE_PERM, - }); - await writeAll(file, data); - file.close(); - } - - static async getCacheFilename(url: URL): Promise { - const { url_to_filename } = await instantiate(); - return url_to_filename(url.toString()); - } -} diff --git a/vendor/deno.land/x/deno_cache@0.5.2/file_fetcher.ts b/vendor/deno.land/x/deno_cache@0.5.2/file_fetcher.ts deleted file mode 100644 index b7024b7..0000000 --- a/vendor/deno.land/x/deno_cache@0.5.2/file_fetcher.ts +++ /dev/null @@ -1,258 +0,0 @@ -// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. - -import { AuthTokens } from "./auth_tokens.ts"; -import { colors, fromFileUrl } from "./deps.ts"; -import type { LoadResponse } from "./deps.ts"; -import type { HttpCache } from "./http_cache.ts"; - -/** - * A setting that determines how the cache is handled for remote dependencies. - * - * The default is `"use"`. - * - * - `"only"` - only the cache will be re-used, and any remote modules not in - * the cache will error. - * - `"use"` - the cache will be used, meaning existing remote files will not be - * reloaded. - * - `"reloadAll"` - any cached modules will be ignored and their values will be - * fetched. - * - `string[]` - an array of string specifiers, that if they match the start of - * the requested specifier, will be reloaded. - */ -export type CacheSetting = "only" | "reloadAll" | "use" | string[]; - -function shouldUseCache(cacheSetting: CacheSetting, specifier: URL): boolean { - switch (cacheSetting) { - case "only": - case "use": - return true; - case "reloadAll": - return false; - default: { - const specifierStr = specifier.toString(); - for (const value of cacheSetting) { - if (specifierStr.startsWith(value)) { - return false; - } - } - return true; - } - } -} - -const SUPPORTED_SCHEMES = [ - "data:", - "blob:", - "file:", - "http:", - "https:", -] as const; - -type SupportedSchemes = typeof SUPPORTED_SCHEMES[number]; - -function getValidatedScheme(specifier: URL) { - const scheme = specifier.protocol; - // deno-lint-ignore no-explicit-any - if (!SUPPORTED_SCHEMES.includes(scheme as any)) { - throw new TypeError( - `Unsupported scheme "${scheme}" for module "${specifier.toString()}". Supported schemes: ${ - JSON.stringify(SUPPORTED_SCHEMES) - }.`, - ); - } - return scheme as SupportedSchemes; -} - -export function stripHashbang(value: string): string { - return value.startsWith("#!") ? value.slice(value.indexOf("\n")) : value; -} - -async function fetchLocal(specifier: URL): Promise { - const local = fromFileUrl(specifier); - if (!local) { - throw new TypeError( - `Invalid file path.\n Specifier: "${specifier.toString()}"`, - ); - } - try { - const source = await Deno.readTextFile(local); - const content = stripHashbang(source); - return { - kind: "module", - content, - specifier: specifier.toString(), - }; - } catch { - // ignoring errors, we will just return undefined - } -} - -export class FileFetcher { - #allowRemote: boolean; - #authTokens: AuthTokens; - #cache = new Map(); - #cacheSetting: CacheSetting; - #httpCache: HttpCache; - - constructor( - httpCache: HttpCache, - cacheSetting: CacheSetting = "use", - allowRemote = true, - ) { - Deno.permissions.request({ name: "env", variable: "DENO_AUTH_TOKENS" }); - this.#authTokens = new AuthTokens(Deno.env.get("DENO_AUTH_TOKENS")); - this.#allowRemote = allowRemote; - this.#cacheSetting = cacheSetting; - this.#httpCache = httpCache; - } - - async #fetchBlobDataUrl(specifier: URL): Promise { - const cached = await this.#fetchCached(specifier, 0); - if (cached) { - return cached; - } - - if (this.#cacheSetting === "only") { - throw new Deno.errors.NotFound( - `Specifier not found in cache: "${specifier.toString()}", --cached-only is specified.`, - ); - } - - const response = await fetch(specifier.toString()); - const content = await response.text(); - const headers: Record = {}; - for (const [key, value] of response.headers) { - headers[key.toLowerCase()] = value; - } - await this.#httpCache.set(specifier, headers, content); - return { - kind: "module", - specifier: specifier.toString(), - headers, - content, - }; - } - - async #fetchCached( - specifier: URL, - redirectLimit: number, - ): Promise { - if (redirectLimit < 0) { - throw new Deno.errors.Http( - `Too many redirects.\n Specifier: "${specifier.toString()}"`, - ); - } - - const headers = await this.#httpCache.getHeaders(specifier); - if (!headers) { - return undefined; - } - const location = headers["location"]; - if (location != null && location.length > 0) { - const redirect = new URL(location, specifier); - return this.#fetchCached(redirect, redirectLimit - 1); - } - const content = await this.#httpCache.getText(specifier); - if (content == null) { - return undefined; - } - return { - kind: "module", - specifier: specifier.toString(), - headers, - content, - }; - } - - async #fetchRemote( - specifier: URL, - redirectLimit: number, - ): Promise { - if (redirectLimit < 0) { - throw new Deno.errors.Http( - `Too many redirects.\n Specifier: "${specifier.toString()}"`, - ); - } - - if (shouldUseCache(this.#cacheSetting, specifier)) { - const response = await this.#fetchCached(specifier, redirectLimit); - if (response) { - return response; - } - } - - if (this.#cacheSetting === "only") { - throw new Deno.errors.NotFound( - `Specifier not found in cache: "${specifier.toString()}", --cached-only is specified.`, - ); - } - - const requestHeaders = new Headers(); - const cachedHeaders = await this.#httpCache.getHeaders(specifier); - if (cachedHeaders) { - const etag = cachedHeaders["etag"]; - if (etag != null && etag.length > 0) { - requestHeaders.append("if-none-match", etag); - } - } - const authToken = this.#authTokens.get(specifier); - if (authToken) { - requestHeaders.append("authorization", authToken); - } - console.error(`${colors.green("Download")} ${specifier.toString()}`); - const response = await fetch(specifier.toString(), { - headers: requestHeaders, - }); - if (!response.ok) { - if (response.status === 404) { - return undefined; - } else { - throw new Deno.errors.Http(`${response.status} ${response.statusText}`); - } - } - // WHATWG fetch follows redirects automatically, so we will try to - // determine if that occurred and cache the value. - if (specifier.toString() !== response.url) { - const headers = { "location": response.url }; - await this.#httpCache.set(specifier, headers, ""); - } - const url = new URL(response.url); - const content = await response.text(); - const headers: Record = {}; - for (const [key, value] of response.headers) { - headers[key.toLowerCase()] = value; - } - await this.#httpCache.set(url, headers, content); - return { - kind: "module", - specifier: response.url, - headers, - content, - }; - } - - async fetch(specifier: URL): Promise { - const scheme = getValidatedScheme(specifier); - if (scheme === "file:") { - return fetchLocal(specifier); - } - const response = this.#cache.get(specifier.toString()); - if (response) { - return response; - } else if (scheme === "data:" || scheme === "blob:") { - const response = await this.#fetchBlobDataUrl(specifier); - await this.#cache.set(specifier.toString(), response); - return response; - } else if (!this.#allowRemote) { - throw new Deno.errors.PermissionDenied( - `A remote specifier was requested: "${specifier.toString()}", but --no-remote is specified.`, - ); - } else { - const response = await this.#fetchRemote(specifier, 10); - if (response) { - await this.#cache.set(specifier.toString(), response); - } - return response; - } - } -} diff --git a/vendor/deno.land/x/deno_cache@0.5.2/http_cache.ts b/vendor/deno.land/x/deno_cache@0.5.2/http_cache.ts deleted file mode 100644 index df03524..0000000 --- a/vendor/deno.land/x/deno_cache@0.5.2/http_cache.ts +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. - -import { isAbsolute } from "./deps.ts"; -import { assert } from "./util.ts"; -import { - GlobalHttpCache, - instantiate, - LocalHttpCache, -} from "./lib/deno_cache_dir.generated.js"; - -export interface HttpCacheCreateOptions { - root: string; - vendorRoot?: string; - readOnly?: boolean; -} - -export class HttpCache { - #createOptions: HttpCacheCreateOptions; - #cache: LocalHttpCache | GlobalHttpCache | undefined; - #readOnly: boolean | undefined; - - constructor(options: HttpCacheCreateOptions) { - assert(isAbsolute(options.root), "Root must be an absolute path."); - - if (options.vendorRoot != null) { - assert( - isAbsolute(options.vendorRoot), - "Vendor root must be an absolute path.", - ); - } - - this.#createOptions = options; - this.#readOnly = options.readOnly; - } - - async #ensureCache() { - if (this.#cache == null) { - const { GlobalHttpCache, LocalHttpCache } = await instantiate(); - const options = this.#createOptions; - - if (options.vendorRoot != null) { - this.#cache = LocalHttpCache.new(options.vendorRoot, options.root); - } else { - this.#cache = GlobalHttpCache.new(options.root); - } - } - return this.#cache; - } - - free() { - this.#cache?.free(); - } - - async getHeaders( - url: URL, - ): Promise | undefined> { - const map = (await this.#ensureCache()).getHeaders(url.toString()); - return map == null ? undefined : Object.fromEntries(map); - } - - async getText( - url: URL, - ): Promise { - const data = (await this.#ensureCache()).getFileText(url.toString()); - return data == null ? undefined : data; - } - - async set( - url: URL, - headers: Record, - content: string, - ): Promise { - if (this.#readOnly === undefined) { - this.#readOnly = - (Deno.permissions.querySync({ name: "write" })).state === "denied" - ? true - : false; - } - if (this.#readOnly) { - return; - } - (await this.#ensureCache()).set( - url.toString(), - headers, - new TextEncoder().encode(content), - ); - } -} diff --git a/vendor/deno.land/x/deno_cache@0.5.2/lib/deno_cache_dir.generated.js b/vendor/deno.land/x/deno_cache@0.5.2/lib/deno_cache_dir.generated.js deleted file mode 100644 index 2a0ad19..0000000 --- a/vendor/deno.land/x/deno_cache@0.5.2/lib/deno_cache_dir.generated.js +++ /dev/null @@ -1,12420 +0,0 @@ -// @generated file from wasmbuild -- do not edit -// deno-lint-ignore-file -// deno-fmt-ignore-file -// source-hash: 07bf817234aa6712c89dd88fac1e17d527f7378e -let wasm; - -import { - atomic_write_file, - modified_time, - read_file_bytes, -} from "./snippets/deno_cache_dir-77bed54ace8005e0/fs.js"; -import * as import0 from "./snippets/deno_cache_dir-77bed54ace8005e0/fs.js"; - -const cachedTextDecoder = typeof TextDecoder !== "undefined" - ? new TextDecoder("utf-8", { ignoreBOM: true, fatal: true }) - : { - decode: () => { - throw Error("TextDecoder not available"); - }, - }; - -if (typeof TextDecoder !== "undefined") cachedTextDecoder.decode(); - -let cachedUint8Memory0 = null; - -function getUint8Memory0() { - if (cachedUint8Memory0 === null || cachedUint8Memory0.byteLength === 0) { - cachedUint8Memory0 = new Uint8Array(wasm.memory.buffer); - } - return cachedUint8Memory0; -} - -function getStringFromWasm0(ptr, len) { - ptr = ptr >>> 0; - return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len)); -} - -const heap = new Array(128).fill(undefined); - -heap.push(undefined, null, true, false); - -let heap_next = heap.length; - -function addHeapObject(obj) { - if (heap_next === heap.length) heap.push(heap.length + 1); - const idx = heap_next; - heap_next = heap[idx]; - - heap[idx] = obj; - return idx; -} - -function getObject(idx) { - return heap[idx]; -} - -function dropObject(idx) { - if (idx < 132) return; - heap[idx] = heap_next; - heap_next = idx; -} - -function takeObject(idx) { - const ret = getObject(idx); - dropObject(idx); - return ret; -} - -let WASM_VECTOR_LEN = 0; - -const cachedTextEncoder = typeof TextEncoder !== "undefined" - ? new TextEncoder("utf-8") - : { - encode: () => { - throw Error("TextEncoder not available"); - }, - }; - -const encodeString = function (arg, view) { - return cachedTextEncoder.encodeInto(arg, view); -}; - -function passStringToWasm0(arg, malloc, realloc) { - if (realloc === undefined) { - const buf = cachedTextEncoder.encode(arg); - const ptr = malloc(buf.length) >>> 0; - getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf); - WASM_VECTOR_LEN = buf.length; - return ptr; - } - - let len = arg.length; - let ptr = malloc(len) >>> 0; - - const mem = getUint8Memory0(); - - let offset = 0; - - for (; offset < len; offset++) { - const code = arg.charCodeAt(offset); - if (code > 0x7F) break; - mem[ptr + offset] = code; - } - - if (offset !== len) { - if (offset !== 0) { - arg = arg.slice(offset); - } - ptr = realloc(ptr, len, len = offset + arg.length * 3) >>> 0; - const view = getUint8Memory0().subarray(ptr + offset, ptr + len); - const ret = encodeString(arg, view); - - offset += ret.written; - } - - WASM_VECTOR_LEN = offset; - return ptr; -} - -function isLikeNone(x) { - return x === undefined || x === null; -} - -let cachedInt32Memory0 = null; - -function getInt32Memory0() { - if (cachedInt32Memory0 === null || cachedInt32Memory0.byteLength === 0) { - cachedInt32Memory0 = new Int32Array(wasm.memory.buffer); - } - return cachedInt32Memory0; -} - -let cachedFloat64Memory0 = null; - -function getFloat64Memory0() { - if (cachedFloat64Memory0 === null || cachedFloat64Memory0.byteLength === 0) { - cachedFloat64Memory0 = new Float64Array(wasm.memory.buffer); - } - return cachedFloat64Memory0; -} - -function debugString(val) { - // primitive types - const type = typeof val; - if (type == "number" || type == "boolean" || val == null) { - return `${val}`; - } - if (type == "string") { - return `"${val}"`; - } - if (type == "symbol") { - const description = val.description; - if (description == null) { - return "Symbol"; - } else { - return `Symbol(${description})`; - } - } - if (type == "function") { - const name = val.name; - if (typeof name == "string" && name.length > 0) { - return `Function(${name})`; - } else { - return "Function"; - } - } - // objects - if (Array.isArray(val)) { - const length = val.length; - let debug = "["; - if (length > 0) { - debug += debugString(val[0]); - } - for (let i = 1; i < length; i++) { - debug += ", " + debugString(val[i]); - } - debug += "]"; - return debug; - } - // Test for built-in - const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val)); - let className; - if (builtInMatches.length > 1) { - className = builtInMatches[1]; - } else { - // Failed to match the standard '[object ClassName]' - return toString.call(val); - } - if (className == "Object") { - // we're a user defined class or Object - // JSON.stringify avoids problems with cycles, and is generally much - // easier than looping through ownProperties of `val`. - try { - return "Object(" + JSON.stringify(val) + ")"; - } catch (_) { - return "Object"; - } - } - // errors - if (val instanceof Error) { - return `${val.name}: ${val.message}\n${val.stack}`; - } - // TODO we could test for more things here, like `Set`s and `Map`s. - return className; -} - -function handleError(f, args) { - try { - return f.apply(this, args); - } catch (e) { - wasm.__wbindgen_exn_store(addHeapObject(e)); - } -} - -function getArrayU8FromWasm0(ptr, len) { - ptr = ptr >>> 0; - return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len); -} -/** - * @param {string} url - * @returns {string} - */ -export function url_to_filename(url) { - let deferred3_0; - let deferred3_1; - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passStringToWasm0( - url, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - const len0 = WASM_VECTOR_LEN; - wasm.url_to_filename(retptr, ptr0, len0); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - var r2 = getInt32Memory0()[retptr / 4 + 2]; - var r3 = getInt32Memory0()[retptr / 4 + 3]; - var ptr2 = r0; - var len2 = r1; - if (r3) { - ptr2 = 0; - len2 = 0; - throw takeObject(r2); - } - deferred3_0 = ptr2; - deferred3_1 = len2; - return getStringFromWasm0(ptr2, len2); - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - wasm.__wbindgen_free(deferred3_0, deferred3_1); - } -} - -function passArray8ToWasm0(arg, malloc) { - const ptr = malloc(arg.length * 1) >>> 0; - getUint8Memory0().set(arg, ptr / 1); - WASM_VECTOR_LEN = arg.length; - return ptr; -} - -const GlobalHttpCacheFinalization = new FinalizationRegistry((ptr) => - wasm.__wbg_globalhttpcache_free(ptr >>> 0) -); -/** */ -export class GlobalHttpCache { - static __wrap(ptr) { - ptr = ptr >>> 0; - const obj = Object.create(GlobalHttpCache.prototype); - obj.__wbg_ptr = ptr; - GlobalHttpCacheFinalization.register(obj, obj.__wbg_ptr, obj); - return obj; - } - - __destroy_into_raw() { - const ptr = this.__wbg_ptr; - this.__wbg_ptr = 0; - GlobalHttpCacheFinalization.unregister(this); - return ptr; - } - - free() { - const ptr = this.__destroy_into_raw(); - wasm.__wbg_globalhttpcache_free(ptr); - } - /** - * @param {string} path - * @returns {GlobalHttpCache} - */ - static new(path) { - const ptr0 = passStringToWasm0( - path, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - const len0 = WASM_VECTOR_LEN; - const ret = wasm.globalhttpcache_new(ptr0, len0); - return GlobalHttpCache.__wrap(ret); - } - /** - * @param {string} url - * @returns {any} - */ - getHeaders(url) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passStringToWasm0( - url, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - const len0 = WASM_VECTOR_LEN; - wasm.globalhttpcache_getHeaders(retptr, this.__wbg_ptr, ptr0, len0); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - var r2 = getInt32Memory0()[retptr / 4 + 2]; - if (r2) { - throw takeObject(r1); - } - return takeObject(r0); - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - } - } - /** - * @param {string} url - * @returns {any} - */ - getFileText(url) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passStringToWasm0( - url, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - const len0 = WASM_VECTOR_LEN; - wasm.globalhttpcache_getFileText(retptr, this.__wbg_ptr, ptr0, len0); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - var r2 = getInt32Memory0()[retptr / 4 + 2]; - if (r2) { - throw takeObject(r1); - } - return takeObject(r0); - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - } - } - /** - * @param {string} url - * @param {any} headers - * @param {Uint8Array} text - */ - set(url, headers, text) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passStringToWasm0( - url, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - const len0 = WASM_VECTOR_LEN; - const ptr1 = passArray8ToWasm0(text, wasm.__wbindgen_malloc); - const len1 = WASM_VECTOR_LEN; - wasm.globalhttpcache_set( - retptr, - this.__wbg_ptr, - ptr0, - len0, - addHeapObject(headers), - ptr1, - len1, - ); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - if (r1) { - throw takeObject(r0); - } - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - } - } -} - -const LocalHttpCacheFinalization = new FinalizationRegistry((ptr) => - wasm.__wbg_localhttpcache_free(ptr >>> 0) -); -/** */ -export class LocalHttpCache { - static __wrap(ptr) { - ptr = ptr >>> 0; - const obj = Object.create(LocalHttpCache.prototype); - obj.__wbg_ptr = ptr; - LocalHttpCacheFinalization.register(obj, obj.__wbg_ptr, obj); - return obj; - } - - __destroy_into_raw() { - const ptr = this.__wbg_ptr; - this.__wbg_ptr = 0; - LocalHttpCacheFinalization.unregister(this); - return ptr; - } - - free() { - const ptr = this.__destroy_into_raw(); - wasm.__wbg_localhttpcache_free(ptr); - } - /** - * @param {string} local_path - * @param {string} global_path - * @returns {LocalHttpCache} - */ - static new(local_path, global_path) { - const ptr0 = passStringToWasm0( - local_path, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - const len0 = WASM_VECTOR_LEN; - const ptr1 = passStringToWasm0( - global_path, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - const len1 = WASM_VECTOR_LEN; - const ret = wasm.localhttpcache_new(ptr0, len0, ptr1, len1); - return LocalHttpCache.__wrap(ret); - } - /** - * @param {string} url - * @returns {any} - */ - getHeaders(url) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passStringToWasm0( - url, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - const len0 = WASM_VECTOR_LEN; - wasm.localhttpcache_getHeaders(retptr, this.__wbg_ptr, ptr0, len0); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - var r2 = getInt32Memory0()[retptr / 4 + 2]; - if (r2) { - throw takeObject(r1); - } - return takeObject(r0); - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - } - } - /** - * @param {string} url - * @returns {any} - */ - getFileText(url) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passStringToWasm0( - url, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - const len0 = WASM_VECTOR_LEN; - wasm.localhttpcache_getFileText(retptr, this.__wbg_ptr, ptr0, len0); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - var r2 = getInt32Memory0()[retptr / 4 + 2]; - if (r2) { - throw takeObject(r1); - } - return takeObject(r0); - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - } - } - /** - * @param {string} url - * @param {any} headers - * @param {Uint8Array} text - */ - set(url, headers, text) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passStringToWasm0( - url, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - const len0 = WASM_VECTOR_LEN; - const ptr1 = passArray8ToWasm0(text, wasm.__wbindgen_malloc); - const len1 = WASM_VECTOR_LEN; - wasm.localhttpcache_set( - retptr, - this.__wbg_ptr, - ptr0, - len0, - addHeapObject(headers), - ptr1, - len1, - ); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - if (r1) { - throw takeObject(r0); - } - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - } - } -} - -const imports = { - __wbindgen_placeholder__: { - __wbindgen_error_new: function (arg0, arg1) { - const ret = new Error(getStringFromWasm0(arg0, arg1)); - return addHeapObject(ret); - }, - __wbindgen_object_drop_ref: function (arg0) { - takeObject(arg0); - }, - __wbindgen_string_get: function (arg0, arg1) { - const obj = getObject(arg1); - const ret = typeof obj === "string" ? obj : undefined; - var ptr1 = isLikeNone(ret) - ? 0 - : passStringToWasm0( - ret, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - var len1 = WASM_VECTOR_LEN; - getInt32Memory0()[arg0 / 4 + 1] = len1; - getInt32Memory0()[arg0 / 4 + 0] = ptr1; - }, - __wbindgen_string_new: function (arg0, arg1) { - const ret = getStringFromWasm0(arg0, arg1); - return addHeapObject(ret); - }, - __wbg_readfilebytes_3bb80ca808bba4fc: function () { - return handleError(function (arg0, arg1) { - const ret = read_file_bytes(getStringFromWasm0(arg0, arg1)); - return addHeapObject(ret); - }, arguments); - }, - __wbindgen_is_null: function (arg0) { - const ret = getObject(arg0) === null; - return ret; - }, - __wbindgen_is_undefined: function (arg0) { - const ret = getObject(arg0) === undefined; - return ret; - }, - __wbg_atomicwritefile_3520ae73a5856cbd: function () { - return handleError(function (arg0, arg1, arg2, arg3) { - const ret = atomic_write_file( - getStringFromWasm0(arg0, arg1), - getArrayU8FromWasm0(arg2, arg3), - ); - return addHeapObject(ret); - }, arguments); - }, - __wbg_modifiedtime_ee881da4a465f389: function () { - return handleError(function (arg0, arg1, arg2) { - const ret = modified_time(getStringFromWasm0(arg1, arg2)); - getInt32Memory0()[arg0 / 4 + 1] = isLikeNone(ret) ? 0 : ret; - getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret); - }, arguments); - }, - __wbindgen_number_get: function (arg0, arg1) { - const obj = getObject(arg1); - const ret = typeof obj === "number" ? obj : undefined; - getFloat64Memory0()[arg0 / 8 + 1] = isLikeNone(ret) ? 0 : ret; - getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret); - }, - __wbindgen_is_object: function (arg0) { - const val = getObject(arg0); - const ret = typeof val === "object" && val !== null; - return ret; - }, - __wbindgen_jsval_loose_eq: function (arg0, arg1) { - const ret = getObject(arg0) == getObject(arg1); - return ret; - }, - __wbindgen_boolean_get: function (arg0) { - const v = getObject(arg0); - const ret = typeof v === "boolean" ? (v ? 1 : 0) : 2; - return ret; - }, - __wbg_String_88810dfeb4021902: function (arg0, arg1) { - const ret = String(getObject(arg1)); - const ptr1 = passStringToWasm0( - ret, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - const len1 = WASM_VECTOR_LEN; - getInt32Memory0()[arg0 / 4 + 1] = len1; - getInt32Memory0()[arg0 / 4 + 0] = ptr1; - }, - __wbg_set_841ac57cff3d672b: function (arg0, arg1, arg2) { - getObject(arg0)[takeObject(arg1)] = takeObject(arg2); - }, - __wbg_new_abda76e883ba8a5f: function () { - const ret = new Error(); - return addHeapObject(ret); - }, - __wbg_stack_658279fe44541cf6: function (arg0, arg1) { - const ret = getObject(arg1).stack; - const ptr1 = passStringToWasm0( - ret, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - const len1 = WASM_VECTOR_LEN; - getInt32Memory0()[arg0 / 4 + 1] = len1; - getInt32Memory0()[arg0 / 4 + 0] = ptr1; - }, - __wbg_error_f851667af71bcfc6: function (arg0, arg1) { - let deferred0_0; - let deferred0_1; - try { - deferred0_0 = arg0; - deferred0_1 = arg1; - console.error(getStringFromWasm0(arg0, arg1)); - } finally { - wasm.__wbindgen_free(deferred0_0, deferred0_1); - } - }, - __wbindgen_is_string: function (arg0) { - const ret = typeof (getObject(arg0)) === "string"; - return ret; - }, - __wbindgen_is_function: function (arg0) { - const ret = typeof (getObject(arg0)) === "function"; - return ret; - }, - __wbg_new_0f2b71ca2f2a6029: function () { - const ret = new Map(); - return addHeapObject(ret); - }, - __wbg_next_f4bc0e96ea67da68: function (arg0) { - const ret = getObject(arg0).next; - return addHeapObject(ret); - }, - __wbg_value_2f4ef2036bfad28e: function (arg0) { - const ret = getObject(arg0).value; - return addHeapObject(ret); - }, - __wbg_iterator_7c7e58f62eb84700: function () { - const ret = Symbol.iterator; - return addHeapObject(ret); - }, - __wbg_new_2b6fea4ea03b1b95: function () { - const ret = new Object(); - return addHeapObject(ret); - }, - __wbg_get_7303ed2ef026b2f5: function (arg0, arg1) { - const ret = getObject(arg0)[arg1 >>> 0]; - return addHeapObject(ret); - }, - __wbg_length_820c786973abdd8a: function (arg0) { - const ret = getObject(arg0).length; - return ret; - }, - __wbg_instanceof_ArrayBuffer_ef2632aa0d4bfff8: function (arg0) { - let result; - try { - result = getObject(arg0) instanceof ArrayBuffer; - } catch { - result = false; - } - const ret = result; - return ret; - }, - __wbg_new_87297f22973157c8: function (arg0, arg1) { - const ret = new Error(getStringFromWasm0(arg0, arg1)); - return addHeapObject(ret); - }, - __wbg_call_557a2f2deacc4912: function () { - return handleError(function (arg0, arg1) { - const ret = getObject(arg0).call(getObject(arg1)); - return addHeapObject(ret); - }, arguments); - }, - __wbg_set_da7be7bf0e037b14: function (arg0, arg1, arg2) { - const ret = getObject(arg0).set(getObject(arg1), getObject(arg2)); - return addHeapObject(ret); - }, - __wbg_next_ec061e48a0e72a96: function () { - return handleError(function (arg0) { - const ret = getObject(arg0).next(); - return addHeapObject(ret); - }, arguments); - }, - __wbg_done_b6abb27d42b63867: function (arg0) { - const ret = getObject(arg0).done; - return ret; - }, - __wbg_entries_13e011453776468f: function (arg0) { - const ret = Object.entries(getObject(arg0)); - return addHeapObject(ret); - }, - __wbg_get_f53c921291c381bd: function () { - return handleError(function (arg0, arg1) { - const ret = Reflect.get(getObject(arg0), getObject(arg1)); - return addHeapObject(ret); - }, arguments); - }, - __wbg_buffer_55ba7a6b1b92e2ac: function (arg0) { - const ret = getObject(arg0).buffer; - return addHeapObject(ret); - }, - __wbg_new_09938a7d020f049b: function (arg0) { - const ret = new Uint8Array(getObject(arg0)); - return addHeapObject(ret); - }, - __wbg_instanceof_Uint8Array_1349640af2da2e88: function (arg0) { - let result; - try { - result = getObject(arg0) instanceof Uint8Array; - } catch { - result = false; - } - const ret = result; - return ret; - }, - __wbg_length_0aab7ffd65ad19ed: function (arg0) { - const ret = getObject(arg0).length; - return ret; - }, - __wbg_set_3698e3ca519b3c3c: function (arg0, arg1, arg2) { - getObject(arg0).set(getObject(arg1), arg2 >>> 0); - }, - __wbindgen_debug_string: function (arg0, arg1) { - const ret = debugString(getObject(arg1)); - const ptr1 = passStringToWasm0( - ret, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - const len1 = WASM_VECTOR_LEN; - getInt32Memory0()[arg0 / 4 + 1] = len1; - getInt32Memory0()[arg0 / 4 + 0] = ptr1; - }, - __wbindgen_throw: function (arg0, arg1) { - throw new Error(getStringFromWasm0(arg0, arg1)); - }, - __wbindgen_memory: function () { - const ret = wasm.memory; - return addHeapObject(ret); - }, - }, - "./snippets/deno_cache_dir-77bed54ace8005e0/fs.js": import0, -}; - -/** Instantiates an instance of the Wasm module returning its functions. - * @remarks It is safe to call this multiple times and once successfully - * loaded it will always return a reference to the same object. - */ -export function instantiate() { - return instantiateWithInstance().exports; -} - -let instanceWithExports; - -/** Instantiates an instance of the Wasm module along with its exports. - * @remarks It is safe to call this multiple times and once successfully - * loaded it will always return a reference to the same object. - * @returns {{ - * instance: WebAssembly.Instance; - * exports: { url_to_filename: typeof url_to_filename; GlobalHttpCache : typeof GlobalHttpCache ; LocalHttpCache : typeof LocalHttpCache } - * }} - */ -export function instantiateWithInstance() { - if (instanceWithExports == null) { - const instance = instantiateInstance(); - wasm = instance.exports; - cachedInt32Memory0 = new Int32Array(wasm.memory.buffer); - cachedUint8Memory0 = new Uint8Array(wasm.memory.buffer); - instanceWithExports = { - instance, - exports: { url_to_filename, GlobalHttpCache, LocalHttpCache }, - }; - } - return instanceWithExports; -} - -/** Gets if the Wasm module has been instantiated. */ -export function isInstantiated() { - return instanceWithExports != null; -} - -function instantiateInstance() { - const wasmBytes = base64decode( -"\ -AGFzbQEAAAAB3YKAgAAvYAAAYAABf2ABfwBgAX8Bf2ABfwF+YAJ/fwBgAn9/AX9gAn9/AX5gA39/fw\ -BgA39/fwF/YAN/f38BfmAEf39/fwBgBH9/f38Bf2AFf39/f38AYAV/f39/fwF/YAZ/f39/f38AYAZ/\ -f39/f38Bf2AHf39/f39/fwBgB39/f39/f38Bf2ALf39/f39/f39/f38Bf2ANf39/f39/f39/f39/fw\ -BgCX9/f39/f35+fgBgBH9/f34AYAV/f39+fwBgA39/fgBgBH9/fn8AYAR/f35/AX9gBX9/fn9/AGAF\ -f399f38AYAN/f3wAYAV/f3x/fwBgAn9+AGACf34Bf2ADf35/AGADf35/AX9gBH9+f38AYAR/fn9/AX\ -9gBX9+f39/AX9gBX9+f35/AGAFf35+fn4AYAR/fX9/AGACf3wAYAR/fH9/AGAEf3x/fwF/YAJ+fwBg\ -An5/AX9gA35/fwF/AueSgIAALBhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18UX193YmluZGdlbl9lcn\ -Jvcl9uZXcABhhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18aX193YmluZGdlbl9vYmplY3RfZHJvcF9y\ -ZWYAAhhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18VX193YmluZGdlbl9zdHJpbmdfZ2V0AAUYX193Ym\ -luZGdlbl9wbGFjZWhvbGRlcl9fFV9fd2JpbmRnZW5fc3RyaW5nX25ldwAGGF9fd2JpbmRnZW5fcGxh\ -Y2Vob2xkZXJfXyRfX3diZ19yZWFkZmlsZWJ5dGVzXzNiYjgwY2E4MDhiYmE0ZmMABhhfX3diaW5kZ2\ -VuX3BsYWNlaG9sZGVyX18SX193YmluZGdlbl9pc19udWxsAAMYX193YmluZGdlbl9wbGFjZWhvbGRl\ -cl9fF19fd2JpbmRnZW5faXNfdW5kZWZpbmVkAAMYX193YmluZGdlbl9wbGFjZWhvbGRlcl9fJl9fd2\ -JnX2F0b21pY3dyaXRlZmlsZV8zNTIwYWU3M2E1ODU2Y2JkAAwYX193YmluZGdlbl9wbGFjZWhvbGRl\ -cl9fI19fd2JnX21vZGlmaWVkdGltZV9lZTg4MWRhNGE0NjVmMzg5AAgwLi9zbmlwcGV0cy9kZW5vX2\ -NhY2hlX2Rpci03N2JlZDU0YWNlODAwNWUwL2ZzLmpzCHRpbWVfbm93AAEYX193YmluZGdlbl9wbGFj\ -ZWhvbGRlcl9fFV9fd2JpbmRnZW5fbnVtYmVyX2dldAAFGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXx\ -RfX3diaW5kZ2VuX2lzX29iamVjdAADGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXxlfX3diaW5kZ2Vu\ -X2pzdmFsX2xvb3NlX2VxAAYYX193YmluZGdlbl9wbGFjZWhvbGRlcl9fFl9fd2JpbmRnZW5fYm9vbG\ -Vhbl9nZXQAAxhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18dX193YmdfU3RyaW5nXzg4ODEwZGZlYjQw\ -MjE5MDIABRhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18aX193Ymdfc2V0Xzg0MWFjNTdjZmYzZDY3Mm\ -IACBhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18aX193YmdfbmV3X2FiZGE3NmU4ODNiYThhNWYAARhf\ -X3diaW5kZ2VuX3BsYWNlaG9sZGVyX18cX193Ymdfc3RhY2tfNjU4Mjc5ZmU0NDU0MWNmNgAFGF9fd2\ -JpbmRnZW5fcGxhY2Vob2xkZXJfXxxfX3diZ19lcnJvcl9mODUxNjY3YWY3MWJjZmM2AAUYX193Ymlu\ -ZGdlbl9wbGFjZWhvbGRlcl9fFF9fd2JpbmRnZW5faXNfc3RyaW5nAAMYX193YmluZGdlbl9wbGFjZW\ -hvbGRlcl9fFl9fd2JpbmRnZW5faXNfZnVuY3Rpb24AAxhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18a\ -X193YmdfbmV3XzBmMmI3MWNhMmYyYTYwMjkAARhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18bX193Ym\ -dfbmV4dF9mNGJjMGU5NmVhNjdkYTY4AAMYX193YmluZGdlbl9wbGFjZWhvbGRlcl9fHF9fd2JnX3Zh\ -bHVlXzJmNGVmMjAzNmJmYWQyOGUAAxhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18fX193YmdfaXRlcm\ -F0b3JfN2M3ZTU4ZjYyZWI4NDcwMAABGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXxpfX3diZ19uZXdf\ -MmI2ZmVhNGVhMDNiMWI5NQABGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXxpfX3diZ19nZXRfNzMwM2\ -VkMmVmMDI2YjJmNQAGGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXx1fX3diZ19sZW5ndGhfODIwYzc4\ -Njk3M2FiZGQ4YQADGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXy1fX3diZ19pbnN0YW5jZW9mX0Fycm\ -F5QnVmZmVyX2VmMjYzMmFhMGQ0YmZmZjgAAxhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18aX193Ymdf\ -bmV3Xzg3Mjk3ZjIyOTczMTU3YzgABhhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18bX193YmdfY2FsbF\ -81NTdhMmYyZGVhY2M0OTEyAAYYX193YmluZGdlbl9wbGFjZWhvbGRlcl9fGl9fd2JnX3NldF9kYTdi\ -ZTdiZjBlMDM3YjE0AAkYX193YmluZGdlbl9wbGFjZWhvbGRlcl9fG19fd2JnX25leHRfZWMwNjFlND\ -hhMGU3MmE5NgADGF9fd2JpbmRnZW5fcGxhY2Vob2xkZXJfXxtfX3diZ19kb25lX2I2YWJiMjdkNDJi\ -NjM4NjcAAxhfX3diaW5kZ2VuX3BsYWNlaG9sZGVyX18eX193YmdfZW50cmllc18xM2UwMTE0NTM3Nz\ -Y0NjhmAAMYX193YmluZGdlbl9wbGFjZWhvbGRlcl9fGl9fd2JnX2dldF9mNTNjOTIxMjkxYzM4MWJk\ -AAYYX193YmluZGdlbl9wbGFjZWhvbGRlcl9fHV9fd2JnX2J1ZmZlcl81NWJhN2E2YjFiOTJlMmFjAA\ -MYX193YmluZGdlbl9wbGFjZWhvbGRlcl9fGl9fd2JnX25ld18wOTkzOGE3ZDAyMGYwNDliAAMYX193\ -YmluZGdlbl9wbGFjZWhvbGRlcl9fLF9fd2JnX2luc3RhbmNlb2ZfVWludDhBcnJheV8xMzQ5NjQwYW\ -YyZGEyZTg4AAMYX193YmluZGdlbl9wbGFjZWhvbGRlcl9fHV9fd2JnX2xlbmd0aF8wYWFiN2ZmZDY1\ -YWQxOWVkAAMYX193YmluZGdlbl9wbGFjZWhvbGRlcl9fGl9fd2JnX3NldF8zNjk4ZTNjYTUxOWIzYz\ -NjAAgYX193YmluZGdlbl9wbGFjZWhvbGRlcl9fF19fd2JpbmRnZW5fZGVidWdfc3RyaW5nAAUYX193\ -YmluZGdlbl9wbGFjZWhvbGRlcl9fEF9fd2JpbmRnZW5fdGhyb3cABRhfX3diaW5kZ2VuX3BsYWNlaG\ -9sZGVyX18RX193YmluZGdlbl9tZW1vcnkAAQOSjoCAAJAOCw0DDw8PCw8JCAUPBQ8NCA8FCAsDEQsN\ -CwgICAgCDQUGDQ0LJAYDCQYJAw8PDwgMBisFCRAICAsJCAkLCSsJCwgJGgkGBgsFCyIICwkNCQ8FBg\ -UJBQUJCAUJCAwFBQYIBggGBQUNDgsRBg0NCgUICAgICAUXBQ0XBQUNDQILBQUFBQUFBggCDAgGBhUF\ -CAUFBREGCQURCAUFBQgGAwMDCAUSBgUIDwYOEREICwgICAUIBgYEBQUICS4GBgYIFxcIBg8NAw0GCA\ -YJBQIOCwMFBgYLGwIFCAgDCAgGBgYNDQYFBQUFARgGDQgIBQsLCwMFAwgIDQUFBgMLAQUICAUGBQ8D\ -CAgLAwILBgMNCAgICwYZBRYWBQUFAyIGCBcLFwgICA0NCA0ICAgNDQgFCw0LBg0LCwsLCwsLCwsLBg\ -YGDgsDCAgLDAUIBQgUDQ0LCwULCwsbEwsRCwMJAwUDAwMIDwgDCBYWDQsSCQYGBgkLBgsNCBERAwYC\ -AwsLCwsICBkNDQULBQYFBQULJgsLCwgmCwsCCAgFCwMJAwMLBQUIDQMGDQUDAwgFDQgFAwUFBgYGBQ\ -UIBgYFBQgDCAgICAUFBQgFDQILCwsLCwgFBQgMCyAJCAUIBQgDCAgFCwwMBQYCAg4JBQUFDg4FBggL\ -BQgIBQgIBQgICAcNCAYNBQUGBgUDCAUFBQokDAoLBQMJIAUDCAUCBgIFDRcGDRcIJwYCAgkIBQsFCQ\ -gIDggDBwUJBQYFBQUIBQgFCQUGCwUFCQYDAwsJBQUCBQcHBQgCBQMJBQULBQgFCAgICAgFBgUFAggG\ -BiQCBQkFBgUhBgkLCAYFBQsFBQsLBQUFIiUIBQYGBgYGBQkMCQwMBgwMBQ0NCAUFIiQFBQUGBgUIBg\ -YLBgYGCAYGBQMLBQsICwgICwUFCwYkBgYGAwYGBgkFBgYCDQUICAgICA0NDQUNBQ0IDQwNAwUFBQsF\ -BgsFCwgFBggICwsLCAUFAgsFCwkFBgMFBQ0ICAYDBQIFAgMFDwUDBhkIFggFBg8NBQgFBQUIBQUFBQ\ -kDBQYGDQwICAsGAwUMBQwMBQsLBQUFBQgLBQgFCAgFBQUMCwkGCQkPAgIGCCMLCAgLDw8ICAUFBQUF\ -CAgCBQMFBgUICAUICAUPKSkABggGCAsLBgYKCgoPCAECDw8PDwYICwgICwsLCAYCCAIGAgMCAgMFBQ\ -0NDQICAwgFAwsFBQMICAgFBQUFBQYGIAgICAgIBQkFCQkLBQgDBQkJBQgOBgIFAgIGCAgLCwUFAggI\ -BQgCBQgICAYNBQIICAUICAgGAwYJCwgFBQgIBQsLCAsFBQsIBgsLCwsAAAAFAgUFBQUFBQUFCwsLCA\ -YDBQMGBQMDCAgICAgIBQUfBQYGBgYCAgICCxgFBQUFBQsDBQUICQUGBgIFBQUIBQUFAgIJCwYGBQYG\ -BgIFBgUIBQgNBgYLDQoKCgoFCAUFBQgFCAgFCAkFBQgIBQUFDQgFCAgFBgMJBQUICAUICAUICAUNCA\ -gGBgYGBgYGBgsIBgMFBQYGAwsFAgMGAwIFAgkCDQIGBQUFAgYCBQUCAgIGAgMCBgwCBi0FBQ0FBQUF\ -BQUFBQgICw0ICAIGCAgFBgUNBQMDBhsFBQUCBQUNBQUJBQICBQ0FBQIIBgYGBhkGAwkQAwUFBgoKCw\ -UIAgUFAgsFDAUNDg0ODRscHgwLBQYMBQUFBQwMBgULAgYGAgICBgICAgsCAgMCAgICAgYDCgoGBgYF\ -BgYGAwkGBQkFBgUFBQICAgkDAwYLCAIDAgIIAgIGBgMLAgYGBgYGBQUFCAUFAgIBBQMFBgkGBgYGAg\ -ICAgMIBQUCCAIICAIDLAgdAgMGAwIFBgYGAgsGBQIIAgYCAgICICAgICAMCwgBAggGCAgICAgFBgII\ -AgMCCAgCBSADBQYGAgIFBQICAgICAgIJBQICAgIJCQIGAgIGDQIFBgICAgUFBQUGBQUFBQUJAwYGBg\ -YJCAYCBQkIBgIFAggGCAgLCAYGAgkFAgMICAYGBgUFCAYGBgYGBggFAgMCAwYGBQYDAwMIAgkFCAMD\ -CwgJBgkCAgMCIgwJAwMDAwMDBgYJBgIFBQMJCQUCAwMFAwYGBgYGBgkJBgsDAgICBQYGBgYDAwICAg\ -IGBgIfHx8fAgUFAgICBggGAgYCAgYGBgUAAAIGBgYGBgYCBh8IAwMDAwYFBQkFBQYGCQkJCQMDBgYG\ -BgYGBgYGBQUDAwMDBgYGBgMDBQUGAwIDBgMDAwUCAgUGAQYCBgYDAwUFBQICAgIDAgACAwIDCAMDAw\ -MDBAQEBAQEBAQEAwEEBAMGBAADAwMBAQMBBAMEBAQEBAQDAAYBAQMODAkGAwMEAgICCAgCAgICAggC\ -BQICAgACAgICAgICAgICAgICAggCAgIAAgICAgIEh4CAgAABcAHGAsYCBYOAgIAAAQAUBomAgIAAAX\ -8BQYCAwAALB6ODgIAAEQZtZW1vcnkCAA91cmxfdG9fZmlsZW5hbWUAnQMaX193YmdfZ2xvYmFsaHR0\ -cGNhY2hlX2ZyZWUAkgoTZ2xvYmFsaHR0cGNhY2hlX25ldwCeBhpnbG9iYWxodHRwY2FjaGVfZ2V0SG\ -VhZGVycwDxAxtnbG9iYWxodHRwY2FjaGVfZ2V0RmlsZVRleHQA8gMTZ2xvYmFsaHR0cGNhY2hlX3Nl\ -dACeAxlfX3diZ19sb2NhbGh0dHBjYWNoZV9mcmVlAPcEEmxvY2FsaHR0cGNhY2hlX25ldwCzBBlsb2\ -NhbGh0dHBjYWNoZV9nZXRIZWFkZXJzAPMDGmxvY2FsaHR0cGNhY2hlX2dldEZpbGVUZXh0APQDEmxv\ -Y2FsaHR0cGNhY2hlX3NldACfAxFfX3diaW5kZ2VuX21hbGxvYwCsCBJfX3diaW5kZ2VuX3JlYWxsb2\ -MA9gkUX193YmluZGdlbl9leG5fc3RvcmUAjgwfX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRl\ -cgDhDA9fX3diaW5kZ2VuX2ZyZWUAvAsJjoWAgAABAEEBC8UChwyMDYQN5wv9C1G/BNoMtQGlBNwMzg\ -H/DL0LvwaUDqgNrA2TDpcMpg2pDdUNpwyoDLwN8Q3JC50Org2rDdQN0w3SDeoIsAzxDMcFgAu2C9cN\ -3AivCbsCkAbyDf8LqAjeBaYIsA3uDe0Llg7WDdgMnAfnDakMlQ6lCrEN6g3uC5cO4AfMDf8F6w2UBP\ -4F7gy4CLgN8wbtDZ4I7Ay5CLYN9QbpDaAI7wy6CLcN9gboDaEI7A3tDLsIuQ30BuYNnwiqC8IH8Quu\ -C/YMpwvDB/ILrAv1DKkLxQf0C68L9AzyDMQH8wutC/MMqAvBB/ALqwuqDa0Npw2vDfEIxgrvCI4K7g\ -iNCvAIxQqcCb8JgQqFCqIJgwqeCeUJowmyCp0JggqgCcgKnwnHCqEJyQrqDIgD6wyJA+UGsgH5C5gO\ -hQ37DLcMhwLCBZkOmg77C/oL3wXxAYIM2A25DP0MwwWcDpsOgAy4DOAFng70DZ8OoA6hDsAGog6vB9\ -EK9Q2kDoENpQ7hCNoNwAyIAqYObMwB0gq6CrAGngqcCpsKmgqfCqEKoAqdCogKqA7kCI0M2QPiBdwN\ -yQyLDawOqw6PDMgM4wWqDq4O+ATVCv4NwwrfDIwK3QeLApUMlgywDv0F1gqADuALsQ7QDJIN6AXFC8\ -YLmQzHC5MN3g2cDJsMyQ2CDpgMsg6RDf8Hyg3SBoEO0QaACqAMngzABbMO4AbeAakFtA6tCp0MugnB\ -Cp8MtQ7+CoMOhQ7gCb0ChQSBB6IMhA7oCrgO4gbXDKoF6wi5DoELmQ3CCsoF2QzbDOMLqgydC8oLyw\ -uTBfsB7AGrCboO4wb8AawFuw6SDqANerQCywWfDd4MqgKrBaIClQQK39KRgACQDo4wAh1/BH4jAEHA\ -CmsiBCQAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCABKQMAIi\ -FQDQAgASkDCCIiUA0BIAEpAxAiI1ANAiAhICN8IiQgIVQNAyAhICJUDQQgA0ERSQ0FIAEsABohBSAB\ -LwEYIQEgBCAhPgIAIARBAUECICFCgICAgBBUIgYbNgKgASAEQQAgIUIgiKcgBhs2AgQgBEEIakEAQZ\ -gBEKENGiAEICI+AqgBIARBAUECICJCgICAgBBUIgYbNgLIAiAEQQAgIkIgiKcgBhs2AqwBIARBqAFq\ -QQhqQQBBmAEQoQ0aIAQgIz4C0AIgBEEBQQIgI0KAgICAEFQiBhs2AvADIARBACAjQiCIpyAGGzYC1A\ -IgBEHQAmpBCGpBAEGYARChDRogBEH4A2pBBHJBAEGcARChDRogBEEBNgL4AyAEQQE2ApgFIAGtwyAk\ -Qn98eX1CwprB6AR+QoChzaC0AnxCIIinIgbBIQcCQAJAIAHBIghBAEgNACAEIAEQTBogBEGoAWogAR\ -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\ -cgBkGIA2oQ2AoMAwsgBkEIahDQCEGAg8AAIQlBCCEKQQAhDSAGKQMQIRogBikDCCEdQQAhD0EAIQ5B\ -ACEQQQAhEQsgBkG4AWpBCGogBkGUA2ooAgA2AgAgBkHgAmpBCGogBkGIA2pBHGopAgA3AwAgBkHgAm\ -pBEGogBkGIA2pBJGopAgA3AwAgBkHgAmpBGGogBkGIA2pBLGooAgA2AgAgBiAGKQKMAzcDuAEgBiAG\ -KQKcAzcD4AIgBigCiAMhBwwCC0GcrMAAQQcQzgUhBwwEC0EAIQgLIAEgAS0AGEEBajoAGCAGQdQBai\ -AGQbgBakEIaigCADYCACAGQeQBaiAGQeACakEIaikDADcCACAGQewBaiAGQfACaikDADcCACAGQfQB\ -aiAGQfgCaigCADYCACAGIAYpA7gBNwLMASAGIAYpA+ACNwLcASAGIAEQsQIiCzYCqAIgBiAMNgKkAi\ -AGIA02AqACIAYgDzYCnAIgBiAKNgKYAiAGIA42ApQCIAYgEDYCkAIgBiARNgKMAiAGIAk2AogCIAYg\ -GjcDgAIgBiAdNwP4ASAGIAg2AtgBIAYgBzYCyAECQAJAIAhFDQAgCw0BIAZBqAFqQQhqIAZBuAFqQQ\ -hqKAIANgIAIAYgBikDuAE3A6gBIAZB2ABqIAZB3AFqQcwAEKQNGgwGC0EAIQggC0UNBSAGQagCahCv\ -CQwFCyAGQcgBahDlC0EAIQggCyEHDAQLIAZBGDYCyAEgASAGQcgBahDdCCEBCyAAQQA2AhAgACABNg\ -IADAQLIAZBiANqENYLIAZBsAJqENMLQQAhCAsgASABLQAYQQFqOgAYIAYgARDFAyILNgKoAiAGIBk2\ -AqQCIAYgGDYCoAIgBiAXNgKcAiAGIBM2ApgCIAYgFjYClAIgBiAVNgKQAiAGIBQ2AowCIAYgDzYCiA\ -IgBiAcNwOAAiAGIB03A/gBIAYgDDYC9AEgBiANNgLwASAGIAo2AuwBIAYgDjYC6AEgBiAQNgLkASAG\ -IBE2AuABIAYgEjYC3AEgBiAINgLYASAGIBo3A9ABIAYgCTYCzAEgBiAHNgLIAQJAAkAgCEUNACALDQ\ -EgBkGoAWpBCGogBkHIAWpBBHIiC0EIaigCADYCACAGIAspAgA3A6gBIAZB2ABqIAZB3AFqQcwAEKQN\ -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\ -kDKDcCACAAQQhqIANBKGpBCGooAgA2AgAMAQsgASgCDEEBOgAAIAMoAighASADIAMoAjAiCDYClAEg\ -AyABNgKQASADQThqIANBkAFqENcCQRQhAiADQRhqQRRBABDVBCADQQA2AlAgAyADKQMYNwNIIAMgAS\ -AIajYCXCADIAE2AlgCQANAIAJFDQEgAyACQX9qNgJgIANB2ABqEIMDIgJBgIDEAEYNASADIAI2AnAg\ -AkE/Rg0BAkACQEGIps8AELsNIANB8ABqEOsJDQAgA0GQAWogAygCcBDBAiADQfgAaiADQZABahDyBi\ -ADQcgAaiADQfgAahDaBAwBCyADQcgAakHfABDYBAsgAygCYCECDAALCyADKAJQIQIgAygCSCEBAkAC\ -QCAEDQBB4ILAACEEQQAhBQwBCyADQRBqIAEgAiAEIAUQ0QkgA0EQakEEciADQdAAaiADKAIQIgEbKA\ -IAIQIgASADKAJIIAEbIQELIAMgAjYCbCADIAE2AmggAyAFNgJ0IAMgBDYCcAJAAkAgAkUNACADIANB\ -6ABqNgKsASADQQhqIANBOGpBBUHUpsAAEIAGIANBpAFqQQE2AgAgA0GQAWpBDGpBATYCACADQfgAak\ -EMakIDNwIAIANBAjYClAEgA0EDNgJ8IANBvKbAADYCeCADIAMpAwg3A1ggAyADQfAAajYCoAEgAyAD\ -QdgAajYCmAEgAyADQawBajYCkAEgAyADQZABajYCgAEgACADQfgAahCPBAwBCyADIANBOGpBB0Gsps\ -AAEIAGIANB+ABqQQxqQQE2AgAgA0GQAWpBDGpCAjcCACADQQE2AnwgA0ECNgKUASADQZymwAA2ApAB\ -IAMgAykDADcDWCADIANB8ABqNgKAASADIANB2ABqNgJ4IAMgA0H4AGo2ApgBIAAgA0GQAWoQjwQLIA\ -NByABqEOMMIANBOGoQ4wwgA0EoahDjDAsgA0GwAWokAAvZCQEGfyAAENENIQAgACAAEJUNIgEQzg0h\ -AgJAAkACQCAAEJYNDQAgACgCACEDAkACQCAAENQMDQAgAyABaiEBIAAgAxDPDSIAQQAoAoirT0cNAS\ -ACKAIEQQNxQQNHDQJBACABNgKAq08gACABIAIQ/wkPC0Hgp88AIAAgA2sgAyABakEQaiIAEI4ORQ0C\ -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\ -QYCt4gQgBRshBQsgCCABa0EBasEiCSAEwSIBTA0BIAZB//8DcSEKIAkgBGvBIAMgCSABayADSRsiC0\ -F/aiEMQQAhAQNAIAcgBW4hBiADIAFGDQggByAGIAVsayEHIAIgAWogBkEwajoAACAMIAFGDQkgCCAB\ -Rg0DIAFBAWohASAFQQpJIQYgBUEKbiEFIAZFDQALQdCTzgBBGUHklc4AEIMHAAsgAEEANgIADwsgAC\ -ACIANBACAJIAQgDUIKgCAFrSAPhiASELcBDwsgAUEBaiEBIApBf2pBP3GtIRFCASENA0ACQCANIBGI\ -UA0AIABBADYCAA8LIAEgA08NByACIAFqIA5CCn4iDiAPiKdBMGo6AAAgDUIKfiENIA4gEIMhDiALIA\ -FBAWoiAUcNAAsgACACIAMgCyAJIAQgDiASIA0QtwEPC0GLg84AQRxB6JTOABCDBwALQfiUzgBBJEGc\ -lc4AEIMHAAsgAUHRAEGIks4AEIEFAAtBnJTOAEEhQayVzgAQgwcACyADIANB9JXOABCBBQALIAAgAi\ -ADIAsgCSAEIAetIA+GIA58IAWtIA+GIBIQtwEPCyABIANBhJbOABCBBQALmgkCA38CfiMAQYACayIC\ -JAAgAiABNgI8IAJB+ABqIAJBPGoQjgIgAigCeCEBAkACQAJAAkACQAJAAkACQAJAAkAgAi0AfCIDQX\ -5qDgICAAELIAEQ7w0hASAAQQA2AgAgACABNgIEDAgLIAJBwABqIAEgA0EARxDgCiACQQhqENAIIAIp\ -AwghBSACKQMQIQYgAkH4AGpBABCDCCACIAY3A5ABIAIgBTcDiAEgAkG8AWohAwJAAkADQCACQZgBai\ -ACQcAAahCxAyACKAKYAQ0BAkACQCACKAKcASIBDQBBACEBDAELIAIgAikDoAEiBTcC5AEgAiABNgLg\ -ASACQfABaiACQcAAahDKCiACKALwAUUNBSACQdgAakEIaiACQfABakEIaigCADYCACACIAIpA/ABNw\ -NYCyADIAIpA1g3AgAgA0EIaiACQdgAakEIaiIEKAIANgIAIAIgBTcCtAEgAiABNgKwASABRQ0CIAJB\ -6ABqQQhqIAJBsAFqQQhqKAIANgIAIAJB0AFqQQhqIAQoAgA2AgAgAiACKQOwATcDaCACIAIpA1g3A9\ -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\ -OgAEIABBeGohACAHQQhqIQcMAAsLIARBsAFqJAAgCEEQSQuICQEBfyMAQTBrIgIkAAJAAkACQAJAAk\ -ACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAAtAAAOEgABAgMEBQYHCAkKCwwNDg8QEQALIAIg\ -AC0AAToACCACQSRqQgE3AgAgAkECNgIcIAJB6NvNADYCGCACQeYBNgIUIAIgAkEQajYCICACIAJBCG\ -o2AhAgASACQRhqEK0FIQAMEQsgAiAAKQMINwMIIAJBJGpCATcCACACQQI2AhwgAkHM280ANgIYIAJB\ -5wE2AhQgAiACQRBqNgIgIAIgAkEIajYCECABIAJBGGoQrQUhAAwQCyACIAApAwg3AwggAkEkakIBNw\ -IAIAJBAjYCHCACQczbzQA2AhggAkHoATYCFCACIAJBEGo2AiAgAiACQQhqNgIQIAEgAkEYahCtBSEA\ -DA8LIAIgACsDCDkDCCACQSRqQgE3AgAgAkECNgIcIAJBsNvNADYCGCACQekBNgIUIAIgAkEQajYCIC\ -ACIAJBCGo2AhAgASACQRhqEK0FIQAMDgsgAiAAKAIENgIIIAJBJGpCATcCACACQQI2AhwgAkGQ280A\ -NgIYIAJB6gE2AhQgAiACQRBqNgIgIAIgAkEIajYCECABIAJBGGoQrQUhAAwNCyACIAApAgQ3AwggAk\ -EkakIBNwIAIAJBATYCHCACQfzazQA2AhggAkHrATYCFCACIAJBEGo2AiAgAiACQQhqNgIQIAEgAkEY\ -ahCtBSEADAwLIAJBJGpCADcCACACQQE2AhwgAkHs2s0ANgIYIAJB9NjNADYCICABIAJBGGoQrQUhAA\ -wLCyACQSRqQgA3AgAgAkEBNgIcIAJB5NrNADYCGCACQfTYzQA2AiAgASACQRhqEK0FIQAMCgsgAkEk\ -akIANwIAIAJBATYCHCACQdDazQA2AhggAkH02M0ANgIgIAEgAkEYahCtBSEADAkLIAJBJGpCADcCAC\ -ACQQE2AhwgAkG82s0ANgIYIAJB9NjNADYCICABIAJBGGoQrQUhAAwICyACQSRqQgA3AgAgAkEBNgIc\ -IAJBpNrNADYCGCACQfTYzQA2AiAgASACQRhqEK0FIQAMBwsgAkEkakIANwIAIAJBATYCHCACQZTazQ\ -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\ -FqIQECQANAIAFBf2oiAUUNASAJQTAgCigCEBEGAEUNAAtBAQ8LQQEhASAJIAQgBSAKKAIMEQkADQAg\ -ACAMOgAgIAAgBjYCEEEADwsgAQuABwEBfyMAQRBrIgMkAAJAAkACQAJAAkACQAJAAkACQAJAIAEOKA\ -EICAgICAgICAIECAgDCAgICAgICAgICAgICAgICAgICAgHCAgICAYACyABQdwARg0EDAcLIABBgAQ7\ -AQogAEIANwECIABB3OAAOwEADAcLIABBgAQ7AQogAEIANwECIABB3OgBOwEADAYLIABBgAQ7AQogAE\ -IANwECIABB3OQBOwEADAULIABBgAQ7AQogAEIANwECIABB3NwBOwEADAQLIABBgAQ7AQogAEIANwEC\ -IABB3LgBOwEADAMLIAJBgAJxRQ0BIABBgAQ7AQogAEIANwECIABB3M4AOwEADAILIAJBgIAEcUUNAC\ -AAQYAEOwEKIABCADcBAiAAQdzEADsBAAwBCwJAAkACQCACQQFxRQ0AIAEQyAFFDQAgA0EGakECakEA\ -OgAAIANBADsBBiADQf0AOgAPIAMgAUEPcUG4t84Aai0AADoADiADIAFBBHZBD3FBuLfOAGotAAA6AA\ -0gAyABQQh2QQ9xQbi3zgBqLQAAOgAMIAMgAUEMdkEPcUG4t84Aai0AADoACyADIAFBEHZBD3FBuLfO\ -AGotAAA6AAogAyABQRR2QQ9xQbi3zgBqLQAAOgAJIAFBAXJnQQJ2QX5qIgFBC08NASADQQZqIAFqIg\ -JBAC8A9LdOOwAAIAJBAmpBAC0A9rdOOgAAIAAgAykBBjcAACAAQQhqIANBBmpBCGovAQA7AAAgAEEK\ -OgALIAAgAToACgwDCwJAIAEQtQINACADQQZqQQJqQQA6AAAgA0EAOwEGIANB/QA6AA8gAyABQQ9xQb\ -i3zgBqLQAAOgAOIAMgAUEEdkEPcUG4t84Aai0AADoADSADIAFBCHZBD3FBuLfOAGotAAA6AAwgAyAB\ -QQx2QQ9xQbi3zgBqLQAAOgALIAMgAUEQdkEPcUG4t84Aai0AADoACiADIAFBFHZBD3FBuLfOAGotAA\ -A6AAkgAUEBcmdBAnZBfmoiAUELTw0CIANBBmogAWoiAkEALwD0t047AAAgAkECakEALQD2t046AAAg\ -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\ -AKNgIEIAAgAzYCACACQSBqJAALxwMBA38jAEHQAGsiAiQAIAJBCGogARC6BAJAAkACQAJAIAItAAgN\ -ACACLQAJDQIgAkEFNgIQIAEgAkEQahDdCCEBDAELIAIoAgwhAQsgAEEANgIQIAAgATYCAAwBCwJAAk\ -AgAi0ACkH7AEcNACABIAEtABhBf2oiAzoAGAJAIANB/wFxDQAgAkEYNgIQIAEgAkEQahDdCCEBIABB\ -ADYCECAAIAE2AgAMAwsgARCDDCACIAEQhAwgAkEQaiACKAIAIAItAARBAXEQnQEgASABLQAYQQFqOg\ -AYIAIgARDFAyIDNgJAAkACQCACKAIgIgRFDQAgA0UNASACQRBqENoKIAMhBAwDCyACKAIQIQQgA0UN\ -AiACQcAAahCvCQwCCyAAIAIpAhQ3AgQgACACKQIkNwIUIABBDGogAkEQakEMaigCADYCACAAQRxqIA\ -JBEGpBHGopAgA3AgAgAEEkaiACQRBqQSRqKQIANwIAIABBLGogAkEQakEsaigCADYCACACKAIQIQEg\ -ACAENgIQIAAgATYCAAwCCyABIAJByABqQeydwAAQeCEECyABIAQQvg0hASAAQQA2AhAgACABNgIACy\ -ACQdAAaiQAC8cDAQN/IwBB0ABrIgIkACACQQhqIAEQugQCQAJAAkACQCACLQAIDQAgAi0ACQ0CIAJB\ -BTYCECABIAJBEGoQ3QghAQwBCyACKAIMIQELIABBADYCECAAIAE2AgAMAQsCQAJAIAItAApB+wBHDQ\ -AgASABLQAYQX9qIgM6ABgCQCADQf8BcQ0AIAJBGDYCECABIAJBEGoQ3QghASAAQQA2AhAgACABNgIA\ -DAMLIAEQgwwgAiABEIQMIAJBEGogAigCACACLQAEQQFxEIYBIAEgAS0AGEEBajoAGCACIAEQxQMiAz\ -YCQAJAAkAgAigCICIERQ0AIANFDQEgAkEQahDYCiADIQQMAwsgAigCECEEIANFDQIgAkHAAGoQrwkM\ -AgsgACACKQIUNwIEIAAgAikCJDcCFCAAQQxqIAJBEGpBDGooAgA2AgAgAEEcaiACQRBqQRxqKQIANw\ -IAIABBJGogAkEQakEkaikCADcCACAAQSxqIAJBEGpBLGooAgA2AgAgAigCECEBIAAgBDYCECAAIAE2\ -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\ -ACADIAMpA0g3A3AgAyABKQIANwOAASADQZABaiADQRhqIANB8ABqIANBgAFqEOYHIANBkAFqEMwLDA\ -ELCyADKAK0ASECIANBoAFqEOMMCyAAQQA2AhAgACACNgIAIANBGGoQ2QoMAQsgA0HIAGoQ0gsgACAD\ -QRhqQTAQpA0aCyADQcABaiQAC5IEAQF/IwBBwAFrIgEkACABQbwBakEENgIAIAFBtAFqQQQ2AgAgAU\ -GsAWpBBDYCACABQaQBakEENgIAIAFBnAFqQQQ2AgAgAUGUAWpBBDYCACABQYwBakEENgIAIAFBhAFq\ -QQQ2AgAgAUH8AGpBBDYCACABQfQAakEENgIAIAFB7ABqQQQ2AgAgAUHkAGpBBDYCACABQdwAakEENg\ -IAIAFB1ABqQQQ2AgAgAUHMAGpBBDYCACABQcQAakEENgIAIAFBPGpBBDYCACABQTRqQQQ2AgAgAUEs\ -akEENgIAIAFBJGpBBDYCACABQRxqQQM2AgAgAUEUakEDNgIAIAFBDGpBAzYCACABQfGlwAA2ArgBIA\ -FB7aXAADYCsAEgAUHppcAANgKoASABQeWlwAA2AqABIAFB4aXAADYCmAEgAUHdpcAANgKQASABQdml\ -wAA2AogBIAFB1aXAADYCgAEgAUHRpcAANgJ4IAFBzaXAADYCcCABQcmlwAA2AmggAUHFpcAANgJgIA\ -FBwaXAADYCWCABQb2lwAA2AlAgAUG5pcAANgJIIAFBtaXAADYCQCABQbGlwAA2AjggAUGtpcAANgIw\ -IAFBqaXAADYCKCABQaWlwAA2AiAgAUGipcAANgIYIAFBn6XAADYCECABQZylwAA2AgggAUEDNgIEIA\ -FB9aXAADYCACAAIAEQ9wMgAUHAAWokAAu3AwIBfwF+IwBBoAFrIgQkACAEQRBqIAEgAkHwo8AAQQ0Q\ -7gMgBEEwakEoaiADQShqKQMANwMAIARBMGpBIGogA0EgaikDADcDACAEQTBqQRhqIANBGGopAwA3Aw\ -AgBEEwakE4aiADQThqKAIANgIAIAQgAykDEDcDQCAEIAMpAzA3A2AgBCADKAIINgI4IAQgAykDADcD\ -MCAEQQhqQYABQQAQ1QQgBEEANgKAASAEIAQpAwg3A3ggBEGIAWpBBHIQjgsgBCAEQfgAajYCiAECQA\ -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\ -AiAAQQJ0IgBBpPTNAGooAgA2AhwgAiAAQcj1zQBqKAIANgIYIAIgAkEIajYCMCACIAJBGGo2AgggAS\ -ACQShqEK0FIQAMAgsgACgCBCIAKAIAIAAoAgQgARCcDSEADAELIAAoAgQiACgCACABIAAoAgQoAhAR\ -BgAhAAsgAkHAAGokACAADwtBAUEUEJoNAAuRAwECfyMAQcAAayICJAAgAiABELYEAkACQAJAAkAgAi\ -0AAA0AIAItAAENAiACQQU2AhggASACQRhqEM4IIQEMAQsgAigCBCEBCyAAQQE2AgAgACABNgIEDAEL\ -AkACQAJAAkACQAJAIAItAAIiA0H/AXFBLUcNACABIAEoAghBAWo2AgggAkEYaiABQQAQmgEgAikDGE\ -IDUQ0DIAJBCGpBCGogAkEYakEIaikDADcDACACIAIpAxg3AwggAiACQQhqEIYDDAELAkAgA0FQakH/\ -AXFBCkkNACACIAEgAkE4akGogcAAEGg2AgQMBAsgAkEYaiABQQEQmgEgAikDGEIDUQ0BIAJBKGpBCG\ -ogAkEYakEIaikDADcDACACIAIpAxg3AyggAiACQShqEIYDCyACKAIADQIgACACKAIENgIEQQAhAQwD\ -CyAAIAIoAiA2AgQgAEEBNgIADAMLIAAgAigCIDYCBCAAQQE2AgAMAgsgACACKAIEIAEQqQY2AgRBAS\ -EBCyAAIAE2AgALIAJBwABqJAALswMBBn8jAEHAAGsiAyQAAkACQAJAAkAgAEHIAWooAgAoAlAiBCAA\ -KALQASIFayIGIAJLDQAgAEGAAWohBwJAIAVFDQAgA0E4aiAAIAUgBEGI/MAAELMHIAMoAjwhBSADKA\ -I4IQggA0EwaiABIAIgBkGY/MAAELEHIAggBSADKAIwIAMoAjRBqPzAABDzCSADQShqIABBgAEgBEG4\ -/MAAELEHIAcgAygCKCADKAIsEL8DIANBIGogBiABIAJByPzAABCFCSADKAIgIQEgAEEANgLQASADKA\ -IkIQILIARFDQMgA0EYaiABIAIgAiACIARwIgVrIgRB6PzAABCxByAHIAMoAhggAygCHBC/AyAFRQ0C\ -IANBEGogACAFQfj8wAAQ0wcgAygCFCEGIAMoAhAhByADQQhqIAQgASACQYj9wAAQhQkgByAGIAMoAg\ -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\ -ICDQFBgJTr3AMhAgwCCyADIAMpApQBNwOQASADQZABahClDSECIABBgZTr3AM2AgggACACNgIADAML\ -IANBmAFqKQMAIQYgAyACNgJAIAMgBjcCRCADQZABaiACIAZCIIinEOIJIAMoApABIQIgAygCmAEiBE\ -GBlOvcA0YNASADKAKUASEFIANB0AFqQQxqIANBkAFqQQxqQTQQpA0aIAMgBDYC2AEgAyAFNgLUASAD\ -IAI2AtABIANB0ABqIANB0AFqIAEQ0QMgAygCWCECIAMpA1AhBiADQQxqIANB0ABqQQxqQTQQpA0aIA\ -NBwABqEOMMCyAAIAI2AgggACAGNwMAIABBDGogA0EMakE0EKQNGgwBCyACELUNIQIgAEGBlOvcAzYC\ -CCAAIAI2AgAgA0HAAGoQ4wwLIAMQ4wwgA0GQAmokAAuFAwICfwF+IwBB8AFrIgMkABCIByADQdgAai\ -ABIAIQmgkCQAJAIAMoAlgiAkECRg0AIAMoAlwhASADQaABaiADQdgAakEIakHAABCkDRogAyABNgIU\ -IAMgAjYCECADQRBqQQhqIANBoAFqQcAAEKQNGiADQdgAaiADQRBqEIABAkACQCADKAJYDQAgA0HgAW\ -pBCGogA0HkAGooAgAiAjYCACADIAMpAlwiBTcD4AEgA0GgAWogBacgAhCUDSADQQhqIANBoAFqEIoK\ -IAMoAgghASADIAMoAgwiAkEAENUEIAMoAgQhBCADKAIAIAEgAhCkDSEBIANBoAFqEMwLIANB4AFqEO\ -MMIAAgAjYCCCAAIAQ2AgQgACABNgIADAELIAMpAlwhBSADIANB5ABqKAIANgJgIAMgBTcDWCADQdgA\ -ahCyDRDLAyECIABBADYCACAAIAI2AgQLIANBJGoQ4wwMAQsgAy0AXBC0DRDLAyECIABBADYCACAAIA\ -I2AgQLIANB8AFqJAALiAMCA38BfiMAQeAAayICJAAgACkCFCEFIABCATcCFCACQTBqIABBHGoiAygC\ -ADYCACADQQA2AgAgAkEBOgBIIAJBADYCQCACQgA3AjQgAiAFNwMoIABBFGohAAJAAkAgASgCAC0AAA\ -0AIAJBAToAUCABKAIILQAAIQMgAkEIaiABKAIEIgEoAgAgASgCBBDVByACIAJBKGogAyACQdAAaiAC\ -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\ -AzYCCAwACwsgBUEONgIAIAAgASAFEM8INgIEQQEhAwsgACADNgIAIAVBEGokAAusAQIBfwF+IwBB0A\ -BrIgEkACABIAA2AgQgAUEANgIgIAFCATcDGCABQShqIAFBGGpBgInAABDLCAJAIAFBBGogAUEoahC2\ -AUUNAEGYicAAQTcgAUEIakHQicAAQayKwAAQwgQACyABQQhqQQhqIAFBGGpBCGooAgAiADYCACABIA\ -EpAxgiAjcDCCACpyAAEMINIQAgAUEIahDjDCABQQRqEOILIAFB0ABqJAAgAAuoAQEEfyMAQRBrIgIk\ -ACACQQhqIAFBASAAQcwAaigCACIDQQBHIABBHGooAgAiBEEAR2oQmwMgAigCCCEBAkAgAi0ADCIFQQ\ -NGDQAgAiAFOgAEIAIgATYCAAJAIARFDQAgAkGVrMAAQQcgABCyBSIBDQELAkAgA0UNACACQZyswABB\ -ByAAQTBqELAFIgENAQsgAigCACACLQAEEOcGIQELIAJBEGokACABC7IBAQJ/IwBBEGsiBSQAAkACQA\ -JAIAMNACAEDQELIAEoAggiAyABKAIEIgQgAyAESxshBCABKAIAIQYDQAJAAkAgBCADRg0AIAYgA2ot\ -AABBUGpB/wFxQQpJDQELIABEAAAAAAAAAABEAAAAAAAAAIAgAhs5AwhBACEDDAMLIAEgA0EBaiIDNg\ -IIDAALCyAFQQ42AgAgACABIAUQ3wg2AgRBASEDCyAAIAM2AgAgBUEQaiQAC6gBAQZ/IwBBEGsiAiQA\ -AkACQAJAIAEoAgANAAJAIAEoAghFDQAgAUEMaiEDDAILQQAhBEEBIQVBACEDDAILIAFBBGohAwsgAk\ -EIaiABIAMoAgAiBhCAByACKAIIIQcgAiACKAIMIgNBABDVBCACKAIEIQQgAigCACIFIAcgAxCkDRog\ -AUEUaiAGEKAGCyAAIAM2AgggACAENgIEIAAgBTYCACACQRBqJAALnwEBBn9BpgshAUEAIQJBpgshAw\ -NAAkAgAiABSQ0AQQkPCwJAAkACQEEAQX9BASADQQF2IAJqIgNBDGwiBEHwycwAaigCACIFIABJGyIG\ -IAUgAE8bIAYgBEHsycwAaigCACAATRsiBEEBRw0AIAMhAQwBCyAEQf8BcUH/AUcNASADQQFqIQILIA\ -EgAmshAwwBCwsgA0EMbEH0ycwAai0AAAuoAQECfyMAQRBrIgEkACAAEIMMQQEhAgJAA0AgASAAEN4I\ -AkACQAJAIAEtAAANACABLQABQVBqQf8BcUEKSQ0CAkAgAkEBcQ0AIAEgABDeCCABLQAADQEgAS0AAU\ -EgckHlAEYNAkEAIQAMBQsgAUENNgIAIAAgARDdCCEADAQLIAEoAgQhAAwDCyAAEIcDIQAMAgsgABCD\ -DEEAIQIMAAsLIAFBEGokACAAC6wBAgJ/AX4jAEEQayIDJAACQAJAIAEoAggiBEGAlOvcA0YNACABKQ\ -MAIQUMAQsgAyAAENYGIAMoAgghBCADKQMAIQULIAAgBDYCCCAAIAU3AwAgACABKQMQNwMQIAAgASkD\ -MDcDMCAAQShqIAFBKGopAwA3AwAgAEEgaiABQSBqKQMANwMAIABBGGogAUEYaikDADcDACAAQThqIA\ -FBOGooAgA2AgAgA0EQaiQAC68BAQJ/IwBBMGsiAiQAIAJBgAFBABDVBCACQQA2AhAgAiACKQMANwMI\ -IAJBGGpBBHIQjgsgAiACQQhqNgIYAkACQAJAIAEgAkEYahDMAyIBRQ0AIAJBCGoQ4wwMAQsgAigCDC\ -EBIAIoAggiAw0BCyACIAE2AhhBk4zAAEErIAJBGGpB0IzAAEHkqcAAEMIEAAsgACACKAIQNgIIIAAg\ -ATYCBCAAIAM2AgAgAkEwaiQAC6UBAQJ/IwBBEGsiBSQAIAUgASACELkCIAUoAgQhBiAFKAIAIQECQC\ -ADRQ0AAkAgBiACTw0AIANBASAEKAIUEQUACyAFIAE2AgggBSABIAZqNgIMA0ACQCAFQQhqEK0IIgJB\ -DUsNAEEBIAJ0QYDMAHFFDQAgA0EJIAQoAhQRBQAMAgsgAkGAgMQARw0ACwsgACABNgIAIAAgASAGaj\ -YCBCAFQRBqJAALmQECA38BfgJAIAAgAUF/akEDdGoiAygCACIEIANBeGoiBSgCAE8NACADNQIEIQYg\ -AyAFKQIANwIAIAFBfmohAyABQQN0IABqQWhqIQEDQAJAAkAgA0UNACAEIAEoAgBJDQEgAUEIaiEACy\ -AAIAZCIIYgBK2ENwIADAILIAFBCGogASkCADcCACADQX9qIQMgAUF4aiEBDAALCwudAQEEfyMAQSBr\ -IgIkAANAIAIgARBzAkACQCACKAIARQ0AIAAoAggiAyAAKAIERw0BIAJBEGogARCQBCAAIAIoAhBBAW\ -oiBEF/IAQbEJAKDAELIAIQzAsgAUEoahDNCyACQSBqJAAPCyACQQhqKAIAIQQgACgCACADQQxsaiIF\ -IAIpAwA3AgAgBUEIaiAENgIAIAAgA0EBajYCCAwACwusAQEDfyMAQSBrIgEkACAAQQxqKAIAIQICQA\ -JAAkACQAJAIAAoAgQOAgABAwsgAg0CQaywwAAhAkEAIQAMAQsgAg0BIAAoAgAiAigCBCEAIAIoAgAh\ -AgsgAUEIaiAAQQAQ0gQgASgCDCEDIAEoAgggAiAAEKQNIQIgASAANgIYIAEgAzYCFCABIAI2AhAMAQ\ -sgAUEQaiAAEIgBCyABQRBqEEAhACABQSBqJAAgAAugAQEGfyMAQRBrIgIkACABQQhqIQMCQANAIAEo\ -AgghBCABKAIMIQUgAkEIaiADEKsCIAIoAgwiBkF3aiIHQRdLDQFBASAHdEGTgIAEcQ0ACwsCQAJAIA\ -ZBgIDEAEYNACAAIAIoAggiBzYCBCAAQQhqIAcgBSAEa2ogASgCCGogASgCDGs2AgBBASEBDAELQQAh\ -AQsgACABNgIAIAJBEGokAAugAQEGfyMAQRBrIgIkACABQQhqIQMCQANAIAEoAgghBCABKAIMIQUgAk\ -EIaiADENwEIAIoAgwiBkF3aiIHQRdLDQFBASAHdEGTgIAEcQ0ACwsCQAJAIAZBgIDEAEYNACAAIAIo\ -AggiBzYCBCAAQQhqIAcgBSAEa2ogASgCCGogASgCDGs2AgBBASEBDAELQQAhAQsgACABNgIAIAJBEG\ -okAAudAQEDfyMAQYABayICJAAgAC8BACEDQQAhAANAIAIgAGpB/wBqQTBB1wAgA0EPcSIEQQpJGyAE\ -ajoAACAAQX9qIQAgA0H//wNxIgRBBHYhAyAEQQ9LDQALAkAgAEGAAWoiA0GBAUkNACADQYABQeyezg\ -AQggUACyABQQFB/J7OAEECIAIgAGpBgAFqQQAgAGsQYCEAIAJBgAFqJAAgAAubAQEDfyMAQYABayIC\ -JAAgAC0AACEDQQAhAANAIAIgAGpB/wBqQTBBNyADQQ9xIgRBCkkbIARqOgAAIABBf2ohACADQf8BcS\ -IEQQR2IQMgBEEPSw0ACwJAIABBgAFqIgNBgQFJDQAgA0GAAUHsns4AEIIFAAsgAUEBQfyezgBBAiAC\ -IABqQYABakEAIABrEGAhACACQYABaiQAIAALnAEBA38jAEGAAWsiAiQAIAAtAAAhA0EAIQADQCACIA\ -BqQf8AakEwQdcAIANBD3EiBEEKSRsgBGo6AAAgAEF/aiEAIANB/wFxIgRBBHYhAyAEQQ9LDQALAkAg\ -AEGAAWoiA0GBAUkNACADQYABQeyezgAQggUACyABQQFB/J7OAEECIAIgAGpBgAFqQQAgAGsQYCEAIA\ -JBgAFqJAAgAAujAQIDfwF+QYABIQICQCAAKAIAIgMgAyABKAIAa0ECdSIBaiIEKQAAIgUgBUIBhoNC\ -gIGChIiQoMCAf4N6p0EDdiADIAFBeGogACgCBHFqIgMpAAAiBSAFQgGGg0KAgYKEiJCgwIB/g3mnQQ\ -N2akEHSw0AIAAgACgCCEEBajYCCEH/ASECCyAEIAI6AAAgA0EIaiACOgAAIAAgACgCDEF/ajYCDAuo\ -AQEEfyMAQSBrIgIkACACQRhqIAEQvQQgAkEQaiACKAIYIAIoAhxBLxCUBiACKAIUIQMgAigCECEEIA\ -JBCGogARC9BCACKAIIIQUgAigCDCEBIABBATsBJCAAQQA2AhwgAEKBgICA8AU3AhQgAEEANgIMIABB\ -LzYCACAAIAMgASAEGyIBNgIgIAAgATYCECAAIAE2AgggACAEIAUgBBs2AgQgAkEgaiQAC5kBAQR/Iw\ -BBMGsiAyQAIAMgATYCECADIAE2AgggAyACNgIMIAMgASACajYCFCADQQA2AhggA0EgaiADQQhqENgD\ -IAMoAiAhAiADKAIkIQQgA0EoaiIFKAIAIQYgA0EgaiADQQhqENcDIAAgBSgCACAGQQAgAhsgAygCIB\ -sgBEEAIAIbIgJrNgIEIAAgASACajYCACADQTBqJAALmgEBA38jAEGAAWsiAiQAIAAoAgAhAEEAIQMD\ -QCACIANqQf8AakEwQdcAIABBD3EiBEEKSRsgBGo6AAAgA0F/aiEDIABBD0shBCAAQQR2IQAgBA0ACw\ -JAIANBgAFqIgBBgQFJDQAgAEGAAUHsns4AEIIFAAsgAUEBQfyezgBBAiACIANqQYABakEAIANrEGAh\ -ACACQYABaiQAIAALmQEBA38jAEGAAWsiAiQAIAAoAgAhAEEAIQMDQCACIANqQf8AakEwQTcgAEEPcS\ -IEQQpJGyAEajoAACADQX9qIQMgAEEPSyEEIABBBHYhACAEDQALAkAgA0GAAWoiAEGBAUkNACAAQYAB\ -QeyezgAQggUACyABQQFB/J7OAEECIAIgA2pBgAFqQQAgA2sQYCEAIAJBgAFqJAAgAAuuAQEBfyMAQa\ -ABayICJAAgAiABEMQIIAJB4ABqIAIQzgsCQAJAAkACQCACKAJoQYGU69wDRg0AIAJBIGogAkHgAGpB\ -wAAQpA0aIAIQmAYiAQ0BIAAgAkEgakHAABCkDRogAkEMahDjDAwDCyAAQYGU69wDNgIIIAAgAigCYD\ -YCAAwBCyAAQYGU69wDNgIIIAAgATYCACACQSBqEJ8LCyACQQxqEOMMCyACQaABaiQAC50BAQJ/IwBB\ -IGsiAiQAAkACQAJAIAEQswwiAw0AIAEQtAwiAQ0BIABBADYCAAwCCyACQRBqIAMQzQYgAEEIaiACQR\ -BqQQhqKAIANgIAIAAgAikDEDcCAAwBCyACIAEQxQ02AgwgAkEQaiACQQxqEM0GIABBCGogAkEQakEI\ -aigCADYCACAAIAIpAxA3AgAgAkEMahCMCwsgAkEgaiQAC6EBAQN/IwBBEGsiAyQAAkACQCABKAJEIg\ -RBCU8NACAEIQVBCCEEDAELIAEoAgQhBQsCQAJAIAQgBWsgAkkNAEGBgICAeCEFDAELIANBCGogBSAC\ -aiIEIAVPIAQQlQcgAygCDCEEAkAgAygCCA0AQQAhBQwBCyADIAEgBBDrASADKAIEIQQgAygCACEFCy\ -AAIAQ2AgQgACAFNgIAIANBEGokAAuVAQECfwJAAkAgAEF3aiIBQRhPDQBBASECQZ+AgAQgAXZBAXEN\ -AQtBACECIABBgAFJDQACQCAAQQh2IgFFDQACQAJAIAFBMEYNACABQSBGDQEgAUEWRw0DIABBgC1GDw\ -sgAEGA4ABGDwsgAEH/AXFB38vOAGotAABBAnFBAXYPCyAAQf8BcUHfy84Aai0AAEEBcQ8LIAILqwEB\ -A38jAEEgayIDJAACQCABKAIEIAJJDQAgA0EIaiABEKgJAkACQCADKAIMIgRFDQAgAygCCCAEIAMoAh\ -AgBCACENQEIgVFDQEgASACNgIEIAEgBTYCAAtBgYCAgHghBAsgACACNgIEIAAgBDYCACADQSBqJAAP\ -CyADQRRqQgA3AgAgA0EBNgIMIANBgP/AADYCCCADQcz+wAA2AhAgA0EIakHU/8AAEJgIAAuqAQEEfy\ -MAQSBrIgMkAAJAAkACQAJAIAEoAgQiBCACSQ0AIAQNAQwCCyADQRRqQgA3AgAgA0EBNgIMIANBgP/A\ -ADYCCCADQcz+wAA2AhAgA0EIakHU/8AAEJgIAAtBBCEFIAEoAgBBBCAEQQJ0QQQgAkECdCIEENQEIg\ -ZFDQEgASACNgIEIAEgBjYCAAtBgYCAgHghBQsgACAENgIEIAAgBTYCACADQSBqJAALpwEBAn8jAEEw\ -ayIDJAAgAyACNgIMIAMgATYCCAJAA0AgA0EQaiADQQhqEMcDIAMoAhAiAkGAgMQARg0BIAMoAhghAS\ -ADKAIUIQQCQAJAIAINACAAKAIYIgJFDQEgAkEHIAAoAhwoAhQRBQAMAQsgACACIANBCGoQ2AELIANB\ -7I7BADYCKCADIAE2AiQgAyAENgIgIAAgA0EgahDmBQwACwsgA0EwaiQAC5YBAQF/IwBBwAFrIgMkAC\ -ADIAI2AgwgA0H0AGohAgJAA0AgAEUNASAAIAFGDQEgA0EQaiAAQcgAahC7ByACIAAQlAUgA0HoAGpB\ -CGogA0EQakEIaigCADYCACADIAMpAxA3A2ggA0EQaiADQegAakHUABCkDRogAEHYAGohACADQQxqIA\ -NBEGoQ6AQMAAsLIANBwAFqJAALogEBAX8jAEHgAWsiAiQAIAIgARDDCCACQYABaiACEM8LAkACQAJA\ -AkAgAigCkAFFDQAgAkEgaiACQYABakHgABCkDRogAhCfBiIBDQEgACACQSBqQeAAEKQNGiACQQxqEO\ -MMDAMLIABBADYCECAAIAIoAoABNgIADAELIABBADYCECAAIAE2AgAgAkEgahDlCwsgAkEMahDjDAsg\ -AkHgAWokAAuYAQECfyMAQSBrIgIkACACQQhqIAFBCGopAgA3AwAgAiABKQIANwMAAkACQCAAKAIMDQ\ -AgAkEQaiACEKcEIAIoAhAhAwwBCyACQRBqIAIQpwQgAigCEEEBakEBdiEDCyAAIAMgAEEQahCzCCAC\ -QRBqQQhqIAFBCGopAgA3AwAgAiABKQIANwMQIAJBEGogABCfASACQSBqJAALsAECA38BfiMAQSBrIg\ -IkACACQRBqIAEgAiACIAIgAhB7AkACQCACKAIYIgFBgJTr3ANGDQAgAkHoksAAIAIpAxAgARCqAwJA\ -AkAgAigCCCIBQYCU69wDRw0AQfiSwABBIRCpByEDDAELIAIpAwAiBUIgiKchBCAFpyEDCyAAIAE2Ag\ -ggACAENgIEIAAgAzYCAAwBCyAAQYCU69wDNgIIIAAgAigCEDYCAAsgAkEgaiQAC50BAQV/IwBBIGsi\ -AyQAQQAhBCADQQA2AhggAyABNgIQIAMgATYCCCADIAI2AgwgAyABIAJqNgIUIANBEGohBQJAA0AgAy\ -gCECEGIAMoAhQhByADIAUQqwIgAygCBCICQYCAxABGDQEgAkEhSQ0ACyAHIAZrIAMoAgBqIAMoAhBq\ -IAMoAhRrIQQLIAAgBDYCBCAAIAE2AgAgA0EgaiQAC5gBAQV/IwBBEGsiAiQAQQAhAwJAAkAgASgCAC\ -IEIAEoAgQiBUYNACACQQhqIAQtAAAQ0AYgAigCCEUNACAEQQFqIgYgBUYNACACKAIMIQUgAiAGLQAA\ -ENAGIAIoAgBFDQAgAigCBCEDIAEgBEECajYCACADIAVBBHRqIQFBASEDDAELCyAAIAE6AAEgACADOg\ -AAIAJBEGokAAubAQEDfyMAQRBrIgUkAAJAAkACQAJAIAINAEEBIQYMAQsgAkF/SiIHRQ0BQQAtAPGm\ -TxogAiAHEPcLIgZFDQILIAYgASACEKQNIQEgBUEIaiIGIAI2AgAgBSACNgIEIAUgATYCACAFIAMgBB\ -C/ARogAEEIaiAGKAIANgIAIAAgBSkDADcCACAFQRBqJAAPCxCXCAALIAcgAhCaDQALtAEBA38jAEEQ\ -ayIBJAAgACgCACICQQxqKAIAIQMCQAJAAkACQCACKAIEDgIAAQMLIAMNAkH44M0AIQJBACEDDAELIA\ -MNASACKAIAIgIoAgQhAyACKAIAIQILIAEgAzYCBCABIAI2AgAgAUGw780AIAAoAgQiAhDjDSAAKAII\ -IAIQ5Q0Q9gIACyABQQA2AgQgASACNgIAIAFBnO/NACAAKAIEIgIQ4w0gACgCCCACEOUNEPYCAAubAQ\ -IDfwF+IwBB4ABrIgQkAAJAAkAgASABQRBqIgUgAhDzBCIHIAIQpQUiBg0AIARBCGpBCGogAkEIaigC\ -ADYCACAEIAIpAgA3AwggBEEUaiADQcgAEKQNGiABIAcgBEEIaiAFEL4FGiAAQQI2AgAMAQsgACAGQb\ -h/aiIBQcgAEKQNGiABIANByAAQpA0aIAIQ4wwLIARB4ABqJAALmwEBAn8jAEEgayIEJAAgBEEQaiAB\ -EOcHIAQoAhQhASAEKAIQIQUgBEEIaiACIAMQnQcgBCAEKAIMIgM2AhwgBCAEKAIIIgI2AhggBCAFIA\ -IgAxDXASAEKAIEIQMgBCgCACECIARBGGoQ6QsgASABKAIAQX9qNgIAIAAgAkEARzYCCCAAIANBACAC\ -GzYCBCAAIAM2AgAgBEEgaiQAC5sBAQJ/IwBBIGsiBCQAIARBEGogARDnByAEKAIUIQEgBCgCECEFIA\ -RBCGogAiADEJ0HIAQgBCgCDCIDNgIcIAQgBCgCCCICNgIYIAQgBSACIAMQkwEgBCgCBCEDIAQoAgAh\ -AiAEQRhqEOkLIAEgASgCAEF/ajYCACAAIAJBAEc2AgggACADQQAgAhs2AgQgACADNgIAIARBIGokAA\ -ubAQECfyMAQSBrIgQkACAEQRBqIAEQ6AcgBCgCFCEBIAQoAhAhBSAEQQhqIAIgAxCdByAEIAQoAgwi\ -AzYCHCAEIAQoAggiAjYCGCAEIAUgAiADEPgBIAQoAgQhAyAEKAIAIQIgBEEYahDpCyABIAEoAgBBf2\ -o2AgAgACACQQBHNgIIIAAgA0EAIAIbNgIEIAAgAzYCACAEQSBqJAALmwEBAn8jAEEgayIEJAAgBEEQ\ -aiABEOgHIAQoAhQhASAEKAIQIQUgBEEIaiACIAMQnQcgBCAEKAIMIgM2AhwgBCAEKAIIIgI2AhggBC\ -AFIAIgAxCpASAEKAIEIQMgBCgCACECIARBGGoQ6QsgASABKAIAQX9qNgIAIAAgAkEARzYCCCAAIANB\ -ACACGzYCBCAAIAM2AgAgBEEgaiQAC5YBAQJ/IwBBMGsiAyQAAkACQAJAIAAoAghBgIDEAEYNACAALw\ -EAIgRBA0sNASAAIARBAWo7AQAgACAEQQN0aiIAQQhqIAI2AgAgAEEEaiABOgAADAILIABBDGogASAC\ -EPAGDAELIAJBgIDEAEYNACADQQhqIAAgASACEN8GIAAQ+QogACADQQhqQSQQpA0aCyADQTBqJAALmw\ -EBA38jAEEwayICJAAgAkH4gsAAEIEGIAJBEGpBGGoiAyACKQMINwMAIAJBEGpBEGoiBCACKQMANwMA\ -IAJBADYCHCACQgA3AhQgAkGAg8AANgIQIAJBEGogARCbCCAAQRhqIAMpAwA3AwAgAEEQaiAEKQMANw\ -MAIABBCGogAkEQakEIaikDADcDACAAIAIpAxA3AwAgAkEwaiQAC5sBAQN/IwBBMGsiAiQAIAJB+ILA\ -ABCBBiACQRBqQRhqIgMgAikDCDcDACACQRBqQRBqIgQgAikDADcDACACQQA2AhwgAkIANwIUIAJBgI\ -PAADYCECACQRBqIAEQmgggAEEYaiADKQMANwMAIABBEGogBCkDADcDACAAQQhqIAJBEGpBCGopAwA3\ -AwAgACACKQMQNwMAIAJBMGokAAuYAQEDfyMAQTBrIgMkACADENAIIANBEGpBGGoiBCADKQMINwMAIA\ -NBEGpBEGoiBSADKQMANwMAIANBADYCHCADQgA3AhQgA0GAg8AANgIQIANBEGogASACELAIIABBGGog\ -BCkDADcDACAAQRBqIAUpAwA3AwAgAEEIaiADQRBqQQhqKQMANwMAIAAgAykDEDcDACADQTBqJAALnw\ -EBAX8jAEEQayIEJAACQCAAIAEgAhCxBSICDQAgBEEIaiAAKAIAIgAQsQwgBEEIahC9ByICDQACQAJA\ -IAMoAghBgJTr3ANHDQAgACgCAEHNgsAAQQQQiAwgBEEEOgAIIARBCGoQvQchAgwBCyADIAAQsAMhAg\ -sgAg0AIABBEGpBAToAACAEQQQ6AAggBEEIahC9ByECCyAEQRBqJAAgAguNAQIBfwF+AkAgAa0gA61+\ -IgVCIIinDQACQAJAAkAgAiAFpyIBakF/aiIEIAFJDQAgAyAEQQAgAmtxIgFqQQhqIgMgAUkNASADQY\ -CAgIB4IAJrSw0CIAAgATYCCCAAIAM2AgQgACACNgIADwsgAEEANgIADwsgAEEANgIADwsgAEEANgIA\ -DwsgAEEANgIAC5MBAQV/IwBBIGsiAiQAIAJBADYCFCACIAAoAgQiAyABp3EiBDYCECAAKAIAIQVBCC\ -EGAkADQCACIAUgBGopAAA3AxggAkEIaiAAIAJBGGogAkEQahDbCCACKAIIDQEgAiAGNgIUIAIgBCAG\ -aiADcSIENgIQIAZBCGohBgwACwsgACACKAIMEKYJIQYgAkEgaiQAIAYLmAEBAX8jAEEgayIDJAACQA\ -JAA0ACQCACDQBBACECDAMLIANBCGogABDYBiADLQAIDQECQCADLQAJDQAgA0EFNgIQIAAgA0EQahDf\ -CCECDAMLAkAgAy0ACiABLQAARw0AIAFBAWohASACQX9qIQIMAQsLIANBCTYCECAAIANBEGoQ3wghAg\ -wBCyADKAIMIQILIANBIGokACACC5oBAQN/IwBBEGsiAyQAAkACQCABDQBBwAAhAgwBCwJAIAFB////\ -D0sNACABQQZ0IgRBf0wNACABQYCAgBBJQQZ0IQUCQAJAIAINACADQQhqIAUgBBDtByADKAIIIQIMAQ\ -sgAyAFIARBARCJCCADKAIAIQILIAINASAFIAQQmg0ACxCXCAALIAAgATYCBCAAIAI2AgAgA0EQaiQA\ -C58BAgJ/AX4jAEEQayICJAAgASkCACEEIAEtAAghAyACQQtqIAFBC2otAAA6AAAgAiABLwAJOwAJIA\ -BBABCpCiACIAM6AAggAiAENwMAAkAgAw0AA0ACQAJAIAIQyAkiAUEvRiIDDQAgAUHcAEYNACABQYCA\ -xABGDQMgAkEBOgAIDAELIAAgARDeBAsgAw0AIAFB3ABGDQALCyACQRBqJAALmQEBA38jAEEQayIDJA\ -ACQAJAIAENAEEEIQIMAQsCQCABQarVqtUASw0AIAFBDGwiBEF/TA0AIAFBq9Wq1QBJQQJ0IQUCQAJA\ -IAINACADQQhqIAUgBBDjByADKAIIIQIMAQsgAyAFIAQQ5AcgAygCACECCyACDQEgBSAEEJoNAAsQlw\ -gACyAAIAE2AgQgACACNgIAIANBEGokAAuWAQEDfyMAQTBrIgIkACACENAIIAJBEGpBGGoiAyACKQMI\ -NwMAIAJBEGpBEGoiBCACKQMANwMAIAJBADYCHCACQgA3AhQgAkGAg8AANgIQIAJBEGogARDqAyAAQR\ -hqIAMpAwA3AwAgAEEQaiAEKQMANwMAIABBCGogAkEQakEIaikDADcDACAAIAIpAxA3AwAgAkEwaiQA\ -C58BAQF/IwBBIGsiAyQAAkACQCAAKAIIIAJNDQAgA0EYaiAAIAJBuI3BABCiByADQRBqIAMoAhggAy\ -gCHBCPCCADKAIQRQ0BIAIgAygCFGpBAWohAgJAIAFB/wFxDQAgA0EIaiAAIAJB2I3BABCiByADKAII\ -IAMoAgwQkAgNAQsgACACEKAGCyADQSBqJAAPC0HAgsEAQStByI3BABCDBwALlwEBA38gAEEMaigCAC\ -EBIAAoAhAhAgNAAkACQAJAIAIgAU8NACAAKAIIIgEgAkEDdGooAgAiAyAAKAIURg0BCyAAEIUDIgJB\ -gIDEAEYNASAAIAAoAhRBAWo2AhQgAg8LIAAgA0EBajYCFCAAIAJBAWo2AhAgASACQQN0aigCBA8LIA\ -AoAhAiAiAAKAIMIgFJDQALQYCAxAALmQEBA38jAEEQayIDJAACQAJAIAENAEEEIQIMAQsCQCABQf//\ -//8BSw0AIAFBAnQiBEF/TA0AIAFBgICAgAJJQQJ0IQUCQAJAIAINACADQQhqIAUgBBD3ByADKAIIIQ\ -IMAQsgAyAFIAQQ+AcgAygCACECCyACDQEgBSAEEJoNAAsQlwgACyAAIAE2AgQgACACNgIAIANBEGok\ -AAuZAQEDfyMAQRBrIgMkAAJAAkAgAQ0AQQQhAgwBCwJAIAFB/////wBLDQAgAUEDdCIEQX9MDQAgAU\ -GAgICAAUlBAnQhBQJAAkAgAg0AIANBCGogBSAEEPcHIAMoAgghAgwBCyADIAUgBBD4ByADKAIAIQIL\ -IAINASAFIAQQmg0ACxCXCAALIAAgATYCBCAAIAI2AgAgA0EQaiQAC5oBAgN/AX4jAEEgayICJAAgAU\ -EEaiEDAkAgASgCBA0AIAEoAgAhASACQRBqQQhqIgRBADYCACACQgE3AxAgAiACQRBqNgIcIAJBHGpB\ -4ODNACABEG0aIAJBCGogBCgCACIBNgIAIAIgAikDECIFNwMAIANBCGogATYCACADIAU3AgALIABB/O\ -7NADYCBCAAIAM2AgAgAkEgaiQAC4YBAgV/AX5BACEEAkACQCACrSABKAIEIgVBAWqtfiIJQiCIpw0A\ -IAMgCaciBmpBf2oiByAGSQ0BQQAhBCAFIAdBACADa3EiAmpBCWoiCCACSQ0AIAhBgICAgHggA2tLDQ\ -EgAyEEDAELCyAAIAQ2AgQgAEEIaiAINgIAIAAgASgCACACazYCAAuVAQEBfyMAQcAAayIEJAACQCAA\ -IAEgAhCxBSICDQAgBEEYaiAAKAIAIgAQsQwgBEEYahC9ByICDQAgBEEIaiAEQRhqIAMpAwAQkQIgAC\ -gCACAEKAIIIAQoAgwQiAwgBEEEOgAQIARBEGoQvQciAg0AIABBEGpBAToAACAEQQQ6ABggBEEYahC9\ -ByECCyAEQcAAaiQAIAILlQEBAX8jAEHAAGsiBCQAAkAgACABIAIQsQUiAg0AIARBGGogACgCACIAEL\ -EMIARBGGoQvQciAg0AIARBCGogBEEYaiADKAIAEJUCIAAoAgAgBCgCCCAEKAIMEIgMIARBBDoAECAE\ -QRBqEL0HIgINACAAQRBqQQE6AAAgBEEEOgAYIARBGGoQvQchAgsgBEHAAGokACACC5gBAgN/AX5BgA\ -EhAgJAIAAoAgAiAyABaiIEKQAAIgUgBUIBhoNCgIGChIiQoMCAf4N6p0EDdiADIAAoAgQgAUF4anFq\ -IgEpAAAiBSAFQgGGg0KAgYKEiJCgwIB/g3mnQQN2akEHSw0AIAAgACgCCEEBajYCCEH/ASECCyAEIA\ -I6AAAgAUEIaiACOgAAIAAgACgCDEF/ajYCDAuWAQEBfyMAQTBrIgIkAAJAAkAgACgCDA0AIAAgARDx\ -ASEADAELIAJBLGpBCDYCACACQRhqQQxqQQg2AgAgAkEMakIDNwIAIAJBAzYCBCACQfzPwAA2AgAgAi\ -AAQQxqNgIgIAJBqQE2AhwgAiAANgIYIAIgAEEQajYCKCACIAJBGGo2AgggASACEK0FIQALIAJBMGok\ -ACAAC5cBAQN/IwBBEGsiASQAIABBxABqKAIAIQICQAJAIAAoAghBgIDEAEYNACABQQAgAC8BACAAQQ\ -RqQQRB8J7BABDuBiABKAIEIQMgASgCACEADAELIABBFGooAgAhAyAAKAIMIQALAkAgAyACTw0AIAIg\ -A0GEl8EAEIIFAAsgACACQQN0aiADIAJrIAFBDGoQtAEgAUEQaiQAC5YBAQN/IwBBEGsiASQAIABBMG\ -ooAgAhAgJAAkAgACgCCEGAgMQARg0AIAFBACAALwEAIABBBGpBBEHwnsEAEO4GIAEoAgQhAyABKAIA\ -IQAMAQsgAEEUaigCACEDIAAoAgwhAAsCQCADIAJPDQAgAiADQYSXwQAQggUACyAAIAJBA3RqIAMgAm\ -sgAUEMahC0ASABQRBqJAALjAECAn8BfgJAAkAgAEG5893xeWwgAEGmsoWKA2wiBXOtIAKtIgd+QiCI\ -pyIGIAJPDQAgASAGQQF0ai8BACAAakG5893xeWwgBXOtIAd+QiCIpyICIARJDQEgAiAEQdzJzAAQgQ\ -UACyAGIAJBzMnMABCBBQALIAMgAkECdGooAgAiAkEAIAJBCHYgAEYbC5EBAgF/AX4jAEEgayIDJAAg\ -AyACNgIMIAMgATYCCCAAQRBqIgEgA0EIahDXBCEEIAMgA0EIajYCFCADIAA2AhwgAyADQRRqNgIYIA\ -MgACAEIANBGGpB3J/AABD+AgJAIAMoAgBBAEcgACgCAEEAR3EiAg0AIAAgBCADKAIIIAMoAgwgARCm\ -BRoLIANBIGokACACC54BAQN/IwBBEGsiAiQAIAFBDGooAgAhAwJAAkACQAJAAkAgASgCBA4CAAEDCy\ -ADDQJB4ILAACEDQQAhAQwBCyADDQEgASgCACIDKAIEIQEgAygCACEDCyACQQhqIAFBABDVBCACKAIM\ -IQQgAigCCCADIAEQpA0hAyAAIAE2AgggACAENgIEIAAgAzYCAAwBCyAAIAEQiAELIAJBEGokAAuTAQ\ -EBfyABKAIAIQICQAJAIAEoAigNACAAQQA2AgAgAkGAgMQARw0BIABCATcCBA8LAkAgAkGAgMQARw0A\ -IABBATYCBCAAQQhqIAFBNGooAgAgAUEwaigCAGtBDG4iATYCACAAIAE2AgAPCyAAQQA2AgQgACABQT\ -RqKAIAIAFBMGooAgBrQQxuNgIADwsgAEEANgIEC44BAQF/IwBBMGsiAiQAIAIgATYCHCACQRBqIAEQ\ -AgJAAkAgAigCECIBRQ0AIAJBCGogASACKAIUEJ0HIAJBIGogAigCCCACKAIMEI0LIAIoAiBFDQAgAC\ -ACKQMgNwIAIABBCGogAkEgakEIaigCADYCAAwBCyAAIAJBHGoQ0ggLIAJBHGoQhAsgAkEwaiQAC4sB\ -AQJ/IwBBEGsiBSQAAkAgAyACSQ0AIAMgAUsNAAJAIAMgAU8NACADIAJrIgZBCk8NACAFQQhqIAIgAk\ -EKaiIDIAEgAyABSRsiAyAAIAFBwJvBABDvBiAFKAIIIAUoAgwgBkEBIAZBAUsbIAMQyAULIAVBEGok\ -ACADDwtBhJvBAEEsQbCbwQAQgwcAC4sBAQJ/IwBBEGsiBSQAAkAgAyACSQ0AIAMgAUsNAAJAIAMgAU\ -8NACADIAJrIgZBCk8NACAFQQhqIAIgAkEKaiIDIAEgAyABSRsiAyAAIAFBwJvBABDuBiAFKAIIIAUo\ -AgwgBkEBIAZBAUsbIAMQ5gQLIAVBEGokACADDwtBhJvBAEEsQbCbwQAQgwcAC6YBAQN/IwBBEGsiAi\ -QAQeTjzQAhA0ETIQQCQAJAAkACQCABLQAADgQDAAECAwsgAS0AAUECdCIBQcj1zQBqKAIAIQMgAUGk\ -9M0AaigCACEEDAILIAEoAgQiASgCBCEEIAEoAgAhAwwBCyACQQhqIAEoAgQiASgCACABKAIEKAIgEQ\ -UAIAIoAgwhBCACKAIIIQMLIAAgBDYCBCAAIAM2AgAgAkEQaiQAC5UBAQF/IwBBMGsiAiQAIAAoAgAh\ -ACACQQxqQbQCNgIAIAIgACgCACIANgIQIAJBtQI2AgQgAiAAaDYCFCABQRhqKAIAIQAgAiACQRRqNg\ -IIIAIgAkEQajYCACABKAIUIQEgAkICNwIkIAJBAzYCHCACQZyZzgA2AhggAiACNgIgIAEgACACQRhq\ -EG0hASACQTBqJAAgAQudAQEBfyMAQdAAayIDJAAgA0EIaiABIAIQRQJAAkAgAygCEEGAlOvcA0YNAC\ -AAIANBCGpBwAAQpA0aDAELIANByABqIAEgAhBaAkACQCADLQBIDQAgAy0ASQ0BIABBgJTr3AM2AggM\ -AgsgAygCTCECIABBgZTr3AM2AgggACACNgIAIANBCGoQpQsMAQsgACABIAIQRQsgA0HQAGokAAuFAQ\ -IBfwF+AkACQCABrSADrX4iBUIgiKcNACACIAWnIgFqQX9qIgQgAU8NAQsgAEEANgIADwsCQCADIARB\ -ACACa3EiAWpBCGoiAyABSQ0AAkAgA0GAgICAeCACa0sNACAAIAE2AgggACADNgIEIAAgAjYCAA8LIA\ -BBADYCAA8LIABBADYCAAuVAQECfyMAQSBrIgIkACABQQN0IQMCQAJAAkAgAUH/////AUsNAAJAIANB\ -/P///wdLDQAgAkEYaiADNgIAIAJBBDYCFEEAIQEMAwsgAkEANgIUDAELIAJBGGogAzYCACACQQA2Ah\ -QLQQEhAQsgAiABNgIQIAJBCGogAkEQahD6BiAAIAIoAgwgAigCCBCyDCACQSBqJAALkgEBAn8jAEEQ\ -ayIDJAACQAJAIAEtAABFDQBBAiEEDAELIAMgAhD8BiADKAIEIQICQCADKAIARQ0AQQEhBCABQQE6AA\ -AMAQsgAyACNgIMAkACQCADQQxqEMQMDQBBACEEIAIQFyECDAELIAFBAToAAEECIQQLIANBDGoQlgsL\ -IAAgAjYCBCAAIAQ2AgAgA0EQaiQAC5IBAQF/IwBBEGsiAyQAAkAgACgCCEUNACAAQRRqIABBDGooAg\ -AQoAYLAkACQCABRQ0AIAMgAjYCBCADIAE2AgAgA0EAOgAIIAMgAEEcaigCADYCDCAAQQxqIANBCGpB\ -6I/BABD9BjYCACAAQQE2AgggAEEUakEjEN4EIAAgAxDIAwwBCyAAQQA2AggLIANBEGokAAuPAQEGfy\ -MAQRBrIgIkACABKAIIIQNBACEEIAFBADYCCAJAIANFDQAgAkEIaiABIAFBDGooAgAiBUEBahCAByAC\ -KAIIIQYgAiACKAIMIgNBABDVBCACKAIEIQcgAigCACIEIAYgAxCkDRogAUEUaiAFEKAGIAAgAzYCCC\ -AAIAc2AgQLIAAgBDYCACACQRBqJAALjgEBAn8jAEEgayIDJAAgA0EIaiABLwEAIgQgAmpBABCEBCAD\ -QRBqQQhqIgJBADYCACADIAMpAwg3AxAgA0EAIAQgAUEEakEEQfCewQAQ7gYgA0EQaiADKAIAIgQgBC\ -ADKAIEQQN0ahDEBiABQQA7AQAgACADKQMQNwIAIABBCGogAigCADYCACADQSBqJAALiwEBAn8jAEEg\ -ayIDJAAgA0EIaiABLwEAIgQgAmpBABCDBCADQQA2AhggAyADKQMINwMQAkAgBEEFSQ0AIARBBEHwns\ -EAEIMFAAsgA0EQaiABQQRqIgIgAiAEQQJ0ahDDBiABQQA7AQAgACADKQMQNwIAIABBCGogA0EQakEI\ -aigCADYCACADQSBqJAALoQEBAn8gAS8AACICIAEtAAIiA2ohAQJAAkACQCACRQ0AAkAgAkGc5ABJDQ\ -AgAkGc5ABGDQEMAgsgAkG8lMQAaiwAAEFASA0BCyABRQ0BAkAgAUGc5ABJDQAgAUGc5ABHDQEMAgsg\ -AUG8lMQAaiwAAEG/f0oNAQtBvJTEAEGc5AAgAiABQZyiwQAQ5AsACyAAIAM2AgQgACACQbyUxABqNg\ -IAC4sBAQF/IwBBEGsiAyQAIAMgAjYCDCADIAE2AggDQCADIANBCGoQmwUCQAJAIAMtAABBAXFFDQAg\ -Ay0AASEBIAAoAggiAiAAKAIERw0BIAAgAygCDCADKAIIa0ECakEDbkEBahCqCgwBCyADQRBqJAAPCy\ -AAIAJBAWo2AgggACgCACACaiABOgAADAALC48BAQJ/IwBBwABrIgMkAAJAAkAgAkUNAEEBIQQgAS0A\ -AEEvRg0BC0EAIQQLIAMgBDoAPiADQQY6ACggAyACNgIkIAMgATYCICADQYAEOwE8IAMgA0EgahA4IA\ -MoAgQhASADLQAAIQIgACADKAIINgIEIABBACABQQAgAkEJRhsgAkEKRhs2AgAgA0HAAGokAAuFAQEC\ -fyMAQRBrIgMkAAJAIAFBB2pBACABa3EiBCAEQXhqSQ0AIAQgAmoiAiAESQ0AIAJBgICAgHggAUEEIA\ -FBBEsbIgFrSw0AIAAgATYCACAAIAEgAmpBf2pBACABa3E2AgQgA0EQaiQADwtBmPzNAEErIANBCGpB\ -xPzNAEG4/c0AEMIEAAu0AQIBfwJ+IwBB0ABrIgIkACACQcAAakIANwMAIAJCADcDOCACIAApAwgiAz\ -cDMCACIAApAwAiBDcDKCACIANC88rRy6eM2bL0AIU3AyAgAiADQu3ekfOWzNy35ACFNwMYIAIgBELh\ -5JXz1uzZvOwAhTcDECACIARC9crNg9es27fzAIU3AwggAiABKAIANgJMIAJBCGogAkHMAGpBBBC3Ai\ -ACQQhqEN8BIQMgAkHQAGokACADC4MBAQJ/QQAhBQJAAkAgAiABSQ0AAkAgAUUNAAJAIAEgBEkNACAB\ -IARHDQIMAQsgAyABaiwAAEFASA0BCwJAIAJFDQACQCACIARJDQAgAiAERg0BDAMLIAMgAmosAABBQE\ -gNAgsgAiABayEGIAMgAWohBQwBCwsgACAGNgIEIAAgBTYCAAuJAQEEfyMAQRBrIgMkACADQQhqQQAg\ -AiABKAIAIAEoAgRB3NTAABCUByADKAIMIQEgAygCCCECQQAhBEEBIQUDQAJAIAENACAAIAQ2AgQgAC\ -AFNgIAIANBEGokAA8LQQAgBEEBaiACLQAAQQpGIgYbIQQgAUF/aiEBIAJBAWohAiAFIAZqIQUMAAsL\ -kwEBAX8jAEHAAGsiAiQAIAJCADcDOCACQThqIAAoAgAQKSACQRRqQgE3AgAgAiACKAI8IgA2AjAgAi\ -AANgIsIAIgAigCODYCKCACQdYBNgIkIAJBAjYCDCACQfD/wAA2AgggAiACQShqNgIgIAIgAkEgajYC\ -ECABIAJBCGoQrQUhACACQShqEOQKIAJBwABqJAAgAAuDAQECf0EAIQUCQAJAIAIgAUkNAAJAIAFFDQ\ -ACQCABIARJDQAgASAERw0CDAELIAMgAWosAABBQEgNAQsCQCACRQ0AAkAgAiAESQ0AIAIgBEYNAQwD\ -CyADIAJqLAAAQUBIDQILIAIgAWshBiADIAFqIQUMAQsLIAAgBjYCBCAAIAU2AgALiAEBAn8gASgCCC\ -ECAkACQAJAIAEoAgAiAw0AIAINAUEAIQFBACEDDAILIAEoAgQgA2tBB3YhAwJAIAINAEEAIQEMAgsg\ -AUEMaigCACACa0HYAG4iASADaiEDDAELIAFBDGooAgAgAmtB2ABuIgEhAwsgAEEBNgIEIAAgATYCAC\ -AAQQhqIAM2AgALmwECAX8BfiMAQSBrIgIkAAJAAkACQAJAIAEoAgAOAwABAgALIAAgASsDCBCHBwwC\ -CyAAQQA2AgAgACABKQMINwMIDAELAkACQCABKQMIIgNCAFMNACAAIAM3AwhBACEBDAELIAJBAjoACC\ -ACIAM3AxAgACACQQhqIAJBGGpBuIHAABDpBDYCBEEBIQELIAAgATYCAAsgAkEgaiQAC4QBAQF/IwBB\ -wABrIgIkACACQRhqIAFBGGopAgA3AwAgAkEQaiABQRBqKQIANwMAIAJBCGogAUEIaikCADcDACACIA\ -EpAgA3AwACQCAAIAIQxwEiAUH/AXFBA0cNACACQSBqIAIQOEF/QQAgAi0AIEEKRxshAQsgAkHAAGok\ -ACABQf8BcUULkwEBAn8jAEEQayICJAAgAkEIaiABQQFBAxCbAyACKAIIIQECQCACLQAMIgNBA0YNAC\ -ACIAM6AAQgAiABNgIAIAJBrKrAAEEHIABBEGoQtQUiAQ0AIAJBs6rAAEEDIABBMGoQswUiAQ0AIAJB\ -tqrAAEEDIAAQ+QMiAQ0AIAIoAgAgAi0ABBDnBiEBCyACQRBqJAAgAQuGAQECfyMAQSBrIgIkACACQQ\ -hqIAEoAggiA0EAENUEIAJBADYCGCACIAIpAwg3AxAgA0EMbCEDIAEoAgAhAQNAAkAgAw0AIAAgAikD\ -EDcCACAAQQhqIAJBEGpBCGooAgA2AgAgAkEgaiQADwsgA0F0aiEDIAJBEGogARDmCyABQQxqIQEMAA\ -sLnAEBA38jAEEQayIBJAAgASAAELcFAkACQCABLQAADQBBACECAkACQAJAIAEtAAEiA0GSf2oOCAQB\ -AQEEAQQCAAsCQCADQZ5/ag4FBAEBAQQACyADQSJGDQMgA0EvRg0DIANB3ABGDQMLIAFBDDYCACAAIA\ -EQ4AghAgwCCyABIAAQwAIgAS8BAEUNAQsgASgCBCECCyABQRBqJAAgAguGAQEEfyMAQRBrIgMkAEEA\ -IQQgA0EIaiACQQAQzQQgAygCDCEFIAMoAgggASACEKQNIQYCQANAIAIgBEYNASAGIARqIgEgAS0AAC\ -IBQb9/akH/AXFBGklBBXQgAXI6AAAgBEEBaiEEDAALCyAAIAI2AgggACAGNgIAIAAgBTYCBCADQRBq\ -JAALoAEBAn8jAEEgayICJABBACEDIAJBADsBGCACQRBqIAFB5PjHAEHkHUGstMgAQeQdIAJBGGoQgQ\ -MCQAJAIAIvARANAAwBCyACLwEUIQMgAkEIakHMosoAQecsIAIvARJB6NXLABDpCCACIAIoAgggAigC\ -DCADQejVywAQ+wkgAigCBCEBIAIoAgAhAwsgACABNgIEIAAgAzYCACACQSBqJAALoAEBAn8jAEEgay\ -ICJABBACEDIAJBADsBGCACQRBqIAFBtOzFAEGNEEHQjMYAQY0QIAJBGGoQgQMCQAJAIAIvARANAAwB\ -CyACLwEUIQMgAkEIakG4jccAQc4aIAIvARJB1PjHABDpCCACIAIoAgggAigCDCADQdT4xwAQ+wkgAi\ -gCBCEBIAIoAgAhAwsgACABNgIEIAAgAzYCACACQSBqJAALkAEBA38jAEEQayICJAACQAJAAkACQCAB\ -KAIADQAgASgCBCIDDQEMAgsgASgCCCIDIAEoAgxGDQEgASADQQhqNgIIIAMoAgQhBCADKAIAIQMMAg\ -sgAkEIaiADIAFBCGooAgAiBCgCGBEFACABIAIpAwg3AgQMAQtBACEDCyAAIAQ2AgQgACADNgIAIAJB\ -EGokAAt5AgF/AX4CQAJAIAJBA0sNAEEAIQNCACEEDAELIAAgAWo1AAAhBEEEIQMLAkAgA0EBciACTw\ -0AIAAgAyABamozAAAgA0EDdK2GIASEIQQgA0ECciEDCwJAIAMgAk8NACAAIAMgAWpqMQAAIANBA3St\ -hiAEhCEECyAEC4YBAQJ/IAAoAgAgACABELkEIgRqLQAAIQUCQCAAKAIIDQAgBUEBcUUNACAAQQEgAx\ -CxCCAAIAEQuQQhBAsgACAEIAUgARCsBiAAKAIAQQAgBGtBGGxqIgRBaGoiACACKQIANwIAIABBEGog\ -AkEQaikCADcCACAAQQhqIAJBCGopAgA3AgAgBAuQAQEBfyMAQdABayIEJAAgBEEQaiAAIAEQnQcgBC\ -AEKAIUIgE2AsQBIAQgBCgCECIANgLAASAEQQhqIAIgAxCdByAEIAQoAgwiAzYCzAEgBCAEKAIIIgI2\ -AsgBIARBGGogACABIAIgAxDxBSAEQcgBahDpCyAEQcABahDpCyAEQRhqEMcGIQEgBEHQAWokACABC3\ -kCAX8BfgJAAkAgAkEDSw0AQQAhA0IAIQQMAQsgACABajUAACEEQQQhAwsCQCADQQFyIAJPDQAgACAD\ -IAFqajMAACADQQN0rYYgBIQhBCADQQJyIQMLAkAgAyACTw0AIAAgAyABamoxAAAgA0EDdK2GIASEIQ\ -QLIAQLkgEBAX8jAEHAAGsiBCQAIARBEGogAyABIAIQ0QUgBEECNgI4IARBATsBNCAEIAI2AjAgBEEA\ -NgIsIARBCGogBEEQahD8BAJAIAQoAggiAg0AQdDvwABBK0Gw8cAAEIMHAAsgBCgCDCEBIAQgBEEQah\ -D8BCAAIAQpAwA3AgggACABNgIEIAAgAjYCACAEQcAAaiQAC4MBAQZ/IAEoAggiAiABKAIEIgMgAiAD\ -SxshBCABKAIAIQUCQANAAkAgBCACRw0AQQAhBgwCC0EBIQYgBSACai0AACIHQXdqIgNBF0sNAUEBIA\ -N0QZOAgARxRQ0BIAEgAkEBaiICNgIIDAALCyAAIAY6AAEgAEEAOgAAIABBAmogBzoAAAuIAQEBfyMA\ -QSBrIgEkACABQQhqIAAQtgQCQAJAAkAgAS0ACA0AIAEtAAkNASABQQM2AhAgACABQRBqEM4IIQAMAg\ -sgASgCDCEADAELAkAgAS0ACkE6Rw0AIAAgACgCCEEBajYCCEEAIQAMAQsgAUEGNgIQIAAgAUEQahDO\ -CCEACyABQSBqJAAgAAuHAQEBfyMAQcAAayIDJAAgAyACNgIUIAMgATYCECADIAA2AgwgA0EYakEMak\ -ICNwIAIANBMGpBDGpBBTYCACADQQI2AhwgA0GAksAANgIYIANBCDYCNCADIANBMGo2AiAgAyADQRBq\ -NgI4IAMgA0EMajYCMCADQRhqENYDIQIgA0HAAGokACACC4YBAQN/IAAoAgQiAiABp3EhAyAAKAIAIQ\ -RBCCEAA38CQCAEIANqKQAAQoCBgoSIkKDAgH+DIgFQDQACQCAEIAF6p0EDdiADaiACcSIDaiwAAEF/\ -TA0AIAQpAwBCgIGChIiQoMCAf4N6p0EDdiEDCyADDwsgAyAAaiACcSEDIABBCGohAAwACwuDAQEGfy\ -ABKAIIIgIgASgCBCIDIAIgA0sbIQQgASgCACEFAkADQAJAIAQgAkcNAEEAIQYMAgtBASEGIAUgAmot\ -AAAiB0F3aiIDQRdLDQFBASADdEGTgIAEcUUNASABIAJBAWoiAjYCCAwACwsgACAGOgABIABBADoAAC\ -AAQQJqIAc6AAALiAEBAX8jAEEgayIBJAAgAUEIaiAAELoEAkACQAJAIAEtAAgNACABLQAJDQEgAUED\ -NgIQIAAgAUEQahDdCCEADAILIAEoAgwhAAwBCwJAIAEtAApBOkcNACAAIAAoAghBAWo2AghBACEADA\ -ELIAFBBjYCECAAIAFBEGoQ3QghAAsgAUEgaiQAIAALiAEBA38jAEEgayIDJAAgA0EANgIYIAMgASAC\ -ajYCFCADIAE2AhAgAyACNgIMIAMgATYCCCADQRBqIQQCQANAIAMgBBDcBAJAIAMoAgQiBUGAgMQARw\ -0AIAIhBQwCCyAFQSFJDQALIAMoAgAhBQsgACACIAVrNgIEIAAgASAFajYCACADQSBqJAALiwEBAn8j\ -AEEQayICJAACQAJAAkACQCABKAIADQAgASgCCEUNAiABQQxqIQMMAQsgAUEEaiEDCyACQQhqIAEgAS\ -gCMCADKAIAEO0GIAIoAgwhASACKAIIIQMMAQsgAiABIAEoAjAQgAcgAigCBCEBIAIoAgAhAwsgACAD\ -NgIAIAAgATYCBCACQRBqJAALhgEBBH8jAEEQayIBJAAgASAAKAIAIgI2AgggASACIAAoAggiA2o2Ag\ -wgASABQQhqEIACAkAgASgCAEUNACABKAIEIgJBgIDEAEYNAEF/IQQCQCACQYABSQ0AQX4hBCACQf8P\ -TQ0AQX1BfCACQYCABEkbIQQLIAAgBCADajYCCAsgAUEQaiQAC7MBAAJAAkACQAJAAkACQAJAAkACQA\ -JAIAAtAAAOCgABAgMEBQYHCAkACyABQcyTwQBBChD/Cg8LIAFBq5PBAEEhEP8KDwsgAUGYk8EAQRMQ\ -/woPCyABQYSTwQBBFBD/Cg8LIAFB8JLBAEEUEP8KDwsgAUHYksEAQRgQ/woPCyABQb2SwQBBGxD/Cg\ -8LIAFBlJLBAEEpEP8KDwsgAUHhkcEAQTMQ/woPCyABQbyRwQBBJRD/Cgt7AQR/QQAhAQJAA0AgACgC\ -ACECA0ACQCACQQFxRQ0AIAJBA0sNAyABQQpPDQMgAUEDSSECIAFBAWoiAyEBIAINAhC2DiADIQEMAg\ -sgACACQQFyIAAoAgAiAyADIAJGGzYCACADIAJHIQQgAyECIAQNAAsLDwsgAhC6DAALggEBA38jAEEg\ -ayICJAACQCAAKAIIIgMgAU0NACAAKAIAIAFBA3RqIgQgBEEIaiADIAFBf3NqQQN0EKMNGiAAIANBf2\ -o2AgggAkEgaiQADwsgAkEUakIANwIAIAJBATYCDCACQdyWwQA2AgggAkHklsEANgIQIAJBCGpB9JrB\ -ABCYCAALhwEBAX8jAEHAAGsiBSQAIAUgATYCDCAFIAA2AgggBSADNgIUIAUgAjYCECAFQRhqQQxqQg\ -I3AgAgBUEwakEMakGtAjYCACAFQQI2AhwgBUGAns4ANgIYIAVBrgI2AjQgBSAFQTBqNgIgIAUgBUEQ\ -ajYCOCAFIAVBCGo2AjAgBUEYaiAEEJgIAAt+AQR/IAEoAggiBSABKAIEIgYgBSAGSxshBiABKAIAIQ\ -cCQAJAA0AgBiAFRg0BAkAgByAFai0AACIIQVBqQf8BcUEKTw0AIAEgBUEBaiIFNgIIDAELCyAIQSBy\ -QeUARg0BCyAAIAEgAiADIAQQxwIPCyAAIAEgAiADIAQQoAELhAEBA38jAEEQayICJAAgAkEIaiABQQ\ -EgAEEcaigCACIDQQBHEJsDIAIoAgghAQJAIAItAAwiBEEDRg0AIAIgBDoABCACIAE2AgACQCADRQ0A\ -IAJBrKrAAEEHIAAQtgUiAQ0BIAItAAQhBCACKAIAIQELIAEgBBDnBiEBCyACQRBqJAAgAQuFAQECfy\ -MAQRBrIgUkACAFIAIgAyAEEJcCIAVBCGooAgAhBCAFKAIEIQMCQAJAIAUoAgAiBkUNACAAQQg2AhQg\ -ACACNgIQIAAgAzYCBCAAIAEoAgwiAjYCDCAAIAQgAms2AggMAQsgACADNgIEIABBCGogBDYCAAsgAC\ -AGNgIAIAVBEGokAAt+AQR/IAEoAggiBSABKAIEIgYgBSAGSxshBiABKAIAIQcCQAJAA0AgBiAFRg0B\ -AkAgByAFai0AACIIQVBqQf8BcUEKTw0AIAEgBUEBaiIFNgIIDAELCyAIQSByQeUARg0BCyAAIAEgAi\ -ADIAQQyQIPCyAAIAEgAiADIAQQowELiQEBA38gACgCACEDAkACQCAAKAIIIgQgACgCBEYNACADIQUM\ -AQsgACAEQQF0IgU2AgQCQCAFEMELIgUNAEGYmsEAQStB5JrBABCDBwALIAAgBTYCACAFIAMgBEEDdB\ -CkDRogAyAEEJAMCyAAIARBAWo2AgggBSAEQQN0aiIAIAI2AgQgACABNgIAC24BBn4gACADQv////8P\ -gyIFIAFC/////w+DIgZ+IgcgBSABQiCIIgh+IgkgA0IgiCIKIAZ+fCIFQiCGfCIGNwMAIAAgCiAIfi\ -AFIAlUrUIghiAFQiCIhHwgBiAHVK18IAQgAX4gAyACfnx8NwMIC3MBBX9BACECAkAgAEEcaigCACAB\ -QRxqKAIARw0AIABBIGooAgAiAyAAQShqKAIAQRxsaiEEA0AgA0EAIAMgBEciBRsiAEUhAiAARQ0BIA\ -EgABCHBSIGRQ0BIAMgBUEcbGohAyAAQQxqIAYQggsNAAsLIAILiAECA38BfiMAQSBrIgEkAAJAIAAo\ -AgwiAkUNACAAKAIAIgMpAwAhBCAAKAIEIQAgASACNgIYIAEgAzYCECABIAAgA2pBAWo2AgwgASADQQ\ -hqNgIIIAEgBEJ/hUKAgYKEiJCgwIB/gzcDAANAIAEQ6QkiAEUNASAAQWhqEOgLDAALCyABQSBqJAAL\ -iQECA38BfiMAQSBrIgEkAAJAIAAoAgwiAkUNACAAKAIAIgMpAwAhBCAAKAIEIQAgASACNgIYIAEgAz\ -YCECABIAAgA2pBAWo2AgwgASADQQhqNgIIIAEgBEJ/hUKAgYKEiJCgwIB/gzcDAANAIAEQ6gkiAEUN\ -ASAAQax/ahDqCwwACwsgAUEgaiQAC4EBAgF/AX4jAEEgayIDJAACQAJAIAAoAgwNAEEAIQAMAQsgAE\ -EQaiABIAIQmAEhBCADIAI2AhQgAyABNgIQIAMgADYCHCADIANBEGo2AhggA0EIaiAAIAQgA0EYakHI\ -n8AAEP4CIAMoAghBAEcgACgCAEEAR3EhAAsgA0EgaiQAIAALgAEBAn8jAEEQayIDJAACQAJAIAENAE\ -EBIQIMAQsCQCABQX9KIgRFDQACQAJAIAINACADQQhqIAQgARDwByADKAIIIQIMAQsgAyAEIAFBARCL\ -CCADKAIAIQILIAINASAEIAEQmg0ACxCXCAALIAAgATYCBCAAIAI2AgAgA0EQaiQAC4QBAQJ/IwBBEG\ -siAiQAAkACQCABKAIADQBBACEBDAELIAEoAgRBAWohAwJAIAEoAggNACACIAEgAxCAByACKAIEIQMg\ -AigCACEBDAELIAJBCGogASADIAFBDGooAgAQ7QYgAigCDCEDIAIoAgghAQsgACADNgIEIAAgATYCAC\ -ACQRBqJAALfgEDfyMAQRBrIgQkACAEQQA6AAggBCAAQRxqKAIANgIMIARBCGpB/JDBABD9BiEFAkAg\ -ACgCAEUNACAAIAUgAWsgACgCBGo2AgQLAkAgACgCCEUNACAAQQxqIgYgBSABayAGKAIAajYCAAsgAE\ -EUaiACIAMQkwwgBEEQaiQAC4kBAQJ/IwBBEGsiAiQAAkACQCABKAIAIgNFDQAgACgCCA0BIAJBADoA\ -CCACIABBHGooAgA2AgwgAEEMaiACQQhqQbiQwQAQ/QY2AgAgAEEBNgIIIABBFGoiAEEjEN4EIAAgAy\ -ABKAIIEJMMCyABEN8LIAJBEGokAA8LQfiPwQBBL0GokMEAEIMHAAt5AQF/IwBB4ABrIgMkACADQQhq\ -IABBMGogARDtBSADKAIYIQEgA0EIahDUCwJAIAFFDQAgACgCYEUNACADQdAAaiACEKsEIANBCGogAE\ -HgAGogA0HQAGoQqwYgA0EIahDsCiADQdAAahDjDAsgA0HgAGokACABQQBHC34BAn8jAEEQayIDJAAC\ -QAJAIAENAEEBIQIMAQsCQCABQX9KIgRFDQACQAJAIAINACADQQhqIAQgARDqByADKAIIIQIMAQsgAy\ -AEIAEQ6wcgAygCACECCyACDQEgBCABEJoNAAsQlwgACyAAIAE2AgQgACACNgIAIANBEGokAAt+AQJ/\ -IwBBEGsiAyQAAkACQCABDQBBASECDAELAkAgAUF/SiIERQ0AAkACQCACDQAgA0EIaiAEIAEQ8QcgAy\ -gCCCECDAELIAMgBCABEPIHIAMoAgAhAgsgAg0BIAQgARCaDQALEJcIAAsgACABNgIEIAAgAjYCACAD\ -QRBqJAALfAECfyMAQRBrIgUkAAJAAkAgBA0AIAAgASACELoLIAMhBgwBCwJAIAEgA0YNAEEAIQYgBU\ -EIaiADIARBABCOCCAFKAIIIgNFDQEgAyAAIAQQpA0hBCAAIAEgAhC6CyAEIQYMAQsgACACIAEgBBCw\ -CyEGCyAFQRBqJAAgBgt+AQJ/IwBBEGsiAyQAAkACQCABDQBBASECDAELAkAgAUF/SiIERQ0AAkACQC\ -ACDQAgA0EIaiAEIAEQ+gcgAygCCCECDAELIAMgBCABEPsHIAMoAgAhAgsgAg0BIAQgARCaDQALEJcI\ -AAsgACABNgIEIAAgAjYCACADQRBqJAALiQEBAn8gAC0ABCEBAkAgAC0ABQ0AIAFB/wFxQQBHDwtBAS\ -ECAkAgAUH/AXENAAJAIAAoAgAiAS0AHEEEcQ0AIAAgASgCFEG3ns4AQQIgAUEYaigCACgCDBEJACIB\ -OgAEIAEPCyABKAIUQbaezgBBASABQRhqKAIAKAIMEQkAIQILIAAgAjoABCACC6UBAgF/An4jAEHAAG\ -siAiQAIAJBOGpCADcDACACQgA3AzAgAiAAKQMIIgM3AyggAiAAKQMAIgQ3AyAgAiADQvPK0cunjNmy\ -9ACFNwMYIAIgA0Lt3pHzlszct+QAhTcDECACIARC4eSV89bs2bzsAIU3AwggAiAEQvXKzYPXrNu38w\ -CFNwMAIAIgASgCACABKAIEENQIIAIQ3wEhAyACQcAAaiQAIAMLgAEBAn8jAEEQayICJAACQAJAIAFB\ -/wBLDQACQCAAKAIIIgMgACgCBEcNACAAIAMQhwkgACgCCCEDCyAAKAIAIANqIAE6AAAgACAAKAIIQQ\ -FqNgIIDAELIAJBADYCDCACIAEgAkEMahDLAiAAIAIoAgAgAigCBBCIDAsgAkEQaiQAC3wBA38jAEEQ\ -ayIDJAAgA0EIaiAAKAIAIgRBBGogBCAALQAEQQFGEKQJAkAgA0EIahC9ByIFDQAgAEECOgAEIAQgAS\ -gCACIFKAIAIAUoAggQgAgiBQ0AIANBBDoACCADQQhqEL0HIgUNACAAIAIQ3AUhBQsgA0EQaiQAIAUL\ -fwECfyMAQSBrIgIkACACQQhqIgMgAUEIaigCADYCACACIAEpAgA3AwAgAkEQaiACEMoIIAAgAigCEB\ -CZCiACQRBqQQhqIAMoAgA2AgAgAiACKQMANwMQAkADQCACQRBqEPkEIgFBgIDEAEYNASAAIAEQ2AQM\ -AAsLIAJBIGokAAuhAQIBfwJ+IwBBwABrIgIkACACQThqQgA3AwAgAkIANwMwIAIgACkDCCIDNwMoIA\ -IgACkDACIENwMgIAIgA0LzytHLp4zZsvQAhTcDGCACIANC7d6R85bM3LfkAIU3AxAgAiAEQuHklfPW\ -7Nm87ACFNwMIIAIgBEL1ys2D16zbt/MAhTcDACABQRRqIAIQ7AsgAhDfASEDIAJBwABqJAAgA6cLgQ\ -EBBn8jAEEQayICJAAgASgCACEDIAEoAgQhBCACQQhqIAEQjQJBgIDEACEFAkACQCACKAIIDQAMAQsg\ -AigCDCIGQYCAxABGDQAgASABKAIIIgcgBGogAyABKAIEamsgASgCAGo2AgggBiEFCyAAIAU2AgQgAC\ -AHNgIAIAJBEGokAAuBAQEGfyMAQRBrIgIkACABKAIAIQMgASgCBCEEIAJBCGogARCPAkGAgMQAIQUC\ -QAJAIAIoAggNAAwBCyACKAIMIgZBgIDEAEYNACABIAEoAggiByAEaiADIAEoAgRqayABKAIAajYCCC\ -AGIQULIAAgBTYCBCAAIAc2AgAgAkEQaiQAC4ABAQJ/IwBBEGsiAiQAAkACQCABQf8ASw0AAkAgACgC\ -CCIDIAAoAgRHDQAgACADEJUJIAAoAgghAwsgACgCACADaiABOgAAIAAgACgCCEEBajYCCAwBCyACQQ\ -A2AgwgAiABIAJBDGoQ0QIgACACKAIAIAIoAgQQkwwLIAJBEGokAAt6AQR/IAIoAgggAigCBCIDQQN0\ -aiEEIAIoAgAhBQJAA0AgACABRg0BIAAtAAAhAiAAQQA6AAAgBCACOgAAIABBBGoiAigCACEGIAJBAD\ -YCACAEQQRqIAY2AgAgAEEIaiEAIARBCGohBCADQQFqIQMMAAsLIAUgAzYCAAuAAQECfyMAQRBrIgIk\ -AAJAAkAgAUH/AEsNAAJAIAAoAggiAyAAKAIERw0AIAAgAxCVCSAAKAIIIQMLIAAoAgAgA2ogAToAAC\ -AAIAAoAghBAWo2AggMAQsgAkEANgIMIAIgASACQQxqENMCIAAgAigCACACKAIEEJMMCyACQRBqJAAL\ -fQEBfyMAQRBrIgMkAAJAAkAgAQ0AQQEhAgwBCwJAIAFBAEgNAAJAAkAgAg0AIANBCGpBASABEPwHIA\ -MoAgghAgwBCyADQQEgAUEBEJMIIAMoAgAhAgsgAg0BQQEgARCaDQALEJcIAAsgACABNgIEIAAgAjYC\ -ACADQRBqJAALcwECfyMAQdABayICJAAgAkEIaiAAQcgBEKQNGiACQcwBaigCACACKALIASIAayEDIA\ -JBCGogAEEDdGohAAJAA0AgA0UNASABIAAoAgAgAEEEaigCABCOBBogA0F/aiEDIABBCGohAAwACwsg\ -AkHQAWokAAugAQIBfwJ+IwBBwABrIgMkACADQThqQgA3AwAgA0IANwMwIAMgACkDCCIENwMoIAMgAC\ -kDACIFNwMgIAMgBELzytHLp4zZsvQAhTcDGCADIARC7d6R85bM3LfkAIU3AxAgAyAFQuHklfPW7Nm8\ -7ACFNwMIIAMgBUL1ys2D16zbt/MAhTcDACADIAEgAhDUCCADEN8BIQQgA0HAAGokACAEpwt9AQJ/Iw\ -BBEGsiAiQAAkACQCABQf8ASw0AAkAgACgCCCIDIAAoAgRHDQAgACADEIIJIAAoAgghAwsgACADQQFq\ -NgIIIAAoAgAgA2ogAToAAAwBCyACQQA2AgwgAiABIAJBDGoQzwIgACACKAIAIAIoAgQQhgwLIAJBEG\ -okAAt3AQJ/QQAhAgJAIAFBAkkNACAALQAAQd8BcUG/f2pBGUsNAAJAIAAtAAEiA0H8AEYNACADQTpH\ -DQELQQEhAiABQQJGDQBBACECIAAtAAJBXWoiAUH/AXFBOUsNAEKBoICAgYCAgAIgAa1C/wGDiKdBAX\ -EhAgsgAgt8AQF/IwBBIGsiBCQAAkACQCACQX9qIAFPDQADQCABIAJGDQIgBEEAOgAYIARBADYCECAE\ -IAI2AhQgBEEIaiAEQRBqIAAgARD9BCAEKAIIIAQoAgwgBBDJAyACQQFqIQIMAAsLQdCbwQBBLkGAnM\ -EAEIMHAAsgBEEgaiQAC34BAn8jAEEgayICJAAgAkEQaiABQRBqKAIANgIAIAJBCGogAUEIaikCADcD\ -ACACIAEpAgA3AwAgACABKAIYIgMgASgCFCIBaxCpCiACIAM2AhggAiABNgIUAkADQCACEIIEIgFBgI\ -DEAEYNASAAIAEQ4AQMAAsLIAJBIGokAAt3AQF/IwBBgAJrIgIkACACQQhqIAFB1AAQpA0aIAJB4ABq\ -QQhqIAFBCGooAgA2AgAgAiABKQIANwNgIAJB8ABqIAJBFGpByAAQpA0aIAJBuAFqIAAoAgAgAkHgAG\ -ogAkHwAGoQ8AMgAkG4AWoQ7AogAkGAAmokAAt4AQF/IwBBMGsiAyQAIAMgAjYCBCADIAE2AgAgA0EI\ -akEMakICNwIAIANBIGpBDGpBBTYCACADQQI2AgwgA0HskMAANgIIIANBBjYCJCADIAA2AiAgAyADQS\ -BqNgIQIAMgAzYCKCADQQhqENYDIQIgA0EwaiQAIAILngECAX8CfiMAQcAAayICJAAgAkE4akIANwMA\ -IAJCADcDMCACIAApAwgiAzcDKCACIAApAwAiBDcDICACIANC88rRy6eM2bL0AIU3AxggAiADQu3ekf\ -OWzNy35ACFNwMQIAIgBELh5JXz1uzZvOwAhTcDCCACIARC9crNg9es27fzAIU3AwAgASACEOwLIAIQ\ -3wEhAyACQcAAaiQAIAOnC3sCA38BfiAAKAIQIQEgACgCCCECIAApAwAhBAN/AkAgBFANACAAIARCf3\ -wgBIM3AwAgASAEeqdBA3ZBaGxqDwsgACABQcB+aiIBNgIQIAAgAkEIaiIDNgIIIAAgAikDAEJ/hUKA\ -gYKEiJCgwIB/gyIENwMAIAMhAgwACwt8AgN/AX4gACgCECEBIAAoAgghAiAAKQMAIQQDfwJAIARQDQ\ -AgACAEQn98IASDNwMAIAEgBHqnQQN2Qax/bGoPCyAAIAFB4HpqIgE2AhAgACACQQhqIgM2AgggACAC\ -KQMAQn+FQoCBgoSIkKDAgH+DIgQ3AwAgAyECDAALC3kBAX8jAEGgAWsiBCQAAkAgACgCYEUNACAEQc\ -gAaiACEKsEIARB2ABqIAEQlAUgBCAAQeAAaiAEQcgAaiAEQdgAahDwAyAEEOwKCyAEQdgAaiABQcgA\ -EKQNGiAEIABBMGogBEHYAGogAxDACCAEENQLIARBoAFqJAALeQEBfyMAQTBrIgMkACADIAI2AgQgAy\ -ABNgIAIANBCGpBDGpCAjcCACADQSBqQQxqQZ0BNgIAIANBAjYCDCADQeiswAA2AgggA0EGNgIkIAMg\ -ADYCICADIANBIGo2AhAgAyADNgIoIANBCGoQvQYhAiADQTBqJAAgAguBAQEEfwJAA0AQswshAiABKA\ -IAIgNBufPd8XlsQQAgAigCCGt2IgQgAigCBCIFTw0BIAIoAgAgBEEGdGoiBBCVCgJAAkAgAkEAKAKA\ -p09HDQAgASgCACADRg0BCyAEEMQJDAELCyAAIAQ2AgQgACADNgIADwsgBCAFQajcwAAQgQUAC3YBBX\ -8jAEEQayICJAADQCACQQhqIAEQrQMCQAJAIAIoAggiA0UNACACKAIMIQQgACgCCCIFIAAoAgRHDQEg\ -AEEBEKQKDAELIAJBEGokAA8LIAAoAgAgBUEDdGoiBiAENgIEIAYgAzYCACAAIAVBAWo2AggMAAsLcw\ -EEfwJAIAAoAgwiASAAKAIQIgJLDQAgACgCCCIDKAIIIgAgAkkNACADIAE2AgggACACayEEAkACQCAC\ -IAFHDQAgACACRw0BDAILIAAgAkYNASADKAIAIgAgAWogACACaiAEEKMNGgsgAyAEIAFqNgIICwtuAQ\ -N/IwBBwABrIgIkACABKAIEIQMgASgCACEEIAJBCGpBCGogAUEIakEsEKQNGiAAIAMgBGsiAUEBakEB\ -diABIAAoAgwbIABBEGoQrwggAiADNgIMIAIgBDYCCCACQQhqIAAQhgUgAkHAAGokAAudAQIBfwJ+Iw\ -BBwABrIgIkACACQThqQgA3AwAgAkIANwMwIAIgACkDCCIDNwMoIAIgACkDACIENwMgIAIgA0LzytHL\ -p4zZsvQAhTcDGCACIANC7d6R85bM3LfkAIU3AxAgAiAEQuHklfPW7Nm87ACFNwMIIAIgBEL1ys2D16\ -zbt/MAhTcDACABIAIQ6wsgAhDfASEDIAJBwABqJAAgAwudAQIBfwJ+IwBBwABrIgIkACACQThqQgA3\ -AwAgAkIANwMwIAIgACkDCCIDNwMoIAIgACkDACIENwMgIAIgA0LzytHLp4zZsvQAhTcDGCACIANC7d\ -6R85bM3LfkAIU3AxAgAiAEQuHklfPW7Nm87ACFNwMIIAIgBEL1ys2D16zbt/MAhTcDACABIAIQ7Asg\ -AhDfASEDIAJBwABqJAAgAwtyAQJ/IwBBIGsiAiQAAkACQCABKAIADQBBACEBDAELQQAgAUEIaigCAC\ -IDIAEoAgRrIgEgASADSxshAQsgAkEYaiABNgIAIAJBATYCFCACIAE2AhAgAkEIaiACQRBqEMkIIAAg\ -AikDCDcDACACQSBqJAALegIBfwF+IwBBIGsiAyQAIANBCGogAyACEM4KIgIoAgAgAigCCBCwAgJAAk\ -AgAygCCA0AIAMpAgwhBCAAQQxqIANBCGpBDGooAgA2AgAgACAENwIEIABBADYCAAwBCyADIAMpAgw3\ -AxggACADQRhqEJ0ICyADQSBqJAALeAEBfyMAQbABayIBJAAgAUEIaiAAEI8GIAFBoAFqEOMMIAFBkA\ -FqEOMMIAFBEGoQ5QsCQCABQfAAaiIAKAIARQ0AIAAQhwsLIAEoAqwBIgAgACgCACIAQX9qNgIAAkAg\ -AEEBRw0AIAFBrAFqENgICyABQbABaiQAC3gBA38jAEEQayICJAAgASgCACEDIAFBADYCAAJAAkAgA0\ -UNACABKAIEIQQgAkEIakEEQQhBABCRCCACKAIIIgFFDQEgASAENgIEIAEgAzYCACAAQZCfwQA2AgQg\ -ACABNgIAIAJBEGokAA8LEIcOAAtBBEEIEJoNAAuSAQEDf0GAgMQAIQECQAJAAkACQAJAIAAoAggiAk\ -GBgLx/akEAIAJBgIC8f2pBA0kbDgQAAQIEAAsgACgCBCEDIAAgAjYCBCAAKAIAIQEgACADNgIAQYCA\ -xAAhAgwCCyAAKAIAIQEgACAAKAIENgIAQYGAxAAhAgwBCyAAKAIAIQFBgoDEACECCyAAIAI2AggLIA\ -ELbQEBfyMAQRBrIgMkACADQQhqIAAgASACENgFQQAhAgJAAkAgAygCCEEBRw0AIAMoAgwiAiAAQShq\ -KAIAIgFPDQEgAEEgaigCACACQRxsakEMaiECCyADQRBqJAAgAg8LIAIgAUG0nMAAEIEFAAt0AQF/Iw\ -BBwABrIgIkACACIAE2AgwgAkEsakIBNwIAIAJBATYCJCACQaSqwAA2AiAgAkEKNgI8IAIgAkE4ajYC\ -KCACIAJBDGo2AjggAkEQaiACQSBqEI8EIABBJyACQRBqEJsJIAJBDGoQhAsgAkHAAGokAAt7AQR/Iw\ -BBEGsiAiQAQQAhAwJAAkACQCABKAIoIgQOAgIBAAsgASAEQX9qNgIoIAIgARCrASACKAIEIQUgAigC\ -ACEDDAELIAFBADYCKCACQQhqIAEQhAYgAigCDCEFIAIoAgghAwsgACAFNgIEIAAgAzYCACACQRBqJA\ -ALdwEDfyMAQRBrIgQkAAJAIAEoAgQiBUF/Rg0AIAVBAWoiBiEFAkAgAS0ACEEBcQ0AIAEoAgAhBQsg\ -BEEIaiAFIAYgAiADQZCcwQAQ7gYgBCgCDCEBIAAgBCgCCDYCACAAIAE2AgQgBEEQaiQADwtBkJzBAB\ -CZCAALdgEBfyMAQTBrIgIkACACIAE2AgQgAiAANgIAIAJBCGpBDGpCAjcCACACQSBqQQxqQQg2AgAg\ -AkEDNgIMIAJB+P3NADYCCCACQQg2AiQgAiACQSBqNgIQIAIgAkEEajYCKCACIAI2AiAgAkEIakGs/s\ -0AEJgIAAtzAQF/IwBBMGsiAyQAIAMgATYCBCADIAA2AgAgA0EIakEMakICNwIAIANBIGpBDGpBCDYC\ -ACADQQM2AgwgA0Ho/s0ANgIIIANBCDYCJCADIANBIGo2AhAgAyADQQRqNgIoIAMgAzYCICADQQhqIA\ -IQmAgAC3YBAX8jAEEwayICJAAgAiABNgIEIAIgADYCACACQQhqQQxqQgI3AgAgAkEgakEMakEINgIA\ -IAJBAzYCDCACQZj/zQA2AgggAkEINgIkIAIgAkEgajYCECACIAJBBGo2AiggAiACNgIgIAJBCGpBsP\ -/NABCYCAALcwEBfyMAQTBrIgMkACADIAE2AgQgAyAANgIAIANBCGpBDGpCAjcCACADQSBqQQxqQQg2\ -AgAgA0ECNgIMIANB0JzOADYCCCADQQg2AiQgAyADQSBqNgIQIAMgAzYCKCADIANBBGo2AiAgA0EIai\ -ACEJgIAAtzAQF/IwBBMGsiAyQAIAMgADYCACADIAE2AgQgA0EIakEMakICNwIAIANBIGpBDGpBCDYC\ -ACADQQI2AgwgA0Hgos4ANgIIIANBCDYCJCADIANBIGo2AhAgAyADQQRqNgIoIAMgAzYCICADQQhqIA\ -IQmAgAC3MBAX8jAEEwayIDJAAgAyAANgIAIAMgATYCBCADQQhqQQxqQgI3AgAgA0EgakEMakEINgIA\ -IANBAjYCDCADQYCjzgA2AgggA0EINgIkIAMgA0EgajYCECADIANBBGo2AiggAyADNgIgIANBCGogAh\ -CYCAALcwEBfyMAQTBrIgMkACADIAA2AgAgAyABNgIEIANBCGpBDGpCAjcCACADQSBqQQxqQQg2AgAg\ -A0ECNgIMIANBtKPOADYCCCADQQg2AiQgAyADQSBqNgIQIAMgA0EEajYCKCADIAM2AiAgA0EIaiACEJ\ -gIAAtzAQF/IwBBMGsiAyQAIAMgATYCBCADIAA2AgAgA0EIakEMakICNwIAIANBIGpBDGpBCDYCACAD\ -QQM2AgwgA0G4pM4ANgIIIANBCDYCJCADIANBIGo2AhAgAyADNgIoIAMgA0EEajYCICADQQhqIAIQmA\ -gAC2gBAn8jAEHAAGsiAiQAIAJBCGogAEE0EKQNGiACKAIMIAIoAggiA2shACADQQJ0IAJBCGpqQQhq\ -IQMCQANAIABFDQEgASADKAIAEJcGGiADQQRqIQMgAEF/aiEADAALCyACQcAAaiQAC2sBAn8jAEEQay\ -ICJAAgAkEIaiAAIAEQ7wVBACEBAkACQCACKAIIQQFHDQAgAigCDCIBIABBKGooAgAiA08NASAAQSBq\ -KAIAIAFBHGxqQQxqIQELIAJBEGokACABDwsgASADQbScwAAQgQUAC3oBAX8jAEHAAGsiAiQAIAJBAD\ -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\ -AAIAMgBTkDCAwCCyAAKQMIIQQgA0EBOgAAIAMgBDcDCAwBCyAAKQMIIQQgA0ECOgAAIAMgBDcDCAsg\ -AyABIAIQmAMhACADQRBqJAAgAAtuAQF/IwBBIGsiBCQAIAQgAyABIAIQ0wUgAEEBOwEkIAAgAjYCIC\ -AAQQA2AhwgAEEYaiAEQRhqKAIANgIAIABBEGogBEEQaikDADcCACAAQQhqIARBCGopAwA3AgAgACAE\ -KQMANwIAIARBIGokAAtuAQF/IwBBIGsiAyQAIANBLiABIAIQ1QUgAEEBOwEkIAAgAjYCICAAQQA2Ah\ -wgAEEYaiADQRhqKAIANgIAIABBEGogA0EQaikDADcCACAAQQhqIANBCGopAwA3AgAgACADKQMANwIA\ -IANBIGokAAttAQF/IwBBEGsiAiQAIAIgADYCCCACIAAgAWo2AgwCQANAIAJBCGoQhQMiAEGAgMQARg\ -0BIABBX2pB3gBJDQAgABDdDUH/AXEiAUERSw0AQQEgAXRBg4AIcUUNAAsLIAJBEGokACAAQYCAxABH\ -C20BA38jAEEQayICJAACQAJAIAEoAgAiAyABKAIERyIEDQAMAQsgASADQQFqNgIAIAMtAAAiA0ElRw\ -0AIAJBCGogARDtAyACLQAJQSUgAi0ACEEBcRshAwsgACADOgABIAAgBDoAACACQRBqJAALdwEBfyMA\ -QcAAayICJAAgAkEANgIIIAJCATcDACACQRBqIAJBgInAABDLCAJAIAEgAkEQahCHDA0AIAAgAikDAD\ -cCACAAQQhqIAJBCGooAgA2AgAgAkHAAGokAA8LQZiJwABBNyACQThqQdCJwABBrIrAABDCBAALagEB\ -fyMAQRBrIgQkACAEIAIgAxDWBSABKAIIQQxsIQMgASgCACEBA0ACQCADDQAgACAEKQMANwIAIABBCG\ -ogBEEIaigCADYCACAEQRBqJAAPCyADQXRqIQMgBCABEOYLIAFBDGohAQwACwttAQF/IwBBIGsiAiQA\ -IAEQ0QsgAkEIaiABEL0JIAIoAgxBADYCACACQRBqQQhqIAFBCGopAgA3AwAgAiABKQIANwMQIAAgAi\ -kCFDcCACAAQQhqIAJBHGooAgA2AgAgAUEQQQQQsgwgAkEgaiQAC3EBAn8gASgCACECAkACQAJAAkAg\ -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\ -AAAgA0EEOgAIIANBCGoQvQchAQsgA0EQaiQAIAELZwEBfyMAQRBrIgQkAAJAIAAgASACELEFIgINAC\ -AEQQhqIAAoAgAiABCxDCAEQQhqEL0HIgINACAAIAMQlgMiAg0AIABBEGpBAToAACAEQQQ6AAggBEEI\ -ahC9ByECCyAEQRBqJAAgAgtmAQN/IwBBEGsiAyQAIANBCGogACgCACIEQQRqIAQgAC0ABEEBRhCkCQ\ -JAIANBCGoQvQciBQ0AIABBAjoABCAEIAEgAhCACCIFDQAgA0EEOgAIIANBCGoQvQchBQsgA0EQaiQA\ -IAULZwEBfyMAQRBrIgQkAAJAIAAgASACELEFIgINACAEQQhqIAAoAgAiABCxDCAEQQhqEL0HIgINAC\ -AAIAMQlwMiAg0AIABBEGpBAToAACAEQQQ6AAggBEEIahC9ByECCyAEQRBqJAAgAgtnAQF/IwBBEGsi\ -BCQAAkAgACABIAIQsQUiAg0AIARBCGogACgCACIAELEMIARBCGoQvQciAg0AIAMgABDvCyICDQAgAE\ -EQakEBOgAAIARBBDoACCAEQQhqEL0HIQILIARBEGokACACC2cBA38jAEEQayICJAAgAkEIaiAAKAIA\ -IgNBBGogAyAALQAEQQFGEKQJAkAgAkEIahC9ByIEDQAgAEECOgAEIAEoAgAgAxCmCyIEDQAgAkEEOg\ -AIIAJBCGoQvQchBAsgAkEQaiQAIAQLZwEBfyMAQRBrIgQkAAJAIAAgASACELEFIgINACAEQQhqIAAo\ -AgAiABCxDCAEQQhqEL0HIgINACAAIAMQ2wIiAg0AIABBEGpBAToAACAEQQQ6AAggBEEIahC9ByECCy\ -AEQRBqJAAgAgtnAQF/IwBBEGsiBCQAAkAgACABIAIQsQUiAg0AIARBCGogACgCACIAELEMIARBCGoQ\ -vQciAg0AIAAgAxCVAyICDQAgAEEQakEBOgAAIARBBDoACCAEQQhqEL0HIQILIARBEGokACACC24BAX\ -8jAEEgayICJAAgAkEIaiABENgGAkACQAJAIAItAAgNACACLQAJDQEgAkEENgIQIAAgASACQRBqEMwH\ -DAILIAAgAigCDDYCBCAAQQE6AAAMAQsgACACLQAKOgABIABBADoAAAsgAkEgaiQAC2kBAX8jAEEgay\ -IFJAAgBSACNgIEIAUgATYCACAFQQhqQRBqIANBEGopAgA3AwAgBUEIakEIaiADQQhqKQIANwMAIAUg\ -AykCADcDCCAAIAVBjOTAACAFQQRqQYzkwAAgBUEIaiAEEMEBAAtpAQF/IwBBIGsiBSQAIAUgAjYCBC\ -AFIAE2AgAgBUEIakEQaiADQRBqKQIANwMAIAVBCGpBCGogA0EIaikCADcDACAFIAMpAgA3AwggACAF\ -Qcz+wAAgBUEEakHM/sAAIAVBCGogBBDBAQALbAEBfyMAQSBrIgMkACADIAE2AgQgAyAANgIAIANBCG\ -pBEGogAkEQaikCADcDACADQQhqQQhqIAJBCGopAgA3AwAgAyACKQIANwMIQQAgA0HgnM4AIANBBGpB\ -4JzOACADQQhqQcyAzgAQwQEAC2kBAX8jAEEQayICJAAgAUEUakEANgIAIAEgASgCCEEBajYCCCACIA\ -EgAUEMahCNAQJAAkAgAigCAEECRg0AIAAgAigCBCACKAIIEJwGDAELIAAgAigCBDYCBCAAQQE6AAAL\ -IAJBEGokAAtpAQF/IwBBEGsiAiQAIAFBFGpBADYCACABIAEoAghBAWo2AgggAiABIAFBDGoQjQECQA\ -JAIAIoAgBBAkYNACAAIAIoAgQgAigCCBDXBgwBCyAAIAIoAgQ2AgQgAEEANgIACyACQRBqJAALZAEC\ -fyMAQSBrIgMkACADIAI2AhQgAyAANgIcIAMgA0EUajYCGCADQQhqIAAgASADQRhqQaCfwAAQ/gIgAy\ -gCDCECIAMoAgghBCAAKAIAIQAgA0EgaiQAIAAgAkECdGtBACAEGwtnAQJ/IAAoAgAgACABELkEIgRq\ -LQAAIQUCQCAAKAIIDQAgBUEBcUUNACAAQQEgAxCzCCAAIAEQuQQhBAsgACAEIAUgARCsBiAAKAIAQQ\ -AgBGtB1ABsaiIAQax/aiACQdQAEKQNGiAAC2kBAX8jAEEQayICJAAgAUEUakEANgIAIAEgASgCCEEB\ -ajYCCCACIAEgAUEMahDGAQJAAkAgAigCAEECRg0AIAAgAigCBCACKAIIENcGDAELIAAgAigCBDYCBC\ -AAQQA2AgALIAJBEGokAAtsAQF/IwBBMGsiAiQAAkBBAC0A8KZPRQ0AIAJBFGpCATcCACACQQI2Agwg\ -AkG87c0ANgIIIAJBCDYCJCACIAE2AiwgAiACQSBqNgIQIAIgAkEsajYCICACQQhqQeTtzQAQmAgACy\ -ACQTBqJAALZAECfyMAQRBrIgIkAEEAIQMCQCABKAIIRQ0AIAJBCGogAUEIahClBiACKAIIRQ0AIAIg\ -AigCDBC+BiAAIAIpAwA3AgRBASEDIAEgASgCFEEBajYCFAsgACADNgIAIAJBEGokAAtgAQF/IwBBIG\ -siAiQAIAIgADYCBCACQQhqQRBqIAFBEGopAgA3AwAgAkEIakEIaiABQQhqKQIANwMAIAIgASkCADcD\ -CCACQQRqQdSuwAAgAkEIahBtIQEgAkEgaiQAIAELYAEBfyMAQSBrIgIkACACIAA2AgQgAkEIakEQai\ -ABQRBqKQIANwMAIAJBCGpBCGogAUEIaikCADcDACACIAEpAgA3AwggAkEEakHoscAAIAJBCGoQbSEB\ -IAJBIGokACABC2oBAn8jAEEQayICJAAgAkEIaiABEL0EAkACQCACKAIMIgNFDQAgACACKAIIIAMQig\ -gMAQsgAiABEJYGAkAgAigCACIBRQ0AIAAgASACKAIEEIoIDAELIABB4OfAAEEAEIoICyACQRBqJAAL\ -YwEBfyMAQTBrIgMkACADIAE2AhAgAyABNgIIIAMgAjYCDCADIAEgAmo2AhQgA0EANgIYIANBIGogA0\ -EIahDXAyAAIANBKGooAgBBACADKAIgGzYCBCAAIAE2AgAgA0EwaiQAC2UBAX8jAEEQayICJAAgAiAA\ -NgIIIAIgACABajYCDAJAA0AgAkEIahCpCCIAQYCAxABGDQEgAEGA//8AcUGAAUYNACAAQQlGDQAgAE\ -FgakHfAEkNAAsLIAJBEGokACAAQYCAxABGC2ABAX8jAEEgayICJAAgAiAANgIEIAJBCGpBEGogAUEQ\ -aikCADcDACACQQhqQQhqIAFBCGopAgA3AwAgAiABKQIANwMIIAJBBGpBqILBACACQQhqEG0hASACQS\ -BqJAAgAQtpAQF/IwBBEGsiBCQAAkACQCACQX9qIAFPDQADQCABIAJGDQIgBEEIakEAIAJBAWoiAiAA\ -IAFBkJzBABDvBiAEKAIIIAQoAgwgAhDUAwwACwtB0JvBAEEuQYCcwQAQgwcACyAEQRBqJAALYAEBfy\ -MAQSBrIgIkACACIAA2AgQgAkEIakEQaiABQRBqKQIANwMAIAJBCGpBCGogAUEIaikCADcDACACIAEp\ -AgA3AwggAkEEakG83c0AIAJBCGoQbSEBIAJBIGokACABC2QBAn8jAEEQayICJAAgACgCCCEDIAAoAg\ -AhACACIAEQrgkCQCADRQ0AA0AgAiAANgIMIAIgAkEMakHU+s0AEN0MGiAAQQFqIQAgA0F/aiIDDQAL\ -CyACEKwJIQAgAkEQaiQAIAALYAEBfyMAQSBrIgIkACACIAA2AgQgAkEIakEQaiABQRBqKQIANwMAIA\ -JBCGpBCGogAUEIaikCADcDACACIAEpAgA3AwggAkEEakHIoM4AIAJBCGoQbSEBIAJBIGokACABC18B\ -An8jAEEgayIDJAAgA0EIaiACIAFrQQAQ/wMgA0EQakEIaiIEQQA2AgAgAyADKQMINwMQIANBEGogAS\ -ACENQGIABBCGogBCgCADYCACAAIAMpAxA3AgAgA0EgaiQAC2QBAX8jAEEwayICJAAgAiABNgIMIAIg\ -ADYCCCACQRxqQgE3AgAgAkECNgIUIAJBjJHAADYCECACQQE2AiwgAiACQShqNgIYIAIgAkEIajYCKC\ -ACQRBqENYDIQEgAkEwaiQAIAELZAEBfyMAQTBrIgIkACACIAE2AgwgAiAANgIIIAJBHGpCATcCACAC\ -QQI2AhQgAkGkksAANgIQIAJBATYCLCACIAJBKGo2AhggAiACQQhqNgIoIAJBEGoQ1gMhASACQTBqJA\ -AgAQtmAQR/IwBBEGsiAiQAIAJBCGogASgCICIDIAEoAhQiBCABQRxqKAIAIgUQxQYCQCACKAIIIgEN\ -ACAEIAVBACADQcyZwAAQ5AsACyACKAIMIQMgACABNgIAIAAgAzYCBCACQRBqJAALYQEBfyMAQSBrIg\ -EkAAJAIAAoAgANACABQQxqEKgBIAAQkQsgAEEBNgIAIAAgASkCDDcCBCAAQQxqIAFBFGopAgA3AgAg\ -AEEUaiABQRxqKAIANgIACyABQSBqJAAgAEEEagtlAQJ/IwBBEGsiBCQAIARBADYCDCAEIAEgBEEMah\ -DPAiAEKAIEIQUgACADNgIQIABBADYCDCAAQQhqIAM2AgAgACACNgIEIAAgBCgCDDYCGCAAIAU2AhQg\ -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\ -CGpBCGogAUEIaikCADcDACACIAEpAgA3AwggACACQQhqEMcFIQEgAkEgaiQAIAELcgEBf0EBIQICQC\ -AAIAFB/4jBAEEEEKYKDQAgACABQYOJwQBBBRCmCg0AIAAgAUGIicEAQQIQpgoNACAAIAFBionBAEED\ -EKYKDQAgACABQfyIwQBBAxCmCg0AQQBBAiAAIAFBjYnBAEEEEKYKGyECCyACC2ABAX8jAEEgayIDJA\ -ACQCAAKAIIIAFLDQAgA0EUakIANwIAIANBATYCDCADQdyWwQA2AgggA0HklsEANgIQIANBCGogAhCY\ -CAALIAAoAgAhACADQSBqJAAgACABQQN0agtcAQF/IwBBIGsiAiQAIAJBEGpBCGogAUEIaigCADYCAC\ -ACIAEpAgA3AxACQANAIAJBCGogAkEQahCpAiACKAIIIgFFDQEgACABIAIoAgwQlAwMAAsLIAJBIGok\ -AAtfAgF/AX4jAEEgayICJAAgACkCACEDIAIgACgCCDYCGCACIAM3AxACQANAIAJBCGogAkEQahCpAi\ -ACKAIIIgBFDQEgASAAIAIoAgwQ/wpFDQALCyACQSBqJAAgAEEARwtZAQF/IwBBIGsiAiQAIAAoAgAh\ -ACACQQhqQRBqIAFBEGopAgA3AwAgAkEIakEIaiABQQhqKQIANwMAIAIgASkCADcDCCAAIAJBCGoQyQ\ -UhASACQSBqJAAgAQtcAQJ/AkAgAEEQaigCACIBRQ0AIABBFGooAgAhAiABQQA6AAAgAkUNACABIAJB\ -ARCyDAsCQCAAQX9GDQAgACAAKAIEIgFBf2o2AgQgAUEBRw0AIABBGEEIELIMCwtXAAJAIANFDQACQA\ -JAAkAgAiADSw0AIAIgA0cNAQwCCyABIANqLAAAQb9/Sg0BCyABIAIgAyACIAQQ5AsACyACIANrIQIL\ -IAAgAjYCBCAAIAEgA2o2AgALXAEEfyMAQRBrIgIkACABKAIEIQMgAkEIaiABIAEoAgAiBCAEIAEQtg\ -IgAigCDCEFIAEQowYgACADNgIEIAAgBDYCACAAIAUgBGtBDG42AgggARDeByACQRBqJAALXQECfyMA\ -QRBrIgMkACADQQhqIAIgASgCEBCMByADKAIMIQICQCADKAIIIgQNACABQQhqEIYLIAFBDGogAjYCAC\ -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\ -F/IwBBEGsiAiQAIAJBCGogASABKAIAKAIEEQUAIAIgAigCCCACKAIMKAIYEQUAIAIoAgQhASAAIAIo\ -AgA2AgAgACABNgIEIAJBEGokAAtKAQN/AkAgASgCCCICIAEoAgQiA08NACABIAJBAWo2AgggASgCAC\ -ACai0AACEECyAAQQA6AAAgAEECaiAEOgAAIAAgAiADSToAAQtJAQJ/IwBBEGsiAyQAIAAgAiABaxCQ\ -CiAAKAIIIQQgAyAAKAIANgIIIAMgBDYCBCADIABBCGo2AgAgASACIAMQxgIgA0EQaiQAC0cBAn8jAE\ -EQayIEJAAgASACEOoEIQUgBEEIaiACQQhqKAIANgIAIAQgAikCADcDACAAIAFBEGogBSAEIAMQ3AIg\ -BEEQaiQAC0wCAX8BfiMAQSBrIgIkACACQRBqEAmtELYIIAJCAEEAIAIpAxAgAigCGBC6AyACKQMAIQ\ -MgACACKAIINgIIIAAgAzcDACACQSBqJAALSgECfyMAQRBrIgMkACADQQhqIAJBABDSBCADKAIMIQQg\ -AygCCCABIAIQpA0hASAAIAI2AgggACAENgIEIAAgATYCACADQRBqJAALSgEDfwJAIAEoAggiAiABKA\ -IEIgNPDQAgASACQQFqNgIIIAEoAgAgAmotAAAhBAsgAEEAOgAAIABBAmogBDoAACAAIAIgA0k6AAEL\ -SQECfyMAQRBrIgMkACABKAIAIAIoAgAQHiECIANBCGoQxwkgAygCDCEBIAAgAygCCCIENgIAIAAgAS\ -ACIAQbNgIEIANBEGokAAtJAQJ/IwBBEGsiAyQAIAEoAgAgAigCABAjIQIgA0EIahDHCSADKAIMIQEg\ -ACADKAIIIgQ2AgAgACABIAIgBBs2AgQgA0EQaiQAC0wBAn8jAEEQayICJAAgAiABKQIANwMIQYCKwQ\ -BBAiACQQhqEJUGIQEgAigCCCEDIAAgAigCDDYCBCAAIANBACABGzYCACACQRBqJAALTgEBfwJAIAEQ\ -kgwiAkH/AXENACAAEIsEIABBACABEPUDIABBxABqIABBFGooAgAgAC8BACAAKAIIQYCAxABGGzYCAA\ -8LIAAgAiABEPUDC00BAX8CQCABEJIMIgJB/wFxDQAgABCMBCAAQQAgARD1AyAAQTBqIABBFGooAgAg\ -AC8BACAAKAIIQYCAxABGGzYCAA8LIAAgAiABEPUDC0oBAn8jAEEQayIEJABBACEFAkAgASADSQ0AIA\ -RBCGogAyAAIAFBmJjBABDdCSACIAMgBCgCCCAEKAIMEKYKIQULIARBEGokACAFC00BAX8jAEEQayIE\ -JAAgBCABIAEvAQAQnAQgBCACIAMQ8AYgAEGAgMQANgIIIABBFGogBEEIaigCADYCACAAIAQpAwA3Ag\ -wgBEEQaiQAC0oBAX8CQCAAKAIAIgAoAgQgACgCCCIDayACTw0AIAAgAyACEO0CIAAoAgghAwsgACgC\ -ACADaiABIAIQpA0aIAAgAyACajYCCEEAC0wAAkACQCABQQlJDQAgASAAEL4BIQEMAQsgABAuIQELAk\ -AgAUUNAAJAQeCnzwAQkA5FDQAgARDRDRDUDA0BCyABQQAgABChDRoLIAELSgEBfwJAIAAoAgAiACgC\ -BCAAKAIIIgNrIAJPDQAgACADIAIQ7gIgACgCCCEDCyAAKAIAIANqIAEgAhCkDRogACADIAJqNgIIQQ\ -ALRAECfwJAIAAoAgAiACgCACIDIAJqIgQgA0kgBEEPS3IiBA0AIAAgA2pBBGogASACEKQNGiAAIAAo\ -AgAgAmo2AgALIAQLQQACQAJAIAIgAUkNACACIARNDQEgAiAEIAUQgwUACyABQQAgBRCEBQALIAAgAi\ -ABazYCBCAAIAMgAUEMbGo2AgALYQEBfyMAQTBrIgEkACABQS82AiwgAUKigICA8AQ3AiQgAULcgICA\ -oAc3AhwgAUKqgICAwA83AhQgAUK+gICAoAc3AgwgAUK/gICAwAc3AgQgACABQQRqEPYDIAFBMGokAA\ -tIAQF/IwBBEGsiASQAAkAgACgCBEUNACABIAAgACgCECAAQRRqKAIAEIYEIAEoAgAgASgCBCABQQhq\ -KAIAEKQLCyABQRBqJAALQwEBfyMAQRBrIgIkAAJAAkAgAUH/AXENAEEAIQAMAQsgAkEIaiAAQQRqIA\ -AQiwUgAkEIahC9ByEACyACQRBqJAAgAAtSAQF/QQAhAwJAIAEgAkGsqsAAQQcQpgoNAEEBIQMgASAC\ -QbOqwABBAxCmCg0AQQJBAyABIAJBtqrAAEEDEKYKGyEDCyAAQQA6AAAgACADOgABC0UBAX8gACAAKA\ -IIIAAoAgAiBCACai0AAEEBcWs2AgggACACIAEQwQggBCACQQJ0a0F8aiADNgIAIAAgACgCDEEBajYC\ -DAtIAQF/IwBBIGsiBCQAIAQgAiADEGICQAJAIAQoAgANACAAIAQpAgQ3AgAMAQsgBEEPNgIQIAAgAS\ -AEQRBqEM0HCyAEQSBqJAALRwECfyMAQRBrIgMkACADQQhqIgRBADYCACADQgE3AwAgAyABIAIQ5ggg\ -AEEIaiAEKAIANgIAIAAgAykDADcCACADQRBqJAALRwEBfyMAQRBrIgMkACADIAEpAgA3AwggAiADQQ\ -hqEMoJIQEgAygCCCECIAAgAygCDDYCBCAAIAJBACABGzYCACADQRBqJAALSgEBfyMAQRBrIgQkACAE\ -QQhqIAEoAhQgAUEcaigCACACIANBjJHBABCmBiAEKAIMIQEgACAEKAIINgIAIAAgATYCBCAEQRBqJA\ -ALQQACQAJAIAIgAUkNACACIARNDQEgAiAEIAUQgwUACyABIAIgBRCEBQALIAAgAiABazYCBCAAIAMg\ -AUEDdGo2AgALQQACQAJAIAIgAUkNACACIARNDQEgAiAEIAUQgwUACyABIAIgBRCEBQALIAAgAiABaz\ -YCBCAAIAMgAUEDdGo2AgALSgEBfwJAIAAoAggiAyAAKAIERw0AIAAgAxCOCSAAKAIIIQMLIAAoAgAg\ -A0EDdGoiAyACNgIEIAMgAToAACAAIAAoAghBAWo2AggLSwEBfyMAQRBrIgMkACADIAEgAS8BABCdBC\ -ADIAIQuAcgAEGAgMQANgIEIABBEGogA0EIaigCADYCACAAIAMpAwA3AgggA0EQaiQAC1QBAX8CQAJA\ -IAEoAggiAg0AIAAgASgCADYCACABKAIEIgENASAAQYGAxAA2AggPCyAAIAI2AgggACABKQIANwIADw\ -sgAEGAgMQANgIIIAAgATYCBAtIAQF/IwBBEGsiAiQAIAJBCGogARDaByACIAIoAgggAigCDCgCGBEF\ -ACACKAIEIQEgACACKAIANgIAIAAgATYCBCACQRBqJAALSAEBfyMAQRBrIgIkACACQQhqIAEQ2gcgAi\ -ACKAIIIAIoAgwoAhgRBQAgAigCBCEBIAAgAigCADYCACAAIAE2AgQgAkEQaiQAC0gBAX8jAEEQayIC\ -JAAgAkEIaiABENoHIAIgAigCCCACKAIMKAIYEQUAIAIoAgQhASAAIAIoAgA2AgAgACABNgIEIAJBEG\ -okAAtIAQF/IwBBEGsiAiQAIAJBCGogARDaByACIAIoAgggAigCDCgCGBEFACACKAIEIQEgACACKAIA\ -NgIAIAAgATYCBCACQRBqJAALQgEBfyMAQRBrIgMkACADIAI2AgwgASADQQxqENwDIAAgAkF8aigCAD\ -YCACAAIAEoAgAgAmtBAnU2AgQgA0EQaiQAC0UBAX8jAEEgayIDJAAgAyACNgIYIAMgAjYCFCADIAE2\ -AhAgA0EIaiADQRBqEPYKIAAgAygCCCADKAIMEJQLIANBIGokAAtHAQN/IwBBEGsiASQAAkAgACgCRC\ -ICQQlJDQAgACgCCCEDIAEgACgCBDYCCCABIAI2AgQgASADNgIAIAEQtwoLIAFBEGokAAtNAQF/IwBB\ -EGsiAiQAAkAgASgCAA0AIAAgASkCBDcDACACQRBqJAAPCyACIAEpAgQ3AwhBuNzAAEErIAJBCGpB5N\ -zAAEHI3cAAEMIEAAtDAQJ/IwBBEGsiASQAQQAhAgJAIAAQwwxFDQAgASAAKAIAEBY2AgwgAUEMahDB\ -DCECIAFBDGoQlgsLIAFBEGokACACC0QBA38jAEEQayICJAAgASgCABAgIQEgAkEIahDHCSACKAIMIQ\ -MgACACKAIIIgQ2AgAgACADIAEgBBs2AgQgAkEQaiQAC0kBAX8jAEEQayICJAACQCAALQAADQAgACgC\ -BCEAIAJBEGokACAADwsgAiAALQABOgAPQfyCwQBBKyACQQ9qQeyCwQAgARDCBAALRQECfyMAQRBrIg\ -IkACACQQhqIgNBADYCACACQgE3AwAgAiABEP4DIABBCGogAygCADYCACAAIAIpAwA3AgAgAkEQaiQA\ -C0gBAX8jAEEQayIDJAAgA0EIaiABKAIUIAFBHGooAgAgAkGskcEAELEGIAMoAgwhASAAIAMoAgg2Ag\ -AgACABNgIEIANBEGokAAtIAQF/IwBBEGsiAyQAIANBCGogAiABKAIUIAFBHGooAgBBnJHBABD5BSAD\ -KAIMIQEgACADKAIINgIAIAAgATYCBCADQRBqJAALTwECf0EALQDxpk8aIAEoAgQhAiABKAIAIQMCQE\ -EIQQQQ9wsiAQ0AQQRBCBCaDQALIAEgAjYCBCABIAM2AgAgAEGM780ANgIEIAAgATYCAAtDAQF/IwBB\ -EGsiAyQAIAMgASACEGIgAygCBCECIAMoAgAhASAAIANBCGooAgA2AgQgAEEAIAIgARs2AgAgA0EQai\ -QAC0gBAX8jAEEgayIDJAAgA0EMakIANwIAIANBATYCBCADQfz/zQA2AgggAyABNgIcIAMgADYCGCAD\ -IANBGGo2AgAgAyACEJgIAAs/AQF+AkACQCABKQMAIgJQRQ0AQQAhAQwBCyABIAJCf3wgAoM3AwBBAS\ -EBCyAAIAE2AgAgACACeqdBA3Y2AgQLPgACQAJAIAIgAUkNACACIARNDQEgAiAEIAUQgwUACyABIAIg\ -BRCEBQALIAAgAiABazYCBCAAIAMgAWo2AgALRAECfyMAQSBrIgIkACACQQM6AAggAiABOQMQIAJBCG\ -ogAkEYakGogcAAEJgDIQMgAEEBNgIAIAAgAzYCBCACQSBqJAALRAECfyMAQSBrIgIkACACQQM6AAgg\ -AiABOQMQIAJBCGogAkEYakG4gcAAEJgDIQMgAEEBNgIAIAAgAzYCBCACQSBqJAALSAEBfyMAQRBrIg\ -AkAAJAQQAtAPKmT0EDRg0AIABBAToACyAAIABBC2o2AgxB8qbPAEEAIABBDGpBpIXAABD9AgsgAEEQ\ -aiQAC0cBAX8jAEEgayICJAAgAkEUakIANwIAIAJBATYCDCACQdybwAA2AgggAkHggsAANgIQIAEgAk\ -EIahCtBSEBIAJBIGokACABCz4BAn8gASABKAIEIgMgASgCACIEIAJqIgJBAWogAiAESSACIANPciID\ -GzYCACAAIAI2AgQgACADQQFzNgIAC0UBAX8jAEHAAGsiAiQAIAIgACgCACAAKAIIEKQHIAJBIGogAS\ -gCACABKAIIEKQHIAIgAkEgahCKASEAIAJBwABqJAAgAAtFAQF/IwBBEGsiAyQAIANBCGogAiABKAIA\ -IgEoAgAgASgCCBCxCyADKAIMIQEgACADKAIINgIAIAAgATYCBCADQRBqJAALQAECfyMAQdAAayIEJA\ -AgASACENsEIQUgBEEIaiACQcgAEKQNGiAAIAFBEGogBSAEQQhqIAMQqwMgBEHQAGokAAtAAQJ/IwBB\ -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\ -ACACQQhqIAFBBGpBiJXAABCaDCACKAIMIQEgACACKAIINgIAIAAgATYCBCACQRBqJAALPgEBfyMAQR\ -BrIgIkACACQQhqIAFBBGpBxJXAABCaDCACKAIMIQEgACACKAIINgIAIAAgATYCBCACQRBqJAALPgEB\ -f0EYQQQQpQciAiABNgIAIAIgACkCADcCBCACQQxqIABBCGopAgA3AgAgAkEUaiAAQRBqKAIANgIAIA\ -ILPwEBfwJAIAEoAgAiASAAQQhqKAIAIgJPDQAgACgCACAAKAIEIAFBHGxqEPMNEIILDwsgASACQZyd\ -wAAQgQUACzgBA38gACgCACICIAAgARC5BCIDaiABp0EZdiIEOgAAIAIgACgCBCADQXhqcWpBCGogBD\ -oAACADCz0BAX8jAEEQayIDJAAgAyABIAIgACgCBEEBahD6AyAAKAIAIAMoAghrIAMoAgQgAygCABCy\ -DCADQRBqJAALPQEBfyMAQRBrIgMkACADQQhqIAEQ7AcgAiADKAIIIAMoAgwQ/QghASAAQQI2AgAgAC\ -ABNgIEIANBEGokAAs9AQF/IwBBEGsiAyQAIANBCGogARDsByACIAMoAgggAygCDBD9CCEBIABBATsB\ -ACAAIAE2AgQgA0EQaiQACz0BAX8jAEEQayIDJAAgA0EIaiABEOwHIAIgAygCCCADKAIMEP0IIQEgAE\ -EBOgAAIAAgATYCBCADQRBqJAALPQEBfyMAQRBrIgMkACADQQhqIAEQ7AcgAiADKAIIIAMoAgwQ/Qgh\ -ASAAQQA2AgAgACABNgIEIANBEGokAAs/AQJ/AkACQCABKAIAIgIgASgCBCIDRw0ADAELIAEgAkEBaj\ -YCACACLQAAIQELIAAgAToAASAAIAIgA0c6AAALPAEBfyMAQRBrIgMkACADQQA2AgwgAyACIANBDGoQ\ -zwIgACABIAMoAgAgAygCBBDLBiECIANBEGokACACCzwBAX8jAEEQayICJAAgAkEIaiABKAIAELAHIA\ -ItAAkhASAAIAItAAhBAXE6AAAgACABOgABIAJBEGokAAs8AQF/IwBBEGsiAyQAIANBADYCDCADIAIg\ -A0EMahCeAiAAIAEgAygCACADKAIEEMwGIQIgA0EQaiQAIAILPAEBfyMAQRBrIgMkACADQQA2AgwgAy\ -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\ -ogARDOByACLQAJIQEgACACLQAIQQFxOgAAIAAgAToAASACQRBqJAALOgEBfyMAQRBrIgMkACADQQhq\ -IAEgAkEAEIsIIAMoAgwhAiAAIAMoAgg2AgAgACACNgIEIANBEGokAAs6AQF/IwBBEGsiAyQAIANBCG\ -ogASACQQAQjgggAygCDCECIAAgAygCCDYCACAAIAI2AgQgA0EQaiQACzoBAX8jAEEQayIDJAAgA0EI\ -aiABIAJBARCOCCADKAIMIQIgACADKAIINgIAIAAgAjYCBCADQRBqJAALOgEBf0EAIQICQCAAKAIAIA\ -EoAgAiAUsNACAAKAIEIQICQCAALQAIDQAgASACTQ8LIAEgAkkhAgsgAgs4AAJAAkAgASACSw0AIAIg\ -A00NASACIAMgBBCDBQALIAEgAiAEEIQFAAsgACACNgIEIAAgATYCAAs7AQF/IwBBEGsiAiQAIAJBCG\ -ogASABKAIgEP8GIAIoAgwhASAAIAIoAgg2AgAgACABNgIEIAJBEGokAAs6AQF/IwBBEGsiASQAIAEg\ -ABCpCQJAIAEoAgQiAEUNACABKAIAIAAgAUEIaigCABDDCwsgAUEQaiQACzoBAX8jAEEQayIDJAAgA0\ -EIaiABIAJBABCRCCADKAIMIQIgACADKAIINgIAIAAgAjYCBCADQRBqJAALOgEBfyMAQRBrIgMkACAD\ -QQhqIAEgAkEBEJEIIAMoAgwhAiAAIAMoAgg2AgAgACACNgIEIANBEGokAAs5AQF/IwBBEGsiAiQAIA\ -JBCGogARDXByACLQAJIQEgACACLQAIQQFxOgAAIAAgAToAASACQRBqJAALOgEBfyMAQRBrIgMkACAD\ -QQhqIAEgAkEAEJIIIAMoAgwhAiAAIAMoAgg2AgAgACACNgIEIANBEGokAAs6AQF/IwBBEGsiAyQAIA\ -NBCGogASACQQEQkgggAygCDCECIAAgAygCCDYCACAAIAI2AgQgA0EQaiQACzoBAX8jAEEQayIDJAAg\ -A0EIaiABIAJBABCTCCADKAIMIQIgACADKAIINgIAIAAgAjYCBCADQRBqJAALOQEBfyMAQRBrIgIkAC\ -ACQQA2AgwgAiABIAJBDGoQ1gIgACACKAIAIAIoAgQQbyEBIAJBEGokACABCzwBAX8jAEEQayIBJAAg\ -AUEIaiAAQQhqKAIANgIAIAEgACkCADcDACABQYTezQAQzQkhACABQRBqJAAgAAs8AQF/IwBBEGsiAi\ -QAIAJBCGogACAAKAIAKAIEEQUAIAIoAgggASACKAIMKAIQEQYAIQAgAkEQaiQAIAALMwEBfyMAQRBr\ -IgMkACADQQhqIAAgAEEEaiABIAIQmwYgA0EIahC9ByEAIANBEGokACAACzsAAkAgAkUNAAJAIAMNAE\ -EALQDxpk8aIAIgARD3CyEBDAELIAIgARD4CyEBCyAAIAI2AgQgACABNgIACzcBAX8jAEEQayIDJAAg\ -AyABIAIQ1wUgAEEIaiADQQhqKAIANgIAIAAgAykDADcCACADQRBqJAALNwEBfyMAQRBrIgIkACACIA\ -FBARCdBiAAQQhqIAJBCGopAwA3AgAgACACKQMANwIAIAJBEGokAAs/AQF/AkACQCABQZ2kwABBDBDa\ -CCIBDQBBACEBDAELIAFBFGooAgAhAiABKAIMIQELIAAgAjYCBCAAIAE2AgALNwEBfyMAQRBrIgMkAC\ -ADIAEgAhCCCCAAQQhqIANBCGooAgA2AgAgACADKQMANwIAIANBEGokAAs+AQF/AkACQCACDQBBACEC\ -EPoNIQMMAQtBASECEPsNIQMLIABBADYCCCAAIAM2AgQgACACNgIAIAAgATYCEAs7AQF/AkAgACgCCC\ -ICIAAoAgRHDQAgACACEPsIIAAoAgghAgsgACACQQFqNgIIIAAoAgAgAmogAToAAAs7AAJAIAJFDQAC\ -QCADDQBBAC0A8aZPGiACIAEQ9wshAQwBCyACIAEQ+AshAQsgACACNgIEIAAgATYCAAs7AAJAIAJFDQ\ -ACQCADDQBBAC0A8aZPGiACIAEQ9wshAQwBCyACIAEQ+AshAQsgACACNgIEIAAgATYCAAs3AQF/IwBB\ -EGsiAyQAIAMgASACENcFIABBCGogA0EIaigCADYCACAAIAMpAwA3AgAgA0EQaiQACzsAAkAgAkUNAA\ -JAIAMNAEEALQDxpk8aIAIgARD3CyEBDAELIAIgARD4CyEBCyAAIAI2AgQgACABNgIACzYBAn8jAEEQ\ -ayICJAAgAiABNgIMIAJBDGoQwQwhAyAAIAE2AgQgACADQQFzNgIAIAJBEGokAAs2AQJ/IwBBEGsiAi\ -QAIAIgATYCDCACQQxqEPsGIQMgACABNgIEIAAgA0EBczYCACACQRBqJAALOwACQCACRQ0AAkAgAw0A\ -QQAtAPGmTxogAiABEPcLIQEMAQsgAiABEPgLIQELIAAgAjYCBCAAIAE2AgALNgEBfyMAQTBrIgMkAC\ -ADQRBqQS8gASACENMFIAMgA0EQahCWAiAAIAMpAwA3AwAgA0EwaiQACzkBAX9BACECAkACQCAAIAEQ\ -1ApFDQAgAUECSQ0BIAAtAAFBOkYhAgsgAg8LQQEgAUH8jsEAEIEFAAs7AAJAIAJFDQACQCADDQBBAC\ -0A8aZPGiACIAEQ9wshAQwBCyACIAEQ+AshAQsgACACNgIEIAAgATYCAAs7AAJAIAJFDQACQCADDQBB\ -AC0A8aZPGiACIAEQ9wshAQwBCyACIAEQ+AshAQsgACACNgIEIAAgATYCAAs7AAJAIAJFDQACQCADDQ\ -BBAC0A8aZPGiACIAEQ9wshAQwBCyACIAEQ+AshAQsgACACNgIEIAAgATYCAAs7AAJAIAJFDQACQCAD\ -DQBBAC0A8aZPGiACIAEQ9wshAQwBCyACIAEQ+AshAQsgACACNgIEIAAgATYCAAtAAQF/IwBBIGsiAC\ -QAIABBFGpCADcCACAAQQE2AgwgAEHE480ANgIIIABB+ODNADYCECAAQQhqQczjzQAQmAgACz8BAn8C\ -QBClAiIARQ0AIAAgACgCACIBQX9qNgIAAkAgAUEBRw0AIAAQ6QULDwtB/+HNAEHeAEH84s0AEIoGAA\ -tAAQF/IwBBIGsiACQAIABBFGpCADcCACAAQQE2AgwgAEGU+80ANgIIIABB5PrNADYCECAAQQhqQZz7\ -zQAQmAgACz8BAX8jAEEgayICJAAgAiAANgIUIAJBjJzOADYCDCACQfz/zQA2AgggAkEBOgAYIAIgAT\ -YCECACQQhqEKEGAAs9AQF/IwBBIGsiASQAIAFBFGpCADcCACABQQE2AgwgAUHwo84ANgIIIAFB/P/N\ -ADYCECABQQhqIAAQmAgACzsBAX8jAEHQAWsiAiQAIAJBCGogAUHAARCkDRogAkKAgICAgAM3A8gBIA\ -AgAkEIahCuBSACQdABaiQACzkBAX8jAEHAAGsiAiQAIAJBEGogAUEsEKQNGiACQoCAgICwATcDCCAA\ -IAJBCGoQ8gQgAkHAAGokAAs2AAJAIAEtAAxBAkYNACAAIAEpAgA3AgAgAEEIaiABQQhqKQIANwIADw\ -sgAEECOgAMIAEQ4wwLNgEBfyMAQRBrIgIkACACIAEpAgA3AwggAkEIahClDSEBIABBATYCACAAIAE2\ -AgQgAkEQaiQACzYBAX8jAEEQayICJAAgAkEIaiABEPMGIAIoAgwhASAAIAIoAgg2AgAgACABNgIEIA\ -JBEGokAAs2AQF/IwBBEGsiAiQAIAJBCGogARD0BiACKAIMIQEgACACKAIINgIAIAAgATYCBCACQRBq\ -JAALNgEBfyMAQRBrIgIkACACQQhqIAEQ9QYgAigCDCEBIAAgAigCCDYCACAAIAE2AgQgAkEQaiQACz\ -YBAX8jAEEQayICJAAgAkEIaiABEPYGIAIoAgwhASAAIAIoAgg2AgAgACABNgIEIAJBEGokAAsyAQF/\ -IwBBEGsiBCQAAkAgACgCCCABTw0AIARBCGogACABIAIgA0EBEFgLIARBEGokAAsyAQF/IwBBEGsiBC\ -QAAkAgACgCCCABTw0AIARBCGogACABIAIgA0EBEFkLIARBEGokAAsyAQF/IwBBEGsiBCQAAkAgACgC\ -CCABTw0AIARBCGogACABIAIgA0EBEFcLIARBEGokAAs0AQF/IwBBEGsiAyQAIAMgAjYCDCABIANBDG\ -oQigsgACACQax/akHUABCkDRogA0EQaiQACzwBAX8jAEEQayICJAAgAiAANgIMIAFBmKvAAEEcQbOq\ -wABBAyACQQxqQbyKwAAQkwMhACACQRBqJAAgAAs1AQF/IwBBEGsiASQAIAFBgQE2AgwgACgCAEGBAR\ -AMIQAgAUEMahCMCyABQRBqJAAgAEEARws2AQF/IwBBEGsiAiQAIAJBCGogARCQBiACKAIMIQEgACAC\ -KAIINgIAIAAgATYCBCACQRBqJAALNgECfyMAQRBrIgEkACABQQhqIAAQjQIgASgCCCEAIAEoAgwhAi\ -ABQRBqJAAgAkGAgMQAIAAbCzYBAn8CQANAIAEiAkUNASACQX9qIQEgAC0AACEDIABBAWohACADQYDz\ -wABqLQAADQALCyACRQs5ACAAQQBBgAEQoQ0iAEGAAWogAUHAABCkDRogAEEANgLQASAAQcgBaiABNg\ -IAIABBwAFqQgA3AwALNwACQCAAQfz///8HSw0AAkAgAA0AQQQPCyAAQf3///8HSUECdCAAEIwMIgBF\ -DQAgAA8LENsNAAs2AQJ/IwBBEGsiASQAIAFBCGogABCPAiABKAIIIQAgASgCDCECIAFBEGokACACQY\ -CAxAAgABsLNQEBfyAAIAEQmQogACgCCCEDAkAgAUUNACAAKAIAIANqIAI6AAAgA0EBaiEDCyAAIAM2\ -AggLMQEBfyMAQRBrIgMkAAJAIAAoAgggAU8NACADQQhqIAAgASACQQEQpgELIANBEGokAAsvAQF/IA\ -AgAiABa0EcbiIDQQFqQQF2IAMgACgCDBsgAEEQahCxCCABIAIgABDKAgsxAQF/IwBBEGsiAyQAAkAg\ -ACgCCCABTw0AIANBCGogACABIAJBARCRAQsgA0EQaiQACzEBAX8jAEEQayIDJAACQCAAKAIIIAFPDQ\ -AgA0EIaiAAIAEgAkEBEKcBCyADQRBqJAALMQEBfyMAQRBrIgMkAAJAIAAoAgggAU8NACADQQhqIAAg\ -ASACQQEQogELIANBEGokAAszAQF/AkAgASgCACICQX9GDQAgASACQQFqNgIAIAAgATYCBCAAIAFBBG\ -o2AgAPCxCJDQALMwEBfwJAIAEoAgAiAkF/Rg0AIAEgAkEBajYCACAAIAE2AgQgACABQQhqNgIADwsQ\ -iQ0ACzUBAX8jAEEQayICJAAgAiABQQAQlQUgAikDACEBIAAgAigCCDYCCCAAIAE3AwAgAkEQaiQACz\ -oBAX8CQAJAIAEoAgANACABKAIEIQFBACECDAELQQEhAiABKAIEEMsDIQELIAAgATYCBCAAIAI2AgAL\ -NAEBfyMAQRBrIgIkACACQQhqIAAQ2gcgAigCCCABIAIoAgwoAhARBgAhACACQRBqJAAgAAs0AQF/Iw\ -BBEGsiAiQAIAJBCGogABDaByACKAIIIAEgAigCDCgCEBEGACEAIAJBEGokACAACzQBAX8jAEEQayIC\ -JAAgAkEIaiAAENoHIAIoAgggASACKAIMKAIQEQYAIQAgAkEQaiQAIAALNAEBfyMAQRBrIgIkACACQQ\ -hqIAAQ2gcgAigCCCABIAIoAgwoAhARBgAhACACQRBqJAAgAAs0AQF/IwBBEGsiASQAIAEgAEEYQQgQ\ -hgQgASgCACABKAIEIAFBCGooAgAQpAsgAUEQaiQACzUBAX8jAEEQayIBJAAgASAAQdQAQQgQhgQgAS\ -gCACABKAIEIAFBCGooAgAQpAsgAUEQaiQACzQBAX8jAEEQayIBJAAgASAAQQRBCBCGBCABKAIAIAEo\ -AgQgAUEIaigCABCkCyABQRBqJAALNAEBfyMAQRBrIgEkACABIABBCEEIEIYEIAEoAgAgASgCBCABQQ\ -hqKAIAEKQLIAFBEGokAAsxAQF/IwBBwABrIgQkACAEQQhqIAEgAiADEI0HIAAgBEEQakEwEKQNGiAE\ -QcAAaiQACy8BAn8gACgCACIDIAFqIAKnQRl2IgQ6AAAgAyAAKAIEIAFBeGpxakEIaiAEOgAACzgBAX\ -9BASECAkACQCABKAIAEAtBAUYNAEEAIQIMAQsgARD4DRDDDSEBCyAAIAE2AgQgACACNgIACzUAIABB\ -gAE6ABggAEIBNwIMIAAgASkCADcCACAAQRRqQQA2AgAgAEEIaiABQQhqKAIANgIACzUAIABBgAE6AB\ -ggAEIBNwIMIAAgASkCADcCACAAQRRqQQA2AgAgAEEIaiABQQhqKAIANgIACzYBAn9BACECAkAgASgC\ -ACIDIAEoAgRPDQBBASECIAEgA0EBajYCAAsgACADNgIEIAAgAjYCAAs1AQF/IwBBEGsiAiQAIAIgAS\ -kCADcDCCAAIAJBCGoQyAk2AgAgACACKQMINwIEIAJBEGokAAsxAAJAIAMgAUkNACAAIAMgAWs2AgQg\ -ACACIAFBA3RqNgIADwsgASADQbiZwQAQggUACzcBAX9B4QAhAQJAAkAgAEEaSQ0AQRYhASAAQSNLDQ\ -ELIAEgAGoPC0GsocEAQQ5BvKHBABDeCQALNwEBfwJAAkAgASgCBA0AQQAhAQwBCyABKAIAIAFBCGoo\ -AgAiAkYhAQsgACACNgIEIAAgATYCAAs1ACAAQQE2AgQgAEEIakGCgMQAIAEoAggiAWtBAyABQYCAvH\ -9qQQNJGyIBNgIAIAAgATYCAAs2ACAAQQM6ACAgAEEgNgIQIABBADYCHCAAIAE2AhQgAEEANgIIIABB\ -ADYCACAAQRhqIAI2AgALLgEBfyMAQRBrIgMkACADQQhqIAAgASACENgFIAMoAgghAiADQRBqJAAgAk\ -EARwsxAQF/IwBB4ABrIgIkACACQQhqIAFB1AAQpA0aIAAoAgAgAkEIahDoBCACQeAAaiQACzEBAX8j\ -AEEQayICJAAgAkEIaiAAELgGIAEgAigCCCACKAIMEP0IIQAgAkEQaiQAIAALMQEBfyMAQRBrIgIkAC\ -ACQQhqIAAQ7AcgASACKAIIIAIoAgwQ/QghACACQRBqJAAgAAs4AgF/AX4jAEEQayIBJAAgAUH4gsAA\ -EIEGIAEpAwAhAiAAIAEpAwg3AwggACACNwMAIAFBEGokAAszAQF/IwBBEGsiAiQAIAEgAkEIakGMhM\ -AAEIUBIQEgAEEANgIAIAAgATYCBCACQRBqJAALMwEBfyMAQRBrIgIkACABIAJBCGpBnITAABCFASEB\ -IABBADYCACAAIAE2AgQgAkEQaiQACzIBAX8jAEEQayICJAAgAhDwDTYCCCACIAJBCGogARDCASAAIA\ -IpAwA3AwAgAkEQaiQACzEBAX8jAEEQayIDJAAgACABIAIQtwIgA0H/AToADyAAIANBD2pBARC3AiAD\ -QRBqJAALMgEBfyMAQRBrIgIkACACQQhqIAAgACgCCCABEIsGIAIoAgggAigCDBDoCSACQRBqJAALMg\ -EBfyMAQRBrIgIkACACQQhqIAAgACgCCCABEIwGIAIoAgggAigCDBDoCSACQRBqJAALMgEBfyMAQRBr\ -IgIkACACQQhqIAAgACgCCCABEI0GIAIoAgggAigCDBDoCSACQRBqJAALMAEBfyMAQRBrIgEkACAAKA\ -IAIgBBCGoQ4wwgASAANgIMIAFBDGoQ2QggAUEQaiQACzIBAX8CQCAAKAIAIgBBf0YNACAAIAAoAgQi\ -AUF/ajYCBCABQQFHDQAgAEEUQQQQsgwLCy4AAkAgACgCDA0AQQAPCyAAIABBEGogASACEJgBIAEgAh\ -COBSIAQWhqQQAgABsLNwEBfiAAIAIpAwBCgIGChIiQoMCAf4MiBEIAUjYCACAAIAR6p0EDdiADKAIA\ -aiABKAIEcTYCBAs1AQF/IwBBEGsiAiQAIAIgADYCDCABQYCtwABBBSACQQxqQYitwAAQ6gIhACACQR\ -BqJAAgAAsxAQF/IwBBEGsiAiQAIAJBCGogABC4BiABIAIoAgggAigCDBD9CCEAIAJBEGokACAACzUB\ -An9BACECAkAgASgCCCIDIAEoAgRPDQAgASgCACADai0AACECCyAAQQA6AAAgACACOgABCzEBAX8jAE\ -EQayICJAAgAkEIaiAAEOwHIAEgAigCCCACKAIMEP0IIQAgAkEQaiQAIAALMQEBfyMAQRBrIgIkACAC\ -QQhqIAAQ7AcgASACKAIIIAIoAgwQ/QghACACQRBqJAAgAAs0ACAAKAIAIQACQCABEKwMDQACQCABEK\ -0MDQAgACABENoMDwsgACABEOADDwsgACABEN8DCzIBAX8CQCAAKAIAIgBBf0YNACAAIAAoAgQiAUF/\ -ajYCBCABQQFHDQAgAEEYQQgQsgwLCzQBAX8CQCABKAIEIgJFDQAgAEEENgIEIAAgAkEYbDYCCCAAIA\ -EoAgA2AgAPCyAAQQA2AgQLNAAgACgCACEAAkAgARCsDA0AAkAgARCtDA0AIAAgARDaDA8LIAAgARDg\ -Aw8LIAAgARDfAwszAQF/IwBBEGsiAiQAAkAgAA0AIAJBEGokAA8LQfyCwQBBKyACQQhqQbyBwQAgAR\ -DCBAALNQEBfyAAQQAQqQoCQCACRQ0AA0AgARDICSIDQYCAxABGDQEgACADEN4EIAJBf2oiAg0ACwsL\ -OwEBf0EALQDxpk8aAkAgAUEDdEEEEPcLIgINAEGYmsEAQStBxJrBABCDBwALIAAgATYCBCAAIAI2Ag\ -ALMAEBfyMAQRBrIgMkACADQQA6AAwgA0EANgIIIAAgA0EIaiABIAIQswIgA0EQaiQACy0AAkAgAiAD\ -Tw0AIAMgAiAEEIIFAAsgACACIANrNgIEIAAgASADQQJ0ajYCAAsxAQF/IwBBEGsiAiQAIAJBCGogAU\ -H04c0AQQsQrQkgAkEIahDWBCEBIAJBEGokACABCzQAIAAoAgAhAAJAIAEQrAwNAAJAIAEQrQwNACAA\ -IAEQ2wwPCyAAIAEQ2gMPCyAAIAEQ2wMLNAAgACABKAIUIAIgAyABQRhqKAIAKAIMEQkAOgAIIAAgAT\ -YCBCAAIANFOgAJIABBADYCAAsrAAJAIAMgAUkNACAAIAMgAWs2AgQgACACIAFqNgIADwsgASADIAQQ\ -ggUACzACAX8BfiMAQRBrIgMkACADIAAoAgA2AgwgA0EMaiABIAIQjQohBCADQRBqJAAgBAswAgF/AX\ -4jAEEQayIDJAAgAyAAKAIANgIMIANBDGogASACEI4KIQQgA0EQaiQAIAQLMAIBfwF+IwBBEGsiAyQA\ -IAMgACgCADYCDCADQQxqIAEgAhDFCiEEIANBEGokACAECzACAX8BfiMAQRBrIgMkACADIAAoAgA2Ag\ -wgA0EMaiABIAIQxgohBCADQRBqJAAgBAsvAQF/IwBBEGsiAiQAIAJBCGogACABQQEQ3gIgAigCCCAC\ -KAIMEOgJIAJBEGokAAsvAQF/IwBBEGsiAyQAIANBCGogACABIAIQ3gIgAygCCCADKAIMEOgJIANBEG\ -okAAsvAQF/IwBBEGsiAiQAIAJBCGogACABQQEQ3wIgAigCCCACKAIMEOgJIAJBEGokAAsvAQF/IwBB\ -EGsiAiQAIAJBCGogACABQQEQ4AIgAigCCCACKAIMEOgJIAJBEGokAAsvAQF/IwBBEGsiAiQAIAJBCG\ -ogACABQQEQ3QIgAigCCCACKAIMEOgJIAJBEGokAAsuACAAIAIgAWsiAhCTCiAAKAIAIAAoAghqIAEg\ -AhCkDRogACAAKAIIIAJqNgIICy8BAX8jAEEQayICJAAgAkEIaiAAIAFBARC8AyACKAIIIAIoAgwQ7Q\ -kgAkEQaiQACy8BAX8jAEEQayIDJAAgA0EIaiAAIAEgAhC8AyADKAIIIAMoAgwQ7QkgA0EQaiQACy8B\ -AX8gACACIAFrIgIQlAogACgCACAAKAIIIgNqIAEgAhCkDRogACADIAJqNgIICy8BAX8jAEEQayICJA\ -AgAkEIaiAAIAFBARD4AiACKAIIIAIoAgwQ7gkgAkEQaiQACy8BAX8jAEEQayIDJAAgA0EIaiAAIAEg\ -AhD4AiADKAIIIAMoAgwQ7gkgA0EQaiQACzMBAX9BFBCrByIDIAI2AhAgAyABNgIMIANBCGogAEEIai\ -gCADYCACADIAApAgA3AgAgAwsvAQF/IwBBEGsiAiQAIAJBCGogACABQQEQ4QIgAigCCCACKAIMEO8J\ -IAJBEGokAAsrAQF/IwBBMGsiAiQAIAJBCGogAUEoEKQNGiAAIAJBCGoQxg0gAkEwaiQACy8BAX8gAC\ -ACIAFrIgIQlwogACgCACAAKAIIIgNqIAEgAhCkDRogACADIAJqNgIICy8BAX8jAEEQayIDJAAgA0EI\ -aiAAIAEgAhD5AiADKAIIIAMoAgwQ8gkgA0EQaiQACy8BAX8jAEEQayICJAAgAkEIaiAAIAFBARD5Ai\ -ACKAIIIAIoAgwQ8gkgAkEQaiQACy8BAX8jAEEQayICJAAgAkEIaiAAIAFBARDiAiACKAIIIAIoAgwQ\ -8gkgAkEQaiQACzMAIAFBJRDkBCABIABB8AFxQQR2QfDywABqLQAAEOQEIAEgAEEPcUHw8sAAai0AAB\ -DkBAsrAAJAIAMgAUkNACAAIAMgAWs2AgQgACACIAFqNgIADwsgASADIAQQggUACy4AIAAgAiABayIC\ -EJkKIAAoAgAgACgCCGogASACEKQNGiAAIAAoAgggAmo2AggLLwEBfyMAQRBrIgIkACACQQhqIAAgAU\ -EBEMYDIAIoAgggAigCDBD0CSACQRBqJAALLwEBfyMAQRBrIgMkACADQQhqIAAgASACEMYDIAMoAggg\ -AygCDBD0CSADQRBqJAALLwEBfyMAQRBrIgMkACADQQhqIAAgASACEOQCIAMoAgggAygCDBD3CSADQR\ -BqJAALLwEBfyMAQRBrIgIkACACQQhqIAAgAUEBEOMCIAIoAgggAigCDBD3CSACQRBqJAALLgEDfyAA\ -KAIAIgIgASgCACIDckUhBAJAIAJFDQAgA0UNACAAIAEQxwwhBAsgBAswAQF/IwBBEGsiASQAIAEgAC\ -kCADcDCCABQQhqEMgJIQAgAUEQaiQAIABBgIDEAEYLLgEBfyMAQRBrIgMkACADIAApAgA3AwggASAC\ -IANBCGoQlQYhACADQRBqJAAgAAsvAQF/IwBBEGsiAiQAIAJBCGogACABQQEQ5QIgAigCCCACKAIMEP\ -oJIAJBEGokAAsvAQF/IwBBEGsiAiQAIAJBCGogACABQQEQ5gIgAigCCCACKAIMEPoJIAJBEGokAAsv\ -AQF/IwBBEGsiAyQAIANBCGogACABIAIQ5gIgAygCCCADKAIMEPoJIANBEGokAAsvAQF/IwBBEGsiAy\ -QAIANBCGogACABIAIQ5QIgAygCCCADKAIMEPoJIANBEGokAAsvAAJAIAEQ/AVFDQAgACABKQAANwAA\ -IABBCGogAUEIaigAADYAAA8LIABBAjoAAAsvAQF/IAAgAiABayICEKkKIAAoAgAgACgCCCIDaiABIA\ -IQpA0aIAAgAyACajYCCAsvAQF/IwBBEGsiAyQAIANBCGogACABIAIQ+wIgAygCCCADKAIMEPwJIANB\ -EGokAAsvAQF/IwBBEGsiAiQAIAJBCGogACABQQEQ+wIgAigCCCACKAIMEPwJIAJBEGokAAsvAQF/IA\ -AgAiABayICEKoKIAAoAgAgACgCCCIDaiABIAIQpA0aIAAgAyACajYCCAsvAQF/IwBBEGsiAyQAIANB\ -CGogACABIAIQ/AIgAygCCCADKAIMEP0JIANBEGokAAsvAQF/IwBBEGsiAiQAIAJBCGogACABQQEQ/A\ -IgAigCCCACKAIMEP0JIAJBEGokAAstACABKAIAIQECQANAIAJFDQEgASADIAQQiAwgAkF/aiECDAAL\ -CyAAQQQ6AAALKQEBfyMAQSBrIgMkACADQQhqEJoLIAAgA0EIaiABIAIQQiADQSBqJAALMwEBf0EMQQ\ -QQpQciA0EIaiACQQhqKAIANgIAIAMgAikCADcCACAAIAEgA0Hgg8AAELoHCywBAX8jAEEQayICJAAg\ -AiAAKQIANwMIIAJBCGogARC/CSEAIAJBEGokACAACywBAX8jAEEQayICJAAgAiAAKQIANwMIIAJBCG\ -ogARCCCiEAIAJBEGokACAACywBAX8jAEEQayICJAAgAiAAKQIANwMIIAJBCGogARDlCSEAIAJBEGok\ -ACAACywBAX8jAEEQayICJAAgAiAAKQIANwMIIAJBCGogARDHCiEAIAJBEGokACAACywBAX8jAEEQay\ -ICJAAgAiAAKQIANwMIIAJBCGogARDICiEAIAJBEGokACAACywBAX8jAEEQayICJAAgAiAAKQIANwMI\ -IAJBCGogARDJCiEAIAJBEGokACAACywBAX8jAEEQayICJAAgAiAAKQIANwMIIAJBCGogARCDCiEAIA\ -JBEGokACAACywBAX8jAEEQayICJAAgAiAAKQIANwMIIAJBCGogARCyCiEAIAJBEGokACAACzQAIAIo\ -AgBB3JnAAEHfmcAAIAMbQQFBAiADGxCIDCAAIAIgASgCCCABKAIAIAEoAgQQmQkLKwACQCABQRxqKA\ -IARQ0AIAAgAUEQaiABIAIQ2wQgAhCnAw8LIABBAjYCAAsxAAJAIAAoAgAiACABaiwAAEF/TA0AIAAp\ -AwBCgIGChIiQoMCAf4N6p0EDdiEBCyABCywBAX8CQCAAKAIAIgFBCUsNACAAIAFBAWo2AgAgAUECTQ\ -0AEPYNCyABQQpJCzEBAX8CQCABKAIEIgJFDQAgACACNgIIIABBATYCBCAAIAEoAgA2AgAPCyAAQQA2\ -AgQLMQEBfwJAIAEoAgQiAkUNACAAIAI2AgggAEEBNgIEIAAgASgCADYCAA8LIABBADYCBAskAAJAIA\ -HAQQBODQBBAQ8LIAAgAUEDdkEccWooAgAgAXZBAXELLAEBfyMAQRBrIgIkACACIAAoAgA2AgwgAkEM\ -aiABEOwBIQAgAkEQaiQAIAALNQEBf0EBIQECQCAALQAEDQAgACgCACIAKAIUQdCezgBBASAAQRhqKA\ -IAKAIMEQkAIQELIAELMAAgASgCFCACIAMgAUEYaigCACgCDBEJACEDIABBADoABSAAIAM6AAQgACAB\ -NgIACzUBAX8gASgCFEHRm84AQQEgAUEYaigCACgCDBEJACECIABBADoABSAAIAI6AAQgACABNgIACz\ -EAAkACQAJAIAAoAgAiACgCAA4CAAECCyAAQQRqEOkLDAELIABBBGoQ4AcLIAAQ5AwLKgEBfyMAQRBr\ -IgEkACABIAApAgA3AwggAUEIahClDSEAIAFBEGokACAACy4BAX9BEEEEEKUHIgIgATYCACACIAApAg\ -A3AgQgAkEMaiAAQQhqKAIANgIAIAILLgEBf0EQQQQQpQciAUEANgIAIAEgACkCADcCBCABQQxqIABB\ -CGooAgA2AgAgAQswAAJAAkACQCAAKAIADgIAAQILIAAoAgRBASAAQQhqKAIAELILDwsgAEEEahDpBw\ -sLMQACQAJAIABBgYCAgHhGDQAgAEUNASAAIAEQmg0ACw8LQdjdwABBEUHs3cAAEIMHAAsuAQF/IwBB\ -EGsiASQAIAEgACkCADcDCCABQQhqQbTfwABBACAAKAIIQQEQ9gIACywAAkAgAUUNAAJAIAINAEEALQ\ -Dxpk8aIAEgABD3Cw8LIAEgABD4CyEACyAACy4BAX8jAEEQayIBJAAgASAAKQIANwMIIAFBCGpBlJfB\ -AEEAIAAoAghBARD2AgALKAAgASACIAMgBBDeBiEDIAAgAiAEazYCBCAAIAEgBGpBACADGzYCAAsuAQ\ -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\ -IAEQsgsLCx4AAkAgACgCCA0AQQBBAEHE68AAEIEFAAsgACgCAAsdAQF/AkAgACgCBCIBRQ0AIAAoAg\ -AgAUEBELIMCwsdAQF/AkAgACgCBCIBRQ0AIAAoAgBBASABELsLCwsaACAAIAE2AgQgAEEANgIAIABB\ -CGogAjYCAAsdAQF/AkAgACgCBCIBRQ0AIAAoAgAgAUEBELIMCwsdAQF/AkAgACgCBCIBRQ0AIAAoAg\ -BBASABEMQLCwscACAAKAIAIgAoAgAgASAAQQRqKAIAKAIMEQYACxgAAkAgAUEJSQ0AIAEgABC+AQ8L\ -IAAQLgscAQF/AkAgACgCECIBDQAgAEEUaigCACEBCyABCxoAIAAgASACIAMoAgAgAygCCBDwASADEO\ -MMCxcAAkAgACgCAEECRg0AIABBFGoQ4wwLCxsBAX9BCEEEEKUHIgIgADoABCACIAE2AgAgAgsbAQF/\ -QQhBBBClByICIAA2AgQgAiABNgIAIAILGAACQCAAKAIgQQJGDQAgACABELYGCyAACxgAAkAgACgCIE\ -ECRg0AIAAgARC1BgsgAAsXACAAEJwCQf8BcSAAIAEQ8wFB/wFxRwsbACABEKoHIAAgASgCCDYCBCAA\ -IAEoAgA2AgALGwAgARCsByAAIAEoAgg2AgQgACABKAIANgIACxsAIAEQrQcgACABKAIINgIEIAAgAS\ -gCADYCAAsWACAAIAEgAkEDdGo2AgQgACABNgIACxsAIAEQtAcgACABKAIINgIEIAAgASgCADYCAAsb\ -ACABELUHIAAgASgCCDYCBCAAIAEoAgA2AgALGgACQCAAKAIEQYCAxABHDQAgAEEIahC+CgsLGgACQC\ -AAKAIIQYCAxABHDQAgAEEMahC/CgsLIQEBfwJAEKUCIgANAEH/4c0AQd4AQfzizQAQigYACyAACxsB\ -AX8gASAAQQAoArynTyICQYsCIAIbEQUAAAsSAEEAQRkgAEEBdmsgAEEfRhsLFgAgACABQQFyNgIEIA\ -AgAWogATYCAAscACABKAIUQdyZzgBBDiABQRhqKAIAKAIMEQkACxkAIAAoAhQgASACIABBGGooAgAo\ -AgwRCQALHAAgASgCFEGkuc4AQQUgAUEYaigCACgCDBEJAAscACABKAIUQfilzwBBCyABQRhqKAIAKA\ -IMEQkACxkAIAAoAgAgACgCCCABKAIAIAEoAggQpgoLGQAgACgCACAAKAIEIAEoAgAgASgCBBCmCgsW\ -AAJAIAAoAgAiAEGEAUkNACAAEAELCxcAAkAgACgCBEUNACAAEMoEIAAQvAgLCxUAAkAgACgCAEUNAC\ -AAQQRqEIQLCwsXAAJAIAAoAgRFDQAgABDLBCAAEL0ICwsZAQF/IAAoAgAgACgCCBADIQEgABDjDCAB\ -CxUAIAAgASABQRBqIAIQ8wQgAhCECgsWACAAIAAoAgAgASgCAGtB1ABtEIkECxUAIAAgACgCACABKA\ -IAa0EYbRCJBAsWAAJAIAAoAgAiAEGEAUkNACAAEAELCxcAIAAgAjYCCCAAIAI2AgQgACABNgIACxoA\ -IABBADoADCAAQgI3AgQgAEGE0sAANgIACxcAIABBADYCCCAAIAI2AgQgACABNgIACxcAIABBADYCCC\ -AAIAI2AgQgACABNgIACxUAAkAgACgCAEUNACAAQQRqEIUMCwsZACAAKAIAIAAoAgRBpe3AAEEEEKYK\ -QQFzCxcAAkAgAKcNAEHo9sAAQSsgARCDBwALCxcAIAAgAjYCCCAAIAI2AgQgACABNgIACxQAIAAgAj\ -kDCCAAIAFBAEetNwMACxYAAkAgACgCACIAQYQBSQ0AIAAQAQsLGwAgACgCACIAKAIAIAAoAghB2IvB\ -AEEJEKYKCxkAIAAoAgAgACgCBCABKAIAIAEoAgQQpgoLGQAgACgCACAAKAIIQYCKwQBBAhCmCkEBcw\ -sXACAAQQA2AgggAEEANgIAIABBADYCEAsWAAJAIAAoAgggAUkNACAAIAE2AggLCxAAIAAgAWpBf2pB\ -ACABa3ELFgAgASgCFCABQRhqKAIAIAAoAgAQbQsXACAAKAIUIAEgAEEYaigCACgCEBEGAAsSACAAQR\ -BqEIULIABBMGoQ4wwLFQAgASgCACACIAMQiAwgAEEEOgAACxYAAkAgAA0AQYiDwABBFRCHDQALIAEL\ -FgAgACABKAIAIAEoAggQ8gIgARDjDAsYAAJAIAAoAghBgZTr3ANHDQAgABDgBwsLEwACQCACRQ0AIA\ -AgAiABELIMCwsYAAJAIAAoAghBgJTr3ANGDQAgABCfCwsLFAAgASAAKAIUIABBHGooAgAQgAgLEwAg\ -AEEEahDjDCAAQRhBBBCyDAsTACAAQQRqEK8JIABBCEEEELIMCxMAIABBBGoQ4AcgAEEMQQQQsgwLEw\ -AgAEEEahDjDCAAQRBBBBCyDAsXACAAQQRqQQAgAULirvO+kqq04VVRGwsXACAAQQRqQQAgAUKzqq6a\ -rd/v8jRRGwsYACAAQQRqQQAgAULb7vPp1+HC+Kx/URsLGAAgAEEEakEAIAFC7Lvo35netKirf1EbCx\ -gAIABBBGpBACABQs25wMS1/KfWyABRGwsTAQF/IAAgASACIAMQWyEEIAQPCxQAIAAgAiADEAM2AgQg\ -AEEANgIACxMAAkAgAkUNACAAIAIgARCyDAsLGQEBfwJAQQAoAoCnTyIADQAQlgchAAsgAAsTAANAIA\ -AQpAZB/wFxQQJHDQALCxMAAkAgAkUNACAAIAIgARCyDAsLFQAgACgCACIAKAIAIAAoAgggARBVCxMA\ -AkAgAkUNACAAIAIgARCyDAsLEwAgACABIAJqNgIEIAAgATYCAAsTACAAIAJBA3Q2AgQgACABNgIACx\ -MAAkAgAkUNACAAIAIgARCyDAsLEwACQCACRQ0AIAAgAiABELIMCwsTAAJAIAFFDQAgACABQQQQsgwL\ -CxYAIAAoAgAiACgCACAAKAIIIAEQnA0LFAACQCAALQAADQAgAEEEahCKDQsLEwACQCACRQ0AIAAgAi\ -ABELIMCwsUACAAKAIAIAAoAgRBA3RBBBCyDAsUAEEALQDxpk8aIABBA3RBBBD3CwsZAAJAIAANAEGY\ -msEAQStBjKHBABCDBwALCxMAAkAgAkUNACAAIAIgARCyDAsLEwACQCACRQ0AIAAgAiABELIMCwsTAC\ -AAQQRqEOcKIABBEEEEELIMCxYAIABBqN7NADYCBCAAIAFBBGo2AgALGAAgAEEEakEAIAFCsoKa7pnW\ -wa6uf1EbCw8AIABBAXQiAEEAIABrcgsWACAAIAEoAgg2AgQgACABKAIANgIACxUAIAEgACgCACIAKA\ -IAIAAoAgQQUwsTACABKAIUIAFBGGooAgAgABBtCxIAAkAgACgCAEUNACAAEOMMCwsSAAJAIAAoAgBF\ -DQAgABDeBwsLEAAgACABIAEgASABIAEQMwsQACAAIAEgASABIAEgARAxCxIAAkAgACgCAEUNACAAEK\ -8JCwsPAAJAIABFDQAPCxCIDQALEgACQCAAKAIARQ0AIAAQ6AsLCxIAAkAgACgCEEUNACAAENgKCwsS\ -AAJAIAAoAhBFDQAgABDZCgsLEgACQCAAKAIERQ0AIAAQ9wwLCxIAAkAgACgCEEUNACAAENoKCwsTAC\ -AAIAEgAigCACACKAIEEKYKCxAAIAAgASABIAEgASABEDcLEgACQCAAKAIERQ0AIAAQvggLCxIAAkAg\ -ACgCBEUNACAAEL8ICwsSAAJAIAAoAgBFDQAgABDwCQsLEgACQCAAKAIARQ0AIAAQgg0LCxMAIAAgAS\ -ACKAIAIAIoAggQpgoLEwAgACgCACABKAIAIAIoAgAQHwsSAAJAIAAoAgBFDQAgABCKDQsLFAAgACgC\ -ACABIAAoAgQoAhARBgALEgACQCAAKAIARQ0AIAAQ/gkLCxQAIAAoAgAiACAAKAIAKAIAEQIACxQAIA\ -AoAgAgASAAKAIEKAIMEQYACw8AIAAgASACIAMgBBBDAAsPACAAENgKIABBMGoQ2goLEQAgACABKAIA\ -IAEoAggQ8gILEQAgACgCACAAKAIIIAEQnA0LDwAgABDjDCAAQQxqEOMMCxEAIAAoAgBBASAAKAIEEK\ -QLCw8AIAAQ4wwgAEEgahDjDAsRACAAKAIAIAAoAgggARDiAQsRACABIAAoAgAgACgCCBDUCAsTACAA\ -QSg2AgQgAEHIi8AANgIACxMAIABBKDYCBCAAQciLwAA2AgALEQAgASAAKAIAIAAoAggQgAgLEwAgAE\ -GAlsAANgIEIAAgATYCAAsTACAAQbyWwAA2AgQgACABNgIACxMAIABB+JbAADYCBCAAIAE2AgALEwAg\ -AEG0l8AANgIEIAAgATYCAAsTACAAQfCXwAA2AgQgACABNgIACw4AIAAgASACENoIQQBHCxEAIABBEG\ -pBgKLAAEEIEPULCxABAX8gACABEOkKIQIgAg8LEAEBfyAAIAEQ4QYhAiACDwsRACAAKAIAIAAoAgQg\ -ARDPDAsPACAAKAIAIAEQhwIaQQALEAAgACgCACABIAIQ/AtBAAsOACAAIAEgASACahD3CAsRACAAKA\ -IAIAAoAgQgARDPDAsRACAAKAIAIgAQswkgABD8DAsTACAAQSg2AgQgAEGQs8AANgIACxAAIAAoAgAg\ -ASACEIEMQQALDgAgACABIAEgAmoQ+ggLEAAgACgCACAAKAIIIAEQVQsPACAAIAAoAghBAWo2AggLEA\ -AgAEEBOgAEIAAgATYCAAsTAEEAQQAoAvymT0F/ajYC/KZPCw4AIAAgASABIAJqEIAJCxEAIAAoAgAg\ -ACgCBCABEJwNCw4AIAAgASABIAJqEIYJCxAAIAAgAjYCBCAAIAE2AgALEAAgACADNgIEIAAgATYCAA\ -sQACAAKAIAIAEoAgAgAhAoCxEAQQAtAPGmTxogASAAEPcLCxEAIAAoAgAgACgCCCABEJwNCxQAQQAg\ -ADYCoKdPQQBBAToAnKdPCxAAIAAoAgAgASACEJMMQQALDgAgACABQQN0QQQQsgwLDwAgABD2ByAAQQ\ -xqEPYHCxcAIABB2PjEAEGaB0GMh8UAQZoHEI0ECw4AIAAgASABIAJqEJMJCw4AIAAgASABIAJqEJYJ\ -CxAAIAAoAgAgACgCBCABEFULEQAgACgCACAAKAIEIAEQnA0LEQAgASAAKAIAIAAoAgQQ/woLEwAgAE\ -EoNgIEIABB1N3NADYCAAsTACAAQeTezQA2AgQgACABNgIACxAAIAAgAjYCBCAAIAE2AgALEAAgACgC\ -ACAAKAIIIAEQVQsRACAAKAIAIAAoAgggARCcDQsQACAAKAIAIAAoAgQgARBVCxEAIAAoAgAgACgCBC\ -ABEJwNCxAAIAAoAgAgACgCCCABEFULEQAgACgCACAAKAIIIAEQnA0LEAAgACACNgIEIAAgATYCAAsT\ -ACAAQYzvzQA2AgQgACABNgIACxAAIABCAjcDCCAAQgE3AwALDQAgAC0ABEECcUEBdgsPACAAIAAoAg\ -RBfnE2AgQLDQAgACgCBEEDcUEBRwsRACAAKAIAIAAoAgggARCcDQsQACAAKAIAIAAoAgggARBVCxMA\ -IABBDTYCBCAAQY/9zQA2AgALEAAgASAAKAIAIAAoAgQQUwsNACAALQAcQQRxQQJ2Cw0AIAAtABxBEH\ -FBBHYLDQAgAC0AHEEgcUEFdgsQACAAIAI2AgQgACABNgIACw8AIAAoAgAgACgCCBDmCQsNACAAIAEg\ -AhCIDEEACxAAIAAgAUHhmcAAQQIQoAsLDAAgACABIAIQ4A0PCwwAIABBACAAEMYMGwsMACAAQQAgAB\ -DFDBsLDgAgACABIAEtAAEQhggLDQAgACgCACABIAIQDwsNACAAIAEgAhD8C0EACw4AIAAoAgAgARDK\ -BkEACw0AIAAgASACEIEMQQALEgBB0OHAAEEmQeDiwAAQ2gkACxIAQdDhwABBJkGg48AAENoJAAsSAE\ -HQ4cAAQSZB8OLAABDaCQALEgBB0OHAAEEmQYDjwAAQ2gkACxIAQdDhwABBJkGQ48AAENoJAAsNACAA\ -IAEgAiADEMsJCw0AIAAgASACEJMMQQALDAAgACgCABAUQQFGCwwAIAAoAgAQE0EBRgsMACAAKAIAEA\ -tBAUYLDAAgACgCABAhQQBHCwwAIAAoAgAQHEEARwsMACAAKAIAECZBAEcLDwAgACgCACABKAIAEJgL\ -Cw4AIAAoAgAgARDeBEEACw0AIAAgASACEJMMQQALDAAgACABQRAQog1FCw8AIAAoAgAgACgCBBCQDA\ -sPACAAKAIAKAIAIAEQ3AYLDwAgACgCACgCACABEN0GCw4AIABBgKh9akGk1wBJCw4AIAAgAiABKAIM\ -EQYACw0AIAAoAgAgASACEG8LCwAgACABEIgOGgALDwAgACgCACAALQAEOgAACwoAQQAgAGsgAHELCw\ -AgAC0ABEEDcUULDAAgACABQQNyNgIECw0AIAAoAgAgACgCBGoLDgAgACgCACABEOEBQQALDAAgAEEM\ -aiABEOcCCw0AIAAoAgAaA38MAAsLDgAgADUCAEEBIAEQ5AELDgAgADEAAEEBIAEQ5AELDgAgADMBAE\ -EBIAEQ5AELDQAgACABIAIQgQIgAAsNACAAKAIAIAEgAhB6Cw4AIAApAwBBASABEOQBCwwAIAAgASAC\ -IAMQawsLACAAIwBqJAAjAAsMACAAEK8MIAAQsAoLDAAgABCpDiAAEOQKCwsAIABBFEEEELIMCwsAIA\ -AgARDvDRBLCw4AIAFBrITAAEEFEP8KCw4AIAFB6KvAAEEtEP8KCw4AIAFBuarAAEEiEP8KCw4AIAFB\ -o6zAAEEnEP8KCwoAIAAQiAMaQQELCgAgABCJAxpBAQsKACAAQQRqEOMMCwoAIABBBGoQ4AcLCgAgAE\ -EEahCvCQsKACAAQQRqEOMMCwwAIAAgARDzDRCCCwsLACAAIAEQ2ARBAAsLACAAQQhBBBCyDAsLACAA\ -QQhBBBCyDAsLACAAQQxBBBCyDAsLACAAQRhBBBCyDAsLACAAQRBBBBCyDAsLACAAQQRBCBDJBwsLAC\ -AAIAFBABCFAgsKACAAIAEQ+woPCwwAIAAQqQ4gABDkCgsMACAAEKkOIAAQ5AoLCwAgAEEUQQQQsgwL\ -CwAgACABEMoGQQALCwAgACABIAIQmwELDAAgACgCACABEIoECwwAIAAQtAsgABD5BgsMACAAKAIAIA\ -EQ6QILDAAgABCvDiAAEPYHCwwAIAAQrQ4gABC7CgsMACAAKAIAIAEQ2wMLDAAgACgCACABEKUECwsA\ -IAAoAgAgARAaCwkAIAAgARAqAAsNAEGAgMEAQRsQhw0ACw4AQZuAwQBBzwAQhw0ACwwAIAAQrw4gAB\ -D2BwsLACAAIAEQ3gRBAAsMACAAKAIAIAEQlgwLDgAgAUGE2c0AQQgQ/woLDgAgAUGW2c0AQREQ/woL\ -DgAgAUG03c0AQQMQ/woLDgAgAUG33c0AQQMQ/woLCgAgAEEEahDnCgsMACAAKAIAIAEQ/QcLCwAgAE\ -EQQQQQsgwLCgAgACABIAIQZQsKACAAKAIEQXhxCwoAIAAoAgRBAXELCgAgACgCDEEBcQsKACAAKAIM\ -QQF2CwwAIAAoAgAgARDoAgsKACAAIAEQmw0ACwoAIAEgABD5DAALCgAgAiAAIAEQUwsMACAAIAEpAg\ -A3AwALDAAgACABKQIINwMACwwAIAAoAgAgARDmAQsMACAAKAIAIAEQ5wELCwAgACABIAIQlAMLCwAg\ -ACABIAIQvAYLCgAgACABIAIQZAsLACAAIAEgAhDjAQsMACAAQcSYwAAQtgoLDABBuKvPACAAELEKCw\ -kAIAEgARDnDAsJACAAIAEQjw0LCQAgACABEI4NCwkAIAEgARCJBwsJACAAIAEQjQ0LCQAgACABEJAN\ -CwkAIAEgARDoDAsJACABIAEQ5gwLCQAgASABEOkMCwkAIABBADYCAAsJACAAQQA2AgALDAAgAEGcmM\ -AAELEJCwwAIABBsJjAABDGBwsMACAAQdiYwAAQ7QoLDAAgAEHsmMAAEO4KCwkAIAAgARCMAQsJACAA\ -IAEQjAELCQAgACABEIwBCwkAIAAgARCMAQsJACAAIAAQ7woLCQAgACAAEPAKCwkAIABBADYCAAsJAC\ -AAIAEQ2AYLCQAgASAAEK8GCwwAQYSnzwAgABDQCgsIACAAELUJAAsJACAAKAIAEBsLCAAgACABEB0L\ -CQAgACgCABAiCwkAIAAoAgAQJwsJACAAKAIAECULCQAgACABELMDCwgAIAAQtwkACwgAIAAQuQkACw\ -kAIABBADYCAAsJACAAIAEQjAELCgBBACgCpKtPRQsJACAAIAEQ0gELCAAgABDvAwALBwAgACABagsH\ -ACAAIAFrCwcAIABBCGoLBwAgAEF4agsHACABEP8BCwcAIAEQ/wELBwAgARD/AQsHACAAEOMMCwcAIA\ -AQ4wwLBwAgABCECwsHACAAEOEKCwcAIAAQoAMLBwAgABCCDQsGABCHDgALBwAgABCKDQsHACAAEM8D\ -CwcAIAAQ5woLBwAgABD+BwsGACAAEEkLBwAgACgCDAsHACAAKAIICwcAIAAoAgwLBwAgACgCCAsHAC\ -AALQAQCwwAQu2F65nF/ufQcwsMAEKzqq6ard/v8jQLDABCg/GpxbO7m4M8CwwAQrXQiujx5oavJAsN\ -AELb7vPp1+HC+Kx/Cw0AQs25wMS1/KfWyAALDQBCi/PdsvXhj7KCfwsNAELt05mVn+jMuvoACw0AQu\ -y76N+Z3rSoq38LBAAgAAsEAEEACw0AQoawqrK+3tisq38LDABC4q7zvpKqtOFVCwQAIAALBABBAAsM\ -AELB9/nozJOy0UELBQAQtg4LBAAgAAsEACAACwQAIAALBAAQFQsEABAZCwQAIAALBAAQKwsMAELB9/\ -nozJOy0UELBAAgAAsMAELB9/nozJOy0UELDQBCp4bl+8XxwJOCfwsNAEKBptWexanDhb5/Cw0AQrKC\ -mu6Z1sGurn8LDQBCntiDyb678/eLfwsMAELB9/nozJOy0UELBAAgAAsDAAALAwAACwQAQQcLBABBCA\ -sEACAACwQAQQALBABBAAsEAEEACwQAQQALBABBAQsGAEGAgAQLDQBCntiDyb678/eLfwsCAAsCAAsC\ -AAsCAAsCAAsCAAsCAAsCAAsCAAsCAAsCAAsCAAsCAAsCAAsCAAsCAAsCAAsCAAsCAAsCAAsCAAsCAA\ -sCAAsCAAsCAAsCAAsCAAsCAAsCAAsCAAsCAAsCAAsCAAsCAAsCAAsCAAsCAAsCAAsCAAsCAAsCAAsL\ -/qaPgAACAEGAgMAAC4OmD2Fsc2VydWV1bGxpbnRlcm5hbCBlcnJvcjogZW50ZXJlZCB1bnJlYWNoYW\ -JsZSBjb2Rlfi8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUw\ -MDFmL3NlcmRlX2pzb24tMS4wLjEwNC9zcmMvZGUucnMAAAAyABAAUwAAAI8EAAAmAAAAMgAQAFMAAA\ -CZBAAAIgAAABAAAAAAAAAAAQAAABEAAAAQAAAAAAAAAAEAAAASAAAAfi8uY2FyZ28vcmVnaXN0cnkv\ -c3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3NlcmRlX2pzb24tMS4wLjEwNC9zcm\ -Mvc2VyLnJzyAAQAFQAAAD+BQAAEgAAAMgAEABUAAAAFAgAADsAAADIABAAVAAAACEIAAAuAAAAIm51\ -bGxcdFxyXG5cZlxiXFxcIgBgARAAAAAAABMAAAAIAAAABAAAABQAAAAVAAAAAAAAAP//////////YH\ -Vud3JhcF90aHJvd2AgZmFpbGVkbmFub3Nfc2luY2VfZXBvY2hzZWNzX3NpbmNlX2Vwb2NoAAAQAAAA\ -AAAAAAEAAAAWAAAAFwAAAAwAAAAEAAAAGAAAABcAAAAMAAAABAAAABkAAAAYAAAA0AEQABoAAAAbAA\ -AAHAAAABoAAAAdAAAAEAAAAAAAAAABAAAAHgAAABAAAAAAAAAAAQAAAB8AAABhIG1hcAAAAK4BEAAQ\ -AAAAnQEQABEAAAB+Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYm\ -ExNTAwMWYvY29uc29sZV9lcnJvcl9wYW5pY19ob29rLTAuMS43L3NyYy9saWIucnNEAhAAYAAAAJUA\ -AAAOAAAAEAAAAAAAAAABAAAAIAAAACEAAAAiAAAAb25lLXRpbWUgaW5pdGlhbGl6YXRpb24gbWF5IG\ -5vdCBiZSBwZXJmb3JtZWQgcmVjdXJzaXZlbHnMAhAAOAAAAE9uY2UgaW5zdGFuY2UgaGFzIHByZXZp\ -b3VzbHkgYmVlbiBwb2lzb25lZAAADAMQACoAAABjYWxsZWQgYE9wdGlvbjo6dW53cmFwKClgIG9uIG\ -EgYE5vbmVgIHZhbHVlL3J1c3RjL2ViMjYyOTZiNTU2Y2VmMTBmYjcxM2EzOGYzZDE2Yjk4ODYwODBm\ -MjYvbGlicmFyeS9zdGQvc3JjL3N5bmMvb25jZS5ycwBrAxAATAAAAJUAAAAyAAAAY2Fubm90IGFjY2\ -VzcyBhIFRocmVhZCBMb2NhbCBTdG9yYWdlIHZhbHVlIGR1cmluZyBvciBhZnRlciBkZXN0cnVjdGlv\ -bgAAEAAAAAAAAAABAAAAIwAAAC9ydXN0Yy9lYjI2Mjk2YjU1NmNlZjEwZmI3MTNhMzhmM2QxNmI5OD\ -g2MDgwZjI2L2xpYnJhcnkvc3RkL3NyYy90aHJlYWQvbG9jYWwucnMAIAQQAE8AAAD2AAAAGgAAABcA\ -AAAMAAAABAAAACQAAAAlAAAAJgAAAGEgRGlzcGxheSBpbXBsZW1lbnRhdGlvbiByZXR1cm5lZCBhbi\ -BlcnJvciB1bmV4cGVjdGVkbHkAEAAAAAAAAAABAAAAJwAAAC9ydXN0Yy9lYjI2Mjk2YjU1NmNlZjEw\ -ZmI3MTNhMzhmM2QxNmI5ODg2MDgwZjI2L2xpYnJhcnkvYWxsb2Mvc3JjL3N0cmluZy5ycwDgBBAASw\ -AAANwJAAAOAAAAEwAAAAQAAAAEAAAAKAAAAG92ZXJmbG93IGluIER1cmF0aW9uOjpuZXcAAABMBRAA\ -GQAAAC9ydXN0Yy9lYjI2Mjk2YjU1NmNlZjEwZmI3MTNhMzhmM2QxNmI5ODg2MDgwZjI2L2xpYnJhcn\ -kvY29yZS9zcmMvdGltZS5yc3AFEABIAAAAygAAABUAAABkZXNjcmlwdGlvbigpIGlzIGRlcHJlY2F0\ -ZWQ7IHVzZSBEaXNwbGF5YXNzZXJ0aW9uIGZhaWxlZDogbWlkIDw9IHNlbGYubGVuKCljYWxsZWQgYF\ -Jlc3VsdDo6dW53cmFwKClgIG9uIGFuIGBFcnJgIHZhbHVlAAApAAAABAAAAAQAAAAqAAAAKwAAAAQA\ -AAAEAAAALAAAADAwMDEwMjAzMDQwNTA2MDcwODA5MTAxMTEyMTMxNDE1MTYxNzE4MTkyMDIxMjIyMz\ -I0MjUyNjI3MjgyOTMwMzEzMjMzMzQzNTM2MzczODM5NDA0MTQyNDM0NDQ1NDY0NzQ4NDk1MDUxNTI1\ -MzU0NTU1NjU3NTg1OTYwNjE2MjYzNjQ2NTY2Njc2ODY5NzA3MTcyNzM3NDc1NzY3Nzc4Nzk4MDgxOD\ -I4Mzg0ODU4Njg3ODg4OTkwOTE5MjkzOTQ5NTk2OTc5ODk5L3J1c3RjL2ViMjYyOTZiNTU2Y2VmMTBm\ -YjcxM2EzOGYzZDE2Yjk4ODYwODBmMjYvbGlicmFyeS9zdGQvc3JjL3BhdGgucnMAKAcQAEcAAADxCw\ -AAFgAAACgHEABHAAAA+gsAACQAAAAoBxAARwAAAAMMAAAdAAAAKAcQAEcAAAAQDAAAHAAAAGF0dGVt\ -cHQgdG8gam9pbiBpbnRvIGNvbGxlY3Rpb24gd2l0aCBsZW4gPiB1c2l6ZTo6TUFYL3J1c3RjL2ViMj\ -YyOTZiNTU2Y2VmMTBmYjcxM2EzOGYzZDE2Yjk4ODYwODBmMjYvbGlicmFyeS9hbGxvYy9zcmMvc3Ry\ -LnJzAAAA5QcQAEgAAACwAAAAFgAAAOUHEABIAAAAmQAAAAoAAABpbnZhbGlkIHZhbHVlOiAsIGV4cG\ -VjdGVkIAAAUAgQAA8AAABfCBAACwAAAG1pc3NpbmcgZmllbGQgYGB8CBAADwAAAIsIEAABAAAAdW5r\ -bm93biBmaWVsZCBgYCwgdGhlcmUgYXJlIG5vIGZpZWxkcwAAAJwIEAAPAAAAqwgQABYAAABgLCBleH\ -BlY3RlZCCcCBAADwAAANQIEAAMAAAAaW52YWxpZCBsZW5ndGggAPAIEAAPAAAAXwgQAAsAAABkdXBs\ -aWNhdGUgZmllbGQgYAAAABAJEAARAAAAiwgQAAEAAABvdmVyZmxvdyBkZXNlcmlhbGl6aW5nIFN5c3\ -RlbVRpbWUgZXBvY2ggb2Zmc2V0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAG92ZXJmbG93IGRlc2VyaWFs\ -aXppbmcgU3lzdGVtVGltZVN5c3RlbVRpbWUgbXVzdCBiZSBsYXRlciB0aGFuIFVOSVhfRVBPQ0gAAA\ -ArAAAABAAAAAQAAAANAAAAKwAAAAQAAAAEAAAALAAAAA0AAADECRAALQAAAC4AAAAvAAAAMAAAAB0A\ -AAAXAAAADAAAAAQAAAAxAAAAFwAAAAwAAAAEAAAAMgAAADEAAAAAChAAMwAAADQAAAA1AAAAMwAAAD\ -YAAAA3AAAAFAAAAAQAAAA4AAAANwAAABQAAAAEAAAAOQAAADgAAAA8ChAAMwAAADoAAAA7AAAAMwAA\ -ADYAAAA8AAAAAQAAAAEAAAAHAAAAPAAAAAEAAAABAAAAPQAAAAcAAAB4ChAAPgAAAD8AAABAAAAAPg\ -AAAEEAAABCAAAACAAAAAQAAAAMAAAAQgAAAAgAAAAEAAAAQwAAAAwAAAC0ChAARAAAAEUAAABGAAAA\ -RwAAADYAAABIAAAACAAAAAQAAABJAAAASAAAAAgAAAAEAAAASgAAAEkAAADwChAASwAAAEwAAAA1AA\ -AATQAAADYAAABOAAAAEAAAAAQAAABPAAAATgAAABAAAAAEAAAAUAAAAE8AAAAsCxAAUQAAAFIAAAA1\ -AAAAUwAAADYAAABUAAAAGAAAAAQAAABVAAAAVAAAABgAAAAEAAAAVgAAAFUAAABoCxAAVwAAAFgAAA\ -A1AAAAWQAAADYAAAATAAAACAAAAAQAAABJAAAAEwAAAAgAAAAEAAAASgAAAEkAAACkCxAASwAAAFoA\ -AAA1AAAATQAAADYAAABbAAAADAAAAAQAAABcAAAAWwAAAAwAAAAEAAAAXQAAAFwAAADgCxAAXgAAAF\ -8AAAA1AAAAYAAAADYAAABhAAAAYgAAAGMAAABkAAAAZQAAAGYAAABnAAAAaAAAAGkAAABqAAAAawAA\ -AGwAAABtAAAAbgAAAG8AAABwAAAAcQAAAHIAAABzAAAAdAAAAHUAAAB2AAAAdwAAAHgAAAB0AAAAfi\ -8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3VybC0y\ -LjMuMS9zcmMvbGliLnJzAIAMEABLAAAAQgoAAAoAAAAKfXssCjogL3J1c3RjL2ViMjYyOTZiNTU2Y2\ -VmMTBmYjcxM2EzOGYzZDE2Yjk4ODYwODBmMjYvbGlicmFyeS9jb3JlL3NyYy9zdHIvcGF0dGVybi5y\ -cwAA4wwQAE8AAAC4AQAAJgAAAH4vLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNm\ -YxN2QyMmJiYTE1MDAxZi9yaW5nLTAuMTYuMjAvc3JjL2RpZ2VzdC5ycwAAAEQNEABRAAAA+wAAAAoA\ -AABNYXAga2V5IGlzIG5vdCBhIHN0cmluZyBhbmQgY2Fubm90IGJlIGFuIG9iamVjdCBrZXkALAIQAA\ -UAAAB+Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYv\ -aW5kZXhtYXAtMi4wLjAvc3JjL21hcC5yc+QNEABQAAAAvQEAABoAAAB+Ly5jYXJnby9yZWdpc3RyeS\ -9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvaW5kZXhtYXAtMi4wLjAvc3JjL21h\ -cC9jb3JlLnJzAAAARA4QAFUAAAApAAAAIwAAAGluZGV4IG5vdCBmb3VuZABEDhAAVQAAADYAAAAKAA\ -AARA4QAFUAAAAtAQAAMQAAAEQOEABVAAAAIQAAAA8AAAAQAAAAAAAAAAEAAAB5AAAAEAAAAAAAAAAB\ -AAAAegAAABAAAAAAAAAAAQAAAHsAAAAQAAAAAAAAAAEAAAB8AAAAEwAAAAQAAAAEAAAAfQAAAH4AAA\ -B+AAAAEwAAAAQAAAAEAAAAfwAAAIAAAACAAAAAEwAAAAQAAAAEAAAAgQAAAIIAAACCAAAAEwAAAAQA\ -AAAEAAAAgwAAAIQAAACEAAAAEwAAAAgAAAAEAAAAhQAAAIYAAAATAAAACAAAAAQAAACHAAAAiAAAAB\ -MAAAAIAAAABAAAAIkAAACKAAAAEwAAAAgAAAAEAAAAiwAAAIwAAAATAAAACAAAAAQAAACNAAAAjgAA\ -ABMAAAAIAAAABAAAAI8AAACQAAAAEwAAAAgAAAAEAAAAkQAAAJIAAAATAAAACAAAAAQAAACTAAAAlA\ -AAABMAAAAIAAAABAAAAJUAAACWAAAAEwAAAAwAAAAEAAAAlwAAAJgAAAATAAAADAAAAAQAAACZAAAA\ -mgAAAExhenkgaW5zdGFuY2UgaGFzIHByZXZpb3VzbHkgYmVlbiBwb2lzb25lZAAAaBAQACoAAAB+Ly\ -5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvb25jZV9j\ -ZWxsLTEuMTguMC9zcmMvbGliLnJzAACcEBAAUgAAACEFAAAZAAAAbG9jYXRpb25odHRwaHR0cHNyc1\ -9saWIvc3JjL2NvbW1vbi5ycwAAABEREAAUAAAAFgAAACEAAABgARAAAAAAAGABEAAAAAAAYAEQAAAA\ -AABkYXRhYmxvYkRvbid0IGtub3cgaG93IHRvIGNyZWF0ZSBjYWNoZSBuYW1lIGZvciBzY2hlbWU6IF\ -gREAAwAAAAZGVub19jYWNoZV9kaXI6OmNvbW1vbgAAkBEQABYAAACQERAAFgAAABEREAAUAAAAIAAA\ -AF9QT1JUcnNfbGliL3NyYy9nbG9iYWwucnMAAADJERAAFAAAAGIAAAAcAAAAbWV0YWRhdGEuanNvbm\ -1hbmlmZXN0Lmpzb25yc19saWIvc3JjL2xvY2FsLnJzY29udGVudC10eXBlXwAAChIQABMAAADaAQAA\ -BgAAAAoSEAATAAAA2wEAABAAAAAKEhAAEwAAAN0BAAAdAAAAYAEQAAAAAAApEhAAAQAAAAoSEAATAA\ -AA3gEAAC4AAAAKEhAAEwAAAN4BAAAFAAAAChIQABMAAADqAQAAJgAAAHBybmF1eG51bGNvbTBjb20x\ -Y29tMmNvbTNjb200Y29tNWNvbTZjb203Y29tOGNvbTlscHQwbHB0MWxwdDJscHQzbHB0NGxwdDVscH\ -Q2bHB0N2xwdDhscHQ5Y29uLmpzLnRzLmpzeC50c3gubXRzLm1qcy5qc29uLndhc20jAAAAGBMQAAEA\ -AABgARAAAAAAAAoSEAATAAAAtwEAABkAAAAYExAAAQAAACkSEAABAAAAYAEQAAAAAAAKEhAAEwAAAL\ -kBAAAiAAAAeC1kZW5vLXdhcm5pbmd4LXR5cGVzY3JpcHQtdHlwZXMAAAAAHRIQAAwAAAAAERAACAAA\ -AGQTEAAOAAAAchMQABIAAAAdEhAADAAAAC8AAAAKEhAAEwAAAGwCAAAeAAAAYAEQAAAAAACwExAAAQ\ -AAAAoSEAATAAAAcgIAACgAAAAKEhAAEwAAAHMCAAAmAAAARmFpbGVkIHNhdmluZyBsb2NhbCBjYWNo\ -ZSBtYW5pZmVzdDog9BMQACQAAABkZW5vX2NhY2hlX2Rpcjo6bG9jYWwAAAAgFBAAFQAAACAUEAAVAA\ -AAChIQABMAAACBAgAAChIQABMAAACUAgAANQAAAAoSEAATAAAAowIAADMAAABGYWlsZWQgZGVzZXJp\ -YWxpemluZyBsb2NhbCBjYWNoZSBtYW5pZmVzdDogAHQUEAArAAAAZGVub19jYWNoZV9kaXI6OmxvY2\ -FsOjptYW5pZmVzdACoFBAAHwAAAKgUEAAfAAAAChIQABMAAAD3AgAAChIQABMAAABhAwAANgAAAHJz\ -X2xpYi9zcmMvbGliLnJzAAAA9BQQABEAAAC6AAAAOwAAAEpTIEVycm9yOiAAABgVEAAKAAAAaGVhZG\ -Vyc3VybG5vd3N0cnVjdCBTZXJpYWxpemVkQ2FjaGVkVXJsTWV0YWRhdGFzdHJ1Y3QgU2VyaWFsaXpl\ -ZENhY2hlZFVybE1ldGFkYXRhIHdpdGggMyBlbGVtZW50cwAAAFsVEAAyAAAAVXJsVG9GaWxlbmFtZU\ -NvbnZlcnNpb25FcnJvckNhbid0IGNvbnZlcnQgdXJsICgiIikgdG8gZmlsZW5hbWUuALQVEAAUAAAA\ -yBUQAA8AAABzdHJ1Y3QgU2VyaWFsaXplZExvY2FsQ2FjaGVNYW5pZmVzdERhdGFNb2R1bGVmb2xkZX\ -JzbW9kdWxlc3N0cnVjdCBTZXJpYWxpemVkTG9jYWxDYWNoZU1hbmlmZXN0RGF0YQAAaW52YWxpZCB0\ -eXBlOiAsIGV4cGVjdGVkIAAAAEwWEAAOAAAAWhYQAAsAAABMFhAAAAAAAEVycm9yAAAAngAAAAQAAA\ -AEAAAAnwAAAKAAAAAMAAAABAAAAKEAAACiAAAAowAAAGEgRGlzcGxheSBpbXBsZW1lbnRhdGlvbiBy\ -ZXR1cm5lZCBhbiBlcnJvciB1bmV4cGVjdGVkbHkApAAAAAAAAAABAAAAJwAAAC9ydXN0Yy9lYjI2Mj\ -k2YjU1NmNlZjEwZmI3MTNhMzhmM2QxNmI5ODg2MDgwZjI2L2xpYnJhcnkvYWxsb2Mvc3JjL3N0cmlu\ -Zy5ycwD4FhAASwAAANwJAAAOAAAApQAAAAQAAAAEAAAApgAAAKcAAACoAAAAVHJpZWQgdG8gc2hyaW\ -5rIHRvIGEgbGFyZ2VyIGNhcGFjaXR5bBcQACQAAAAvcnVzdGMvZWIyNjI5NmI1NTZjZWYxMGZiNzEz\ -YTM4ZjNkMTZiOTg4NjA4MGYyNi9saWJyYXJ5L2FsbG9jL3NyYy9yYXdfdmVjLnJzmBcQAEwAAACuAQ\ -AACQAAAAoKU3RhY2s6CgoKCmNhbGxlZCBgT3B0aW9uOjp1bndyYXAoKWAgb24gYSBgTm9uZWAgdmFs\ -dWUAqwAAAAwAAAAEAAAArAAAAK0AAACuAAAAYSBEaXNwbGF5IGltcGxlbWVudGF0aW9uIHJldHVybm\ -VkIGFuIGVycm9yIHVuZXhwZWN0ZWRseQCvAAAAAAAAAAEAAAAnAAAAL3J1c3RjL2ViMjYyOTZiNTU2\ -Y2VmMTBmYjcxM2EzOGYzZDE2Yjk4ODYwODBmMjYvbGlicmFyeS9hbGxvYy9zcmMvc3RyaW5nLnJzAI\ -wYEABLAAAA3AkAAA4AAACwAAAABAAAAAQAAACxAAAAsgAAALMAAAAvcnVzdGMvZWIyNjI5NmI1NTZj\ -ZWYxMGZiNzEzYTM4ZjNkMTZiOTg4NjA4MGYyNi9saWJyYXJ5L2NvcmUvc3JjL3N0ci9wYXR0ZXJuLn\ -JzAAAZEABPAAAA/gUAABQAAAAAGRAATwAAAP4FAAAhAAAAABkQAE8AAAAKBgAAFAAAAAAZEABPAAAA\ -CgYAACEAAABkZXNjcmlwdGlvbigpIGlzIGRlcHJlY2F0ZWQ7IHVzZSBEaXNwbGF5L3J1c3RjL2ViMj\ -YyOTZiNTU2Y2VmMTBmYjcxM2EzOGYzZDE2Yjk4ODYwODBmMjYvbGlicmFyeS9jb3JlL3NyYy9zbGlj\ -ZS9tb2QucnMAAAC4GRAATQAAAO8JAAAnAAAAMDAwMTAyMDMwNDA1MDYwNzA4MDkxMDExMTIxMzE0MT\ -UxNjE3MTgxOTIwMjEyMjIzMjQyNTI2MjcyODI5MzAzMTMyMzMzNDM1MzYzNzM4Mzk0MDQxNDI0MzQ0\ -NDU0NjQ3NDg0OTUwNTE1MjUzNTQ1NTU2NTc1ODU5NjA2MTYyNjM2NDY1NjY2NzY4Njk3MDcxNzI3Mz\ -c0NzU3Njc3Nzg3OTgwODE4MjgzODQ4NTg2ODc4ODg5OTA5MTkyOTM5NDk1OTY5Nzk4OTlhc3NlcnRp\ -b24gZmFpbGVkOiBzZWxmLmlzX2NoYXJfYm91bmRhcnkobmV3X2xlbimMGBAASwAAAP8EAAANAAAAVH\ -JpZWQgdG8gc2hyaW5rIHRvIGEgbGFyZ2VyIGNhcGFjaXR5IBsQACQAAAAvcnVzdGMvZWIyNjI5NmI1\ -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\ -AuMTA0L3NyYy9lcnJvci5yc3JlY3Vyc2lvbiBsaW1pdCBleGNlZWRlZHVuZXhwZWN0ZWQgZW5kIG9m\ -IGhleCBlc2NhcGV0cmFpbGluZyBjaGFyYWN0ZXJzdHJhaWxpbmcgY29tbWFsb25lIGxlYWRpbmcgc3\ -Vycm9nYXRlIGluIGhleCBlc2NhcGVmbG9hdCBrZXkgbXVzdCBiZSBmaW5pdGUgKGdvdCBOYU4gb3Ig\ -Ky8taW5mKWludmFsaWQgdmFsdWU6IGV4cGVjdGVkIGtleSB0byBiZSBhIG51bWJlciBpbiBxdW90ZX\ -NrZXkgbXVzdCBiZSBhIHN0cmluZ2NvbnRyb2wgY2hhcmFjdGVyIChcdTAwMDAtXHUwMDFGKSBmb3Vu\ -ZCB3aGlsZSBwYXJzaW5nIGEgc3RyaW5naW52YWxpZCB1bmljb2RlIGNvZGUgcG9pbnRudW1iZXIgb3\ -V0IG9mIHJhbmdlaW52YWxpZCBudW1iZXJpbnZhbGlkIGVzY2FwZWV4cGVjdGVkIGAiYGV4cGVjdGVk\ -IHZhbHVlZXhwZWN0ZWQgaWRlbnRleHBlY3RlZCBgLGAgb3IgYH1gZXhwZWN0ZWQgYCxgIG9yIGBdYG\ -V4cGVjdGVkIGA6YEVPRiB3aGlsZSBwYXJzaW5nIGEgdmFsdWVFT0Ygd2hpbGUgcGFyc2luZyBhIHN0\ -cmluZ0VPRiB3aGlsZSBwYXJzaW5nIGFuIG9iamVjdEVPRiB3aGlsZSBwYXJzaW5nIGEgbGlzdCBhdC\ -BsaW5lICBjb2x1bW4gACwYEAAAAAAA6icQAAkAAADzJxAACAAAAEVycm9yKCwgbGluZTogLCBjb2x1\ -bW46ICkAAAAUKBAABgAAABooEAAIAAAAIigQAAoAAAAsKBAAAQAAAGludmFsaWQgdHlwZTogLCBleH\ -BlY3RlZCAAAABQKBAADgAAAF4oEAALAAAAaW52YWxpZCB0eXBlOiBudWxsLCBleHBlY3RlZCAAAAB8\ -KBAAHQAAAGAlEABWAAAA3gEAAB4AAABgJRAAVgAAAOIBAAAJAAAAYCUQAFYAAADpAQAAHgAAAGAlEA\ -BWAAAA8gEAACcAAABgJRAAVgAAAPYBAAApAAAAMDEyMzQ1Njc4OWFiY2RlZiAgdXV1dXV1dXVidG51\ -ZnJ1dXV1dXV1dXV1dXV1dXV1dXUAACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\ -AAAAAAAAAAAAAAAAAAAAAAAAAAAABcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\ -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\ -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\ -AAAAAAAAAAAAAH4vLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYT\ -E1MDAxZi9zZXJkZV9qc29uLTEuMC4xMDQvc3JjL3JlYWQucnMABioQAFUAAAChAQAAFAAAAAYqEABV\ -AAAAxgEAABMAAAAGKhAAVQAAANUBAAAwAAAABioQAFUAAADLAQAAKQAAAAYqEABVAAAAzwEAADQAAA\ -AGKhAAVQAAACYCAAATAAAABioQAFUAAAA+AgAAJQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB\ -AQEBAQEBAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\ -AAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\ -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\ -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGKhAA\ -VQAAAKYDAAAvAAAA//////////////////////////////////////////////////////////////\ -//AAECAwQFBgcICf////////8KCwwNDg///////////////////////////////////woLDA0OD///\ -//////////////////////////////////////////////////////////////////////////////\ -//////////////////////////////////////////////////////////////////////////////\ -/////////////////////////////////////////////7QAAAAAAAAAAQAAALQAAAAAAAAAAQAAAN\ -wsEAC1AAAAtgAAALcAAAB+Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdk\ -MjJiYmExNTAwMWYvbG9nLTAuNC4xOS9zcmMvbGliLnJza2V5LXZhbHVlIHN1cHBvcnQgaXMgZXhwZX\ -JpbWVudGFsIGFuZCBtdXN0IGJlIGVuYWJsZWQgdXNpbmcgdGhlIGBrdl91bnN0YWJsZWAgZmVhdHVy\ -ZQAAAAQtEABMAAAAxQUAAAkAAAB+Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLT\ -ZmMTdkMjJiYmExNTAwMWYvcGFya2luZ19sb3RfY29yZS0wLjkuOC9zcmMvcGFya2luZ19sb3QucnO4\ -LRAAYAAAAGsBAAAXAAAAuC0QAGAAAACGAQAAFwAAAGNhbGxlZCBgUmVzdWx0Ojp1bndyYXAoKWAgb2\ -4gYW4gYEVycmAgdmFsdWUAuAAAAAgAAAAEAAAAuQAAAH4vLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRl\ -eC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9zbWFsbHZlYy0xLjExLjAvc3JjL2xpYi5ycwAAAH\ -QuEABRAAAAVgEAAC4AAABjYXBhY2l0eSBvdmVyZmxvdwAAAHQuEABRAAAARQEAADYAAABhc3NlcnRp\ -b24gZmFpbGVkOiBuZXdfY2FwID49IGxlbnQuEABRAAAAngQAAA0AAABSd0xvY2sgcmVhZGVyIGNvdW\ -50IG92ZXJmbG93fi8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJh\ -MTUwMDFmL3BhcmtpbmdfbG90LTAuMTIuMS9zcmMvcmF3X3J3bG9jay5ycwBILxAAWwAAAL8CAAAeAA\ -AAugAAAAgAAAAEAAAAuwAAALwAAABUcmllZCB0byBzaHJpbmsgdG8gYSBsYXJnZXIgY2FwYWNpdHnI\ -LxAAJAAAAC9ydXN0Yy9lYjI2Mjk2YjU1NmNlZjEwZmI3MTNhMzhmM2QxNmI5ODg2MDgwZjI2L2xpYn\ -JhcnkvYWxsb2Mvc3JjL3Jhd192ZWMucnP0LxAATAAAAK4BAAAJAAAAugAAAAgAAAAEAAAAvQAAAH4v\ -LmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9wYXJraW\ -5nX2xvdF9jb3JlLTAuOS44L3NyYy9wYXJraW5nX2xvdC5yc2AwEABgAAAASgEAAAwAAABQYXJraW5n\ -IG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybX4vLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC\ -5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9wYXJraW5nX2xvdF9jb3JlLTAuOS44L3NyYy90aHJl\ -YWRfcGFya2VyL3dhc20ucnMAAAD2MBAAZwAAABoAAAAJAAAA9jAQAGcAAAAeAAAACQAAAPYwEABnAA\ -AAIgAAAAkAAAD2MBAAZwAAACYAAAAJAAAA9jAQAGcAAAAqAAAACQAAAEFsbG9jRXJybGF5b3V0AAC+\ -AAAABAAAAAQAAAC/AAAAQ2FwYWNpdHlPdmVyZmxvd2NhbGxlZCBgT3B0aW9uOjp1bndyYXAoKWAgb2\ -4gYSBgTm9uZWAgdmFsdWUAwAAAAAQAAAAEAAAAwQAAAAEAAAB+Ly5jYXJnby9yZWdpc3RyeS9zcmMv\ -aW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvb25jZV9jZWxsLTEuMTguMC9zcmMvaW1wX3\ -N0ZC5ycwAAIDIQAFYAAACbAAAACQAAACAyEABWAAAAoQAAADYAAABIYXNoIHRhYmxlIGNhcGFjaXR5\ -IG92ZXJmbG93mDIQABwAAAB+Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMT\ -dkMjJiYmExNTAwMWYvaGFzaGJyb3duLTAuMTQuMC9zcmMvcmF3L21vZC5ycwAAvDIQAFYAAABSAAAA\ -KAAAAMIAAAAMAAAABAAAAMMAAADEAAAAJgAAAGEgRGlzcGxheSBpbXBsZW1lbnRhdGlvbiByZXR1cm\ -5lZCBhbiBlcnJvciB1bmV4cGVjdGVkbHkAxQAAAAAAAAABAAAAJwAAAC9ydXN0Yy9lYjI2Mjk2YjU1\ -NmNlZjEwZmI3MTNhMzhmM2QxNmI5ODg2MDgwZjI2L2xpYnJhcnkvYWxsb2Mvc3JjL3N0cmluZy5ycw\ -CEMxAASwAAANwJAAAOAAAAL3J1c3RjL2ViMjYyOTZiNTU2Y2VmMTBmYjcxM2EzOGYzZDE2Yjk4ODYw\ -ODBmMjYvbGlicmFyeS9jb3JlL3NyYy9zdHIvcGF0dGVybi5ycwDgMxAATwAAAKcFAAAhAAAA4DMQAE\ -8AAACzBQAAFAAAAOAzEABPAAAAswUAACEAAAB+Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3Jh\ -dGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvdXJsLTIuMy4xL3NyYy9saWIucnMAYDQQAEsAAABCCgAACg\ -AAAOAzEABPAAAANwQAABcAAAAuZC50cy5kLi5qcy50c2J1aWxkaW5mby5qc29uLnRzeC5kLmN0cy5k\ -Lm10cy5kLnRzLmN0cy5tdHMuY2pzLm1qcy5qc3hhcHBsaWNhdGlvbi9qc29uYXBwbGljYXRpb24vd2\ -FzbXRleHQvdHN4dGV4dC90eXBlc2NyaXB0dGV4dC9qYXZhc2NyaXB0dGV4dC9qc3hjb250ZW50LXR5\ -cGV+Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvZG\ -Vub19tZWRpYV90eXBlLTAuMS4xL3NyYy9saWIucnMAAGs1EABXAAAAqwAAAAsAAABhcHBsaWNhdGlv\ -bi90eXBlc2NyaXB0dmlkZW8vdm5kLmRsbmEubXBlZy10dHN2aWRlby9tcDJ0YXBwbGljYXRpb24veC\ -10eXBlc2NyaXB0YXBwbGljYXRpb24vamF2YXNjcmlwdGFwcGxpY2F0aW9uL2VjbWFzY3JpcHR0ZXh0\ -L2VjbWFzY3JpcHRhcHBsaWNhdGlvbi94LWphdmFzY3JpcHRhcHBsaWNhdGlvbi9ub2RldGV4dC9qc2\ -NyaXB0dGV4dC9qc29udGV4dC9wbGFpbmRhdGFhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW10c210c2N0\ -c3RzeGpzanN4bWpzY2pzanNvbndhc210c2J1aWxkaW5mb21hcAAAAAMAAAAEAAAABAAAAAQAAAADAA\ -AABAAAAAQAAAAFAAAABgAAAAYAAAAEAAAABQAAAAMAAAAMAAAAAwAAAAMAAADUNBAADTUQAAk1EAAF\ -NRAAzjQQAAE1EAD9NBAA+DQQAPI0EADsNBAA6DQQAOM0EADUNBAA1zQQANQ0EADUNBAAL3J1c3RjL2\ -ViMjYyOTZiNTU2Y2VmMTBmYjcxM2EzOGYzZDE2Yjk4ODYwODBmMjYvbGlicmFyeS9jb3JlL3NyYy9z\ -bGljZS9tb2QucnMAAABwNxAATQAAAO8JAAAnAAAAY2FsbGVkIGBPcHRpb246OnVud3JhcCgpYCBvbi\ -BhIGBOb25lYCB2YWx1ZS9ydXN0Yy9lYjI2Mjk2YjU1NmNlZjEwZmI3MTNhMzhmM2QxNmI5ODg2MDgw\ -ZjI2L2xpYnJhcnkvY29yZS9zcmMvc3RyL3BhdHRlcm4ucnMAAPs3EABPAAAAuAEAACYAAAB+Ly5jYX\ -Jnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvZGF0YS11cmwt\ -MC4yLjAvc3JjL21pbWUucnMAAABcOBAAUQAAAD0AAAAdAAAALzs9Ilx+Ly5jYXJnby9yZWdpc3RyeS\ -9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvZGF0YS11cmwtMC4yLjAvc3JjL2xp\ -Yi5ycwAAAMU4EABQAAAAkgAAABgAAADFOBAAUAAAAJsAAAAbAAAAxTgQAFAAAACbAAAALgAAAHRleH\ -QvcGxhaW5wbGFpbmNoYXJzZXQAAMU4EABQAAAA7AAAAAsAAAAwMTIzNDU2Nzg5QUJDREVGAAAAAAAA\ -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAA\ -ABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB\ -AAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\ -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\ -AAAAAAAAAAAAAAAAAAAAAC9ydXN0Yy9lYjI2Mjk2YjU1NmNlZjEwZmI3MTNhMzhmM2QxNmI5ODg2MD\ -gwZjI2L2xpYnJhcnkvY29yZS9zcmMvY2hhci9tZXRob2RzLnJzgDoQAFAAAADRBgAACgAAAGF0dGVt\ -cHQgdG8gZGl2aWRlIGJ5IHplcm8vcnVzdGMvZWIyNjI5NmI1NTZjZWYxMGZiNzEzYTM4ZjNkMTZiOT\ -g4NjA4MGYyNi9saWJyYXJ5L2NvcmUvc3JjL3NsaWNlL21vZC5ycwAA+ToQAE0AAADvCQAAJwAAAPk6\ -EABNAAAADQoAAB4AAABjYWxsZWQgYE9wdGlvbjo6dW53cmFwKClgIG9uIGEgYE5vbmVgIHZhbHVlAJ\ -gvikKRRDdxz/vAtaXbtelbwlY58RHxWaSCP5LVXhyrmKoH2AFbgxK+hTEkw30MVXRdvnL+sd6Apwbc\ -m3Txm8HBaZvkhke+78adwQ/MoQwkbyzpLaqEdErcqbBc2oj5dlJRPphtxjGoyCcDsMd/Wb/zC+DGR5\ -Gn1VFjygZnKSkUhQq3JzghGy78bSxNEw04U1RzCmW7Cmp2LsnCgYUscpKh6L+iS2YaqHCLS8KjUWzH\ -GeiS0SQGmdaFNQ70cKBqEBbBpBkIbDceTHdIJ7W8sDSzDBw5SqrYTk/KnFvzby5o7oKPdG9jpXgUeM\ -iECALHjPr/vpDrbFCk96P5vvJ4ccZ+Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlv\ -LTZmMTdkMjJiYmExNTAwMWYvcmluZy0wLjE2LjIwL3NyYy9kaWdlc3QucnMAAACUPBAAUQAAAEAAAA\ -AaAAAAlDwQAFEAAABBAAAACQAAAJQ8EABRAAAASQAAABIAAACUPBAAUQAAAE8AAAAJAAAAYXNzZXJ0\ -aW9uIGZhaWxlZDogbnVtX3BlbmRpbmcgPD0gcGVuZGluZy5sZW4oKQAAlDwQAFEAAABQAAAACQAAAJ\ -Q8EABRAAAAUwAAAAkAAACUPBAAUQAAAFcAAAAoAAAAlDwQAFEAAABgAAAAJAAAAJQ8EABRAAAAZgAA\ -AA4AAACUPBAAUQAAAGgAAAAOAAAAlDwQAFEAAABqAAAADgAAAJQ8EABRAAAAawAAAAkAAACUPBAAUQ\ -AAAGsAAAAtAAAAlDwQAFEAAACpAAAADQAAAJQ8EABRAAAAqQAAAE0AAACUPBAAUQAAALEAAAANAAAA\ -lDwQAFEAAACxAAAASAAAAJQ8EABRAAAAsQAAADcAAACUPBAAUQAAALIAAAAgAAAAlDwQAFEAAACzAA\ -AAGgAAAJQ8EABRAAAAtwAAABoAAACUPBAAUQAAALkAAAAcAAAAlDwQAFEAAAC7AAAADQAAAJQ8EABR\ -AAAAvAAAACMAAACUPBAAUQAAALwAAAASAAAAlDwQAFEAAADHAAAAGgAAAGfmCWqFrme7cvNuPDr1T6\ -V/Ug5RjGgFm6vZgx8ZzeBbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADGAAAAxwAAACAA\ -AAAgAAAAQAAAAAgAAAABAAAAAAAAAGNsb3N1cmUgaW52b2tlZCByZWN1cnNpdmVseSBvciBhZnRlci\ -BiZWluZyBkcm9wcGVkAADUAAAABAAAAAQAAADVAAAAVHJpZWQgdG8gc2hyaW5rIHRvIGEgbGFyZ2Vy\ -IGNhcGFjaXR5XD8QACQAAAAvcnVzdGMvZWIyNjI5NmI1NTZjZWYxMGZiNzEzYTM4ZjNkMTZiOTg4Nj\ -A4MGYyNi9saWJyYXJ5L2FsbG9jL3NyYy9yYXdfdmVjLnJziD8QAEwAAACuAQAACQAAAEpzVmFsdWUo\ -KQAAAOQ/EAAIAAAA7D8QAAEAAABudWxsIHBvaW50ZXIgcGFzc2VkIHRvIHJ1c3RyZWN1cnNpdmUgdX\ -NlIG9mIGFuIG9iamVjdCBkZXRlY3RlZCB3aGljaCB3b3VsZCBsZWFkIHRvIHVuc2FmZSBhbGlhc2lu\ -ZyBpbiBydXN0AADZAAAADAAAAAQAAADaAAAA2wAAACYAAABhIERpc3BsYXkgaW1wbGVtZW50YXRpb2\ -4gcmV0dXJuZWQgYW4gZXJyb3IgdW5leHBlY3RlZGx5ANwAAAAAAAAAAQAAACcAAAAvcnVzdGMvZWIy\ -NjI5NmI1NTZjZWYxMGZiNzEzYTM4ZjNkMTZiOTg4NjA4MGYyNi9saWJyYXJ5L2FsbG9jL3NyYy9zdH\ -JpbmcucnMAzEAQAEsAAADcCQAADgAAAN0AAAAEAAAABAAAAN4AAADfAAAA4AAAAGNhbGxlZCBgT3B0\ -aW9uOjp1bndyYXAoKWAgb24gYSBgTm9uZWAgdmFsdWUA4QAAAAEAAAABAAAAPQAAAGNhbGxlZCBgUm\ -VzdWx0Ojp1bndyYXAoKWAgb24gYW4gYEVycmAgdmFsdWUAzEAQAEsAAADjBgAAJAAAAGFzc2VydGlv\ -biBmYWlsZWQ6IHNlbGYuaXNfY2hhcl9ib3VuZGFyeShzdGFydCkAAMxAEABLAAAA5AYAAAkAAABhc3\ -NlcnRpb24gZmFpbGVkOiBzZWxmLmlzX2NoYXJfYm91bmRhcnkoZW5kKcxAEABLAAAA5QYAAAkAAABh\ -c3NlcnRpb24gZmFpbGVkOiBzZWxmLmlzX2NoYXJfYm91bmRhcnkobmV3X2xlbinMQBAASwAAAP8EAA\ -ANAAAAYXNzZXJ0aW9uIGZhaWxlZDogc2VsZi5pc19jaGFyX2JvdW5kYXJ5KGF0KQDMQBAASwAAAJgG\ -AAAJAAAAL3J1c3RjL2ViMjYyOTZiNTU2Y2VmMTBmYjcxM2EzOGYzZDE2Yjk4ODYwODBmMjYvbGlicm\ -FyeS9jb3JlL3NyYy9zdHIvcGF0dGVybi5ycwCwQhAATwAAALgBAAAmAAAAsEIQAE8AAAD0AQAAJgAA\ -AH4vLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi91cm\ -wtMi4zLjEvc3JjL2hvc3QucnMgQxAATAAAAFIAAAAkAAAAIEMQAEwAAACCAAAAJAAAAP////8AAAAA\ -AAAAAAAAAIBbXToAQEEQAAAAAAAgQxAATAAAANYAAAAbAAAAIEMQAEwAAAAGAQAAHQAAADAAAAA5AA\ -AAAAAAADB4MFggQxAATAAAACABAAASAAAAIEMQAEwAAAAjAQAAEgAAADAAAAA3AAAAAAAAAGEAAABm\ -AAAAAAAAAEEAAABGAAAAAAAAAKBDEABhIG5vbi1lbXB0eSBsaXN0IG9mIG51bWJlcnMAIEMQAEwAAA\ -BPAQAAIgAAACBDEABMAAAApQEAAAkAAAAgQxAATAAAAMsBAAARAAAAIEMQAEwAAADkAQAAGAAAAGZ0\ -cGh0dHBodHRwc3dzd3NzZmlsZX4vLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNm\ -YxN2QyMmJiYTE1MDAxZi91cmwtMi4zLjEvc3JjL3BhcnNlci5ycwCRRBAATgAAABQBAAAqAAAAkUQQ\ -AE4AAAC0AQAAMgAAAC8vAACNRBAABAAAAGZpbGU6Ly8AkUQQAE4AAAAuAgAARgAAAJFEEABOAAAALg\ -IAAFYAAABmaWxlOi8vL5FEEABOAAAAYAIAACUAAACRRBAATgAAANACAAAhAAAAAAAAAAAAAAAAAAAA\ -AAAAAAAAAACRRBAATgAAAI0DAAAxAAAA/////w2AAPwBAAB4AQAAuJFEEABOAAAAsQMAADUAAACeQx\ -AAAQAAAJFEEABOAAAAxgMAADoAAACRRBAATgAAAMADAAArAAAAkUQQAE4AAAD2AwAAHQAAAGxvY2Fs\ -aG9zdAAAAJFEEABOAAAAHQQAAEEAAACRRBAATgAAAD8EAAAdAAAAkUQQAE4AAADDBAAAEgAAAJFEEA\ -BOAAAAxQQAABIAAAAuLiUyZSUyZSUyZSUyRSUyRSUyZSUyRSUyRSUyZS4lMkUuLiUyZS4lMkUuJTJl\ -JTJFAAAA/////y2AANAAAAAQAQAAqP////8tgADQAAAAAAEAAKj/////DQAA0AAAAAABAACokUQQAE\ -4AAAAIBQAAIwAAAJFEEABOAAAADQUAADwAAACRRBAATgAAABsFAAA0AAAAkUQQAE4AAAAmBQAAIgAA\ -AJFEEABOAAAAJgUAAE4AAACRRBAATgAAACsFAAA4AAAAUHJvZ3JhbW1pbmcgZXJyb3IuIHBhcnNlX3\ -F1ZXJ5X2FuZF9mcmFnbWVudCgpIGNhbGxlZCB3aXRob3V0ID8gb3IgIwCRRBAATgAAAHUFAAASAAAA\ -kUQQAE4AAACRBQAAHwAAAP////+NAABQAAAAAAAAAID/////DQAAUAAAAAAAAACA/////wUAAFAAAA\ -AAAQAAgJFEEABOAAAADgYAACkAAACRRBAATgAAABwGAABWAAAAfi8uY2FyZ28vcmVnaXN0cnkvc3Jj\ -L2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3VybC0yLjMuMS9zcmMvbGliLnJzAJxHEA\ -BLAAAAbgUAAEkAAABhc3NlcnRpb24gZmFpbGVkOiBzZWxmLmZyYWdtZW50X3N0YXJ0LmlzX25vbmUo\ -KQCcRxAASwAAAIEFAAANAAAAnEcQAEsAAACCBQAASQAAAJxHEABLAAAApQUAAEYAAACcRxAASwAAAB\ -oGAABDAAAAJTJGAJxHEABLAAAAIgYAAB0AAACcRxAASwAAADoGAABIAAAAnEcQAEsAAAA0CgAACgAA\ -AJxHEABLAAAAOwoAAAoAAACcRxAASwAAAEIKAAAKAAAAVVJMcyBtb3JlIHRoYW4gNCBHQiBhcmUgbm\ -90IHN1cHBvcnRlZGEgY2Fubm90LWJlLWEtYmFzZSBVUkwgZG9lc27igJl0IGhhdmUgYSBob3N0IHRv\ -IHNldHJlbGF0aXZlIFVSTCB3aXRoIGEgY2Fubm90LWJlLWEtYmFzZSBiYXNlcmVsYXRpdmUgVVJMIH\ -dpdGhvdXQgYSBiYXNlaW52YWxpZCBkb21haW4gY2hhcmFjdGVyaW52YWxpZCBJUHY2IGFkZHJlc3Np\ -bnZhbGlkIElQdjQgYWRkcmVzc2ludmFsaWQgcG9ydCBudW1iZXJpbnZhbGlkIGludGVybmF0aW9uYW\ -wgZG9tYWluIG5hbWVlbXB0eSBob3N0T3ZlcmZsb3dTZXRIb3N0T25DYW5ub3RCZUFCYXNlVXJsUmVs\ -YXRpdmVVcmxXaXRoQ2Fubm90QmVBQmFzZUJhc2VSZWxhdGl2ZVVybFdpdGhvdXRCYXNlSW52YWxpZE\ -RvbWFpbkNoYXJhY3RlckludmFsaWRJcHY2QWRkcmVzc0ludmFsaWRJcHY0QWRkcmVzc0ludmFsaWRQ\ -b3J0SWRuYUVycm9yRW1wdHlIb3N0CQAAAAkAAAALAAAAEgAAABIAAAAWAAAAFgAAACAAAAAZAAAACA\ -AAAHtKEAByShAAZ0oQAFVKEABDShAALUoQABdKEAD3SRAA3kkQANZJEAB+Ly5jYXJnby9yZWdpc3Ry\ -eS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvdW5pY29kZS1ub3JtYWxpemF0aW\ -9uLTAuMS4yMi9zcmMvZGVjb21wb3NlLnJz1EoQAGQAAACPAAAAFwAAAEluZGV4IG91dCBvZiBib3Vu\ -ZHMASEsQABMAAADUShAAZAAAAFYAAAAeAAAA1EoQAGQAAABWAAAADQAAANRKEABkAAAATQAAAAkAAA\ -DiAAAACAAAAAQAAADjAAAA5AAAAAAAAAAAAAAAYXR0ZW1wdCB0byBkaXZpZGUgYnkgemVyby9ydXN0\ -Yy9lYjI2Mjk2YjU1NmNlZjEwZmI3MTNhMzhmM2QxNmI5ODg2MDgwZjI2L2xpYnJhcnkvY29yZS9zcm\ -Mvc2xpY2UvbW9kLnJzAADJSxAATQAAAO8JAAAnAAAAyUsQAE0AAADMAwAAIAAAAMlLEABNAAAAzAMA\ -AC0AAADJSxAATQAAANADAAAgAAAAyUsQAE0AAADQAwAAKwAAAC9ydXN0Yy9lYjI2Mjk2YjU1NmNlZj\ -EwZmI3MTNhMzhmM2QxNmI5ODg2MDgwZjI2L2xpYnJhcnkvY29yZS9zcmMvc2xpY2Uvc29ydC5ycwAA\ -aEwQAE4AAAAxBAAANwAAAGhMEABOAAAANAQAAA0AAABoTBAATgAAAEEEAAAYAAAAaEwQAE4AAABCBA\ -AAGQAAAGhMEABOAAAAQwQAACQAAABoTBAATgAAAEkEAAANAAAAY2FsbGVkIGBPcHRpb246OnVud3Jh\ -cCgpYCBvbiBhIGBOb25lYCB2YWx1ZQBoTBAATgAAAIcEAABAAAAAaEwQAE4AAACtBAAATgAAAGhMEA\ -BOAAAAuwQAAFYAAABoTBAATgAAAM8EAAARAAAAYXNzZXJ0aW9uIGZhaWxlZDogZW5kID49IHN0YXJ0\ -ICYmIGVuZCA8PSBsZW5oTBAATgAAACYFAAAFAAAAaEwQAE4AAAA3BQAAKAAAAGFzc2VydGlvbiBmYW\ -lsZWQ6IG9mZnNldCAhPSAwICYmIG9mZnNldCA8PSBsZW4AAGhMEABOAAAAmwAAAAUAAABoTBAATgAA\ -AKMAAAAeAAAAYXNzZXJ0aW9uIGZhaWxlZDogc2VsZi5pc19jaGFyX2JvdW5kYXJ5KG5ld19sZW4pL3\ -J1c3RjL2ViMjYyOTZiNTU2Y2VmMTBmYjcxM2EzOGYzZDE2Yjk4ODYwODBmMjYvbGlicmFyeS9hbGxv\ -Yy9zcmMvc3RyaW5nLnJzAFBOEABLAAAA/wQAAA0AAAB+Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZX\ -guY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvdGlueXZlYy0xLjYuMC9zcmMvYXJyYXl2ZWMucnOs\ -ThAAVAAAAJ0AAAAGAAAAL3J1c3RjL2ViMjYyOTZiNTU2Y2VmMTBmYjcxM2EzOGYzZDE2Yjk4ODYwOD\ -BmMjYvbGlicmFyeS9jb3JlL3NyYy9zdHIvcGF0dGVybi5ycwAQTxAATwAAALgBAAAmAAAArE4QAFQA\ -AAClAAAACgAAABBPEABPAAAA9AEAACYAAADiAAAACAAAAAQAAADlAAAAfi8uY2FyZ28vcmVnaXN0cn\ -kvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL2lkbmEtMC4zLjAvc3JjL3B1bnlj\ -b2RlLnJzAAAAoE8QAFEAAAAgAAAADgAAAKBPEABRAAAASAAAABIAAACgTxAAUQAAAEoAAAAWAAAAoE\ -8QAFEAAABtAAAAHAAAAKBPEABRAAAAhwAAABAAAAAAAAAAAAAAAAAAAABhdHRlbXB0IHRvIGNhbGN1\ -bGF0ZSB0aGUgcmVtYWluZGVyIHdpdGggYSBkaXZpc29yIG9mIHplcm8AAACgTxAAUQAAAAUBAAAOAA\ -AAoE8QAFEAAAAjAQAAJQAAAGV4cGxpY2l0IHBhbmljAACgTxAAUQAAADkBAAAOAAAAfi8uY2FyZ28v\ -cmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL2lkbmEtMC4zLjAvc3\ -JjL3V0czQ2LnJzAADMUBAATgAAACUAAAAGAAAAzFAQAE4AAAA9AAAAFQAAAMxQEABOAAAAQgAAAAoA\ -AADMUBAATgAAAEQAAAAKAAAAzFAQAE4AAABSAQAAFQAAAHhuLS3MUBAATgAAAIUBAAAqAAAAzFAQAE\ -4AAACjAQAAEgAAAMxQEABOAAAA4wEAABIAAAAAAAAAAIAAAC0AAAABgAAALwAAAAKAAAAwAAAAA4AA\ -ADoAAAAEgAAAQQAAAAUAAABbAAAAH4AAAGEAAAAggAAAewAAACGAAACAAAAAIoAAAKAAAAAjgAAAoQ\ -AAACSAAACoAAAAJQAAAKsAAAAogAAArQAAACkAAACwAAAALIAAALIAAAAtAAAA4AAAAFuAAAD3AAAA\ -XIAAAPgAAABdgAAAAAEAAF4AAAAyAQAAkIAAADQBAACRAAAANwEAAJSAAAA5AQAAlQAAAD8BAACbgA\ -AAQQEAAJwAAACMAQAA54AAAI4BAADoAAAAmQEAAPOAAACcAQAA9AAAAKoBAAACgQAArAEAAAMBAAC5\ -AQAAEIEAALwBAAARgQAAvQEAABKBAADEAQAAE4EAAMcBAAAUgQAAygEAABWBAADNAQAAFgEAANwBAA\ -AlgQAA3gEAACYBAADvAQAAN4EAAPEBAAA4gQAA9AEAADkBAAAzAgAAeIEAADoCAAB5AQAAPwIAAH6B\ -AABBAgAAfwEAAE8CAACNgQAAsAIAAI4BAAC5AgAAl4EAAMICAACYgQAAxgIAAJmBAADSAgAAmoEAAN\ -gCAACbAQAA3gIAAKGBAADgAgAAogEAAOUCAACngQAA7AIAAKgBAADvAgAAq4EAAAADAACsgQAAQAMA\ -AK0BAABGAwAAs4EAAE8DAAC0gQAAUAMAALWBAABwAwAAtgEAAHgDAAC+gQAAegMAAL+BAAB7AwAAwI\ -EAAH4DAADBAQAAgAMAAMOBAACEAwAAxAEAAKwDAADsgQAAwgMAAO2BAADDAwAA7oEAAM8DAADvAQAA\ -+wMAABuCAAD9AwAAHAIAADAEAABPggAAYAQAAFACAACDBAAAc4IAAIgEAAB0ggAAigQAAHUCAADOBA\ -AAuYIAANAEAAC6AgAAVwUAAEGDAABZBQAAQoMAAFoFAABDgwAAYAUAAESDAACHBQAARQMAAIkFAABH\ -gwAAiwUAAEiDAACNBQAASYMAAJAFAABKgwAAkQUAAEuDAAC+BQAATAMAAMEFAABPgwAAwwUAAFCDAA\ -DEBQAAUYMAAMYFAABSAwAAyAUAAFSDAADQBQAAVYMAAOsFAABWgwAA7wUAAFeDAAD1BQAAWIMAAAYG\ -AABZgwAAEAYAAFqDAAAbBgAAW4MAABwGAABcgwAAHgYAAF2DAAAgBgAAXoMAAEAGAABfgwAAQQYAAG\ -CDAABqBgAAYYMAAG4GAABigwAAdQYAAGMDAAB5BgAAZ4MAANQGAABogwAA1QYAAGmDAADdBgAAagMA\ -AN8GAABsgwAA6QYAAG2DAADqBgAAboMAAAAHAABvgwAADgcAAHCDAAAQBwAAcYMAAEsHAABygwAATQ\ -cAAHODAACyBwAAdIMAAMAHAAB1gwAA9gcAAHaDAAD7BwAAd4MAAP0HAAB4gwAA/gcAAHmDAAAACAAA\ -eoMAAC4IAAB7gwAAMAgAAHyDAAA/CAAAfYMAAEAIAAB+gwAAXAgAAH+DAABeCAAAgAMAAGAIAACCgw\ -AAawgAAIODAACgCAAAhIMAALUIAACFgwAAtggAAIaDAADICAAAh4MAANMIAACIgwAA4ggAAImDAADj\ -CAAAioMAAFgJAACLAwAAYAkAAJODAABkCQAAlIMAAGYJAACVgwAAcAkAAJaDAABxCQAAl4MAAIQJAA\ -CYgwAAhQkAAJmDAACNCQAAmoMAAI8JAACbgwAAkQkAAJyDAACTCQAAnYMAAKkJAACegwAAqgkAAJ+D\ -AACxCQAAoAMAALMJAACigwAAtgkAAKODAAC6CQAApIMAALwJAAClgwAAxQkAAKaDAADHCQAAp4MAAM\ -kJAACogwAAywkAAKmDAADPCQAAqoMAANcJAACrgwAA2AkAAKyDAADcCQAArQMAAOAJAACxgwAA5AkA\ -ALKDAADmCQAAs4MAAPIJAAC0gwAA/AkAALUDAAD/CQAAuIMAAAEKAAC5gwAABAoAALqDAAAFCgAAu4\ -MAAAsKAAC8gwAADwoAAL2DAAARCgAAvoMAABMKAAC/gwAAKQoAAMCDAAAqCgAAwYMAADEKAADCAwAA\ -OAoAAMmDAAA6CgAAyoMAADwKAADLAwAAPgoAAM2DAABDCgAAzoMAAEcKAADPgwAASQoAANCDAABLCg\ -AA0YMAAE4KAADSgwAAUQoAANODAABSCgAA1IMAAFkKAADVAwAAXwoAANuDAABmCgAA3IMAAHYKAADd\ -gwAAdwoAAN6DAACBCgAA34MAAIQKAADggwAAhQoAAOGDAACOCgAA4oMAAI8KAADjgwAAkgoAAOSDAA\ -CTCgAA5YMAAKkKAADmgwAAqgoAAOeDAACxCgAA6IMAALIKAADpgwAAtAoAAOqDAAC1CgAA64MAALoK\ -AADsgwAAvAoAAO2DAADGCgAA7oMAAMcKAADvgwAAygoAAPCDAADLCgAA8YMAAM4KAADygwAA0AoAAP\ -ODAADRCgAA9IMAAOAKAAD1gwAA5AoAAPaDAADmCgAA94MAAPAKAAD4gwAA8goAAPmDAAD5CgAA+oMA\ -AAALAAD7gwAAAQsAAPyDAAAECwAA/YMAAAULAAD+gwAADQsAAP+DAAAPCwAAAIQAABELAAABhAAAEw\ -sAAAKEAAApCwAAA4QAACoLAAAEhAAAMQsAAAWEAAAyCwAABoQAADQLAAAHhAAANQsAAAiEAAA6CwAA\ -CYQAADwLAAAKhAAARQsAAAuEAABHCwAADIQAAEkLAAANhAAASwsAAA6EAABOCwAAD4QAAFULAAAQhA\ -AAWAsAABGEAABcCwAAEgQAAF8LAAAVhAAAZAsAABaEAABmCwAAF4QAAHALAAAYBAAAcgsAABqEAAB4\ -CwAAG4QAAIILAAAchAAAhAsAAB2EAACFCwAAHoQAAIsLAAAfhAAAjgsAACCEAACRCwAAIYQAAJILAA\ -AihAAAlgsAACOEAACZCwAAJIQAAJsLAAAlBAAAngsAACiEAACgCwAAKYQAAKMLAAAqhAAApQsAACuE\ -AACoCwAALIQAAKsLAAAthAAArgsAAC6EAAC6CwAAL4QAAL4LAAAwhAAAwwsAADGEAADGCwAAMoQAAM\ -kLAAAzhAAAygsAADSEAADOCwAANYQAANALAAA2hAAA0QsAADeEAADXCwAAOIQAANgLAAA5hAAA5gsA\ -ADqEAADwCwAAO4QAAPsLAAA8hAAAAAwAAD2EAAANDAAAPoQAAA4MAAA/hAAAEQwAAECEAAASDAAAQY\ -QAACkMAABChAAAKgwAAEOEAAA6DAAARIQAAD0MAABFhAAARQwAAEaEAABGDAAAR4QAAEkMAABIhAAA\ -SgwAAEmEAABODAAASoQAAFUMAABLhAAAVwwAAEyEAABYDAAATYQAAFsMAABOhAAAYAwAAE+EAABkDA\ -AAUIQAAGYMAABRhAAAcAwAAFKEAAB3DAAAU4QAAIAMAABUhAAAhAwAAFWEAACFDAAAVoQAAI0MAABX\ -hAAAjgwAAFiEAACRDAAAWYQAAJIMAABahAAAqQwAAFuEAACqDAAAXIQAALQMAABdhAAAtQwAAF6EAA\ -C6DAAAX4QAALwMAABghAAAxQwAAGGEAADGDAAAYoQAAMkMAABjhAAAygwAAGSEAADODAAAZYQAANUM\ -AABmhAAA1wwAAGeEAADeDAAAaAQAAOAMAABqhAAA5AwAAGuEAADmDAAAbIQAAPAMAABthAAA8QwAAG\ -6EAADzDAAAb4QAAAANAABwhAAADQ0AAHGEAAAODQAAcoQAABENAABzhAAAEg0AAHSEAABFDQAAdYQA\ -AEYNAAB2hAAASQ0AAHeEAABKDQAAeIQAAE8NAAB5hAAAUA0AAHqEAABUDQAAe4QAAFgNAAB8hAAAXw\ -0AAH2EAABkDQAAfoQAAGYNAAB/hAAAcA0AAICEAAB6DQAAgYQAAIANAACChAAAgQ0AAIOEAACEDQAA\ -hIQAAIUNAACFhAAAlw0AAIaEAACaDQAAh4QAALINAACIhAAAsw0AAImEAAC8DQAAigQAAL4NAACMhA\ -AAwA0AAI2EAADHDQAAjoQAAMoNAACPhAAAyw0AAJCEAADPDQAAkYQAANUNAACSBAAA2A0AAJWEAADg\ -DQAAloQAAOYNAACXhAAA8A0AAJiEAADyDQAAmYQAAPQNAACahAAA9Q0AAJuEAAABDgAAnIQAADMOAA\ -CdhAAANA4AAJ6EAAA7DgAAn4QAAD8OAACghAAAQA4AAKGEAABPDgAAooQAAFAOAACjhAAAWg4AAKSE\ -AABcDgAApYQAAIEOAACmhAAAgw4AAKcEAACGDgAAqoQAAIsOAACrhAAAjA4AAKyEAACkDgAArQQAAK\ -cOAACwhAAAsw4AALGEAAC0DgAAsoQAAL4OAACzhAAAwA4AALSEAADFDgAAtQQAAMgOAAC4hAAAzg4A\ -ALmEAADQDgAAuoQAANoOAAC7hAAA3A4AALwEAADeDgAAvoQAAOAOAAC/hAAAAA8AAMCEAAABDwAAwY\ -QAAAsPAADCBAAADQ8AAMSEAAAYDwAAxYQAABoPAADGhAAAIA8AAMeEAAAqDwAAyIQAADUPAADJBAAA\ -Og8AAM6EAAA+DwAAz4QAAEMPAADQhAAARA8AANGEAABIDwAA0oQAAEkPAADThAAATQ8AANSEAABODw\ -AA1YQAAFIPAADWhAAAUw8AANeEAABXDwAA2IQAAFgPAADZhAAAXA8AANqEAABdDwAA24QAAGkPAADc\ -hAAAag8AAN2EAABtDwAA3oQAAHEPAADfhAAAcw8AAOAEAAB6DwAA54QAAIEPAADohAAAgg8AAOmEAA\ -CFDwAA6oQAAIYPAADrhAAAkw8AAOyEAACUDwAA7YQAAJgPAADuhAAAmQ8AAO+EAACdDwAA8IQAAJ4P\ -AADxhAAAog8AAPKEAACjDwAA84QAAKcPAAD0hAAAqA8AAPWEAACsDwAA9oQAAK0PAAD3hAAAuQ8AAP\ -iEAAC6DwAA+YQAAL0PAAD6hAAAvg8AAPuEAADGDwAA/IQAAMcPAAD9hAAAzQ8AAP6EAADODwAA/4QA\ -ANsPAAAAhQAAABAAAAGFAABKEAAAAoUAAFAQAAADhQAAnhAAAASFAACgEAAABYUAAMcQAAAGhQAAyB\ -AAAAeFAADNEAAACIUAAM4QAAAJhQAA0BAAAAqFAAD7EAAACwUAAP0QAAANhQAAABEAAA6FAABfEQAA\ -D4UAAGERAAAQhQAAABIAABGFAABJEgAAEoUAAEoSAAAThQAAThIAABSFAABQEgAAFYUAAFcSAAAWBQ\ -AAWhIAABmFAABeEgAAGoUAAGASAAAbhQAAiRIAAByFAACKEgAAHYUAAI4SAAAehQAAkBIAAB+FAACx\ -EgAAIIUAALISAAAhhQAAthIAACKFAAC4EgAAI4UAAL8SAAAkBQAAwhIAACeFAADGEgAAKIUAAMgSAA\ -AphQAA1xIAACqFAADYEgAAK4UAABETAAAshQAAEhMAAC2FAAAWEwAALoUAABgTAAAvhQAAWxMAADCF\ -AABdEwAAMYUAAGATAAAyhQAAfRMAADOFAACAEwAANIUAAJATAAA1hQAAmhMAADaFAACgEwAAN4UAAP\ -YTAAA4hQAA+BMAADkFAAD+EwAAP4UAAAAUAABAhQAAARQAAEGFAABtFgAAQoUAAG8WAABDhQAAgBYA\ -AESFAACBFgAARYUAAJsWAABGhQAAnRYAAEeFAACgFgAASIUAAOsWAABJhQAA8RYAAEqFAAD5FgAAS4\ -UAAAAXAABMhQAADRcAAE2FAAAOFwAAToUAABUXAABPhQAAIBcAAFCFAAA1FwAAUYUAADcXAABShQAA\ -QBcAAFOFAABUFwAAVIUAAGAXAABVhQAAbRcAAFaFAABuFwAAV4UAAHEXAABYhQAAchcAAFmFAAB0Fw\ -AAWoUAAIAXAABbhQAAtBcAAFyFAAC2FwAAXYUAANQXAABehQAA1xcAAF+FAADYFwAAYIUAANwXAABh\ -hQAA3hcAAGKFAADgFwAAY4UAAOoXAABkhQAA8BcAAGWFAAD6FwAAZoUAAAAYAABnhQAABhgAAGiFAA\ -AHGAAAaYUAAAsYAABqhQAADhgAAGuFAAAQGAAAbIUAABoYAABthQAAIBgAAG6FAAB5GAAAb4UAAIAY\ -AABwhQAAqxgAAHGFAACwGAAAcoUAAPYYAABzhQAAABkAAHSFAAAfGQAAdYUAACAZAAB2hQAALBkAAH\ -eFAAAwGQAAeIUAADwZAAB5hQAAQBkAAHqFAABBGQAAe4UAAEQZAAB8hQAARhkAAH2FAABuGQAAfoUA\ -AHAZAAB/hQAAdRkAAICFAACAGQAAgYUAAKwZAACChQAAsBkAAIOFAADKGQAAhIUAANAZAACFhQAA2h\ -kAAIaFAADbGQAAh4UAAN4ZAACIhQAAABoAAImFAAAcGgAAioUAAB4aAACLhQAAIBoAAIyFAABfGgAA\ -jYUAAGAaAACOhQAAfRoAAI+FAAB/GgAAkIUAAIoaAACRhQAAkBoAAJKFAACaGgAAk4UAAKAaAACUhQ\ -AApxoAAJWFAACoGgAAloUAAK4aAACXhQAAsBoAAJiFAAC+GgAAmYUAAL8aAACahQAAwRoAAJuFAAAA\ -GwAAnIUAAEwbAACdhQAAUBsAAJ6FAABaGwAAn4UAAGsbAACghQAAdBsAAKGFAAB9GwAAooUAAIAbAA\ -CjhQAA9BsAAKSFAAD8GwAApYUAAAAcAACmhQAAOBwAAKeFAAA7HAAAqIUAAEAcAACphQAAShwAAKqF\ -AABNHAAAq4UAAH4cAACshQAAgBwAAK0FAACEHAAAsYUAAIYcAACyBQAAiRwAALWFAACQHAAAtgUAAL\ -scAADhhQAAvRwAAOIFAADAHAAA5YUAAMgcAADmhQAA0BwAAOeFAADTHAAA6IUAANQcAADphQAA+xwA\ -AOqFAAAAHQAA64UAACwdAADsBQAAax0AACuGAAB4HQAALIYAAHkdAAAthgAAmx0AAC4GAADAHQAAU4\ -YAAPodAABUhgAA+x0AAFWGAAAAHgAAVgYAAJUeAADrhgAAmh4AAOwGAACcHgAA7oYAAJ4eAADvBgAA\ -/x4AAFCHAAAIHwAAUQcAABAfAABZhwAAFh8AAFqHAAAYHwAAWwcAAB4fAABhhwAAIB8AAGKHAAAoHw\ -AAYwcAADAfAABrhwAAOB8AAGwHAABAHwAAdIcAAEYfAAB1hwAASB8AAHYHAABOHwAAfIcAAFAfAAB9\ -hwAAWB8AAH4HAABgHwAAhocAAGgfAACHBwAAfh8AAJ2HAACAHwAAngcAALAfAADOhwAAsh8AAM8HAA\ -DQHwAA7YcAANMfAADuhwAA1B8AAO+HAADWHwAA8IcAANgfAADxBwAA4B8AAPmHAADjHwAA+ocAAOQf\ -AAD7hwAA6B8AAPwHAADwHwAABIgAAPIfAAAFCAAAACAAABOIAAALIAAAFIgAAAwgAAAViAAADiAAAB\ -aIAAAQIAAAFwgAABIgAAAZiAAAFyAAABqIAAAYIAAAG4gAACQgAAAciAAAJyAAAB2IAAAoIAAAHogA\ -AC8gAAAfiAAAMCAAACCIAAAzIAAAIQgAADggAAAmiAAAPCAAACcIAAA/IAAAKogAAEcgAAArCAAASi\ -AAAC6IAABXIAAAL4gAAFggAAAwiAAAXyAAADEIAABhIAAAM4gAAGQgAAA0iAAAZSAAADWIAABwIAAA\ -NggAAHIgAAA4iAAAdCAAADkIAACdIAAAYogAAKAgAABjiAAAqCAAAGSIAACpIAAAZYgAAMAgAABmiA\ -AA0CAAAGeIAADxIAAAaIgAAAAhAABpCAAACyEAAHSIAAAPIQAAdYgAABAhAAB2iAAAEiEAAHeIAAAU\ -IQAAeAgAABchAAB7iAAAGSEAAHwIAAAbIQAAfogAAB4hAAB/iAAAICEAAIAIAAAvIQAAj4gAADEhAA\ -CQCAAAPSEAAJyIAAA/IQAAnQgAAEEhAACfiAAARSEAAKCIAABHIQAAoQgAAEohAACkiAAATiEAAKUI\ -AACAIQAA14gAAIMhAADYCAAAhSEAANqIAACJIQAA24gAAIohAADciAAAjCEAAN2IAACQIQAA3ogAAC\ -wiAADfCAAAMSIAAOSIAABgIgAA5YgAAGEiAADmiAAAbiIAAOeIAABwIgAA6IgAACkjAADpCAAAKyMA\ -AOuIAAAnJAAA7IgAAEAkAADtiAAASyQAAO6IAABgJAAA7wgAAIgkAAAXiQAAnCQAABgJAADrJAAAZ4\ -kAAAwqAABoiQAADSoAAGmJAAB0KgAAagkAAHcqAABtiQAA3CoAAG6JAADdKgAAb4kAAHQrAABwiQAA\ -disAAHGJAACWKwAAcokAAJcrAABziQAAACwAAHQJAAAwLAAApIkAAF8sAAClCQAAZSwAAKuJAABnLA\ -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\ -EAAAD7AAAuEQAABfsAADORAAAH+wAANJEAABP7AAA1EQAAGPsAADqRAAAd+wAAOxEAAFD7AABukQAA\ -UvsAAG+RAABW+wAAcJEAAFr7AABxkQAAXvsAAHKRAABi+wAAc5EAAGb7AAB0kQAAavsAAHWRAABu+w\ -AAdpEAAHL7AAB3kQAAdvsAAHiRAAB6+wAAeZEAAH77AAB6kQAAgvsAAHuRAACE+wAAfJEAAIb7AAB9\ -kQAAiPsAAH6RAACK+wAAf5EAAIz7AACAkQAAjvsAAIGRAACS+wAAgpEAAJb7AACDkQAAmvsAAISRAA\ -Ce+wAAhZEAAKD7AACGkQAApPsAAIeRAACm+wAAiJEAAKr7AACJkQAArvsAAIqRAACw+wAAi5EAALL7\ -AACMkQAAwvsAAI2RAADT+wAAjpEAANf7AACPkQAA2fsAAJCRAADb+wAAkZEAAN37AACSkQAA3vsAAJ\ -ORAADg+wAAlJEAAOL7AACVkQAA5PsAAJaRAADo+wAAl5EAAOr7AACYkQAA7PsAAJmRAADu+wAAmpEA\ -APD7AACbkQAA8vsAAJyRAAD0+wAAnZEAAPb7AACekQAA+fsAAJ+RAAD8+wAAoJEAAAD8AAChEQAAPP\ -0AAN2SAAA+/QAA3pIAAED9AADfkgAAUP0AAOCSAABR/QAA4ZIAAFP9AADiEgAAWP0AAOeSAABa/QAA\ -6BIAAF/9AADtkgAAYf0AAO6SAABi/QAA75IAAGT9AADwkgAAZv0AAPGSAABn/QAA8pIAAGn9AADzkg\ -AAav0AAPSSAABs/QAA9ZIAAG79AAD2kgAAb/0AAPeSAABx/QAA+JIAAHP9AAD5EgAAdv0AAPySAAB4\ -/QAA/RIAAHz9AAABkwAAfv0AAAITAACD/QAAB5MAAIX9AAAIkwAAh/0AAAmTAACJ/QAAChMAAJD9AA\ -ARkwAAkv0AABITAACX/QAAF5MAAJn9AAAYEwAAnP0AABuTAACe/QAAHBMAAMj9AABGkwAA8P0AAEcT\ -AAD+/QAAVZMAAAD+AABWkwAAEP4AAFcTAAAZ/gAAYJMAACD+AABhkwAAMP4AAGITAAAz/gAAZZMAAD\ -X+AABmEwAARf4AAHaTAABH/gAAdxMAAEn+AAB5kwAATf4AAHqTAABQ/gAAexMAAFL+AAB9kwAAVP4A\ -AH4TAABs/gAAlpMAAHD+AACXEwAAgf4AAKiTAACD/gAAqZMAAIX+AACqkwAAh/4AAKuTAACJ/gAArJ\ -MAAI3+AACtkwAAj/4AAK6TAACT/gAAr5MAAJX+AACwkwAAmf4AALGTAACd/gAAspMAAKH+AACzkwAA\ -pf4AALSTAACp/gAAtZMAAKv+AAC2kwAArf4AALeTAACv/gAAuJMAALH+AAC5kwAAtf4AALqTAAC5/g\ -AAu5MAAL3+AAC8kwAAwf4AAL2TAADF/gAAvpMAAMn+AAC/kwAAzf4AAMCTAADR/gAAwZMAANX+AADC\ -kwAA2f4AAMOTAADd/gAAxJMAAOH+AADFkwAA5f4AAMaTAADp/gAAx5MAAO3+AADIkwAA7/4AAMmTAA\ -Dx/gAAypMAAPX+AADLkwAA9/4AAMyTAAD5/gAAzZMAAPv+AADOkwAA/f4AAM+TAAD//gAA0BMAAL//\ -AACQlAAAwv8AAJEUAADI/wAAl5QAAMr/AACYFAAA0P8AAJ6UAADS/wAAnxQAANj/AACllAAA2v8AAK\ -YUAADd/wAAqZQAAOD/AACqFAAA7/8AALmUAAAAAAEAupQAAAwAAQC7lAAADQABALyUAAAnAAEAvZQA\ -ACgAAQC+lAAAOwABAL+UAAA8AAEAwJQAAD4AAQDBlAAAPwABAMKUAABOAAEAw5QAAFAAAQDElAAAXg\ -ABAMWUAACAAAEAxpQAAPsAAQDHlAAAAAEBAMiUAAADAQEAyZQAAAcBAQDKlAAANAEBAMuUAAA3AQEA\ -zJQAAI8BAQDNlAAAkAEBAM6UAACdAQEAz5QAAKABAQDQlAAAoQEBANGUAADQAQEA0pQAAP0BAQDTlA\ -AA/gEBANSUAACAAgEA1ZQAAJ0CAQDWlAAAoAIBANeUAADRAgEA2JQAAOACAQDZlAAA4QIBANqUAAD8\ -AgEA25QAAAADAQDclAAAIAMBAN2UAAAkAwEA3pQAAC0DAQDflAAAQQMBAOCUAABCAwEA4ZQAAEoDAQ\ -DilAAASwMBAOOUAABQAwEA5JQAAHsDAQDllAAAgAMBAOaUAACeAwEA5xQAAKADAQDplAAAxAMBAOqU\ -AADIAwEA65QAANADAQDslAAA1gMBAO2UAAAABAEA7hQAACgEAQAWlQAAngQBABeVAACgBAEAGJUAAK\ -oEAQAZlQAAsAQBABoVAADUBAEAPpUAANgEAQA/lQAA/AQBAECVAAAABQEAQZUAACgFAQBClQAAMAUB\ -AEOVAABkBQEARJUAAG8FAQBFlQAAcAUBAEaVAAAABgEAR5UAADcHAQBIlQAAQAcBAEmVAABWBwEASp\ -UAAGAHAQBLlQAAaAcBAEyVAAAACAEATZUAAAYIAQBOlQAACAgBAE8VAAAKCAEAUZUAADYIAQBSlQAA\ -NwgBAFOVAAA5CAEAVJUAADwIAQBVlQAAPQgBAFaVAAA/CAEAV5UAAFYIAQBYlQAAVwgBAFmVAABgCA\ -EAWpUAAHcIAQBblQAAgAgBAFyVAACfCAEAXZUAAKcIAQBelQAAsAgBAF+VAADgCAEAYJUAAPMIAQBh\ -lQAA9AgBAGKVAAD2CAEAY5UAAPsIAQBklQAAAAkBAGWVAAAWCQEAZpUAABwJAQBnlQAAHwkBAGiVAA\ -AgCQEAaZUAADoJAQBqlQAAPwkBAGuVAABACQEAbJUAAIAJAQBtlQAAuAkBAG6VAAC8CQEAb5UAAL4J\ -AQBwlQAAwAkBAHGVAADQCQEAcpUAANIJAQBzlQAAAAoBAHSVAAAECgEAdZUAAAUKAQB2lQAABwoBAH\ -eVAAAMCgEAeJUAABQKAQB5lQAAFQoBAHqVAAAYCgEAe5UAABkKAQB8lQAANgoBAH2VAAA4CgEAfpUA\ -ADsKAQB/lQAAPwoBAICVAABACgEAgZUAAEkKAQCClQAAUAoBAIOVAABZCgEAhJUAAGAKAQCFlQAAfQ\ -oBAIaVAACACgEAh5UAAJ0KAQCIlQAAoAoBAImVAADACgEAipUAAMgKAQCLlQAAyQoBAIyVAADnCgEA\ -jZUAAOsKAQCOlQAA9woBAI+VAAAACwEAkJUAADYLAQCRlQAAOQsBAJKVAABACwEAk5UAAFYLAQCUlQ\ -AAWAsBAJWVAABgCwEAlpUAAHMLAQCXlQAAeAsBAJiVAACACwEAmZUAAJILAQCalQAAmQsBAJuVAACd\ -CwEAnJUAAKkLAQCdlQAAsAsBAJ6VAAAADAEAn5UAAEkMAQCglQAAgAwBAKEVAACzDAEA1JUAAMAMAQ\ -DVlQAA8wwBANaVAAD6DAEA15UAAAANAQDYlQAAKA0BANmVAAAwDQEA2pUAADoNAQDblQAAYA4BANyV\ -AAB/DgEA3ZUAAIAOAQDelQAAqg4BAN+VAACrDgEA4JUAAK0OAQDhlQAArg4BAOKVAACwDgEA45UAAL\ -IOAQDklQAAAA8BAOWVAAAdDwEA5pUAACcPAQDnlQAAKA8BAOiVAAAwDwEA6ZUAAFEPAQDqlQAAWg8B\ -AOuVAACwDwEA7JUAAMUPAQDtlQAAzA8BAO6VAADgDwEA75UAAPcPAQDwlQAAABABAPGVAABHEAEA8p\ -UAAE4QAQDzlQAAUhABAPSVAABmEAEA9ZUAAHAQAQD2lQAAfxABAPeVAAC7EAEA+JUAAL0QAQD5lQAA\ -vhABAPqVAADCEAEA+5UAANAQAQD8lQAA6RABAP2VAADwEAEA/pUAAPoQAQD/lQAAABEBAACWAAA1EQ\ -EAAZYAADYRAQAClgAAQBEBAAOWAABEEQEABJYAAEgRAQAFlgAAUBEBAAaWAAB0EQEAB5YAAHYRAQAI\ -lgAAdxEBAAmWAACAEQEACpYAAMURAQALlgAAyREBAAyWAADNEQEADZYAAM4RAQAOlgAA2xEBAA8WAA\ -DdEQEAEZYAAOARAQASlgAA4REBABOWAAD1EQEAFJYAAAASAQAVlgAAEhIBABaWAAATEgEAF5YAADgS\ -AQAYlgAAPhIBABmWAAA/EgEAGpYAAIASAQAblgAAhxIBABwWAACKEgEAH5YAAI4SAQAglgAAjxIBAC\ -GWAACeEgEAIpYAAJ8SAQAjlgAAqRIBACSWAACqEgEAJZYAALASAQAmlgAA6xIBACeWAADwEgEAKJYA\ -APoSAQAplgAAABMBACqWAAAEEwEAK5YAAAUTAQAslgAADRMBAC2WAAAPEwEALpYAABETAQAvlgAAEx\ -MBADCWAAApEwEAMZYAACoTAQAylgAAMRMBADOWAAAyEwEANJYAADQTAQA1lgAANRMBADaWAAA6EwEA\ -N5YAADsTAQA4lgAARRMBADmWAABHEwEAOpYAAEkTAQA7lgAASxMBADyWAABOEwEAPZYAAFATAQA+lg\ -AAURMBAD+WAABXEwEAQJYAAFgTAQBBlgAAXRMBAEKWAABkEwEAQ5YAAGYTAQBElgAAbRMBAEWWAABw\ -EwEARpYAAHUTAQBHlgAAABQBAEiWAABLFAEASZYAAFAUAQBKlgAAWhQBAEuWAABcFAEATBYAAF4UAQ\ -BOlgAAYhQBAE+WAACAFAEAUJYAAMYUAQBRFgAAyBQBAFOWAADQFAEAVJYAANoUAQBVlgAAgBUBAFaW\ -AAC2FQEAV5YAALgVAQBYlgAAwRUBAFmWAADYFQEAWpYAAN4VAQBblgAAABYBAFyWAABBFgEAXZYAAE\ -QWAQBelgAARRYBAF+WAABQFgEAYJYAAFoWAQBhlgAAYBYBAGKWAABtFgEAY5YAAIAWAQBklgAAuRYB\ -AGWWAADAFgEAZpYAAMoWAQBnlgAAABcBAGiWAAAbFwEAaZYAAB0XAQBqlgAALBcBAGuWAAAwFwEAbJ\ -YAADoXAQBtlgAAQBcBAG6WAAAAGAEAb5YAADsYAQBwlgAAPBgBAHGWAACgGAEAchYAAMAYAQCSlgAA\ -6hgBAJOWAADzGAEAlJYAAP8YAQCVlgAABxkBAJaWAAAJGQEAl5YAAAoZAQCYlgAADBkBAJmWAAAUGQ\ -EAmpYAABUZAQCblgAAFxkBAJyWAAAYGQEAnZYAADYZAQCelgAANxkBAJ+WAAA5GQEAoJYAADsZAQCh\ -lgAARBkBAKKWAABHGQEAo5YAAFAZAQCklgAAWhkBAKWWAACgGQEAppYAAKgZAQCnlgAAqhkBAKiWAA\ -DYGQEAqZYAANoZAQCqlgAA4hkBAKuWAADjGQEArJYAAOUZAQCtlgAAABoBAK6WAAA/GgEAr5YAAEca\ -AQCwlgAASBoBALGWAABQGgEAspYAAJoaAQCzlgAAnRoBALSWAACeGgEAtZYAAKMaAQC2lgAAwBoBAL\ -eWAAD5GgEAuJYAAAAcAQC5lgAACRwBALqWAAAKHAEAu5YAADccAQC8lgAAOBwBAL2WAABBHAEAvpYA\ -AEYcAQC/lgAAUBwBAMCWAABaHAEAwZYAAG0cAQDClgAAcBwBAMOWAAByHAEAxJYAAJAcAQDFlgAAkh\ -wBAMaWAACoHAEAx5YAAKkcAQDIlgAAtxwBAMmWAAAAHQEAypYAAAcdAQDLlgAACB0BAMyWAAAKHQEA\ -zZYAAAsdAQDOlgAANx0BAM+WAAA6HQEA0BYAADwdAQDSlgAAPh0BANOWAAA/HQEA1JYAAEgdAQDVlg\ -AAUB0BANaWAABaHQEA15YAAGAdAQDYlgAAZh0BANmWAABnHQEA2pYAAGkdAQDblgAAah0BANyWAACP\ -HQEA3ZYAAJAdAQDelgAAkh0BAN+WAACTHQEA4JYAAJkdAQDhlgAAoB0BAOKWAACqHQEA45YAAOAeAQ\ -DklgAA9x4BAOWWAAD5HgEA5pYAALAfAQDnlgAAsR8BAOiWAADAHwEA6ZYAAPIfAQDqlgAA/x8BAOuW\ -AAAAIAEA7JYAAJojAQDtlgAAACQBAO6WAABvJAEA75YAAHAkAQDwlgAAdSQBAPGWAACAJAEA8pYAAE\ -QlAQDzlgAAADABAPSWAAAvNAEA9ZYAAABEAQD2lgAAR0YBAPeWAAAAaAEA+JYAADlqAQD5lgAAQGoB\ -APqWAABfagEA+5YAAGBqAQD8lgAAamoBAP2WAABuagEA/pYAAHBqAQD/lgAA0GoBAACXAADuagEAAZ\ -cAAPBqAQAClwAA9WoBAAOXAAD2agEABJcAAABrAQAFlwAAN2sBAAaXAABAawEAB5cAAERrAQAIlwAA\ -RmsBAAmXAABQawEACpcAAFprAQALlwAAW2sBAAyXAABiawEADZcAAGNrAQAOlwAAeGsBAA+XAAB9aw\ -EAEJcAAJBrAQARlwAAQG4BABIXAABgbgEAMpcAAIBuAQAzlwAAm24BADSXAAAAbwEANZcAAEtvAQA2\ -lwAAT28BADeXAACIbwEAOJcAAI9vAQA5lwAAoG8BADqXAADgbwEAO5cAAOJvAQA8lwAA428BAD2XAA\ -DlbwEAPpcAAPBvAQA/lwAA8m8BAECXAAAAcAEAQZcAAPiHAQBClwAAAIgBAEOXAADWjAEARJcAAACN\ -AQBFlwAACY0BAEaXAAAAsAEAR5cAAB+xAQBIlwAAULEBAEmXAABTsQEASpcAAGSxAQBLlwAAaLEBAE\ -yXAABwsQEATZcAAPyyAQBOlwAAALwBAE+XAABrvAEAUJcAAHC8AQBRlwAAfbwBAFKXAACAvAEAU5cA\ -AIm8AQBUlwAAkLwBAFWXAACavAEAVpcAAJy8AQBXlwAAnbwBAFiXAACfvAEAWZcAAKC8AQBalwAApL\ -wBAFuXAAAA0AEAXJcAAPbQAQBdlwAAANEBAF6XAAAn0QEAX5cAACnRAQBglwAAXtEBAGEXAABl0QEA\ -aJcAAHPRAQBplwAAe9EBAGqXAAC70QEAaxcAAMHRAQBxlwAA6dEBAHKXAAAA0gEAc5cAAEbSAQB0lw\ -AA4NIBAHWXAAD00gEAdpcAAADTAQB3lwAAV9MBAHiXAABg0wEAeZcAAHnTAQB6lwAAANQBAHsXAACg\ -1AEAG5gAAKLUAQAcmAAAo9QBAB2YAACl1AEAHhgAAKfUAQAgmAAAqdQBACEYAAAL1QEAg5gAAA3VAQ\ -CEGAAAR9UBAL6YAABK1QEAvxgAAKbWAQAbmgAAqNYBABwaAADT1gEAR5oAANXWAQBIGgAADdcBAICa\ -AAAP1wEAgRoAAEfXAQC5mgAASdcBALoaAACB1wEA8poAAIPXAQDzGgAAu9cBACubAAC91wEALBsAAM\ -rXAQA5mwAAzNcBADqbAADO1wEAOxsAAADYAQBtmwAAANoBAG6bAAA32gEAb5sAADvaAQBwmwAAbdoB\ -AHGbAAB12gEAcpsAAHbaAQBzmwAAhNoBAHSbAACF2gEAdZsAAIzaAQB2mwAAm9oBAHebAACg2gEAeJ\ -sAAKHaAQB5mwAAsNoBAHqbAAAA4AEAe5sAAAfgAQB8mwAACOABAH2bAAAZ4AEAfpsAABvgAQB/mwAA\ -IuABAICbAAAj4AEAgZsAACXgAQCCmwAAJuABAIObAAAr4AEAhJsAAADhAQCFmwAALeEBAIabAAAw4Q\ -EAh5sAAD7hAQCImwAAQOEBAImbAABK4QEAipsAAE7hAQCLGwAAUOEBAI2bAADA4gEAjpsAAPriAQCP\ -mwAA/+IBAJCbAAAA4wEAkZsAAADoAQCSmwAAxegBAJObAADH6AEAlJsAANDoAQCVmwAA1+gBAJabAA\ -AA6QEAlxsAACLpAQC5mwAATOkBALqbAABQ6QEAu5sAAFrpAQC8mwAAXukBAL2bAABg6QEAvpsAAHHs\ -AQC/mwAAtewBAMCbAAAB7QEAwZsAAD7tAQDCmwAAAO4BAMMbAAAl7gEA6JsAACfuAQDpGwAAPO4BAP\ -6bAABC7gEA/5sAAEPuAQAAnAAAR+4BAAEcAABV7gEAD5wAAFfuAQAQHAAAZe4BAB6cAABn7gEAHxwA\ -AJzuAQBUnAAAoe4BAFUcAAC87gEAcJwAAPDuAQBxnAAA8u4BAHKcAAAA8AEAc5wAACzwAQB0nAAAMP\ -ABAHWcAACU8AEAdpwAAKDwAQB3nAAAr/ABAHicAACx8AEAeZwAAMDwAQB6nAAAwfABAHucAADQ8AEA\ -fJwAANHwAQB9nAAA9vABAH6cAAAB8QEAfxwAAAvxAQCJnAAAEPEBAIocAABQ8QEAypwAAGrxAQDLHA\ -AAbfEBAM6cAACQ8QEAz5wAAJHxAQDQnAAArvEBANGcAADm8QEA0pwAAADyAQDTHAAAA/IBANacAAAQ\ -8gEA1xwAADzyAQADnQAAQPIBAAQdAABJ8gEADZ0AAFDyAQAOHQAAUvIBABCdAABg8gEAEZ0AAGbyAQ\ -ASnQAAAPMBABOdAADY9gEAFJ0AAOD2AQAVnQAA7fYBABadAADw9gEAF50AAP32AQAYnQAAAPcBABmd\ -AAB09wEAGp0AAID3AQAbnQAA2fcBABydAADg9wEAHZ0AAOz3AQAenQAAAPgBAB+dAAAM+AEAIJ0AAB\ -D4AQAhnQAASPgBACKdAABQ+AEAI50AAFr4AQAknQAAYPgBACWdAACI+AEAJp0AAJD4AQAnnQAArvgB\ -ACidAACw+AEAKZ0AALL4AQAqnQAAAPkBACudAAB5+QEALJ0AAHr5AQAtnQAAzPkBAC6dAADN+QEAL5\ -0AAFT6AQAwnQAAYPoBADGdAABu+gEAMp0AAHD6AQAznQAAdfoBADSdAAB4+gEANZ0AAHv6AQA2nQAA\ -gPoBADedAACH+gEAOJ0AAJD6AQA5nQAAqfoBADqdAACw+gEAO50AALf6AQA8nQAAwPoBAD2dAADD+g\ -EAPp0AAND6AQA/nQAA1/oBAECdAAAA+wEAQZ0AAJP7AQBCnQAAlPsBAEOdAADL+wEARJ0AAPD7AQBF\ -HQAA+vsBAE+dAAAAAAIAUJ0AAN6mAgBRnQAAAKcCAFKdAAA1twIAU50AAEC3AgBUnQAAHrgCAFWdAA\ -AguAIAVp0AAKLOAgBXnQAAsM4CAFidAADh6wIAWZ0AAAD4AgBaHQAAMfgCAIudAAA0+AIAjB0AAEX4\ -AgCdnQAAR/gCAJ4dAABq+AIAwZ0AAGz4AgDCHQAAkfgCAOedAACT+AIA6J0AAJT4AgDpnQAAlvgCAO\ -odAAAs+QIAgJ4AAC75AgCBHgAARvkCAJmeAABI+QIAmh4AAF35AgCvngAAX/kCALAeAAD++QIAT58A\ -AAD6AgBQHwAAHvoCAG6fAAAAAAMAb58AAEsTAwBwnwAAAAEOAHGfAADwAQ4Acp8AAAUAAAAAAAAABQ\ -AAAAAAAAAFAAAAAgAAAQIBAAECAgABAgMAAQIEAAECBQABAgYAAQIHAAECCAABAgkAAQIKAAECCwAB\ -AgwAAQINAAECDgABAg8AAQIQAAECEQABAhIAAQITAAECFAABAhUAAQIWAAECFwABAhgAAQIZAAEFAA\ -AAAAAAAAUAAAAEAAAABhoAAQcAAAAGGwADBwAAAAIAAAEHAAAAAQAAAAcAAAAGHgADBwAAAAIhAAEC\ -IgABBiMAAwImAAIHAAAAAAAAAAYoAAMCKwABAg4AAQcAAAACLAAFAjEABQI2AAUHAAAAAjsAAgI9AA\ -ICPwACAkEAAgJDAAICRQACAkcAAgJJAAICSwACAk0AAgJPAAICUQACAlMAAgJVAAICVwACAlkAAgJb\ -AAICXQACAl8AAgJhAAICYwACAmUAAgJnAAIHAAAAAmkAAgJrAAICbQACAm8AAgJxAAICcwACAnUAAg\ -N3AAIAAAAABwAAAAAAAAACeQACAAAAAAJ7AAIAAAAAAn0AAgAAAAACfwACAAAAAAKBAAIAAAAAAoMA\ -AgAAAAAChQACAAAAAAKHAAIAAAAAAokAAgAAAAACiwACAAAAAAKNAAIAAAAAAo8AAgAAAAACkQACAA\ -AAAAKTAAIAAAAAApUAAgAAAAAClwACAAAAAAKZAAIAAAAAApsAAgAAAAACnQACAAAAAAKfAAIAAAAA\ -AqEAAgAAAAACowACAAAAAAKlAAIAAAAAAqcAAgAAAAACqQADAAAAAAKsAAICrgACAAAAAAKwAAIAAA\ -AAArIAAgAAAAACtAACAAAAAAK2AAIAAAAAArgAAwK7AAIAAAAAAr0AAgAAAAACvwACAAAAAALBAAIA\ -AAAAAsMAAwLGAAIAAAAAAsgAAgAAAAACygACAAAAAALMAAIAAAAAAs4AAgAAAAAC0AACAAAAAALSAA\ -IAAAAAAtQAAgAAAAAC1gACAAAAAALYAAIAAAAAAtoAAgAAAAAC3AACAAAAAALeAAIAAAAAAuAAAgAA\ -AAAC4gACAAAAAALkAAIAAAAAAuYAAgAAAAAC6AACAAAAAALqAAIAAAAAAuwAAgAAAAAC7gACAAAAAA\ -LwAAIAAAAAAvIAAgAAAAAC9AACAvYAAgAAAAAC+AACAAAAAAL6AAIAAAAAAhIAAQAAAAAC/AACAv4A\ -AgAAAAACAAECAAAAAAICAQICBAECAAAAAAIGAQICCAECAgoBAgAAAAACDAECAg4BAgIQAQICEgECAA\ -AAAAIUAQICFgECAAAAAAIYAQICGgECAhwBAgAAAAACHgECAiABAgAAAAACIgECAiQBAgAAAAACJgEC\ -AAAAAAIoAQIAAAAAAioBAgIsAQIAAAAAAi4BAgAAAAACMAECAAAAAAIyAQICNAECAAAAAAI2AQICOA\ -ECAjoBAgAAAAACPAECAAAAAAI+AQICQAECAAAAAAJCAQIAAAAAAkQBAwJHAQICSQECAksBAgAAAAAC\ -TQECAAAAAAJPAQIAAAAAAlEBAgAAAAACUwECAAAAAAJVAQIAAAAAAlcBAgAAAAACWQECAAAAAAJbAQ\ -IAAAAAAl0BAgAAAAACXwECAAAAAAJhAQIAAAAAAmMBAgAAAAACZQECAAAAAAJnAQIAAAAAAmkBAgAA\ -AAACawECAAAAAAJtAQICbwECAAAAAAJxAQICcwECAnUBAgAAAAACdwECAAAAAAJ5AQIAAAAAAnsBAg\ -AAAAACfQECAAAAAAJ/AQIAAAAAAoEBAgAAAAACgwECAAAAAAKFAQIAAAAAAocBAgAAAAACiQECAAAA\ -AAKLAQIAAAAAAo0BAgAAAAACjwECAAAAAAKRAQIAAAAAApMBAgAAAAAClQECAAAAAAKXAQIAAAAAAp\ -kBAgAAAAACmwECAAAAAAKdAQIAAAAAAp8BAgAAAAACoQECAAAAAAKjAQIAAAAAAqUBAgAAAAACpwEC\ -AAAAAAKpAQIAAAAAAqsBAgAAAAACrQECAAAAAAKvAQIAAAAAArEBAwK0AQIAAAAAArYBAgK4AQMAAA\ -AAArsBAgAAAAACvQECAr8BAgLBAQICwwECAAAAAALFAQIAAAAAAscBAgAAAAACyQECAAAAAALLAQIA\ -AAAAAgcAAQLNAQICCQABAhEAAQLPAQIC0QECAtMBAgIWAAECGAABAAAAAAcAAAAAAAAABwAAAAbVAQ\ -MG2AEDBtsBAwbeAQMG4QEDBuQBAwcAAAACFgECAgsAAQISAAECFwABAucBAgcAAAAAAAAABwAAAAAA\ -AAAHAAAAAAAAAALpAQIC6wECAAAAAALtAQIC7wEEAvMBAgAAAAABAAAAAAAAAAL1AQIAAAAAAvcBAg\ -AAAAAC+QECAAAAAAL7AQIAAAAABAAAAAb9AQMAAAAABgACAQIBAgIEAAAABiMAAwYDAgUCCAICAgoC\ -AgIMAgICDgICAhACAgQAAAACEgICBAAAAAIUAgICFgICAAAAAAIYAgICGgICAhwCAgIeAgICIAICAi\ -ICAgIkAgICJgICAvMBAgIoAgICKgICAiYAAgIsAgICLgICAjACAgIyAgICNAICBAAAAAI2AgICOAIC\ -AjoCAgI8AgICPgICAkACAgJCAgICRAICAkYCAgAAAAADNgICAAAAAAJIAgICGgICAiYCAgI6AgICFA\ -ICAkYCAgI8AgICMgICAAAAAAJKAgIAAAAAAkwCAgAAAAACTgICAAAAAAJQAgIAAAAAAlICAgAAAAAC\ -VAICAAAAAAJWAgIAAAAAAlgCAgAAAAACWgICAAAAAAJcAgIAAAAAAl4CAgAAAAACYAICAAAAAAIoAg\ -ICNAICAjYCAgAAAAACJgICAiACAgcAAAACYgICAAAAAAI2AgICZAICAAAAAAJmAgICaAICAmoCAgJs\ -AgICbgICAnACAgJyAgICdAICAnYCAgJ4AgICegICAnwCAgJ+AgICgAICAoICAgKEAgIChgICAogCAg\ -KKAgICjAICAo4CAgKQAgICkgICApQCAgKWAgICmAICApoCAgKcAgICngICAqACAgKiAgICpAICAqYC\ -AgKoAgICqgICAqwCAgKuAgICsAICArICAgK0AgICtgICArgCAgK6AgICvAICAr4CAgLAAgICwgICAs\ -QCAgLGAgICyAICAsoCAgAAAAACzAICAAAAAALOAgIAAAAAAtACAgAAAAAC0gICAAAAAALUAgIAAAAA\ -AtYCAgAAAAAC2AICAAAAAALaAgIAAAAAAtwCAgAAAAAC3gICAAAAAALgAgIAAAAAAuICAgAAAAAC5A\ -ICAAAAAALmAgIAAAAAAugCAgAAAAAC6gICAAAAAALsAgIAAAAABwAAAAAAAAAHAAAAAu4CAgAAAAAC\ -8AICAAAAAALyAgIAAAAAAvQCAgAAAAAC9gICAAAAAAL4AgIAAAAAAvoCAgAAAAAC/AICAAAAAAL+Ag\ -IAAAAAAgADAgAAAAACAgMCAAAAAAIEAwIAAAAAAgYDAgAAAAACCAMCAAAAAAIKAwIAAAAAAgwDAgAA\ -AAACDgMCAAAAAAIQAwIAAAAAAhIDAgAAAAACFAMCAAAAAAIWAwIAAAAAAhgDAgAAAAACGgMCAAAAAA\ -IcAwIAAAAAAh4DAgAAAAACIAMCAAAAAAIiAwIAAAAABAAAAAIkAwIAAAAAAiYDAgAAAAACKAMCAAAA\ -AAIqAwIAAAAAAiwDAgAAAAACLgMCAAAAAAIwAwIAAAAAAjIDAgAAAAACNAMCAAAAAAI2AwIAAAAAAj\ -gDAgAAAAACOgMCAAAAAAI8AwIAAAAAAj4DAgAAAAACQAMCAAAAAAJCAwIAAAAAAkQDAgAAAAACRgMC\ -AAAAAAJIAwIAAAAAAkoDAgAAAAACTAMCAAAAAAJOAwIAAAAAAlADAgAAAAACUgMCAAAAAAJUAwIAAA\ -AAAlYDAgAAAAACWAMCAAAAAAJaAwIAAAAAAlwDAgAAAAACXgMCAAAAAAJgAwIAAAAAAmIDAgAAAAAC\ -ZAMCAAAAAAJmAwIAAAAAAmgDAgAAAAACagMCAAAAAAJsAwIAAAAAAm4DAgAAAAACcAMCAAAAAAJyAw\ -IAAAAAAnQDAgAAAAACdgMCAAAAAAJ4AwIAAAAAAnoDAgAAAAACfAMCAAAAAAJ+AwIAAAAAAoADAgAA\ -AAACggMCAAAAAAKEAwIAAAAAAoYDAgAAAAACiAMCAAAAAAKKAwIAAAAAAowDAgAAAAACjgMCAAAAAA\ -KQAwIAAAAABAAAAAKSAwIClAMCApYDAgKYAwICmgMCApwDAgKeAwICoAMCAqIDAgKkAwICpgMCAqgD\ -AgKqAwICrAMCAq4DAgKwAwICsgMCArQDAgK2AwICuAMCAroDAgK8AwICvgMCAsADAgLCAwICxAMCAs\ -YDAgLIAwICygMCAswDAgLOAwIC0AMCAtIDAgLUAwIC1gMCAtgDAgLaAwIC3AMCBAAAAAAAAAAHAAAA\ -AAAAAALeAwQAAAAABwAAAAQAAAAHAAAABAAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAA\ -AAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAABwAAAAAAAAAHAAAABAAAAAcAAAAAAAAABwAAAAAAAAAH\ -AAAAAAAAAALiAwQC5gMEAuoDBALuAwQAAAAABwAAAAAAAAAEAAAABwAAAAAAAAAHAAAAAAAAAAcAAA\ -AEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAHAAAABAAAAAAAAAAHAAAAAAAAAAQAAAAHAAAABAAAAAAA\ -AAAEAAAABwAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAC8gMGAvgDBg\ -L+AwYCBAQGAgoEBgIQBAYCFgQGAhwEBgAAAAAHAAAAAAAAAAcAAAAAAAAABAAAAAAAAAAEAAAAAAAA\ -AAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABA\ -AAAAAAAAAEAAAAAiIEBgIoBAYEAAAAAi4EBgAAAAAEAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAEAAAA\ -AAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAACNAQGBAAAAAAAAAACOg\ -QGBAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAJABAYC\ -RgQGAkwEBgAAAAAEAAAAAlIEBgQAAAAAAAAABwAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAA\ -AAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAA\ -AAAEAAAAAAAAAAQAAAAAAAAABwAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAA\ -AAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAA\ -AAQAAAACWAQGAl4EBgQAAAAAAAAABAAAAAAAAAAHAAAAAAAAAAcAAAAEAAAAAAAAAAQAAAAAAAAABA\ -AAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAA\ -AAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAcAAAAEAA\ -AAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAA\ -AAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAcAAAAAAAAABwAAAAAAAAAEAAAAAAAAAAQAAA\ -AAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAA\ -AAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAA\ -QAAAAAAAAABwAAAAQAAAAAAAAABwAAAAAAAAAEAAAAAAAAAAcAAAAAAAAABAAAAAAAAAAEAAAAAAAA\ -AAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABA\ -AAAAAAAAAEAAAAAAAAAAQAAAAAAAAABwAAAAQAAAAAAAAAAmQEBgAAAAAEAAAABwAAAAAAAAAHAAAA\ -AAAAAAcAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAACag\ -QGAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAJwBAYCdgQGAAAAAAQAAAAA\ -AAAABwAAAAAAAAACfAQDBwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAAAAAAAAAAcAAA\ -AAAAAAAn8EBgAAAAAEAAAAAAAAAAKFBAYAAAAAAosEBgAAAAACkQQGAAAAAAKXBAYAAAAAAp0EBgAA\ -AAAEAAAAAAAAAAKjBAYAAAAAAqkEBgKvBAYCtQQJAr4EBgLEBAkAAAAAAs0EBgAAAAAHAAAAAAAAAA\ -LTBAYAAAAABAAAAAAAAAAC2QQGAAAAAALfBAYAAAAAAuUEBgAAAAAC6wQGAAAAAALxBAYAAAAABAAA\ -AAcAAAAAAAAABwAAAAQAAAAHAAAABAAAAAAAAAAHAAAAAAAAAAcAAAAEAAAAAvcEAwQAAAAC+gQDBA\ -AAAAAAAAAHAAAAAv0EAwAAAAAHAAAABAAAAAcAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAA\ -BAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAA\ -AAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAHAAAABAAAAAAAAAAH\ -AAAABAAAAAAAAAAEAAAAAgAFAwIDBQMCBgUDAgkFAwIMBQMCDwUDBAAAAAcAAAAAAAAABwAAAAAAAA\ -AEAAAAAAAAAAcAAAAEAAAAAAAAAAcAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABwAAAAQA\ -AAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAcAAAAAAAAABwAAAA\ -AAAAAEAAAAAAAAAAQAAAAHAAAABAAAAAcAAAAEAAAABwAAAAEAAAAEAAAAAAAAAAQAAAAAAAAABAAA\ -AAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAHAAAABAAAAAcAAAAAAAAABA\ -AAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAHAAAABAAAAAcAAAAAAAAABAAAAAcAAAAAAAAA\ -BAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAcAAAAAAAAABwAAAAQAAAAAAAAABwAAAAAAAAAEAA\ -AAAAAAAAQAAAAAAAAABwAAAAAAAAAHAAAABAAAAAAAAAAEAAAABwAAAAAAAAAEAAAABwAAAAAAAAAE\ -AAAAAAAAAAcAAAACkAICApQCAgKoAgICrgICArACAgLAAgICzgICAhIFAwQAAAACFQUDAhgFAwIbBQ\ -MCHgUDAiEFAwIkBQMCJwUDAioFAwItBQMCMAUDAjMFAwI2BQMC/QQDAjkFAwI8BQMCPwUDAkIFAwJF\ -BQMCSAUDAksFAwJOBQMCUQUDAlQFAwJXBQMCWgUDAl0FAwJgBQMCYwUDAmYFAwJpBQMCbAUDAm8FAw\ -JyBQMCdQUDAngFAwJ7BQMCfgUDAoEFAwKEBQMChwUDAooFAwKNBQMCkAUDBAAAAAKTBQMClgUDApkF\ -AwcAAAAEAAAAAAAAAAcAAAAAAAAABAAAAAAAAAACAAABAkcAAgIBAAEAAAAAAgMAAQIEAAECDAECAg\ -YAAQIHAAECCAABAgkAAQIKAAECCwABAgwAAQINAAEAAAAAAg4AAQKfAQICDwABAhEAAQITAAECFAAB\ -AhYAAQIAAAECnAUCAp4FAgKgBQMCAQABAgMAAQIEAAECDgECAhABAgKjBQICBgABAAAAAAIKAAECDA\ -ABAsYAAgIOAAECAgECAqUFAwKoBQMCDwABAhMAAQIUAAECqwUDAh4BAgIVAAECrgUDAhoCAgIcAgIC\ -HgICAjwCAgI+AgICCAABAhEAAQIUAAECFQABAhoCAgIcAgICNAICAjwCAgI+AgIAAAAAAqYCAgAAAA\ -ACsQUCAgIAAQKzBQICWwACAqMFAgIFAAECtQUCArcFAgK5BQICGgECAhgBAgK7BQICvQUDAsAFAgLC\ -BQICxAUDAscFAgLJBQICywUCAiABAgLNBQICzwUCAiIBAgLRBQIC0wUCAi4BAgLVBQICvwECAjYBAg\ -LXBQMCOAECAsEBAgIZAAEC2gUCAtwFAgI+AQICJgICAAAAAAQAAAAAAAAAAt4FAwAAAAAC4QUDAAAA\ -AALkBQMAAAAAAucFAwAAAAAC6gUDAAAAAALtBQMAAAAAAvAFAwAAAAAC8wUDAAAAAAL2BQMAAAAAAv\ -kFAwAAAAAC/AUDAAAAAAL/BQMAAAAAAgIGAwAAAAACBQYDAAAAAAIIBgMAAAAAAgsGAwAAAAACDgYD\ -AAAAAAIRBgMAAAAAAhQGAwAAAAACFwYDAAAAAAIaBgMAAAAAAh0GAwAAAAACIAYDAAAAAAIjBgMAAA\ -AAAiYGAwAAAAACKQYDAAAAAAIsBgMAAAAAAi8GAwAAAAACMgYDAAAAAAI1BgMAAAAAAjgGAwAAAAAC\ -OwYDAAAAAAI+BgMAAAAAAkEGAwAAAAACRAYDAAAAAAJHBgMAAAAAAkoGAwAAAAACTQYDAAAAAAJQBg\ -MAAAAAAlMGAwAAAAACVgYDAAAAAAJZBgMAAAAAAlwGAwAAAAACXwYDAAAAAAJiBgMAAAAAAmUGAwAA\ -AAACaAYDAAAAAAJrBgMAAAAAAm4GAwAAAAACcQYDAAAAAAJ0BgMAAAAAAncGAwAAAAACegYDAAAAAA\ -J9BgMAAAAAAoAGAwAAAAACgwYDAAAAAAKGBgMAAAAAAokGAwAAAAACjAYDAAAAAAKPBgMAAAAAApIG\ -AwAAAAAClQYDAAAAAAKYBgMAAAAAApsGAwAAAAACngYDAAAAAAKhBgMAAAAAAqQGAwAAAAACpwYDAA\ -AAAAKqBgMAAAAAAq0GAwAAAAACsAYDAAAAAAKzBgMAAAAAArYGAwAAAAACuQYDAAAAAAK8BgMAAAAA\ -Ar8GAwJuBgMAAAAAAncAAgAAAAACwgYDAAAAAALFBgMAAAAAAsgGAwAAAAACywYDAAAAAALOBgMAAA\ -AAAtEGAwAAAAAC1AYDAAAAAALXBgMAAAAAAtoGAwAAAAAC3QYDAAAAAALgBgMAAAAAAuMGAwAAAAAC\ -5gYDAAAAAALpBgMAAAAAAuwGAwAAAAAC7wYDAAAAAALyBgMAAAAAAvUGAwAAAAAC+AYDAAAAAAL7Bg\ -MAAAAAAv4GAwAAAAACAQcDAAAAAAIEBwMAAAAAAgcHAwAAAAACCgcDAAAAAAINBwMAAAAAAhAHAwAA\ -AAACEwcDAAAAAAIWBwMAAAAAAhkHAwAAAAACHAcDAAAAAAIfBwMAAAAAAiIHAwAAAAACJQcDAAAAAA\ -IoBwMAAAAAAisHAwAAAAACLgcDAAAAAAIxBwMAAAAAAjQHAwAAAAACNwcDAAAAAAI6BwMAAAAAAj0H\ -AwAAAAACQAcDAAAAAAJDBwMAAAAAAkYHAwAAAAACSQcDAAAAAAJMBwMAAAAAAk8HAwAAAAACUgcDAl\ -UHAwJYBwMCWwcDAl4HAwJhBwMCZAcDAmcHAwAAAAAEAAAAAmoHAwJtBwMCcAcDAnMHAwJ2BwMCeQcD\ -BAAAAAAAAAACfAcDAn8HAwKCBwMChQcDAogHAwKLBwMCjgcDApEHAwAAAAAClAcDApcHAwKaBwMCnQ\ -cDAqAHAwKjBwMCpgcDAqkHAwAAAAAEAAAAAqwHAwKvBwMCsgcDArUHAwK4BwMCuwcDBAAAAAAAAAAE\ -AAAAAr4HAwQAAAACwQcDBAAAAALEBwMEAAAAAscHAwAAAAACygcDAs0HAwLQBwMC0wcDAtYHAwLZBw\ -MC3AcDAt8HAwAAAAACCAICAAAAAAIMAgIAAAAAAg4CAgAAAAACEAICAAAAAAISAgIAAAAAAhQCAgAA\ -AAACFgICBAAAAALiBwUC5wcFAuwHBQLxBwUC9gcFAvsHBQIACAUCBQgFAuIHBQLnBwUC7AcFAvEHBQ\ -L2BwUC+wcFAgAIBQIFCAUCCggFAg8IBQIUCAUCGQgFAh4IBQIjCAUCKAgFAi0IBQIKCAUCDwgFAhQI\ -BQIZCAUCHggFAiMIBQIoCAUCLQgFAjIIBQI3CAUCPAgFAkEIBQJGCAUCSwgFAlAIBQJVCAUCMggFAj\ -cIBQI8CAUCQQgFAkYIBQJLCAUCUAgFAlUIBQAAAAACWggFAl8IBAJjCAQEAAAAAAAAAAJnCAUCbAgD\ -Am8IAwJyCAMCCAICAl8IBAZ1CAMC8wECBnUIAwZ4CAMGewgFAoAIBQKFCAQCiQgEBAAAAAAAAAACjQ\ -gFApIIAwIMAgIClQgDAg4CAgKFCAQGmAgFBp0IBQaiCAUAAAAAAqcIAgQAAAAAAAAAAqkIAwKsCAMC\ -rwgDAhACAgQAAAAGsggFBrcIBQa8CAUAAAAAAsEIAgAAAAACwwgDAsYIAwLJCAMCFAICAswIAwbPCA\ -UGAwIFBtQIAQQAAAAC1QgFAtoIBALeCAQEAAAAAAAAAALiCAUC5wgDAhICAgLqCAMCFgICAtoIBAYj\ -AAMG7QgDBAAAAAYaAAEBAAAAA/AIAAQAAAAHAAAAAvAIAwcAAAAG8wgDBwAAAAQAAAAHAAAABAAAAA\ -YaAAEHAAAAAvYIBgL8CAkHAAAAAgUJBgILCQkHAAAABhQJAgcAAAAGFgkDBwAAAAYZCQIGGwkCBh0J\ -AgcAAAACHwkMBwAAAAYaAAEBAAAABAAAAAEAAAAEAAAAAisJAQIIAAEEAAAAAiwJAQItCQECLgkBAi\ -8JAQIwCQECMQkBBjIJAQIzCQMGNgkBBjcJAQY4CQECDQABAisJAQIrAAECIQABAiIAAQIsCQECLQkB\ -Ai4JAQIvCQECMAkBAjEJAQYyCQECMwkDBjYJAQY3CQEGOAkBBAAAAAIAAAECBAABAg4AAQIXAAECDg\ -ECAgcAAQIKAAECCwABAgwAAQINAAECDwABAhIAAQITAAEEAAAABwAAAAI5CQIHAAAABAAAAAcAAAAE\ -AAAABjsJAwY+CQMCAgABAkEJAwcAAAAGRAkDBkcJAwIQAQIHAAAAAkoJAwIGAAECBwABAp8AAgIIAA\ -ECCwABBwAAAAINAAECTQkCBwAAAAIPAAECEAABAhEAAQcAAAACTwkCAlEJAwJUCQIHAAAAAhkAAQcA\ -AAACQgICBwAAAAIZAAEHAAAAAgoAAQJFAAICAQABAgIAAQcAAAACBAABAgUAAQQAAAACDAABAg4AAQ\ -JWCQICWAkCAloJAgJcCQICCAABBwAAAAJeCQMCMgICAhwCAgIyAgICYQkDBwAAAAIDAAECBAABAggA\ -AQIJAAEHAAAAAAAAAAcAAAACZAkFAmkJBQJuCQYCdAkFAnkJBQJ+CQUCgwkFAogJBQKNCQUCkgkFAp\ -cJBQKcCQUCoQkFAqYJBQKrCQUCsAkEAggAAQK0CQICtgkDArkJAgIVAAECuwkCAr0JAwLACQQCxAkC\ -AhcAAQLGCQICyAkDAgsAAQICAAECAwABAgwAAQIIAAECtAkCArYJAwK5CQICFQABArsJAgK9CQMCwA\ -kEAsQJAgIXAAECxgkCAsgJAwILAAECAgABAgMAAQIMAAEHAAAABAAAAAAAAAAHAAAAAssJBQcAAAAE\ -AAAABwAAAALQCQYC1gkJBwAAAALfCQYC5QkJBwAAAAUAAAAHAAAABQAAAAcAAAAC7gkDAvEJAwcAAA\ -AEAAAABwAAAAQAAAACKwABAiEAAQIiAAECLAkBAi0JAQIuCQECLwkBAjAJAQIxCQEC9AkCAvYJAgL4\ -CQIC+gkCAvwJAgL+CQICAAoCAgIKAgIECgICBgoCAggKAgYKCgMGDQoDBhAKAwYTCgMGFgoDBhkKAw\ -YcCgMGHwoDBiIKAwYlCgQGKQoEBi0KBAYxCgQGNQoEBjkKBAY9CgQGQQoEBkUKBAZJCgQGTQoEBAAA\ -AAZRCgMGVAoDBlcKAwZaCgMGXQoDBmAKAwZjCgMGZgoDBmkKAwZsCgMGbwoDBnIKAwZ1CgMGeAoDBn\ -sKAwZ+CgMGgQoDBoQKAwaHCgMGigoDBo0KAwaQCgMGkwoDBpYKAwaZCgMGnAoDAgAAAQIBAAECAgAB\ -AgMAAQIEAAECBQABAgYAAQIHAAECCAABAgkAAQIKAAECCwABAgwAAQINAAECDgABAg8AAQIQAAECEQ\ -ABAhIAAQITAAECFAABAhUAAQIWAAECFwABAhgAAQIZAAECAAABAgEAAQICAAECAwABAgQAAQIFAAEC\ -BgABAgcAAQIIAAECCQABAgoAAQILAAECDAABAg0AAQIOAAECDwABAhAAAQIRAAECEgABAhMAAQIUAA\ -ECFQABAhYAAQIXAAECGAABAhkAAQIrCQEHAAAAAp8KDAcAAAAGqwoDBq4KAgawCgMHAAAAArMKBQcA\ -AAAEAAAABwAAAAQAAAAHAAAAArgKAwK7CgMCvgoDAsEKAwLECgMCxwoDAsoKAwLNCgMC0AoDAtMKAw\ -LWCgMC2QoDAtwKAwLfCgMC4goDAuUKAwLoCgMC6woDAu4KAwLxCgMC9AoDAvcKAwL6CgMC/QoDAgAL\ -AwIDCwMCBgsDAgkLAwIMCwMCDwsDAhILAwIVCwMCGAsDAhsLAwIeCwMCIQsDAiQLAwInCwMCKgsDAi\ -0LAwIwCwMCMwsDAjYLAwI5CwMCPAsDAj8LAwJCCwMEAAAAAAAAAAQAAAACRQsDAAAAAAJICwICSgsD\ -Ak0LAgAAAAACTwsDAAAAAAJSCwMAAAAAAlULAwAAAAACngUCAskFAgKcBQICsQUCAAAAAAJYCwMAAA\ -AAAlsLAwAAAAACCQABAhUAAQJeCwICYAsCAmILAwAAAAACZQsDAAAAAAJoCwMAAAAAAmsLAwAAAAAC\ -bgsDAAAAAAJxCwMAAAAAAnQLAwAAAAACdwsDAAAAAAJ6CwMAAAAAAn0LAwAAAAACgAsDAAAAAAKDCw\ -MAAAAAAoYLAwAAAAACiQsDAAAAAAKMCwMAAAAAAo8LAwAAAAACkgsDAAAAAAKVCwMAAAAAApgLAwAA\ -AAACmwsDAAAAAAKeCwMAAAAAAqELAwAAAAACpAsDAAAAAAKnCwMAAAAAAqoLAwAAAAACrQsDAAAAAA\ -KwCwMAAAAAArMLAwAAAAACtgsDAAAAAAK5CwMAAAAAArwLAwAAAAACvwsDAAAAAALCCwMAAAAAAsUL\ -AwAAAAACyAsDAAAAAALLCwMAAAAAAs4LAwAAAAAC0QsDAAAAAALUCwMAAAAAAtcLAwAAAAAC2gsDAA\ -AAAALdCwMAAAAAAuALAwAAAAAC4wsDAAAAAALmCwMAAAAAAukLAwAAAAAC7AsDAAAAAALvCwMAAAAA\ -AvILAwAAAAAC9QsDAAAAAAcAAAAC+AsDAAAAAAL7CwMAAAAAAv4LAwAAAAAEAAAABwAAAAAAAAAEAA\ -AAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAgEMAwcAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAE\ -AAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAcAAA\ -AAAAAABwAAAAQAAAAHAAAABAAAAAcAAAACBAwDBwAAAAIHDAMEAAAAAgoMAwINDAMCEAwDAhMMAwIW\ -DAMCGQwDAhwMAwIfDAMCIgwDAiUMAwIoDAMCKwwDAi4MAwIxDAMCNAwDAjcMAwI6DAMCPQwDAkAMAw\ -JDDAMCRgwDAkkMAwJMDAMCTwwDAlIMAwJVDAMCWAwDAlsMAwJeDAMCYQwDAmQMAwJnDAMCagwDAm0M\ -AwJwDAMCcwwDAnYMAwJ5DAMCfAwDAn8MAwKCDAMChQwDAogMAwKLDAMCjgwDApEMAwKUDAMClwwDAp\ -oMAwKdDAMCoAwDAqMMAwKmDAMCqQwDAqwMAwKvDAMCsgwDArUMAwK4DAMCuwwDAr4MAwLBDAMCxAwD\ -AscMAwLKDAMCzQwDAtAMAwLTDAMC1gwDAtkMAwLcDAMC3wwDAuIMAwLlDAMC6AwDAusMAwLuDAMC8Q\ -wDAvQMAwL3DAMC+gwDAv0MAwIADQMCAw0DAgYNAwIJDQMCDA0DAg8NAwISDQMCFQ0DAhgNAwIbDQMC\ -Hg0DAiENAwIkDQMCJw0DAioNAwItDQMCMA0DAjMNAwI2DQMCOQ0DAjwNAwI/DQMCQg0DAkUNAwJIDQ\ -MCSw0DAk4NAwJRDQMCVA0DAlcNAwJaDQMCXQ0DAmANAwJjDQMCZg0DAmkNAwJsDQMCbw0DAnINAwJ1\ -DQMCeA0DAnsNAwJ+DQMCgQ0DAoQNAwKHDQMCig0DAo0NAwKQDQMCkw0DApYNAwKZDQMCnA0DAp8NAw\ -KiDQMCpQ0DAqgNAwKrDQMCrg0DArENAwK0DQMCtw0DAroNAwK9DQMCwA0DAsMNAwLGDQMCyQ0DAswN\ -AwLPDQMC0g0DAtUNAwLYDQMC2w0DAt4NAwLhDQMC5A0DAucNAwLqDQMC7Q0DAvANAwLzDQMC9g0DAv\ -kNAwL8DQMC/w0DAgIOAwIFDgMCCA4DAgsOAwIODgMCEQ4DAhQOAwIXDgMCGg4DAh0OAwIgDgMCIw4D\ -AiYOAwIpDgMCLA4DAi8OAwIyDgMCNQ4DAjgOAwI7DgMCPg4DAkEOAwJEDgMCRw4DAkoOAwJNDgMCUA\ -4DAlMOAwJWDgMCWQ4DAlwOAwJfDgMCYg4DAmUOAwJoDgMCaw4DAm4OAwJxDgMCdA4DAncOAwJ6DgMC\ -fQ4DAoAOAwKDDgMChg4DAokOAwQAAAAGGgABBwAAAAKMDgEHAAAAAAAAAAcAAAAAAAAABwAAAAKNDg\ -MHAAAAAk8MAwKQDgMCkw4DBwAAAAAAAAAHAAAABAAAAAAAAAAEAAAAAAAAAAaWDgQGmg4EAAAAAAKe\ -DgYHAAAAAAAAAAKkDgYEAAAAAAAAAAQAAAACqg4DAq0OAwKwDgMCsw4DArYOAwK5DgMCvA4DAr8OAw\ -LCDgMCxQ4DAsgOAwLLDgMCzg4DAtEOAwLUDgMC1w4DAtoOAwLdDgMC4A4DAuMOAwLmDgMC6Q4DAuwO\ -AwLvDgMC8g4DAvUOAwL4DgMC+w4DAv4OAwIBDwMCBA8DAgcPAwIKDwMCDQ8DAhAPAwITDwMCFg8DAh\ -kPAwIcDwMCHw8DAiIPAwIlDwMCKA8DAisPAwIuDwMCMQ8DAjQPAwI3DwMCOg8DAj0PAwJADwMEAAAA\ -AkMPAwJGDwMCSQ8DAkwPAwJPDwMCUg8DAlUPAwJYDwMCWw8DAl4PAwJhDwMCZA8DAmcPAwJqDwMCbQ\ -8DAnAPAwJzDwMCdg8DAnkPAwJ8DwMCfw8DAoIPAwKFDwMCiA8DAosPAwKODwMCkQ8DApQPAwKXDwMC\ -mg8DAp0PAwKgDwMCow8DAqYPAwKpDwMCrA8DAq8PAwKyDwMCtQ8DArgPAwK7DwMCvg8DBAAAAAcAAA\ -ACCgwDAhwMAwLBDwMCxA8DAscPAwLKDwMCzQ8DAtAPAwIWDAMC0w8DAtYPAwLZDwMC3A8DAiIMAwAA\ -AAAHAAAABAAAAAAAAAAG3w8FBuQPBQbpDwUG7g8FBvMPBQb4DwUG/Q8FBgIQBQYHEAUGDBAFBhEQBQ\ -YWEAUGGxAFBiAQBQYlEAUGKhAFBi8QBQY0EAUGORAFBj4QBQZDEAUGSBAFBk0QBQZSEAUGVxAFBlwQ\ -BQZhEAUGZhAFBmsQBQZwEAgGeBAIBAAAAAaAEAUGhRAFBooQBQaPEAUGlBAFBpkQBQaeEAUGoxAFBq\ -gQBQatEAUGshAFBrcQBQa8EAUGwRAFBsYQBQbLEAUG0BAFBtUQBQbaEAUG3xAFBuQQBQbpEAUG7hAF\ -BvMQBQb4EAUG/RAFBgIRBQYHEQUGDBEFBhERBQYWEQUGGxEFBiARBQYlEQUGKhEFBi8RBQI0EQMCNx\ -EDAtAMAwI6EQMHAAAAAj0RAwJAEQICQhECAkQRAgJGEQICSBECAkoRAgJMEQICThECAlARAgJSEQIC\ -VBECAlYRAgJYEQICWhECAlwRAgKqDgMCsw4DArwOAwLCDgMC2g4DAt0OAwLmDgMC7A4DAu8OAwL1Dg\ -MC+A4DAvsOAwL+DgMCAQ8DAl4RAwJhEQMCZBEDAmcRAwJqEQMCbREDAnARAwJzEQMCdhEDAnkRAwJ8\ -EQMCfxEDAoIRAwKFEQMCiBEGAo4RBgKUEQMHAAAAAgoMAwIcDAMCwQ8DAsQPAwKXEQMCmhEDAp0RAw\ -IrDAMCoBEDAk8MAwLlDAMCCQ0DAgYNAwLoDAMC/A0DAmcMAwLfDAMCoxEDAqYRAwKpEQMCrBEDAq8R\ -AwKyEQMCtREDArgRAwK7EQMCvhEDAnkMAwLBEQMCxBEDAscRAwLKEQMCzREDAtARAwLTEQMC1hEDAs\ -cPAwLKDwMCzQ8DAtkRAwLcEQMC3xEDAuIRAwLlEQMC6BEDAusRAwLuEQMC8REDAvQRAwL3EQIC+REC\ -AvsRAgL9EQIC/xECAgESAgIDEgICBRICAgcSAgIJEgICCxICAg0SAgIPEgICERICAhMSAgIVEgQCGR\ -IEAh0SBAIhEgQCJRIEAikSBAItEgQCMRIEAjUSBAI5EgUCPhIFAkMSBQJIEgICShIDAk0SAgJPEgMC\ -UhIDAlUSAwJYEgMCWxIDAl4SAwJhEgMCZBIDAmcSAwJqEgMCbRIDAnASAwJzEgMCdhIDAnkSAwJ8Eg\ -MCfxIDAoISAwKFEgMCiBIDAosSAwKOEgMCkRIDApQSAwKXEgMCmhIDAp0SAwKgEgMCoxIDAqYSAwKp\ -EgMCrBIDAq8SAwKyEgMCtRIDArgSAwK7EgMCvhIDAsESAwLEEgMCxxIDAsoSAwLNEgMC0BIDAtMSAw\ -LWEgMC2RIDAtwSAwLfEgYC5RIMAvESDAL9EgwCCRMJAhITDAIeEwkCJxMJAjATDwI/EwwCSxMJAlQT\ -CQJdEwkCZhMMAnITDAJ+EwkChxMJApATBgKWEwkCnxMMAqsTDAK3EwYCvRMPAswTEgLeEw8C7RMJAv\ -YTDwIFFA8CFBQMAiAUCQIpFAkCMhQJAjsUDAJHFA8CVhQMAmIUCQJrFAkCdBQJAn0UBgKDFAYCiRQG\ -Ao8UBgKVFAkCnhQJAqcUDwK2FAkCvxQMAssUDwLaFAkC4xQGAukUBgLvFA8C/hQMAgoVDwIZFQkCIh\ -UPAjEVBgI3FQkCQBUJAkkVCQJSFQkCWxUJAmQVDAJwFQkCeRUGAn8VCQKIFQkCkRUJApoVDAKmFQkC\ -rxUJArgVCQLBFQ8C0BUMAtwVBgLiFQ8C8RUGAvcVDAIDFgwCDxYJAhgWCQIhFgkCKhYMAjYWBgI8Fg\ -kCRRYMAlEWBgJXFg8CZhYJAm8WBAJzFgQCdxYEAnsWBAJ/FgQCgxYEAocWBAKLFgQCjxYEApMWBAKX\ -FgUCnBYFAqEWBQKmFgUCqxYFArAWBQK1FgUCuhYFAr8WBQLEFgUCyRYFAs4WBQLTFgUC2BYFAt0WBQ\ -LiFgMC5RYCAucWAgLpFgMC7BYCAu4WAgLwFgIC8hYDAvUWAwL4FgIC+hYGAgAXBgIGFwYCDBcGAhIX\ -DAIeFwICIBcCAiIXAwIlFwICJxcCAikXAgIrFwICLRcCAi8XAwIyFwQCNhcCAjgXAgI6FwMCPRcDAk\ -AXAgJCFwICRBcCAkYXAwJJFwMCTBcDAk8XAwJSFwMCVRcCAlcXAgJZFwICWxcCAl0XAgJfFwMCYhcC\ -AmQXAgJmFwICaBcDAmsXAwJuFwICcBcDAnMXAwJ2FwMCeRcCAnsXAwJ+FwUCgxcGAh4XAgKJFwMCjB\ -cDAo8XAwKSFwMClRcHApwXCAKkFwICphcCAqgXAwKrFwICrRcCAq8XAgKxFwMCtBcCArYXAgK0FwIC\ -uBcCAroXAgK8FwMCvxcCAsEXAgK/FwICwxcDAsYXAwQAAAACyRcCAssXAgLNFwICzxcGBAAAAALVFw\ -IC1xcCAtkXAgLbFwIC3RcCAt8XAgJmFwIC4RcCAuMXAgLlFwIC5xcDAuoXAgIrFwIC7BcDAu8XAwLy\ -FwIEAAAAAvQXAwL3FwIC+RcCAvsXAgL9FwIC/xcFAgQYBQIJGAQCDRgEAhEYBAIVGAQCGRgEAh0YBA\ -IhGAQCJRgEAikYBAItGAUCMhgFAjcYBQI8GAUCQRgFAkYYBQJLGAUCUBgFAlUYBQJaGAUCXxgFAmQY\ -BQJpGAUCbhgFAnMYBQJ4GAUCfRgFAoIYBQKHGAUCjBgFApEYBQKWGAUCmxgDAAAAAAcAAAAAAAAABA\ -AAAAAAAAAEAAAABwAAAAQAAAAAAAAABwAAAAAAAAAHAAAAAAAAAAQAAAACnhgDAAAAAAKhGAMAAAAA\ -AqQYAwAAAAACpxgDAAAAAAKqGAMAAAAAAhIFAwAAAAACrRgDAAAAAAKwGAMAAAAAArMYAwAAAAACth\ -gDAAAAAAK5GAMAAAAAArwYAwAAAAACvxgDAAAAAALCGAMAAAAAAsUYAwAAAAACyBgDAAAAAALLGAMA\ -AAAAAs4YAwAAAAAC0RgDAAAAAALUGAMAAAAAAtcYAwAAAAAC2hgDAAAAAALdGAMAAAAABwAAAAAAAA\ -AHAAAAAAAAAALgGAMAAAAAAuMYAwAAAAAC5hgDAAAAAALpGAMAAAAAAuwYAwAAAAAC7xgDAAAAAALy\ -GAMAAAAAAvUYAwAAAAAC+BgDAAAAAAL7GAMAAAAAAv4YAwAAAAACARkDAAAAAAIEGQMAAAAAAgcZAw\ -AAAAACwAICAsQCAgAAAAAHAAAAAAAAAAcAAAAEAAAABwAAAAAAAAAHAAAAAgoZAwAAAAACDRkDAAAA\ -AAIQGQMAAAAAAhMZAwAAAAACFhkDAAAAAAIZGQMAAAAAAhwZAwAAAAACHxkDAAAAAAIiGQMAAAAAAi\ -UZAwAAAAACKBkDAAAAAAIrGQMAAAAAAi4ZAwAAAAACMRkDAAAAAAI0GQMAAAAAAjcZAwAAAAACOhkD\ -AAAAAAI9GQMAAAAAAkAZAwAAAAACQxkDAAAAAAJGGQMAAAAAAkkZAwAAAAACTBkDAAAAAAJPGQMAAA\ -AAAlIZAwAAAAACVRkDAAAAAAJYGQMAAAAAAlsZAwAAAAACXhkDAAAAAAJhGQMAAAAAAmQZAwAAAAAC\ -ZxkDAAAAAAJqGQMAAAAAAm0ZAwAAAAACcBkDAAAAAAJzGQMAAAAAAnYZAwAAAAACeRkDAAAAAAJ5GQ\ -MAAAAAAnwZAwAAAAACfxkDAAAAAAKCGQMChRkDAAAAAAKIGQMAAAAAAosZAwAAAAACjhkDAAAAAAKR\ -GQMAAAAABwAAAAKUGQMAAAAAArkFAgAAAAAClxkDAAAAAAKaGQMAAAAAAp0ZAwAAAAACoBkDAAAAAA\ -KjGQMAAAAAAqYZAwAAAAACqRkDAAAAAAKsGQMAAAAAAq8ZAwAAAAACshkDAAAAAAK1GQMAAAAAArgZ\ -AwAAAAACzQECAqMFAgK3BQICuxkCArsFAgAAAAACvRkCAr8ZAgLABQICwRkDAsQZAwAAAAACxxkDAA\ -AAAALKGQMAAAAAAs0ZAwAAAAAC0BkDAAAAAALTGQMAAAAABAAAAALWGQMAAAAAAtkZAwLTBQIC3BkD\ -At8ZAwAAAAAC4hkDAAAAAAQAAAAC5RkDAAAAAAKfAAICzgACAAAAAAcAAAAAAAAABAAAAAcAAAAEAA\ -AAAAAAAAcAAAAEAAAAAAAAAAQAAAAHAAAAAAAAAAQAAAAAAAAABwAAAAAAAAAHAAAAAAAAAAcAAAAA\ -AAAABAAAAAcAAAAEAAAAAAAAAAcAAAAEAAAAAAAAAAQAAAAHAAAAAAAAAAQAAAAAAAAABAAAAAAAAA\ -AEAAAAAAAAAAQAAAAHAAAAAAAAAAcAAAAAAAAABAAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABAAAAAAA\ -AAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABwAAAAIQGQMC6BkDAkgLAg\ -LrGQMAAAAAAu4ZAgcAAAAEAAAAAvAZAwLzGQMC9hkDAvkZAwL8GQMC/xkDAgIaAwIFGgMCCBoDAgsa\ -AwIOGgMCERoDAhQaAwIXGgMCGhoDAh0aAwIgGgMCIxoDAiYaAwIpGgMCLBoDAi8aAwIyGgMCNRoDAj\ -gaAwI7GgMCPhoDAkEaAwJEGgMCRxoDAkoaAwJNGgMCUBoDAlMaAwJWGgMCWRoDAlwaAwJfGgMCYhoD\ -AmUaAwJoGgMCaxoDAm4aAwJxGgMCdBoDAncaAwJ6GgMCfRoDAoAaAwKDGgMChhoDAokaAwKMGgMCjx\ -oDApIaAwKVGgMCmBoDApsaAwKeGgMCoRoDAqQaAwKnGgMCqhoDAq0aAwKwGgMCsxoDArYaAwK5GgMC\ -vBoDAr8aAwLCGgMCxRoDAsgaAwLLGgMCzhoDAtEaAwLUGgMC1xoDAtoaAwLdGgMAAAAABwAAAAAAAA\ -AEAAAAAAAAAAQAAAAAAAAABAAAAAcAAAAEAAAABwAAAAQAAAAC4BoDAuMaAwLkDQMC5hoDAukaAwLs\ -GgMC7xoDAoYOAwLyGgMC/A0DAvUaAwL4GgMC+xoDAv4aAwIBGwMCBBsDAgcbAwIKGwMCDRsDAhAbAw\ -ITGwMCFhsDAhkbAwIcGwMCHxsDAiIbAwIlGwMCKBsDAisbAwIuGwMCMRsDAjQbAwI3GwMCOhsDAj0b\ -AwJAGwMCQxsDAkYbAwJJGwMCTBsDAk8bAwJSGwMCVRsDAlgbAwJbGwMCXhsDAmEbAwJkGwMCZxsDAm\ -obAwJtGwMCfg0DAnAbAwJzGwMCdhsDAnkbAwJ8GwMCfxsDAoIbAwKFGwMCiBsDAosbAwKOGwMCWQ4D\ -ApEbAwKUGwMClxsDApobAwKdGwMCoBsDAqMbAwKmGwMCqRsDAqwbAwKvGwMCshsDArUbAwK4GwMCux\ -sDAr4bAwLBGwMCxBsDAscbAwLKGwMCzRsDAtAbAwLTGwMC1hsDAtkbAwLcGwMC3xsDAhAbAwLiGwMC\ -5RsDAugbAwLrGwMC7hsDAvEbAwL0GwMC9xsDAvobAwL9GwMCABwDAgMcAwIGHAMCCRwDAgwcAwIPHA\ -MCEhwDAhUcAwIYHAMCGxwDAuoNAwIeHAMCIRwDAiQcAwInHAMCKhwDAi0cAwIwHAMCMxwDAjYcAwI5\ -HAMCPBwDAj8cAwJCHAMCRRwDAkgcAwJ5DAMCSxwDAk4cAwJRHAMCVBwDAlccAwJaHAMCXRwDAmAcAw\ -JADAMCYxwDAmYcAwJpHAMCbBwDAm8cAwJyHAMCdRwDAngcAwJ7HAMCfhwDAoEcAwKEHAMChxwDAooc\ -AwKNHAMCkBwDApMcAwKWHAMCmRwDApwcAwKfHAMCohwDAhgcAwKlHAMCqBwDAqscAwKuHAMCsRwDAr\ -QcAwK3HAMCuhwDAugbAwK9HAMCwBwDAsMcAwLGHAMCyRwDAswcAwLPHAMC0hwDAtUcAwLYHAMC2xwD\ -At4cAwLhHAMC5BwDAuccAwLqHAMC7RwDAvAcAwLzHAMC9hwDAhAbAwL5HAMC/BwDAv8cAwICHQMCgw\ -4DAgUdAwIIHQMCCx0DAg4dAwIRHQMCFB0DAhcdAwIaHQMCHR0DAiAdAwIjHQMCJh0DApoRAwIpHQMC\ -LB0DAi8dAwIyHQMCNR0DAjgdAwI7HQMCPh0DAkEdAwLuGwMCRB0DAkcdAwJKHQMCTR0DAlAdAwJTHQ\ -MCVh0DAlkdAwJcHQMCXx0DAmIdAwJlHQMCaB0DAvkNAwJrHQMCbh0DAnEdAwJ0HQMCdx0DAnodAwJ9\ -HQMCgB0DAoMdAwKGHQMCiR0DAowdAwKPHQMCZg0DApIdAwKVHQMCmB0DApsdAwKeHQMCoR0DAqQdAw\ -KnHQMCqh0DAq0dAwKwHQMCsx0DArYdAwK5HQMCvB0DAr8dAwK3DQMCwh0DAsANAwLFHQMCyB0DAssd\ -AwAAAAACzh0DAAAAAALRHQMAAAAAAtQdAwLXHQMC2h0DAt0dAwLgHQMC4x0DAuYdAwLpHQMC7B0DAn\ -sNAwAAAAAC7x0DAAAAAALyHQMAAAAAAvUdAwL4HQMAAAAAAvsdAwL+HQMCAR4DAgQeAwIHHgMCCh4D\ -Ag0eAwIQHgMCEx4DAhYeAwIZHgMCHB4DAh8eAwIiHgMCJR4DAigeAwIrHgMCLh4DAo4MAwIxHgMCNB\ -4DAjceAwI6HgMCPR4DAkAeAwJDHgMCRh4DAkkeAwJMHgMCTx4DAlIeAwJVHgMCWB4DAlseAwKpEQMC\ -Xh4DAmEeAwJkHgMCZx4DArURAwJqHgMCbR4DAnAeAwJzHgMCdh4DAoQcAwJ5HgMCfB4DAn8eAwKCHg\ -MChR4DAogeAwKLHgMCjh4DApEeAwKUHgMClx4DApoeAwKdHgMCoB4DAvUdAwKjHgMCph4DAqkeAwKs\ -HgMCrx4EArMeAwQAAAACth4DArkeAwK8HgMCvx4DAsIeAwLFHgMCyB4DAsseAwIfHgMCzh4DAtEeAw\ -LUHgMCzh0DAtceAwLaHgMC3R4DAuAeAwLjHgMC5h4DAukeAwLsHgMC7x4DAvIeAwL1HgMC+B4DAjce\ -AwL7HgMCOh4DAv4eAwIBHwMCBB8DAgcfAwIKHwMC0R0DAk8bAwINHwMCEB8DAvEMAwIbHAMCFB0DAh\ -MfAwIWHwMCTx4DAhkfAwJSHgMCHB8DAh8fAwIiHwMC1x0DAiUfAwIoHwMCKx8DAi4fAwIxHwMC2h0D\ -AjQfAwI3HwMCOh8DAj0fAwJAHwMCQx8DAnYeAwJGHwMCSR8DAoQcAwJMHwMCgh4DAk8fAwJSHwMCVR\ -8DAlgfAwJbHwMCkR4DAl4fAwLyHQMCYR8DApQeAwLiGwMCZB8DApceAwJnHwMCnR4DAmofAwJtHwMC\ -cB8DAnMfAwJ2HwMCox4DAukdAwJ5HwMCph4DAnwfAwKpHgMCfx8DAoYOAwKCHwQChh8EAoofBAKOHw\ -MCkR8DApQfAwKXHwQCmx8EAp8fBAKjHwMCph8DBAAAAAKpHwICqx8CAq0fAgKvHwMCsh8DArUfAgQA\ -AAACtx8EArsfBAK/HwQCwx8EAscfBAQAAAACyx8EAAAAAALPHwQC0x8CAlYJAgJcCQIC1R8CAtcfAg\ -LZHwIC2x8CAt0fAgLfHwIGMgkBAuEfBALlHwQC6R8GAu8fBgL1HwQC+R8EAv0fBAIBIAQCBSAEAgkg\ -BAINIAQCESAEAhUgBAQAAAACGSAEAh0gBAIhIAQCJSAEAikgBAQAAAACLSAEBAAAAAIxIAQCNSAEBA\ -AAAAI5IAQCPSAEBAAAAAJBIAQCRSAEAkkgBAJNIAQCUSAEAlUgBAJZIAQCXSAEAmEgBAJlIAQCaSAC\ -AmsgAgJtIAICbyACAnEgAgJzIAICdSACAncgAgJ5IAICeyACAn0gAgJ/IAICgSACAoMgAgKFIAIChy\ -ACAokgAgKLIAICjSACAo8gAgKRIAICkyACApUgAgKXIAICmSACApsgAgKdIAICnyACAqEgAgKjIAIH\ -AAAABAAAAAKlIAICpyACAqkgAgKrIAIC6gMEAq0gAgKvIAICsSACArMgAgK1IAICtyAEArsgBAK/IA\ -QCwyAEAscgBALLIAQCzyAEAtMgBALXIAIC2SAEAt0gBALhIAQC0yAEAuUgBALpIAQC7SAEAvEgBAL1\ -IAQC+SAEAv0gBAIBIQQCBSEEAgkhBAINIQQCESEEAhUhBAIZIQQCHSEEAiEhBAIlIQQCKSEEAi0hBA\ -IxIQQCNSEEAjkhBAI9IQQCQSEEAkUhBAJJIQQCTSEEAlEhBAJVIQQCWSEEAl0hBAJhIQQCZSEEAmkh\ -BAJtIQQCcSEEAnUhBAJ5IQQCfSEEAoEhBAKFIQQCiSEEAo0hBAKRIQQClSEEApkhBAKdIQQCoSEEAq\ -UhBAKpIQQCrSEEArEhBAK1IQQCuSEEAr0hBALBIQQCxSEEAskhBALNIQQC0SEEAtUhBALZIQQC3SEE\ -AuEhBALlIQQC6SEEAu0hBALxIQQC9SEEAvkhBAL9IQQCASIEAgUiBAIJIgQCDSIEAhEiBAIVIgQCGS\ -IEAh0iBAIhIgQCJSIEAikiBAItIgQCMSIEAjUiBAI5IgQCPSIEAkEiBAJFIgQCSSIEBk0iBQZSIgUG\ -VyIFBlwiBQZhIgUGZiIFAmsiBAJvIgQC4SAEAnMiBALTIAQC5SAEAnciBAJ7IgQC9SAEAn8iBAL5IA\ -QC/SAEAoMiBAKHIgQCDSEEAosiBAIRIQQCFSEEAo8iBAKTIgQCHSEEApciBAIhIQQCJSEEApkhBAKd\ -IQQCqSEEAq0hBAKxIQQCwSEEAsUhBALJIQQCzSEEAt0hBALhIQQC5SEEApsiBAL1IQQCnyIEAqMiBA\ -INIgQCpyIEAhEiBAIVIgQCSSIEAqsiBAKvIgQCNSIEArMiBAI5IgQCPSIEAtkgBALdIAQCtyIEAuEg\ -BAK7IgQC6SAEAu0gBALxIAQC9SAEAr8iBAIBIQQCBSEEAgkhBAINIQQCwyIEAh0hBAIpIQQCLSEEAj\ -EhBAI1IQQCOSEEAkEhBAJFIQQCSSEEAk0hBAJRIQQCVSEEAsciBAJZIQQCXSEEAmEhBAJlIQQCaSEE\ -Am0hBAJ1IQQCeSEEAn0hBAKBIQQChSEEAokhBAKNIQQCkSEEApUhBAKhIQQCpSEEArUhBAK5IQQCvS\ -EEAsEhBALFIQQC0SEEAtUhBALZIQQC3SEEAssiBALpIQQC7SEEAvEhBAL1IQQCASIEAgUiBAIJIgQC\ -DSIEAs8iBAIZIgQCHSIEAtMiBAIpIgQCLSIEAjEiBAI1IgQC1yIEAuEgBAK7IgQC9SAEAr8iBAINIQ\ -QCwyIEAh0hBALbIgQCUSEEAt8iBALjIgQC5yIEAsEhBALFIQQC3SEEAg0iBALPIgQCNSIEAtciBALr\ -IgYC8SIGAvciBgL9IgQCASMEAgUjBAIJIwQCDSMEAhEjBAIVIwQCGSMEAh0jBAIhIwQCJSMEAikjBA\ -ItIwQCMSMEAjUjBAI5IwQCPSMEAkEjBAJFIwQCSSMEAk0jBAJRIwQCVSMEAuMiBAJZIwQCXSMEAmEj\ -BAJlIwQC/SIEAgEjBAIFIwQCCSMEAg0jBAIRIwQCFSMEAhkjBAIdIwQCISMEAiUjBAIpIwQCLSMEAj\ -EjBAI1IwQCOSMEAj0jBAJBIwQCRSMEAkkjBAJNIwQCUSMEAlUjBALjIgQCWSMEAl0jBAJhIwQCZSME\ -Ak0jBAJRIwQCVSMEAuMiBALfIgQC5yIEAnEhBAJFIQQCSSEEAk0hBAJNIwQCUSMEAlUjBAJxIQQCdS\ -EEAmkjBAcAAAAEAAAAAm0jBgJzIwYCeSMGAn8jBgKFIwYCiyMGApEjBgKXIwYCnSMGAqMjBgKpIwYC\ -ryMGArUjBgK7IwYCwSMGAscjBgLNIwYC0yMGAtkjBgLfIwYC5SMGAusjBgLxIwYC9yMGAv0jBgIDJA\ -YCCSQGAg8kBgIVJAYCGyQGAiEkBgInJAYCLSQGAjMkBgI5JAYCPyQGAkUkBgJLJAYCUSQGAlckBgJd\ -JAYCYyQGAmkkBgJvJAYCdSQGAnskBgKBJAYChyQGAo0kBgQAAAACkyQGApkkBgKfJAYCpSQGAqskBg\ -KxJAYCtyQGAr0kBgLDJAYCySQGAs8kBgLVJAYC2yQGAuEkBgLnJAYC7SQGAvMkBgL5JAYC/yQGAgUl\ -BgILJQYCESUGAhclBgIdJQYCIyUGAiklBgIvJQYCNSUGAjslBgJBJQYCRyUGAk0lBgI5JAYCRSQGAl\ -MlBgJZJQYCXyUGAmUlBgJrJQYCcSUGAmslBgJfJQYCdyUGAn0lBgKDJQYCiSUGAo8lBgJxJQYCDyQG\ -AtMjBgKVJQYCmyUGBAAAAAKhJQYCpyUGAq0lCAK1JQgCvSUIAsUlCALNJQgC1SUIAt0lCALlJQYG6y\ -UhBgwmDwIbJggHAAAABAAAAAEAAAAGIyYBAiQmAwQAAAAGJyYBBgACAQYoJgEGKSYBAiomAwItJgME\ -AAAAAAAAAAQAAAACMCYDAjMmAwY2JgEGNwkBBjgJAQY3JgEGOCYBAjkmAwI8JgMCPyYDAkImAwJFJg\ -MCSCYDAu4JAwLxCQMCSyYDAk4mAwJRJgMCVCYDBwAAAAZXJgEGWCYBBhYJAwY2JgEGIyYBAiQmAwQA\ -AAAGAAIBBicmAQYpJgEGKCYBAjAmAwY3CQEGOAkBBjcmAQY4JgECOSYDAjwmAwZZJgEGWiYBBlsmAQ\ -YyCQECXCYBBl0mAQZeJgEGNgkBBAAAAAZfJgEGYCYBBmEmAQZiJgEEAAAABmMmAwJmJgQGaiYDAAAA\ -AAZtJgMEAAAABnAmAwJzJgQGdyYDAnomBAZ+JgMCgSYEBoUmAwKIJgQGjCYDAo8mBAKTJgIClSYCAp\ -cmAgKZJgICmyYCAp0mAgKfJgICoSYCAqMmAgKlJgICpyYCAqkmAgKrJgICrSYCAq8mAgKxJgICsyYC\ -ArUmAgK3JgICuSYCArsmAgK9JgICvyYCAsEmAgLDJgICxSYCAscmAgLJJgICyyYCAs0mAgLPJgIC0S\ -YCAtMmAgLVJgICtSACAtcmAgLZJgQC3SYEAuEmBALlJgQEAAAAAQAAAAQAAAAGKCYBBukmAQZZJgEG\ -YCYBBmEmAQZaJgEG6iYBBjcJAQY4CQEGWyYBBjIJAQYjJgECXCYBAowOAQbrJgECKwkBAisAAQIhAA\ -ECIgABAiwJAQItCQECLgkBAi8JAQIwCQECMQkBBicmAQYAAgEGXSYBBjYJAQZeJgEGKSYBBmImAQIA\ -AAECAQABAgIAAQIDAAECBAABAgUAAQIGAAECBwABAggAAQIJAAECCgABAgsAAQIMAAECDQABAg4AAQ\ -IPAAECEAABAhEAAQISAAECEwABAhQAAQIVAAECFgABAhcAAQIYAAECGQABBlcmAQZfJgEGWCYBBuwm\ -AQY2JgEG1AgBAgAAAQIBAAECAgABAgMAAQIEAAECBQABAgYAAQIHAAECCAABAgkAAQIKAAECCwABAg\ -wAAQINAAECDgABAg8AAQIQAAECEQABAhIAAQITAAECFAABAhUAAQIWAAECFwABAhgAAQIZAAEGNyYB\ -Bu0mAQY4JgEG7iYBAu8mAwLyJgMCjA4BAksmAwJOJgMCJCYDAvUmAwLcEgMC+CYDAvsmAwL+JgMCAS\ -cDAgQnAwIHJwMCCicDAg0nAwIQJwMCEycDAlISAwJVEgMCWBIDAlsSAwJeEgMCYRIDAmQSAwJnEgMC\ -ahIDAm0SAwJwEgMCcxIDAnYSAwJ5EgMCfBIDAn8SAwKCEgMChRIDAogSAwKLEgMCjhIDApESAwKUEg\ -MClxIDApoSAwKdEgMCoBIDAqMSAwKmEgMCqRIDAqwSAwKvEgMCshIDArUSAwK4EgMCuxIDAr4SAwLB\ -EgMCxBIDAscSAwLKEgMCzRIDAtASAwLTEgMCFicDAhknAwIcJwMEAAAAAqoOAwKtDgMCsA4DArMOAw\ -K2DgMCuQ4DArwOAwK/DgMCwg4DAsUOAwLIDgMCyw4DAs4OAwLRDgMC1A4DAtcOAwLaDgMC3Q4DAuAO\ -AwLjDgMC5g4DAukOAwLsDgMC7w4DAvIOAwL1DgMC+A4DAvsOAwL+DgMCAQ8DBAAAAAIEDwMCBw8DAg\ -oPAwINDwMCEA8DAhMPAwQAAAACFg8DAhkPAwIcDwMCHw8DAiIPAwIlDwMEAAAAAigPAwIrDwMCLg8D\ -AjEPAwI0DwMCNw8DBAAAAAI6DwMCPQ8DAkAPAwQAAAACHycCAiEnAgIjJwIGHgADAiUnAgInJwICKS\ -cDBAAAAAIsJwMCLycDAjInAwI1JwMCOCcDAjsnAwI+JwMEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAE\ -AAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAHAAAABAAAAAcAAAAEAAAABwAAAAQAAA\ -AHAAAABAAAAAcAAAAEAAAABwAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAHAAAABAAAAAAA\ -AAAHAAAABAAAAAAAAAAHAAAAAAAAAAcAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAcAAAAAAAAABAAAAA\ -AAAAAHAAAABAAAAAJBJwQCRScEAkknBAJNJwQCUScEAlUnBAJZJwQCXScEAmEnBAJlJwQCaScEAm0n\ -BAJxJwQCdScEAnknBAJ9JwQCgScEAoUnBAKJJwQCjScEApEnBAKVJwQCmScEAp0nBAKhJwQCpScEAq\ -knBAKtJwQCsScEArUnBAK5JwQCvScEAsEnBALFJwQCyScEAs0nBALRJwQC1ScEAtknBALdJwQAAAAA\ -BAAAAAAAAAAEAAAAAuEnBALlJwQC6ScEAu0nBALxJwQC9ScEAvknBAL9JwQCASgEAgUoBAIJKAQCDS\ -gEAhEoBAIVKAQCGSgEAh0oBAIhKAQCJSgEAikoBAItKAQCMSgEAjUoBAI5KAQCPSgEAkEoBAJFKAQC\ -SSgEAk0oBAJRKAQCVSgEAlkoBAJdKAQCYSgEAmUoBAJpKAQCbSgEBAAAAAAAAAAEAAAAAAAAAAQAAA\ -AAAAAABAAAAAcAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAA\ -AAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAABwAAAAAAAAAHAAAAAAAAAAQAAAAHAAAABAAAAA\ -AAAAAEAAAAAAAAAAQAAAAHAAAAAAAAAAcAAAAEAAAABwAAAAAAAAAEAAAABwAAAAQAAAAAAAAABAAA\ -AAcAAAAAAAAABwAAAAQAAAAHAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABA\ -AAAAAAAAAEAAAAAAAAAAcAAAAEAAAABwAAAAQAAAAAAAAABwAAAAAAAAAHAAAABAAAAAAAAAAHAAAA\ -AAAAAAQAAAAHAAAABAAAAAAAAAAEAAAABwAAAAAAAAAEAAAABwAAAAAAAAAEAAAABwAAAAAAAAAEAA\ -AABwAAAAQAAAAHAAAABAAAAAAAAAAEAAAAAnEoBAJ1KAQCeSgEAn0oBAKBKAQChSgEAokoBAKNKAQC\ -kSgEApUoBAKZKAQCnSgEAqEoBAKlKAQCqSgEAq0oBAKxKAQCtSgEArkoBAK9KAQCwSgEAsUoBALJKA\ -QCzSgEAtEoBALVKAQC2SgEAt0oBALhKAQC5SgEAukoBALtKAQC8SgEAvUoBAL5KAQC/SgEAgEpBAIF\ -KQQCCSkEAg0pBAIRKQQCFSkEAhkpBAIdKQQCISkEAiUpBAIpKQQCLSkEAjEpBAI1KQQCOSkEBAAAAA\ -AAAAAEAAAABwAAAAAAAAAEAAAAAAAAAAQAAAAHAAAABAAAAAAAAAAEAAAAAAAAAAcAAAAEAAAAAAAA\ -AAQAAAAAAAAABwAAAAAAAAAEAAAAAAAAAAcAAAAEAAAAAAAAAAcAAAAEAAAAAAAAAAQAAAAAAAAABw\ -AAAAQAAAAHAAAAAAAAAAQAAAAAAAAABwAAAAQAAAAHAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAA\ -BAAAAAAAAAAHAAAAAAAAAAQAAAAAAAAABwAAAAAAAAAEAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAA\ -AAAAAAAAcAAAAEAAAABwAAAAQAAAAAAAAABAAAAAAAAAAHAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAE\ -AAAAAAAAAAQAAAAAAAAABAAAAAAAAAAHAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAA\ -AEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQA\ -AAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABwAAAA\ -AAAAAHAAAABAAAAAcAAAAAAAAABAAAAAAAAAAHAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAA\ -AAcAAAAAAAAABAAAAAAAAAAHAAAAAAAAAAQAAAAAAAAABAAAAAcAAAAEAAAAAAAAAAQAAAAAAAAABA\ -AAAAAAAAAEAAAAAAAAAAQAAAAAAAAABwAAAAQAAAAAAAAABwAAAAQAAAACPSkEAkEpBAJFKQQCSSkE\ -Ak0pBAJRKQQCVSkEAlkpBAJdKQQCYSkEAmUpBAJpKQQCbSkEAnEpBAJ1KQQCeSkEAn0pBAKBKQQChS\ -kEAokpBAKNKQQCkSkEApUpBAKZKQQCnSkEAqEpBAKlKQQCqSkEAq0pBAKxKQQCtSkEArkpBAAAAAAH\ -AAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAA\ -AHAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAHAAAAAAAAAAQAAAAAAAAABwAAAAAA\ -AAAEAAAAAAAAAAcAAAAAAAAABwAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABwAAAA\ -QAAAAAAAAABwAAAAQAAAAHAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAA\ -AAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAA\ -AAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABwAAAAQAAAAAAAAABAAAAAcAAAAEAAAA\ -BwAAAAAAAAAEAAAABwAAAAQAAAAHAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAA\ -AAAAAAAAQAAAAAAAAABAAAAAcAAAAEAAAAAAAAAAQAAAAAAAAABwAAAAQAAAAAAAAABwAAAAAAAAAH\ -AAAABAAAAAAAAAAEAAAABwAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAr0pBALBKQQCxSkEAskpBALNKQ\ -QC0SkEAtUpBALZKQQC3SkEAuEpBALlKQQC6SkEAu0pBALxKQQC9SkEAvkpBAL9KQQCASoEAgUqBAIJ\ -KgQCDSoEAhEqBAIVKgQCGSoEAh0qBAIhKgQCJSoEAikqBAItKgQCMSoEAjUqBAI5KgQAAAAABwAAAA\ -QAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABwAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAA\ -AAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAA\ -AAAAQAAAAAAAAABAAAAAAAAAAEAAAABwAAAAAAAAAHAAAAAQAAAAQAAAAHAAAABAAAAAcAAAAEAAAA\ -BwAAAAI9KggCRSoIAk0qDAJZKgwCZSoMAnEqDAJ9KgwHAAAABAAAAAcAAAACiSoIApEqCAKZKgwCpS\ -oMArEqDAK9KgwHAAAABAAAAAcAAAAEAAAABwAAAAQAAAAHAAAABAAAAAcAAAAEAAAAAgAAAQIBAAEC\ -AgABAgMAAQIEAAECBQABAgYAAQIHAAECCAABAgkAAQIKAAECCwABAgwAAQINAAECDgABAg8AAQIQAA\ -ECEQABAhIAAQITAAECFAABAhUAAQIWAAECFwABAhgAAQIZAAECAAABAgEAAQICAAECAwABAgQAAQIF\ -AAECBgABAgcAAQIIAAECCQABAgoAAQILAAECDAABAg0AAQIOAAECDwABAhAAAQIRAAECEgABAhMAAQ\ -IUAAECFQABAhYAAQIXAAECGAABAhkAAQIAAAECAQABAgIAAQIDAAECBAABAgUAAQIGAAECBwABAggA\ -AQIJAAECCgABAgsAAQIMAAECDQABAg4AAQIPAAECEAABAhEAAQISAAECEwABAhQAAQIVAAECFgABAh\ -cAAQIYAAECGQABAgAAAQIBAAECAgABAgMAAQIEAAECBQABAgYAAQQAAAACCAABAgkAAQIKAAECCwAB\ -AgwAAQINAAECDgABAg8AAQIQAAECEQABAhIAAQITAAECFAABAhUAAQIWAAECFwABAhgAAQIZAAECAA\ -ABAgEAAQICAAECAwABAgQAAQIFAAECBgABAgcAAQIIAAECCQABAgoAAQILAAECDAABAg0AAQIOAAEC\ -DwABAhAAAQIRAAECEgABAhMAAQIUAAECFQABAhYAAQIXAAECGAABAhkAAQIAAAECAQABAgIAAQIDAA\ -ECBAABAgUAAQIGAAECBwABAggAAQIJAAECCgABAgsAAQIMAAECDQABAg4AAQIPAAECEAABAhEAAQIS\ -AAECEwABAhQAAQIVAAECFgABAhcAAQIYAAECGQABAgAAAQQAAAACAgABAgMAAQQAAAACBgABBAAAAA\ -IJAAECCgABBAAAAAINAAECDgABAg8AAQIQAAEEAAAAAhIAAQITAAECFAABAhUAAQIWAAECFwABAhgA\ -AQIZAAECAAABAgEAAQICAAECAwABBAAAAAIFAAEEAAAAAgcAAQIIAAECCQABAgoAAQILAAECDAABAg\ -0AAQQAAAACDwABAhAAAQIRAAECEgABAhMAAQIUAAECFQABAhYAAQIXAAECGAABAhkAAQIAAAECAQAB\ -AgIAAQIDAAECBAABAgUAAQIGAAECBwABAggAAQIJAAECCgABAgsAAQIMAAECDQABAg4AAQIPAAECEA\ -ABAhEAAQISAAECEwABAhQAAQIVAAECFgABAhcAAQIYAAECGQABAgAAAQIBAAECAgABAgMAAQIEAAEC\ -BQABAgYAAQIHAAECCAABAgkAAQIKAAECCwABAgwAAQINAAECDgABAg8AAQIQAAECEQABAhIAAQITAA\ -ECFAABAhUAAQIWAAECFwABAhgAAQIZAAECAAABAgEAAQQAAAACAwABAgQAAQIFAAECBgABBAAAAAIJ\ -AAECCgABAgsAAQIMAAECDQABAg4AAQIPAAECEAABBAAAAAISAAECEwABAhQAAQIVAAECFgABAhcAAQ\ -IYAAEEAAAAAgAAAQIBAAECAgABAgMAAQIEAAECBQABAgYAAQIHAAECCAABAgkAAQIKAAECCwABAgwA\ -AQINAAECDgABAg8AAQIQAAECEQABAhIAAQITAAECFAABAhUAAQIWAAECFwABAhgAAQIZAAECAAABAg\ -EAAQQAAAACAwABAgQAAQIFAAECBgABBAAAAAIIAAECCQABAgoAAQILAAECDAABBAAAAAIOAAEEAAAA\ -AhIAAQITAAECFAABAhUAAQIWAAECFwABAhgAAQQAAAACAAABAgEAAQICAAECAwABAgQAAQIFAAECBg\ -ABAgcAAQIIAAECCQABAgoAAQILAAECDAABAg0AAQIOAAECDwABAhAAAQIRAAECEgABAhMAAQIUAAEC\ -FQABAhYAAQIXAAECGAABAhkAAQIAAAECAQABAgIAAQIDAAECBAABAgUAAQIGAAECBwABAggAAQIJAA\ -ECCgABAgsAAQIMAAECDQABAg4AAQIPAAECEAABAhEAAQISAAECEwABAhQAAQIVAAECFgABAhcAAQIY\ -AAECGQABAgAAAQIBAAECAgABAgMAAQIEAAECBQABAgYAAQIHAAECCAABAgkAAQIKAAECCwABAgwAAQ\ -INAAECDgABAg8AAQIQAAECEQABAhIAAQITAAECFAABAhUAAQIWAAECFwABAhgAAQIZAAECAAABAgEA\ -AQICAAECAwABAgQAAQIFAAECBgABAgcAAQIIAAECCQABAgoAAQILAAECDAABAg0AAQIOAAECDwABAh\ -AAAQIRAAECEgABAhMAAQIUAAECFQABAhYAAQIXAAECGAABAhkAAQIAAAECAQABAgIAAQIDAAECBAAB\ -AgUAAQIGAAECBwABAggAAQIJAAECCgABAgsAAQIMAAECDQABAg4AAQIPAAECEAABAhEAAQISAAECEw\ -ABAhQAAQIVAAECFgABAhcAAQIYAAECGQABAgAAAQIBAAECAgABAgMAAQIEAAECBQABAgYAAQIHAAEC\ -CAABAgkAAQIKAAECCwABAgwAAQINAAECDgABAg8AAQIQAAECEQABAhIAAQITAAECFAABAhUAAQIWAA\ -ECFwABAhgAAQIZAAECAAABAgEAAQICAAECAwABAgQAAQIFAAECBgABAgcAAQIIAAECCQABAgoAAQIL\ -AAECDAABAg0AAQIOAAECDwABAhAAAQIRAAECEgABAhMAAQIUAAECFQABAhYAAQIXAAECGAABAhkAAQ\ -IAAAECAQABAgIAAQIDAAECBAABAgUAAQIGAAECBwABAggAAQIJAAECCgABAgsAAQIMAAECDQABAg4A\ -AQIPAAECEAABAhEAAQISAAECEwABAhQAAQIVAAECFgABAhcAAQIYAAECGQABAgAAAQIBAAECAgABAg\ -MAAQIEAAECBQABAgYAAQIHAAECCAABAgkAAQIKAAECCwABAgwAAQINAAECDgABAg8AAQIQAAECEQAB\ -AhIAAQITAAECFAABAhUAAQIWAAECFwABAhgAAQIZAAECAAABAgEAAQICAAECAwABAgQAAQIFAAECBg\ -ABAgcAAQIIAAECCQABAgoAAQILAAECDAABAg0AAQIOAAECDwABAhAAAQIRAAECEgABAhMAAQIUAAEC\ -FQABAhYAAQIXAAECGAABAhkAAQIAAAECAQABAgIAAQIDAAECBAABAgUAAQIGAAECBwABAggAAQIJAA\ -ECCgABAgsAAQIMAAECDQABAg4AAQIPAAECEAABAhEAAQISAAECEwABAhQAAQIVAAECFgABAhcAAQIY\ -AAECGQABAgAAAQIBAAECAgABAgMAAQIEAAECBQABAgYAAQIHAAECCAABAgkAAQIKAAECCwABAgwAAQ\ -INAAECDgABAg8AAQIQAAECEQABAhIAAQITAAECFAABAhUAAQIWAAECFwABAhgAAQIZAAECAAABAgEA\ -AQICAAECAwABAgQAAQIFAAECBgABAgcAAQIIAAECCQABAgoAAQILAAECDAABAg0AAQIOAAECDwABAh\ -AAAQIRAAECEgABAhMAAQIUAAECFQABAhYAAQIXAAECGAABAhkAAQLJKgICyyoCBAAAAAIYAgICGgIC\ -AhwCAgIeAgICIAICAiICAgIkAgICJgICAvMBAgIoAgICKgICAiYAAgIsAgICLgICAjACAgIyAgICNA\ -ICAiYCAgI2AgICOAICAjoCAgI8AgICPgICAkACAgJCAgICzSoDAhgCAgIaAgICHAICAh4CAgIgAgIC\ -IgICAiQCAgImAgIC8wECAigCAgIqAgICJgACAiwCAgIuAgICMAICAjICAgI0AgICNgICAjgCAgI6Ag\ -ICPAICAj4CAgJAAgICQgICAtAqAwIgAgICJgICAigCAgI8AgICNAICAjICAgIYAgICGgICAhwCAgIe\ -AgICIAICAiICAgIkAgICJgICAvMBAgIoAgICKgICAiYAAgIsAgICLgICAjACAgIyAgICNAICAiYCAg\ -I2AgICOAICAjoCAgI8AgICPgICAkACAgJCAgICzSoDAhgCAgIaAgICHAICAh4CAgIgAgICIgICAiQC\ -AgImAgIC8wECAigCAgIqAgICJgACAiwCAgIuAgICMAICAjICAgI0AgICNgICAjgCAgI6AgICPAICAj\ -4CAgJAAgICQgICAtAqAwIgAgICJgICAigCAgI8AgICNAICAjICAgIYAgICGgICAhwCAgIeAgICIAIC\ -AiICAgIkAgICJgICAvMBAgIoAgICKgICAiYAAgIsAgICLgICAjACAgIyAgICNAICAiYCAgI2AgICOA\ -ICAjoCAgI8AgICPgICAkACAgJCAgICzSoDAhgCAgIaAgICHAICAh4CAgIgAgICIgICAiQCAgImAgIC\ -8wECAigCAgIqAgICJgACAiwCAgIuAgICMAICAjICAgI0AgICNgICAjgCAgI6AgICPAICAj4CAgJAAg\ -ICQgICAtAqAwIgAgICJgICAigCAgI8AgICNAICAjICAgIYAgICGgICAhwCAgIeAgICIAICAiICAgIk\ -AgICJgICAvMBAgIoAgICKgICAiYAAgIsAgICLgICAjACAgIyAgICNAICAiYCAgI2AgICOAICAjoCAg\ -I8AgICPgICAkACAgJCAgICzSoDAhgCAgIaAgICHAICAh4CAgIgAgICIgICAiQCAgImAgIC8wECAigC\ -AgIqAgICJgACAiwCAgIuAgICMAICAjICAgI0AgICNgICAjgCAgI6AgICPAICAj4CAgJAAgICQgICAt\ -AqAwIgAgICJgICAigCAgI8AgICNAICAjICAgIYAgICGgICAhwCAgIeAgICIAICAiICAgIkAgICJgIC\ -AvMBAgIoAgICKgICAiYAAgIsAgICLgICAjACAgIyAgICNAICAiYCAgI2AgICOAICAjoCAgI8AgICPg\ -ICAkACAgJCAgICzSoDAhgCAgIaAgICHAICAh4CAgIgAgICIgICAiQCAgImAgIC8wECAigCAgIqAgIC\ -JgACAiwCAgIuAgICMAICAjICAgI0AgICNgICAjgCAgI6AgICPAICAj4CAgJAAgICQgICAtAqAwIgAg\ -ICJgICAigCAgI8AgICNAICAjICAgJOAgIEAAAAAisJAQIrAAECIQABAiIAAQIsCQECLQkBAi4JAQIv\ -CQECMAkBAjEJAQIrCQECKwABAiEAAQIiAAECLAkBAi0JAQIuCQECLwkBAjAJAQIxCQECKwkBAisAAQ\ -IhAAECIgABAiwJAQItCQECLgkBAi8JAQIwCQECMQkBAisJAQIrAAECIQABAiIAAQIsCQECLQkBAi4J\ -AQIvCQECMAkBAjEJAQIrCQECKwABAiEAAQIiAAECLAkBAi0JAQIuCQECLwkBAjAJAQIxCQEHAAAAAA\ -AAAAcAAAAAAAAABwAAAAAAAAAHAAAAAAAAAAcAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAA\ -AAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAA\ -AABwAAAAQAAAAAAAAABAAAAAcAAAAEAAAAAAAAAAQAAAAHAAAAAAAAAAQAAAAC0yoEAtcqBALbKgQC\ -3yoEAuMqBALnKgQC6yoEAu8qBALzKgQC9yoEAvsqBAL/KgQCAysEAgcrBAILKwQCDysEAhMrBAIXKw\ -QCGysEAh8rBAIjKwQCJysEAisrBAIvKwQCMysEAjcrBAI7KwQCPysEAkMrBAJHKwQCSysEAk8rBAJT\ -KwQCVysEAAAAAAQAAAAAAAAABAAAAAcAAAAEAAAABwAAAAQAAAAHAAAABAAAAAKfJgICoSYCAqkmAg\ -KvJgIEAAAAAtUmAgK1JgICqyYCAr8mAgLXJgICyyYCAs0mAgLPJgIC0SYCArcmAgLDJgICxyYCArsm\ -AgLJJgICsyYCArkmAgKlJgICpyYCAq0mAgKxJgICvSYCAsEmAgLFJgICWysCApcgAgJdKwICXysCBA\ -AAAAKhJgICqSYCBAAAAALTJgIEAAAAAqsmAgQAAAAC1yYCAssmAgLNJgICzyYCAtEmAgK3JgICwyYC\ -AscmAgK7JgICySYCBAAAAAK5JgICpSYCAqcmAgKtJgIEAAAAAr0mAgQAAAACxSYCBAAAAAKpJgIEAA\ -AAAqsmAgQAAAAC1yYCBAAAAALNJgIEAAAAAtEmAgK3JgICwyYCBAAAAAK7JgICySYCBAAAAAK5JgIE\ -AAAAAq0mAgQAAAACvSYCBAAAAALFJgIEAAAAApcgAgQAAAACXysCBAAAAAKhJgICqSYCBAAAAALTJg\ -IEAAAAAqsmAgK/JgIC1yYCAssmAgQAAAACzyYCAtEmAgK3JgICwyYCAscmAgK7JgICySYCBAAAAAK5\ -JgICpSYCAqcmAgKtJgIEAAAAAr0mAgLBJgICxSYCAlsrAgQAAAACXSsCBAAAAAKfJgICoSYCAqkmAg\ -KvJgIC0yYCAtUmAgK1JgICqyYCAr8mAgLXJgIEAAAAAs0mAgLPJgIC0SYCArcmAgLDJgICxyYCArsm\ -AgLJJgICsyYCArkmAgKlJgICpyYCAq0mAgKxJgICvSYCAsEmAgLFJgIEAAAAAqEmAgKpJgICryYCBA\ -AAAALVJgICtSYCAqsmAgK/JgIC1yYCBAAAAALNJgICzyYCAtEmAgK3JgICwyYCAscmAgK7JgICySYC\ -ArMmAgK5JgICpSYCAqcmAgKtJgICsSYCAr0mAgLBJgICxSYCBAAAAAcAAAAEAAAABwAAAAQAAAAHAA\ -AABAAAAAcAAAAEAAAABwAAAAQAAAAHAAAABAAAAAcAAAAEAAAABmErAgZjKwIGZSsCBmcrAgZpKwIG\ -aysCBm0rAgZvKwIGcSsCBnMrAgcAAAAGUQoDBlQKAwZXCgMGWgoDBl0KAwZgCgMGYwoDBmYKAwZpCg\ -MGbAoDBm8KAwZyCgMGdQoDBngKAwZ7CgMGfgoDBoEKAwaECgMGhwoDBooKAwaNCgMGkAoDBpMKAwaW\ -CgMGmQoDBpwKAwJ1KwcCAgABAhEAAQLNFwICfCsCBwAAAAIAAAECAQABAgIAAQIDAAECBAABAgUAAQ\ -IGAAECBwABAggAAQIJAAECCgABAgsAAQIMAAECDQABAg4AAQIPAAECEAABAhEAAQISAAECEwABAhQA\ -AQIVAAECFgABAhcAAQIYAAECGQABAn4rAgK0FwICgCsCAncAAgKCKwMChSsCBwAAAAKHKwICiSsCAo\ -srAgcAAAACjSsCBwAAAAQAAAAHAAAAAo8rBgKVKwYCcBIDBAAAAALHDAMCmysDAp4rAwKhKwMCHAwD\ -AqQrAwKnKwMC2Q8DAqorAwKtKwMCsCsDAvYcAwKzKwMCtisDArkrAwK8KwMCvysDAsIrAwIzDQMCxS\ -sDAsgrAwLLKwMCzisDAtErAwLUKwMCCgwDAsEPAwLXKwMC2REDAsoPAwLcEQMC2isDAtsNAwLdKwMC\ -4CsDAuMrAwLmKwMC6SsDAqYRAwLlDAMC7CsDAu8rAwLyKwMC9SsDBAAAAAL4KwkCASwJAgosCQITLA\ -kCHCwJAiUsCQIuLAkCNywJAkAsCQQAAAACSSwDAkwsAwQAAAAHAAAABAAAAAcAAAAEAAAABwAAAAQA\ -AAAHAAAABAAAAAcAAAAEAAAABwAAAAQAAAAHAAAABAAAAAcAAAAEAAAABwAAAAQAAAAHAAAABAAAAA\ -cAAAAEAAAABwAAAAQAAAAHAAAABAAAAAcAAAAEAAAABwAAAAQAAAAHAAAABAAAAAcAAAAEAAAABwAA\ -AAQAAAAHAAAABAAAAAcAAAAEAAAABwAAAAQAAAAHAAAABAAAAAcAAAAEAAAABwAAAAQAAAAHAAAABA\ -AAAAcAAAAEAAAAAisJAQIrAAECIQABAiIAAQIsCQECLQkBAi4JAQIvCQECMAkBAjEJAQQAAAAAAAAA\ -BAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAk8sAwJSLAMCVSwDAlgsBAJcLAMCDR\ -4DAl8sAwJiLAMCZSwDAmgsAwIQHgMCaywDAm4sAwJxLAQCEx4DAnUsAwJ4LAMCeywDAn4sBAKCLAMC\ -hSwDArkrAwKILAQCjCwDAo8sAwKSLAMClSwDArkeAwKYLAQCOgwDApwsAwKfLAMCoiwDAqUsAwLvKw\ -MCqCwDAqssAwLIHgMCFh4DAhkeAwLLHgMCriwDArEsAwL0GwMCtCwDAhweAwK3LAMCuiwDAr0sAwLA\ -LAMCwywEAscsAwLKLAMCzSwDAtAsBALULAMC1ywDAtosAwLdLAMC4CwDAuMsAwLmLAMC6SwDAuwsAw\ -LvLAMC8iwDAvUsAwL4LAMC0R4DAvssAwL+LAMCAS0DAgQtAwIiHgMCBy0DAgotAwINLQMCqh0DAhAt\ -AwITLQMCFi0DAhktAwIcLQMCHy0DAiItAwIlLQMCKC0EAiwtAwIvLQMCMi0DAqQrAwI1LQMCOC0DAj\ -stBAI/LQQCQy0DAkYtAwJJLQMCTC0DAk8tAwJSLQMEAAAAAlUtAwJYLQMCWy0EAl8tAwJiLQMC6BsD\ -AmUtAwJoLQQCbC0DAm8tAwQAAAACiAwDAnItAwJ1LQMCjgwDAngtAwJ7LQMCfi0EAoItAwKFLQQCiS\ -0DAowtAwKPLQMCki0DApUtAwKYLQMCmy0DAp4tAwKhLQMCpC0DAqctAwKqLQQCri0DArEtAwK0LQMC\ -ty0DAkwbAwK6LQQCrAwDAr4tBALCLQMCxS0DAsgtAwLLLQQCzy0EAtMtAwLWLQMC2S0DAtwtAwLfLQ\ -MC4i0DAuUtAwLoLQMC6y0DAu4tAwIxHgMC8S0EAvUtAwL4LQMC+y0DAvUeAwL7LQMC/i0DAjceAwIB\ -LgMCBC4DAgcuAwIKLgMCOh4DAvsaAwINLgMCEC4DAhMuAwIWLgMCGS4DAhwuAwIfLgQCIy4DAiYuAw\ -IpLgMCLC4DAi8uAwIyLgQCNi4DAjkuAwI8LgMCPy4DAkIuAwJFLgMCSC4DAksuAwJOLgMCPR4DAlEu\ -AwJULgQCWC4DAlsuAwJeLgMCYS4DAkMeAwJkLgMCZy4DAmouAwJtLgMCcC4DAnMuAwJ2LgMCeS4DAk\ -8bAwINHwMCfC4DAn8uAwKCLgMChS4EAokuAwKMLgMCjy4DApIuAwJGHgMClS4EApkuAwKcLgMCny4D\ -Ao4fAwKiLgMCpS4DAqguAwKrLgMCri4EArIuAwK1LgMCuC4DArsuBAK/LgMCwi4DAsUuAwLILgMCGx\ -wDAssuAwLOLgQC0i4EAtYuBALaLgMC3S4EAuEuAwLkLgMC5y4DAuouAwLtLgMCSR4DAhQdAwLwLgMC\ -8y4DAvYuAwL5LgQC/S4DAgAvAwIDLwMCBi8DAhYfAwIJLwMCDC8EAhAvAwITLwMCFi8EAhovBAIeLw\ -MCIS8DAhkfAwIkLwMCJy8DAiovAwItLwMCMC8DAjMvAwI2LwQCOi8DAj0vBAJBLwMEAAAAAkQvAwIf\ -HwMCRy8DAkovBAJOLwMCUS8DAlQvBAJYLwQCXC8DAl8vAwJiLwMCZS8DAmgvAwJrLwMCbi8DAiUfAw\ -JxLwMCdC8DAncvAwJ6LwMCfS8EAoEvAwKELwQC8RsDAogvBAKMLwMCjy8EApMvBAKXLwQCmy8DAp4v\ -AwI3HwMCoS8EAqUvBAKpLwQCrS8EArEvAwK0LwMCOh8DApQfAwK3LwMCui8DAr0vAwLALwQCxC8DAo\ -IbAwJAHwMCxy8DAsovBAJnHgMCzi8EAtIvBALmHQMC1i8DAtkvAwJwHgMC3C8DAt8vAwLiLwQC5i8E\ -BAAAAALqLwMC7S8EAvEvAwL0LwMC9y8DAvovBAL+LwMCATADAgQwAwIHMAMCCjADAg0wBAIRMAMCFD\ -ADAhcwAwIaMAMCHTADAiAwAwIjMAQCJzAEAiswAwIuMAQCMjADAjUwBAI5MAMCPDADAoIeAwI/MAQC\ -QzAEAkcwAwJKMAQCTjADAlEwBAJVMAMCWDADAlswAwJeMAMCYTADAmQwAwJnMAQCazAEAm8wBAJzMA\ -QCwi0DAncwAwJ6MAMCfTADAoAwAwKDMAMChjADAokwAwKMMAMCjzADApIwAwKVMAMCmDAEAiQcAwKc\ -MAMCnzADAqIwAwKlMAMCqDADAqswAwKLHgMCrjADArEwAwK0MAMCtzADArowBAK+MAQCwjAEAsYwAw\ -LJMAMCzDADAs8wAwLSMAQC1jADAtkwBALdMAMC4DADAuMwBALnMAQC6zADAu4wAwJzGwMC8TADAvQw\ -AwL3MAMC+jADAv0wAwIAMQMCVR8DAgMxAwIGMQMCCTEDBAAAAAIMMQMCDzEDAhIxAwIVMQMCug0DAh\ -gxBAIcMQMCHzEDAiIxAwIlMQMCKDEDAisxBAIvMQQCMzEDAjYxAwI5MQMCZB8DAmcfAwLPDQMCPDEE\ -AkAxAwJDMQMCRjEDAkkxAwJMMQQCUDEEAlQxAwJXMQMCWjEDAl0xBAJhMQMCah8DAmQxBAJoMQQCbD\ -EDAm8xAwJyMQMCdTEEAnkxAwJ8MQMCfzEDAoIxAwKFMQMCiDEDAosxAwKOMQQCkjEDApUxAwKYMQMC\ -mzEEAp8xAwKiMQMCpTEDAqgxAwKrMQQCrzEEArMxAwK2MQMCuTEDArwxBALAMQMCwzEEAnwfAwLHMQ\ -MCyjEEAs4xAwLRMQMC1DEDAtcxAwLaMQMC3TEDAuAxAwLjMQQCfx8DAucxAwLqMQMC7TEDAvAxAwLz\ -MQMC9jEEAvoxAwL9MQQCATIEAgUyBAJfDgMCCTIDAmsOAwIMMgMCDzIDAhIyAwIVMgMCeg4DAhgyBA\ -QAAAAAAAAABAAAAAEAAAAEAAAAYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXogIMyIIMyEMjMgzIHO\ -vCDMpzEx4oGENDHigYQyM+KBhDTDoMOhw6LDo8Okw6XDpsOnw6jDqcOqw6vDrMOtw67Dr8Oww7HDss\ -Ozw7TDtcO2w7jDucO6w7vDvMO9w75zc8SBxIPEhcSHxInEi8SNxI/EkcSTxJXEl8SZxJvEncSfxKHE\ -o8SlxKfEqcSrxK3Er2nMh2lqxLXEt8S6xLzEvmzCt8WCxYTFhsWIyrxuxYvFjcWPxZHFk8WVxZfFmc\ -WbxZ3Fn8WhxaPFpcWnxanFq8Wtxa/FscWzxbXFt8O/xbrFvMW+yZPGg8aFyZTGiMmWyZfGjMedyZnJ\ -m8aSyaDJo8mpyajGmcmvybLJtcahxqPGpcqAxqjKg8atyojGsMqKyovGtMa2ypLGuca9ZMW+bGpuas\ -eOx5DHkseUx5bHmMeax5zHn8ehx6PHpcenx6nHq8etx69kese1xpXGv8e5x7vHvce/yIHIg8iFyIfI\ -iciLyI3Ij8iRyJPIlciXyJnIm8idyJ/GnsijyKXIp8ipyKvIrcivyLHIs+Kxpci8xprisabJgsaAyo\ -nKjMmHyYnJi8mNyY/Jpsm5ybvKgSDMhiDMhyDMiiDMqCDMgyDMi8qVzIDMgcyTzIjMgc65zbHNs8q5\ -zbcgzrk7z7MgzIjMgc6swrfOrc6uzq/PjM+Nz47Osc6yzrPOtM61zrbOt864zrrOu869zr7Ov8+Az4\ -HPg8+Ez4XPhs+Hz4jPic+Kz4vPl8+Zz5vPnc+fz6HPo8+lz6fPqc+rz63Pr8+4z7vNu828zb3RkNGR\ -0ZLRk9GU0ZXRltGX0ZjRmdGa0ZvRnNGd0Z7Rn9Cw0LHQstCz0LTQtdC20LfQuNC50LrQu9C80L3Qvt\ -C/0YDRgdGC0YPRhNGF0YbRh9GI0YnRitGL0YzRjdGO0Y/RodGj0aXRp9Gp0avRrdGv0bHRs9G10bfR\ -udG70b3Rv9KB0ovSjdKP0pHSk9KV0pfSmdKb0p3Sn9Kh0qPSpdKn0qnSq9Kt0q/SsdKz0rXSt9K50r\ -vSvdK/04LThNOG04jTitOM047TkdOT05XTl9OZ05vTndOf06HTo9Ol06fTqdOr063Tr9Ox07PTtdO3\ -07nTu9O907/UgdSD1IXUh9SJ1IvUjdSP1JHUk9SV1JfUmdSb1J3Un9Sh1KPUpdSn1KnUq9St1K/Vod\ -Wi1aPVpNWl1abVp9Wo1anVqtWr1azVrdWu1a/VsNWx1bLVs9W01bXVttW31bjVudW61bvVvNW91b7V\ -v9aA1oHWgtaD1oTWhdaG1aXWgtin2bTZiNm024fZtNmK2bTgpJXgpLzgpJbgpLzgpJfgpLzgpJzgpL\ -zgpKHgpLzgpKLgpLzgpKvgpLzgpK/gpLzgpqHgprzgpqLgprzgpq/gprzgqLLgqLzgqLjgqLzgqJbg\ -qLzgqJfgqLzgqJzgqLzgqKvgqLzgrKHgrLzgrKLgrLzguY3guLLgu43gurLguqvgupnguqvguqHgvI\ -vgvYLgvrfgvYzgvrfgvZHgvrfgvZbgvrfgvZvgvrfgvYDgvrXgvbHgvbLgvbHgvbTgvrLgvoDgvrLg\ -vbHgvoDgvrPgvoDgvrPgvbHgvoDgvbHgvoDgvpLgvrfgvpzgvrfgvqHgvrfgvqbgvrfgvqvgvrfgvp\ -DgvrXitKfitK3hg5zhj7Dhj7Hhj7Lhj7Phj7Thj7XqmYvhg5Dhg5Hhg5Lhg5Phg5Thg5Xhg5bhg5fh\ -g5jhg5nhg5rhg5vhg53hg57hg5/hg6Dhg6Hhg6Lhg6Phg6Thg6Xhg6bhg6fhg6jhg6nhg6rhg6vhg6\ -zhg63hg67hg6/hg7Dhg7Hhg7Lhg7Phg7Thg7Xhg7bhg7fhg7jhg7nhg7rhg73hg77hg7/JkMmR4bSC\ -yZzhtJbhtJfhtJ3htKXJksmVyZ/JocmlyarhtbvKncmt4baFyp/JscmwybPJtMm4yoLGq+G0nMqQyp\ -HhuIHhuIPhuIXhuIfhuInhuIvhuI3huI/huJHhuJPhuJXhuJfhuJnhuJvhuJ3huJ/huKHhuKPhuKXh\ -uKfhuKnhuKvhuK3huK/huLHhuLPhuLXhuLfhuLnhuLvhuL3huL/huYHhuYPhuYXhuYfhuYnhuYvhuY\ -3huY/huZHhuZPhuZXhuZfhuZnhuZvhuZ3huZ/huaHhuaPhuaXhuafhuanhuavhua3hua/hubHhubPh\ -ubXhubfhubnhubvhub3hub/huoHhuoPhuoXhuofhuonhuovhuo3huo/hupHhupPhupVhyr7huqHhuq\ -PhuqXhuqfhuqnhuqvhuq3huq/hurHhurPhurXhurfhurnhurvhur3hur/hu4Hhu4Phu4Xhu4fhu4nh\ -u4vhu43hu4/hu5Hhu5Phu5Xhu5fhu5nhu5vhu53hu5/hu6Hhu6Phu6Xhu6fhu6nhu6vhu63hu6/hu7\ -Hhu7Phu7Xhu7fhu7nhu7vhu73hu7/hvIDhvIHhvILhvIPhvIThvIXhvIbhvIfhvJDhvJHhvJLhvJPh\ -vJThvJXhvKDhvKHhvKLhvKPhvKThvKXhvKbhvKfhvLDhvLHhvLLhvLPhvLThvLXhvLbhvLfhvYDhvY\ -HhvYLhvYPhvYThvYXhvZHhvZPhvZXhvZfhvaDhvaHhvaLhvaPhvaThvaXhvabhvafhvIDOueG8gc65\ -4byCzrnhvIPOueG8hM654byFzrnhvIbOueG8h8654bygzrnhvKHOueG8os654byjzrnhvKTOueG8pc\ -654bymzrnhvKfOueG9oM654b2hzrnhvaLOueG9o8654b2kzrnhvaXOueG9ps654b2nzrnhvbDOuc6x\ -zrnOrM654b62zrnhvrDhvrHhvbAgzJMgzYIgzIjNguG9tM65zrfOuc6uzrnhv4bOueG9suG9tCDMk8\ -yAIMyTzIEgzJPNgs6Q4b+Q4b+R4b22IMyUzIAgzJTMgSDMlM2CzrDhv6Dhv6Hhvbrhv6UgzIjMgGDh\ -vbzOuc+JzrnPjs654b+2zrnhvbjhvbwgzJTigJAgzLPigLLigLLigLLigLLigLLigLXigLXigLXigL\ -XigLUhISDMhT8/PyEhP+KAsuKAsuKAsuKAsjA0NTY3ODkr4oiSPSgpcnNhL2NhL3PCsGNjL29jL3XC\ -sGZub3NtdGVsdG3XkNeR15LXk2ZheOKIkTHigYQ3MeKBhDkx4oGEMTAx4oGEMzLigYQzMeKBhDUy4o\ -GENTPigYQ1NOKBhDUx4oGENjXigYQ2MeKBhDgz4oGEODXigYQ4N+KBhDgx4oGEaWlpaWlpdnZpdmlp\ -dmlpaWl4eGl4aWkw4oGEM+KIq+KIq+KIq+KIq+KIq+KIruKIruKIruKIruKIruOAiOOAiTEwMTExMj\ -EzMTQxNTE2MTcxODE5MjAoMSkoMikoMykoNCkoNSkoNikoNykoOCkoOSkoMTApKDExKSgxMikoMTMp\ -KDE0KSgxNSkoMTYpKDE3KSgxOCkoMTkpKDIwKShhKShiKShjKShkKShlKShmKShnKShoKShpKShqKS\ -hrKShsKShtKShuKShvKShwKShxKShyKShzKSh0KSh1KSh2KSh3KSh4KSh5KSh6KeKIq+KIq+KIq+KI\ -qzo6PT09PT094qudzLjisLDisLHisLLisLPisLTisLXisLbisLfisLjisLnisLrisLvisLzisL3isL\ -7isL/isYDisYHisYLisYPisYTisYXisYbisYfisYjisYnisYrisYvisYzisY3isY7isY/isZDisZHi\ -sZLisZPisZTisZXisZbisZfisZjisZnisZrisZvisZzisZ3isZ7isaHJq+G1vcm94rGo4rGq4rGs4r\ -Gz4rG2yL/JgOKygeKyg+KyheKyh+KyieKyi+KyjeKyj+KykeKyk+KyleKyl+KymeKym+KyneKyn+Ky\ -oeKyo+KypeKyp+KyqeKyq+KyreKyr+KyseKys+KyteKyt+KyueKyu+KyveKyv+KzgeKzg+KzheKzh+\ -KzieKzi+KzjeKzj+KzkeKzk+KzleKzl+KzmeKzm+KzneKzn+KzoeKzo+KzrOKzruKzs+K1oeavjem+\ -n+S4gOS4qOS4tuS4v+S5meS6heS6jOS6oOS6uuWEv+WFpeWFq+WGguWGluWGq+WHoOWHteWIgOWKm+\ -WLueWMleWMmuWMuOWNgeWNnOWNqeWOguWOtuWPiOWPo+Wbl+Wcn+Wjq+WkguWkiuWkleWkp+Wls+Wt\ -kOWugOWvuOWwj+WwouWwuOWxruWxseW3m+W3peW3seW3vuW5suW5uuW5v+W7tOW7vuW8i+W8k+W9kO\ -W9oeW9s+W/g+aIiOaItuaJi+aUr+aUtOaWh+aWl+aWpOaWueaXoOaXpeabsOaciOacqOasoOatouat\ -ueaus+avi+avlOavm+awj+awlOawtOeBq+eIqueItueIu+eIv+eJh+eJmeeJm+eKrOeOhOeOieeTnO\ -eTpueUmOeUn+eUqOeUsOeWi+eWkueZtueZveearueav+ebruefm+efouefs+ekuuemuOemvueptOer\ -i+erueexs+ezuOe8tue9kee+iue+veiAgeiAjOiAkuiAs+iBv+iCieiHo+iHquiHs+iHvOiIjOiIm+\ -iIn+iJruiJsuiJuOiZjeiZq+ihgOihjOiho+ilvuimi+inkuiogOiwt+ixhuixleixuOiynei1pOi1\ -sOi2s+i6q+i7iui+m+i+sOi+temCkemFiemHhumHjOmHkemVt+mWgOmYnOmatumauembqOmdkemdnu\ -mdoumdqemfi+mfremfs+mggemiqOmjm+mjn+mmlummmemmrOmqqOmrmOmrn+mspemsr+mssumsvOmt\ -mumzpem5tem5v+m6pem6u+m7g+m7jem7kem7uem7vem8jum8k+m8oOm8u+m9ium9kum+jem+nOm+oC\ -7jgJLljYTljYUg44KZIOOCmuOCiOOCiuOCs+ODiOGEgOGEgeGGquGEguGGrOGGreGEg+GEhOGEheGG\ -sOGGseGGsuGGs+GGtOGGteGEmuGEhuGEh+GEiOGEoeGEieGEiuGEi+GEjOGEjeGEjuGEj+GEkOGEke\ -GEkuGFoeGFouGFo+GFpOGFpeGFpuGFp+GFqOGFqeGFquGFq+GFrOGFreGFruGFr+GFsOGFseGFsuGF\ -s+GFtOGFteGElOGEleGHh+GHiOGHjOGHjuGHk+GHl+GHmeGEnOGHneGHn+GEneGEnuGEoOGEouGEo+\ -GEp+GEqeGEq+GErOGEreGEruGEr+GEsuGEtuGFgOGFh+GFjOGHseGHsuGFl+GFmOGFmeGGhOGGheGG\ -iOGGkeGGkuGGlOGGnuGGoeS4ieWbm+S4iuS4reS4i+eUsuS4meS4geWkqeWcsCjhhIApKOGEgiko4Y\ -SDKSjhhIUpKOGEhiko4YSHKSjhhIkpKOGEiyko4YSMKSjhhI4pKOGEjyko4YSQKSjhhJEpKOGEkiko\ -6rCAKSjrgpgpKOuLpCko6528KSjrp4gpKOuwlCko7IKsKSjslYQpKOyekCko7LCoKSjsubQpKO2DgC\ -ko7YyMKSjtlZgpKOyjvCko7Jik7KCEKSjsmKTtm4QpKOS4gCko5LqMKSjkuIkpKOWbmyko5LqUKSjl\ -ha0pKOS4gyko5YWrKSjkuZ0pKOWNgSko5pyIKSjngaspKOawtCko5pyoKSjph5EpKOWcnyko5pelKS\ -jmoKopKOaciSko56S+KSjlkI0pKOeJuSko6LKhKSjnpZ0pKOWKtCko5LujKSjlkbwpKOWtpiko55uj\ -KSjkvIEpKOizhyko5Y2UKSjnpa0pKOS8kSko6IeqKSjoh7Mp5ZWP5bm8566PcHRlMjEyMjIzMjQyNT\ -I2MjcyODI5MzAzMTMyMzMzNDM16rCA64KY64uk652866eI67CU7IKs7JWE7J6Q7LCo7Lm07YOA7YyM\ -7ZWY7LC46rOg7KO87J2Y7Jqw5LqU5YWt5LiD5Lmd5qCq5pyJ56S+5ZCN54m56LKh56Wd5Yq056eY55\ -S36YGp5YSq5Y2w5rOo6aCF5LyR5YaZ5q2j5bem5Y+z5Yy75a6X5a2m55uj5LyB6LOH5Y2U5aScMzYz\ -NzM4Mzk0MDQxNDI0MzQ0NDU0NjQ3NDg0OTUwMeaciDLmnIgz5pyINOaciDXmnIg25pyIN+aciDjmnI\ -g55pyIMTDmnIgxMeaciDEy5pyIaGdlcmdldmx0ZOOCouOCpOOCpuOCqOOCquOCq+OCreOCr+OCseOC\ -s+OCteOCt+OCueOCu+OCveOCv+ODgeODhOODhuODiOODiuODi+ODjOODjeODjuODj+ODkuODleODmO\ -ODm+ODnuODn+ODoOODoeODouODpOODpuODqOODqeODquODq+ODrOODreODr+ODsOODseODsuS7pOWS\ -jOOCouODkeODvOODiOOCouODq+ODleOCoeOCouODs+ODmuOCouOCouODvOODq+OCpOODi+ODs+OCsO\ -OCpOODs+ODgeOCpuOCqeODs+OCqOOCueOCr+ODvOODieOCqOODvOOCq+ODvOOCquODs+OCueOCquOD\ -vOODoOOCq+OCpOODquOCq+ODqeODg+ODiOOCq+ODreODquODvOOCrOODreODs+OCrOODs+ODnuOCru\ -OCrOOCruODi+ODvOOCreODpeODquODvOOCruODq+ODgOODvOOCreODreOCreODreOCsOODqeODoOOC\ -reODreODoeODvOODiOODq+OCreODreODr+ODg+ODiOOCsOODqeODoOOCsOODqeODoOODiOODs+OCr+\ -ODq+OCvOOCpOODreOCr+ODreODvOODjeOCseODvOOCueOCs+ODq+ODiuOCs+ODvOODneOCteOCpOOC\ -r+ODq+OCteODs+ODgeODvOODoOOCt+ODquODs+OCsOOCu+ODs+ODgeOCu+ODs+ODiOODgOODvOOCue\ -ODh+OCt+ODieODq+ODiOODs+ODiuODjuODjuODg+ODiOODj+OCpOODhOODkeODvOOCu+ODs+ODiOOD\ -keODvOODhOODkOODvOODrOODq+ODlOOCouOCueODiOODq+ODlOOCr+ODq+ODlOOCs+ODk+ODq+ODle\ -OCoeODqeODg+ODieODleOCo+ODvOODiOODluODg+OCt+OCp+ODq+ODleODqeODs+ODmOOCr+OCv+OD\ -vOODq+ODmuOCveODmuODi+ODkuODmOODq+ODhOODmuODs+OCueODmuODvOOCuOODmeODvOOCv+ODne\ -OCpOODs+ODiOODnOODq+ODiOODm+ODs+ODneODs+ODieODm+ODvOODq+ODm+ODvOODs+ODnuOCpOOC\ -r+ODreODnuOCpOODq+ODnuODg+ODj+ODnuODq+OCr+ODnuODs+OCt+ODp+ODs+ODn+OCr+ODreODs+\ -ODn+ODquODn+ODquODkOODvOODq+ODoeOCrOODoeOCrOODiOODs+ODoeODvOODiOODq+ODpOODvOOD\ -ieODpOODvOODq+ODpuOCouODs+ODquODg+ODiOODq+ODquODqeODq+ODlOODvOODq+ODvOODluODq+\ -ODrOODoOODrOODs+ODiOOCsuODs+ODr+ODg+ODiDDngrkx54K5MueCuTPngrk054K5NeeCuTbngrk3\ -54K5OOeCuTnngrkxMOeCuTEx54K5MTLngrkxM+eCuTE054K5MTXngrkxNueCuTE354K5MTjngrkxOe\ -eCuTIw54K5MjHngrkyMueCuTIz54K5MjTngrlocGFkYWF1YmFyb3ZwY2RtZG0yZG0zaXXlubPmiJDm\ -mK3lkozlpKfmraPmmI7msrvmoKrlvI/kvJrnpL5wYW5hzrxhbWFrYWtibWJnYmNhbGtjYWxwZm5mzr\ -xmzrxnbWdrZ2h6a2h6bWh6Z2h6dGh6zrxsbWxkbGtsZm1ubc68bW1tY21rbW1tMmNtMm0ya20ybW0z\ -Y20zbTNrbTNt4oiVc23iiJVzMmtwYW1wYWdwYXJhZHJhZOKIlXNyYWTiiJVzMnBzbnPOvHNtc3B2bn\ -bOvHZtdmt2cHdud868d213a3drz4ltz4licWNjY2Rj4oiVa2dkYmd5aGFocGlua2trdGxtbG5sb2ds\ -eG1pbG1vbHBocHBtcHJzcnN2d2J24oiVbWHiiJVtMeaXpTLml6Uz5pelNOaXpTXml6U25pelN+aXpT\ -jml6U55pelMTDml6UxMeaXpTEy5pelMTPml6UxNOaXpTE15pelMTbml6UxN+aXpTE45pelMTnml6Uy\ -MOaXpTIx5pelMjLml6UyM+aXpTI05pelMjXml6UyNuaXpTI35pelMjjml6UyOeaXpTMw5pelMzHml6\ -VnYWzqmYHqmYPqmYXqmYfqmYnqmY3qmY/qmZHqmZPqmZXqmZfqmZnqmZvqmZ3qmZ/qmaHqmaPqmaXq\ -mafqmanqmavqma3qmoHqmoPqmoXqmofqmonqmovqmo3qmo/qmpHqmpPqmpXqmpfqmpnqmpvqnKPqnK\ -XqnKfqnKnqnKvqnK3qnK/qnLPqnLXqnLfqnLnqnLvqnL3qnL/qnYHqnYPqnYXqnYfqnYnqnYvqnY3q\ -nY/qnZHqnZPqnZXqnZfqnZnqnZvqnZ3qnZ/qnaHqnaPqnaXqnafqnanqnavqna3qna/qnbrqnbzhtb\ -nqnb/qnoHqnoPqnoXqnofqnozqnpHqnpPqnpfqnpnqnpvqnp3qnp/qnqHqnqPqnqXqnqfqnqnJrMqe\ -yofqrZPqnrXqnrfqnrnqnrvqnr3qnr/qn4PqnpThto7qn4jqn4rqn7bqrLfqrZLKjeGOoOGOoeGOou\ -GOo+GOpOGOpeGOpuGOp+GOqOGOqeGOquGOq+GOrOGOreGOruGOr+GOsOGOseGOsuGOs+GOtOGOteGO\ -tuGOt+GOuOGOueGOuuGOu+GOvOGOveGOvuGOv+GPgOGPgeGPguGPg+GPhOGPheGPhuGPh+GPiOGPie\ -GPiuGPi+GPjOGPjeGPjuGPj+GPkOGPkeGPkuGPk+GPlOGPleGPluGPl+GPmOGPmeGPmuGPm+GPnOGP\ -neGPnuGPn+GPoOGPoeGPouGPo+GPpOGPpeGPpuGPp+GPqOGPqeGPquGPq+GPrOGPreGPruGPr+ixiO\ -abtOiziOa7keS4suWPpeWlkeWWh+WliOaHtueZqee+heiYv+ieuuijuOmCj+aogua0m+eDmeePnuiQ\ -vemFqumnseS6guWNteashOeIm+iYrem4nuW1kOa/q+iXjeilpOaLieiHmOign+W7iuacl+a1queLvO\ -mDjuS+huWGt+WLnuaThOark+eIkOebp+iYhuiZnOi3r+mcsumtr+m3uueijOelv+e2oOiPiemMhOir\ -luWjn+W8hOexoOiBvueJouejiuizgumbt+WjmOWxouaok+a3mua8j+e0r+e4t+mZi+WLkuiCi+WHnO\ -WHjOeonOe2vuiPsemZteiugOaLj+irvuS4ueWvp+aAkueOh+eVsOWMl+eju+S+v+W+qeS4jeazjOaV\ -uOe0ouWPg+WhnuecgeiRieiqquauuuayiOaLvuiLpeaOoOeVpeS6ruWFqeWHieaigeezp+iJr+irku\ -mHj+WLteWRguW7rOaXhea/vuekqumWrempqum6l+m7juabhuatt+i9ouW5tOaGkOaIgOaSmua8o+eF\ -ieeSieeniue3tOiBr+i8puiTrumAo+mNiuWIl+WKo+WSveeDiOijguW7ieW/teaNu+auruewvueNte\ -S7pOWbueW2uuaAnOeOsueRqee+muiBhumItOmbtumdiOmgmOS+i+emrumGtOmauOaDoeS6huWDmuWv\ -ruWwv+aWmeeHjueZguiTvOmBvOaaiOmYruWKieadu+afs+a1gea6nOeQieeVmeehq+e0kOmhnuaIru\ -mZuOWAq+W0mea3qui8quW+i+aFhOagl+mahuWIqeWQj+WxpeaYk+adjuaiqOazpeeQhueXoue9ueij\ -j+ijoembouWMv+a6uuWQneeHkOeSmOiXuumao+mxl+m6n+ael+a3i+iHqOesoOeykueLgOeCmeitmO\ -S7gOiMtuWIuuWIh+W6puaLk+ezluWuhea0nuaatOi8u+mZjeW7k+WFgOWXgOWhmuaZtOWHnueMqueb\ -iuekvOelnuelpeemj+mdlueyvuiYkuiruOmAuOmDvemjr+mjvOmkqOm2tOmDnumat+S+ruWDp+WFje\ -WLieWLpOWNkeWWneWYhuWZqOWhgOWiqOWxpOaClOaFqOaGjuaHsuaVj+aXouaakeaihea1t+a4mua8\ -oueFrueIq+eQoueikeelieeliOelkOelluemjeemjuepgOeqgeevgOe4iee5gee9suiAheiHreiJue\ -iRl+ikkOimluisgeisueizk+i0iOi+tumbo+mfv+mgu+aBtfCki67oiJjkuKblhrXlhajkvoDlhYXl\ -hoDli4fli7rllZXllpnll6LlorPlpYTlpZTlqaLlrKjlu5Llu5nlvanlvq3mg5jmhY7mhIjmhaDmiL\ -Tmj4TmkJzmkZLmlZbmnJvmnZbmu5vmu4vngJ7nnqfniLXniq/nkbHnlIbnlLvnmJ3nmJ/nm5vnm7Tn\ -nYrnnYDno4znqrHnsbvntZvnvL7ojZLoj6/onbnopYHopoboqr/oq4voq63ororovLjpgbLphpnpib\ -bpmbzpn5vpoIvprJLwoqGK8KKhhPCjj5Xjrp3kgJjkgLnwpYmJ8KWzkPCnu5PpvYPpvo5mZmZpZmxm\ -ZmlmZmxzdNW01bbVtNWl1bTVq9W+1bbVtNWt15nWtNey1rfXoteU15vXnNed16jXqtep14HXqdeC16\ -nWvNeB16nWvNeC15DWt9eQ1rjXkNa815HWvNeS1rzXk9a815TWvNeV1rzXlta815jWvNeZ1rzXmta8\ -15vWvNec1rzXnta816DWvNeh1rzXo9a816TWvNem1rzXp9a816jWvNep1rzXqta815XWudeR1r/Xm9\ -a/16TWv9eQ15zZsdm72b7agNm62b/Zudqk2qbahNqD2obah9qN2ozajtqI2pjakdqp2q/as9qx2rra\ -u9uA24HavtuS25ParduH24bbiNuL24XbiduQ2YnYptin2Kbbldim2YjYptuH2Kbbhtim24jYptuQ2K\ -bZiduM2KbYrNim2K3YptmF2KbZitio2KzYqNit2KjYrtio2YXYqNmJ2KjZitiq2KzYqtit2KrYrtiq\ -2YXYqtmJ2KrZitir2KzYq9mF2KvZidir2YrYrNit2KzZhdit2KzYrdmF2K7YrNiu2K3YrtmF2LPYrN\ -iz2K3Ys9iu2LPZhdi12K3YtdmF2LbYrNi22K3Yttiu2LbZhdi32K3Yt9mF2LjZhdi52KzYudmF2LrY\ -rNi62YXZgdis2YHYrdmB2K7ZgdmF2YHZidmB2YrZgtit2YLZhdmC2YnZgtmK2YPYp9mD2KzZg9it2Y\ -PYrtmD2YTZg9mF2YPZidmD2YrZhNis2YTYrdmE2K7ZhNmF2YTZidmE2YrZhdis2YXYrdmF2K7ZhdmF\ -2YXZidmF2YrZhtis2YbYrdmG2K7ZhtmF2YbZidmG2YrZh9is2YfZhdmH2YnZh9mK2YrYrNmK2K3Zit\ -iu2YrZhdmK2YnZitmK2LDZsNix2bDZidmwINmM2ZEg2Y3ZkSDZjtmRINmP2ZEg2ZDZkSDZkdmw2KbY\ -sdim2LLYptmG2KjYsdio2LLYqNmG2KrYsdiq2LLYqtmG2KvYsdir2LLYq9mG2YXYp9mG2LHZhtiy2Y\ -bZhtmK2LHZitiy2YrZhtim2K7YptmH2KjZh9iq2YfYtdiu2YTZh9mG2YfZh9mw2YrZh9ir2YfYs9mH\ -2LTZhdi02YfZgNmO2ZHZgNmP2ZHZgNmQ2ZHYt9mJ2LfZiti52YnYudmK2LrZidi62YrYs9mJ2LPZit\ -i02YnYtNmK2K3Zidit2YrYrNmJ2KzZitiu2YnYrtmK2LXZidi12YrYttmJ2LbZiti02KzYtNit2LTY\ -rti02LHYs9ix2LXYsdi22LHYp9mL2KrYrNmF2KrYrdis2KrYrdmF2KrYrtmF2KrZhdis2KrZhdit2K\ -rZhdiu2KzZhdit2K3ZhdmK2K3ZhdmJ2LPYrdis2LPYrNit2LPYrNmJ2LPZhdit2LPZhdis2LPZhdmF\ -2LXYrdit2LXZhdmF2LTYrdmF2LTYrNmK2LTZhdiu2LTZhdmF2LbYrdmJ2LbYrtmF2LfZhdit2LfZhd\ -mF2LfZhdmK2LnYrNmF2LnZhdmF2LnZhdmJ2LrZhdmF2LrZhdmK2LrZhdmJ2YHYrtmF2YLZhdit2YLZ\ -hdmF2YTYrdmF2YTYrdmK2YTYrdmJ2YTYrNis2YTYrtmF2YTZhdit2YXYrdis2YXYrdmF2YXYrdmK2Y\ -XYrNit2YXYrNmF2YXYrtis2YXYrtmF2YXYrNiu2YfZhdis2YfZhdmF2YbYrdmF2YbYrdmJ2YbYrNmF\ -2YbYrNmJ2YbZhdmK2YbZhdmJ2YrZhdmF2KjYrtmK2KrYrNmK2KrYrNmJ2KrYrtmK2KrYrtmJ2KrZhd\ -mK2KrZhdmJ2KzZhdmK2KzYrdmJ2KzZhdmJ2LPYrtmJ2LXYrdmK2LTYrdmK2LbYrdmK2YTYrNmK2YTZ\ -hdmK2YrYrdmK2YrYrNmK2YrZhdmK2YXZhdmK2YLZhdmK2YbYrdmK2LnZhdmK2YPZhdmK2YbYrNit2Y\ -XYrtmK2YTYrNmF2YPZhdmF2KzYrdmK2K3YrNmK2YXYrNmK2YHZhdmK2KjYrdmK2LPYrtmK2YbYrNmK\ -2LXZhNuS2YLZhNuS2KfZhNmE2YfYp9mD2KjYsdmF2K3Zhdiv2LXZhNi52YXYsdiz2YjZhNi52YTZit\ -mH2YjYs9mE2YXYtdmE2YnYtdmE2Ykg2KfZhNmE2Ycg2LnZhNmK2Ycg2YjYs9mE2YXYrNmEINis2YTY\ -p9mE2YfYsduM2KfZhCzjgIE6IT/jgJbjgJfigJTigJNfe33jgJTjgJXjgJDjgJHjgIrjgIvjgIzjgI\ -3jgI7jgI9bXSMmKi08PlwkJUAg2YvZgNmLINmMINmNINmO2YDZjiDZj9mA2Y8g2ZDZgNmQINmR2YDZ\ -kSDZktmA2ZLYodii2KPYpNil2KbYp9io2KnYqtir2KzYrdiu2K/YsNix2LLYs9i02LXYtti32LjYud\ -i62YHZgtmD2YTZhdmG2YfZiNmK2YTYotmE2KPZhNil2YTYpyInL158fuKmheKmhuODu+OCoeOCo+OC\ -peOCp+OCqeODo+ODpeODp+ODg+ODvOODs+OCmeOCmsKiwqPCrMKmwqXigqnilILihpDihpHihpLihp\ -PilqDil4vwkJCo8JCQqfCQkKrwkJCr8JCQrPCQkK3wkJCu8JCQr/CQkLDwkJCx8JCQsvCQkLPwkJC0\ -8JCQtfCQkLbwkJC38JCQuPCQkLnwkJC68JCQu/CQkLzwkJC98JCQvvCQkL/wkJGA8JCRgfCQkYLwkJ\ -GD8JCRhPCQkYXwkJGG8JCRh/CQkYjwkJGJ8JCRivCQkYvwkJGM8JCRjfCQkY7wkJGP8JCTmPCQk5nw\ -kJOa8JCTm/CQk5zwkJOd8JCTnvCQk5/wkJOg8JCTofCQk6LwkJOj8JCTpPCQk6XwkJOm8JCTp/CQk6\ -jwkJOp8JCTqvCQk6vwkJOs8JCTrfCQk67wkJOv8JCTsPCQk7HwkJOy8JCTs/CQk7TwkJO18JCTtvCQ\ -k7fwkJO48JCTufCQk7rwkJO78JCzgPCQs4HwkLOC8JCzg/CQs4TwkLOF8JCzhvCQs4fwkLOI8JCzif\ -CQs4rwkLOL8JCzjPCQs43wkLOO8JCzj/CQs5DwkLOR8JCzkvCQs5PwkLOU8JCzlfCQs5bwkLOX8JCz\ -mPCQs5nwkLOa8JCzm/CQs5zwkLOd8JCznvCQs5/wkLOg8JCzofCQs6LwkLOj8JCzpPCQs6XwkLOm8J\ -Czp/CQs6jwkLOp8JCzqvCQs6vwkLOs8JCzrfCQs67wkLOv8JCzsPCQs7HwkLOy8JGjgPCRo4HwkaOC\ -8JGjg/CRo4TwkaOF8JGjhvCRo4fwkaOI8JGjifCRo4rwkaOL8JGjjPCRo43wkaOO8JGjj/CRo5Dwka\ -OR8JGjkvCRo5PwkaOU8JGjlfCRo5bwkaOX8JGjmPCRo5nwkaOa8JGjm/CRo5zwkaOd8JGjnvCRo5/w\ -lrmg8Ja5ofCWuaLwlrmj8Ja5pPCWuaXwlrmm8Ja5p/CWuajwlrmp8Ja5qvCWuavwlrms8Ja5rfCWua\ -7wlrmv8Ja5sPCWubHwlrmy8Ja5s/CWubTwlrm18Ja5tvCWubfwlrm48Ja5ufCWubrwlrm78Ja5vPCW\ -ub3wlrm+8Ja5v/CdhZfwnYWl8J2FmPCdhaXwnYWY8J2FpfCdha7wnYWY8J2FpfCdha/wnYWY8J2Fpf\ -CdhbDwnYWY8J2FpfCdhbHwnYWY8J2FpfCdhbLwnYa58J2FpfCdhrrwnYWl8J2GufCdhaXwnYWu8J2G\ -uvCdhaXwnYWu8J2GufCdhaXwnYWv8J2GuvCdhaXwnYWvxLHIt+KIh+KIgvCepKLwnqSj8J6kpPCepK\ -XwnqSm8J6kp/CepKjwnqSp8J6kqvCepKvwnqSs8J6krfCepK7wnqSv8J6ksPCepLHwnqSy8J6ks/Ce\ -pLTwnqS18J6ktvCepLfwnqS48J6kufCepLrwnqS78J6kvPCepL3wnqS+8J6kv/CepYDwnqWB8J6lgv\ -CepYPZrtqh2a8wLDEsMiwzLDQsNSw2LDcsOCw5LOOAlHPjgJV3emh2c2RwcHZ3Y21jbWRtcmRq44G7\ -44GL44Kz44Kz5a2X5Y+M44OH5aSa6Kej5Lqk5pig54Sh5YmN5b6M5YaN5paw5Yid57WC6LKp5aOw5Z\ -C55ryU5oqV5o2V6YGK5oyH5omT56aB56m65ZCI5rqA55Sz5Ymy5Za26YWN44CU5pys44CV44CU5LiJ\ -44CV44CU5LqM44CV44CU5a6J44CV44CU54K544CV44CU5omT44CV44CU55uX44CV44CU5Yud44CV44\ -CU5pWX44CV5b6X5Y+v5Li95Li45LmB8KCEouS9oOS+u+WAguWBuuWCmeWDj+OSnvCgmLrlhZTlhaTl\ -hbfwoJSc45K55YWn8KCVi+WGl+WGpOS7jOWGrPCph5/liIPjk5/liLvliYblibfjlJXljIXljIbljY\ -nljZrljbPljb3ljb/woKis54Gw5Y+K5Y+f8KCto+WPq+WPseWQhuWSnuWQuOWRiOWRqOWSouWTtuWU\ -kOWVk+WVo+WWhOWWq+WWs+WXguWcluWcl+WZkeWZtOWjruWfjuWftOWgjeWei+WgsuWgseWirPChk6\ -Tlo7Llo7flpIblpKLlpaLwoZqo8KGbquWnrOWom+Wop+WnmOWppuObruWsiOWsvvChp4jlr4Plr5jl\ -r7PwoayY5a+/5bCG456B5bGg5bOA5bKN8KG3pOW1g/Cht6blta7ltavltbzlt6Hlt6LjoK/lt73luK\ -jluL3luanjoaLwooaD46G85bqw5bqz5bq28KqOkvCijLHoiIHlvKLjo4fwo4q48KaHmuW9ouW9q+Oj\ -o+W+muW/jeW/l+W/ueaCgeOkuuOknPCim5Tmg4fmhYjmhYzmhbrmhrLmhqTmhq/mh57miJDmiJvmiZ\ -3mirHmi5TmjZDwoqyM5oy95ou85o2o5o6D5o+k8KKvseaQouaPheaOqeOoruaRqeaRvuaSneaRt+Op\ -rOaVrPCjgIrml6Pmm7jmmYnjrJnjrIjjq6TlhpLlhpXmnIDmmpzogq3kj5nmnKHmnZ7mnZPwo4+D46\ -2J5p+65p6F5qGS8KORreaijuagn+aklOalguamo+anquaqqPCjmqPmq5vjsJjmrKHwo6Kn5q2U47GO\ -5q2y5q6f5q678KOqjfChtIvwo6u65rGO8KOyvOayv+azjeaxp+a0lua0vua1qea1uOa2hfCjtJ7mtL\ -TmuK/mua7jtLPmu4fwo7uR5re55r2u8KO9nvCjvo7mv4bngLnngJvjtpbngYrngb3ngbfngq3woJSl\ -54WF8KSJo+eGnOeIqOeJkPCkmIjnioDnipXwpJy18KSglOeNuueOi+O6rOeOpeO6uOeRh+eRnOeShe\ -eTiuO8m+eUpPCksLbnlL7wpLKS8KKGn+eYkPCkvqHwpL648KWBhOO/vOSAiPClg7PwpYOy8KWEmfCl\ -hLPnnJ7nnJ/nnovkgYbkgpbwpZCd56GO5IOj8KWYpvClmprwpZuF56er5ISv56mK56mP8KWlvPClqq\ -fkiILwpa6r56+G56+J5Iin8KWygOezkuSKoOezqOezo+e0gPClvobntaPkjIHnt4fnuILnuYXkjLTw\ -poio8KaJh+SNmfCmi5nnvbrwpoy+576V57+68KaTmvCmlKPogaDwppao6IGw8KONn+SPleiCsuiEg+\ -SQi+iEvuWqtfCmnqfwpp618KOOk/CjjpzoiITovp7kkavoipHoiovoip3lirPoirHoirPoir3oi6bw\ -pqy86Iyd6I2j6I6t6Iyj6I696I+n6I2T6I+K6I+M6I+c8KawtvCmtavwprOV5JSr6JOx6JOz6JSW8K\ -ePiuiVpPCmvKzklZ3klaHwpr6x8KeDkuSVq+iZkOiZp+iZqeiaqeiaiOicjuibouicqOidq+iehuif\ -oeiggeSXueihoPCnmafoo5foo57kmLXoo7rjkrvwp6Ku8KelpuSavuSbh+iqoPCnsqjosqvos4HotJ\ -votbfwp7yv8KCghOi3i+i2vOi3sPCgo57ou5TwqJeS8KiXremClOmDsemEkfConK7phJvpiLjpi5fp\ -i5jpibzpj7npkJXwqK+66ZaL5KaV6Za38Ki1t+Snpumbg+W2sumco/CphYXwqYia5Kmu5Km26Z+g8K\ -mQiuSqsvCpkpbpoKnwqZa26aOi5Kyz6aSp6aan6aeC6ae+5K+O8KmssOmxgOmzveSzjuSzrem1p/Cq\ -g47ks7jwqoSF8KqIjvCqipHktZbpu77pvIXpvI/pvJbwqpiAAAABACQClwEEAAAAbwAEAK8AAAAAAA\ -QAAAAAAIgACgAIAAAAAAAAABwARgABAA0AGwAAABUAEgBFAOwANgAQAAAAAAAAAAIAAACUAAAAVwAA\ -AAgAAwAHAAAAFgA6AAIAIwADAAQAHAABAAAARwARABcABAAbAAAAEwAAAAAAAAAAAAEABwAHAAQALg\ -AAAAAALAAAAAAAAwAPAAAAAAATAAAAAQACAAEACQAAAAAAAAABAAEAAAACAAIAAwACAB4AAAAIABEA\ -AQAAAAUAAAB5AAAABAATAAAAAAAFAAIAAAAFAAEAFQABAAAAAwAMAAAANQADAAIABQAGAAAABQAEAA\ -IAHAAAAAAAAAAEAAAAAAAAAAkAAgAJAAcAAAAFAAAACAAHAAAAEgAJAAAAOQACAAkAAAAEAAIAAAAA\ -AAAAAAAAAAAAAQAiAAIAAAAbABMADAAUAAYABAAFABMAAgAAAAMABAACAAAAGAAAAAYABAAAAAAACg\ -AKAAAAAQAAAA8AEAABAAAAAAAAAAIADwABAAQAAgAKAAsACQAEAAEAAAALAAAAAwAAAAYAAAAGAAAA\ -AwAEAAAAAAADAAAAAAABAAIAFQAAAAAAAAAUABsAAAAMAAAAAAAIAAMADAAAAA4AAgAAAAMAAAAKAA\ -IABgABAAAABAAAAAEABgACAAMAAgAQAAAADwAAAAAAAAADAAMABAANAAYAAAAAAAIAAAAAAAAAGAAK\ -AAYAAQABAAgAAAABAAEABwAAAAMACQARAAUAAQAFAAMAFgAHAAUABAAAAAoABgADAAAAAQAAAAcAAA\ -AGAAAABQBBAAkAAQAKAAAABQACABEACwADAAEAAAAAAAEAAQAAAAIAAAAGABgAAwAAAAMAAAACAAAA\ -AgAAAAAAAAAAAAUAAQAAAAAACQABAAAAAAACAAEAAAABAAIAAQAAAAMAAQABAAEAAAADAAwAAQADAA\ -EAAAACAAAAAAAFAAEABQAAAAEACwAFAAAAAAAAAAAAAAAAAA8AAAAAAAIABwAAAAAAAAAAAAAAAAAB\ -AAAACQAIAAAAAAADAAMAAQAEAAMABAAFAAIAAAAAAAIABgABAAUAAQAAAAMABgAIAAIAAgAGAAMAAA\ -AQAAYABgAFAAEABwAAAAIAAwACAAAAAAAAAAYAAAAAAAAAAAABAAAAAAAAAAEAAQAIAAEAAAACAAAA\ -AQAMAAQAAQACAAEABAACAAUABAAAAAMABAACAAAAAQADAAcABgAIAAAAAgADAAAAAgACAAIABAAAAA\ -AABgAGAAYADAAFAAAAAAAAAAEAAgAAAAMAAAAJAAMAAgABAAEACQABAAAACAABAAYAAAADAAAABQAB\ -AAEAAAAAAAIABAAAAAIAAAACAAYABgACAAgABQAGAAUAAQAGAAIAAAABAAAAAAADAAAAAQAJAAUABQ\ -AOAAAAAwAFAAAAAAABAAEAAAAAAAAAAAABAAQAAAACAAQABgAFAAYAAAAAAAEAAQAAAAAABQACAAgA\ -CAABAAYAAAABAAAAAQAAAAgAAAAEAAcACgABAAAAAAACAAEAAQABAAAAAQACAAAAAgABAAQABAAAAA\ -AAAAAGAAAAAwADAAAAAAAAAAAAAAACAAEAAQACAAIAAAAEAAIAAQAAAAAAAQAAAAEAAQAAAAIAAgAC\ -AAIAAAABAAUABAABAAAAAQABAAAAAAABAAQAAQACAAEAAQAAAAAAAAAAAAAAAQAAAAEAAAAAAAQAAQ\ -ACAAAAAQANAAQAAAABAAQAAAAFAAMABwADAAMAAwACAAAAAgACAAIAAQAAAAEAAwAEAAEAAAABAAQA\ -AQAAAAAAAAABAAMAAQAAAAAAAQAEAAEACAACAAQAAQABAAEABQABAAQAAQABAAIABgAAAAAAAAAAAA\ -IAAAACAAAABgADAAEAAwACAAMABQAEAAEAAAAFAAAAAAABAAMAAAACAAAAAQABAAAAAAAAAAEAAAAA\ -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\ -AAAAAKAAAADQAAABAAAAAGAAUAAAAAAAkAAwABAAAAAAAAAAAAAgABAAIAAAAAABYAAQACAAAAAQAA\ -AAYAAQAlAAUAAAAKAA0AAgAAAAEAAAAAABIAAAAAAAEAAAABAAAAAQAAAAQACQAAAAEABAAAAAQAAQ\ -AGAAsAAwAGAAcAAAAAAAAADQAPAA4AAAABAAEABAAPABAAAAAFAAAAGQABAA4AAAAIAAEAAwAAAAAA\ -BQABAAAAAAARAAAABAAFAAAAAQAAAAAAAAAAAAIAAQAAAAAAAgABAAEABQAIAAAAAAAMAAoAAAAGAA\ -kAAwABAAYAAQAAABsAAQAOAAAACAAFAAMAFQAAAAIABwALAAMAAAAKAAMAAAAGAAAACgAAAAEAAwAI\ -AAAACQAAAAEAAgAAAAUAAAABAAAAAAAAABcAAAAAAAIAAAAFABYAAAAQAAMABAARAAEAAwAAAAAAAA\ -AEAAEAAAAFAAAAAgABAAAAAgAAAAIAAgAAAAAAAAAAAAIAAAASAAEABAAKAAsABAAAAAIAAAADAAAA\ -BAAFAAAAAAARAAEABgAGAAAAAgAAAAEAAAAEAAAAAAABAAEABwAAAAMACgAAAAEACgACAAAAAQAAAA\ -AADQAFAAEAAQAAAAAABQAGAAgABAAFAAAACwAAAAQACwAAAAAAAQAFAAAACwAAAAYAAAAAAAAAAAAB\ -AAAABAAAAAYAAAAAAAcAEwAEABkAAwABAAAAAQAGAAYAAAAAAAAAAAAMAAIAAwAAAAQAAAABAAAAAQ\ -AFAAEAAQACAAEAAAAAAAAAAAAJAAAAAAAHAAEACQAGAAQAAQAFAAAAAQACAAgAAAAJAAAAAAABAAMA\ -CwAAAAEAAAAAAAUAAAAAAAAAAAAAAAMAAAACAAEAAgAAAAAAAAAEAAEAAAAGAAIABQAIABIAAAAAAA\ -AAAwABAAAAAAAAAAIAAwADAAAAAAABAAAAAQAAAAMAAAAAAAIAAQAEAA0AAAAAAAsAAAABAAAAAAAM\ -AAAAAAAAAAUACAACAAAAAgABAAYAAQABAAEAAAACAAAABQABAAEAAAACAAAAAAAAAAAADgAQAAAABQ\ -AEAAIAAQAAAAAAAwABAAAAAgABAAQAAAAAAAMAAAABAAEAAwABAAUAAgADAAQAAAADAAMABgAAAAAA\ -AQAAAAIADgABAAIAAQAEAAIABQACAAEAAQAAAAEAAAAFAAUABgAGAAUAAAACAAEAAAACAAQAAQAAAA\ -UAAAAGAAIACAAAAAAABwABAAIAAgAFAAQAEQAAAAMAAAABAAAAAQAEAAAAAwACAAAAAQADAAAACwAG\ -AAAABgAAAAQAAQACAAAAAQAAAAIAAQACAAAABQABAAAAAAAAAAEAAwACAAYAAAAAAAIABAAGAAAAAA\ -AAAAAADAAMAAAAAAAAAAQABAAAAAgAAwABAAAAAQAAAAMAAAAAAAUAAAAFAAEAAAADAAQAAQACAAMA\ -AAABAAcAAAAAAAcAAAACAAIAAAAAAAEAAQABAAEACwAAAAQAAAABAAEAAAACAAEAAQAFAAAAAAADAA\ -YAAAAAAAQAAgABAAMAAwAKAAcAAAAEAAEABgAAAAEAAAAAAAIAAQABAAAAAAAAAAAAAAACAAEAAQAB\ -AAQAAAADAAAAAQAAAAAAAQAAAAEAAAAEAAAAAQAAAAYAAAABAAAABAAAAAEAAgAGAAAAAgAAAAMABw\ -AAAAMAAAABAAEAAAAAAAMABQACAAAAAQABAAIAAgAEAAEAAAAAAAEAAAADAAIAAAABAAAAAgAEAAIA\ -AAABAAUAAAAAAAIAAQABAAAAAAABAAAABQACAAAACAADAAEAAQABAAMABAAAAAIAAAABAAIAAAAAAA\ -AAAAAAAAEAAAAGAAAAAAAAAAMAAAAAAAIAAgAAAAEAAwABAAMAAQACAAAAAQACAAAAAAABAAAAAwAB\ -AAIAAAACAAEAAAACAAQAAAAFAAUAAAAFAAIAAAABAAMAAQAAAAIABgACAAEAAAAAAAAAAwBUBkoGJg\ -YAAAkDaQDJHgAABgNlABUBAAALAyME8gQAAAwDRwDmAQAAAQNXAIIeAAABA8UA+gEAADgD0iHPIQAA\ -BwNDAAoBAAAHA3oAfAEAAAwDSQDPAQAABwNyAFkeAACZMEswTDAAAEUDYR+hHwAABwNBACYCAAAjA2\ -sAMx4AAAQDmQPZHwAAAQNJH00fAABCA8oD1x8AAAQDVQBqAQAAmjDbMN0wAABFA24frh8AADEDQgAG\ -HgAACAMeBOYEAAAlA0EAAB4AADEDUgBeHgAARQP2H/cfAAA4A3IidCIAADgDSCJJIgAAAQO/H84fAA\ -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\ -AAoAAAAAAAAAFgAAAAAAAAAAAAgAAAABAAAACwAAAAEAAAAAAAAABAAAAAAAFgAAAAEAAAABAB0ABw\ -AAAAEABgAEAAEAAwAOAAkAEAAIAAIAAQAAAAAAAwACAAIAIgAAAAAABAATABEAAAACAA0AAAABAAQA\ -DAABABYADgACAAAAAAAEAAAAAAAAAAAAAAAVAAAAAAADAAAAAAAAAAwAAAAFAAQAAAAAABEADQARAA\ -AABAAAAAMAAgABAAMAAQACAAIAAgABAAEAAwABAAEAAAACAAIAAgABAA0AAAAAAAAAAQACAAYADQAB\ -AAEABAAMAAIABgAAAAQAJwAcAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAA8ABwAIAAAAAw\ -AAAAQAAAAAAAEAAAAPAAEAAAAAAAAAAgADAAAAFgALAAUAAAAAAAIACAAEAAAACAAAAAAAAAADAAQA\ -AAABAAsAAQAAAAAAGAAJAAQABwAAAAEAAgABAAAAAAABAB4AAAACAAEAAAAAAAkAAAAAAAMACgACAA\ -MAAQAAAAQAAAAEAB8AAAAAAAAAAAAAAAAAAAAkAAcABQACAAIACgABAAAAAAADAAAAAQAMAAAAAQAA\ -AAAAAQACAAEACwAAAAAAAQADAAYAAgAMAA4AHgAAAAAAEAAAAAEAAgANAAMAAAAGAAAAAgAKAAQAAA\ -APABAAAgABAAIABgAAAAAACwAAAAUADQACAAAAAwAHAAAABQAEAAAAAAAGAAEAAAAAAA8AAwAAAAAA\ -DAAAABcAAgAJAAAAAAAAAAAAAAACAAAABwABAAMADQAAAAUABwAEAAgAAAALAAgACQABAAAAAAAJAA\ -UAAAAIAAEAAAAGAAAACAAAAAcAAAACAAIABQAEAAUAAAAAAAEAEwAIAAAAAAABAAAACgAAAAYAAAAA\ -AAAAAAAMAAIABAACAAAAAAADAAAABAAAAAMAAgAHAAEAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAQAAA\ -ABAAAAAgAAAAAAAgAHAAAABAAAAAEAAQABAAkAAgACAAYAAwAAAAAAAAABAAYABQACAAAAAAAEAAEA\ -AgARAAEAAAAAAAEAAQAFAAAAAQAAAAcAAAAAAAAAAAADAA4AAAAAAAMAAAAAAAAAAgABAAAAEAAAAA\ -AAAAACAAAAAgACAAYAAAAJAAAABgAAAAEABgAFAAEAAQACAAgAAgADAAEABAABAAAAAAANAAIAAAAA\ -AAEALwABAAIAAQAGABUAAAAAAAAADAAEAAAAAAAAAAAAGgAAAAAAAAAAAAMABwAAAAkAAgABAAAAAQ\ -ABAAAAAAAAAAMAAAACAAAACgAAAAAAAQAAAA4AAgACAAkAAgALAAIAAQADAAEAAAAAAAoAAwABAAEA\ -AgACAAIAAAACAAkAAAAAAAEABgABAAAABwAYAAEAAAAHAAEAAQAAABkAAAAAAAAAAAAAAAAAAAAAAA\ -MAAAAAAAAAAAAAAAQAAgAAAAAAAQAAAAsAAQAFAAAAAAAAAAMAAgAGAAIAAQAFAAEABgADAAEAAgAB\ -AAEAHAAGAAIAAgADAAEACAAAAAIAAAABAAMAAQAWAAYACwAAAAQABAABAAIAAAAAAAAAAAAEAAAABA\ -AAAAAAAAAWAAAAAAAAAAAAAwAAAAAAAAABAAAABAAJAA8ABQAAAAEAAQAIAAAAAQAAAAAAAQACAAEA\ -AQABAAAAAQAAAAgAAQACAAEAAwACAAAAAgAEAAEAAQAEAAAADwAAAAAAAAACAAkAAQAAAAIAAAACAA\ -QAAQAAAAcABQADAAIACgACAAMAAAAFAAAAAAAAAAYAAgAKAAAAAQAGAAUAAAACAAMAAQAIAAIAAAAB\ -AAAAFAAAAAEAAgAFAAAAAQABAAAAAQAAAAIACQAAAAMAAQAAAA0AAQAAAAAAAQAEAAAAAAAAAAAAAA\ -ACAA4AAAACABcABQAAAAAAAQACAAgAAAABAAkAAwAAAAEABwAAAAQAAQAIAAAAAAAAAAEAAAAAAAAA\ -AgACAAUAAAAFAAQAAQAAAAMAAAACAAIAAwABAA8AAQADAAIAAAAAAAAAAQAFAAAAAgAHAAAAAAAAAA\ -AAAQAAAAAACAAGAAAAAAABAAAAAAAKAAQABQAAAAAAAAABAAAAAgAAAAAAAAAEAAAACQABAAEAAAAG\ -AAAAAAAQAAEAAgAFAAEAAQAAAAAABAAAAAIAAgACAAAAAAABAAEAAwABAAMAAAADAAAAAAAAAAAAAQ\ -AGAAQAAQABAAIACAADAAMAAAAAAAQAAgABAA4AIAAAAAEAAQAMAAAAAAAAAAQAAAACAAAAAAAAAAQA\ -CgACAAEABAAGAAAAAAAAAAYABgAAAAMAAAAEAAEABwABAAYACAABAAcAAQABAAAAAQACAAMAAAAGAA\ -AAAAABAAgAAAADAAEAAQAGAAIAAAACAAQABgABAAQAAwAGAAEAAwACAAQAAgAAAAYAAgAAAAUAAQAB\ -AAIAAAABAAIAAQABAAIAAgAHAAMAAwAAAAEABwABAA4AAAABAAAACwAAAAEAAgABAAEAAwAAAAEAAA\ -AAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAEAAgAAAAAAAwAGAAMAAgAGAAAAAQADAAEAAgABAAIA\ -AwAAAAMAAQACAAQAAwAAAAAAEAABAAIAAAABAAAAAwABAAIAAQABAAEAAAABAAAAAQAAAAAAAAACAA\ -AAAAAFAAUAAQAAAAAAAAAAAAAAAQAFAAAAAAAAAAAAAAAAAAAAAAAAAAIABAACAAEAAQAAAAIAAAAA\ -AAEAAAAHAAsAAwABAAIAAQACAAEABwABAAQAAQABAAAAAQAAAAEAAwABAAIAAgAFAAEAAQAJAAEAAQ\ -ABAAAAAgADAAEAAAAAAAgAAQAAAAAAAAAAAAAAAAAAAAMAAAAAAAAABQAAAAQAAAAAAAAAAQADAAEA\ -AAABAAEAAwABAAAAAAAAAAMABAAJAAYAAAAJAAYAAgABAAMAAQABAAIABAACAAMAAgAAAAYAAQAAAA\ -IAAAAAAAUACgABAAAAAAAEAAAAAAAEAAAAAQACAAEAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAA\ -AAAADQAAAAAAAwADAAAAAQACAAEAAAADAAAAAQAAAAAAAAADAAAAAQACAAEAAAAEAAIAAAABAAMAAA\ -ACAAMABQAFAAAAAAAFAAEAAQAQAAEAAwACAAAAAQABAAMAAQAGAAUAAQACAAEAAgAAAAMAAAABAAAA\ -AAAAAAEAAAAAAAMABwABAAIAAwAAAAYAAgABAAAAAAABAAAAAgABAAAAAwABAAEAAwAAAAIAAQABAA\ -IAAQAAAAAAAQAAAAMAAAAAAAIAAwAAAAIAAAACAAEAAAADAAAAAQAAAAAABQACAAIAAgAAAAIABwAF\ -AAMAAQAAAAoAAQABAAQAAAAGAAAAAAAAAAAAAAABAAEAAQACAAAAAwABAAEAAQADAAMAAQAEAAEAAA\ -ABAAEAAQADAAEABQAAAAIAAAABAAEAAAAEAAAAAgABAAAAAAAAAAQAAgAAAAAAAAAAAAQAAgADAAAA\ -AAAAAAAAAQAAAAoAAQACAAIAAQADAAAABgABAAMABgAAAAIAAAAAAAEAAAAEAAUABAABAAIAAAADAA\ -AAAQACAAQAAQAAAAMAAAAAAAAAAAABAAEAAQABAAEAAwAAAAEAAQAAAAMAAAABAAQACgAAAAMABAAF\ -AAUABwADAAMAAgAAAAEAAgACAAQAAAABAAAAAAAAAAIAAAAAAAkAAwAQAAEAAAACAAAAAQAEAAAABQ\ -ACAAAABQAAAAEAAQAEAAAABwAGAAQAAAAAAAEABwAAAAIAAwAAAAAAAAAAAAAAAQAAAAAAAAAAAAMA\ -AAABAAUAAgAGAAEAAgAFAAYAAgAEAAAAAwABAAIAAQABAAAAAAACAAEAAwAGAAEAAQABAAMABwAAAA\ -AAAAACAAQAAAABAAEAAwABAAEAAgAAAAEAAAAFAAIABQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF\ -AAAABwAAAAAAAAAAAAQAAAACAAQAAAAAAAAAAQAAAAAAAgAAAAAAAQAAAAEAAQABAAQAAgALAAEAAA\ -AAAAEABAACAAAAAQAEAAEAAgACAAEAAgACAAAAAAAAAAUAAgACAAAAAAAEAAQABQACAAAAAAANAAAA\ -AAAAAAAAAAACAAAABgAAAAMAAAAAAAAAAQACAAEAAQACAAkAAwAAAAAAAwAAAAEAAQABAAIAAAACAA\ -MAAQAEAAAAAgAHAAEAAAACAAEAAQABAAIAAAAFAAMAAAAAAAEAAAAFAAAAAQAAAAcAAAAAAAIAAQAB\ -AAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAABAAEAAAAAAABAAIABgAAAAAAAgABAAIAAA\ -ABAAAAAgACAAIABgABAAEABwAAAAEAAgAFAAEAAgABAAEAAQADAAIAAgABAAQAAAAAAAAABAABAAEA\ -AAACAAAAAQADAAAAAQACAAAA7gQAAJoCAgBp+AIAmQsBALIwAACpCAIALh8AAAoGAwAgAQAApgACAA\ -X5AADmCAEA6PkAAMkJAQA6HgAA0gMCAGX5AABGCQEAvR4AAPYEAgA6+AIAagsBAAEBAABsAAIAhvkA\ -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\ -ACAwAAZQAAAAgDAABpAAAAAAMAAGkAAAABAwAAaQAAAAIDAABpAAAACAMAAG4AAAADAwAAbwAAAAAD\ -AABvAAAAAQMAAG8AAAACAwAAbwAAAAMDAABvAAAACAMAAHUAAAAAAwAAdQAAAAEDAAB1AAAAAgMAAH\ -UAAAAIAwAAeQAAAAEDAAB5AAAACAMAAEEAAAAEAwAAYQAAAAQDAABBAAAABgMAAGEAAAAGAwAAQQAA\ -ACgDAABhAAAAKAMAAEMAAAABAwAAYwAAAAEDAABDAAAAAgMAAGMAAAACAwAAQwAAAAcDAABjAAAABw\ -MAAEMAAAAMAwAAYwAAAAwDAABEAAAADAMAAGQAAAAMAwAARQAAAAQDAABlAAAABAMAAEUAAAAGAwAA\ -ZQAAAAYDAABFAAAABwMAAGUAAAAHAwAARQAAACgDAABlAAAAKAMAAEUAAAAMAwAAZQAAAAwDAABHAA\ -AAAgMAAGcAAAACAwAARwAAAAYDAABnAAAABgMAAEcAAAAHAwAAZwAAAAcDAABHAAAAJwMAAGcAAAAn\ -AwAASAAAAAIDAABoAAAAAgMAAEkAAAADAwAAaQAAAAMDAABJAAAABAMAAGkAAAAEAwAASQAAAAYDAA\ -BpAAAABgMAAEkAAAAoAwAAaQAAACgDAABJAAAABwMAAEoAAAACAwAAagAAAAIDAABLAAAAJwMAAGsA\ -AAAnAwAATAAAAAEDAABsAAAAAQMAAEwAAAAnAwAAbAAAACcDAABMAAAADAMAAGwAAAAMAwAATgAAAA\ -EDAABuAAAAAQMAAE4AAAAnAwAAbgAAACcDAABOAAAADAMAAG4AAAAMAwAATwAAAAQDAABvAAAABAMA\ -AE8AAAAGAwAAbwAAAAYDAABPAAAACwMAAG8AAAALAwAAUgAAAAEDAAByAAAAAQMAAFIAAAAnAwAAcg\ -AAACcDAABSAAAADAMAAHIAAAAMAwAAUwAAAAEDAABzAAAAAQMAAFMAAAACAwAAcwAAAAIDAABTAAAA\ -JwMAAHMAAAAnAwAAUwAAAAwDAABzAAAADAMAAFQAAAAnAwAAdAAAACcDAABUAAAADAMAAHQAAAAMAw\ -AAVQAAAAMDAAB1AAAAAwMAAFUAAAAEAwAAdQAAAAQDAABVAAAABgMAAHUAAAAGAwAAVQAAAAoDAAB1\ -AAAACgMAAFUAAAALAwAAdQAAAAsDAABVAAAAKAMAAHUAAAAoAwAAVwAAAAIDAAB3AAAAAgMAAFkAAA\ -ACAwAAeQAAAAIDAABZAAAACAMAAFoAAAABAwAAegAAAAEDAABaAAAABwMAAHoAAAAHAwAAWgAAAAwD\ -AAB6AAAADAMAAE8AAAAbAwAAbwAAABsDAABVAAAAGwMAAHUAAAAbAwAAQQAAAAwDAABhAAAADAMAAE\ -kAAAAMAwAAaQAAAAwDAABPAAAADAMAAG8AAAAMAwAAVQAAAAwDAAB1AAAADAMAAFUAAAAIAwAABAMA\ -AHUAAAAIAwAABAMAAFUAAAAIAwAAAQMAAHUAAAAIAwAAAQMAAFUAAAAIAwAADAMAAHUAAAAIAwAADA\ -MAAFUAAAAIAwAAAAMAAHUAAAAIAwAAAAMAAEEAAAAIAwAABAMAAGEAAAAIAwAABAMAAEEAAAAHAwAA\ -BAMAAGEAAAAHAwAABAMAAMYAAAAEAwAA5gAAAAQDAABHAAAADAMAAGcAAAAMAwAASwAAAAwDAABrAA\ -AADAMAAE8AAAAoAwAAbwAAACgDAABPAAAAKAMAAAQDAABvAAAAKAMAAAQDAAC3AQAADAMAAJICAAAM\ -AwAAagAAAAwDAABHAAAAAQMAAGcAAAABAwAATgAAAAADAABuAAAAAAMAAEEAAAAKAwAAAQMAAGEAAA\ -AKAwAAAQMAAMYAAAABAwAA5gAAAAEDAADYAAAAAQMAAPgAAAABAwAAQQAAAA8DAABhAAAADwMAAEEA\ -AAARAwAAYQAAABEDAABFAAAADwMAAGUAAAAPAwAARQAAABEDAABlAAAAEQMAAEkAAAAPAwAAaQAAAA\ -8DAABJAAAAEQMAAGkAAAARAwAATwAAAA8DAABvAAAADwMAAE8AAAARAwAAbwAAABEDAABSAAAADwMA\ -AHIAAAAPAwAAUgAAABEDAAByAAAAEQMAAFUAAAAPAwAAdQAAAA8DAABVAAAAEQMAAHUAAAARAwAAUw\ -AAACYDAABzAAAAJgMAAFQAAAAmAwAAdAAAACYDAABIAAAADAMAAGgAAAAMAwAAQQAAAAcDAABhAAAA\ -BwMAAEUAAAAnAwAAZQAAACcDAABPAAAACAMAAAQDAABvAAAACAMAAAQDAABPAAAAAwMAAAQDAABvAA\ -AAAwMAAAQDAABPAAAABwMAAG8AAAAHAwAATwAAAAcDAAAEAwAAbwAAAAcDAAAEAwAAWQAAAAQDAAB5\ -AAAABAMAAAADAAABAwAAEwMAAAgDAAABAwAAuQIAADsAAACoAAAAAQMAAJEDAAABAwAAtwAAAJUDAA\ -ABAwAAlwMAAAEDAACZAwAAAQMAAJ8DAAABAwAApQMAAAEDAACpAwAAAQMAALkDAAAIAwAAAQMAAJkD\ -AAAIAwAApQMAAAgDAACxAwAAAQMAALUDAAABAwAAtwMAAAEDAAC5AwAAAQMAAMUDAAAIAwAAAQMAAL\ -kDAAAIAwAAxQMAAAgDAAC/AwAAAQMAAMUDAAABAwAAyQMAAAEDAADSAwAAAQMAANIDAAAIAwAAFQQA\ -AAADAAAVBAAACAMAABMEAAABAwAABgQAAAgDAAAaBAAAAQMAABgEAAAAAwAAIwQAAAYDAAAYBAAABg\ -MAADgEAAAGAwAANQQAAAADAAA1BAAACAMAADMEAAABAwAAVgQAAAgDAAA6BAAAAQMAADgEAAAAAwAA\ -QwQAAAYDAAB0BAAADwMAAHUEAAAPAwAAFgQAAAYDAAA2BAAABgMAABAEAAAGAwAAMAQAAAYDAAAQBA\ -AACAMAADAEAAAIAwAAFQQAAAYDAAA1BAAABgMAANgEAAAIAwAA2QQAAAgDAAAWBAAACAMAADYEAAAI\ -AwAAFwQAAAgDAAA3BAAACAMAABgEAAAEAwAAOAQAAAQDAAAYBAAACAMAADgEAAAIAwAAHgQAAAgDAA\ -A+BAAACAMAAOgEAAAIAwAA6QQAAAgDAAAtBAAACAMAAE0EAAAIAwAAIwQAAAQDAABDBAAABAMAACME\ -AAAIAwAAQwQAAAgDAAAjBAAACwMAAEMEAAALAwAAJwQAAAgDAABHBAAACAMAACsEAAAIAwAASwQAAA\ -gDAAAnBgAAUwYAACcGAABUBgAASAYAAFQGAAAnBgAAVQYAAEoGAABUBgAA1QYAAFQGAADBBgAAVAYA\ -ANIGAABUBgAAKAkAADwJAAAwCQAAPAkAADMJAAA8CQAAFQkAADwJAAAWCQAAPAkAABcJAAA8CQAAHA\ -kAADwJAAAhCQAAPAkAACIJAAA8CQAAKwkAADwJAAAvCQAAPAkAAMcJAAC+CQAAxwkAANcJAAChCQAA\ -vAkAAKIJAAC8CQAArwkAALwJAAAyCgAAPAoAADgKAAA8CgAAFgoAADwKAAAXCgAAPAoAABwKAAA8Cg\ -AAKwoAADwKAABHCwAAVgsAAEcLAAA+CwAARwsAAFcLAAAhCwAAPAsAACILAAA8CwAAkgsAANcLAADG\ -CwAAvgsAAMcLAAC+CwAAxgsAANcLAABGDAAAVgwAAL8MAADVDAAAxgwAANUMAADGDAAA1gwAAMYMAA\ -DCDAAAxgwAAMIMAADVDAAARg0AAD4NAABHDQAAPg0AAEYNAABXDQAA2Q0AAMoNAADZDQAAzw0AANkN\ -AADPDQAAyg0AANkNAADfDQAAQg8AALcPAABMDwAAtw8AAFEPAAC3DwAAVg8AALcPAABbDwAAtw8AAE\ -APAAC1DwAAcQ8AAHIPAABxDwAAdA8AALIPAACADwAAsw8AAIAPAABxDwAAgA8AAJIPAAC3DwAAnA8A\ -ALcPAAChDwAAtw8AAKYPAAC3DwAAqw8AALcPAACQDwAAtQ8AACUQAAAuEAAABRsAADUbAAAHGwAANR\ -sAAAkbAAA1GwAACxsAADUbAAANGwAANRsAABEbAAA1GwAAOhsAADUbAAA8GwAANRsAAD4bAAA1GwAA\ -PxsAADUbAABCGwAANRsAAEEAAAAlAwAAYQAAACUDAABCAAAABwMAAGIAAAAHAwAAQgAAACMDAABiAA\ -AAIwMAAEIAAAAxAwAAYgAAADEDAABDAAAAJwMAAAEDAABjAAAAJwMAAAEDAABEAAAABwMAAGQAAAAH\ -AwAARAAAACMDAABkAAAAIwMAAEQAAAAxAwAAZAAAADEDAABEAAAAJwMAAGQAAAAnAwAARAAAAC0DAA\ -BkAAAALQMAAEUAAAAEAwAAAAMAAGUAAAAEAwAAAAMAAEUAAAAEAwAAAQMAAGUAAAAEAwAAAQMAAEUA\ -AAAtAwAAZQAAAC0DAABFAAAAMAMAAGUAAAAwAwAARQAAACcDAAAGAwAAZQAAACcDAAAGAwAARgAAAA\ -cDAABmAAAABwMAAEcAAAAEAwAAZwAAAAQDAABIAAAABwMAAGgAAAAHAwAASAAAACMDAABoAAAAIwMA\ -AEgAAAAIAwAAaAAAAAgDAABIAAAAJwMAAGgAAAAnAwAASAAAAC4DAABoAAAALgMAAEkAAAAwAwAAaQ\ -AAADADAABJAAAACAMAAAEDAABpAAAACAMAAAEDAABLAAAAAQMAAGsAAAABAwAASwAAACMDAABrAAAA\ -IwMAAEsAAAAxAwAAawAAADEDAABMAAAAIwMAAGwAAAAjAwAATAAAACMDAAAEAwAAbAAAACMDAAAEAw\ -AATAAAADEDAABsAAAAMQMAAEwAAAAtAwAAbAAAAC0DAABNAAAAAQMAAG0AAAABAwAATQAAAAcDAABt\ -AAAABwMAAE0AAAAjAwAAbQAAACMDAABOAAAABwMAAG4AAAAHAwAATgAAACMDAABuAAAAIwMAAE4AAA\ -AxAwAAbgAAADEDAABOAAAALQMAAG4AAAAtAwAATwAAAAMDAAABAwAAbwAAAAMDAAABAwAATwAAAAMD\ -AAAIAwAAbwAAAAMDAAAIAwAATwAAAAQDAAAAAwAAbwAAAAQDAAAAAwAATwAAAAQDAAABAwAAbwAAAA\ -QDAAABAwAAUAAAAAEDAABwAAAAAQMAAFAAAAAHAwAAcAAAAAcDAABSAAAABwMAAHIAAAAHAwAAUgAA\ -ACMDAAByAAAAIwMAAFIAAAAjAwAABAMAAHIAAAAjAwAABAMAAFIAAAAxAwAAcgAAADEDAABTAAAABw\ -MAAHMAAAAHAwAAUwAAACMDAABzAAAAIwMAAFMAAAABAwAABwMAAHMAAAABAwAABwMAAFMAAAAMAwAA\ -BwMAAHMAAAAMAwAABwMAAFMAAAAjAwAABwMAAHMAAAAjAwAABwMAAFQAAAAHAwAAdAAAAAcDAABUAA\ -AAIwMAAHQAAAAjAwAAVAAAADEDAAB0AAAAMQMAAFQAAAAtAwAAdAAAAC0DAABVAAAAJAMAAHUAAAAk\ -AwAAVQAAADADAAB1AAAAMAMAAFUAAAAtAwAAdQAAAC0DAABVAAAAAwMAAAEDAAB1AAAAAwMAAAEDAA\ -BVAAAABAMAAAgDAAB1AAAABAMAAAgDAABWAAAAAwMAAHYAAAADAwAAVgAAACMDAAB2AAAAIwMAAFcA\ -AAAAAwAAdwAAAAADAABXAAAAAQMAAHcAAAABAwAAVwAAAAgDAAB3AAAACAMAAFcAAAAHAwAAdwAAAA\ -cDAABXAAAAIwMAAHcAAAAjAwAAWAAAAAcDAAB4AAAABwMAAFgAAAAIAwAAeAAAAAgDAABZAAAABwMA\ -AHkAAAAHAwAAWgAAAAIDAAB6AAAAAgMAAFoAAAAjAwAAegAAACMDAABaAAAAMQMAAHoAAAAxAwAAaA\ -AAADEDAAB0AAAACAMAAHcAAAAKAwAAeQAAAAoDAAB/AQAABwMAAEEAAAAjAwAAYQAAACMDAABBAAAA\ -CQMAAGEAAAAJAwAAQQAAAAIDAAABAwAAYQAAAAIDAAABAwAAQQAAAAIDAAAAAwAAYQAAAAIDAAAAAw\ -AAQQAAAAIDAAAJAwAAYQAAAAIDAAAJAwAAQQAAAAIDAAADAwAAYQAAAAIDAAADAwAAQQAAACMDAAAC\ -AwAAYQAAACMDAAACAwAAQQAAAAYDAAABAwAAYQAAAAYDAAABAwAAQQAAAAYDAAAAAwAAYQAAAAYDAA\ -AAAwAAQQAAAAYDAAAJAwAAYQAAAAYDAAAJAwAAQQAAAAYDAAADAwAAYQAAAAYDAAADAwAAQQAAACMD\ -AAAGAwAAYQAAACMDAAAGAwAARQAAACMDAABlAAAAIwMAAEUAAAAJAwAAZQAAAAkDAABFAAAAAwMAAG\ -UAAAADAwAARQAAAAIDAAABAwAAZQAAAAIDAAABAwAARQAAAAIDAAAAAwAAZQAAAAIDAAAAAwAARQAA\ -AAIDAAAJAwAAZQAAAAIDAAAJAwAARQAAAAIDAAADAwAAZQAAAAIDAAADAwAARQAAACMDAAACAwAAZQ\ -AAACMDAAACAwAASQAAAAkDAABpAAAACQMAAEkAAAAjAwAAaQAAACMDAABPAAAAIwMAAG8AAAAjAwAA\ -TwAAAAkDAABvAAAACQMAAE8AAAACAwAAAQMAAG8AAAACAwAAAQMAAE8AAAACAwAAAAMAAG8AAAACAw\ -AAAAMAAE8AAAACAwAACQMAAG8AAAACAwAACQMAAE8AAAACAwAAAwMAAG8AAAACAwAAAwMAAE8AAAAj\ -AwAAAgMAAG8AAAAjAwAAAgMAAE8AAAAbAwAAAQMAAG8AAAAbAwAAAQMAAE8AAAAbAwAAAAMAAG8AAA\ -AbAwAAAAMAAE8AAAAbAwAACQMAAG8AAAAbAwAACQMAAE8AAAAbAwAAAwMAAG8AAAAbAwAAAwMAAE8A\ -AAAbAwAAIwMAAG8AAAAbAwAAIwMAAFUAAAAjAwAAdQAAACMDAABVAAAACQMAAHUAAAAJAwAAVQAAAB\ -sDAAABAwAAdQAAABsDAAABAwAAVQAAABsDAAAAAwAAdQAAABsDAAAAAwAAVQAAABsDAAAJAwAAdQAA\ -ABsDAAAJAwAAVQAAABsDAAADAwAAdQAAABsDAAADAwAAVQAAABsDAAAjAwAAdQAAABsDAAAjAwAAWQ\ -AAAAADAAB5AAAAAAMAAFkAAAAjAwAAeQAAACMDAABZAAAACQMAAHkAAAAJAwAAWQAAAAMDAAB5AAAA\ -AwMAALEDAAATAwAAsQMAABQDAACxAwAAEwMAAAADAACxAwAAFAMAAAADAACxAwAAEwMAAAEDAACxAw\ -AAFAMAAAEDAACxAwAAEwMAAEIDAACxAwAAFAMAAEIDAACRAwAAEwMAAJEDAAAUAwAAkQMAABMDAAAA\ -AwAAkQMAABQDAAAAAwAAkQMAABMDAAABAwAAkQMAABQDAAABAwAAkQMAABMDAABCAwAAkQMAABQDAA\ -BCAwAAtQMAABMDAAC1AwAAFAMAALUDAAATAwAAAAMAALUDAAAUAwAAAAMAALUDAAATAwAAAQMAALUD\ -AAAUAwAAAQMAAJUDAAATAwAAlQMAABQDAACVAwAAEwMAAAADAACVAwAAFAMAAAADAACVAwAAEwMAAA\ -EDAACVAwAAFAMAAAEDAAC3AwAAEwMAALcDAAAUAwAAtwMAABMDAAAAAwAAtwMAABQDAAAAAwAAtwMA\ -ABMDAAABAwAAtwMAABQDAAABAwAAtwMAABMDAABCAwAAtwMAABQDAABCAwAAlwMAABMDAACXAwAAFA\ -MAAJcDAAATAwAAAAMAAJcDAAAUAwAAAAMAAJcDAAATAwAAAQMAAJcDAAAUAwAAAQMAAJcDAAATAwAA\ -QgMAAJcDAAAUAwAAQgMAALkDAAATAwAAuQMAABQDAAC5AwAAEwMAAAADAAC5AwAAFAMAAAADAAC5Aw\ -AAEwMAAAEDAAC5AwAAFAMAAAEDAAC5AwAAEwMAAEIDAAC5AwAAFAMAAEIDAACZAwAAEwMAAJkDAAAU\ -AwAAmQMAABMDAAAAAwAAmQMAABQDAAAAAwAAmQMAABMDAAABAwAAmQMAABQDAAABAwAAmQMAABMDAA\ -BCAwAAmQMAABQDAABCAwAAvwMAABMDAAC/AwAAFAMAAL8DAAATAwAAAAMAAL8DAAAUAwAAAAMAAL8D\ -AAATAwAAAQMAAL8DAAAUAwAAAQMAAJ8DAAATAwAAnwMAABQDAACfAwAAEwMAAAADAACfAwAAFAMAAA\ -ADAACfAwAAEwMAAAEDAACfAwAAFAMAAAEDAADFAwAAEwMAAMUDAAAUAwAAxQMAABMDAAAAAwAAxQMA\ -ABQDAAAAAwAAxQMAABMDAAABAwAAxQMAABQDAAABAwAAxQMAABMDAABCAwAAxQMAABQDAABCAwAApQ\ -MAABQDAAClAwAAFAMAAAADAAClAwAAFAMAAAEDAAClAwAAFAMAAEIDAADJAwAAEwMAAMkDAAAUAwAA\ -yQMAABMDAAAAAwAAyQMAABQDAAAAAwAAyQMAABMDAAABAwAAyQMAABQDAAABAwAAyQMAABMDAABCAw\ -AAyQMAABQDAABCAwAAqQMAABMDAACpAwAAFAMAAKkDAAATAwAAAAMAAKkDAAAUAwAAAAMAAKkDAAAT\ -AwAAAQMAAKkDAAAUAwAAAQMAAKkDAAATAwAAQgMAAKkDAAAUAwAAQgMAALEDAAAAAwAAsQMAAAEDAA\ -C1AwAAAAMAALUDAAABAwAAtwMAAAADAAC3AwAAAQMAALkDAAAAAwAAuQMAAAEDAAC/AwAAAAMAAL8D\ -AAABAwAAxQMAAAADAADFAwAAAQMAAMkDAAAAAwAAyQMAAAEDAACxAwAAEwMAAEUDAACxAwAAFAMAAE\ -UDAACxAwAAEwMAAAADAABFAwAAsQMAABQDAAAAAwAARQMAALEDAAATAwAAAQMAAEUDAACxAwAAFAMA\ -AAEDAABFAwAAsQMAABMDAABCAwAARQMAALEDAAAUAwAAQgMAAEUDAACRAwAAEwMAAEUDAACRAwAAFA\ -MAAEUDAACRAwAAEwMAAAADAABFAwAAkQMAABQDAAAAAwAARQMAAJEDAAATAwAAAQMAAEUDAACRAwAA\ -FAMAAAEDAABFAwAAkQMAABMDAABCAwAARQMAAJEDAAAUAwAAQgMAAEUDAAC3AwAAEwMAAEUDAAC3Aw\ -AAFAMAAEUDAAC3AwAAEwMAAAADAABFAwAAtwMAABQDAAAAAwAARQMAALcDAAATAwAAAQMAAEUDAAC3\ -AwAAFAMAAAEDAABFAwAAtwMAABMDAABCAwAARQMAALcDAAAUAwAAQgMAAEUDAACXAwAAEwMAAEUDAA\ -CXAwAAFAMAAEUDAACXAwAAEwMAAAADAABFAwAAlwMAABQDAAAAAwAARQMAAJcDAAATAwAAAQMAAEUD\ -AACXAwAAFAMAAAEDAABFAwAAlwMAABMDAABCAwAARQMAAJcDAAAUAwAAQgMAAEUDAADJAwAAEwMAAE\ -UDAADJAwAAFAMAAEUDAADJAwAAEwMAAAADAABFAwAAyQMAABQDAAAAAwAARQMAAMkDAAATAwAAAQMA\ -AEUDAADJAwAAFAMAAAEDAABFAwAAyQMAABMDAABCAwAARQMAAMkDAAAUAwAAQgMAAEUDAACpAwAAEw\ -MAAEUDAACpAwAAFAMAAEUDAACpAwAAEwMAAAADAABFAwAAqQMAABQDAAAAAwAARQMAAKkDAAATAwAA\ -AQMAAEUDAACpAwAAFAMAAAEDAABFAwAAqQMAABMDAABCAwAARQMAAKkDAAAUAwAAQgMAAEUDAACxAw\ -AABgMAALEDAAAEAwAAsQMAAAADAABFAwAAsQMAAEUDAACxAwAAAQMAAEUDAACxAwAAQgMAALEDAABC\ -AwAARQMAAJEDAAAGAwAAkQMAAAQDAACRAwAAAAMAAJEDAAABAwAAkQMAAEUDAAC5AwAAqAAAAEIDAA\ -C3AwAAAAMAAEUDAAC3AwAARQMAALcDAAABAwAARQMAALcDAABCAwAAtwMAAEIDAABFAwAAlQMAAAAD\ -AACVAwAAAQMAAJcDAAAAAwAAlwMAAAEDAACXAwAARQMAAL8fAAAAAwAAvx8AAAEDAAC/HwAAQgMAAL\ -kDAAAGAwAAuQMAAAQDAAC5AwAACAMAAAADAAC5AwAACAMAAAEDAAC5AwAAQgMAALkDAAAIAwAAQgMA\ -AJkDAAAGAwAAmQMAAAQDAACZAwAAAAMAAJkDAAABAwAA/h8AAAADAAD+HwAAAQMAAP4fAABCAwAAxQ\ -MAAAYDAADFAwAABAMAAMUDAAAIAwAAAAMAAMUDAAAIAwAAAQMAAMEDAAATAwAAwQMAABQDAADFAwAA\ -QgMAAMUDAAAIAwAAQgMAAKUDAAAGAwAApQMAAAQDAAClAwAAAAMAAKUDAAABAwAAoQMAABQDAACoAA\ -AAAAMAAKgAAAABAwAAYAAAAMkDAAAAAwAARQMAAMkDAABFAwAAyQMAAAEDAABFAwAAyQMAAEIDAADJ\ -AwAAQgMAAEUDAACfAwAAAAMAAJ8DAAABAwAAqQMAAAADAACpAwAAAQMAAKkDAABFAwAAtAAAAAIgAA\ -ADIAAAqQMAAEsAAABBAAAACgMAAJAhAAA4AwAAkiEAADgDAACUIQAAOAMAANAhAAA4AwAA1CEAADgD\ -AADSIQAAOAMAAAMiAAA4AwAACCIAADgDAAALIgAAOAMAACMiAAA4AwAAJSIAADgDAAA8IgAAOAMAAE\ -MiAAA4AwAARSIAADgDAABIIgAAOAMAAD0AAAA4AwAAYSIAADgDAABNIgAAOAMAADwAAAA4AwAAPgAA\ -ADgDAABkIgAAOAMAAGUiAAA4AwAAciIAADgDAABzIgAAOAMAAHYiAAA4AwAAdyIAADgDAAB6IgAAOA\ -MAAHsiAAA4AwAAgiIAADgDAACDIgAAOAMAAIYiAAA4AwAAhyIAADgDAACiIgAAOAMAAKgiAAA4AwAA\ -qSIAADgDAACrIgAAOAMAAHwiAAA4AwAAfSIAADgDAACRIgAAOAMAAJIiAAA4AwAAsiIAADgDAACzIg\ -AAOAMAALQiAAA4AwAAtSIAADgDAAAIMAAACTAAAN0qAAA4AwAASzAAAJkwAABNMAAAmTAAAE8wAACZ\ -MAAAUTAAAJkwAABTMAAAmTAAAFUwAACZMAAAVzAAAJkwAABZMAAAmTAAAFswAACZMAAAXTAAAJkwAA\ -BfMAAAmTAAAGEwAACZMAAAZDAAAJkwAABmMAAAmTAAAGgwAACZMAAAbzAAAJkwAABvMAAAmjAAAHIw\ -AACZMAAAcjAAAJowAAB1MAAAmTAAAHUwAACaMAAAeDAAAJkwAAB4MAAAmjAAAHswAACZMAAAezAAAJ\ -owAABGMAAAmTAAAJ0wAACZMAAAqzAAAJkwAACtMAAAmTAAAK8wAACZMAAAsTAAAJkwAACzMAAAmTAA\ -ALUwAACZMAAAtzAAAJkwAAC5MAAAmTAAALswAACZMAAAvTAAAJkwAAC/MAAAmTAAAMEwAACZMAAAxD\ -AAAJkwAADGMAAAmTAAAMgwAACZMAAAzzAAAJkwAADPMAAAmjAAANIwAACZMAAA0jAAAJowAADVMAAA\ -mTAAANUwAACaMAAA2DAAAJkwAADYMAAAmjAAANswAACZMAAA2zAAAJowAACmMAAAmTAAAO8wAACZMA\ -AA8DAAAJkwAADxMAAAmTAAAPIwAACZMAAA/TAAAJkwAABIjAAA9GYAAMqOAADIjAAA0W4AADJOAADl\ -UwAAnJ8AAJyfAABRWQAA0ZEAAIdVAABIWQAA9mEAAGl2AACFfwAAP4YAALqHAAD4iAAAj5AAAAJqAA\ -AbbQAA2XAAAN5zAAA9hAAAapEAAPGZAACCTgAAdVMAAARrAAAbcgAALYYAAB6eAABQXQAA628AAM2F\ -AABkiQAAyWIAANiBAAAfiAAAyl4AABdnAABqbQAA/HIAAM6QAACGTwAAt1EAAN5SAADEZAAA02oAAB\ -ByAADndgAAAYAAAAaGAABchgAA740AADKXAABvmwAA+p0AAIx4AAB/eQAAoH0AAMmDAAAEkwAAf54A\ -ANaKAADfWAAABF8AAGB8AAB+gAAAYnIAAMp4AADCjAAA95YAANhYAABiXAAAE2oAANptAAAPbwAAL3\ -0AADd+AABLlgAA0lIAAIuAAADcUQAAzFEAABx6AAC+fQAA8YMAAHWWAACAiwAAz2IAAAJqAAD+igAA\ -OU4AAOdbAAASYAAAh3MAAHB1AAAXUwAA+3gAAL9PAACpXwAADU4AAMxsAAB4ZQAAIn0AAMNTAABeWA\ -AAAXcAAEmEAACqigAAumsAALCPAACIbAAA/mIAAOWCAACgYwAAZXUAAK5OAABpUQAAyVEAAIFoAADn\ -fAAAb4IAANKKAADPkQAA9VIAAEJUAABzWQAA7F4AAMVlAAD+bwAAKnkAAK2VAABqmgAAl54AAM6eAA\ -CbUgAAxmYAAHdrAABijwAAdF4AAJBhAAAAYgAAmmQAACNvAABJcQAAiXQAAMp5AAD0fQAAb4AAACaP\ -AADuhAAAI5AAAEqTAAAXUgAAo1IAAL1UAADIcAAAwogAAKqKAADJXgAA9V8AAHtjAACuawAAPnwAAH\ -VzAADkTgAA+VYAAOdbAAC6XQAAHGAAALJzAABpdAAAmn8AAEaAAAA0kgAA9pYAAEiXAAAYmAAAi08A\ -AK55AAC0kQAAuJYAAOFgAACGTgAA2lAAAO5bAAA/XAAAmWUAAAJqAADOcQAAQnYAAPyEAAB8kAAAjZ\ -8AAIhmAAAulgAAiVIAAHtnAADzZwAAQW0AAJxuAAAJdAAAWXUAAGt4AAAQfQAAXpgAAG1RAAAuYgAA\ -eJYAACtQAAAZXQAA6m0AACqPAACLXwAARGEAABdoAACHcwAAhpYAAClSAAAPVAAAZVwAABNmAABOZw\ -AAqGgAAOVsAAAGdAAA4nUAAHl/AADPiAAA4YgAAMyRAADilgAAP1MAALpuAAAdVAAA0HEAAJh0AAD6\ -hQAAo5YAAFecAACfngAAl2cAAMttAADogQAAy3oAACB7AACSfAAAwHIAAJlwAABYiwAAwE4AADaDAA\ -A6UgAAB1IAAKZeAADTYgAA1nwAAIVbAAAebQAAtGYAADuPAABMiAAATZYAAIuJAADTXgAAQFEAAMBV\ -AABaWAAAdGYAAN5RAAAqcwAAynYAADx5AABeeQAAZXkAAI95AABWlwAAvnwAAL1/AAAShgAA+IoAAD\ -iQAAD9kAAA75gAAPyYAAAomQAAtJ0AAN6QAAC3lgAArk8AAOdQAABNUQAAyVIAAORSAABRUwAAnVUA\ -AAZWAABoVgAAQFgAAKhYAABkXAAAblwAAJRgAABoYQAAjmEAAPJhAABPZQAA4mUAAJFmAACFaAAAd2\ -0AABpuAAAibwAAbnEAACtyAAAidAAAkXgAAD55AABJeQAASHkAAFB5AABWeQAAXXkAAI15AACOeQAA\ -QHoAAIF6AADAewAA9H0AAAl+AABBfgAAcn8AAAWAAADtgQAAeYIAAHmCAABXhAAAEIkAAJaJAAABiw\ -AAOYsAANOMAAAIjQAAto8AADiQAADjlgAA/5cAADuYAAB1YAAA7kICABiCAAAmTgAAtVEAAGhRAACA\ -TwAARVEAAIBRAADHUgAA+lIAAJ1VAABVVQAAmVUAAOJVAABaWAAAs1gAAERZAABUWQAAYloAAChbAA\ -DSXgAA2V4AAGlfAACtXwAA2GAAAE5hAAAIYQAAjmEAAGBhAADyYQAANGIAAMRjAAAcZAAAUmQAAFZl\ -AAB0ZgAAF2cAABtnAABWZwAAeWsAALprAABBbQAA224AAMtuAAAibwAAHnAAAG5xAACndwAANXIAAK\ -9yAAAqcwAAcXQAAAZ1AAA7dQAAHXYAAB92AADKdgAA23YAAPR2AABKdwAAQHcAAMx4AACxegAAwHsA\ -AHt8AABbfQAA9H0AAD5/AAAFgAAAUoMAAO+DAAB5hwAAQYkAAIaJAACWiQAAv4oAAPiKAADLigAAAY\ -sAAP6KAADtigAAOYsAAIqLAAAIjQAAOI8AAHKQAACZkQAAdpIAAHyWAADjlgAAVpcAANuXAAD/lwAA\ -C5gAADuYAAASmwAAnJ8AAEooAgBEKAIA1TMCAJ07AAAYQAAAOUAAAElSAgDQXAIA034CAEOfAACOnw\ -AA2QUAALQFAADyBQAAtwUAAOkFAADBBQAA6QUAAMIFAADpBQAAvAUAAMEFAADpBQAAvAUAAMIFAADQ\ -BQAAtwUAANAFAAC4BQAA0AUAALwFAADRBQAAvAUAANIFAAC8BQAA0wUAALwFAADUBQAAvAUAANUFAA\ -C8BQAA1gUAALwFAADYBQAAvAUAANkFAAC8BQAA2gUAALwFAADbBQAAvAUAANwFAAC8BQAA3gUAALwF\ -AADgBQAAvAUAAOEFAAC8BQAA4wUAALwFAADkBQAAvAUAAOYFAAC8BQAA5wUAALwFAADoBQAAvAUAAO\ -kFAAC8BQAA6gUAALwFAADVBQAAuQUAANEFAAC/BQAA2wUAAL8FAADkBQAAvwUAAJkQAQC6EAEAmxAB\ -ALoQAQClEAEAuhABADERAQAnEQEAMhEBACcRAQBHEwEAPhMBAEcTAQBXEwEAuRQBALoUAQC5FAEAsB\ -QBALkUAQC9FAEAuBUBAK8VAQC5FQEArxUBADUZAQAwGQEAV9EBAGXRAQBY0QEAZdEBAFjRAQBl0QEA\ -btEBAFjRAQBl0QEAb9EBAFjRAQBl0QEAcNEBAFjRAQBl0QEAcdEBAFjRAQBl0QEActEBALnRAQBl0Q\ -EAutEBAGXRAQC50QEAZdEBAG7RAQC60QEAZdEBAG7RAQC50QEAZdEBAG/RAQC60QEAZdEBAG/RAQA9\ -TgAAOE4AAEFOAAAiAQIAYE8AAK5PAAC7TwAAAlAAAHpQAACZUAAA51AAAM9QAACeNAAAOgYCAE1RAA\ -BUUQAAZFEAAHdRAAAcBQIAuTQAAGdRAACNUQAASwUCAJdRAACkUQAAzE4AAKxRAAC1UQAA35ECAPVR\ -AAADUgAA3zQAADtSAABGUgAAclIAAHdSAAAVNQAAx1IAAMlSAADkUgAA+lIAAAVTAAAGUwAAF1MAAE\ -lTAABRUwAAWlMAAHNTAAB9UwAAf1MAAH9TAAB/UwAALAoCAHBwAADKUwAA31MAAGMLAgDrUwAA8VMA\ -AAZUAACeVAAAOFQAAEhUAABoVAAAolQAAPZUAAAQVQAAU1UAAGNVAACEVQAAhFUAAJlVAACrVQAAs1\ -UAAMJVAAAWVwAABlYAABdXAABRVgAAdFYAAAdSAADuWAAAzlcAAPRXAAANWAAAi1cAADJYAAAxWAAA\ -rFgAAOQUAgDyWAAA91gAAAZZAAAaWQAAIlkAAGJZAACoFgIA6hYCAOxZAAAbWgAAJ1oAANhZAABmWg\ -AA7jYAAPw2AAAIWwAAPlsAAD5bAADIGQIAw1sAANhbAADnWwAA81sAABgbAgD/WwAABlwAAFNfAAAi\ -XAAAgTcAAGBcAABuXAAAwFwAAI1cAADkHQIAQ10AAOYdAgBuXQAAa10AAHxdAADhXQAA4l0AAC84AA\ -D9XQAAKF4AAD1eAABpXgAAYjgAAIMhAgB8OAAAsF4AALNeAAC2XgAAyl4AAJKjAgD+XgAAMSMCADEj\ -AgABggAAIl8AACJfAADHOAAAuDICANphAgBiXwAAa18AAOM4AACaXwAAzV8AANdfAAD5XwAAgWAAAD\ -o5AAAcOQAAlGAAANQmAgDHYAAASGEAAExhAABOYQAATGEAAHphAACOYQAAsmEAAKRhAACvYQAA3mEA\ -APJhAAD2YQAAEGIAABtiAABdYgAAsWIAANRiAABQYwAADCsCAD1jAAD8YgAAaGMAAINjAADkYwAA8S\ -sCACJkAADFYwAAqWMAAC46AABpZAAAfmQAAJ1kAAB3ZAAAbDoAAE9lAABsZQAACjACAONlAAD4ZgAA\ -SWYAABk7AACRZgAACDsAAOQ6AACSUQAAlVEAAABnAACcZgAArYAAANlDAAAXZwAAG2cAACFnAABeZw\ -AAU2cAAMMzAgBJOwAA+mcAAIVnAABSaAAAhWgAAG00AgCOaAAAH2gAABRpAACdOwAAQmkAAKNpAADq\ -aQAAqGoAAKM2AgDbagAAGDwAACFrAACnOAIAVGsAAE48AAByawAAn2sAALprAAC7awAAjToCAAsdAg\ -D6OgIATmwAALw8AgC/bAAAzWwAAGdsAAAWbQAAPm0AAHdtAABBbQAAaW0AAHhtAACFbQAAHj0CADRt\ -AAAvbgAAbm4AADM9AADLbgAAx24AANE+AgD5bQAAbm8AAF4/AgCOPwIAxm8AADlwAAAecAAAG3AAAJ\ -Y9AABKcAAAfXAAAHdwAACtcAAAJQUCAEVxAABjQgIAnHEAAKtDAgAocgAANXIAAFByAAAIRgIAgHIA\ -AJVyAAA1RwIAFEgCAHpzAACLcwAArD4AAKVzAAC4PgAAuD4AAEd0AABcdAAAcXQAAIV0AADKdAAAGz\ -8AACR1AAA2TAIAPnUAAJJMAgBwdQAAnyECABB2AAChTwIAuE8CAERQAgD8PwAACEAAAPR2AADzUAIA\ -8lACABlRAgAzUQIAHncAAB93AAAfdwAASncAADlAAACLdwAARkAAAJZAAAAdVAIATngAAIx4AADMeA\ -AA40AAACZWAgBWeQAAmlYCAMVWAgCPeQAA63kAAC9BAABAegAASnoAAE96AAB8WQIAp1oCAKdaAgDu\ -egAAAkIAAKtbAgDGewAAyXsAACdCAACAXAIA0nwAAKBCAADofAAA43wAAAB9AACGXwIAY30AAAFDAA\ -DHfQAAAn4AAEV+AAA0QwAAKGICAEdiAgBZQwAA2WICAHp/AAA+YwIAlX8AAPp/AAAFgAAA2mQCACNl\ -AgBggAAAqGUCAHCAAABfMwIA1UMAALKAAAADgQAAC0QAAD6BAAC1WgAAp2cCALVnAgCTMwIAnDMCAA\ -GCAAAEggAAno8AAGtEAACRggAAi4IAAJ2CAACzUgAAsYIAALOCAAC9ggAA5oIAADxrAgDlggAAHYMA\ -AGODAACtgwAAI4MAAL2DAADngwAAV4QAAFODAADKgwAAzIMAANyDAAA2bAIAa20CANVsAgArRQAA8Y\ -QAAPOEAAAWhQAAynMCAGSFAAAsbwIAXUUAAGFFAACxbwIA0nACAGtFAABQhgAAXIYAAGeGAABphgAA\ -qYYAAIiGAAAOhwAA4oYAAHmHAAAohwAAa4cAAIaHAADXRQAA4YcAAAGIAAD5RQAAYIgAAGOIAABndg\ -IA14gAAN6IAAA1RgAA+ogAALs0AACueAIAZnkCAL5GAADHRgAAoIoAAO2KAACKiwAAVYwAAKh8AgCr\ -jAAAwYwAABuNAAB3jQAAL38CAAQIAgDLjQAAvI0AAPCNAADeCAIA1I4AADiPAADShQIA7YUCAJSQAA\ -DxkAAAEZEAAC6HAgAbkQAAOJIAANeSAADYkgAAfJIAAPmTAAAVlAAA+osCAIuVAACVSQAAt5UAAHeN\ -AgDmSQAAw5YAALJdAAAjlwAARZECABqSAgBuSgAAdkoAAOCXAAAKlAIAskoAAJaUAgALmAAAC5gAAC\ -mYAAC2lQIA4pgAADNLAAApmQAAp5kAAMKZAAD+mQAAzksAADCbAgASmwAAQJwAAP2cAADOTAAA7UwA\ -AGedAADOoAIA+EwAAAWhAgAOogIAkaICALueAABWTQAA+Z4AAP6eAAAFnwAAD58AABafAAA7nwAAAK\ -YCAH4vLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi91\ -bmljb2RlLW5vcm1hbGl6YXRpb24tMC4xLjIyL3NyYy9sb29rdXBzLnJzAADw+xEAYgAAADYAAAAaAA\ -AAAAAAAAMAAAAAAAAAAQBsAQ4A7wQCAAAAAAAAAAIAAAABAAMAlwBlAQAAAACFAQAAAQAAAPQDAAAA\ -AAAAAAAEAJEAAADdAAEAbAIAAAsAAADgALwAAwATAgEAAADIAAMAHAD8AAAAAAARADIBAAAAAAsBkA\ -B0BNYAAAAAAAMADQAFAAAABgAZAFQAMgFMABcABgBIAAMAAAAAAAYADAADAAAAsQABAIwAAAAbAMAA\ -BwACAAAAEgAAAAAABgABAL4ByAAAAH0AAAAKAAAAAAC0AAIACAAFAEQB2wABAAYAAAAAAA0AFAAAAE\ -8AAgAAAAMAMgAAAAUADgB8ACwABgAAAAAABwAAAF8ABQAPAGcAAAABADQAAAAAAAAAkAASAAAAAAAe\ -AEwAiQCoAAAABAAfAAAAAAABAJkAGAANAAMABwAFABkAAgAAAAQAAQADAJAACwApAFUAAABRAAAAAg\ -DQAHoAZgAAAJUABwAAAAAAAAAAAAEAAACNAA8AIQBWAAoAGwAAAAAACAAHAHwABQAAAGIAAgATAAYA\ -AABPAAAAAAAyAC8ABAANAKAABAAIACQAHwAAAAAAggBFAAAAYQAAAB0AAQAAAAEAAAAHABcACwAAAA\ -AAAAALAAgACAAAAAAAPQAAAJYAAAAAAAAACAAAAAAAAAAEAAAAAwAHACwAAAAAABQAJAACAAIAAAAC\ -AAAAEgABAAAAAgAAACUACgABAGYACwAIAAAADAAQAAIAAwAIAAQABgABAAQA4wAjACAABwAAAA8AHg\ -AjAD0ABAAAAAEAAAADACUAAAABADEAnQAAAAAABAABAAAAAAAIAAAAAAAmAAAAAAACAAAAAgAAAAMA\ -AAAbAAAAAgAAAAEACgADAAEAAgAMAAwAAQABAAAAEQAEAD0AAgAbAAIAAAAMAAYABgAAAAAAAwAAAA\ -kALAAAAAkANwAtAAAAEgAjAAAAAAAcAAAAJgAQABUAAgAAAAsAAAAEABQABQATAAcAHAADADYAAAAI\ -AAEAGQACAAAAAQAAAAAABAABAAgAAgAKAAYAEwAAAAAAAAAvAAEAAAAWAAUADAAMAAEAEAADAA4AAA\ -ABAA0AKAAAAAAAAQAAAAAABAAQACEAAAABAAMAAAAjAAAAAQAAAAAAAAANAAEAAAAAAAYAawAAABQA\ -AAAAAAYAEgAAAAIAAAAqAAEACwABAAYACQAIAAEAAAArAAAACAAHAAAADwAWAAAAAABEAAAAAQAAAA\ -AADAAZACUAAgAfAA8ADAABAB8ACgAAADgADgAPAAwAJQAAAAYADgAAAAgAAAACAAAAAAABAAkAAQAW\ -AAAAAAAAAAMAFQBiAAEAAAAAAAIAAAAAAD0AAAADAAEAAQABAAAAAQAAACkABAAsAAEAAAAAAAAAAA\ -AiAAAAFAAoAAAABwAEAAMABgAAAAEADQAqAAAAAABEAAAACAAAAAIAAQALAAAAAAAAAAAABAADABwA\ -BQAAAAYAAgAAABEABgAHAAAAAgAoAAcAHQALAAUALgARAAAAAQAMAAAABwAvAAAAAAAFAAoAAAAIAA\ -YAAAAAAAcAAQAIACAADAAAABoABQAAACYAJgACAAsACAAAAAQABQACAAAABQASAAAABQAAAAEABgAJ\ -AAEAAwAVAAMAAAAAAAIAAAADAAAAFgAAABAAAwAAABsAAgAAAAkAAAAJAAAACQAAAAAAAQABAAwAJg\ -ABAAAAAAAEAAAADAAeAAAAAQA2AAYAAwAAAAAAAQAAAAYAAAAAAAAACAAMAAAAAAABAAAAAAAEAAIA\ -BwABAAIABwANAAIAAAAAAAAAAgAFAAAACAAFAAAAAAADAAYAAAAAAAgAAQAFAAEAAwADABAACwAHAA\ -AADwARAAAAGAAAAAAADwACAAcAAQAAAAAAAAAMABgAAAAXAAAAAQAAACYAAwAAABsAAAAIAAMAAwAA\ -AAAAAgAGAAAACwAbAAkAAAADAAAAAAABAAEAAQAFAAAABgAAAAQAAwAAAAAAAAAAAAAACQAJAAAAAg\ -AHAA4AIwADAAEAAAAAAA8AAAAIACIADgAQAAcAAwAMABkAAQAKAAIAAAADABgAAQAWAAoAAAACAAgA\ -AAAjAAAAAAAGAAIAAAAEAA0AGwAAAAQAOAAAAAAAEQAOAAAAAAAAAAkAAAAhABMAAgAYAAQAAQAQAA\ -AAAgAAAAYAFAAKAAAAAAAEAA4AAAAAAAUABAAAACAAHQABAAAACQAAAAEAAQAEAAIAAAABAAAAAAAk\ -AAEAAAAJAAgAAAABAAoAAQAAAAQAAAATAAUAAAABAAAAAQAAAAAAAgAEAAAAAAAFAAEACQACAAUAAA\ -AAAAAAAAAAAAoAAAAAABAAAQAEAAAAAAABAAQAAAABAAIABAADAAAABAAUAAcACgACAAYAAAACAAEA\ -CAAHAAAAAAAAABQAAQAQAAAAAAAFAAEABgAFAAMAAAAJAAIABAACAAAAAAAMABkAAAAAAAAAAQAAAA\ -AADwAIAA0AAAADAAEAAAAJABQAFwAAAAAAAAAAAAMAAQAAAAUAFQABABkAAQABAAEAAQADAAAABgAD\ -AAAAEQAFAAAABAAMAAMAAAAHAAAAAAADAAQAAwALAAAAAAAGAAgAAwABAAAAAAABAA0AAwAAAAcAAA\ -ABAAAAAAAAAAkAAQAAAAIAAQAJAAoACAABAAcAAwAAAAMAAAAAAAQAAAAEAAEACwAAABMABgAHAAAA\ -AAAIAAcABwAAAAMAAAACAAMAAAABAAEAAQAbAAMAAgAJAAIAAQACAAAABAABAAAABgAAAAAAAQAFAA\ -AADwABAAYACAAEAAAAAAADAAsAAgAFAAEAAgATABMAAAAJAAIAAAAAAAAAAAAAAAAAAAAAAAQAAgAh\ -AAAABgADAAEAAQAFAAMAAAAQACIACwAAAAgAAAAAAAMABAABABoAAgAAAAAAAAACAAEAAAAAAAIAAA\ -AAABIAAQAAAAIAAAAAAAEAAAACACEAAAACAA0AAQADAAUAAQAMABAAAAAkAAAAAAAGAAYAGwABAA0A\ -AAABAAAAAQAAAAAABwACAAAABQAkAAYAAQAOAAAACwAOAAcAAAAAAAAAAwAAAAAAAgAYAAMAAwABAA\ -AAAAAEAAQAAAABAAAAFAAGAAsAAAACAAEAAgAGAAYAAAAGAAAAAAABAAIAAgABAAIAAAABAAgAAQAM\ -AAAABwACAAMAAQAAAAYAAQAHABEAAwAAAAEACgACAAIACAAGAAgAAAAAAAQACAABAAcAAgACAAYAAA\ -AGAAAAAAAHAAEADgACAAIAMgAHAAsABAAEAAAABgAAAAgAAAAAAAAACQACABsAAAAAAAAAAQAMAAIA\ -AQACAA8AAAAAAAAAAwAMAAUAAAAAAAAACwAAAAIAAQADAAAAAQAGAAoAAQAAAAgAAAAEAAEAAAABAA\ -AADgACAAEAAQABAAcAAQADAAEAAgABAAMAAgAAABEAAwACAAMAAAAAAAMABAAAAAAAAQAgAAAAAAAB\ -AAAAAAAHAAIAAAASAAAACgABAAIAAAAAAAAAAAACAAAAAAAEAA8AAAAHAAQAAgASAAAAAQAEAAIAAw\ -AAAAEAFwABAAEABQAAAAEAAAAAAAsAAAABAAAAAAAAAAQAAAAAAAkAAAAEAAAAAAAEAAoAAAAAAAYA\ -BwACAAMAAAAAAAAAAAAGAAsAAAAAAAAAAAAAAAEAAAAMAAgAAQANAAsAAgAAAAAAAAABAAUAAQAAAA\ -AAAgADAAMAAAAAAAgAAAABAAkAEQABAAwAAAAAAAAABAAAAAAAAAABAAEAFwABAAAABQALAAEABAAB\ -AAYAHQAAAAEABAACAAkAAgAPABQAAgABAAcAAQABAAcAAgAAAAAAAAAAAAQAEwACAAEAAQADAAAAAg\ -ACAAAAAwABAAAABQABAAEAAAABAAEAAgAAAAAAAwAAAAoABgABAAYABwABAAAAAAACAAcABAAAAAAA\ -DAACAAAACgABAAAAAAAKAAAABgADAAEAAAANAAMABQAAAAIACgAAAAsAAQAGACIAAAAFAAEAAAACAA\ -AAAAASAAQAAgAAAAAADAAAAAEAAAAAAAAAAAAAAAAAAAAAAAEABAACAAEACAAEAAYAAQAAAAMACgAA\ -AAUAAQAAAAAAAwAAAAYAAAAAAAMAAAAEAAAAAAAAAA4AAQABAAAABgAAAAgAAAAAAAoAAQAAAAQAAA\ -AEAAEAAAAAAAAAAAAAAAEAAAAXAAQAAAALAAMABQAEAAAAAwAPAAYAAQABAAcABAADAAEAAwAEAAEA\ -AQAAAAAAAAACAAEAAAAFAAAAAgAAAAAAAwABAAAABQAAAA0ABgABAAAAAAAHAAAAAAAKAAMAAgAKAA\ -EABwABAAAAAQAAAAUAAwAAAAUAAgABAAAAAgAAAAEAAQAEAAkABQABAAEABgAAAAkAAQAKAAIAAgAA\ -AAAAAgACAAcACQAAABAAHAAEAAAAAAADAAMADQABAAMAAAAAAAwABwABAAMABwAIAAMABgAAAAMAAQ\ -ABAAAAAQABAAQACgAFAAAAAQATAAIAAAAAAAEAAgABAA4AAQAMAAEAAQAJAAAAAAABAAwAAAABAAAA\ -AgAEAAMAAQAMAAwAAwAAAAwACwAAAAEAAQAKAAEACwAAAAAAHAAAAAAAAAABAAIACAADAAAABQAAAA\ -MAAwAAAAQAAAACAAYADwAAAAEABAAAAAAAEQALAAQABQAEAAAADQAEAAQAAwABAAAAAAACAAAAAAAA\ -AAoAAQATAAYAAAAHAAcAAQABAAQABAAAAAAAAwAAAAcAAAACAAEAAAACAAAAAgACAAAAAAAAAAMABA\ -AFABAAAAAHAAAACgARAAAAAAABAAEAAAAAAAAAAAAAAAEACwABAAAAAAAAAAIAAgAAAAoAAAADAAAA\ -BwAGAAEAAAAEAAIAAgAAAAEAAgADAAQAAAAEAAAAAQAAAAIAEAAFAAAAAAABAAAACgAEAAAABAAAAA\ -AAAAAGAAsACwAFAAAAAAAAAAAAAAAJAAAAAgAEAAAABQACAAAAAwAAAAAAAAACAAAAAQAAAAQABgAB\ -AAQAAQAAAAEABwAAAAYAAAAAAAIAAgAAAAYABQAIAAAAAQACAAEAAAAEAAcAAAABAAcAAAACAAIACw\ -ABAAIABgABAAAAAAAAAAAAAgAEAAAAAAADAAEABwAAAAEAAQAAAAEAAAAAAAsAAAAAAAAABgAAAAEA\ -AAAEAAwAAgAAAAEAAQACAAQADgAAAAAAAAAAAAAAAgABAAAABAADABgAAAABAAAAAgAFAAEAAgAAAA\ -EAAwAEAAAAAAAFAAIAAAAAAAEAAAAAAAAAAAAAAAIAAwAAAAEAAAAAAAEAAwAAAAAAAAABAAEAAAAA\ -ABQABAALABIAAAAAAAIAAAABAAAAAAAAAAEAAwALAAMAAAABAAIAAAAQAA0AAQABAAcABgABAAEAAg\ -AAAAAAAQADAAIAAQADAAEAAAAAAAAACAAEAAIABgAJAAUAAAAWAAEABAAAAAMAAwAEAAEAAAAAAAIA\ -AAABAAAAAgANAAIAAAALAAYACgADAAAABQAAAAEAAAAAAAAABQABAAAACgAAAAIAAAACAAIABQABAA\ -IAAAACAAIABQAAAAEAAAAAAAMAAAADAAIAAAAAAAAAAQABAAEAAAAZAAAAAAADAAAAAQAAAAEABQAE\ -AAEABAAAAAEAAwAEAAYAAQABAAQAAwAEAAAABAAFAAkAAAABAAkAAgABAAAAAAAAAAwAAQAAAAAAAw\ -ACAAMAAgABAAAABAAAAAQABwADAAEAAAABAAEAAAAAAAEABQAGAAkAAAACABsAAgAAAAkAAAAAAAYA\ -AAAAAAAAAwAAAAEABgACAAEABgABAAsAAwAGAAAAAAAAAAAAAAAAAAIAAAAAAAIAAgAAAAAAAAAAAA\ -AAAwAAAAMAAwAFAAsAAAAAAAEAAAAAAAIACwADAAIAEwABAAEACAADAAIABQABAAAAAQABAAUAAAAB\ -AAMABAAFAAAAAgAAAA4AAQAAAAAABQADAAUAAAABAAIAAAAAAAgAAAABAAIAAAAJAAAAAAAAAAYAAA\ -ADAAMACQAHAAAACAAAAAEAAwAAAAMABQAEAAEAAgACAAAABAADAAAABwAFAAMAAQAAAAQAAQAAAAMA\ -AAAIAAIABAAEAAAACQABAAQAAAAGAAQAAAAAAAAACgABAAAAAQAGAAAAAQAGAAMAAgACAAAAAQABAA\ -MABQAAAAAAAgAEAAEAAAAAAAEABgAAAAUABAAEAAEAAQAEAAEAAgAAAAIAAgAFAA0AAQAAAAIAAAAA\ -AAIAAAABAAEAAAAAAAEABAAAAAAABwAAAAUAAAAAAAAAAQAEAAAACQACAAQAAAAAAAEAAAADAAAACg\ -AAAAMAAQAFAAEAAAAAAAUACgABAAIAAAACAAQACQABAAQABQAAAAAAAQADAAkAAgAEAAgAAgAAAAAA\ -AwAIAAAAAAACAAEAAwACAAEAAAAAAAAAAQAEAAEAAQAAAAEAAAABAAAAAAABAAIACQABAAEABQACAA\ -AAAQAAAAAAAgAAAAMAAAABAAIAAAAEAAIABAACAAIAAAABAAoAAAABAAAAAAAAAAAAAwAAAAMAAgAF\ -AAEAAgABAAIAAAAEAAIAAQAAAAEAAAAAAAEAAQADAAAAAAAAAAAAAAACAAAAAgADAAIAAAAAAAAABQ\ -ABAAAAAQABAAAABwABAAEAAwAAAAMAAQABAAAACQACAAAAAQABAAcABgACAAAABgAAAAQAAAACAAcA\ -BAABAAEAAAAAAAIAAQAAAAQAAwAAAAoAAAAAAAIAAgABAAEAAwACAAEAAQAAAAMAAAAAAAAAAQAGAA\ -EAAwALAAsAAAAEAAEAAAAAAAAAAAAFAAIAAAAAAAEABAAAAAAAAQAAAAAABQADAAIAAwAIAAEABgAB\ -AAIAAAABAAQABQACAAAABgABAAEAAAACAAEAAgACAAAAAAAEAAAAAQACAAAABQACAAIABgABAAUAAw\ -ACAAUAAgABAAEAAAAEAAIAAAACAAAAAAAFAAAAAAAAAAEAAAACAAAAAAAAABUAAgAAAAAAAQACAAcA\ -AwADAAMAAQABAAIABgABAAcAAAAAAAAAAAAEAAAAAwACAAAAAAABAAEAAwABAAEAAAABAAEABQAAAA\ -EABQAEAAgAAgABAAAAAQAAAAEAAQAAAAEAAAAAAAAAAAABAAMAAQABAAAAAAAEAAMAAQAEAAAABAAA\ -AAIAAgADAAAAAQAAAAAAAAABAAUAAAACAAQAAgABAAYAAAABAA8AAAACAAUAAAACAAAAAwAEAAIABA\ -ADAAUAAQABAAEABwAAAAcAAgAAAAAABgAAAAAAAgAAAAAAAAAAAAMAAAADAAAAAQACAAcAAQAHAAMA\ -AQAAAAIAAgAAAAUAAAADAAAAAAACAAEAAQABAAIAAgACAAAAAQAEAAIAAQACAAMAAAACAAIABAACAA\ -EAAgACAAAAAAABAAAAAgAAAAcAAQAAAAEABAADAAMAAQAFAAEAAAAAAAMAAAABAAYAAQAAAAIADQAB\ -AAAAAAAEAAAADwACAAAACgACAAEAAAABAAAABAACAAAAAwAAAAIAAAAHAAIAAQAAAAAAAwAAAAQAAA\ -AAAAsAAAAAAAoABQAJAAEAAAADAAEAAAAMAAAAAAAAAAAAAAABAAAAAgABAAIAAAABAAMAAgAAAAcA\ -AAAAAAMAAAAAAAYAAgAAAAAABgAAAAAABAACAAEAAQAAAAcAAgAEAAEABQAAAAAAAQACAAAAAgADAA\ -gAAQAGAAIAAQABAAAAAwAFAAAAAgABAAEAAwAAAAMABwABAAAAAQAAAAAAAAADAAAAAQABAAEAAQAG\ -AAUAAAAFAAQAAAAAAAMAAQACAAAAAAACAAAAAgACAAAAAgAAAAQAAQAAAAIAAAAEAAEAAQAEAAIAAQ\ -AAAAEAAgABAAMAAAAAAAEAAAALAAIAAAAAAAMAAwAFAAEAAQAAAAEAAgABAAAAAAAAAAgAAQAEAAMA\ -AAAHAAEAAwABAAAAAgADAAMAAQAAAAEAAQABAAAAAgAAAAEAAQABAAQAAgAFAAAAAQABAAAAAQACAA\ -AAAAAAAAAAAwABAAIAAQADAAEAAAAFAAIABAAAAAMAAAAAAAEAAwAHAAAABgAEAAAAAQACAAIAAwAF\ -AAAACAADAAMAAgABAAcAAgABAAEAAQABAAAACAAAAAEAAwAAAAIAAQAAAAEAAgAAAAAABgAHAAEAAA\ -ADAAAAAAAAAAEAAgAAAAAAAQABAAEAAAABAAQAAgAAAAAAAQAAAAAAAAAFAAIAAwABAAIAAAAGAAEA\ -AAABAAAAAAAAAAAAAgAAAAIAAwAAAAIABwABAAAAAAACAAAAAAAAAAAAAAABAAEAAAAAAAIAAAABAA\ -AABAACAAAAEQAFAAQAAAAEAAAAAAACAAAABwAAAAEAAAAAAAEABQABAAIAAgAOAAAAAAACAAEAAAAB\ -AAAAAwABAAIAAQAAAAoAAQAEAAAABQABAAEAAQACAAEAAQABAAAAAAABAAgAAQABAAAAAQAAAAAAAA\ -AAAAEAAwABAA8AAQACAAEAAQAAAAAAAgABAAAAAAADAAAAAQAAAAAAAQAAAAUABwACAAIABgAAAAEA\ -AAACAAEABAAAAAIAAQADAAIAAgABAAAAAwACAAQAAwABAAAAAQAAAAEAAQADAAAAAQAAAAIABgAFAA\ -EACQAAAAMAAQAAAAYAAAAAAAMAAAABAAAAAgACAAAAAwABAAAAAQAAAAAACAABAAIAAQAAAAIABAAB\ -AAIAAQAFAAAAAQACAAIAAQAAAAEAAQACAAEAAAACAAMAAQABAAMAAAABAAEAAAAFAAAAAgAGAAEAAA\ -AEAAAAAQAAAAAAAQACAAAAAwAAAAEAAQAAAAAAAgAAAAIAAAABAAAAAAAAAAIAAAAAAAEAAwACAAAA\ -AAAAAAEAAAAEAAAAAAABAAEAAAACAAAAAgABAAEAAQAAAAAAAAAAAAAACwAEAAAAAQAAAAEABQAAAA\ -EAAQAAAAUAAQAAAAIABAABAAEAAgABAAEAAQAAAAAAAAAAAAAABgAAAAIAAwAAAAEAAgADAAAAAAAD\ -AAIABAAAAAMAAAAAAAEAAAADAAAADQACAAAAAwABAAAAAAABAAEAAwAAAAEAAAAEAA0ABAABAAYAAg\ -ADAAAAAwABAAAAAgABAAIAAAABAAMAAQACAAAAAQACAAAAAwABAAEAAAABAAIAAQADAAIAAAAAAAEA\ -AQAAAAEAAQADAAQAAQACAAMAAAACAAMAAgABAAEABwACAAAAAQAAAAAAAgAAAAIABQABAAEAAAAAAA\ -EAAQACAAAAAQADAAAAAQACAAAAAAAFAAAAAgAAAAEAAAABAAMAAQAAAAAAAwAFAAUAAAABAAMAAQAC\ -AAAAAAADAAIAAAAAAAAAAAAEAAAAAQAGAAAAAQABAAIAAQAAAAEABAABAAIAAQAIAAEAAQAAAAAABA\ -AAAAAABAAAAAAAAwAAAAIAAQAHAAEAAAAGAAAAAQAAAAAAAQAAAAYAAwACAAAAAAAAAAAABQABAAAA\ -AwAAAAEAAAABAAEAAQABAAAAAAAAAAAAAAAAAAQAAAABAAAAAwACAAAAAAAAAAMACAAHAAAAAAAAAA\ -IAAQAAAAAAAAAAAAIAAAABAAIAAAABAAAAAAABAAEAAgADAAEAAQAAAAIABwAEAAAAAAAGAAAAAAAA\ -AAAAAQAAAAIAAQAAAAIAAQADAAEAAgAAAAEABAACAAIAAQAAAAIAAAAAAAAAAQAAAAYACAAFAAEAAA\ -AIAAAABgABAAAADAADAAUAAAACAAEABQABAAEABAADAAEAAQAFAAYAAQACAAcAAwACAAAAAAABAAAA\ -AQACAAEAAQABAAAAAQACAAIAAAACAAMAAQABAAAAAQAAAAEABQAFAAIAAAAAAAEAAgAEAAEAAAAAAA\ -EAAwAIAAEABgAAAAAAAwABAAEAAQABAAIAAQAAAAUAAAABAAAABQABAAQAAQAIAAAAAQAEAAAAAAAC\ -AAAAAwABAAAAAQACAAIAAAACAAAAAAABAAAABQADAAEAAgADAAEADAADAAAAAQAAAAAAAAAAAAAAAw\ -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\ -agAAAE4AAABKAAAATgAAAGoAAABuAAAAagAAAEQAAABaAAAARAAAAHoAAABkAAAAegAAAGgAAABmAg\ -AAagAAAHIAAAB5AgAAewIAAIECAAB3AAAAeQAAACAAAAAGAwAAIAAAAAcDAAAgAAAACgMAACAAAAAo\ -AwAAIAAAAAMDAAAgAAAACwMAAGMCAABsAAAAcwAAAHgAAACVAgAAIAAAAEUDAAAgAAAAAQMAACAAAA\ -AIAwAAAQMAALIDAAC4AwAApQMAAKUDAAABAwAApQMAAAgDAADGAwAAwAMAALoDAADBAwAAwgMAAJgD\ -AAC1AwAAowMAAGUFAACCBQAAJwYAAHQGAABIBgAAdAYAAMcGAAB0BgAASgYAAHQGAABNDgAAMg4AAM\ -0OAACyDgAAqw4AAJkOAACrDgAAoQ4AAAsPAACyDwAAcQ8AAIAPAACzDwAAcQ8AAIAPAADcEAAAQQAA\ -AMYAAABCAAAARAAAAEUAAACOAQAARwAAAEgAAABJAAAASgAAAEsAAABMAAAATQAAAE4AAABPAAAAIg\ -IAAFAAAABSAAAAVAAAAFUAAABXAAAAYQAAAFACAABRAgAAAh0AAGIAAABkAAAAZQAAAFkCAABbAgAA\ -XAIAAGcAAABrAAAAbQAAAEsBAABvAAAAVAIAABYdAAAXHQAAcAAAAHQAAAB1AAAAHR0AAG8CAAB2AA\ -AAJR0AALIDAACzAwAAtAMAAMYDAADHAwAAaQAAAHIAAAB1AAAAdgAAALIDAACzAwAAwQMAAMYDAADH\ -AwAAPQQAAFICAABjAAAAVQIAAPAAAABcAgAAZgAAAF8CAABhAgAAZQIAAGgCAABpAgAAagIAAHsdAA\ -CdAgAAbQIAAIUdAACfAgAAcQIAAHACAAByAgAAcwIAAHQCAAB1AgAAeAIAAIICAACDAgAAqwEAAIkC\ -AACKAgAAHB0AAIsCAACMAgAAegAAAJACAACRAgAAkgIAALgDAABhAAAAvgIAAHMAAAAHAwAAIAAAAB\ -MDAAAgAAAAEwMAACAAAABCAwAAIAAAAAgDAABCAwAAIAAAABMDAAAAAwAAIAAAABMDAAABAwAAIAAA\ -ABMDAABCAwAAIAAAABQDAAAAAwAAIAAAABQDAAABAwAAIAAAABQDAABCAwAAIAAAAAgDAAAAAwAAIA\ -AAAAgDAAABAwAAIAAAAAEDAAAgAAAAFAMAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAA\ -IAAAACAAAAAgAAAAECAAACAAAAAzAwAALgAAAC4AAAAuAAAALgAAAC4AAAAuAAAAIAAAADIgAAAyIA\ -AAMiAAADIgAAAyIAAANSAAADUgAAA1IAAANSAAADUgAAAhAAAAIQAAACAAAAAFAwAAPwAAAD8AAAA/\ -AAAAIQAAACEAAAA/AAAAMiAAADIgAAAyIAAAMiAAACAAAAAwAAAAaQAAADQAAAA1AAAANgAAADcAAA\ -A4AAAAOQAAACsAAAASIgAAPQAAACgAAAApAAAAbgAAADAAAAAxAAAAMgAAADMAAAA0AAAANQAAADYA\ -AAA3AAAAOAAAADkAAAArAAAAEiIAAD0AAAAoAAAAKQAAAGEAAABlAAAAbwAAAHgAAABZAgAAaAAAAG\ -sAAABsAAAAbQAAAG4AAABwAAAAcwAAAHQAAABSAAAAcwAAAGEAAAAvAAAAYwAAAGEAAAAvAAAAcwAA\ -AEMAAACwAAAAQwAAAGMAAAAvAAAAbwAAAGMAAAAvAAAAdQAAAJABAACwAAAARgAAAGcAAABIAAAASA\ -AAAEgAAABoAAAAJwEAAEkAAABJAAAATAAAAGwAAABOAAAATgAAAG8AAABQAAAAUQAAAFIAAABSAAAA\ -UgAAAFMAAABNAAAAVAAAAEUAAABMAAAAVAAAAE0AAABaAAAAWgAAAEIAAABDAAAAZQAAAEUAAABGAA\ -AATQAAAG8AAADQBQAA0QUAANIFAADTBQAAaQAAAEYAAABBAAAAWAAAAMADAACzAwAAkwMAAKADAAAR\ -IgAARAAAAGQAAABlAAAAaQAAAGoAAAAxAAAARCAAADcAAAAxAAAARCAAADkAAAAxAAAARCAAADEAAA\ -AwAAAAMQAAAEQgAAAzAAAAMgAAAEQgAAAzAAAAMQAAAEQgAAA1AAAAMgAAAEQgAAA1AAAAMwAAAEQg\ -AAA1AAAANAAAAEQgAAA1AAAAMQAAAEQgAAA2AAAANQAAAEQgAAA2AAAAMQAAAEQgAAA4AAAAMwAAAE\ -QgAAA4AAAANQAAAEQgAAA4AAAANwAAAEQgAAA4AAAAMQAAAEQgAABJAAAASQAAAEkAAABJAAAASQAA\ -AEkAAABJAAAAVgAAAFYAAABWAAAASQAAAFYAAABJAAAASQAAAFYAAABJAAAASQAAAEkAAABJAAAAWA\ -AAAFgAAABYAAAASQAAAFgAAABJAAAASQAAAEwAAABDAAAARAAAAE0AAABpAAAAaQAAAGkAAABpAAAA\ -aQAAAGkAAABpAAAAdgAAAHYAAAB2AAAAaQAAAHYAAABpAAAAaQAAAHYAAABpAAAAaQAAAGkAAABpAA\ -AAeAAAAHgAAAB4AAAAaQAAAHgAAABpAAAAaQAAAGwAAABjAAAAZAAAAG0AAAAwAAAARCAAADMAAAAr\ -IgAAKyIAACsiAAArIgAAKyIAAC4iAAAuIgAALiIAAC4iAAAuIgAAMQAAADIAAAAzAAAANAAAADUAAA\ -A2AAAANwAAADgAAAA5AAAAMQAAADAAAAAxAAAAMQAAADEAAAAyAAAAMQAAADMAAAAxAAAANAAAADEA\ -AAA1AAAAMQAAADYAAAAxAAAANwAAADEAAAA4AAAAMQAAADkAAAAyAAAAMAAAACgAAAAxAAAAKQAAAC\ -gAAAAyAAAAKQAAACgAAAAzAAAAKQAAACgAAAA0AAAAKQAAACgAAAA1AAAAKQAAACgAAAA2AAAAKQAA\ -ACgAAAA3AAAAKQAAACgAAAA4AAAAKQAAACgAAAA5AAAAKQAAACgAAAAxAAAAMAAAACkAAAAoAAAAMQ\ -AAADEAAAApAAAAKAAAADEAAAAyAAAAKQAAACgAAAAxAAAAMwAAACkAAAAoAAAAMQAAADQAAAApAAAA\ -KAAAADEAAAA1AAAAKQAAACgAAAAxAAAANgAAACkAAAAoAAAAMQAAADcAAAApAAAAKAAAADEAAAA4AA\ -AAKQAAACgAAAAxAAAAOQAAACkAAAAoAAAAMgAAADAAAAApAAAAMQAAAC4AAAAyAAAALgAAADMAAAAu\ -AAAANAAAAC4AAAA1AAAALgAAADYAAAAuAAAANwAAAC4AAAA4AAAALgAAADkAAAAuAAAAMQAAADAAAA\ -AuAAAAMQAAADEAAAAuAAAAMQAAADIAAAAuAAAAMQAAADMAAAAuAAAAMQAAADQAAAAuAAAAMQAAADUA\ -AAAuAAAAMQAAADYAAAAuAAAAMQAAADcAAAAuAAAAMQAAADgAAAAuAAAAMQAAADkAAAAuAAAAMgAAAD\ -AAAAAuAAAAKAAAAGEAAAApAAAAKAAAAGIAAAApAAAAKAAAAGMAAAApAAAAKAAAAGQAAAApAAAAKAAA\ -AGUAAAApAAAAKAAAAGYAAAApAAAAKAAAAGcAAAApAAAAKAAAAGgAAAApAAAAKAAAAGkAAAApAAAAKA\ -AAAGoAAAApAAAAKAAAAGsAAAApAAAAKAAAAGwAAAApAAAAKAAAAG0AAAApAAAAKAAAAG4AAAApAAAA\ -KAAAAG8AAAApAAAAKAAAAHAAAAApAAAAKAAAAHEAAAApAAAAKAAAAHIAAAApAAAAKAAAAHMAAAApAA\ -AAKAAAAHQAAAApAAAAKAAAAHUAAAApAAAAKAAAAHYAAAApAAAAKAAAAHcAAAApAAAAKAAAAHgAAAAp\ -AAAAKAAAAHkAAAApAAAAKAAAAHoAAAApAAAAQQAAAEIAAABDAAAARAAAAEUAAABGAAAARwAAAEgAAA\ -BJAAAASgAAAEsAAABMAAAATQAAAE4AAABPAAAAUAAAAFEAAABSAAAAUwAAAFQAAABVAAAAVgAAAFcA\ -AABYAAAAWQAAAFoAAABhAAAAYgAAAGMAAABkAAAAZQAAAGYAAABnAAAAaAAAAGkAAABqAAAAawAAAG\ -wAAABtAAAAbgAAAG8AAABwAAAAcQAAAHIAAABzAAAAdAAAAHUAAAB2AAAAdwAAAHgAAAB5AAAAegAA\ -ADAAAAArIgAAKyIAACsiAAArIgAAOgAAADoAAAA9AAAAPQAAAD0AAAA9AAAAPQAAAD0AAABqAAAAVg\ -AAAGEtAADNawAAn58AAABOAAAoTgAANk4AAD9OAABZTgAAhU4AAIxOAACgTgAAuk4AAD9RAABlUQAA\ -a1EAAIJRAACWUQAAq1EAAOBRAAD1UQAAAFIAAJtSAAD5UgAAFVMAABpTAAA4UwAAQVMAAFxTAABpUw\ -AAglMAALZTAADIUwAA41MAANdWAAAfVwAA61gAAAJZAAAKWQAAFVkAACdZAABzWQAAUFsAAIBbAAD4\ -WwAAD1wAACJcAAA4XAAAblwAAHFcAADbXQAA5V0AAPFdAAD+XQAAcl4AAHpeAAB/XgAA9F4AAP5eAA\ -ALXwAAE18AAFBfAABhXwAAc18AAMNfAAAIYgAANmIAAEtiAAAvZQAANGUAAIdlAACXZQAApGUAALll\ -AADgZQAA5WUAAPBmAAAIZwAAKGcAACBrAABiawAAeWsAALNrAADLawAA1GsAANtrAAAPbAAAFGwAAD\ -RsAABrcAAAKnIAADZyAAA7cgAAP3IAAEdyAABZcgAAW3IAAKxyAACEcwAAiXMAANx0AADmdAAAGHUA\ -AB91AAAodQAAMHUAAIt1AACSdQAAdnYAAH12AACudgAAv3YAAO52AADbdwAA4ncAAPN3AAA6eQAAuH\ -kAAL55AAB0egAAy3oAAPl6AABzfAAA+HwAADZ/AABRfwAAin8AAL1/AAABgAAADIAAABKAAAAzgAAA\ -f4AAAImAAADjgQAA6oEAAPOBAAD8gQAADIIAABuCAAAfggAAboIAAHKCAAB4ggAATYYAAGuGAABAiA\ -AATIgAAGOIAAB+iQAAi4kAANKJAAAAigAAN4wAAEaMAABVjAAAeIwAAJ2MAABkjQAAcI0AALONAACr\ -jgAAyo4AAJuPAACwjwAAtY8AAJGQAABJkQAAxpEAAMyRAADRkQAAd5UAAICVAAAclgAAtpYAALmWAA\ -DolgAAUZcAAF6XAABilwAAaZcAAMuXAADtlwAA85cAAAGYAAComAAA25gAAN+YAACWmQAAmZkAAKyZ\ -AAComgAA2JoAAN+aAAAlmwAAL5sAADKbAAA8mwAAWpsAAOWcAAB1ngAAf54AAKWeAAC7ngAAw54AAM\ -2eAADRngAA+Z4AAP2eAAAOnwAAE58AACCfAAA7nwAASp8AAFKfAACNnwAAnJ8AAKCfAAAgAAAAEjAA\ -AEFTAABEUwAARVMAACAAAACZMAAAIAAAAJowAACIMAAAijAAALMwAADIMAAAABEAAAERAACqEQAAAh\ -EAAKwRAACtEQAAAxEAAAQRAAAFEQAAsBEAALERAACyEQAAsxEAALQRAAC1EQAAGhEAAAYRAAAHEQAA\ -CBEAACERAAAJEQAAChEAAAsRAAAMEQAADREAAA4RAAAPEQAAEBEAABERAAASEQAAYREAAGIRAABjEQ\ -AAZBEAAGURAABmEQAAZxEAAGgRAABpEQAAahEAAGsRAABsEQAAbREAAG4RAABvEQAAcBEAAHERAABy\ -EQAAcxEAAHQRAAB1EQAAYBEAABQRAAAVEQAAxxEAAMgRAADMEQAAzhEAANMRAADXEQAA2REAABwRAA\ -DdEQAA3xEAAB0RAAAeEQAAIBEAACIRAAAjEQAAJxEAACkRAAArEQAALBEAAC0RAAAuEQAALxEAADIR\ -AAA2EQAAQBEAAEcRAABMEQAA8REAAPIRAABXEQAAWBEAAFkRAACEEQAAhREAAIgRAACREQAAkhEAAJ\ -QRAACeEQAAoREAAABOAACMTgAACU4AANtWAAAKTgAALU4AAAtOAAAydQAAWU4AABlOAAABTgAAKVkA\ -ADBXAAC6TgAAKAAAAAARAAApAAAAKAAAAAIRAAApAAAAKAAAAAMRAAApAAAAKAAAAAURAAApAAAAKA\ -AAAAYRAAApAAAAKAAAAAcRAAApAAAAKAAAAAkRAAApAAAAKAAAAAsRAAApAAAAKAAAAAwRAAApAAAA\ -KAAAAA4RAAApAAAAKAAAAA8RAAApAAAAKAAAABARAAApAAAAKAAAABERAAApAAAAKAAAABIRAAApAA\ -AAKAAAAAARAABhEQAAKQAAACgAAAACEQAAYREAACkAAAAoAAAAAxEAAGERAAApAAAAKAAAAAURAABh\ -EQAAKQAAACgAAAAGEQAAYREAACkAAAAoAAAABxEAAGERAAApAAAAKAAAAAkRAABhEQAAKQAAACgAAA\ -ALEQAAYREAACkAAAAoAAAADBEAAGERAAApAAAAKAAAAA4RAABhEQAAKQAAACgAAAAPEQAAYREAACkA\ -AAAoAAAAEBEAAGERAAApAAAAKAAAABERAABhEQAAKQAAACgAAAASEQAAYREAACkAAAAoAAAADBEAAG\ -4RAAApAAAAKAAAAAsRAABpEQAADBEAAGURAACrEQAAKQAAACgAAAALEQAAaREAABIRAABuEQAAKQAA\ -ACgAAAAATgAAKQAAACgAAACMTgAAKQAAACgAAAAJTgAAKQAAACgAAADbVgAAKQAAACgAAACUTgAAKQ\ -AAACgAAABtUQAAKQAAACgAAAADTgAAKQAAACgAAABrUQAAKQAAACgAAABdTgAAKQAAACgAAABBUwAA\ -KQAAACgAAAAIZwAAKQAAACgAAABrcAAAKQAAACgAAAA0bAAAKQAAACgAAAAoZwAAKQAAACgAAADRkQ\ -AAKQAAACgAAAAfVwAAKQAAACgAAADlZQAAKQAAACgAAAAqaAAAKQAAACgAAAAJZwAAKQAAACgAAAA+\ -eQAAKQAAACgAAAANVAAAKQAAACgAAAB5cgAAKQAAACgAAAChjAAAKQAAACgAAABdeQAAKQAAACgAAA\ -C0UgAAKQAAACgAAADjTgAAKQAAACgAAAB8VAAAKQAAACgAAABmWwAAKQAAACgAAADjdgAAKQAAACgA\ -AAABTwAAKQAAACgAAADHjAAAKQAAACgAAABUUwAAKQAAACgAAABteQAAKQAAACgAAAARTwAAKQAAAC\ -gAAADqgQAAKQAAACgAAADzgQAAKQAAAE9VAAB8XgAAh2UAAI97AABQAAAAVAAAAEUAAAAyAAAAMQAA\ -ADIAAAAyAAAAMgAAADMAAAAyAAAANAAAADIAAAA1AAAAMgAAADYAAAAyAAAANwAAADIAAAA4AAAAMg\ -AAADkAAAAzAAAAMAAAADMAAAAxAAAAMwAAADIAAAAzAAAAMwAAADMAAAA0AAAAMwAAADUAAAAAEQAA\ -AhEAAAMRAAAFEQAABhEAAAcRAAAJEQAACxEAAAwRAAAOEQAADxEAABARAAAREQAAEhEAAAARAABhEQ\ -AAAhEAAGERAAADEQAAYREAAAURAABhEQAABhEAAGERAAAHEQAAYREAAAkRAABhEQAACxEAAGERAAAM\ -EQAAYREAAA4RAABhEQAADxEAAGERAAAQEQAAYREAABERAABhEQAAEhEAAGERAAAOEQAAYREAALcRAA\ -AAEQAAaREAAAwRAABuEQAACxEAAHQRAAALEQAAbhEAAABOAACMTgAACU4AANtWAACUTgAAbVEAAANO\ -AABrUQAAXU4AAEFTAAAIZwAAa3AAADRsAAAoZwAA0ZEAAB9XAADlZQAAKmgAAAlnAAA+eQAADVQAAH\ -lyAAChjAAAXXkAALRSAADYeQAAN3UAAHNZAABpkAAAKlEAAHBTAADobAAABZgAABFPAACZUQAAY2sA\ -AApOAAAtTgAAC04AAOZdAADzUwAAO1MAAJdbAABmWwAA43YAAAFPAADHjAAAVFMAABxZAAAzAAAANg\ -AAADMAAAA3AAAAMwAAADgAAAAzAAAAOQAAADQAAAAwAAAANAAAADEAAAA0AAAAMgAAADQAAAAzAAAA\ -NAAAADQAAAA0AAAANQAAADQAAAA2AAAANAAAADcAAAA0AAAAOAAAADQAAAA5AAAANQAAADAAAAAxAA\ -AACGcAADIAAAAIZwAAMwAAAAhnAAA0AAAACGcAADUAAAAIZwAANgAAAAhnAAA3AAAACGcAADgAAAAI\ -ZwAAOQAAAAhnAAAxAAAAMAAAAAhnAAAxAAAAMQAAAAhnAAAxAAAAMgAAAAhnAABIAAAAZwAAAGUAAA\ -ByAAAAZwAAAGUAAABWAAAATAAAAFQAAABEAAAAojAAAKQwAACmMAAAqDAAAKowAACrMAAArTAAAK8w\ -AACxMAAAszAAALUwAAC3MAAAuTAAALswAAC9MAAAvzAAAMEwAADEMAAAxjAAAMgwAADKMAAAyzAAAM\ -wwAADNMAAAzjAAAM8wAADSMAAA1TAAANgwAADbMAAA3jAAAN8wAADgMAAA4TAAAOIwAADkMAAA5jAA\ -AOgwAADpMAAA6jAAAOswAADsMAAA7TAAAO8wAADwMAAA8TAAAPIwAADkTgAAjFQAAKIwAADPMAAAmj\ -AAAPwwAADIMAAAojAAAOswAADVMAAAoTAAAKIwAADzMAAA2DAAAJowAACiMAAAojAAAPwwAADrMAAA\ -pDAAAMswAADzMAAArzAAAJkwAACkMAAA8zAAAMEwAACmMAAAqTAAAPMwAACoMAAAuTAAAK8wAAD8MA\ -AAyDAAAJkwAACoMAAA/DAAAKswAAD8MAAAqjAAAPMwAAC5MAAAqjAAAPwwAADgMAAAqzAAAKQwAADq\ -MAAAqzAAAOkwAADDMAAAyDAAAKswAADtMAAA6jAAAPwwAACrMAAAmTAAAO0wAADzMAAAqzAAAJkwAA\ -DzMAAA3jAAAK0wAACZMAAAqzAAAJkwAACtMAAAmTAAAMswAAD8MAAArTAAAOUwAADqMAAA/DAAAK0w\ -AACZMAAA6zAAAL8wAACZMAAA/DAAAK0wAADtMAAArTAAAO0wAACvMAAAmTAAAOkwAADgMAAArTAAAO\ -0wAADhMAAA/DAAAMgwAADrMAAArTAAAO0wAADvMAAAwzAAAMgwAACvMAAAmTAAAOkwAADgMAAArzAA\ -AJkwAADpMAAA4DAAAMgwAADzMAAArzAAAOswAAC7MAAAmTAAAKQwAADtMAAArzAAAO0wAAD8MAAAzT\ -AAALEwAAD8MAAAuTAAALMwAADrMAAAyjAAALMwAAD8MAAA2zAAAJowAAC1MAAApDAAAK8wAADrMAAA\ -tTAAAPMwAADBMAAA/DAAAOAwAAC3MAAA6jAAAPMwAACvMAAAmTAAALswAADzMAAAwTAAALswAADzMA\ -AAyDAAAL8wAACZMAAA/DAAALkwAADGMAAAmTAAALcwAADIMAAAmTAAAOswAADIMAAA8zAAAMowAADO\ -MAAAzjAAAMMwAADIMAAAzzAAAKQwAADEMAAAzzAAAJowAAD8MAAAuzAAAPMwAADIMAAAzzAAAJowAA\ -D8MAAAxDAAAM8wAACZMAAA/DAAAOwwAADrMAAA0jAAAJowAACiMAAAuTAAAMgwAADrMAAA0jAAAJow\ -AACvMAAA6zAAANIwAACaMAAAszAAANIwAACZMAAA6zAAANUwAAChMAAA6TAAAMMwAADIMAAAmTAAAN\ -UwAACjMAAA/DAAAMgwAADVMAAAmTAAAMMwAAC3MAAApzAAAOswAADVMAAA6TAAAPMwAADYMAAArzAA\ -AL8wAAD8MAAA6zAAANgwAACaMAAAvTAAANgwAACaMAAAyzAAANIwAADYMAAA6zAAAMQwAADYMAAAmj\ -AAAPMwAAC5MAAA2DAAAJowAAD8MAAAtzAAAJkwAADYMAAAmTAAAPwwAAC/MAAA2zAAAJowAACkMAAA\ -8zAAAMgwAADbMAAAmTAAAOswAADIMAAA2zAAAPMwAADbMAAAmjAAAPMwAADIMAAAmTAAANswAAD8MA\ -AA6zAAANswAAD8MAAA8zAAAN4wAACkMAAArzAAAO0wAADeMAAApDAAAOswAADeMAAAwzAAAM8wAADe\ -MAAA6zAAAK8wAADeMAAA8zAAALcwAADnMAAA8zAAAN8wAACvMAAA7TAAAPMwAADfMAAA6jAAAN8wAA\ -DqMAAAzzAAAJkwAAD8MAAA6zAAAOEwAACrMAAAmTAAAOEwAACrMAAAmTAAAMgwAADzMAAA4TAAAPww\ -AADIMAAA6zAAAOQwAAD8MAAAyDAAAJkwAADkMAAA/DAAAOswAADmMAAAojAAAPMwAADqMAAAwzAAAM\ -gwAADrMAAA6jAAAOkwAADrMAAA0jAAAJowAAD8MAAA6zAAAPwwAADVMAAAmTAAAOswAADsMAAA4DAA\ -AOwwAADzMAAAyDAAALEwAACZMAAA8zAAAO8wAADDMAAAyDAAADAAAAC5cAAAMQAAALlwAAAyAAAAuX\ -AAADMAAAC5cAAANAAAALlwAAA1AAAAuXAAADYAAAC5cAAANwAAALlwAAA4AAAAuXAAADkAAAC5cAAA\ -MQAAADAAAAC5cAAAMQAAADEAAAC5cAAAMQAAADIAAAC5cAAAMQAAADMAAAC5cAAAMQAAADQAAAC5cA\ -AAMQAAADUAAAC5cAAAMQAAADYAAAC5cAAAMQAAADcAAAC5cAAAMQAAADgAAAC5cAAAMQAAADkAAAC5\ -cAAAMgAAADAAAAC5cAAAMgAAADEAAAC5cAAAMgAAADIAAAC5cAAAMgAAADMAAAC5cAAAMgAAADQAAA\ -C5cAAAaAAAAFAAAABhAAAAZAAAAGEAAABBAAAAVQAAAGIAAABhAAAAcgAAAG8AAABWAAAAcAAAAGMA\ -AABkAAAAbQAAAGQAAABtAAAAMgAAAGQAAABtAAAAMwAAAEkAAABVAAAAc14AABBiAAAtZgAAjFQAAC\ -dZAABjawAADmYAALtsAAAqaAAAD18AABpPAAA+eQAAcAAAAEEAAABuAAAAQQAAALwDAABBAAAAbQAA\ -AEEAAABrAAAAQQAAAEsAAABCAAAATQAAAEIAAABHAAAAQgAAAGMAAABhAAAAbAAAAGsAAABjAAAAYQ\ -AAAGwAAABwAAAARgAAAG4AAABGAAAAvAMAAEYAAAC8AwAAZwAAAG0AAABnAAAAawAAAGcAAABIAAAA\ -egAAAGsAAABIAAAAegAAAE0AAABIAAAAegAAAEcAAABIAAAAegAAAFQAAABIAAAAegAAALwDAABsAA\ -AAbQAAAGwAAABkAAAAbAAAAGsAAABsAAAAZgAAAG0AAABuAAAAbQAAALwDAABtAAAAbQAAAG0AAABj\ -AAAAbQAAAGsAAABtAAAAbQAAAG0AAAAyAAAAYwAAAG0AAAAyAAAAbQAAADIAAABrAAAAbQAAADIAAA\ -BtAAAAbQAAADMAAABjAAAAbQAAADMAAABtAAAAMwAAAGsAAABtAAAAMwAAAG0AAAAVIgAAcwAAAG0A\ -AAAVIgAAcwAAADIAAABQAAAAYQAAAGsAAABQAAAAYQAAAE0AAABQAAAAYQAAAEcAAABQAAAAYQAAAH\ -IAAABhAAAAZAAAAHIAAABhAAAAZAAAABUiAABzAAAAcgAAAGEAAABkAAAAFSIAAHMAAAAyAAAAcAAA\ -AHMAAABuAAAAcwAAALwDAABzAAAAbQAAAHMAAABwAAAAVgAAAG4AAABWAAAAvAMAAFYAAABtAAAAVg\ -AAAGsAAABWAAAATQAAAFYAAABwAAAAVwAAAG4AAABXAAAAvAMAAFcAAABtAAAAVwAAAGsAAABXAAAA\ -TQAAAFcAAABrAAAAqQMAAE0AAACpAwAAYQAAAC4AAABtAAAALgAAAEIAAABxAAAAYwAAAGMAAABjAA\ -AAZAAAAEMAAAAVIgAAawAAAGcAAABDAAAAbwAAAC4AAABkAAAAQgAAAEcAAAB5AAAAaAAAAGEAAABI\ -AAAAUAAAAGkAAABuAAAASwAAAEsAAABLAAAATQAAAGsAAAB0AAAAbAAAAG0AAABsAAAAbgAAAGwAAA\ -BvAAAAZwAAAGwAAAB4AAAAbQAAAGIAAABtAAAAaQAAAGwAAABtAAAAbwAAAGwAAABQAAAASAAAAHAA\ -AAAuAAAAbQAAAC4AAABQAAAAUAAAAE0AAABQAAAAUgAAAHMAAAByAAAAUwAAAHYAAABXAAAAYgAAAF\ -YAAAAVIgAAbQAAAEEAAAAVIgAAbQAAADEAAADlZQAAMgAAAOVlAAAzAAAA5WUAADQAAADlZQAANQAA\ -AOVlAAA2AAAA5WUAADcAAADlZQAAOAAAAOVlAAA5AAAA5WUAADEAAAAwAAAA5WUAADEAAAAxAAAA5W\ -UAADEAAAAyAAAA5WUAADEAAAAzAAAA5WUAADEAAAA0AAAA5WUAADEAAAA1AAAA5WUAADEAAAA2AAAA\ -5WUAADEAAAA3AAAA5WUAADEAAAA4AAAA5WUAADEAAAA5AAAA5WUAADIAAAAwAAAA5WUAADIAAAAxAA\ -AA5WUAADIAAAAyAAAA5WUAADIAAAAzAAAA5WUAADIAAAA0AAAA5WUAADIAAAA1AAAA5WUAADIAAAA2\ -AAAA5WUAADIAAAA3AAAA5WUAADIAAAA4AAAA5WUAADIAAAA5AAAA5WUAADMAAAAwAAAA5WUAADMAAA\ -AxAAAA5WUAAGcAAABhAAAAbAAAAEoEAABMBAAAb6cAAEMAAABGAAAAUQAAACYBAABTAQAAJ6cAADer\ -AABrAgAAUqsAAI0CAABmAAAAZgAAAGYAAABpAAAAZgAAAGwAAABmAAAAZgAAAGkAAABmAAAAZgAAAG\ -wAAABzAAAAdAAAAHMAAAB0AAAAdAUAAHYFAAB0BQAAZQUAAHQFAABrBQAAfgUAAHYFAAB0BQAAbQUA\ -AOIFAADQBQAA0wUAANQFAADbBQAA3AUAAN0FAADoBQAA6gUAACsAAADQBQAA3AUAAHEGAABxBgAAew\ -YAAHsGAAB7BgAAewYAAH4GAAB+BgAAfgYAAH4GAACABgAAgAYAAIAGAACABgAAegYAAHoGAAB6BgAA\ -egYAAH8GAAB/BgAAfwYAAH8GAAB5BgAAeQYAAHkGAAB5BgAApAYAAKQGAACkBgAApAYAAKYGAACmBg\ -AApgYAAKYGAACEBgAAhAYAAIQGAACEBgAAgwYAAIMGAACDBgAAgwYAAIYGAACGBgAAhgYAAIYGAACH\ -BgAAhwYAAIcGAACHBgAAjQYAAI0GAACMBgAAjAYAAI4GAACOBgAAiAYAAIgGAACYBgAAmAYAAJEGAA\ -CRBgAAqQYAAKkGAACpBgAAqQYAAK8GAACvBgAArwYAAK8GAACzBgAAswYAALMGAACzBgAAsQYAALEG\ -AACxBgAAsQYAALoGAAC6BgAAuwYAALsGAAC7BgAAuwYAANUGAABUBgAA1QYAAFQGAADBBgAAwQYAAM\ -EGAADBBgAAvgYAAL4GAAC+BgAAvgYAANIGAADSBgAA0gYAAFQGAADSBgAAVAYAAK0GAACtBgAArQYA\ -AK0GAADHBgAAxwYAAMYGAADGBgAAyAYAAMgGAADHBgAAdAYAAMsGAADLBgAAxQYAAMUGAADJBgAAyQ\ -YAANAGAADQBgAA0AYAANAGAABJBgAASQYAAEoGAABUBgAAJwYAAEoGAABUBgAAJwYAAEoGAABUBgAA\ -1QYAAEoGAABUBgAA1QYAAEoGAABUBgAASAYAAEoGAABUBgAASAYAAEoGAABUBgAAxwYAAEoGAABUBg\ -AAxwYAAEoGAABUBgAAxgYAAEoGAABUBgAAxgYAAEoGAABUBgAAyAYAAEoGAABUBgAAyAYAAEoGAABU\ -BgAA0AYAAEoGAABUBgAA0AYAAEoGAABUBgAA0AYAAEoGAABUBgAASQYAAEoGAABUBgAASQYAAEoGAA\ -BUBgAASQYAAMwGAADMBgAAzAYAAMwGAABKBgAAVAYAACwGAABKBgAAVAYAAC0GAABKBgAAVAYAAEUG\ -AABKBgAAVAYAAEkGAABKBgAAVAYAAEoGAAAoBgAALAYAACgGAAAtBgAAKAYAAC4GAAAoBgAARQYAAC\ -gGAABJBgAAKAYAAEoGAAAqBgAALAYAACoGAAAtBgAAKgYAAC4GAAAqBgAARQYAACoGAABJBgAAKgYA\ -AEoGAAArBgAALAYAACsGAABFBgAAKwYAAEkGAAArBgAASgYAACwGAAAtBgAALAYAAEUGAAAtBgAALA\ -YAAC0GAABFBgAALgYAACwGAAAuBgAALQYAAC4GAABFBgAAMwYAACwGAAAzBgAALQYAADMGAAAuBgAA\ -MwYAAEUGAAA1BgAALQYAADUGAABFBgAANgYAACwGAAA2BgAALQYAADYGAAAuBgAANgYAAEUGAAA3Bg\ -AALQYAADcGAABFBgAAOAYAAEUGAAA5BgAALAYAADkGAABFBgAAOgYAACwGAAA6BgAARQYAAEEGAAAs\ -BgAAQQYAAC0GAABBBgAALgYAAEEGAABFBgAAQQYAAEkGAABBBgAASgYAAEIGAAAtBgAAQgYAAEUGAA\ -BCBgAASQYAAEIGAABKBgAAQwYAACcGAABDBgAALAYAAEMGAAAtBgAAQwYAAC4GAABDBgAARAYAAEMG\ -AABFBgAAQwYAAEkGAABDBgAASgYAAEQGAAAsBgAARAYAAC0GAABEBgAALgYAAEQGAABFBgAARAYAAE\ -kGAABEBgAASgYAAEUGAAAsBgAARQYAAC0GAABFBgAALgYAAEUGAABFBgAARQYAAEkGAABFBgAASgYA\ -AEYGAAAsBgAARgYAAC0GAABGBgAALgYAAEYGAABFBgAARgYAAEkGAABGBgAASgYAAEcGAAAsBgAARw\ -YAAEUGAABHBgAASQYAAEcGAABKBgAASgYAACwGAABKBgAALQYAAEoGAAAuBgAASgYAAEUGAABKBgAA\ -SQYAAEoGAABKBgAAMAYAAHAGAAAxBgAAcAYAAEkGAABwBgAAIAAAAEwGAABRBgAAIAAAAE0GAABRBg\ -AAIAAAAE4GAABRBgAAIAAAAE8GAABRBgAAIAAAAFAGAABRBgAAIAAAAFEGAABwBgAASgYAAFQGAAAx\ -BgAASgYAAFQGAAAyBgAASgYAAFQGAABFBgAASgYAAFQGAABGBgAASgYAAFQGAABJBgAASgYAAFQGAA\ -BKBgAAKAYAADEGAAAoBgAAMgYAACgGAABFBgAAKAYAAEYGAAAoBgAASQYAACgGAABKBgAAKgYAADEG\ -AAAqBgAAMgYAACoGAABFBgAAKgYAAEYGAAAqBgAASQYAACoGAABKBgAAKwYAADEGAAArBgAAMgYAAC\ -sGAABFBgAAKwYAAEYGAAArBgAASQYAACsGAABKBgAAQQYAAEkGAABBBgAASgYAAEIGAABJBgAAQgYA\ -AEoGAABDBgAAJwYAAEMGAABEBgAAQwYAAEUGAABDBgAASQYAAEMGAABKBgAARAYAAEUGAABEBgAASQ\ -YAAEQGAABKBgAARQYAACcGAABFBgAARQYAAEYGAAAxBgAARgYAADIGAABGBgAARQYAAEYGAABGBgAA\ -RgYAAEkGAABGBgAASgYAAEkGAABwBgAASgYAADEGAABKBgAAMgYAAEoGAABFBgAASgYAAEYGAABKBg\ -AASQYAAEoGAABKBgAASgYAAFQGAAAsBgAASgYAAFQGAAAtBgAASgYAAFQGAAAuBgAASgYAAFQGAABF\ -BgAASgYAAFQGAABHBgAAKAYAACwGAAAoBgAALQYAACgGAAAuBgAAKAYAAEUGAAAoBgAARwYAACoGAA\ -AsBgAAKgYAAC0GAAAqBgAALgYAACoGAABFBgAAKgYAAEcGAAArBgAARQYAACwGAAAtBgAALAYAAEUG\ -AAAtBgAALAYAAC0GAABFBgAALgYAACwGAAAuBgAARQYAADMGAAAsBgAAMwYAAC0GAAAzBgAALgYAAD\ -MGAABFBgAANQYAAC0GAAA1BgAALgYAADUGAABFBgAANgYAACwGAAA2BgAALQYAADYGAAAuBgAANgYA\ -AEUGAAA3BgAALQYAADgGAABFBgAAOQYAACwGAAA5BgAARQYAADoGAAAsBgAAOgYAAEUGAABBBgAALA\ -YAAEEGAAAtBgAAQQYAAC4GAABBBgAARQYAAEIGAAAtBgAAQgYAAEUGAABDBgAALAYAAEMGAAAtBgAA\ -QwYAAC4GAABDBgAARAYAAEMGAABFBgAARAYAACwGAABEBgAALQYAAEQGAAAuBgAARAYAAEUGAABEBg\ -AARwYAAEUGAAAsBgAARQYAAC0GAABFBgAALgYAAEUGAABFBgAARgYAACwGAABGBgAALQYAAEYGAAAu\ -BgAARgYAAEUGAABGBgAARwYAAEcGAAAsBgAARwYAAEUGAABHBgAAcAYAAEoGAAAsBgAASgYAAC0GAA\ -BKBgAALgYAAEoGAABFBgAASgYAAEcGAABKBgAAVAYAAEUGAABKBgAAVAYAAEcGAAAoBgAARQYAACgG\ -AABHBgAAKgYAAEUGAAAqBgAARwYAACsGAABFBgAAKwYAAEcGAAAzBgAARQYAADMGAABHBgAANAYAAE\ -UGAAA0BgAARwYAAEMGAABEBgAAQwYAAEUGAABEBgAARQYAAEYGAABFBgAARgYAAEcGAABKBgAARQYA\ -AEoGAABHBgAAQAYAAE4GAABRBgAAQAYAAE8GAABRBgAAQAYAAFAGAABRBgAANwYAAEkGAAA3BgAASg\ -YAADkGAABJBgAAOQYAAEoGAAA6BgAASQYAADoGAABKBgAAMwYAAEkGAAAzBgAASgYAADQGAABJBgAA\ -NAYAAEoGAAAtBgAASQYAAC0GAABKBgAALAYAAEkGAAAsBgAASgYAAC4GAABJBgAALgYAAEoGAAA1Bg\ -AASQYAADUGAABKBgAANgYAAEkGAAA2BgAASgYAADQGAAAsBgAANAYAAC0GAAA0BgAALgYAADQGAABF\ -BgAANAYAADEGAAAzBgAAMQYAADUGAAAxBgAANgYAADEGAAA3BgAASQYAADcGAABKBgAAOQYAAEkGAA\ -A5BgAASgYAADoGAABJBgAAOgYAAEoGAAAzBgAASQYAADMGAABKBgAANAYAAEkGAAA0BgAASgYAAC0G\ -AABJBgAALQYAAEoGAAAsBgAASQYAACwGAABKBgAALgYAAEkGAAAuBgAASgYAADUGAABJBgAANQYAAE\ -oGAAA2BgAASQYAADYGAABKBgAANAYAACwGAAA0BgAALQYAADQGAAAuBgAANAYAAEUGAAA0BgAAMQYA\ -ADMGAAAxBgAANQYAADEGAAA2BgAAMQYAADQGAAAsBgAANAYAAC0GAAA0BgAALgYAADQGAABFBgAAMw\ -YAAEcGAAA0BgAARwYAADcGAABFBgAAMwYAACwGAAAzBgAALQYAADMGAAAuBgAANAYAACwGAAA0BgAA\ -LQYAADQGAAAuBgAANwYAAEUGAAA4BgAARQYAACcGAABLBgAAJwYAAEsGAAAqBgAALAYAAEUGAAAqBg\ -AALQYAACwGAAAqBgAALQYAACwGAAAqBgAALQYAAEUGAAAqBgAALgYAAEUGAAAqBgAARQYAACwGAAAq\ -BgAARQYAAC0GAAAqBgAARQYAAC4GAAAsBgAARQYAAC0GAAAsBgAARQYAAC0GAAAtBgAARQYAAEoGAA\ -AtBgAARQYAAEkGAAAzBgAALQYAACwGAAAzBgAALAYAAC0GAAAzBgAALAYAAEkGAAAzBgAARQYAAC0G\ -AAAzBgAARQYAAC0GAAAzBgAARQYAACwGAAAzBgAARQYAAEUGAAAzBgAARQYAAEUGAAA1BgAALQYAAC\ -0GAAA1BgAALQYAAC0GAAA1BgAARQYAAEUGAAA0BgAALQYAAEUGAAA0BgAALQYAAEUGAAA0BgAALAYA\ -AEoGAAA0BgAARQYAAC4GAAA0BgAARQYAAC4GAAA0BgAARQYAAEUGAAA0BgAARQYAAEUGAAA2BgAALQ\ -YAAEkGAAA2BgAALgYAAEUGAAA2BgAALgYAAEUGAAA3BgAARQYAAC0GAAA3BgAARQYAAC0GAAA3BgAA\ -RQYAAEUGAAA3BgAARQYAAEoGAAA5BgAALAYAAEUGAAA5BgAARQYAAEUGAAA5BgAARQYAAEUGAAA5Bg\ -AARQYAAEkGAAA6BgAARQYAAEUGAAA6BgAARQYAAEoGAAA6BgAARQYAAEkGAABBBgAALgYAAEUGAABB\ -BgAALgYAAEUGAABCBgAARQYAAC0GAABCBgAARQYAAEUGAABEBgAALQYAAEUGAABEBgAALQYAAEoGAA\ -BEBgAALQYAAEkGAABEBgAALAYAACwGAABEBgAALAYAACwGAABEBgAALgYAAEUGAABEBgAALgYAAEUG\ -AABEBgAARQYAAC0GAABEBgAARQYAAC0GAABFBgAALQYAACwGAABFBgAALQYAAEUGAABFBgAALQYAAE\ -oGAABFBgAALAYAAC0GAABFBgAALAYAAEUGAABFBgAALgYAACwGAABFBgAALgYAAEUGAABFBgAALAYA\ -AC4GAABHBgAARQYAACwGAABHBgAARQYAAEUGAABGBgAALQYAAEUGAABGBgAALQYAAEkGAABGBgAALA\ -YAAEUGAABGBgAALAYAAEUGAABGBgAALAYAAEkGAABGBgAARQYAAEoGAABGBgAARQYAAEkGAABKBgAA\ -RQYAAEUGAABKBgAARQYAAEUGAAAoBgAALgYAAEoGAAAqBgAALAYAAEoGAAAqBgAALAYAAEkGAAAqBg\ -AALgYAAEoGAAAqBgAALgYAAEkGAAAqBgAARQYAAEoGAAAqBgAARQYAAEkGAAAsBgAARQYAAEoGAAAs\ -BgAALQYAAEkGAAAsBgAARQYAAEkGAAAzBgAALgYAAEkGAAA1BgAALQYAAEoGAAA0BgAALQYAAEoGAA\ -A2BgAALQYAAEoGAABEBgAALAYAAEoGAABEBgAARQYAAEoGAABKBgAALQYAAEoGAABKBgAALAYAAEoG\ -AABKBgAARQYAAEoGAABFBgAARQYAAEoGAABCBgAARQYAAEoGAABGBgAALQYAAEoGAABCBgAARQYAAC\ -0GAABEBgAALQYAAEUGAAA5BgAARQYAAEoGAABDBgAARQYAAEoGAABGBgAALAYAAC0GAABFBgAALgYA\ -AEoGAABEBgAALAYAAEUGAABDBgAARQYAAEUGAABEBgAALAYAAEUGAABGBgAALAYAAC0GAAAsBgAALQ\ -YAAEoGAAAtBgAALAYAAEoGAABFBgAALAYAAEoGAABBBgAARQYAAEoGAAAoBgAALQYAAEoGAABDBgAA\ -RQYAAEUGAAA5BgAALAYAAEUGAAA1BgAARQYAAEUGAAAzBgAALgYAAEoGAABGBgAALAYAAEoGAAA1Bg\ -AARAYAANIGAABCBgAARAYAANIGAAAnBgAARAYAAEQGAABHBgAAJwYAAEMGAAAoBgAAMQYAAEUGAAAt\ -BgAARQYAAC8GAAA1BgAARAYAADkGAABFBgAAMQYAADMGAABIBgAARAYAADkGAABEBgAASgYAAEcGAA\ -BIBgAAMwYAAEQGAABFBgAANQYAAEQGAABJBgAANQYAAEQGAABJBgAAIAAAACcGAABEBgAARAYAAEcG\ -AAAgAAAAOQYAAEQGAABKBgAARwYAACAAAABIBgAAMwYAAEQGAABFBgAALAYAAEQGAAAgAAAALAYAAE\ -QGAAAnBgAARAYAAEcGAAAxBgAAzAYAACcGAABEBgAALAAAAAEwAAACMAAAOgAAADsAAAAhAAAAPwAA\ -ABYwAAAXMAAALgAAAC4AAAAuAAAALgAAAC4AAAAUIAAAEyAAAF8AAABfAAAAKAAAACkAAAB7AAAAfQ\ -AAABQwAAAVMAAAEDAAABEwAAAKMAAACzAAAAgwAAAJMAAADDAAAA0wAAAOMAAADzAAAFsAAABdAAAA\ -IAAAAAUDAAAgAAAABQMAACAAAAAFAwAAIAAAAAUDAABfAAAAXwAAAF8AAAAsAAAAATAAAC4AAAA7AA\ -AAOgAAAD8AAAAhAAAAFCAAACgAAAApAAAAewAAAH0AAAAUMAAAFTAAACMAAAAmAAAAKgAAACsAAAAt\ -AAAAPAAAAD4AAAA9AAAAXAAAACQAAAAlAAAAQAAAACAAAABLBgAAQAYAAEsGAAAgAAAATAYAACAAAA\ -BNBgAAIAAAAE4GAABABgAATgYAACAAAABPBgAAQAYAAE8GAAAgAAAAUAYAAEAGAABQBgAAIAAAAFEG\ -AABABgAAUQYAACAAAABSBgAAQAYAAFIGAAAhBgAAJwYAAFMGAAAnBgAAUwYAACcGAABUBgAAJwYAAF\ -QGAABIBgAAVAYAAEgGAABUBgAAJwYAAFUGAAAnBgAAVQYAAEoGAABUBgAASgYAAFQGAABKBgAAVAYA\ -AEoGAABUBgAAJwYAACcGAAAoBgAAKAYAACgGAAAoBgAAKQYAACkGAAAqBgAAKgYAACoGAAAqBgAAKw\ -YAACsGAAArBgAAKwYAACwGAAAsBgAALAYAACwGAAAtBgAALQYAAC0GAAAtBgAALgYAAC4GAAAuBgAA\ -LgYAAC8GAAAvBgAAMAYAADAGAAAxBgAAMQYAADIGAAAyBgAAMwYAADMGAAAzBgAAMwYAADQGAAA0Bg\ -AANAYAADQGAAA1BgAANQYAADUGAAA1BgAANgYAADYGAAA2BgAANgYAADcGAAA3BgAANwYAADcGAAA4\ -BgAAOAYAADgGAAA4BgAAOQYAADkGAAA5BgAAOQYAADoGAAA6BgAAOgYAADoGAABBBgAAQQYAAEEGAA\ -BBBgAAQgYAAEIGAABCBgAAQgYAAEMGAABDBgAAQwYAAEMGAABEBgAARAYAAEQGAABEBgAARQYAAEUG\ -AABFBgAARQYAAEYGAABGBgAARgYAAEYGAABHBgAARwYAAEcGAABHBgAASAYAAEgGAABJBgAASQYAAE\ -oGAABKBgAASgYAAEoGAABEBgAAJwYAAFMGAABEBgAAJwYAAFMGAABEBgAAJwYAAFQGAABEBgAAJwYA\ -AFQGAABEBgAAJwYAAFUGAABEBgAAJwYAAFUGAABEBgAAJwYAAEQGAAAnBgAAIQAAACIAAAAjAAAAJA\ -AAACUAAAAmAAAAJwAAACgAAAApAAAAKgAAACsAAAAsAAAALQAAAC4AAAAvAAAAMAAAADEAAAAyAAAA\ -MwAAADQAAAA1AAAANgAAADcAAAA4AAAAOQAAADoAAAA7AAAAPAAAAD0AAAA+AAAAPwAAAEAAAABBAA\ -AAQgAAAEMAAABEAAAARQAAAEYAAABHAAAASAAAAEkAAABKAAAASwAAAEwAAABNAAAATgAAAE8AAABQ\ -AAAAUQAAAFIAAABTAAAAVAAAAFUAAABWAAAAVwAAAFgAAABZAAAAWgAAAFsAAABcAAAAXQAAAF4AAA\ -BfAAAAYAAAAGEAAABiAAAAYwAAAGQAAABlAAAAZgAAAGcAAABoAAAAaQAAAGoAAABrAAAAbAAAAG0A\ -AABuAAAAbwAAAHAAAABxAAAAcgAAAHMAAAB0AAAAdQAAAHYAAAB3AAAAeAAAAHkAAAB6AAAAewAAAH\ -wAAAB9AAAAfgAAAIUpAACGKQAAAjAAAAwwAAANMAAAATAAAPswAADyMAAAoTAAAKMwAAClMAAApzAA\ -AKkwAADjMAAA5TAAAOcwAADDMAAA/DAAAKIwAACkMAAApjAAAKgwAACqMAAAqzAAAK0wAACvMAAAsT\ -AAALMwAAC1MAAAtzAAALkwAAC7MAAAvTAAAL8wAADBMAAAxDAAAMYwAADIMAAAyjAAAMswAADMMAAA\ -zTAAAM4wAADPMAAA0jAAANUwAADYMAAA2zAAAN4wAADfMAAA4DAAAOEwAADiMAAA5DAAAOYwAADoMA\ -AA6TAAAOowAADrMAAA7DAAAO0wAADvMAAA8zAAAJkwAACaMAAAYBEAAAARAAABEQAAqhEAAAIRAACs\ -EQAArREAAAMRAAAEEQAABREAALARAACxEQAAshEAALMRAAC0EQAAtREAABoRAAAGEQAABxEAAAgRAA\ -AhEQAACREAAAoRAAALEQAADBEAAA0RAAAOEQAADxEAABARAAAREQAAEhEAAGERAABiEQAAYxEAAGQR\ -AABlEQAAZhEAAGcRAABoEQAAaREAAGoRAABrEQAAbBEAAG0RAABuEQAAbxEAAHARAABxEQAAchEAAH\ -MRAAB0EQAAdREAAKIAAACjAAAArAAAACAAAAAEAwAApgAAAKUAAACpIAAAAiUAAJAhAACRIQAAkiEA\ -AJMhAACgJQAAyyUAANACAADRAgAA5gAAAJkCAABTAgAAowIAAGarAAClAgAApAIAAFYCAABXAgAAkR\ -0AAFgCAABeAgAAqQIAAGQCAABiAgAAYAIAAJsCAAAnAQAAnAIAAGcCAACEAgAAqgIAAKsCAABsAgAA\ -BN8BAI6nAABuAgAABd8BAI4CAAAG3wEA+AAAAHYCAAB3AgAAcQAAAHoCAAAI3wEAfQIAAH4CAACAAg\ -AAqAIAAKYCAABnqwAApwIAAIgCAABxLAAAjwIAAKECAACiAgAAmAIAAMABAADBAQAAwgEAAArfAQAe\ -3wEAQQAAAEIAAABDAAAARAAAAEUAAABGAAAARwAAAEgAAABJAAAASgAAAEsAAABMAAAATQAAAE4AAA\ -BPAAAAUAAAAFEAAABSAAAAUwAAAFQAAABVAAAAVgAAAFcAAABYAAAAWQAAAFoAAABhAAAAYgAAAGMA\ -AABkAAAAZQAAAGYAAABnAAAAaAAAAGkAAABqAAAAawAAAGwAAABtAAAAbgAAAG8AAABwAAAAcQAAAH\ -IAAABzAAAAdAAAAHUAAAB2AAAAdwAAAHgAAAB5AAAAegAAAEEAAABCAAAAQwAAAEQAAABFAAAARgAA\ -AEcAAABIAAAASQAAAEoAAABLAAAATAAAAE0AAABOAAAATwAAAFAAAABRAAAAUgAAAFMAAABUAAAAVQ\ -AAAFYAAABXAAAAWAAAAFkAAABaAAAAYQAAAGIAAABjAAAAZAAAAGUAAABmAAAAZwAAAGkAAABqAAAA\ -awAAAGwAAABtAAAAbgAAAG8AAABwAAAAcQAAAHIAAABzAAAAdAAAAHUAAAB2AAAAdwAAAHgAAAB5AA\ -AAegAAAEEAAABCAAAAQwAAAEQAAABFAAAARgAAAEcAAABIAAAASQAAAEoAAABLAAAATAAAAE0AAABO\ -AAAATwAAAFAAAABRAAAAUgAAAFMAAABUAAAAVQAAAFYAAABXAAAAWAAAAFkAAABaAAAAYQAAAGIAAA\ -BjAAAAZAAAAGUAAABmAAAAZwAAAGgAAABpAAAAagAAAGsAAABsAAAAbQAAAG4AAABvAAAAcAAAAHEA\ -AAByAAAAcwAAAHQAAAB1AAAAdgAAAHcAAAB4AAAAeQAAAHoAAABBAAAAQwAAAEQAAABHAAAASgAAAE\ -sAAABOAAAATwAAAFAAAABRAAAAUwAAAFQAAABVAAAAVgAAAFcAAABYAAAAWQAAAFoAAABhAAAAYgAA\ -AGMAAABkAAAAZgAAAGgAAABpAAAAagAAAGsAAABsAAAAbQAAAG4AAABwAAAAcQAAAHIAAABzAAAAdA\ -AAAHUAAAB2AAAAdwAAAHgAAAB5AAAAegAAAEEAAABCAAAAQwAAAEQAAABFAAAARgAAAEcAAABIAAAA\ -SQAAAEoAAABLAAAATAAAAE0AAABOAAAATwAAAFAAAABRAAAAUgAAAFMAAABUAAAAVQAAAFYAAABXAA\ -AAWAAAAFkAAABaAAAAYQAAAGIAAABjAAAAZAAAAGUAAABmAAAAZwAAAGgAAABpAAAAagAAAGsAAABs\ -AAAAbQAAAG4AAABvAAAAcAAAAHEAAAByAAAAcwAAAHQAAAB1AAAAdgAAAHcAAAB4AAAAeQAAAHoAAA\ -BBAAAAQgAAAEQAAABFAAAARgAAAEcAAABKAAAASwAAAEwAAABNAAAATgAAAE8AAABQAAAAUQAAAFMA\ -AABUAAAAVQAAAFYAAABXAAAAWAAAAFkAAABhAAAAYgAAAGMAAABkAAAAZQAAAGYAAABnAAAAaAAAAG\ -kAAABqAAAAawAAAGwAAABtAAAAbgAAAG8AAABwAAAAcQAAAHIAAABzAAAAdAAAAHUAAAB2AAAAdwAA\ -AHgAAAB5AAAAegAAAEEAAABCAAAARAAAAEUAAABGAAAARwAAAEkAAABKAAAASwAAAEwAAABNAAAATw\ -AAAFMAAABUAAAAVQAAAFYAAABXAAAAWAAAAFkAAABhAAAAYgAAAGMAAABkAAAAZQAAAGYAAABnAAAA\ -aAAAAGkAAABqAAAAawAAAGwAAABtAAAAbgAAAG8AAABwAAAAcQAAAHIAAABzAAAAdAAAAHUAAAB2AA\ -AAdwAAAHgAAAB5AAAAegAAAEEAAABCAAAAQwAAAEQAAABFAAAARgAAAEcAAABIAAAASQAAAEoAAABL\ -AAAATAAAAE0AAABOAAAATwAAAFAAAABRAAAAUgAAAFMAAABUAAAAVQAAAFYAAABXAAAAWAAAAFkAAA\ -BaAAAAYQAAAGIAAABjAAAAZAAAAGUAAABmAAAAZwAAAGgAAABpAAAAagAAAGsAAABsAAAAbQAAAG4A\ -AABvAAAAcAAAAHEAAAByAAAAcwAAAHQAAAB1AAAAdgAAAHcAAAB4AAAAeQAAAHoAAABBAAAAQgAAAE\ -MAAABEAAAARQAAAEYAAABHAAAASAAAAEkAAABKAAAASwAAAEwAAABNAAAATgAAAE8AAABQAAAAUQAA\ -AFIAAABTAAAAVAAAAFUAAABWAAAAVwAAAFgAAABZAAAAWgAAAGEAAABiAAAAYwAAAGQAAABlAAAAZg\ -AAAGcAAABoAAAAaQAAAGoAAABrAAAAbAAAAG0AAABuAAAAbwAAAHAAAABxAAAAcgAAAHMAAAB0AAAA\ -dQAAAHYAAAB3AAAAeAAAAHkAAAB6AAAAQQAAAEIAAABDAAAARAAAAEUAAABGAAAARwAAAEgAAABJAA\ -AASgAAAEsAAABMAAAATQAAAE4AAABPAAAAUAAAAFEAAABSAAAAUwAAAFQAAABVAAAAVgAAAFcAAABY\ -AAAAWQAAAFoAAABhAAAAYgAAAGMAAABkAAAAZQAAAGYAAABnAAAAaAAAAGkAAABqAAAAawAAAGwAAA\ -BtAAAAbgAAAG8AAABwAAAAcQAAAHIAAABzAAAAdAAAAHUAAAB2AAAAdwAAAHgAAAB5AAAAegAAAEEA\ -AABCAAAAQwAAAEQAAABFAAAARgAAAEcAAABIAAAASQAAAEoAAABLAAAATAAAAE0AAABOAAAATwAAAF\ -AAAABRAAAAUgAAAFMAAABUAAAAVQAAAFYAAABXAAAAWAAAAFkAAABaAAAAYQAAAGIAAABjAAAAZAAA\ -AGUAAABmAAAAZwAAAGgAAABpAAAAagAAAGsAAABsAAAAbQAAAG4AAABvAAAAcAAAAHEAAAByAAAAcw\ -AAAHQAAAB1AAAAdgAAAHcAAAB4AAAAeQAAAHoAAABBAAAAQgAAAEMAAABEAAAARQAAAEYAAABHAAAA\ -SAAAAEkAAABKAAAASwAAAEwAAABNAAAATgAAAE8AAABQAAAAUQAAAFIAAABTAAAAVAAAAFUAAABWAA\ -AAVwAAAFgAAABZAAAAWgAAAGEAAABiAAAAYwAAAGQAAABlAAAAZgAAAGcAAABoAAAAaQAAAGoAAABr\ -AAAAbAAAAG0AAABuAAAAbwAAAHAAAABxAAAAcgAAAHMAAAB0AAAAdQAAAHYAAAB3AAAAeAAAAHkAAA\ -B6AAAAQQAAAEIAAABDAAAARAAAAEUAAABGAAAARwAAAEgAAABJAAAASgAAAEsAAABMAAAATQAAAE4A\ -AABPAAAAUAAAAFEAAABSAAAAUwAAAFQAAABVAAAAVgAAAFcAAABYAAAAWQAAAFoAAABhAAAAYgAAAG\ -MAAABkAAAAZQAAAGYAAABnAAAAaAAAAGkAAABqAAAAawAAAGwAAABtAAAAbgAAAG8AAABwAAAAcQAA\ -AHIAAABzAAAAdAAAAHUAAAB2AAAAdwAAAHgAAAB5AAAAegAAADEBAAA3AgAAkQMAAJIDAACTAwAAlA\ -MAAJUDAACWAwAAlwMAAJgDAACZAwAAmgMAAJsDAACcAwAAnQMAAJ4DAACfAwAAoAMAAKEDAACYAwAA\ -owMAAKQDAAClAwAApgMAAKcDAACoAwAAqQMAAAciAACxAwAAsgMAALMDAAC0AwAAtQMAALYDAAC3Aw\ -AAuAMAALkDAAC6AwAAuwMAALwDAAC9AwAAvgMAAL8DAADAAwAAwQMAAMIDAADDAwAAxAMAAMUDAADG\ -AwAAxwMAAMgDAADJAwAAAiIAALUDAAC4AwAAugMAAMYDAADBAwAAwAMAAJEDAACSAwAAkwMAAJQDAA\ -CVAwAAlgMAAJcDAACYAwAAmQMAAJoDAACbAwAAnAMAAJ0DAACeAwAAnwMAAKADAAChAwAAmAMAAKMD\ -AACkAwAApQMAAKYDAACnAwAAqAMAAKkDAAAHIgAAsQMAALIDAACzAwAAtAMAALUDAAC2AwAAtwMAAL\ -gDAAC5AwAAugMAALsDAAC8AwAAvQMAAL4DAAC/AwAAwAMAAMEDAADCAwAAwwMAAMQDAADFAwAAxgMA\ -AMcDAADIAwAAyQMAAAIiAAC1AwAAuAMAALoDAADGAwAAwQMAAMADAACRAwAAkgMAAJMDAACUAwAAlQ\ -MAAJYDAACXAwAAmAMAAJkDAACaAwAAmwMAAJwDAACdAwAAngMAAJ8DAACgAwAAoQMAAJgDAACjAwAA\ -pAMAAKUDAACmAwAApwMAAKgDAACpAwAAByIAALEDAACyAwAAswMAALQDAAC1AwAAtgMAALcDAAC4Aw\ -AAuQMAALoDAAC7AwAAvAMAAL0DAAC+AwAAvwMAAMADAADBAwAAwgMAAMMDAADEAwAAxQMAAMYDAADH\ -AwAAyAMAAMkDAAACIgAAtQMAALgDAAC6AwAAxgMAAMEDAADAAwAAkQMAAJIDAACTAwAAlAMAAJUDAA\ -CWAwAAlwMAAJgDAACZAwAAmgMAAJsDAACcAwAAnQMAAJ4DAACfAwAAoAMAAKEDAACYAwAAowMAAKQD\ -AAClAwAApgMAAKcDAACoAwAAqQMAAAciAACxAwAAsgMAALMDAAC0AwAAtQMAALYDAAC3AwAAuAMAAL\ -kDAAC6AwAAuwMAALwDAAC9AwAAvgMAAL8DAADAAwAAwQMAAMIDAADDAwAAxAMAAMUDAADGAwAAxwMA\ -AMgDAADJAwAAAiIAALUDAAC4AwAAugMAAMYDAADBAwAAwAMAAJEDAACSAwAAkwMAAJQDAACVAwAAlg\ -MAAJcDAACYAwAAmQMAAJoDAACbAwAAnAMAAJ0DAACeAwAAnwMAAKADAAChAwAAmAMAAKMDAACkAwAA\ -pQMAAKYDAACnAwAAqAMAAKkDAAAHIgAAsQMAALIDAACzAwAAtAMAALUDAAC2AwAAtwMAALgDAAC5Aw\ -AAugMAALsDAAC8AwAAvQMAAL4DAAC/AwAAwAMAAMEDAADCAwAAwwMAAMQDAADFAwAAxgMAAMcDAADI\ -AwAAyQMAAAIiAAC1AwAAuAMAALoDAADGAwAAwQMAAMADAADcAwAA3QMAADAAAAAxAAAAMgAAADMAAA\ -A0AAAANQAAADYAAAA3AAAAOAAAADkAAAAwAAAAMQAAADIAAAAzAAAANAAAADUAAAA2AAAANwAAADgA\ -AAA5AAAAMAAAADEAAAAyAAAAMwAAADQAAAA1AAAANgAAADcAAAA4AAAAOQAAADAAAAAxAAAAMgAAAD\ -MAAAA0AAAANQAAADYAAAA3AAAAOAAAADkAAAAwAAAAMQAAADIAAAAzAAAANAAAADUAAAA2AAAANwAA\ -ADgAAAA5AAAAMAQAADEEAAAyBAAAMwQAADQEAAA1BAAANgQAADcEAAA4BAAAOgQAADsEAAA8BAAAPg\ -QAAD8EAABABAAAQQQAAEIEAABDBAAARAQAAEUEAABGBAAARwQAAEgEAABLBAAATQQAAE4EAACJpgAA\ -2QQAAFYEAABYBAAA6QQAAK8EAADPBAAAMAQAADEEAAAyBAAAMwQAADQEAAA1BAAANgQAADcEAAA4BA\ -AAOgQAADsEAAA+BAAAPwQAAEEEAABDBAAARAQAAEUEAABGBAAARwQAAEgEAABKBAAASwQAAJEEAABW\ -BAAAVQQAAF8EAACrBAAAUaYAALEEAAAnBgAAKAYAACwGAAAvBgAASAYAADIGAAAtBgAANwYAAEoGAA\ -BDBgAARAYAAEUGAABGBgAAMwYAADkGAABBBgAANQYAAEIGAAAxBgAANAYAACoGAAArBgAALgYAADAG\ -AAA2BgAAOAYAADoGAABuBgAAugYAAKEGAABvBgAAKAYAACwGAABHBgAALQYAAEoGAABDBgAARAYAAE\ -UGAABGBgAAMwYAADkGAABBBgAANQYAAEIGAAA0BgAAKgYAACsGAAAuBgAANgYAADoGAAAsBgAALQYA\ -AEoGAABEBgAARgYAADMGAAA5BgAANQYAAEIGAAA0BgAALgYAADYGAAA6BgAAugYAAG8GAAAoBgAALA\ -YAAEcGAAAtBgAANwYAAEoGAABDBgAARQYAAEYGAAAzBgAAOQYAAEEGAAA1BgAAQgYAADQGAAAqBgAA\ -KwYAAC4GAAA2BgAAOAYAADoGAABuBgAAoQYAACcGAAAoBgAALAYAAC8GAABHBgAASAYAADIGAAAtBg\ -AANwYAAEoGAABEBgAARQYAAEYGAAAzBgAAOQYAAEEGAAA1BgAAQgYAADEGAAA0BgAAKgYAACsGAAAu\ -BgAAMAYAADYGAAA4BgAAOgYAACgGAAAsBgAALwYAAEgGAAAyBgAALQYAADcGAABKBgAARAYAAEUGAA\ -BGBgAAMwYAADkGAABBBgAANQYAAEIGAAAxBgAANAYAACoGAAArBgAALgYAADAGAAA2BgAAOAYAADoG\ -AAAwAAAALgAAADAAAAAsAAAAMQAAACwAAAAyAAAALAAAADMAAAAsAAAANAAAACwAAAA1AAAALAAAAD\ -YAAAAsAAAANwAAACwAAAA4AAAALAAAADkAAAAsAAAAKAAAAEEAAAApAAAAKAAAAEIAAAApAAAAKAAA\ -AEMAAAApAAAAKAAAAEQAAAApAAAAKAAAAEUAAAApAAAAKAAAAEYAAAApAAAAKAAAAEcAAAApAAAAKA\ -AAAEgAAAApAAAAKAAAAEkAAAApAAAAKAAAAEoAAAApAAAAKAAAAEsAAAApAAAAKAAAAEwAAAApAAAA\ -KAAAAE0AAAApAAAAKAAAAE4AAAApAAAAKAAAAE8AAAApAAAAKAAAAFAAAAApAAAAKAAAAFEAAAApAA\ -AAKAAAAFIAAAApAAAAKAAAAFMAAAApAAAAKAAAAFQAAAApAAAAKAAAAFUAAAApAAAAKAAAAFYAAAAp\ -AAAAKAAAAFcAAAApAAAAKAAAAFgAAAApAAAAKAAAAFkAAAApAAAAKAAAAFoAAAApAAAAFDAAAFMAAA\ -AVMAAAQwAAAFIAAABDAAAARAAAAFcAAABaAAAAQQAAAEIAAABDAAAARAAAAEUAAABGAAAARwAAAEgA\ -AABJAAAASgAAAEsAAABMAAAATQAAAE4AAABPAAAAUAAAAFEAAABSAAAAUwAAAFQAAABVAAAAVgAAAF\ -cAAABYAAAAWQAAAFoAAABIAAAAVgAAAE0AAABWAAAAUwAAAEQAAABTAAAAUwAAAFAAAABQAAAAVgAA\ -AFcAAABDAAAATQAAAEMAAABNAAAARAAAAE0AAABSAAAARAAAAEoAAAB7MAAASzAAALMwAACzMAAAtT\ -AAAEtiAABXWwAAzFMAAMYwAACZMAAAjE4AABpZAADjiQAAKVkAAKROAAAgZgAAIXEAAJllAABNUgAA\ -jF8AAI1RAACwZQAAHVIAAEJ9AAAfdQAAqYwAAPBYAAA5VAAAFG8AAJViAABVYwAAAE4AAAlOAABKkA\ -AA5l0AAC1OAADzUwAAB2MAAHCNAABTYgAAgXkAAHp6AAAIVAAAgG4AAAlnAAAIZwAAM3UAAHJSAAC2\ -VQAATZEAABQwAAAsZwAAFTAAABQwAAAJTgAAFTAAABQwAACMTgAAFTAAABQwAACJWwAAFTAAABQwAA\ -C5cAAAFTAAABQwAABTYgAAFTAAABQwAADXdgAAFTAAABQwAADdUgAAFTAAABQwAABXZQAAFTAAAJdf\ -AADvUwAAMAAAADEAAAAyAAAAMwAAADQAAAA1AAAANgAAADcAAAA4AAAAOQAAAPD7EQBiAAAAQgAAAB\ -oAAAAAAAAADQAEAAwABQCJBgcAAAACAAAAAgADAAAAAACrAAAAWAEAAFoAxgFDAQAAAQAAAAQAAAAA\ -AAAABgAEAAAAkgAAAAAATQIAAAcAAAB/AAwAAADHAAAAbQEAAAAAAADaAAQAGQAFAAAAkwAGAHwAEw\ -AbAQAAAQAIAFgAAABcAKUAAAABAAAAAAAAALQAAQABAAAAAQAIAAAAeQAHAAAAoAA3AAAABwA2AAUA\ -OQAAAAAAAgAJAAAAAABzAAEABQAAAAAAAAA9AAEAAAAEAAAAVAABAAAAJwBNAPoATQADABwA3QAGAA\ -EAJABBAAAAAAAAAAsAAAAFAAMAtgAAAA8AAAABABYAAAAAAJ4AAQAAACEAAAAlAAQAEAAEABUAAgAB\ -ACMABQCEAAAAAAAPAAoAAgA3AAEAAABGAA0AEgAAAAQAAAAAAAAAJAAMAEoAAgAEAAAAQgAAAAQAEw\ -ACABMAewA+AAAAEQACAAcAAQAAADEAAwAAABIAAAAAAAAANQAGAA4AHgDBAAAAAAAAAAAABQACABwA\ -AAAIAAAACQADAI0AcABUACMAEQAfAAUAFwAEAAIAAABHABcADAAqAAAAAwAAAAAAAAAFADgAEQAVAD\ -kABgAAAAMAAwABAAAAAAAAAFMABAABAAEAAQACAAAADwAGAAAAAAAAAAQAKAAEAAAAAAARAC4ABgAE\ -AAEAAQASAAAAAAAAAAIABQAAABUALgAAAAEAAAAAAAYAAAAAAA0AAwAAAAAAPwAIAAAACAAAAAAAGg\ -ACAAAABwAAAAoAAAADAAwAAAAUAAAABgAAABkAAQADAAMABgAQABIAAQAWAAAABAABAAAAAAAAAAAA\ -AwACACEAAQADABMAFgAAAAAAAQAFAAAADgAAAAAAOAACACAAAwAAAAoADgABAAMAAAAAAAoABgAAAA\ -AAAgAAAAAAAAACAAAABAAYAAEAAAACAAAADAAAAAAAAQABAAAAAQAAAAsAAAABAAIAAAAAABsABgAA\ -AAQAAAAAAAUAIAAAAAkAAAAAAAAAAAACAAAAAQADAAAADAAAABYAAAAAAAMAAAAHAAAACAAEAAAAAA\ -AAAAAAAAABAAAAAAAAAAAAAAAfAAoAKAAAAAEAAAAAAAgADQAAAAAAAAAAAAAAAQAAAAIAAAAAADoA\ -BAAIAAsAAAAXAAAAAgAAAAAAIgAAAAQAAAABAAIABgAXAAcACQAnAAAAAQARAAcAIwABAAEAAAAAAA\ -kACAACACcACAAAABcADAA7AAYAAAAAAAwAAAAEAAAALgAFAAcABwAAAAMADwABAAAAAgAAAAYAAgAC\ -AAQAAAADAA8AAAABABIAJAAAAAAAAAALAB8AFQANAAAAAQAAAAEAAgAAAAEAAAAIAAAAAAAMAAEADg\ -AAAAQABAAAAAAAAQADAAAAAgAAAC4AAAARAAAAGwAKABMAEgACAAkAAQANAAAAAQACAAAADQAAAAsA\ -BgAAAAAACwABAAAAAAACABMAFgANAA4ABAAPAAsAAgAAAAAACgAAAAMAAAANAAIACwAAAB0AAAACAA\ -cAAAAAAAEAAAAAAAAABwAGAA4ABAAAAAEACAAUAAAAAAAVAAAAAQAAAAAAAAAQAAAAAAAGABcAAAAB\ -AAAAEAAAAAAAAAAKAAAAAAABAAYABAAAAAQAAQABAAIAAgAAAAEABwAAAAAAAgACAAcAAgAfAAkAAA\ -AEAAcAAAABAAAAAAAAAAQAAwAEAAAAAAAAAAQAAAAAAAEACQAXAAYADwAMAAAAAAAAABAAAAACAAIA\ -AAAGAAIAAAADAAIACQADAAIAAwABAAAAAAAAABIABAAAAAgAAAADABgAAAADAAwAAAACACYAAAAAAA\ -IABgACAAAAAQAJAAgAFgABAAMAEQAAABMAAAACAAcAAAADAAAAAAAAAAwAGgAAAAAAAQACAAAAAgAJ\ -AAQAEgAAAAAAEQAIAAAAAAABAAMAAAADAAYADwAEAAEAAwAAAAcABAAJAAQAAQAAAAUABAAAAAEAAA\ -AAAAMAAgAVAAIAAAAIAAAAAgAAAAMAEQAGAAYADQABAAAAAQADAAYAIAAEAAEAAgALAAEAAAAAAAEA\ -AQARAAAAAQAAAAIAAQAAAAAABwAEAAUAAwAAAAAAAAAFAAAAAgADAAAAAwAAAAQABAACAAAAAgAZAA\ -QAAQATAAEAAgAJAAsABgAEAAAAAQAAAAEAGgAAAAIABQAAAA8AAAAIAAAAAAACAAQAEAABAAEAAgAS\ -AAAAAAAJAAAAEwABAAIABAAGAAQABAAAAAYAAgAVAAAAAQAJAA4AAgADAAMAAAABAAQAAAAAAAUADg\ -AAAAcAAAACAAAACwACAAAAAQAEAAkAAgAAAAAAAAABAAEAAAAEAAEADQADAAAAAQAAAAQAAwABAAIA\ -AAACAAUAAAADACwACgADAAAACQAAAAAAAgAAAAEAAAAAACcAAgAAAAAAAAAVAAEAAgAEAAAAAgAAAA\ -MAAwABAAAAAgAFAAoACQABAAIAAwABAAUAAQAIAAEAAQAPAAAAAwAKAAMABAANAAMAAQAAAAwAHgAB\ -AAEACgABAAMAAAABAAAABgAAAAMAAgAHAAMADgADAAQADwAEAAIAAwAIAAAAAgADAAEAEAACAAIAAg\ -AAAAAABQACAAAAAAAFAAAAAAAAAAAAAAAAAAcACAAAAAAAAAAEAAAAAAAAAAEAAwAAAAAAAQACAAEA\ -CwAHAAAAAwAFAAAAAAAAAAAAAAAAAAEAAAACAAoACgAFAAEAAAAAAAAAAgABAAkAAAACAAsAAgAAAA\ -AAAAAAAAgAAQAMAAwABAAAAAEABAADAAQAAwABAAcABQACAAQAAQABAAIAAAAAAAgAAQAAAAAAAAAB\ -AAIAAQACAAAADAAFAAEAAAACAAIABgAAAAEAAgACAAAAAAAGAAIABwABAAAAAAAFAAEACgAAAAIAAA\ -ABAAAAAAABAAEADAAAAAMAAgAJAAAAAgADAAAAAQABAAUABAAHAAEAAQABAAIAAQADAAMAAAABAAMA\ -AAACAAIAAAABAAYAAQAKAAAAAAAIAAAABQAAAAEAAgAAAAAAAAAHAAAAAgAAAAAAAAAAAAAAAgAQAA\ -cAAQAFAA4AAAAAAAAABQAHAAUAAQAAAAQAAAAFAAMAAgAAAAEAAAAAAAkAAAAEAAIAAwAGAAUAAAAB\ -AAEAAQADAAIABAACAAIAAgAAAAMABgAAAAEAAQAAAAEAAgAUAAAAAAAHAAUAAgAAAAEAAAAAAAAAAQ\ -AGAAsABQAAAA8AAQAAAAYACQABAAcAAgAAAAEAAQAAAAAAAQABAAEABQAHAAAAAAAAAAAABgAGAAAA\ -BwAAAAEAAAAAAAMACAAAAAAAAQABAAYACwAHAAAAAAADAAAAAQAIAAEAAQAFAAIAAQACAAoAAAABAA\ -AAAAADAAAAAgACAAAAAAAAAAAAAQADAAYAAgAAAAIAAQAEAAEAAgACAAAAAAABAAQAAgABAAEAAQAA\ -AAIABAADAAIAAwABAAAAAQAAAAAABAAAAAMAAwAAAAUABQABAAMABgAAAAEAAgAAAAoAAwABAAEAAg\ -AAAAAAAgAEAAMAAgAAAAIABQABAAAACwAKAAAAAAABAAMAAAADAAAAAQAAAAMACAACAAAABAAAAAEA\ -AAAIAAIAAAABAAEAAQAAAAAAAAAFAAMABgACABQAAAABAAAAAgADAAMAAQADAAYACAABAAEAAQABAA\ -MACAAAAAAABAAGAAMAAAADAAAAAAAJAAoAAwADAAIABQAHAAIAAAAKAAEAAgABAAEAAAACAAIAAAAB\ -AAYAAQAAAAAACwADAAIAAwAAAAAAAAAGAAAAAgASAAEAAAAAAAIAAAAAAAAAAAAAAAAABgABAAAAAA\ -ACAAAAAwAEAAAAAAAAAAEADwADAAIADgAJAAAAAQAGAAAAAQAAAAAAAQADAAAAAAAHAAUAAAADAAAA\ -AAAMAAAAAwAAAAQABgAFAAEAAAADAAAAAQAEAAMAAAADAAQAAAADAAAAAAABAAAABgAAAAYAAAACAA\ -AAAgADAAMABQABAAAABQAFAAMAAQABAAEAAQAEAAAAAAAAAAQAAQABAAIAAAABAAcAAAACAAAAAAAB\ -AAAAAAADAAAAAAABAAIAAAABAAEAAwAAAAAABAACAAUAAQACAAMAAAADAAEAAAAAAAEABgABAAEAAA\ -AAAAMABQAAAAAAAAABAAMAAAARAAAAAgAFAAEACQABAAAABQADAAIAAQAAAAAABgAAAAQAAAACAAEA\ -AAAAAAAAAAAIAAAAAAABAAAABwABAAAAAQAFAAAAAQAGAAIAAwAFAAQAAgABAAEABwADAAIAAwABAA\ -AAAgAIAAQAAQAAAAEAAQACAAAAAAABAAIAAAABAAMAAAAAAAsAAgACAA8AAAACAAEAAAAAAAUAAAAC\ -AAEAAAAAAAAAAQACAAAAAwACAAAAAAABAAEAAAAAAAEAAgAAAAYAAgACAAMAAQAMAAAAAQAGAAIAAw\ -ACAAEAAgABAAMAAgADAAEAAgABAAAABAAFAAAAAAAAAAEAAAADAAQAAgALAAAAAgAAAAAAAAABAAAA\ -AQAEAAIABQACAAcAAAABAAAAAAAAAAEAAAAGAAAAAAABAAQAAAAAAAIAAAAAAAUABgABAAAAAQAFAA\ -AAAAAEAAIAAwABAAAACgADAAoAAgACAAEAAQACAAIAAwAEAAIAAQAAAAIAAQAHAAAAAwABAAEAAAAC\ -AAQAAQAAAAAAAgAGAAMAAAABAAAAAwAKAAEABgACAAAAAwAAAAAAAAAGAAMAAAACAAYAAwAEAAAACg\ -AAAAIAAAAEAAAAAAAEAAMAAgACAAAACAABAAQABAABAAEAAQABAAIAAQAAAAEAAgABAAAAAAADAAAA\ -AAAFAAEAAAAKAAYAAQACAAQAAgABAAEAAAAFAAEAAwADAAAAAAABAAYABQAMAAAAAAAKAAEAAQABAA\ -AAAAACAAAABAABAAIAAwACAAQAAAABAAEAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAIAAAAAAAQAAAAA\ -AAAAAAADAAAAAAACAAIABwABAAQAAgABAAAAAAAAAAMAAAAFAAIAAQAAAAEACgAAAAAAAAABAAIAAg\ -ABAAAAAAACAAEAAAAAAAAABAAEAAEABAAEAAAAAQABAAAAAwAAAAQAAwABAAAABgABAAAAAQAAAAIA\ -AQADAAAAAAADAAMAAAABAAIAAgABAAMAAAABAAAACwAHAAAAAQAFAAEAAAAAAAkAAQADAAAAAAAAAA\ -AAAQAAAAAADgACAAAABAADAAEABgAAAAAABAAAAAUAAwABAAAAAgABAAAAAQABAAMAAQAAAAEABQAB\ -AAIAAQAAAAEAAAACAAEAAQAHAAEAAQACAAYABAACAAMAAQABAAEAAAABAAAAAQACAAEAAwAAAAEABQ\ -AAAAAABgACAAIAAQAAAAIAAQABAAEAAgAEAAIAAAAAAAAAAAABAAMAAgAAAAQAAQAEAAIAAAAAAAMA\ -AAACAAAAAwAAAAEAAAABAAEAAAAAAAUAAwABAAEAAQAAAAEAAgAAAAcABAAAAAEAAQAAAAEAAAAFAA\ -EAAAABAAAAAgAAAAEAAgACAAIAAQACAAUAAgABAAEAAwAAAAMAAQAAAAIAAwAGAAAAAwACAAAABQAA\ -AAQABAADAAEAAAACAAgAAAADAAAAAAAAAAAAAwAAAAIAAgABAAEAAAADAAAAAQACAAAAAAAAAAEAAw\ -ABAAQAAQACAAIAAgACAAAAAgAEAAEAAQAAAAIAAAAAAAIABAAEAAEAAgAAAAEAAgABAAQAAgADAAYA\ -AAABAAUAAAAAAAAAAAAAAAIAAgABAAAAAAAAAAIAAgAEAAAAAAAAAAQAAwABAAEACQABAAAAAAADAA\ -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\ -EBAPQRAQAJAAAAABIBABESAQAJAAAAExIBAC4SAQAJAAAALxIBADESAQANAAAAMhIBADMSAQAJAAAA\ -NBIBADQSAQANAAAANRIBADUSAQAJAAAANhIBADcSAQANAAAAOBIBAD0SAQAJAAAAPhIBAD4SAQANAA\ -AAPxIBAEASAQAJAAAAQRIBAEESAQANAAAAgBIBAIYSAQAJAAAAiBIBAIgSAQAJAAAAihIBAI0SAQAJ\ -AAAAjxIBAJ0SAQAJAAAAnxIBAKkSAQAJAAAAsBIBAN4SAQAJAAAA3xIBAN8SAQANAAAA4BIBAOISAQ\ -AJAAAA4xIBAOoSAQANAAAA8BIBAPkSAQAJAAAAABMBAAETAQANAAAAAhMBAAMTAQAJAAAABRMBAAwT\ -AQAJAAAADxMBABATAQAJAAAAExMBACgTAQAJAAAAKhMBADATAQAJAAAAMhMBADMTAQAJAAAANRMBAD\ -kTAQAJAAAAOxMBADwTAQANAAAAPRMBAD8TAQAJAAAAQBMBAEATAQANAAAAQRMBAEQTAQAJAAAARxMB\ -AEgTAQAJAAAASxMBAE0TAQAJAAAAUBMBAFATAQAJAAAAVxMBAFcTAQAJAAAAXRMBAGMTAQAJAAAAZh\ -MBAGwTAQANAAAAcBMBAHQTAQANAAAAABQBADcUAQAJAAAAOBQBAD8UAQANAAAAQBQBAEEUAQAJAAAA\ -QhQBAEQUAQANAAAARRQBAEUUAQAJAAAARhQBAEYUAQANAAAARxQBAFsUAQAJAAAAXRQBAF0UAQAJAA\ -AAXhQBAF4UAQANAAAAXxQBAGEUAQAJAAAAgBQBALIUAQAJAAAAsxQBALgUAQANAAAAuRQBALkUAQAJ\ -AAAAuhQBALoUAQANAAAAuxQBAL4UAQAJAAAAvxQBAMAUAQANAAAAwRQBAMEUAQAJAAAAwhQBAMMUAQ\ -ANAAAAxBQBAMcUAQAJAAAA0BQBANkUAQAJAAAAgBUBALEVAQAJAAAAshUBALUVAQANAAAAuBUBALsV\ -AQAJAAAAvBUBAL0VAQANAAAAvhUBAL4VAQAJAAAAvxUBAMAVAQANAAAAwRUBANsVAQAJAAAA3BUBAN\ -0VAQANAAAAABYBADIWAQAJAAAAMxYBADoWAQANAAAAOxYBADwWAQAJAAAAPRYBAD0WAQANAAAAPhYB\ -AD4WAQAJAAAAPxYBAEAWAQANAAAAQRYBAEQWAQAJAAAAUBYBAFkWAQAJAAAAYBYBAGwWAQAOAAAAgB\ -YBAKoWAQAJAAAAqxYBAKsWAQANAAAArBYBAKwWAQAJAAAArRYBAK0WAQANAAAArhYBAK8WAQAJAAAA\ -sBYBALUWAQANAAAAthYBALYWAQAJAAAAtxYBALcWAQANAAAAuBYBALkWAQAJAAAAwBYBAMkWAQAJAA\ -AAABcBABoXAQAJAAAAHRcBAB8XAQANAAAAIBcBACEXAQAJAAAAIhcBACUXAQANAAAAJhcBACYXAQAJ\ -AAAAJxcBACsXAQANAAAAMBcBAEYXAQAJAAAAABgBAC4YAQAJAAAALxgBADcYAQANAAAAOBgBADgYAQ\ -AJAAAAORgBADoYAQANAAAAOxgBADsYAQAJAAAAoBgBAPIYAQAJAAAA/xgBAAYZAQAJAAAACRkBAAkZ\ -AQAJAAAADBkBABMZAQAJAAAAFRkBABYZAQAJAAAAGBkBADUZAQAJAAAANxkBADgZAQAJAAAAOxkBAD\ -wZAQANAAAAPRkBAD0ZAQAJAAAAPhkBAD4ZAQANAAAAPxkBAEIZAQAJAAAAQxkBAEMZAQANAAAARBkB\ -AEYZAQAJAAAAUBkBAFkZAQAJAAAAoBkBAKcZAQAJAAAAqhkBANMZAQAJAAAA1BkBANcZAQANAAAA2h\ -kBANsZAQANAAAA3BkBAN8ZAQAJAAAA4BkBAOAZAQANAAAA4RkBAOQZAQAJAAAAABoBAAAaAQAJAAAA\ -ARoBAAYaAQANAAAABxoBAAgaAQAJAAAACRoBAAoaAQANAAAACxoBADIaAQAJAAAAMxoBADgaAQANAA\ -AAORoBADoaAQAJAAAAOxoBAD4aAQANAAAAPxoBAEYaAQAJAAAARxoBAEcaAQANAAAAUBoBAFAaAQAJ\ -AAAAURoBAFYaAQANAAAAVxoBAFgaAQAJAAAAWRoBAFsaAQANAAAAXBoBAIkaAQAJAAAAihoBAJYaAQ\ -ANAAAAlxoBAJcaAQAJAAAAmBoBAJkaAQANAAAAmhoBAKIaAQAJAAAAsBoBAPgaAQAJAAAAABsBAAkb\ -AQAJAAAAABwBAAgcAQAJAAAAChwBAC8cAQAJAAAAMBwBADYcAQANAAAAOBwBAD0cAQANAAAAPhwBAE\ -UcAQAJAAAAUBwBAGwcAQAJAAAAcBwBAI8cAQAJAAAAkhwBAKccAQANAAAAqRwBAKkcAQAJAAAAqhwB\ -ALAcAQANAAAAsRwBALEcAQAJAAAAshwBALMcAQANAAAAtBwBALQcAQAJAAAAtRwBALYcAQANAAAAAB\ -0BAAYdAQAJAAAACB0BAAkdAQAJAAAACx0BADAdAQAJAAAAMR0BADYdAQANAAAAOh0BADodAQANAAAA\ -PB0BAD0dAQANAAAAPx0BAEUdAQANAAAARh0BAEYdAQAJAAAARx0BAEcdAQANAAAAUB0BAFkdAQAJAA\ -AAYB0BAGUdAQAJAAAAZx0BAGgdAQAJAAAAah0BAI4dAQAJAAAAkB0BAJEdAQANAAAAkx0BAJQdAQAJ\ -AAAAlR0BAJUdAQANAAAAlh0BAJYdAQAJAAAAlx0BAJcdAQANAAAAmB0BAJgdAQAJAAAAoB0BAKkdAQ\ -AJAAAA4B4BAPIeAQAJAAAA8x4BAPQeAQANAAAA9R4BAPgeAQAJAAAAAB8BAAEfAQANAAAAAh8BABAf\ -AQAJAAAAEh8BADUfAQAJAAAANh8BADofAQANAAAAPh8BAD8fAQAJAAAAQB8BAEAfAQANAAAAQR8BAE\ -EfAQAJAAAAQh8BAEIfAQANAAAAQx8BAFkfAQAJAAAAsB8BALAfAQAJAAAAwB8BANQfAQAJAAAA1R8B\ -ANwfAQAOAAAA3R8BAOAfAQAHAAAA4R8BAPEfAQAOAAAA/x8BAJkjAQAJAAAAACQBAG4kAQAJAAAAcC\ -QBAHQkAQAJAAAAgCQBAEMlAQAJAAAAkC8BAPIvAQAJAAAAADABAD80AQAJAAAAQDQBAEA0AQANAAAA\ -QTQBAEY0AQAJAAAARzQBAFU0AQANAAAAAEQBAEZGAQAJAAAAAGgBADhqAQAJAAAAQGoBAF5qAQAJAA\ -AAYGoBAGlqAQAJAAAAbmoBAL5qAQAJAAAAwGoBAMlqAQAJAAAA0GoBAO1qAQAJAAAA8GoBAPRqAQAN\ -AAAA9WoBAPVqAQAJAAAAAGsBAC9rAQAJAAAAMGsBADZrAQANAAAAN2sBAEVrAQAJAAAAUGsBAFlrAQ\ -AJAAAAW2sBAGFrAQAJAAAAY2sBAHdrAQAJAAAAfWsBAI9rAQAJAAAAQG4BAJpuAQAJAAAAAG8BAEpv\ -AQAJAAAAT28BAE9vAQANAAAAUG8BAIdvAQAJAAAAj28BAJJvAQANAAAAk28BAJ9vAQAJAAAA4G8BAO\ -FvAQAJAAAA4m8BAOJvAQAOAAAA428BAONvAQAJAAAA5G8BAORvAQANAAAA8G8BAPFvAQAJAAAAAHAB\ -APeHAQAJAAAAAIgBANWMAQAJAAAAAI0BAAiNAQAJAAAA8K8BAPOvAQAJAAAA9a8BAPuvAQAJAAAA/a\ -8BAP6vAQAJAAAAALABACKxAQAJAAAAMrEBADKxAQAJAAAAULEBAFKxAQAJAAAAVbEBAFWxAQAJAAAA\ -ZLEBAGexAQAJAAAAcLEBAPuyAQAJAAAAALwBAGq8AQAJAAAAcLwBAHy8AQAJAAAAgLwBAIi8AQAJAA\ -AAkLwBAJm8AQAJAAAAnLwBAJy8AQAJAAAAnbwBAJ68AQANAAAAn7wBAJ+8AQAJAAAAoLwBAKO8AQAD\ -AAAAAM8BAC3PAQANAAAAMM8BAEbPAQANAAAAUM8BAMPPAQAJAAAAANABAPXQAQAJAAAAANEBACbRAQ\ -AJAAAAKdEBAGbRAQAJAAAAZ9EBAGnRAQANAAAAatEBAHLRAQAJAAAAc9EBAHrRAQADAAAAe9EBAILR\ -AQANAAAAg9EBAITRAQAJAAAAhdEBAIvRAQANAAAAjNEBAKnRAQAJAAAAqtEBAK3RAQANAAAArtEBAO\ -jRAQAJAAAA6dEBAOrRAQAOAAAAANIBAEHSAQAOAAAAQtIBAETSAQANAAAARdIBAEXSAQAOAAAAwNIB\ -ANPSAQAJAAAA4NIBAPPSAQAJAAAAANMBAFbTAQAOAAAAYNMBAHjTAQAJAAAAANQBAFTUAQAJAAAAVt\ -QBAJzUAQAJAAAAntQBAJ/UAQAJAAAAotQBAKLUAQAJAAAApdQBAKbUAQAJAAAAqdQBAKzUAQAJAAAA\ -rtQBALnUAQAJAAAAu9QBALvUAQAJAAAAvdQBAMPUAQAJAAAAxdQBAAXVAQAJAAAAB9UBAArVAQAJAA\ -AADdUBABTVAQAJAAAAFtUBABzVAQAJAAAAHtUBADnVAQAJAAAAO9UBAD7VAQAJAAAAQNUBAETVAQAJ\ -AAAARtUBAEbVAQAJAAAAStUBAFDVAQAJAAAAUtUBAKXWAQAJAAAAqNYBANrWAQAJAAAA29YBANvWAQ\ -AOAAAA3NYBABTXAQAJAAAAFdcBABXXAQAOAAAAFtcBAE7XAQAJAAAAT9cBAE/XAQAOAAAAUNcBAIjX\ -AQAJAAAAidcBAInXAQAOAAAAitcBAMLXAQAJAAAAw9cBAMPXAQAOAAAAxNcBAMvXAQAJAAAAztcBAP\ -/XAQAFAAAAANgBAP/ZAQAJAAAAANoBADbaAQANAAAAN9oBADraAQAJAAAAO9oBAGzaAQANAAAAbdoB\ -AHTaAQAJAAAAddoBAHXaAQANAAAAdtoBAIPaAQAJAAAAhNoBAITaAQANAAAAhdoBAIvaAQAJAAAAm9\ -oBAJ/aAQANAAAAodoBAK/aAQANAAAAAN8BAB7fAQAJAAAAJd8BACrfAQAJAAAAAOABAAbgAQANAAAA\ -COABABjgAQANAAAAG+ABACHgAQANAAAAI+ABACTgAQANAAAAJuABACrgAQANAAAAMOABAG3gAQAJAA\ -AAj+ABAI/gAQANAAAAAOEBACzhAQAJAAAAMOEBADbhAQANAAAAN+EBAD3hAQAJAAAAQOEBAEnhAQAJ\ -AAAATuEBAE/hAQAJAAAAkOIBAK3iAQAJAAAAruIBAK7iAQANAAAAwOIBAOviAQAJAAAA7OIBAO/iAQ\ -ANAAAA8OIBAPniAQAJAAAA/+IBAP/iAQAHAAAA0OQBAOvkAQAJAAAA7OQBAO/kAQANAAAA8OQBAPnk\ -AQAJAAAA4OcBAObnAQAJAAAA6OcBAOvnAQAJAAAA7ecBAO7nAQAJAAAA8OcBAP7nAQAJAAAAAOgBAM\ -/oAQARAAAA0OgBANboAQANAAAA1+gBAEPpAQARAAAAROkBAErpAQANAAAAS+kBAHDsAQARAAAAcewB\ -ALTsAQAAAAAAtewBAADtAQARAAAAAe0BAD3tAQAAAAAAPu0BAP/tAQARAAAAAO4BAO/uAQAAAAAA8O\ -4BAPHuAQAOAAAA8u4BAP/uAQAAAAAAAO8BAP/vAQARAAAAAPABACvwAQAOAAAAMPABAJPwAQAOAAAA\ -oPABAK7wAQAOAAAAsfABAL/wAQAOAAAAwfABAM/wAQAOAAAA0fABAPXwAQAOAAAAAPEBAArxAQAFAA\ -AAC/EBAA/xAQAOAAAAEPEBAC7xAQAJAAAAL/EBAC/xAQAOAAAAMPEBAGnxAQAJAAAAavEBAG/xAQAO\ -AAAAcPEBAKzxAQAJAAAArfEBAK3xAQAOAAAA5vEBAALyAQAJAAAAEPIBADvyAQAJAAAAQPIBAEjyAQ\ -AJAAAAUPIBAFHyAQAJAAAAYPIBAGXyAQAOAAAAAPMBANf2AQAOAAAA3PYBAOz2AQAOAAAA8PYBAPz2\ -AQAOAAAAAPcBAHb3AQAOAAAAe/cBANn3AQAOAAAA4PcBAOv3AQAOAAAA8PcBAPD3AQAOAAAAAPgBAA\ -v4AQAOAAAAEPgBAEf4AQAOAAAAUPgBAFn4AQAOAAAAYPgBAIf4AQAOAAAAkPgBAK34AQAOAAAAsPgB\ -ALH4AQAOAAAAAPkBAFP6AQAOAAAAYPoBAG36AQAOAAAAcPoBAHz6AQAOAAAAgPoBAIj6AQAOAAAAkP\ -oBAL36AQAOAAAAv/oBAMX6AQAOAAAAzvoBANv6AQAOAAAA4PoBAOj6AQAOAAAA8PoBAPj6AQAOAAAA\ -APsBAJL7AQAOAAAAlPsBAMr7AQAOAAAA8PsBAPn7AQAFAAAAAAACAN+mAgAJAAAAAKcCADm3AgAJAA\ -AAQLcCAB24AgAJAAAAILgCAKHOAgAJAAAAsM4CAODrAgAJAAAAAPgCAB36AgAJAAAAAAADAEoTAwAJ\ -AAAAUBMDAK8jAwAJAAAAAQAOAAEADgADAAAAIAAOAH8ADgADAAAAAAEOAO8BDgANAAAAAAAPAP3/Dw\ -AJAAAAAAAQAP3/EAAJAAAAYXNzZXJ0aW9uIGZhaWxlZDogbWlkIDw9IHNlbGYubGVuKCl+Ly5jYXJn\ -by9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvcGVyY2VudC1lbm\ -NvZGluZy0yLjMuMC9zcmMvbGliLnJzANdoEwBYAAAA0wAAACgAAAAlMDAlMDElMDIlMDMlMDQlMDUl\ -MDYlMDclMDglMDklMEElMEIlMEMlMEQlMEUlMEYlMTAlMTElMTIlMTMlMTQlMTUlMTYlMTclMTglMT\ -klMUElMUIlMUMlMUQlMUUlMUYlMjAlMjElMjIlMjMlMjQlMjUlMjYlMjclMjglMjklMkElMkIlMkMl\ -MkQlMkUlMkYlMzAlMzElMzIlMzMlMzQlMzUlMzYlMzclMzglMzklM0ElM0IlM0MlM0QlM0UlM0YlND\ -AlNDElNDIlNDMlNDQlNDUlNDYlNDclNDglNDklNEElNEIlNEMlNEQlNEUlNEYlNTAlNTElNTIlNTMl\ -NTQlNTUlNTYlNTclNTglNTklNUElNUIlNUMlNUQlNUUlNUYlNjAlNjElNjIlNjMlNjQlNjUlNjYlNj\ -clNjglNjklNkElNkIlNkMlNkQlNkUlNkYlNzAlNzElNzIlNzMlNzQlNzUlNzYlNzclNzglNzklN0El\ -N0IlN0MlN0QlN0UlN0YlODAlODElODIlODMlODQlODUlODYlODclODglODklOEElOEIlOEMlOEQlOE\ -UlOEYlOTAlOTElOTIlOTMlOTQlOTUlOTYlOTclOTglOTklOUElOUIlOUMlOUQlOUUlOUYlQTAlQTEl\ -QTIlQTMlQTQlQTUlQTYlQTclQTglQTklQUElQUIlQUMlQUQlQUUlQUYlQjAlQjElQjIlQjMlQjQlQj\ -UlQjYlQjclQjglQjklQkElQkIlQkMlQkQlQkUlQkYlQzAlQzElQzIlQzMlQzQlQzUlQzYlQzclQzgl\ -QzklQ0ElQ0IlQ0MlQ0QlQ0UlQ0YlRDAlRDElRDIlRDMlRDQlRDUlRDYlRDclRDglRDklREElREIlRE\ -MlREQlREUlREYlRTAlRTElRTIlRTMlRTQlRTUlRTYlRTclRTglRTklRUElRUIlRUMlRUQlRUUlRUYl\ -RjAlRjElRjIlRjMlRjQlRjUlRjYlRjclRjglRjklRkElRkIlRkMlRkQlRkUlRkbXaBMAWAAAABQBAA\ -BHAAAA12gTAFgAAACdAQAAIwAAAO0AAAAIAAAABAAAAO4AAADvAAAA7QAAAAgAAAAEAAAA8AAAAGEg\ -c3RyaW5nYnl0ZSBhcnJheXN0cnVjdCBTeXN0ZW1UaW1lc3RydWN0IHZhcmlhbnQAAACnbBMADgAAAH\ -R1cGxlIHZhcmlhbnQAAADAbBMADQAAAG5ld3R5cGUgdmFyaWFudADYbBMADwAAAHVuaXQgdmFyaWFu\ -dPBsEwAMAAAAZW51bQRtEwAEAAAAbWFwABBtEwADAAAAc2VxdWVuY2UcbRMACAAAAG5ld3R5cGUgc3\ -RydWN0AAAsbRMADgAAAE9wdGlvbiB2YWx1ZURtEwAMAAAAdW5pdCB2YWx1ZQAAWG0TAAoAAACMbBMA\ -CgAAAHN0cmluZyAAdG0TAAcAAABjaGFyYWN0ZXIgYGCEbRMACwAAAI9tEwABAAAAZmxvYXRpbmcgcG\ -9pbnQgYKBtEwAQAAAAj20TAAEAAABpbnRlZ2VyIGAAAADAbRMACQAAAI9tEwABAAAAYm9vbGVhbiBg\ -AAAA3G0TAAkAAACPbRMAAQAAAG9uZSBvZiAA+G0TAAcAAAAsIAAACG4TAAIAAACPbRMAAQAAAI9tEw\ -ABAAAAYCBvciBgAACPbRMAAQAAACRuEwAGAAAAj20TAAEAAAB+Ly5jYXJnby9yZWdpc3RyeS9zcmMv\ -aW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvc2VyZGUtMS4wLjE4My9zcmMvZGUvbW9kLn\ -JzZXhwbGljaXQgcGFuaWNEbhMAUgAAAOwIAAASAAAAdTMydTY0AADyAAAABAAAAAQAAADzAAAA9AAA\ -APUAAABkZXNjcmlwdGlvbigpIGlzIGRlcHJlY2F0ZWQ7IHVzZSBEaXNwbGF51G4TAAAAAAD2AAAA9w\ -AAAPgAAAD5AAAA+gAAAPsAAAAMAAAABAAAAPwAAAD7AAAADAAAAAQAAAD9AAAA/AAAABhvEwD+AAAA\ -/wAAAAABAAD+AAAAAQEAAAIBAAAQAAAABAAAAAMBAAACAQAAEAAAAAQAAAAEAQAAAwEAAFRvEwAFAQ\ -AABgEAAAABAAAHAQAAAQEAADogAACQbxMAAgAAAAoKQ2F1c2VkIGJ5OpxvEwAMAAAACgAAALBvEwAB\ -AAAA1G4TAAAAAACQbxMAAgAAACAgICAgICAgICAgY2FsbGVkIGBPcHRpb246OnVud3JhcCgpYCBvbi\ -BhIGBOb25lYCB2YWx1ZS9ydXN0Yy9lYjI2Mjk2YjU1NmNlZjEwZmI3MTNhMzhmM2QxNmI5ODg2MDgw\ -ZjI2L2xpYnJhcnkvY29yZS9zcmMvc2xpY2UvaXRlci5ycwJwEwBOAAAA7AEAACEAAAAMAQAABAAAAA\ -QAAAANAQAADgEAAA8BAABvdmVyZmxvdyBpbiBEdXJhdGlvbjo6bmV3AAAAeHATABkAAAAvcnVzdGMv\ -ZWIyNjI5NmI1NTZjZWYxMGZiNzEzYTM4ZjNkMTZiOTg4NjA4MGYyNi9saWJyYXJ5L2NvcmUvc3JjL3\ -RpbWUucnOccBMASAAAAMoAAAAVAAAAQWNjZXNzRXJyb3J1c2Ugb2Ygc3RkOjp0aHJlYWQ6OmN1cnJl\ -bnQoKSBpcyBub3QgcG9zc2libGUgYWZ0ZXIgdGhlIHRocmVhZCdzIGxvY2FsIGRhdGEgaGFzIGJlZW\ -4gZGVzdHJveWVkbGlicmFyeS9zdGQvc3JjL3RocmVhZC9tb2QucnMAAF1xEwAdAAAAxwIAACMAAABm\ -YWlsZWQgdG8gZ2VuZXJhdGUgdW5pcXVlIHRocmVhZCBJRDogYml0c3BhY2UgZXhoYXVzdGVkAIxxEw\ -A3AAAAXXETAB0AAABABAAADQAAAHhwEwAAAAAAdW5jYXRlZ29yaXplZCBlcnJvcm90aGVyIGVycm9y\ -b3V0IG9mIG1lbW9yeXVuZXhwZWN0ZWQgZW5kIG9mIGZpbGV1bnN1cHBvcnRlZG9wZXJhdGlvbiBpbn\ -RlcnJ1cHRlZGFyZ3VtZW50IGxpc3QgdG9vIGxvbmdpbnZhbGlkIGZpbGVuYW1ldG9vIG1hbnkgbGlu\ -a3Njcm9zcy1kZXZpY2UgbGluayBvciByZW5hbWVkZWFkbG9ja2V4ZWN1dGFibGUgZmlsZSBidXN5cm\ -Vzb3VyY2UgYnVzeWZpbGUgdG9vIGxhcmdlZmlsZXN5c3RlbSBxdW90YSBleGNlZWRlZHNlZWsgb24g\ -dW5zZWVrYWJsZSBmaWxlbm8gc3RvcmFnZSBzcGFjZXdyaXRlIHplcm90aW1lZCBvdXRpbnZhbGlkIG\ -RhdGFpbnZhbGlkIGlucHV0IHBhcmFtZXRlcnN0YWxlIG5ldHdvcmsgZmlsZSBoYW5kbGVmaWxlc3lz\ -dGVtIGxvb3Agb3IgaW5kaXJlY3Rpb24gbGltaXQgKGUuZy4gc3ltbGluayBsb29wKXJlYWQtb25seS\ -BmaWxlc3lzdGVtIG9yIHN0b3JhZ2UgbWVkaXVtZGlyZWN0b3J5IG5vdCBlbXB0eWlzIGEgZGlyZWN0\ -b3J5bm90IGEgZGlyZWN0b3J5b3BlcmF0aW9uIHdvdWxkIGJsb2NrZW50aXR5IGFscmVhZHkgZXhpc3\ -RzYnJva2VuIHBpcGVuZXR3b3JrIGRvd25hZGRyZXNzIG5vdCBhdmFpbGFibGVhZGRyZXNzIGluIHVz\ -ZW5vdCBjb25uZWN0ZWRjb25uZWN0aW9uIGFib3J0ZWRuZXR3b3JrIHVucmVhY2hhYmxlaG9zdCB1bn\ -JlYWNoYWJsZWNvbm5lY3Rpb24gcmVzZXRjb25uZWN0aW9uIHJlZnVzZWRwZXJtaXNzaW9uIGRlbmll\ -ZGVudGl0eSBub3QgZm91bmRFcnJvcmtpbmQAABABAAABAAAAAQAAABEBAABtZXNzYWdlAAwBAAAIAA\ -AABAAAABIBAABLaW5kT3Njb2RlAAAMAQAABAAAAAQAAAATAQAAFAEAAAwAAAAEAAAAFQEAACAob3Mg\ -ZXJyb3IgKXhwEwAAAAAAMHUTAAsAAAA7dRMAAQAAAGFscmVhZHkgYm9ycm93ZWQWAQAAAAAAAAEAAA\ -AXAQAAbGlicmFyeS9zdGQvc3JjL3BhdGgucnMAdHUTABcAAADYAgAAGAAAAHR1EwAXAAAA/wIAACMA\ -AAB0dRMAFwAAAAEDAAAdAAAAdHUTABcAAAAOAwAAHgAAAHR1EwAXAAAAGgMAAB4AAAB0dRMAFwAAAL\ -YDAAAiAAAAdHUTABcAAADBAwAAJgAAAHR1EwAXAAAAyAMAACYAAABvdmVyZmxvdyB3aGVuIGFkZGlu\ -ZyBkdXJhdGlvbiB0byBpbnN0YW50bGlicmFyeS9zdGQvc3JjL3RpbWUucnMANHYTABcAAABIAgAAHw\ -AAAGxpYnJhcnkvc3RkL3NyYy9zeXNfY29tbW9uL3RocmVhZF9pbmZvLnJzAAAAXHYTACkAAAAWAAAA\ -MwAAAG1lbW9yeSBhbGxvY2F0aW9uIG9mICBieXRlcyBmYWlsZWQAAJh2EwAVAAAArXYTAA0AAABsaW\ -JyYXJ5L3N0ZC9zcmMvYWxsb2MucnPMdhMAGAAAAFUBAAAJAAAAY2Fubm90IG1vZGlmeSB0aGUgcGFu\ -aWMgaG9vayBmcm9tIGEgcGFuaWNraW5nIHRocmVhZPR2EwA0AAAAbGlicmFyeS9zdGQvc3JjL3Bhbm\ -lja2luZy5yczB3EwAcAAAAhwAAAAkAAAAwdxMAHAAAAFACAAAeAAAAMHcTABwAAABPAgAAHwAAABQB\ -AAAMAAAABAAAABgBAAAMAQAACAAAAAQAAAAZAQAAGgEAABAAAAAEAAAAGwEAABwBAAAMAQAACAAAAA\ -QAAAAdAQAAHgEAABYBAAAAAAAAAQAAAB8BAABVbnN1cHBvcnRlZEN1c3RvbWVycm9yAAAMAQAABAAA\ -AAQAAAAgAQAAVW5jYXRlZ29yaXplZE90aGVyT3V0T2ZNZW1vcnlVbmV4cGVjdGVkRW9mSW50ZXJydX\ -B0ZWRBcmd1bWVudExpc3RUb29Mb25nSW52YWxpZEZpbGVuYW1lVG9vTWFueUxpbmtzQ3Jvc3Nlc0Rl\ -dmljZXNEZWFkbG9ja0V4ZWN1dGFibGVGaWxlQnVzeVJlc291cmNlQnVzeUZpbGVUb29MYXJnZUZpbG\ -VzeXN0ZW1RdW90YUV4Y2VlZGVkTm90U2Vla2FibGVTdG9yYWdlRnVsbFdyaXRlWmVyb1RpbWVkT3V0\ -SW52YWxpZERhdGFJbnZhbGlkSW5wdXRTdGFsZU5ldHdvcmtGaWxlSGFuZGxlRmlsZXN5c3RlbUxvb3\ -BSZWFkT25seUZpbGVzeXN0ZW1EaXJlY3RvcnlOb3RFbXB0eUlzQURpcmVjdG9yeU5vdEFEaXJlY3Rv\ -cnlXb3VsZEJsb2NrQWxyZWFkeUV4aXN0c0Jyb2tlblBpcGVOZXR3b3JrRG93bkFkZHJOb3RBdmFpbG\ -FibGVBZGRySW5Vc2VOb3RDb25uZWN0ZWRDb25uZWN0aW9uQWJvcnRlZE5ldHdvcmtVbnJlYWNoYWJs\ -ZUhvc3RVbnJlYWNoYWJsZUNvbm5lY3Rpb25SZXNldENvbm5lY3Rpb25SZWZ1c2VkUGVybWlzc2lvbk\ -RlbmllZE5vdEZvdW5kb3BlcmF0aW9uIHN1Y2Nlc3NmdWwAEAAAABEAAAASAAAAEAAAABAAAAATAAAA\ -EgAAAA0AAAAOAAAAFQAAAAwAAAALAAAAFQAAABUAAAAPAAAADgAAABMAAAAmAAAAOAAAABkAAAAXAA\ -AADAAAAAkAAAAKAAAAEAAAABcAAAAZAAAADgAAAA0AAAAUAAAACAAAABsAAAAOAAAAEAAAABYAAAAV\ -AAAACwAAABYAAAANAAAACwAAABMAAADBdBMAsHQTAJ50EwCOdBMAfnQTAGt0EwBZdBMATHQTAD50Ew\ -ApdBMAHXQTABJ0EwD9cxMA6HMTANlzEwDLcxMAuHMTAJJzEwBacxMAQXMTACpzEwAecxMAFXMTAAtz\ -EwD7chMA5HITAMtyEwC9chMAsHITAJxyEwCUchMAeXITAGtyEwBbchMARXITADByEwAlchMAD3ITAA\ -JyEwD3cRMA5HETAAgAAAAQAAAAEQAAAA8AAAAPAAAAEgAAABEAAAAMAAAACQAAABAAAAALAAAACgAA\ -AA0AAAAKAAAADQAAAAwAAAARAAAAEgAAAA4AAAAWAAAADAAAAAsAAAAIAAAACQAAAAsAAAALAAAAFw\ -AAAAwAAAAMAAAAEgAAAAgAAAAOAAAADAAAAA8AAAATAAAACwAAAAsAAAANAAAACwAAAAUAAAANAAAA\ -B3oTAPd5EwDmeRMA13kTAMh5EwC2eRMApXkTAJl5EwCQeRMAgHkTAHV5EwBreRMAXnkTAFR5EwBHeR\ -MAO3kTACp5EwAYeRMACnkTAPR4EwDoeBMA3XgTANV4EwDMeBMAwXgTALZ4EwCfeBMAk3gTAId4EwB1\ -eBMAbXgTAF94EwBTeBMARHgTADF4EwAmeBMA1HcTABl4EwAOeBMACXgTAPx3EwBIYXNoIHRhYmxlIG\ -NhcGFjaXR5IG92ZXJmbG93tHwTABwAAAAvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5p\ -by02ZjE3ZDIyYmJhMTUwMDFmL2hhc2hicm93bi0wLjEzLjEvc3JjL3Jhdy9tb2QucnPYfBMAVAAAAF\ -oAAAAoAAAAIQEAAAQAAAAEAAAAIgEAACMBAAAkAQAAIQEAAAQAAAAEAAAAJQEAAGxpYnJhcnkvYWxs\ -b2Mvc3JjL3Jhd192ZWMucnNjYXBhY2l0eSBvdmVyZmxvdwAAAIB9EwARAAAAZH0TABwAAAAMAgAABQ\ -AAAGEgZm9ybWF0dGluZyB0cmFpdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5lZCBhbiBlcnJvcgAmAQAA\ -AAAAAAEAAAAnAAAAbGlicmFyeS9hbGxvYy9zcmMvZm10LnJz8H0TABgAAABiAgAAIAAAAGNhbGxlZC\ -BgUmVzdWx0Ojp1bndyYXAoKWAgb24gYW4gYEVycmAgdmFsdWUAJgEAAAAAAAABAAAAJwEAAGxpYnJh\ -cnkvYWxsb2Mvc3JjL3N0ci5yc1R+EwAYAAAAmAEAAC8AAABUfhMAGAAAAJcBAAA7AAAA77+9aW52YW\ -xpZCB1dGYtOGxpYnJhcnkvYWxsb2Mvc3JjL3N5bmMucnMAAACcfhMAGQAAAFsBAAAyAAAAc3dhcF9y\ -ZW1vdmUgaW5kZXggKGlzICkgc2hvdWxkIGJlIDwgbGVuIChpcyApAAAAyH4TABYAAADefhMAFgAAAP\ -R+EwABAAAAbGlicmFyeS9hbGxvYy9zcmMvdmVjL21vZC5ycxB/EwAcAAAAdgUAAA0AAAApIHNob3Vs\ -ZCBiZSA8PSBsZW4gKGlzIHJlbW92YWwgaW5kZXggKGlzIAAAAFN/EwASAAAA3n4TABYAAAD0fhMAAQ\ -AAAGBhdGAgc3BsaXQgaW5kZXggKGlzIAAAAIB/EwAVAAAAPH8TABcAAAD0fhMAAQAAABB/EwAcAAAA\ -MggAAA0AAABieXRlc2Vycm9yAAAhAQAABAAAAAQAAAAoAQAARnJvbVV0ZjhFcnJvcgAAACkBAAAMAA\ -AABAAAACoBAABhc3NlcnRpb24gZmFpbGVkOiBlZGVsdGEgPj0gMGxpYnJhcnkvY29yZS9zcmMvbnVt\ -L2RpeV9mbG9hdC5ycwAAGYATACEAAABMAAAACQAAABmAEwAhAAAATgAAAAkAAAACAAAAFAAAAMgAAA\ -DQBwAAIE4AAEANAwCAhB4AAC0xAQDC6wsAlDV3AADBb/KGIwAAAAAAge+shVtBbS3uBAAAAAAAAAAA\ -AAABH2q/ZO04bu2Xp9r0+T/pA08YAAAAAAAAAAAAAAAAAAAAAAABPpUuCZnfA/04FQ8v5HQj7PXP0w\ -jcBMTasM28GX8zpgMmH+lOAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABfC6YW4fT\ -vnKf2diHLxUSxlDea3BuSs8P2JXVbnGyJrBmxq0kNhUdWtNCPA5U/2PAc1XMF+/5ZfIovFX3x9yA3O\ -1u9M7v3F/3UwUAbGlicmFyeS9jb3JlL3NyYy9udW0vZmx0MmRlYy9zdHJhdGVneS9kcmFnb24ucnNh\ -c3NlcnRpb24gZmFpbGVkOiBkLm1hbnQgPiAwAFyBEwAvAAAAdQAAAAUAAABhc3NlcnRpb24gZmFpbG\ -VkOiBkLm1pbnVzID4gMAAAAFyBEwAvAAAAdgAAAAUAAABhc3NlcnRpb24gZmFpbGVkOiBkLnBsdXMg\ -PiAwXIETAC8AAAB3AAAABQAAAGFzc2VydGlvbiBmYWlsZWQ6IGQubWFudC5jaGVja2VkX2FkZChkLn\ -BsdXMpLmlzX3NvbWUoKQAAXIETAC8AAAB4AAAABQAAAGFzc2VydGlvbiBmYWlsZWQ6IGQubWFudC5j\ -aGVja2VkX3N1YihkLm1pbnVzKS5pc19zb21lKCkAXIETAC8AAAB5AAAABQAAAGFzc2VydGlvbiBmYW\ -lsZWQ6IGJ1Zi5sZW4oKSA+PSBNQVhfU0lHX0RJR0lUUwAAAFyBEwAvAAAAegAAAAUAAABcgRMALwAA\ -AMEAAAAJAAAAXIETAC8AAAD5AAAAVAAAAFyBEwAvAAAA+gAAAA0AAABcgRMALwAAAAEBAAAzAAAAXI\ -ETAC8AAAAKAQAABQAAAFyBEwAvAAAACwEAAAUAAABcgRMALwAAAAwBAAAFAAAAXIETAC8AAAANAQAA\ -BQAAAFyBEwAvAAAADgEAAAUAAABcgRMALwAAAEsBAAAfAAAAXIETAC8AAABlAQAADQAAAFyBEwAvAA\ -AAcQEAACQAAABcgRMALwAAAHYBAABUAAAAXIETAC8AAACDAQAAMwAAAAAAAADfRRo9A88a5sH7zP4A\ -AAAAysaaxxf+cKvc+9T+AAAAAE/cvL78sXf/9vvc/gAAAAAM1mtB75FWvhH85P4AAAAAPPx/kK0f0I\ -0s/Oz+AAAAAIOaVTEoXFHTRvz0/gAAAAC1yaatj6xxnWH8/P4AAAAAy4vuI3cinOp7/AT/AAAAAG1T\ -eECRScyulvwM/wAAAABXzrZdeRI8grH8FP8AAAAAN1b7TTaUEMLL/Bz/AAAAAE+YSDhv6paQ5vwk/w\ -AAAADHOoIly4V01wD9LP8AAAAA9Je/l83PhqAb/TT/AAAAAOWsKheYCjTvNf08/wAAAACOsjUq+2c4\ -slD9RP8AAAAAOz/G0t/UyIRr/Uz/AAAAALrN0xonRN3Fhf1U/wAAAACWySW7zp9rk6D9XP8AAAAAhK\ -VifSRsrNu6/WT/AAAAAPbaXw1YZquj1f1s/wAAAAAm8cPek/ji8+/9dP8AAAAAuID/qqittbUK/nz/\ -AAAAAItKfGwFX2KHJf6E/wAAAABTMME0YP+8yT/+jP8AAAAAVSa6kYyFTpZa/pT/AAAAAL1+KXAkd/\ -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\ -FuZ2UgYFsyLCAzNl1gIC0gZm91bmQgJIwTADwAAABsaWJyYXJ5L2NvcmUvc3JjL251bS9tb2QucnMA\ -aIwTABsAAACiBQAABQAAACAoMSA8PCAp/H8TAAAAAACUjBMABwAAAJuMEwABAAAAbGlicmFyeS9jb3\ -JlL3NyYy9mbXQvbW9kLnJzLi4AAADPjBMAAgAAAEJvcnJvd011dEVycm9yAAD8fxMAAAAAAOKLEwAB\ -AAAA4osTAAEAAADiixMAAQAAADYBAAAEAAAABAAAADcBAAA4AQAAOQEAAGNhbGxlZCBgUmVzdWx0Oj\ -p1bndyYXAoKWAgb24gYW4gYEVycmAgdmFsdWUAOgEAAAAAAAABAAAAJwAAAGxpYnJhcnkvY29yZS9z\ -cmMvbmV0L2lwX2FkZHIucnMAYI0TAB8AAADkAwAAVAAAAGxpYnJhcnkvY29yZS9zcmMvbmV0L2Rpc3\ -BsYXlfYnVmZmVyLnJzAACQjRMAJgAAABYAAAA5AAAA/H8TAAAAAAA6WwAA/H8TAAAAAADQjRMAAQAA\ -ANCNEwABAAAAcGFuaWNrZWQgYXQgJycsIPiNEwABAAAA+Y0TAAMAAAA6AQAAAAAAAAEAAAA7AQAAaW\ -5kZXggb3V0IG9mIGJvdW5kczogdGhlIGxlbiBpcyAgYnV0IHRoZSBpbmRleCBpcyAAAByOEwAgAAAA\ -PI4TABIAAAA2AQAABAAAAAQAAAA8AQAAbWF0Y2hlcyE9PT1hc3NlcnRpb24gZmFpbGVkOiBgKGxlZn\ -QgIHJpZ2h0KWAKICBsZWZ0OiBgYCwKIHJpZ2h0OiBgYDogAAAAe44TABkAAACUjhMAEgAAAKaOEwAM\ -AAAAso4TAAMAAABgAAAAe44TABkAAACUjhMAEgAAAKaOEwAMAAAA2I4TAAEAAAA6IAAA/H8TAAAAAA\ -D8jhMAAgAAADYBAAAMAAAABAAAAD0BAAA+AQAAPwEAACAgICAgewosCiwgIHsgfSB9KAooLAoAADYB\ -AAAEAAAABAAAAEABAABdbGlicmFyeS9jb3JlL3NyYy9mbXQvbnVtLnJzUY8TABsAAABpAAAAFAAAAD\ -B4MDAwMTAyMDMwNDA1MDYwNzA4MDkxMDExMTIxMzE0MTUxNjE3MTgxOTIwMjEyMjIzMjQyNTI2Mjcy\ -ODI5MzAzMTMyMzMzNDM1MzYzNzM4Mzk0MDQxNDI0MzQ0NDU0NjQ3NDg0OTUwNTE1MjUzNTQ1NTU2NT\ -c1ODU5NjA2MTYyNjM2NDY1NjY2NzY4Njk3MDcxNzI3Mzc0NzU3Njc3Nzg3OTgwODE4MjgzODQ4NTg2\ -ODc4ODg5OTA5MTkyOTM5NDk1OTY5Nzk4OTkAADYBAAAEAAAABAAAAEEBAABCAQAAQwEAALSMEwAbAA\ -AA2AUAAB4AAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw\ -MDAwMDAwMDAwMDAwMDAwtIwTABsAAADSBQAALQAAAHRydWVmYWxzZQAAALSMEwAbAAAAFAkAAB4AAA\ -C0jBMAGwAAABsJAAAWAAAAbGlicmFyeS9jb3JlL3NyYy9zbGljZS9tZW1jaHIucnPskBMAIAAAAJEA\ -AAAaAAAA7JATACAAAACtAAAABQAAAHJhbmdlIHN0YXJ0IGluZGV4ICBvdXQgb2YgcmFuZ2UgZm9yIH\ -NsaWNlIG9mIGxlbmd0aCAskRMAEgAAAD6REwAiAAAAcmFuZ2UgZW5kIGluZGV4IHCREwAQAAAAPpET\ -ACIAAABzbGljZSBpbmRleCBzdGFydHMgYXQgIGJ1dCBlbmRzIGF0IACQkRMAFgAAAKaREwANAAAAYX\ -R0ZW1wdGVkIHRvIGluZGV4IHNsaWNlIHVwIHRvIG1heGltdW0gdXNpemXEkRMALAAAAHNvdXJjZSBz\ -bGljZSBsZW5ndGggKCkgZG9lcyBub3QgbWF0Y2ggZGVzdGluYXRpb24gc2xpY2UgbGVuZ3RoICj4kR\ -MAFQAAAA2SEwArAAAAm4wTAAEAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB\ -AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ\ -EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\ -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgICAg\ -ICAgICAgICAgICAgMDAwMDAwMDAwMDAwMDAwMEBAQEBAAAAAAAAAAAAAAAaW5jb21wbGV0ZSB1dGYt\ -OCBieXRlIHNlcXVlbmNlIGZyb20gaW5kZXggAABQkxMAKgAAAGludmFsaWQgdXRmLTggc2VxdWVuY2\ -Ugb2YgIGJ5dGVzIGZyb20gaW5kZXgghJMTABoAAACekxMAEgAAAGxpYnJhcnkvY29yZS9zcmMvc3Ry\ -L3BhdHRlcm4ucnMAwJMTAB8AAABCBQAADAAAAMCTEwAfAAAAQgUAACIAAADAkxMAHwAAAFYFAAAwAA\ -AAwJMTAB8AAAA1BgAAFQAAAMCTEwAfAAAAYwYAABUAAADAkxMAHwAAAGQGAAAVAAAAAFsuLi5dYnl0\ -ZSBpbmRleCAgaXMgb3V0IG9mIGJvdW5kcyBvZiBgAEaUEwALAAAAUZQTABYAAADYjhMAAQAAAGJlZ2\ -luIDw9IGVuZCAoIDw9ICkgd2hlbiBzbGljaW5nIGAAAICUEwAOAAAAjpQTAAQAAACSlBMAEAAAANiO\ -EwABAAAAIGlzIG5vdCBhIGNoYXIgYm91bmRhcnk7IGl0IGlzIGluc2lkZSAgKGJ5dGVzICkgb2YgYE\ -aUEwALAAAAxJQTACYAAADqlBMACAAAAPKUEwAGAAAA2I4TAAEAAABsaWJyYXJ5L2NvcmUvc3JjL3N0\ -ci9tb2QucnMAIJUTABsAAAAHAQAAHQAAAG92ZXJmbG93IGluIER1cmF0aW9uOjpuZXcAAABMlRMAGQ\ -AAAGxpYnJhcnkvY29yZS9zcmMvdGltZS5yc3CVEwAYAAAAygAAABUAAABvdmVyZmxvdyB3aGVuIHN1\ -YnRyYWN0aW5nIGR1cmF0aW9ucwBwlRMAGAAAAKIDAAAfAAAAbGlicmFyeS9jb3JlL3NyYy91bmljb2\ -RlL3ByaW50YWJsZS5ycwAAAMyVEwAlAAAACgAAABwAAADMlRMAJQAAABoAAAA2AAAAAAEDBQUGBgIH\ -BggHCREKHAsZDBoNEA4MDwQQAxISEwkWARcEGAEZAxoHGwEcAh8WIAMrAy0LLgEwAzECMgGnAqkCqg\ -SrCPoC+wX9Av4D/wmteHmLjaIwV1iLjJAc3Q4PS0z7/C4vP1xdX+KEjY6RkqmxurvFxsnK3uTl/wAE\ -ERIpMTQ3Ojs9SUpdhI6SqbG0urvGys7P5OUABA0OERIpMTQ6O0VGSUpeZGWEkZudyc7PDREpOjtFSV\ -dbXF5fZGWNkam0urvFyd/k5fANEUVJZGWAhLK8vr/V1/Dxg4WLpKa+v8XHz9rbSJi9zcbOz0lOT1dZ\ -Xl+Jjo+xtre/wcbH1xEWF1tc9vf+/4Btcd7fDh9ubxwdX31+rq9/u7wWFx4fRkdOT1haXF5+f7XF1N\ -Xc8PH1cnOPdHWWJi4vp6+3v8fP19+aQJeYMI8f0tTO/05PWlsHCA8QJy/u725vNz0/QkWQkVNndcjJ\ -0NHY2ef+/wAgXyKC3wSCRAgbBAYRgawOgKsFHwmBGwMZCAEELwQ0BAcDAQcGBxEKUA8SB1UHAwQcCg\ -kDCAMHAwIDAwMMBAUDCwYBDhUFTgcbB1cHAgYXDFAEQwMtAwEEEQYPDDoEHSVfIG0EaiWAyAWCsAMa\ -BoL9A1kHFgkYCRQMFAxqBgoGGgZZBysFRgosBAwEAQMxCywEGgYLA4CsBgoGLzFNA4CkCDwDDwM8Bz\ -gIKwWC/xEYCC8RLQMhDyEPgIwEgpcZCxWIlAUvBTsHAg4YCYC+InQMgNYaDAWA/wWA3wzynQM3CYFc\ -FIC4CIDLBQoYOwMKBjgIRggMBnQLHgNaBFkJgIMYHAoWCUwEgIoGq6QMFwQxoQSB2iYHDAUFgKYQgf\ -UHASAqBkwEgI0EgL4DGwMPDQAGAQEDAQQCBQcHAggICQIKBQsCDgQQARECEgUTERQBFQIXAhkNHAUd\ -CB8BJAFqBGsCrwOxArwCzwLRAtQM1QnWAtcC2gHgBeEC5wToAu4g8AT4AvoD+wEMJzs+Tk+Pnp6fe4\ -uTlqKyuoaxBgcJNj0+VvPQ0QQUGDY3Vld/qq6vvTXgEoeJjp4EDQ4REikxNDpFRklKTk9kZVy2txsc\ -BwgKCxQXNjk6qKnY2Qk3kJGoBwo7PmZpj5IRb1+/7u9aYvT8/1NUmpsuLycoVZ2goaOkp6iturzEBg\ -sMFR06P0VRpqfMzaAHGRoiJT4/5+zv/8XGBCAjJSYoMzg6SEpMUFNVVlhaXF5gY2Vma3N4fX+KpKqv\ -sMDQrq9ub76TXiJ7BQMELQNmAwEvLoCCHQMxDxwEJAkeBSsFRAQOKoCqBiQEJAQoCDQLTkOBNwkWCg\ -gYO0U5A2MICTAWBSEDGwUBQDgESwUvBAoHCQdAICcEDAk2AzoFGgcEDAdQSTczDTMHLggKgSZSSysI\ -KhYaJhwUFwlOBCQJRA0ZBwoGSAgnCXULQj4qBjsFCgZRBgEFEAMFgItiHkgICoCmXiJFCwoGDRM6Bg\ -o2LAQXgLk8ZFMMSAkKRkUbSAhTDUkHCoD2RgodA0dJNwMOCAoGOQcKgTYZBzsDHFYBDzINg5tmdQuA\ -xIpMYw2EMBAWj6qCR6G5gjkHKgRcBiYKRgooBROCsFtlSwQ5BxFABQsCDpf4CITWKgmi54EzDwEdBg\ -4ECIGMiQRrBQ0DCQcQkmBHCXQ8gPYKcwhwFUZ6FAwUDFcJGYCHgUcDhUIPFYRQHwYGgNUrBT4hAXAt\ -AxoEAoFAHxE6BQGB0CqC5oD3KUwECgQCgxFETD2AwjwGAQRVBRs0AoEOLARkDFYKgK44HQ0sBAkHAg\ -4GgJqD2AQRAw0DdwRfBgwEAQ8MBDgICgYoCCJOgVQMHQMJBzYIDgQJBwkHgMslCoQGbGlicmFyeS9j\ -b3JlL3NyYy91bmljb2RlL3VuaWNvZGVfZGF0YS5yczAxMjM0NTY3ODlhYmNkZWZsaWJyYXJ5L2Nvcm\ -Uvc3JjL2VzY2FwZS5ycwAAyJsTABoAAAA0AAAABQAAAFx1ewDImxMAGgAAAGIAAAAjAAAAbGlicmFy\ -eS9jb3JlL3NyYy9udW0vYmlnbnVtLnJzAAAInBMAHgAAAKwBAAABAAAAYXNzZXJ0aW9uIGZhaWxlZD\ -ogbm9ib3Jyb3dhc3NlcnRpb24gZmFpbGVkOiBkaWdpdHMgPCA0MGFzc2VydGlvbiBmYWlsZWQ6IG90\ -aGVyID4gMFNvbWVOb25lAAA2AQAABAAAAAQAAAA0AQAARXJyb3JVdGY4RXJyb3J2YWxpZF91cF90b2\ -Vycm9yX2xlbgAANgEAAAQAAAAEAAAARAEAAJCbEwAoAAAAUAAAACgAAACQmxMAKAAAAFwAAAAWAAAA\ -sAIAAF0ToAISFyAivR9gInwsIDAFMGA0FaDgNfikYDcMpqA3HvvgNwD+4EP9AWFEgAchSAEK4UgkDa\ -FJqw4hSy8YYUs7GWFZMBzhWfMeYV0wNCFh8GphYk9v4WLwr6FjnbyhZADPYWVn0eFlANphZgDgoWeu\ -4iFp6+Qha9DooWv78+FrAQBubPABv2wnAQYBCwEjAQEBRwEEAQEBBAECAgDABAIEAQkCAQH7B88BBQ\ -ExLQEBAQIBAgEBLAELBgoLAQEjAQoVEAFlCAEKAQQhAQEBHhtbCzoLBAECARgYKwMsAQcCBggpOjcB\ -AQEECAQBAwcKAg0BDwE6AQQECAEUAhoBAgI5AQQCBAICAwMBHgIDAQsCOQEEBQECBAEUAhYGAQE6AQ\ -IBAQQIAQcCCwIeAT0BDAEyAQMBNwEBAwUDAQQHAgsCHQE6AQIBBgEFAhQCHAI5AgQECAEUAh0BSAEH\ -AwEBWgECBwsJYgECCQkBAQdJAhsBAQEBATcOAQUBAgULASQJAWYEAQYBAgICGQIEAxAEDQECAgYBDw\ -FeAQADAAMdAh4CHgJAAgEHCAECCwMBBQEtBTMBQQIiAXYDBAIJAQYD2wICAToBAQcBAQEBAggGCgIB\ -JwEIHzEEMAEBBQEBBQEoCQwCIAQCAgEDOAEBAgMBAQM6CAICQAZSAwENAQcEAQYBAwIyPw0BImUAAQ\ -EDCwMNAw0DDQIMBQgCCgECAQIFMQUBCgEBDQEQDTMhAAJxA30BDwFgIC8BAAEkBAMFBQFdBl0DAAEA\ -BgABYgQBCgEBHARQAg4iTgEXA2cDAwIIAQMBBAEZAgUBlwIaEg0BJggZCy4DMAECBAICEQEVAkIGAg\ -ICAgwBCAEjAQsBMwEBAwICBQIBARsBDgIFAgEBZAUJA3kBAgEEAQABkxEAEAMBDBAiAQIBqQEHAQYB\ -CwEjAQEBLwEtAkMBFQMAAeIBlQUABgEqAQkAAwECBQQoAwQBpQIABAACUANGCzEEewE2DykBAgIKAz\ -EEAgICAQQBCgEyAyQFAQg+AQwCNAkKBAIBXwMCAQECBgECAZ0BAwgVAjkCAwElBwMFwwgCAwEBFwFU\ -BgEBBAIBAu4EBgIBAhsCVQgCAQECagEBAQIGAQFlAwIEAQUACQECAAIBAQQBkAQCAgQBIAooBgIECA\ -EJBgIDLg0BAgAHAQYBAVIWAgcBAgECegYDAQECAQcBAUgCAwEBAQACCwI0BQUBAQEAEQYPAAU7BwkE\ -AAE/EUACAQIABAEHAQIAAgEEAC4CFwADCRACBx4ElAMANwQyCAEOARYFAQ8ABwERAgcBAgEFBT4hAa\ -AOAAE9BAAFAAdtCAAFAAEeYIDwAACgEAAAoBPgBoAcIAgWH6AItiTACQAsIBNApmATMKvgFAD7YBch\ -/yAYAAShGIAHIRmADOEboBjhHEBuYR0A1KEdptbhHQDfgSIw4GElAOkhJjDxYSaK8bImQRoGGi8BCg\ -EEAQUXAR8BwwEEBNABJAcCHgVgASoEAgICBAEBBgEBAwEBARQBUwGLCKYBJgkpACYBAQUBAisBBABW\ -AgYACQcrAgNAwEAAAgYCJgIGAggBAQEBAQEBHwI1AQcBAQMDAQcDBAIGBA0FAwEHdAENARANZQEEAQ\ -IKAQEDBQYBAQEBAQEEAQYEAQIEBQUEAREgAwIANADlBgQDAgwmAQEFAQAuEh6EZgMEATsFAgEBAQUY\ -BQEDACsBDgZQAAcMBQAaBhoAUGAkBCR0CwEPAQcBAgELAQ8BBwECAAECAwEqAQkAMw0zAEAAQABVAU\ -cBAgIBAgICBAEMAQEBBwFBAQQCCAEHARwBBAEFAQEDBwEAAhkBGQEfARkBHwEZAR8BGQEfARkBCAAK\ -ARQGBgA+AEQAGgYaBhoAAAADAACDBCAAkQVgAF0ToAASFyAfDCBgH+8soCsqMCAsb6bgLAKoYC0e+2\ -AuAP4gNp7/YDb9AeE2AQohNyQN4TerDmE5LxihOTAcYUjzHqFMQDRhUPBqoVFPbyFSnbyhUgDPYVNl\ -0aFTANohVADg4VWu4mFX7OQhWdDooVkgAO5Z8AF/WgBwAAcALQEBAQIBAgEBSAswFRABZQcCBgICAQ\ -QjAR4bWws6CQkBGAQBCQEDAQUrAzwIKhgBIDcBAQEECAQBAwcKAh0BOgEBAQIECAEJAQoCGgECAjkB\ -BAIEAgIDAwEeAgMBCwI5AQQFAQIEARQCFgYBAToBAQIBBAgBBwMKAh4BOwEBAQwBCQEoAQMBNwEBAw\ -UDAQQHAgsCHQE6AQIBAgEDAQUCBwILAhwCOQIBAQIECAEJAQoCHQFIAQQBAgMBAQgBUQECBwwIYgEC\ -CQsHSQIbAQEBAQE3DgEFAQIFCwEkCQFmBAEGAQICAhkCBAMQBA0BAgIGAQ8BAAMAAx0CHgIeAkACAQ\ -cIAQILCQEtAwEBdQIiAXYDBAIJAQYD2wICAToBAQcBAQEBAggGCgIBMB8xBDAHAQEFASgJDAIgBAIC\ -AQM4AQECAwEBAzoIAgKYAwENAQcEAQYBAwLGQAABwyEAA40BYCAABmkCAAQBCiACUAIAAQMBBAEZAg\ -UBlwIaEg0BJggZCy4DMAECBAICJwFDBgICAgIMAQgBLwEzAQEDAgIFAgEBKgIIAe4BAgEEAQABABAQ\ -EAACAAHiAZUFAAMBAgUEKAMEAaUCAAQAAlADRgsxBHsBNg8pAQICCgMxBAICBwE9AyQFAQg+AQwCNA\ -kKBAIBXwMCAQECBgECAZ0BAwgVAjkCAQEBARYBDgcDBcMIAgMBARcBUQECBgEBAgEBAgEC6wECBAYC\ -AQIbAlUIAgEBAmoBAQECBgEBZQMCBAEFAAkBAvUBCgIBAQQBkAQCAgQBIAooBgIECAEJBgIDLg0BAg\ -AHAQYBAVIWAgcBAgECegYDAQECAQcBAUgCAwEBAQACCwI0BQUBAQEAAQYPAAU7BwABPwRRAQACAC4C\ -FwABAQMEBQgIAgceBJQDADcEMggBDgEWBQEPAAcBEQIHAQIBBWQBoAcAAT0EAAQAB20HAGCA8AACAg\ -ICAgICAgIDAwEBAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAgIAAAAAAAIAAAAAAAAAAAAAAAAA\ -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\ -AAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAA\ -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\ -AAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAADgAAAAwQAAAOEAAADCAAAA4gAAAMMAAADjAAAAxAAAAOQA\ -AADFAAAA5QAAAMYAAADmAAAAxwAAAOcAAADIAAAA6AAAAMkAAADpAAAAygAAAOoAAADLAAAA6wAAAM\ -wAAADsAAAAzQAAAO0AAADOAAAA7gAAAM8AAADvAAAA0AAAAPAAAADRAAAA8QAAANIAAADyAAAA0wAA\ -APMAAADUAAAA9AAAANUAAAD1AAAA1gAAAPYAAADYAAAA+AAAANkAAAD5AAAA2gAAAPoAAADbAAAA+w\ -AAANwAAAD8AAAA3QAAAP0AAADeAAAA/gAAAAABAAABAQAAAgEAAAMBAAAEAQAABQEAAAYBAAAHAQAA\ -CAEAAAkBAAAKAQAACwEAAAwBAAANAQAADgEAAA8BAAAQAQAAEQEAABIBAAATAQAAFAEAABUBAAAWAQ\ -AAFwEAABgBAAAZAQAAGgEAABsBAAAcAQAAHQEAAB4BAAAfAQAAIAEAACEBAAAiAQAAIwEAACQBAAAl\ -AQAAJgEAACcBAAAoAQAAKQEAACoBAAArAQAALAEAAC0BAAAuAQAALwEAADABAAAAAEAAMgEAADMBAA\ -A0AQAANQEAADYBAAA3AQAAOQEAADoBAAA7AQAAPAEAAD0BAAA+AQAAPwEAAEABAABBAQAAQgEAAEMB\ -AABEAQAARQEAAEYBAABHAQAASAEAAEoBAABLAQAATAEAAE0BAABOAQAATwEAAFABAABRAQAAUgEAAF\ -MBAABUAQAAVQEAAFYBAABXAQAAWAEAAFkBAABaAQAAWwEAAFwBAABdAQAAXgEAAF8BAABgAQAAYQEA\ -AGIBAABjAQAAZAEAAGUBAABmAQAAZwEAAGgBAABpAQAAagEAAGsBAABsAQAAbQEAAG4BAABvAQAAcA\ -EAAHEBAAByAQAAcwEAAHQBAAB1AQAAdgEAAHcBAAB4AQAA/wAAAHkBAAB6AQAAewEAAHwBAAB9AQAA\ -fgEAAIEBAABTAgAAggEAAIMBAACEAQAAhQEAAIYBAABUAgAAhwEAAIgBAACJAQAAVgIAAIoBAABXAg\ -AAiwEAAIwBAACOAQAA3QEAAI8BAABZAgAAkAEAAFsCAACRAQAAkgEAAJMBAABgAgAAlAEAAGMCAACW\ -AQAAaQIAAJcBAABoAgAAmAEAAJkBAACcAQAAbwIAAJ0BAAByAgAAnwEAAHUCAACgAQAAoQEAAKIBAA\ -CjAQAApAEAAKUBAACmAQAAgAIAAKcBAACoAQAAqQEAAIMCAACsAQAArQEAAK4BAACIAgAArwEAALAB\ -AACxAQAAigIAALIBAACLAgAAswEAALQBAAC1AQAAtgEAALcBAACSAgAAuAEAALkBAAC8AQAAvQEAAM\ -QBAADGAQAAxQEAAMYBAADHAQAAyQEAAMgBAADJAQAAygEAAMwBAADLAQAAzAEAAM0BAADOAQAAzwEA\ -ANABAADRAQAA0gEAANMBAADUAQAA1QEAANYBAADXAQAA2AEAANkBAADaAQAA2wEAANwBAADeAQAA3w\ -EAAOABAADhAQAA4gEAAOMBAADkAQAA5QEAAOYBAADnAQAA6AEAAOkBAADqAQAA6wEAAOwBAADtAQAA\ -7gEAAO8BAADxAQAA8wEAAPIBAADzAQAA9AEAAPUBAAD2AQAAlQEAAPcBAAC/AQAA+AEAAPkBAAD6AQ\ -AA+wEAAPwBAAD9AQAA/gEAAP8BAAAAAgAAAQIAAAICAAADAgAABAIAAAUCAAAGAgAABwIAAAgCAAAJ\ -AgAACgIAAAsCAAAMAgAADQIAAA4CAAAPAgAAEAIAABECAAASAgAAEwIAABQCAAAVAgAAFgIAABcCAA\ -AYAgAAGQIAABoCAAAbAgAAHAIAAB0CAAAeAgAAHwIAACACAACeAQAAIgIAACMCAAAkAgAAJQIAACYC\ -AAAnAgAAKAIAACkCAAAqAgAAKwIAACwCAAAtAgAALgIAAC8CAAAwAgAAMQIAADICAAAzAgAAOgIAAG\ -UsAAA7AgAAPAIAAD0CAACaAQAAPgIAAGYsAABBAgAAQgIAAEMCAACAAQAARAIAAIkCAABFAgAAjAIA\ -AEYCAABHAgAASAIAAEkCAABKAgAASwIAAEwCAABNAgAATgIAAE8CAABwAwAAcQMAAHIDAABzAwAAdg\ -MAAHcDAAB/AwAA8wMAAIYDAACsAwAAiAMAAK0DAACJAwAArgMAAIoDAACvAwAAjAMAAMwDAACOAwAA\ -zQMAAI8DAADOAwAAkQMAALEDAACSAwAAsgMAAJMDAACzAwAAlAMAALQDAACVAwAAtQMAAJYDAAC2Aw\ -AAlwMAALcDAACYAwAAuAMAAJkDAAC5AwAAmgMAALoDAACbAwAAuwMAAJwDAAC8AwAAnQMAAL0DAACe\ -AwAAvgMAAJ8DAAC/AwAAoAMAAMADAAChAwAAwQMAAKMDAADDAwAApAMAAMQDAAClAwAAxQMAAKYDAA\ -DGAwAApwMAAMcDAACoAwAAyAMAAKkDAADJAwAAqgMAAMoDAACrAwAAywMAAM8DAADXAwAA2AMAANkD\ -AADaAwAA2wMAANwDAADdAwAA3gMAAN8DAADgAwAA4QMAAOIDAADjAwAA5AMAAOUDAADmAwAA5wMAAO\ -gDAADpAwAA6gMAAOsDAADsAwAA7QMAAO4DAADvAwAA9AMAALgDAAD3AwAA+AMAAPkDAADyAwAA+gMA\ -APsDAAD9AwAAewMAAP4DAAB8AwAA/wMAAH0DAAAABAAAUAQAAAEEAABRBAAAAgQAAFIEAAADBAAAUw\ -QAAAQEAABUBAAABQQAAFUEAAAGBAAAVgQAAAcEAABXBAAACAQAAFgEAAAJBAAAWQQAAAoEAABaBAAA\ -CwQAAFsEAAAMBAAAXAQAAA0EAABdBAAADgQAAF4EAAAPBAAAXwQAABAEAAAwBAAAEQQAADEEAAASBA\ -AAMgQAABMEAAAzBAAAFAQAADQEAAAVBAAANQQAABYEAAA2BAAAFwQAADcEAAAYBAAAOAQAABkEAAA5\ -BAAAGgQAADoEAAAbBAAAOwQAABwEAAA8BAAAHQQAAD0EAAAeBAAAPgQAAB8EAAA/BAAAIAQAAEAEAA\ -AhBAAAQQQAACIEAABCBAAAIwQAAEMEAAAkBAAARAQAACUEAABFBAAAJgQAAEYEAAAnBAAARwQAACgE\ -AABIBAAAKQQAAEkEAAAqBAAASgQAACsEAABLBAAALAQAAEwEAAAtBAAATQQAAC4EAABOBAAALwQAAE\ -8EAABgBAAAYQQAAGIEAABjBAAAZAQAAGUEAABmBAAAZwQAAGgEAABpBAAAagQAAGsEAABsBAAAbQQA\ -AG4EAABvBAAAcAQAAHEEAAByBAAAcwQAAHQEAAB1BAAAdgQAAHcEAAB4BAAAeQQAAHoEAAB7BAAAfA\ -QAAH0EAAB+BAAAfwQAAIAEAACBBAAAigQAAIsEAACMBAAAjQQAAI4EAACPBAAAkAQAAJEEAACSBAAA\ -kwQAAJQEAACVBAAAlgQAAJcEAACYBAAAmQQAAJoEAACbBAAAnAQAAJ0EAACeBAAAnwQAAKAEAAChBA\ -AAogQAAKMEAACkBAAApQQAAKYEAACnBAAAqAQAAKkEAACqBAAAqwQAAKwEAACtBAAArgQAAK8EAACw\ -BAAAsQQAALIEAACzBAAAtAQAALUEAAC2BAAAtwQAALgEAAC5BAAAugQAALsEAAC8BAAAvQQAAL4EAA\ -C/BAAAwAQAAM8EAADBBAAAwgQAAMMEAADEBAAAxQQAAMYEAADHBAAAyAQAAMkEAADKBAAAywQAAMwE\ -AADNBAAAzgQAANAEAADRBAAA0gQAANMEAADUBAAA1QQAANYEAADXBAAA2AQAANkEAADaBAAA2wQAAN\ -wEAADdBAAA3gQAAN8EAADgBAAA4QQAAOIEAADjBAAA5AQAAOUEAADmBAAA5wQAAOgEAADpBAAA6gQA\ -AOsEAADsBAAA7QQAAO4EAADvBAAA8AQAAPEEAADyBAAA8wQAAPQEAAD1BAAA9gQAAPcEAAD4BAAA+Q\ -QAAPoEAAD7BAAA/AQAAP0EAAD+BAAA/wQAAAAFAAABBQAAAgUAAAMFAAAEBQAABQUAAAYFAAAHBQAA\ -CAUAAAkFAAAKBQAACwUAAAwFAAANBQAADgUAAA8FAAAQBQAAEQUAABIFAAATBQAAFAUAABUFAAAWBQ\ -AAFwUAABgFAAAZBQAAGgUAABsFAAAcBQAAHQUAAB4FAAAfBQAAIAUAACEFAAAiBQAAIwUAACQFAAAl\ -BQAAJgUAACcFAAAoBQAAKQUAACoFAAArBQAALAUAAC0FAAAuBQAALwUAADEFAABhBQAAMgUAAGIFAA\ -AzBQAAYwUAADQFAABkBQAANQUAAGUFAAA2BQAAZgUAADcFAABnBQAAOAUAAGgFAAA5BQAAaQUAADoF\ -AABqBQAAOwUAAGsFAAA8BQAAbAUAAD0FAABtBQAAPgUAAG4FAAA/BQAAbwUAAEAFAABwBQAAQQUAAH\ -EFAABCBQAAcgUAAEMFAABzBQAARAUAAHQFAABFBQAAdQUAAEYFAAB2BQAARwUAAHcFAABIBQAAeAUA\ -AEkFAAB5BQAASgUAAHoFAABLBQAAewUAAEwFAAB8BQAATQUAAH0FAABOBQAAfgUAAE8FAAB/BQAAUA\ -UAAIAFAABRBQAAgQUAAFIFAACCBQAAUwUAAIMFAABUBQAAhAUAAFUFAACFBQAAVgUAAIYFAACgEAAA\ -AC0AAKEQAAABLQAAohAAAAItAACjEAAAAy0AAKQQAAAELQAApRAAAAUtAACmEAAABi0AAKcQAAAHLQ\ -AAqBAAAAgtAACpEAAACS0AAKoQAAAKLQAAqxAAAAstAACsEAAADC0AAK0QAAANLQAArhAAAA4tAACv\ -EAAADy0AALAQAAAQLQAAsRAAABEtAACyEAAAEi0AALMQAAATLQAAtBAAABQtAAC1EAAAFS0AALYQAA\ -AWLQAAtxAAABctAAC4EAAAGC0AALkQAAAZLQAAuhAAABotAAC7EAAAGy0AALwQAAAcLQAAvRAAAB0t\ -AAC+EAAAHi0AAL8QAAAfLQAAwBAAACAtAADBEAAAIS0AAMIQAAAiLQAAwxAAACMtAADEEAAAJC0AAM\ -UQAAAlLQAAxxAAACctAADNEAAALS0AAKATAABwqwAAoRMAAHGrAACiEwAAcqsAAKMTAABzqwAApBMA\ -AHSrAAClEwAAdasAAKYTAAB2qwAApxMAAHerAACoEwAAeKsAAKkTAAB5qwAAqhMAAHqrAACrEwAAe6\ -sAAKwTAAB8qwAArRMAAH2rAACuEwAAfqsAAK8TAAB/qwAAsBMAAICrAACxEwAAgasAALITAACCqwAA\ -sxMAAIOrAAC0EwAAhKsAALUTAACFqwAAthMAAIarAAC3EwAAh6sAALgTAACIqwAAuRMAAImrAAC6Ew\ -AAiqsAALsTAACLqwAAvBMAAIyrAAC9EwAAjasAAL4TAACOqwAAvxMAAI+rAADAEwAAkKsAAMETAACR\ -qwAAwhMAAJKrAADDEwAAk6sAAMQTAACUqwAAxRMAAJWrAADGEwAAlqsAAMcTAACXqwAAyBMAAJirAA\ -DJEwAAmasAAMoTAACaqwAAyxMAAJurAADMEwAAnKsAAM0TAACdqwAAzhMAAJ6rAADPEwAAn6sAANAT\ -AACgqwAA0RMAAKGrAADSEwAAoqsAANMTAACjqwAA1BMAAKSrAADVEwAApasAANYTAACmqwAA1xMAAK\ -erAADYEwAAqKsAANkTAACpqwAA2hMAAKqrAADbEwAAq6sAANwTAACsqwAA3RMAAK2rAADeEwAArqsA\ -AN8TAACvqwAA4BMAALCrAADhEwAAsasAAOITAACyqwAA4xMAALOrAADkEwAAtKsAAOUTAAC1qwAA5h\ -MAALarAADnEwAAt6sAAOgTAAC4qwAA6RMAALmrAADqEwAAuqsAAOsTAAC7qwAA7BMAALyrAADtEwAA\ -vasAAO4TAAC+qwAA7xMAAL+rAADwEwAA+BMAAPETAAD5EwAA8hMAAPoTAADzEwAA+xMAAPQTAAD8Ew\ -AA9RMAAP0TAACQHAAA0BAAAJEcAADREAAAkhwAANIQAACTHAAA0xAAAJQcAADUEAAAlRwAANUQAACW\ -HAAA1hAAAJccAADXEAAAmBwAANgQAACZHAAA2RAAAJocAADaEAAAmxwAANsQAACcHAAA3BAAAJ0cAA\ -DdEAAAnhwAAN4QAACfHAAA3xAAAKAcAADgEAAAoRwAAOEQAACiHAAA4hAAAKMcAADjEAAApBwAAOQQ\ -AAClHAAA5RAAAKYcAADmEAAApxwAAOcQAACoHAAA6BAAAKkcAADpEAAAqhwAAOoQAACrHAAA6xAAAK\ -wcAADsEAAArRwAAO0QAACuHAAA7hAAAK8cAADvEAAAsBwAAPAQAACxHAAA8RAAALIcAADyEAAAsxwA\ -APMQAAC0HAAA9BAAALUcAAD1EAAAthwAAPYQAAC3HAAA9xAAALgcAAD4EAAAuRwAAPkQAAC6HAAA+h\ -AAAL0cAAD9EAAAvhwAAP4QAAC/HAAA/xAAAAAeAAABHgAAAh4AAAMeAAAEHgAABR4AAAYeAAAHHgAA\ -CB4AAAkeAAAKHgAACx4AAAweAAANHgAADh4AAA8eAAAQHgAAER4AABIeAAATHgAAFB4AABUeAAAWHg\ -AAFx4AABgeAAAZHgAAGh4AABseAAAcHgAAHR4AAB4eAAAfHgAAIB4AACEeAAAiHgAAIx4AACQeAAAl\ -HgAAJh4AACceAAAoHgAAKR4AACoeAAArHgAALB4AAC0eAAAuHgAALx4AADAeAAAxHgAAMh4AADMeAA\ -A0HgAANR4AADYeAAA3HgAAOB4AADkeAAA6HgAAOx4AADweAAA9HgAAPh4AAD8eAABAHgAAQR4AAEIe\ -AABDHgAARB4AAEUeAABGHgAARx4AAEgeAABJHgAASh4AAEseAABMHgAATR4AAE4eAABPHgAAUB4AAF\ -EeAABSHgAAUx4AAFQeAABVHgAAVh4AAFceAABYHgAAWR4AAFoeAABbHgAAXB4AAF0eAABeHgAAXx4A\ -AGAeAABhHgAAYh4AAGMeAABkHgAAZR4AAGYeAABnHgAAaB4AAGkeAABqHgAAax4AAGweAABtHgAAbh\ -4AAG8eAABwHgAAcR4AAHIeAABzHgAAdB4AAHUeAAB2HgAAdx4AAHgeAAB5HgAAeh4AAHseAAB8HgAA\ -fR4AAH4eAAB/HgAAgB4AAIEeAACCHgAAgx4AAIQeAACFHgAAhh4AAIceAACIHgAAiR4AAIoeAACLHg\ -AAjB4AAI0eAACOHgAAjx4AAJAeAACRHgAAkh4AAJMeAACUHgAAlR4AAJ4eAADfAAAAoB4AAKEeAACi\ -HgAAox4AAKQeAAClHgAAph4AAKceAACoHgAAqR4AAKoeAACrHgAArB4AAK0eAACuHgAArx4AALAeAA\ -CxHgAAsh4AALMeAAC0HgAAtR4AALYeAAC3HgAAuB4AALkeAAC6HgAAux4AALweAAC9HgAAvh4AAL8e\ -AADAHgAAwR4AAMIeAADDHgAAxB4AAMUeAADGHgAAxx4AAMgeAADJHgAAyh4AAMseAADMHgAAzR4AAM\ -4eAADPHgAA0B4AANEeAADSHgAA0x4AANQeAADVHgAA1h4AANceAADYHgAA2R4AANoeAADbHgAA3B4A\ -AN0eAADeHgAA3x4AAOAeAADhHgAA4h4AAOMeAADkHgAA5R4AAOYeAADnHgAA6B4AAOkeAADqHgAA6x\ -4AAOweAADtHgAA7h4AAO8eAADwHgAA8R4AAPIeAADzHgAA9B4AAPUeAAD2HgAA9x4AAPgeAAD5HgAA\ -+h4AAPseAAD8HgAA/R4AAP4eAAD/HgAACB8AAAAfAAAJHwAAAR8AAAofAAACHwAACx8AAAMfAAAMHw\ -AABB8AAA0fAAAFHwAADh8AAAYfAAAPHwAABx8AABgfAAAQHwAAGR8AABEfAAAaHwAAEh8AABsfAAAT\ -HwAAHB8AABQfAAAdHwAAFR8AACgfAAAgHwAAKR8AACEfAAAqHwAAIh8AACsfAAAjHwAALB8AACQfAA\ -AtHwAAJR8AAC4fAAAmHwAALx8AACcfAAA4HwAAMB8AADkfAAAxHwAAOh8AADIfAAA7HwAAMx8AADwf\ -AAA0HwAAPR8AADUfAAA+HwAANh8AAD8fAAA3HwAASB8AAEAfAABJHwAAQR8AAEofAABCHwAASx8AAE\ -MfAABMHwAARB8AAE0fAABFHwAAWR8AAFEfAABbHwAAUx8AAF0fAABVHwAAXx8AAFcfAABoHwAAYB8A\ -AGkfAABhHwAAah8AAGIfAABrHwAAYx8AAGwfAABkHwAAbR8AAGUfAABuHwAAZh8AAG8fAABnHwAAiB\ -8AAIAfAACJHwAAgR8AAIofAACCHwAAix8AAIMfAACMHwAAhB8AAI0fAACFHwAAjh8AAIYfAACPHwAA\ -hx8AAJgfAACQHwAAmR8AAJEfAACaHwAAkh8AAJsfAACTHwAAnB8AAJQfAACdHwAAlR8AAJ4fAACWHw\ -AAnx8AAJcfAACoHwAAoB8AAKkfAAChHwAAqh8AAKIfAACrHwAAox8AAKwfAACkHwAArR8AAKUfAACu\ -HwAAph8AAK8fAACnHwAAuB8AALAfAAC5HwAAsR8AALofAABwHwAAux8AAHEfAAC8HwAAsx8AAMgfAA\ -ByHwAAyR8AAHMfAADKHwAAdB8AAMsfAAB1HwAAzB8AAMMfAADYHwAA0B8AANkfAADRHwAA2h8AAHYf\ -AADbHwAAdx8AAOgfAADgHwAA6R8AAOEfAADqHwAAeh8AAOsfAAB7HwAA7B8AAOUfAAD4HwAAeB8AAP\ -kfAAB5HwAA+h8AAHwfAAD7HwAAfR8AAPwfAADzHwAAJiEAAMkDAAAqIQAAawAAACshAADlAAAAMiEA\ -AE4hAABgIQAAcCEAAGEhAABxIQAAYiEAAHIhAABjIQAAcyEAAGQhAAB0IQAAZSEAAHUhAABmIQAAdi\ -EAAGchAAB3IQAAaCEAAHghAABpIQAAeSEAAGohAAB6IQAAayEAAHshAABsIQAAfCEAAG0hAAB9IQAA\ -biEAAH4hAABvIQAAfyEAAIMhAACEIQAAtiQAANAkAAC3JAAA0SQAALgkAADSJAAAuSQAANMkAAC6JA\ -AA1CQAALskAADVJAAAvCQAANYkAAC9JAAA1yQAAL4kAADYJAAAvyQAANkkAADAJAAA2iQAAMEkAADb\ -JAAAwiQAANwkAADDJAAA3SQAAMQkAADeJAAAxSQAAN8kAADGJAAA4CQAAMckAADhJAAAyCQAAOIkAA\ -DJJAAA4yQAAMokAADkJAAAyyQAAOUkAADMJAAA5iQAAM0kAADnJAAAziQAAOgkAADPJAAA6SQAAAAs\ -AAAwLAAAASwAADEsAAACLAAAMiwAAAMsAAAzLAAABCwAADQsAAAFLAAANSwAAAYsAAA2LAAABywAAD\ -csAAAILAAAOCwAAAksAAA5LAAACiwAADosAAALLAAAOywAAAwsAAA8LAAADSwAAD0sAAAOLAAAPiwA\ -AA8sAAA/LAAAECwAAEAsAAARLAAAQSwAABIsAABCLAAAEywAAEMsAAAULAAARCwAABUsAABFLAAAFi\ -wAAEYsAAAXLAAARywAABgsAABILAAAGSwAAEksAAAaLAAASiwAABssAABLLAAAHCwAAEwsAAAdLAAA\ -TSwAAB4sAABOLAAAHywAAE8sAAAgLAAAUCwAACEsAABRLAAAIiwAAFIsAAAjLAAAUywAACQsAABULA\ -AAJSwAAFUsAAAmLAAAViwAACcsAABXLAAAKCwAAFgsAAApLAAAWSwAACosAABaLAAAKywAAFssAAAs\ -LAAAXCwAAC0sAABdLAAALiwAAF4sAAAvLAAAXywAAGAsAABhLAAAYiwAAGsCAABjLAAAfR0AAGQsAA\ -B9AgAAZywAAGgsAABpLAAAaiwAAGssAABsLAAAbSwAAFECAABuLAAAcQIAAG8sAABQAgAAcCwAAFIC\ -AAByLAAAcywAAHUsAAB2LAAAfiwAAD8CAAB/LAAAQAIAAIAsAACBLAAAgiwAAIMsAACELAAAhSwAAI\ -YsAACHLAAAiCwAAIksAACKLAAAiywAAIwsAACNLAAAjiwAAI8sAACQLAAAkSwAAJIsAACTLAAAlCwA\ -AJUsAACWLAAAlywAAJgsAACZLAAAmiwAAJssAACcLAAAnSwAAJ4sAACfLAAAoCwAAKEsAACiLAAAoy\ -wAAKQsAAClLAAApiwAAKcsAACoLAAAqSwAAKosAACrLAAArCwAAK0sAACuLAAArywAALAsAACxLAAA\ -siwAALMsAAC0LAAAtSwAALYsAAC3LAAAuCwAALksAAC6LAAAuywAALwsAAC9LAAAviwAAL8sAADALA\ -AAwSwAAMIsAADDLAAAxCwAAMUsAADGLAAAxywAAMgsAADJLAAAyiwAAMssAADMLAAAzSwAAM4sAADP\ -LAAA0CwAANEsAADSLAAA0ywAANQsAADVLAAA1iwAANcsAADYLAAA2SwAANosAADbLAAA3CwAAN0sAA\ -DeLAAA3ywAAOAsAADhLAAA4iwAAOMsAADrLAAA7CwAAO0sAADuLAAA8iwAAPMsAABApgAAQaYAAEKm\ -AABDpgAARKYAAEWmAABGpgAAR6YAAEimAABJpgAASqYAAEumAABMpgAATaYAAE6mAABPpgAAUKYAAF\ -GmAABSpgAAU6YAAFSmAABVpgAAVqYAAFemAABYpgAAWaYAAFqmAABbpgAAXKYAAF2mAABepgAAX6YA\ -AGCmAABhpgAAYqYAAGOmAABkpgAAZaYAAGamAABnpgAAaKYAAGmmAABqpgAAa6YAAGymAABtpgAAgK\ -YAAIGmAACCpgAAg6YAAISmAACFpgAAhqYAAIemAACIpgAAiaYAAIqmAACLpgAAjKYAAI2mAACOpgAA\ -j6YAAJCmAACRpgAAkqYAAJOmAACUpgAAlaYAAJamAACXpgAAmKYAAJmmAACapgAAm6YAACKnAAAjpw\ -AAJKcAACWnAAAmpwAAJ6cAACinAAAppwAAKqcAACunAAAspwAALacAAC6nAAAvpwAAMqcAADOnAAA0\ -pwAANacAADanAAA3pwAAOKcAADmnAAA6pwAAO6cAADynAAA9pwAAPqcAAD+nAABApwAAQacAAEKnAA\ -BDpwAARKcAAEWnAABGpwAAR6cAAEinAABJpwAASqcAAEunAABMpwAATacAAE6nAABPpwAAUKcAAFGn\ -AABSpwAAU6cAAFSnAABVpwAAVqcAAFenAABYpwAAWacAAFqnAABbpwAAXKcAAF2nAABepwAAX6cAAG\ -CnAABhpwAAYqcAAGOnAABkpwAAZacAAGanAABnpwAAaKcAAGmnAABqpwAAa6cAAGynAABtpwAAbqcA\ -AG+nAAB5pwAAeqcAAHunAAB8pwAAfacAAHkdAAB+pwAAf6cAAICnAACBpwAAgqcAAIOnAACEpwAAha\ -cAAIanAACHpwAAi6cAAIynAACNpwAAZQIAAJCnAACRpwAAkqcAAJOnAACWpwAAl6cAAJinAACZpwAA\ -mqcAAJunAACcpwAAnacAAJ6nAACfpwAAoKcAAKGnAACipwAAo6cAAKSnAAClpwAApqcAAKenAACopw\ -AAqacAAKqnAABmAgAAq6cAAFwCAACspwAAYQIAAK2nAABsAgAArqcAAGoCAACwpwAAngIAALGnAACH\ -AgAAsqcAAJ0CAACzpwAAU6sAALSnAAC1pwAAtqcAALenAAC4pwAAuacAALqnAAC7pwAAvKcAAL2nAA\ -C+pwAAv6cAAMCnAADBpwAAwqcAAMOnAADEpwAAlKcAAMWnAACCAgAAxqcAAI4dAADHpwAAyKcAAMmn\ -AADKpwAA0KcAANGnAADWpwAA16cAANinAADZpwAA9acAAPanAAAh/wAAQf8AACL/AABC/wAAI/8AAE\ -P/AAAk/wAARP8AACX/AABF/wAAJv8AAEb/AAAn/wAAR/8AACj/AABI/wAAKf8AAEn/AAAq/wAASv8A\ -ACv/AABL/wAALP8AAEz/AAAt/wAATf8AAC7/AABO/wAAL/8AAE//AAAw/wAAUP8AADH/AABR/wAAMv\ -8AAFL/AAAz/wAAU/8AADT/AABU/wAANf8AAFX/AAA2/wAAVv8AADf/AABX/wAAOP8AAFj/AAA5/wAA\ -Wf8AADr/AABa/wAAAAQBACgEAQABBAEAKQQBAAIEAQAqBAEAAwQBACsEAQAEBAEALAQBAAUEAQAtBA\ -EABgQBAC4EAQAHBAEALwQBAAgEAQAwBAEACQQBADEEAQAKBAEAMgQBAAsEAQAzBAEADAQBADQEAQAN\ -BAEANQQBAA4EAQA2BAEADwQBADcEAQAQBAEAOAQBABEEAQA5BAEAEgQBADoEAQATBAEAOwQBABQEAQ\ -A8BAEAFQQBAD0EAQAWBAEAPgQBABcEAQA/BAEAGAQBAEAEAQAZBAEAQQQBABoEAQBCBAEAGwQBAEME\ -AQAcBAEARAQBAB0EAQBFBAEAHgQBAEYEAQAfBAEARwQBACAEAQBIBAEAIQQBAEkEAQAiBAEASgQBAC\ -MEAQBLBAEAJAQBAEwEAQAlBAEATQQBACYEAQBOBAEAJwQBAE8EAQCwBAEA2AQBALEEAQDZBAEAsgQB\ -ANoEAQCzBAEA2wQBALQEAQDcBAEAtQQBAN0EAQC2BAEA3gQBALcEAQDfBAEAuAQBAOAEAQC5BAEA4Q\ -QBALoEAQDiBAEAuwQBAOMEAQC8BAEA5AQBAL0EAQDlBAEAvgQBAOYEAQC/BAEA5wQBAMAEAQDoBAEA\ -wQQBAOkEAQDCBAEA6gQBAMMEAQDrBAEAxAQBAOwEAQDFBAEA7QQBAMYEAQDuBAEAxwQBAO8EAQDIBA\ -EA8AQBAMkEAQDxBAEAygQBAPIEAQDLBAEA8wQBAMwEAQD0BAEAzQQBAPUEAQDOBAEA9gQBAM8EAQD3\ -BAEA0AQBAPgEAQDRBAEA+QQBANIEAQD6BAEA0wQBAPsEAQBwBQEAlwUBAHEFAQCYBQEAcgUBAJkFAQ\ -BzBQEAmgUBAHQFAQCbBQEAdQUBAJwFAQB2BQEAnQUBAHcFAQCeBQEAeAUBAJ8FAQB5BQEAoAUBAHoF\ -AQChBQEAfAUBAKMFAQB9BQEApAUBAH4FAQClBQEAfwUBAKYFAQCABQEApwUBAIEFAQCoBQEAggUBAK\ -kFAQCDBQEAqgUBAIQFAQCrBQEAhQUBAKwFAQCGBQEArQUBAIcFAQCuBQEAiAUBAK8FAQCJBQEAsAUB\ -AIoFAQCxBQEAjAUBALMFAQCNBQEAtAUBAI4FAQC1BQEAjwUBALYFAQCQBQEAtwUBAJEFAQC4BQEAkg\ -UBALkFAQCUBQEAuwUBAJUFAQC8BQEAgAwBAMAMAQCBDAEAwQwBAIIMAQDCDAEAgwwBAMMMAQCEDAEA\ -xAwBAIUMAQDFDAEAhgwBAMYMAQCHDAEAxwwBAIgMAQDIDAEAiQwBAMkMAQCKDAEAygwBAIsMAQDLDA\ -EAjAwBAMwMAQCNDAEAzQwBAI4MAQDODAEAjwwBAM8MAQCQDAEA0AwBAJEMAQDRDAEAkgwBANIMAQCT\ -DAEA0wwBAJQMAQDUDAEAlQwBANUMAQCWDAEA1gwBAJcMAQDXDAEAmAwBANgMAQCZDAEA2QwBAJoMAQ\ -DaDAEAmwwBANsMAQCcDAEA3AwBAJ0MAQDdDAEAngwBAN4MAQCfDAEA3wwBAKAMAQDgDAEAoQwBAOEM\ -AQCiDAEA4gwBAKMMAQDjDAEApAwBAOQMAQClDAEA5QwBAKYMAQDmDAEApwwBAOcMAQCoDAEA6AwBAK\ -kMAQDpDAEAqgwBAOoMAQCrDAEA6wwBAKwMAQDsDAEArQwBAO0MAQCuDAEA7gwBAK8MAQDvDAEAsAwB\ -APAMAQCxDAEA8QwBALIMAQDyDAEAoBgBAMAYAQChGAEAwRgBAKIYAQDCGAEAoxgBAMMYAQCkGAEAxB\ -gBAKUYAQDFGAEAphgBAMYYAQCnGAEAxxgBAKgYAQDIGAEAqRgBAMkYAQCqGAEAyhgBAKsYAQDLGAEA\ -rBgBAMwYAQCtGAEAzRgBAK4YAQDOGAEArxgBAM8YAQCwGAEA0BgBALEYAQDRGAEAshgBANIYAQCzGA\ -EA0xgBALQYAQDUGAEAtRgBANUYAQC2GAEA1hgBALcYAQDXGAEAuBgBANgYAQC5GAEA2RgBALoYAQDa\ -GAEAuxgBANsYAQC8GAEA3BgBAL0YAQDdGAEAvhgBAN4YAQC/GAEA3xgBAEBuAQBgbgEAQW4BAGFuAQ\ -BCbgEAYm4BAENuAQBjbgEARG4BAGRuAQBFbgEAZW4BAEZuAQBmbgEAR24BAGduAQBIbgEAaG4BAElu\ -AQBpbgEASm4BAGpuAQBLbgEAa24BAExuAQBsbgEATW4BAG1uAQBObgEAbm4BAE9uAQBvbgEAUG4BAH\ -BuAQBRbgEAcW4BAFJuAQBybgEAU24BAHNuAQBUbgEAdG4BAFVuAQB1bgEAVm4BAHZuAQBXbgEAd24B\ -AFhuAQB4bgEAWW4BAHluAQBabgEAem4BAFtuAQB7bgEAXG4BAHxuAQBdbgEAfW4BAF5uAQB+bgEAX2\ -4BAH9uAQAA6QEAIukBAAHpAQAj6QEAAukBACTpAQAD6QEAJekBAATpAQAm6QEABekBACfpAQAG6QEA\ -KOkBAAfpAQAp6QEACOkBACrpAQAJ6QEAK+kBAArpAQAs6QEAC+kBAC3pAQAM6QEALukBAA3pAQAv6Q\ -EADukBADDpAQAP6QEAMekBABDpAQAy6QEAEekBADPpAQAS6QEANOkBABPpAQA16QEAFOkBADbpAQAV\ -6QEAN+kBABbpAQA46QEAF+kBADnpAQAY6QEAOukBABnpAQA76QEAGukBADzpAQAb6QEAPekBABzpAQ\ -A+6QEAHekBAD/pAQAe6QEAQOkBAB/pAQBB6QEAIOkBAELpAQAh6QEAQ+kBAExheW91dHNpemVhbGln\ -bgA2AQAABAAAAAQAAABFAQAATGF5b3V0RXJyb3IAQYimzwALaAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\ -AAAAAAAAAAAAAAAAAAAAAAAACbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\ -AAAAAAAAAACcAAAAAAAAANwsEADoLBAAAPSPiIAABG5hbWUB6Y+IgAC8DgA1d2FzbV9iaW5kZ2VuOj\ -pfX3diaW5kZ2VuX2Vycm9yX25ldzo6aDAyOWE0YTRjYjA2ODAxOTkBO3dhc21fYmluZGdlbjo6X193\ -YmluZGdlbl9vYmplY3RfZHJvcF9yZWY6OmgyZjAxYTE5MjA2YzZjZTk0AjZ3YXNtX2JpbmRnZW46Ol\ -9fd2JpbmRnZW5fc3RyaW5nX2dldDo6aGMyNzJhYWM4ZTdiMDYzNzYDNndhc21fYmluZGdlbjo6X193\ -YmluZGdlbl9zdHJpbmdfbmV3OjpoMjlhYmM1YTk2ZWUzM2E3YwReZGVub19jYWNoZV9kaXI6Ondhc2\ -06OnJlYWRfZmlsZV9ieXRlczo6X193YmdfcmVhZGZpbGVieXRlc18zYmI4MGNhODA4YmJhNGZjOjpo\ -MDVlNDIyMmM1ZDRiZTBiNwUzd2FzbV9iaW5kZ2VuOjpfX3diaW5kZ2VuX2lzX251bGw6Omg3YTAxYW\ -E4M2RkYTI5ZjQ0Bjh3YXNtX2JpbmRnZW46Ol9fd2JpbmRnZW5faXNfdW5kZWZpbmVkOjpoZTljNWEz\ -NTkwZjI1MzJmNwdiZGVub19jYWNoZV9kaXI6Ondhc206OmF0b21pY193cml0ZV9maWxlOjpfX3diZ1\ -9hdG9taWN3cml0ZWZpbGVfMzUyMGFlNzNhNTg1NmNiZDo6aDkxYWM3OTg1NzYyNWVhNTIIW2Rlbm9f\ -Y2FjaGVfZGlyOjp3YXNtOjptb2RpZmllZF90aW1lOjpfX3diZ19tb2RpZmllZHRpbWVfZWU4ODFkYT\ -RhNDY1ZjM4OTo6aGUyNDIxYTdiZTEyYTNjY2YJUWRlbm9fY2FjaGVfZGlyOjp3YXNtOjp0aW1lX25v\ -dzo6X193YmdfdGltZW5vd185ZTg3MmIxOTc3OWUyMGEwOjpoNmU4M2Q4YWY5OWE5ZDE0OQo2d2FzbV\ -9iaW5kZ2VuOjpfX3diaW5kZ2VuX251bWJlcl9nZXQ6OmgzOTE5MDViMmE0NTMwYjFmCzV3YXNtX2Jp\ -bmRnZW46Ol9fd2JpbmRnZW5faXNfb2JqZWN0OjpoOGY4N2RhZTkxNGVkN2NhOAw6d2FzbV9iaW5kZ2\ -VuOjpfX3diaW5kZ2VuX2pzdmFsX2xvb3NlX2VxOjpoNGFiZGE2NzRmNWNmNThkOQ03d2FzbV9iaW5k\ -Z2VuOjpfX3diaW5kZ2VuX2Jvb2xlYW5fZ2V0OjpoYjk2MDU4OTA2NjY2MjBiMg56PHNlcmRlX3dhc2\ -1fYmluZGdlbjo6ZXJyb3I6OkVycm9yIGFzIGNvcmU6OmZtdDo6RGlzcGxheT46OmZtdDo6dG9fc3Ry\ -aW5nOjpfX3diZ19TdHJpbmdfODg4MTBkZmViNDAyMTkwMjo6aGZkNWNhZjY0Mzk2ZGFjMDUPUXNlcm\ -RlX3dhc21fYmluZGdlbjo6T2JqZWN0RXh0OjpzZXQ6Ol9fd2JnX3NldF84NDFhYzU3Y2ZmM2Q2NzJi\ -OjpoNDZjNWQyYjhmYTk3YWQzNhBTY29uc29sZV9lcnJvcl9wYW5pY19ob29rOjpFcnJvcjo6bmV3Oj\ -pfX3diZ19uZXdfYWJkYTc2ZTg4M2JhOGE1Zjo6aGRiMTJmMDhkYTc5YWQ4NzIRV2NvbnNvbGVfZXJy\ -b3JfcGFuaWNfaG9vazo6RXJyb3I6OnN0YWNrOjpfX3diZ19zdGFja182NTgyNzlmZTQ0NTQxY2Y2Oj\ -poZTBjNWNhNjY3NGRjZmYyNxJQY29uc29sZV9lcnJvcl9wYW5pY19ob29rOjplcnJvcjo6X193Ymdf\ -ZXJyb3JfZjg1MTY2N2FmNzFiY2ZjNjo6aDVhMTUxNDE5OTE0NzQwZWMTNXdhc21fYmluZGdlbjo6X1\ -93YmluZGdlbl9pc19zdHJpbmc6OmhkZDY5YzE5N2IxYzUyNWU3FDd3YXNtX2JpbmRnZW46Ol9fd2Jp\ -bmRnZW5faXNfZnVuY3Rpb246Omg2Nzc5MmU2ZDk4OGI2Zjc1FT9qc19zeXM6Ok1hcDo6bmV3OjpfX3\ -diZ19uZXdfMGYyYjcxY2EyZjJhNjAyOTo6aDE1YTExMzI5ZGQxZTYzOTUWampzX3N5czo6SXRlcmF0\ -b3I6Omxvb2tzX2xpa2VfaXRlcmF0b3I6Ok1heWJlSXRlcmF0b3I6Om5leHQ6Ol9fd2JnX25leHRfZj\ -RiYzBlOTZlYTY3ZGE2ODo6aDY0OGY4MGMzNzMwYTBkM2IXTGpzX3N5czo6SXRlcmF0b3JOZXh0Ojp2\ -YWx1ZTo6X193YmdfdmFsdWVfMmY0ZWYyMDM2YmZhZDI4ZTo6aDFiYmU0ZTFlZTE1ZGVhMGQYTGpzX3\ -N5czo6U3ltYm9sOjppdGVyYXRvcjo6X193YmdfaXRlcmF0b3JfN2M3ZTU4ZjYyZWI4NDcwMDo6aGMy\ -YWJkMzEwMDFhNjVmMGIZQmpzX3N5czo6T2JqZWN0OjpuZXc6Ol9fd2JnX25ld18yYjZmZWE0ZWEwM2\ -IxYjk1OjpoY2E3NGZkMzM5YWQxYTYwNhpBanNfc3lzOjpBcnJheTo6Z2V0OjpfX3diZ19nZXRfNzMw\ -M2VkMmVmMDI2YjJmNTo6aDU2Y2Q2ODU3Yjg0ZWQ1YmYbR2pzX3N5czo6QXJyYXk6Omxlbmd0aDo6X1\ -93YmdfbGVuZ3RoXzgyMGM3ODY5NzNhYmRkOGE6Omg0YmM4NTdhNzQ3YzM0OTM5HJIBanNfc3lzOjpf\ -Ojo8aW1wbCB3YXNtX2JpbmRnZW46OmNhc3Q6OkpzQ2FzdCBmb3IganNfc3lzOjpBcnJheUJ1ZmZlcj\ -46Omluc3RhbmNlb2Y6Ol9fd2JnX2luc3RhbmNlb2ZfQXJyYXlCdWZmZXJfZWYyNjMyYWEwZDRiZmZm\ -ODo6aGY0YzM4NzBiYjg2M2Q0Y2EdQWpzX3N5czo6RXJyb3I6Om5ldzo6X193YmdfbmV3Xzg3Mjk3Zj\ -IyOTczMTU3Yzg6OmgwNjk1Yzk0ZjM3MjRjYTVmHkdqc19zeXM6OkZ1bmN0aW9uOjpjYWxsMDo6X193\ -YmdfY2FsbF81NTdhMmYyZGVhY2M0OTEyOjpoNGI3NWFmOWUzMmVjNmY0ZB8/anNfc3lzOjpNYXA6On\ -NldDo6X193Ymdfc2V0X2RhN2JlN2JmMGUwMzdiMTQ6Omg4NDJmNzRiYjg2NTA0YzE4IEZqc19zeXM6\ -Okl0ZXJhdG9yOjpuZXh0OjpfX3diZ19uZXh0X2VjMDYxZTQ4YTBlNzJhOTY6OmgyMDBlZGI1ZDgxZj\ -c3ODJiIUpqc19zeXM6Okl0ZXJhdG9yTmV4dDo6ZG9uZTo6X193YmdfZG9uZV9iNmFiYjI3ZDQyYjYz\ -ODY3OjpoY2RhNWRiN2MwN2JjM2M0MyJKanNfc3lzOjpPYmplY3Q6OmVudHJpZXM6Ol9fd2JnX2VudH\ -JpZXNfMTNlMDExNDUzNzc2NDY4Zjo6aGEzNWQxYWQ4NGExM2Y2YWQjQ2pzX3N5czo6UmVmbGVjdDo6\ -Z2V0OjpfX3diZ19nZXRfZjUzYzkyMTI5MWMzODFiZDo6aGI0ZjdiNWYxYTE3ZWViOTgkVWpzX3N5cz\ -o6V2ViQXNzZW1ibHk6Ok1lbW9yeTo6YnVmZmVyOjpfX3diZ19idWZmZXJfNTViYTdhNmIxYjkyZTJh\ -Yzo6aDE4MDI0ZWQ5OGZlZjRlNDQlRmpzX3N5czo6VWludDhBcnJheTo6bmV3OjpfX3diZ19uZXdfMD\ -k5MzhhN2QwMjBmMDQ5Yjo6aDQyMzlkYTdmZWY3MTUyZDgmkAFqc19zeXM6Ol86OjxpbXBsIHdhc21f\ -YmluZGdlbjo6Y2FzdDo6SnNDYXN0IGZvciBqc19zeXM6OlVpbnQ4QXJyYXk+OjppbnN0YW5jZW9mOj\ -pfX3diZ19pbnN0YW5jZW9mX1VpbnQ4QXJyYXlfMTM0OTY0MGFmMmRhMmU4ODo6aDE1NWZmNmEzZTY1\ -NmExNTgnTGpzX3N5czo6VWludDhBcnJheTo6bGVuZ3RoOjpfX3diZ19sZW5ndGhfMGFhYjdmZmQ2NW\ -FkMTllZDo6aGJkN2NiNzQyNGE3YTkxODEoRmpzX3N5czo6VWludDhBcnJheTo6c2V0OjpfX3diZ19z\ -ZXRfMzY5OGUzY2E1MTliM2MzYzo6aGJjZjM3YThmNzM3OWFjNTUpOHdhc21fYmluZGdlbjo6X193Ym\ -luZGdlbl9kZWJ1Z19zdHJpbmc6Omg2NDM1YWQ2ZGFiMzQ2YTY1KjF3YXNtX2JpbmRnZW46Ol9fd2Jp\ -bmRnZW5fdGhyb3c6OmhjNjI5Njc1YzdkNWY4NjFjKzJ3YXNtX2JpbmRnZW46Ol9fd2JpbmRnZW5fbW\ -Vtb3J5OjpoZjAwYjkyNTFiZmUzODkyOCxIY29yZTo6bnVtOjpmbHQyZGVjOjpzdHJhdGVneTo6ZHJh\ -Z29uOjpmb3JtYXRfc2hvcnRlc3Q6Omg3NzgzYjA2MTgyZTQ4YzNiLUVjb3JlOjpudW06OmZsdDJkZW\ -M6OnN0cmF0ZWd5OjpkcmFnb246OmZvcm1hdF9leGFjdDo6aDUzZjBmZWVjNzk2NjgwYzkuOmRsbWFs\ -bG9jOjpkbG1hbGxvYzo6RGxtYWxsb2M8QT46Om1hbGxvYzo6aDAwMzk1NmI4ODI1OTJkZjAvMnVybD\ -o6cGFyc2VyOjpQYXJzZXI6OnBhcnNlX2ZpbGU6OmgxZWUwNDQ1NWQ3MmZiNTI3MCppZG5hOjp1dHM0\ -Njo6cHJvY2Vzc2luZzo6aDNhNWQ3YTJlOGY1N2M5OTExaDwmbXV0IHNlcmRlX2pzb246OmRlOjpEZX\ -NlcmlhbGl6ZXI8Uj4gYXMgc2VyZGU6OmRlOjpEZXNlcmlhbGl6ZXI+OjpkZXNlcmlhbGl6ZV9zdHJ1\ -Y3Q6OmhjYmVkMmRlOTcxYjFiMzBhMktjb3JlOjpudW06OmZsdDJkZWM6OnN0cmF0ZWd5OjpncmlzdT\ -o6Zm9ybWF0X3Nob3J0ZXN0X29wdDo6aGNkMThjNDQ1MDk2ODk3ZWQzaDwmbXV0IHNlcmRlX2pzb246\ -OmRlOjpEZXNlcmlhbGl6ZXI8Uj4gYXMgc2VyZGU6OmRlOjpEZXNlcmlhbGl6ZXI+OjpkZXNlcmlhbG\ -l6ZV9zdHJ1Y3Q6OmgyNDQ1MTU0MTQ4ZTY4MTQxNEBjb3JlOjppdGVyOjp0cmFpdHM6Oml0ZXJhdG9y\ -OjpJdGVyYXRvcjo6ZXFfYnk6OmhmODg4OTdkZjhjYzg5ZjRiNS1kYXRhX3VybDo6RGF0YVVybDo6cH\ -JvY2Vzczo6aDFlNDA5OTlmZjU2ZjBmNWM2XzxhbGxvYzo6c3RyaW5nOjpTdHJpbmcgYXMgY29yZTo6\ -aXRlcjo6dHJhaXRzOjpjb2xsZWN0OjpFeHRlbmQ8Y2hhcj4+OjpleHRlbmQ6OmgxOTI0NjFjYTMzNW\ -Y5YTRmN2g8Jm11dCBzZXJkZV9qc29uOjpkZTo6RGVzZXJpYWxpemVyPFI+IGFzIHNlcmRlOjpkZTo6\ -RGVzZXJpYWxpemVyPjo6ZGVzZXJpYWxpemVfc3RydWN0OjpoMmU3NGU3Y2M3ZGY1NWMzNzhuPHN0ZD\ -o6cGF0aDo6Q29tcG9uZW50cyBhcyBjb3JlOjppdGVyOjp0cmFpdHM6OmRvdWJsZV9lbmRlZDo6RG91\ -YmxlRW5kZWRJdGVyYXRvcj46Om5leHRfYmFjazo6aDY5NzkxMTI0ZjU0MGE1Nzk5OnVybDo6cGFyc2\ -VyOjpQYXJzZXI6OmFmdGVyX2RvdWJsZV9zbGFzaDo6aDRjZjMxZjQ0OGFjZmU3Yjg6N2NvcmU6OnN0\ -cjo6cGF0dGVybjo6U3RyU2VhcmNoZXI6Om5ldzo6aDQyNmFhMzU0ZTYwOThkMDI7N2FsbG9jOjpzdH\ -I6OjxpbXBsIHN0cj46OnRvX2xvd2VyY2FzZTo6aDg1NzZlZDY2ZTdiN2FmNzc8NnVybDo6cGFyc2Vy\ -OjpQYXJzZXI6OnBhcnNlX3JlbGF0aXZlOjpoNWFhMWQzM2RiZDQ5YzdlOT0xc3RkOjpwYXRoOjpDb2\ -1wb25lbnRzOjphc19wYXRoOjpoZWE5NjZhNjMyNWQ5MWUzZD4pdXJsOjpob3N0OjpIb3N0OjpwYXJz\ -ZTo6aDVlODM3NDI0YTg3OTdmZTg/TmRlbm9fY2FjaGVfZGlyOjpsb2NhbDo6TG9jYWxDYWNoZU1hbm\ -lmZXN0PEVudj46Omluc2VydF9kYXRhOjpoNjY1NzkyYjYxZjFkMjhlM0Awc2VyZGVfanNvbjo6ZXJy\ -b3I6Om1ha2VfZXJyb3I6Omg2N2ZlMTY0OTE0YWVlNjE0QTJ1cmw6OnBhcnNlcjo6UGFyc2VyOjpwYX\ -JzZV9wYXRoOjpoNzRmMzZlOTUyYmZiYmY4ZkIrdXJsOjpQYXJzZU9wdGlvbnM6OnBhcnNlOjpoZjk2\ -MDlmMTE1YWE5NDA4MkMxY29yZTo6c3RyOjpzbGljZV9lcnJvcl9mYWlsX3J0OjpoOTU2NWQ5NzFmZm\ -FiNDJmMEQydXJsOjpwYXJzZXI6OlBhcnNlcjo6cGFyc2VfaG9zdDo6aGFlNTVkZmVlNTc1YmFlYTRF\ -T2Rlbm9fY2FjaGVfZGlyOjpsb2NhbDo6TG9jYWxDYWNoZU1hbmlmZXN0PEVudj46OmdldF9tZXRhZG\ -F0YTo6aDI0YjA2ZTQ2YjIyNzJkMjdGUTxkYXRhX3VybDo6bWltZTo6TWltZSBhcyBjb3JlOjpzdHI6\ -OnRyYWl0czo6RnJvbVN0cj46OmZyb21fc3RyOjpoZGUwY2FjM2JlM2NjOGQ3YkcsdXJsOjpob3N0Oj\ -pwYXJzZV9pcHY2YWRkcjo6aDIzMTU4NDg5ODE1ZjkxMDZITGRlbm9fY2FjaGVfZGlyOjpsb2NhbDo6\ -dXJsX3RvX2xvY2FsX3N1Yl9wYXRoOjp7e2Nsb3N1cmV9fTo6aDVlOTVhZGY2ZGViZGE2NjdJOGRsbW\ -FsbG9jOjpkbG1hbGxvYzo6RGxtYWxsb2M8QT46OmZyZWU6OmhhNzlhOGM3NWU5NTk0MzZkSkhjb3Jl\ -OjpudW06OmZsdDJkZWM6OnN0cmF0ZWd5OjpncmlzdTo6Zm9ybWF0X2V4YWN0X29wdDo6aDk1OTQyZW\ -E2NjQyNGRhMjlLZTxzZXJkZV93YXNtX2JpbmRnZW46OmRlOjpEZXNlcmlhbGl6ZXIgYXMgc2VyZGU6\ -OmRlOjpEZXNlcmlhbGl6ZXI+OjpkZXNlcmlhbGl6ZV9tYXA6OmhlYmNkMGJiYWNjMWU5Zjk1TDhjb3\ -JlOjpudW06OmJpZ251bTo6QmlnMzJ4NDA6Om11bF9wb3cyOjpoZDJjNWYxNTFlOGIzZjUxMU0wYWxs\ -b2M6OnN0cjo6am9pbl9nZW5lcmljX2NvcHk6OmhlYzgxODc0MGMxODg5OTNjTjBhbGxvYzo6c3RyOj\ -pqb2luX2dlbmVyaWNfY29weTo6aDEwZGUzNmU3MmRmZmRiMWVPMmlkbmE6OnB1bnljb2RlOjpEZWNv\ -ZGVyOjpkZWNvZGU6OmhhOGZiYTMxNDM2MWM1YzU1UEdwYXJraW5nX2xvdDo6cmF3X3J3bG9jazo6Um\ -F3UndMb2NrOjp3YWl0X2Zvcl9yZWFkZXJzOjpoMzUzNmIyN2NiYzBlMGJmYlFFPHNlcmRlOjpkZTo6\ -VW5leHBlY3RlZCBhcyBjb3JlOjpmbXQ6OkRpc3BsYXk+OjpmbXQ6Omg5MjRkMTc0NDBkOTM2ODI0Uk\ -BzZXJkZV9qc29uOjpkZTo6RGVzZXJpYWxpemVyPFI+OjppZ25vcmVfdmFsdWU6OmgwNTFkYzc4NDNk\ -NTIwYWMwUyxjb3JlOjpmbXQ6OkZvcm1hdHRlcjo6cGFkOjpoYTNkNzJhN2JjYjVlNjdlNlQzY29yZT\ -o6c3RyOjpjb3VudDo6ZG9fY291bnRfY2hhcnM6OmhjYTZiNDg2YTE5MjY1MTY3VTE8c3RyIGFzIGNv\ -cmU6OmZtdDo6RGVidWc+OjpmbXQ6Omg2MTg0MGVmOGUwM2U4ZDNiVkBzZXJkZV9qc29uOjpkZTo6RG\ -VzZXJpYWxpemVyPFI+OjppZ25vcmVfdmFsdWU6OmgxZTkzYTJjNzlmZjk5ZDc3V0doYXNoYnJvd246\ -OnJhdzo6aW5uZXI6OlJhd1RhYmxlPFQsQT46OnJlc2VydmVfcmVoYXNoOjpoNGEzOThkMDI4NTU2MW\ -YxOVhHaGFzaGJyb3duOjpyYXc6OmlubmVyOjpSYXdUYWJsZTxULEE+OjpyZXNlcnZlX3JlaGFzaDo6\ -aGMwYmE1M2UxNmFjMzVkNWZZR2hhc2hicm93bjo6cmF3Ojppbm5lcjo6UmF3VGFibGU8VCxBPjo6cm\ -VzZXJ2ZV9yZWhhc2g6OmhmNjkyNTFlZDI2ZWIxNDkwWllkZW5vX2NhY2hlX2Rpcjo6bG9jYWw6Okxv\ -Y2FsSHR0cENhY2hlPEVudj46OmNoZWNrX2NvcHlfZ2xvYmFsX3RvX2xvY2FsOjpoMmZmOTdkOTZhOT\ -E4YmEyNVsNX19yZGxfcmVhbGxvY1xCY29yZTo6bnVtOjpmbHQyZGVjOjpzdHJhdGVneTo6ZHJhZ29u\ -OjptdWxfcG93MTA6OmhlNDAyN2Q0ODA2ZjU2OWQ3XUJjb3JlOjpmbXQ6OmZsb2F0OjpmbG9hdF90b1\ -9kZWNpbWFsX2NvbW1vbl9leGFjdDo6aDBiYTJkNTQyZTljMDY5ZDBeZTwmbXV0IHNlcmRlX2pzb246\ -OmRlOjpEZXNlcmlhbGl6ZXI8Uj4gYXMgc2VyZGU6OmRlOjpEZXNlcmlhbGl6ZXI+OjpkZXNlcmlhbG\ -l6ZV9tYXA6OmhmZDgzZWE1NTk3ZDA1OTQwXzpjb3JlOjpudW06OmJpZ251bTo6QmlnMzJ4NDA6Om11\ -bF9kaWdpdHM6OmhjZTQ2MGRhNTE3ZGI4YzRiYDVjb3JlOjpmbXQ6OkZvcm1hdHRlcjo6cGFkX2ludG\ -VncmFsOjpoYTI1YmJlZjcwNzJmMDEwZmFFY29yZTo6Y2hhcjo6bWV0aG9kczo6PGltcGwgY2hhcj46\ -OmVzY2FwZV9kZWJ1Z19leHQ6OmhmZGRlODM2YzM4YzMxZWYwYjFjb3JlOjpzdHI6OmNvbnZlcnRzOj\ -pmcm9tX3V0Zjg6OmhlYzg4YjNhM2NiN2UwNGExY09kZW5vX2NhY2hlX2Rpcjo6bG9jYWw6Om1hbmlm\ -ZXN0OjpMb2NhbENhY2hlTWFuaWZlc3REYXRhOjpuZXc6Omg5NDI4ZDJhOTZhZTg0M2UyZDJjb21waW\ -xlcl9idWlsdGluczo6bWVtOjptZW1tb3ZlOjpoYjVjNTFmY2MyZjI5MmViZGU5YWxsb2M6OnN0cmlu\ -Zzo6U3RyaW5nOjpmcm9tX3V0ZjhfbG9zc3k6OmhjYTEzZTE5MzZiYjM3ZTQ5ZjFzZXJkZV9qc29uOj\ -pyZWFkOjpwYXJzZV9lc2NhcGU6OmgyZWQzMTkwYTRmZDAyM2MxZz9kZW5vX2NhY2hlX2Rpcjo6bG9j\ -YWw6OnVybF90b19sb2NhbF9zdWJfcGF0aDo6aDU0ZTVmZTVmYWE4YzRhNTZoRXNlcmRlX2pzb246Om\ -RlOjpEZXNlcmlhbGl6ZXI8Uj46OnBlZWtfaW52YWxpZF90eXBlOjpoYTBlNmQyMGJhYjg4NTAzOWlF\ -Y29yZTo6Zm10OjpmbG9hdDo6ZmxvYXRfdG9fZGVjaW1hbF9jb21tb25fc2hvcnRlc3Q6Omg4Y2NmNG\ -NiYjU4NzNkOWI1aj5jb3JlOjpmbXQ6OkZvcm1hdHRlcjo6d3JpdGVfZm9ybWF0dGVkX3BhcnRzOjpo\ -ZTAxMTcxMzgwYmUxZjVkMWssY29yZTo6bnVtOjpmcm9tX3N0cl9yYWRpeDo6aDMzMGYyMDY4MjE5OD\ -AyMDBsQnJpbmc6OmRpZ2VzdDo6c2hhMjo6R0ZwX3NoYTI1Nl9ibG9ja19kYXRhX29yZGVyOjpoYzUx\ -ZWE3MDAzNjliMzgwOG0jY29yZTo6Zm10Ojp3cml0ZTo6aGY3NmY0NTkxMmI3OGI3OWJuR3Bhcmtpbm\ -dfbG90OjpyYXdfcndsb2NrOjpSYXdSd0xvY2s6OmxvY2tfc2hhcmVkX3Nsb3c6Omg5YjM3NDQzNzJj\ -YzRmODNib0w8YW55aG93OjpmbXQ6OkluZGVudGVkPFQ+IGFzIGNvcmU6OmZtdDo6V3JpdGU+Ojp3cm\ -l0ZV9zdHI6OmhhYWE4ZDhhNDFlMDNlZGVicCh1cmw6Omhvc3Q6OndyaXRlX2lwdjY6Omg5Y2Q3ZmY2\ -ZjQ2N2IwMWQ0cTxjb3JlOjpmbXQ6OkZvcm1hdHRlcjo6cGFkX2Zvcm1hdHRlZF9wYXJ0czo6aDEyYT\ -FkNmNkNTQ3OTY3NzdyL2NvcmU6OnNsaWNlOjptZW1jaHI6Om1lbXJjaHI6OmhhNGVhNTVmYjQ0MDI2\ -YTVkc2w8Y29yZTo6aXRlcjo6YWRhcHRlcnM6OmNoYWluOjpDaGFpbjxBLEI+IGFzIGNvcmU6Oml0ZX\ -I6OnRyYWl0czo6aXRlcmF0b3I6Okl0ZXJhdG9yPjo6bmV4dDo6aDgyNmQ2ZmQwNzk3YzIwMTl0RGhh\ -c2hicm93bjo6cmF3OjpSYXdUYWJsZUlubmVyPEE+OjpyZWhhc2hfaW5fcGxhY2U6OmgxMmZjNWJkYz\ -UyOTdjZWMzdUpwYXJraW5nX2xvdDo6cmF3X3J3bG9jazo6UmF3UndMb2NrOjpsb2NrX2V4Y2x1c2l2\ -ZV9zbG93OjpoODU4NzVmMTcxY2NiYjA2OXYwY29yZTo6c2xpY2U6OnNvcnQ6Om1lcmdlX3NvcnQ6Om\ -g2OTQ5MDA3MjZkZjI5YzU3d0VkZW5vX2NhY2hlX2Rpcjo6Y29tbW9uOjpiYXNlX3VybF90b19maWxl\ -bmFtZV9wYXJ0czo6aDA3MzRhYjg5ODRjMjFmOWF4RXNlcmRlX2pzb246OmRlOjpEZXNlcmlhbGl6ZX\ -I8Uj46OnBlZWtfaW52YWxpZF90eXBlOjpoN2YyOGQwZTVmMTA1NTMzMXk1cmluZzo6ZGlnZXN0OjpC\ -bG9ja0NvbnRleHQ6OmZpbmlzaDo6aDY3MTkyMzc4YWEwNjEzN2J6Uzxjb3JlOjpmbXQ6OmJ1aWxkZX\ -JzOjpQYWRBZGFwdGVyIGFzIGNvcmU6OmZtdDo6V3JpdGU+Ojp3cml0ZV9zdHI6OmgxNmE0N2QzZTIx\ -ZDc1MjJme2g8Jm11dCBzZXJkZV9qc29uOjpkZTo6RGVzZXJpYWxpemVyPFI+IGFzIHNlcmRlOjpkZT\ -o6RGVzZXJpYWxpemVyPjo6ZGVzZXJpYWxpemVfc3RydWN0OjpoMTE2YzkyMmUxM2VhMjFhNXxBZGxt\ -YWxsb2M6OmRsbWFsbG9jOjpEbG1hbGxvYzxBPjo6ZGlzcG9zZV9jaHVuazo6aDk1YjA4MDdlNDUwNm\ -ViNzZ9QGRlbm9fbWVkaWFfdHlwZTo6TWVkaWFUeXBlOjpmcm9tX2NvbnRlbnRfdHlwZTo6aGQ4Mzk1\ -MGY2YjhkZWM1YWR+THBhcmtpbmdfbG90OjpyYXdfcndsb2NrOjpSYXdSd0xvY2s6OnVubG9ja19leG\ -NsdXNpdmVfc2xvdzo6aDNhYTNkMjYxZGQ4MmYxMmR/LmlkbmE6OnB1bnljb2RlOjplbmNvZGVfaW50\ -bzo6aDc1NmQ1OTZkMjFjZmM3ODaAATpkZW5vX2NhY2hlX2Rpcjo6Z2xvYmFsOjp1cmxfdG9fZmlsZW\ -5hbWU6OmgyMDdjYTgzYTMzZGE5YjllgQFDc3RkOjpwYXRoOjpDb21wb25lbnRzOjpwYXJzZV9uZXh0\ -X2NvbXBvbmVudF9iYWNrOjpoOTZkZTFlOWQ1NGMzMmI3NYIBQGRlbm9fbWVkaWFfdHlwZTo6TWVkaW\ -FUeXBlOjpmcm9tX2NvbnRlbnRfdHlwZTo6aGFjMDI4MWUwM2ZjZGQ5MWWDAXQ8ZGVub19jYWNoZV9k\ -aXI6OmxvY2FsOjpMb2NhbEh0dHBDYWNoZTxFbnY+IGFzIGRlbm9fY2FjaGVfZGlyOjpjYWNoZTo6SH\ -R0cENhY2hlPjo6cmVhZF9maWxlX2J5dGVzOjpoN2YyZmM2NmQ2NTYyOGEzYoQBYTxjb3JlOjpzdHI6\ -Omxvc3N5OjpVdGY4Q2h1bmtzIGFzIGNvcmU6Oml0ZXI6OnRyYWl0czo6aXRlcmF0b3I6Okl0ZXJhdG\ -9yPjo6bmV4dDo6aDBjNDVlMTg2YzhhNTllMDOFAUZzZXJkZV93YXNtX2JpbmRnZW46OmRlOjpEZXNl\ -cmlhbGl6ZXI6OmludmFsaWRfdHlwZV86OmhkMGIxMTdmMDY0ZTM3OTkwhgFdPGluZGV4bWFwOjpzZX\ -JkZTo6SW5kZXhNYXBWaXNpdG9yPEssVixTPiBhcyBzZXJkZTo6ZGU6OlZpc2l0b3I+Ojp2aXNpdF9t\ -YXA6OmhhZGIyZTFjNmQ5MTk2OTBhhwE3ZGVub19tZWRpYV90eXBlOjptYXBfdHlwZXNjcmlwdF9saW\ -tlOjpoYjc3NzUzYjUxZDhjMTNiNYgBM2FsbG9jOjpmbXQ6OmZvcm1hdDo6Zm9ybWF0X2lubmVyOjpo\ -OTNjMjRkZmIyYjYxMzBkYYkBWDxzZXJkZV9qc29uOjpkZTo6TWFwQWNjZXNzPFI+IGFzIHNlcmRlOj\ -pkZTo6TWFwQWNjZXNzPjo6bmV4dF9rZXlfc2VlZDo6aGZiNzM4M2U0ZjJhNzlkMjiKAUY8c3RkOjpw\ -YXRoOjpDb21wb25lbnRzIGFzIGNvcmU6OmNtcDo6UGFydGlhbEVxPjo6ZXE6OmhiMWZiYWNhNDhkZm\ -MyMzc4iwExdXJsOjpwYXJzZXI6OlBhcnNlcjo6ZmlsZV9ob3N0OjpoMWE4Njg4NThkNGJhYWRiMowB\ -RmFueWhvdzo6Zm10Ojo8aW1wbCBhbnlob3c6OmVycm9yOjpFcnJvckltcGw+OjpkZWJ1Zzo6aDczZm\ -NlYzc2OTFlYjEzZjaNAVU8c2VyZGVfanNvbjo6cmVhZDo6U2xpY2VSZWFkIGFzIHNlcmRlX2pzb246\ -OnJlYWQ6OlJlYWQ+OjpwYXJzZV9zdHI6OmhlYjRjYWRmZjQxZjNiNDNkjgE4ZGVub19tZWRpYV90eX\ -BlOjpNZWRpYVR5cGU6OmZyb21fcGF0aDo6aDk0MDk4OTMzNDhkNDQyNjKPAVg8c2VyZGVfanNvbjo6\ -ZGU6Ok1hcEFjY2VzczxSPiBhcyBzZXJkZTo6ZGU6Ok1hcEFjY2Vzcz46Om5leHRfa2V5X3NlZWQ6Om\ -hhMzI0ZGEzOWY0YzQ1MDRhkAFYPHNlcmRlX2pzb246OmRlOjpNYXBBY2Nlc3M8Uj4gYXMgc2VyZGU6\ -OmRlOjpNYXBBY2Nlc3M+OjpuZXh0X2tleV9zZWVkOjpoZWEwNTEwMDYxM2Q5NThjZpEBQGhhc2hicm\ -93bjo6cmF3OjpSYXdUYWJsZTxULEE+OjpyZXNlcnZlX3JlaGFzaDo6aGM5MDIwZTExMWZmNGYyZWaS\ -AWg8ZGVub19jYWNoZV9kaXI6OmxvY2FsOjpMb2NhbEh0dHBDYWNoZTxFbnY+IGFzIGRlbm9fY2FjaG\ -VfZGlyOjpjYWNoZTo6SHR0cENhY2hlPjo6c2V0OjpoYzEwZmU2ODU3YTI5OWU4MpMBR2Rlbm9fY2Fj\ -aGVfZGlyOjp3YXNtOjpHbG9iYWxIdHRwQ2FjaGU6OmdldF9maWxlX3RleHQ6Omg2YTFlMjA2MDg5YW\ -JjM2MwlAE7Y29yZTo6c3RyOjpwYXR0ZXJuOjpUd29XYXlTZWFyY2hlcjo6bmV4dDo6aGMyYzFjMTUx\ -YjZmN2M0ODmVATx1bmljb2RlX25vcm1hbGl6YXRpb246Om5vcm1hbGl6ZTo6Y29tcG9zZTo6aDNmMj\ -I1OWQ1MWNmNDJhMWSWAT9zZXJkZV9qc29uOjpzZXI6OmZvcm1hdF9lc2NhcGVkX3N0cl9jb250ZW50\ -czo6aDg4YjcyOTk5NzJiZjFhODGXATRpZG5hOjp1dHM0Njo6SWRuYTo6dG9fYXNjaWlfaW5uZXI6Om\ -g2ZDU5YWJkZjY4ZGMzZDI5mAE0Y29yZTo6aGFzaDo6QnVpbGRIYXNoZXI6Omhhc2hfb25lOjpoNjFh\ -NWIxNmJkYjQ2ZmI2Y5kBXjxjb3JlOjpzdHI6Oml0ZXI6OlNwbGl0PFA+IGFzIGNvcmU6Oml0ZXI6On\ -RyYWl0czo6aXRlcmF0b3I6Okl0ZXJhdG9yPjo6bmV4dDo6aDVkMWUxMjZkOTlhMGI1NjeaAUFzZXJk\ -ZV9qc29uOjpkZTo6RGVzZXJpYWxpemVyPFI+OjpwYXJzZV9pbnRlZ2VyOjpoZTQyNzE4OTUyZWZhND\ -FjOJsBQXNlcmRlX2pzb246OmRlOjpEZXNlcmlhbGl6ZXI8Uj46OnBhcnNlX2ludGVnZXI6Omg4NGVl\ -NWZmNTUyODllYTk1nAEwdXJsOjpob3N0OjpIb3N0OjpwYXJzZV9vcGFxdWU6Omg2NzRkZmQzMTNlZD\ -NiYzNmnQFdPGluZGV4bWFwOjpzZXJkZTo6SW5kZXhNYXBWaXNpdG9yPEssVixTPiBhcyBzZXJkZTo6\ -ZGU6OlZpc2l0b3I+Ojp2aXNpdF9tYXA6OmgyNWFjZmJlNWYzNWI2YzgzngEudXJsOjpob3N0OjpwYX\ -JzZV9pcHY0bnVtYmVyOjpoMWQ5M2RlNGNkNTY1Y2U3M58BbDxjb3JlOjppdGVyOjphZGFwdGVyczo6\ -Y2hhaW46OkNoYWluPEEsQj4gYXMgY29yZTo6aXRlcjo6dHJhaXRzOjppdGVyYXRvcjo6SXRlcmF0b3\ -I+Ojpmb2xkOjpoMDI0MjQ1NmUxOTcxYzZhM6ABQnNlcmRlX2pzb246OmRlOjpEZXNlcmlhbGl6ZXI8\ -Uj46OnBhcnNlX2V4cG9uZW50OjpoZThlNTNkYWY4N2JkOWUzYaEBWDxzZXJkZV9qc29uOjpkZTo6TW\ -FwQWNjZXNzPFI+IGFzIHNlcmRlOjpkZTo6TWFwQWNjZXNzPjo6bmV4dF9rZXlfc2VlZDo6aDI3ODM5\ -ZGNkOWI4Yjg4YziiAUBoYXNoYnJvd246OnJhdzo6UmF3VGFibGU8VCxBPjo6cmVzZXJ2ZV9yZWhhc2\ -g6OmhkOTA3YzVkYWI4YzA3NmQ5owFCc2VyZGVfanNvbjo6ZGU6OkRlc2VyaWFsaXplcjxSPjo6cGFy\ -c2VfZXhwb25lbnQ6OmhiYmU3NjBmN2M3ZWM0N2UwpAFYPHNlcmRlX2pzb246OmRlOjpNYXBBY2Nlc3\ -M8Uj4gYXMgc2VyZGU6OmRlOjpNYXBBY2Nlc3M+OjpuZXh0X2tleV9zZWVkOjpoNmI2ZWVlMTc5NTRi\ -OGNiNKUBXDxzZXJkZV9qc29uOjpkZTo6U2VxQWNjZXNzPFI+IGFzIHNlcmRlOjpkZTo6U2VxQWNjZX\ -NzPjo6bmV4dF9lbGVtZW50X3NlZWQ6OmhlMTkwNDEzNDZmMjE3ODgypgFAaGFzaGJyb3duOjpyYXc6\ -OlJhd1RhYmxlPFQsQT46OnJlc2VydmVfcmVoYXNoOjpoMThiMjEyZTYxYmU1ODY4ZKcBQGhhc2hicm\ -93bjo6cmF3OjpSYXdUYWJsZTxULEE+OjpyZXNlcnZlX3JlaGFzaDo6aGYwODJlMDlmYzA5OGM0NTio\ -AUFwYXJraW5nX2xvdF9jb3JlOjpwYXJraW5nX2xvdDo6VGhyZWFkRGF0YTo6bmV3OjpoZTg1ZWU3YW\ -VlZmRlZWRiN6kBRmRlbm9fY2FjaGVfZGlyOjp3YXNtOjpMb2NhbEh0dHBDYWNoZTo6Z2V0X2ZpbGVf\ -dGV4dDo6aDM3NDJkNWM5MjYyYTEzNTiqAVg8c2VyZGVfanNvbjo6ZGU6Ok1hcEFjY2VzczxSPiBhcy\ -BzZXJkZTo6ZGU6Ok1hcEFjY2Vzcz46Om5leHRfa2V5X3NlZWQ6Omg2MWRlOTdhOWQ3Nzg5YjViqwE6\ -Y29yZTo6c3RyOjppdGVyOjpTcGxpdEludGVybmFsPFA+OjpuZXh0OjpoNzk2OWU5NTY3MTNjZTNlY6\ -wBZTwmbXV0IHNlcmRlX2pzb246OmRlOjpEZXNlcmlhbGl6ZXI8Uj4gYXMgc2VyZGU6OmRlOjpEZXNl\ -cmlhbGl6ZXI+OjpkZXNlcmlhbGl6ZV9tYXA6OmgwNjk1NGIzMTA2ZmM3Y2U4rQFlPCZtdXQgc2VyZG\ -VfanNvbjo6ZGU6OkRlc2VyaWFsaXplcjxSPiBhcyBzZXJkZTo6ZGU6OkRlc2VyaWFsaXplcj46OmRl\ -c2VyaWFsaXplX21hcDo6aDZlYTc5OGI4NWVkYWFjY2OuAWU8Jm11dCBzZXJkZV9qc29uOjpkZTo6RG\ -VzZXJpYWxpemVyPFI+IGFzIHNlcmRlOjpkZTo6RGVzZXJpYWxpemVyPjo6ZGVzZXJpYWxpemVfbWFw\ -OjpoMjc5NGE0MGU5MTY4MjgyZK8BWDxzZXJkZV9qc29uOjpkZTo6TWFwQWNjZXNzPFI+IGFzIHNlcm\ -RlOjpkZTo6TWFwQWNjZXNzPjo6bmV4dF9rZXlfc2VlZDo6aGM3NmE5ODMwMzRkMzIxZWKwAUw8Y29y\ -ZTo6bmV0OjppcF9hZGRyOjpJcHY0QWRkciBhcyBjb3JlOjpmbXQ6OkRpc3BsYXk+OjpmbXQ6OmhiNm\ -E5NWNlNzM1YzI2YzYxsQFdPGluZGV4bWFwOjpzZXJkZTo6SW5kZXhNYXBWaXNpdG9yPEssVixTPiBh\ -cyBzZXJkZTo6ZGU6OlZpc2l0b3I+Ojp2aXNpdF9tYXA6OmhlYjFlN2MwY2NmNmQ1ZDFisgE5Y29yZT\ -o6b3BzOjpmdW5jdGlvbjo6Rm5PbmNlOjpjYWxsX29uY2U6OmhiMTk2YzgxODQ1ZGEyOWNjswE5ZGVu\ -b19jYWNoZV9kaXI6Omdsb2JhbDo6d3JpdGVfbWV0YWRhdGE6OmhmMDE5ZGQ1NjJlNWZmMDNhtAEwY2\ -9yZTo6c2xpY2U6OnNvcnQ6Om1lcmdlX3NvcnQ6OmhhZGRlZTJkODkwYzhhY2U1tQFAPHNlcmRlOjpk\ -ZTo6T25lT2YgYXMgY29yZTo6Zm10OjpEaXNwbGF5Pjo6Zm10OjpoNGRkNWQ5MmJjMzM3OThiNbYBUm\ -FueWhvdzo6ZXJyb3I6OjxpbXBsIGNvcmU6OmZtdDo6RGlzcGxheSBmb3IgYW55aG93OjpFcnJvcj46\ -OmZtdDo6aDVmYjAxNmQzNDQ2NmYwNTm3AVhjb3JlOjpudW06OmZsdDJkZWM6OnN0cmF0ZWd5Ojpncm\ -lzdTo6Zm9ybWF0X2V4YWN0X29wdDo6cG9zc2libHlfcm91bmQ6OmgxZjhjZDQwMzYyMjY4OGU4uAFc\ -PHNlcmRlX2pzb246OmRlOjpTZXFBY2Nlc3M8Uj4gYXMgc2VyZGU6OmRlOjpTZXFBY2Nlc3M+OjpuZX\ -h0X2VsZW1lbnRfc2VlZDo6aDk4YTQyZTI3MzIwYjkyMWG5ATZjb3JlOjpzdHI6OjxpbXBsIHN0cj46\ -OnRyaW1fbWF0Y2hlczo6aGE0MmVmZTM1MTVlNmI4ZGW6AVw8c2VyZGVfanNvbjo6ZGU6OlNlcUFjY2\ -VzczxSPiBhcyBzZXJkZTo6ZGU6OlNlcUFjY2Vzcz46Om5leHRfZWxlbWVudF9zZWVkOjpoNGI0MDE2\ -NDFkZWQ1ODNmYrsBXDxzZXJkZV9qc29uOjpkZTo6U2VxQWNjZXNzPFI+IGFzIHNlcmRlOjpkZTo6U2\ -VxQWNjZXNzPjo6bmV4dF9lbGVtZW50X3NlZWQ6OmhkZDkxNGMyODQwNTY5NWMxvAFcPHNlcmRlX2pz\ -b246OmRlOjpTZXFBY2Nlc3M8Uj4gYXMgc2VyZGU6OmRlOjpTZXFBY2Nlc3M+OjpuZXh0X2VsZW1lbn\ -Rfc2VlZDo6aGU0YWE0MjEzZDM1NzI3OWS9AThjb3JlOjpudW06OmZsdDJkZWM6OmRpZ2l0c190b19k\ -ZWNfc3RyOjpoNWQzNjI3NWEwMGU1ZDE5Mr4BPGRsbWFsbG9jOjpkbG1hbGxvYzo6RGxtYWxsb2M8QT\ -46Om1lbWFsaWduOjpoNWM3OGRlZGNmZGEzNTc2Yr8BNXN0ZDo6cGF0aDo6UGF0aEJ1Zjo6X3NldF9l\ -eHRlbnNpb246OmhmYzlhYmNlOTQyMGUzYzU4wAFcPHNlcmRlX2pzb246OmRlOjpTZXFBY2Nlc3M8Uj\ -4gYXMgc2VyZGU6OmRlOjpTZXFBY2Nlc3M+OjpuZXh0X2VsZW1lbnRfc2VlZDo6aGY4ZmY5YzdmN2Q0\ -OGM2NGbBATdjb3JlOjpwYW5pY2tpbmc6OmFzc2VydF9mYWlsZWRfaW5uZXI6OmgyZmRkYmVkNWI5YT\ -I4YTAxwgE2c2VyZGU6OnNlcjo6U2VyaWFsaXplcjo6Y29sbGVjdF9tYXA6Omg0OWUyYzI1MmZjMDNk\ -YzFkwwFGc2VyZGVfanNvbjo6ZGU6OkRlc2VyaWFsaXplcjxSPjo6ZGVzZXJpYWxpemVfbnVtYmVyOj\ -poZmFiM2Y5MmFkOTM1Nzg3MMQBXDxzZXJkZV9qc29uOjpkZTo6U2VxQWNjZXNzPFI+IGFzIHNlcmRl\ -OjpkZTo6U2VxQWNjZXNzPjo6bmV4dF9lbGVtZW50X3NlZWQ6Omg4NGYzMDU2NDNkNmJjMGYyxQFcPH\ -NlcmRlX2pzb246OmRlOjpTZXFBY2Nlc3M8Uj4gYXMgc2VyZGU6OmRlOjpTZXFBY2Nlc3M+OjpuZXh0\ -X2VsZW1lbnRfc2VlZDo6aDM4M2UzOTc1ZDgzMWI3MWHGAVM8c2VyZGVfanNvbjo6cmVhZDo6U3RyUm\ -VhZCBhcyBzZXJkZV9qc29uOjpyZWFkOjpSZWFkPjo6cGFyc2Vfc3RyOjpoNmRhMWE3MTk3YjY3MGU1\ -MMcBajxjb3JlOjppdGVyOjphZGFwdGVyczo6cmV2OjpSZXY8ST4gYXMgY29yZTo6aXRlcjo6dHJhaX\ -RzOjppdGVyYXRvcjo6SXRlcmF0b3I+Ojp0cnlfZm9sZDo6aGE1OWQ5ODFjMzM5NGZiYjXIAUdjb3Jl\ -Ojp1bmljb2RlOjp1bmljb2RlX2RhdGE6OmdyYXBoZW1lX2V4dGVuZDo6bG9va3VwOjpoZWM2YjJmMT\ -cyNThmN2U4ZskBRmNvcmU6OnVuaWNvZGU6OnVuaWNvZGVfZGF0YTo6Y2FzZV9pZ25vcmFibGU6Omxv\ -b2t1cDo6aGMxYjc5NzE2M2M5ODVjNTbKAT1jb3JlOjp1bmljb2RlOjp1bmljb2RlX2RhdGE6OmNhc2\ -VkOjpsb29rdXA6Omg0ZGFiZWQ0ZWQ5ZDkwMjU1ywGdATxzZXJkZTo6ZGU6OmltcGxzOjo8aW1wbCBz\ -ZXJkZTo6ZGU6OkRlc2VyaWFsaXplIGZvciBzdGQ6OnRpbWU6OlN5c3RlbVRpbWU+OjpkZXNlcmlhbG\ -l6ZTo6RHVyYXRpb25WaXNpdG9yIGFzIHNlcmRlOjpkZTo6VmlzaXRvcj46OnZpc2l0X21hcDo6aDgz\ -NDA5MWVlNjNiZDgzOTHMATVyaW5nOjpkaWdlc3Q6OnNoYTI1Nl9mb3JtYXRfb3V0cHV0OjpoNjUxZT\ -g4ZWYzZmNlNzAyYs0BMmNvcmU6OnVuaWNvZGU6OnByaW50YWJsZTo6Y2hlY2s6OmhjZjJhYTA1NjBm\ -MTgxODhjzgFFPHN0ZDo6aW86OmVycm9yOjpFcnJvciBhcyBjb3JlOjpmbXQ6OkRpc3BsYXk+OjpmbX\ -Q6OmgxZDI1MzQzMzZkNDBkYzI1zwFGc2VyZGVfanNvbjo6ZGU6OkRlc2VyaWFsaXplcjxSPjo6ZGVz\ -ZXJpYWxpemVfbnVtYmVyOjpoY2Y5ODA0M2Y0YmUwMmI0N9ABMHJpbmc6OmRpZ2VzdDo6Q29udGV4dD\ -o6dXBkYXRlOjpoYzgxMTU3ODJiZmE3YjQxZNEBM3VybDo6cGFyc2VyOjpQYXJzZXI6OnBhcnNlX3F1\ -ZXJ5OjpoMjE2OWU1MTkxZTBhNmQ0M9IBZ3N0ZDo6aW86OmVycm9yOjo8aW1wbCBjb3JlOjpmbXQ6Ok\ -RlYnVnIGZvciBzdGQ6OmlvOjplcnJvcjo6cmVwcl91bnBhY2tlZDo6UmVwcj46OmZtdDo6aDdjOWQ5\ -YTI0M2JmMGY0ODDTATpjb3JlOjpmbXQ6OmJ1aWxkZXJzOjpEZWJ1Z1N0cnVjdDo6ZmllbGQ6OmgyYz\ -U1Mzk5ZmQxYmFlNWUx1AE9ZGVub19jYWNoZV9kaXI6Ondhc206Okdsb2JhbEh0dHBDYWNoZTo6c2V0\ -OjpoODE2ZDI1NmZlNGI2NjJjM9UBPGRlbm9fY2FjaGVfZGlyOjp3YXNtOjpMb2NhbEh0dHBDYWNoZT\ -o6c2V0OjpoOWQ0ZDM5YTIyOTgxYjBkN9YBTWluZGV4bWFwOjptYXA6OmNvcmU6OkluZGV4TWFwQ29y\ -ZTxLLFY+Ojpzd2FwX3JlbW92ZV9maW5pc2g6OmhkYTlhMzgzNjJmYjNjYzZl1wFFZGVub19jYWNoZV\ -9kaXI6Ondhc206Okdsb2JhbEh0dHBDYWNoZTo6Z2V0X2hlYWRlcnM6OmhkMzc4ODQzZWRiYmRiZDFl\ -2AE8dXJsOjpwYXJzZXI6OlBhcnNlcjo6Y2hlY2tfdXJsX2NvZGVfcG9pbnQ6OmgzMzA2MTUwYWU4M2\ -ExNDhk2QF0PGRlbm9fY2FjaGVfZGlyOjpnbG9iYWw6Okdsb2JhbEh0dHBDYWNoZTxFbnY+IGFzIGRl\ -bm9fY2FjaGVfZGlyOjpjYWNoZTo6SHR0cENhY2hlPjo6cmVhZF9tZXRhZGF0YTo6aGIxNzIxMjAzOD\ -AxODJjOGbaAThkZW5vX2NhY2hlX2Rpcjo6d2FzbTo6dXJsX3RvX2ZpbGVuYW1lOjpoOGYxMzZlMjY3\ -NDlmMzY0ZdsBI3VybDo6VXJsOjptdXRhdGU6Omg0ZGE2ZTUwNTMwYTRhNGE13AGDAXBlcmNlbnRfZW\ -5jb2Rpbmc6OjxpbXBsIGNvcmU6OmNvbnZlcnQ6OkZyb208cGVyY2VudF9lbmNvZGluZzo6UGVyY2Vu\ -dERlY29kZT4gZm9yIGFsbG9jOjpib3Jyb3c6OkNvdzxbdThdPj46OmZyb206Omg1ZDQ4Mjc3OWU2Mz\ -dkZWIx3QFEPGRhdGFfdXJsOjptaW1lOjpNaW1lIGFzIGNvcmU6OmZtdDo6RGlzcGxheT46OmZtdDo6\ -aDViYzFjM2UzZDkwYzI3MGbeATs8Jm11dCBXIGFzIGNvcmU6OmZtdDo6V3JpdGU+Ojp3cml0ZV9jaG\ -FyOjpoNDQ2ZTIwNTQ3ZmI0NGE4M98BXTxzdGQ6OmNvbGxlY3Rpb25zOjpoYXNoOjptYXA6OkRlZmF1\ -bHRIYXNoZXIgYXMgY29yZTo6aGFzaDo6SGFzaGVyPjo6ZmluaXNoOjpoMWIzNDA1MTkwODMzOGU5Zu\ -ABYTxjb3JlOjpzdHI6OnBhdHRlcm46OkNoYXJTZWFyY2hlciBhcyBjb3JlOjpzdHI6OnBhdHRlcm46\ -OlNlYXJjaGVyPjo6bmV4dF9tYXRjaDo6aGM1YzE1NGQ2Y2EyNThjNzjhAS5hbGxvYzo6c3RyaW5nOj\ -pTdHJpbmc6OnB1c2g6OmhmZDliOTNhYTVmMWMyZTYw4gE+PHN0ZDo6cGF0aDo6UGF0aCBhcyBjb3Jl\ -OjpoYXNoOjpIYXNoPjo6aGFzaDo6aDFhYmI3YmI5Nzg3YjBlMzPjATFjb21waWxlcl9idWlsdGlucz\ -o6bWVtOjptZW1jcHk6Omg1NTAzYTNiMDJkMjA0NTQ35AEvY29yZTo6Zm10OjpudW06OmltcDo6Zm10\ -X3U2NDo6aDhhZGI3NTY4NjhkMzM0YjXlAVI8Y29yZTo6cGFuaWM6OnBhbmljX2luZm86OlBhbmljSW\ -5mbyBhcyBjb3JlOjpmbXQ6OkRpc3BsYXk+OjpmbXQ6Omg0YjFlOTczOGM2ZTBlYWE25gFGY29yZTo6\ -Zm10OjpudW06OjxpbXBsIGNvcmU6OmZtdDo6RGVidWcgZm9yIHU4Pjo6Zm10OjpoNzczZjc3ZTk3NG\ -YyYzFhZOcBR2NvcmU6OmZtdDo6bnVtOjo8aW1wbCBjb3JlOjpmbXQ6OkRlYnVnIGZvciB1NjQ+Ojpm\ -bXQ6OmgxOWNmZmM2OWE2ZjU2YjAw6AEtc3RkOjpwYXRoOjpQYXRoOjpmaWxlX3N0ZW06OmhjYzZmMz\ -k1NGU1YzcxOWVl6QFBc2VyZGVfanNvbjo6ZGU6OkRlc2VyaWFsaXplcjxSPjo6cGFyc2VfZGVjaW1h\ -bDo6aDgxMjk5ZTAzMjI4YTc2OGbqAUFzZXJkZV9qc29uOjpkZTo6RGVzZXJpYWxpemVyPFI+OjpwYX\ -JzZV9kZWNpbWFsOjpoOTlhNzI5ZWY3YTRjNzA2ZusBMnNtYWxsdmVjOjpTbWFsbFZlYzxBPjo6dHJ5\ -X2dyb3c6OmhkMjMwMTc4MGQ0ZjY2MGVm7AFHY29yZTo6Zm10OjpudW06OjxpbXBsIGNvcmU6OmZtdD\ -o6RGVidWcgZm9yIHUzMj46OmZtdDo6aDc2ZWY5ZWRkZjgyN2U5NTTtATh1cmw6OnBhcnNlcjo6UGFy\ -c2VyOjpwYXJzZV9wYXRoX3N0YXJ0OjpoYzMxMThlNzBlMjM3NTZmMe4BLmlkbmE6OnV0czQ2OjpJZG\ -5hOjp0b19hc2NpaTo6aDE4ZDMwM2MwZDUyYzUzZWTvATlzdGQ6OnBhdGg6OkNvbXBvbmVudHM6Omlu\ -Y2x1ZGVfY3VyX2Rpcjo6aDQ2YzViNThmNGU2ODQ1ZmXwASlzdGQ6OnBhdGg6OlBhdGg6Ol9qb2luOj\ -poZTIyOGQ3NGRjNDFmODQyZPEBTDxzZXJkZV9qc29uOjplcnJvcjo6RXJyb3JDb2RlIGFzIGNvcmU6\ -OmZtdDo6RGlzcGxheT46OmZtdDo6aDVkY2QxOTY0NjA2ZTk1NTLyAS1zdGQ6OnBhdGg6OlBhdGg6Om\ -V4dGVuc2lvbjo6aGU3ZGYxYTJlMjJjYTM3NTnzAUlkZW5vX21lZGlhX3R5cGU6Ok1lZGlhVHlwZTo6\ -ZnJvbV9zcGVjaWZpZXJfYW5kX2hlYWRlcnM6Omg2ZWQ3NTAwMTY5MzFiMjEx9AE5Y29yZTo6Zm10Oj\ -pidWlsZGVyczo6RGVidWdUdXBsZTo6ZmllbGQ6OmhlNjcxOWRkNjQzYThiMzNk9QFkPHNlcmRlOjpk\ -ZTo6dmFsdWU6Ok1hcERlc2VyaWFsaXplcjxJLEU+IGFzIHNlcmRlOjpkZTo6TWFwQWNjZXNzPjo6bm\ -V4dF9lbnRyeV9zZWVkOjpoODEyMGQ3MmMyNWU5NWYzYfYBRmRsbWFsbG9jOjpkbG1hbGxvYzo6RGxt\ -YWxsb2M8QT46OnVubGlua19sYXJnZV9jaHVuazo6aDViNjlkMzViMTY0ZWRmOTj3AWo8ZGVub19jYW\ -NoZV9kaXI6Omdsb2JhbDo6R2xvYmFsSHR0cENhY2hlPEVudj4gYXMgZGVub19jYWNoZV9kaXI6OmNh\ -Y2hlOjpIdHRwQ2FjaGU+OjpzZXQ6Omg3YjEyMmFhNjZjMTAyYzRm+AFEZGVub19jYWNoZV9kaXI6On\ -dhc206OkxvY2FsSHR0cENhY2hlOjpnZXRfaGVhZGVyczo6aGQyOWEwMjUwMmFkMGJkNDX5AUJzZXJk\ -ZV9qc29uOjpkZTo6RGVzZXJpYWxpemVyPFI+OjppZ25vcmVfaW50ZWdlcjo6aDgwNTM5OTM1YjhmOD\ -JkNjP6AUZkbG1hbGxvYzo6ZGxtYWxsb2M6OkRsbWFsbG9jPEE+OjppbnNlcnRfbGFyZ2VfY2h1bms6\ -Omg1YTBmNjM0MTg1ZDEzYTky+wEyPGNoYXIgYXMgY29yZTo6Zm10OjpEZWJ1Zz46OmZtdDo6aGZjNW\ -I2ZjVmZmFiZmIwZmH8ATs8Jm11dCBXIGFzIGNvcmU6OmZtdDo6V3JpdGU+Ojp3cml0ZV9jaGFyOjpo\ -MmU1OGY0MTIxMTg1M2U2MP0BNmNvcmU6OnNsaWNlOjptZW1jaHI6Om1lbWNocl9hbGlnbmVkOjpoOD\ -gzNDkyNjVhODFmZjBjZP4BWmhhc2hicm93bjo6cmF3Ojppbm5lcjo6UmF3VGFibGVJbm5lcjxBPjo6\ -ZmluZF9vcl9maW5kX2luc2VydF9zbG90X2lubmVyOjpoNDJlZDMxYjRlNmFlMWRlYf8BMWNvbnNvbG\ -VfZXJyb3JfcGFuaWNfaG9vazo6aG9vazo6aGVlMjgzOWU3M2JkMzhjNjaAAkJjb3JlOjpzdHI6OnZh\ -bGlkYXRpb25zOjpuZXh0X2NvZGVfcG9pbnRfcmV2ZXJzZTo6aDFiNzczODE4M2JmOTZhM2SBAjljb3\ -JlOjpmbXQ6OmJ1aWxkZXJzOjpEZWJ1Z0lubmVyOjplbnRyeTo6aDNhM2RmMTkyODllMGYxZTWCAlFj\ -b3JlOjpudW06OjxpbXBsIGNvcmU6OnN0cjo6dHJhaXRzOjpGcm9tU3RyIGZvciB1MzI+Ojpmcm9tX3\ -N0cjo6aGI5NTUxMjUzNGVlZDExYTSDAkJzZXJkZV9qc29uOjpkZTo6RGVzZXJpYWxpemVyPFI+Ojpp\ -Z25vcmVfaW50ZWdlcjo6aDZmYTI3MTRmZjUyMjQ1NjmEAjZjb3JlOjpzdHI6OjxpbXBsIHN0cj46On\ -RyaW1fbWF0Y2hlczo6aDNjNTQzODRlMTMxYmQ4YzCFAk9kZW5vX2NhY2hlX2Rpcjo6bG9jYWw6Okxv\ -Y2FsQ2FjaGVNYW5pZmVzdDxFbnY+OjpuZXdfaW50ZXJuYWw6Omg2OGY4ZWUwZWQ3ZTZlY2JhhgJAcG\ -Fya2luZ19sb3RfY29yZTo6cGFya2luZ19sb3Q6Okhhc2hUYWJsZTo6bmV3OjpoYzcxYzgzNmU0MWFm\ -ZjA3OIcCSjxhbGxvYzo6c3RyaW5nOjpTdHJpbmcgYXMgY29yZTo6Zm10OjpXcml0ZT46OndyaXRlX2\ -NoYXI6OmhiYzMwODkwYjBmNDY2ZTI2iAJKPGFsbG9jOjpzdHJpbmc6OlN0cmluZyBhcyBjb3JlOjpm\ -bXQ6OldyaXRlPjo6d3JpdGVfY2hhcjo6aGJjMzA4OTBiMGY0NjZlMjaJAitjb3JlOjpzbGljZTo6c2\ -9ydDo6bWVyZ2U6OmhiZWUxODcxZGJkMDllOGExigIrY29yZTo6c2xpY2U6OnNvcnQ6Om1lcmdlOjpo\ -NThkODQzN2QwMGZlOGJhM4sCNDxjaGFyIGFzIGNvcmU6OmZtdDo6RGlzcGxheT46OmZtdDo6aGE1Nm\ -I3MDUyZjYyZTliNGKMAjpjb3JlOjpzdHI6OnZhbGlkYXRpb25zOjpuZXh0X2NvZGVfcG9pbnQ6Omg1\ -YjVjOGVlMTBmM2ZjYWY4jQI6Y29yZTo6c3RyOjp2YWxpZGF0aW9uczo6bmV4dF9jb2RlX3BvaW50Oj\ -poNTFhMmUwNzgyNGM0ODk3ZY4CI2pzX3N5czo6dHJ5X2l0ZXI6Omg3OWUzMjU0NmMwZWU4YmY1jwI6\ -Y29yZTo6c3RyOjp2YWxpZGF0aW9uczo6bmV4dF9jb2RlX3BvaW50OjpoNTY2ZGJlMjE0OWNlNjkxN5\ -ACS2RsbWFsbG9jOjpkbG1hbGxvYzo6RGxtYWxsb2M8QT46OnJlbGVhc2VfdW51c2VkX3NlZ21lbnRz\ -OjpoMDdmYzlhMzY5Mzc0N2E4MpECJ2l0b2E6OkJ1ZmZlcjo6Zm9ybWF0OjpoY2Y4NDUwNjI2MWUxOD\ -hiNJICOWRlbm9fbWVkaWFfdHlwZTo6bWFwX2pzX2xpa2VfZXh0ZW5zaW9uOjpoYzlkNmJhOTgwNGUz\ -N2VkNZMCR2luZGV4bWFwOjptYXA6OmNvcmU6OkluZGV4TWFwQ29yZTxLLFY+OjpnZXRfaW5kZXhfb2\ -Y6Omg1ZjM1ZDJlMGUyZGQ3MGIwlAI2Y29yZTo6c3RyOjo8aW1wbCBzdHI+Ojp0cmltX21hdGNoZXM6\ -OmhhOGU0ZTAzZTE4NDE3NjYzlQInaXRvYTo6QnVmZmVyOjpmb3JtYXQ6OmhiZTZjMzFmMzNmNzE4OD\ -M5lgJtPGNvcmU6OnN0cjo6cGF0dGVybjo6Q2hhclNlYXJjaGVyIGFzIGNvcmU6OnN0cjo6cGF0dGVy\ -bjo6UmV2ZXJzZVNlYXJjaGVyPjo6bmV4dF9tYXRjaF9iYWNrOjpoZGJjNDNjYmUwNjJkOWFlNZcCS2\ -hhc2hicm93bjo6cmF3OjpSYXdUYWJsZUlubmVyPEE+OjpmYWxsaWJsZV93aXRoX2NhcGFjaXR5Ojpo\ -OGQwY2RiYjJkOGExMmQwZJgCR2luZGV4bWFwOjptYXA6OmNvcmU6OkluZGV4TWFwQ29yZTxLLFY+Oj\ -pnZXRfaW5kZXhfb2Y6OmhmMTcxMGVlMTdiZTZiYjY5mQJHaW5kZXhtYXA6Om1hcDo6Y29yZTo6SW5k\ -ZXhNYXBDb3JlPEssVj46OmdldF9pbmRleF9vZjo6aDcxZjk1YzFmNmYwOGIxNTKaAlg8aWRuYTo6dX\ -RzNDY6Ok1hcHBlciBhcyBjb3JlOjppdGVyOjp0cmFpdHM6Oml0ZXJhdG9yOjpJdGVyYXRvcj46Om5l\ -eHQ6Omg1OTJhNWZjNzNkNDAyMzQ3mwJlPCZtdXQgc2VyZGVfanNvbjo6ZGU6OkRlc2VyaWFsaXplcj\ -xSPiBhcyBzZXJkZTo6ZGU6OkRlc2VyaWFsaXplcj46OmRlc2VyaWFsaXplX3N0cjo6aDQ4NTlhYWMx\ -NjI3YTE4YWKcAj1kZW5vX21lZGlhX3R5cGU6Ok1lZGlhVHlwZTo6ZnJvbV9zcGVjaWZpZXI6Omg3Zj\ -NjODRmMzFkOTZlOWY5nQJSaGFzaGJyb3duOjpyYXc6OmlubmVyOjpSYXdUYWJsZUlubmVyPEE+Ojpm\ -YWxsaWJsZV93aXRoX2NhcGFjaXR5OjpoZGQxN2YyZDQxZjcxMTE2Zp4CN2NvcmU6OmNoYXI6Om1ldG\ -hvZHM6OmVuY29kZV91dGY4X3Jhdzo6aDRjMzU1MWE0MzJkNTIxZGOfAjV1cmw6OnBhcnNlcjo6UGFy\ -c2VyOjpmcmFnbWVudF9vbmx5OjpoMDdlZjViNzkxYjgyOWZiNqACZTwmbXV0IHNlcmRlX2pzb246Om\ -RlOjpEZXNlcmlhbGl6ZXI8Uj4gYXMgc2VyZGU6OmRlOjpEZXNlcmlhbGl6ZXI+OjpkZXNlcmlhbGl6\ -ZV9zdHI6OmhlOTU5Yzc0OWE4Nzg2NTVioQIzY29yZTo6c2xpY2U6OjxpbXBsIFtUXT46OnJldmVyc2\ -U6Omg4OWRhNjFjOGQwODk4MjQ1ogIwPCZUIGFzIGNvcmU6OmZtdDo6RGVidWc+OjpmbXQ6OmgzMjQ1\ -ZmRkNzEwZjkzY2Q0owIpaWRuYTo6dXRzNDY6OmZpbmRfY2hhcjo6aDJjMzU5NzQ5ZjE0MjBlNzSkAj\ -toYXNoYnJvd246Om1hcDo6SGFzaE1hcDxLLFYsUyxBPjo6aW5zZXJ0OjpoZWZiMGRkM2M1ZjE0NmYw\ -ZaUCP3N0ZDo6c3lzX2NvbW1vbjo6dGhyZWFkX2luZm86OmN1cnJlbnRfdGhyZWFkOjpoYzgzYWMwMz\ -czN2QwZDI3ZKYCK3N0ZDo6cGFuaWNraW5nOjpzZXRfaG9vazo6aDBlNTVkNzZkODY3ZmRhZTGnAjVv\ -bmNlX2NlbGw6OmltcDo6aW5pdGlhbGl6ZV9vcl93YWl0OjpoY2FjMjIyNWFhOGFkODFlMKgCJnVybD\ -o6VXJsOjpzZXRfcXVlcnk6OmhmZTAxZmQ1NGQ0NGZlMTY3qQJkPHBlcmNlbnRfZW5jb2Rpbmc6OlBl\ -cmNlbnRFbmNvZGUgYXMgY29yZTo6aXRlcjo6dHJhaXRzOjppdGVyYXRvcjo6SXRlcmF0b3I+OjpuZX\ -h0OjpoZDQ1NTcwNzQzYjlkYzJlNqoCOzwmbXV0IFcgYXMgY29yZTo6Zm10OjpXcml0ZT46OndyaXRl\ -X2NoYXI6Omg0ZWNlNDA2OThjNTE2OGJlqwJ1PGNvcmU6OnN0cjo6aXRlcjo6Q2hhckluZGljZXMgYX\ -MgY29yZTo6aXRlcjo6dHJhaXRzOjpkb3VibGVfZW5kZWQ6OkRvdWJsZUVuZGVkSXRlcmF0b3I+Ojpu\ -ZXh0X2JhY2s6OmhkM2QyZDc1NTBmYTUyODVkrAJAdXJsOjpwYXJzZXI6OlBhcnNlcjo6cGFyc2VfcX\ -VlcnlfYW5kX2ZyYWdtZW50OjpoYmQ1YzAzYWEyZDhmY2U4N60CO3NlcmRlX2pzb246OmRlOjpEZXNl\ -cmlhbGl6ZXI8Uj46OmVuZF9zZXE6Omg4ZmNjODJlNTNjYjMzZjkzrgKdATxzZXJkZTo6ZGU6OmltcG\ -xzOjo8aW1wbCBzZXJkZTo6ZGU6OkRlc2VyaWFsaXplIGZvciBzdGQ6OnRpbWU6OlN5c3RlbVRpbWU+\ -OjpkZXNlcmlhbGl6ZTo6RHVyYXRpb25WaXNpdG9yIGFzIHNlcmRlOjpkZTo6VmlzaXRvcj46OnZpc2\ -l0X3NlcTo6aGZlZmZjNWM2OWJkZmFiYmOvAmg8c2VyZGVfd2FzbV9iaW5kZ2VuOjpzZXI6Ok1hcFNl\ -cmlhbGl6ZXIgYXMgc2VyZGU6OnNlcjo6U2VyaWFsaXplTWFwPjo6c2VyaWFsaXplX3ZhbHVlOjpoMG\ -I3NmVjMWI0ZTRkZDRhYrACazxkZW5vX2NhY2hlX2Rpcjo6d2FzbTo6V2FzbUVudiBhcyBkZW5vX2Nh\ -Y2hlX2Rpcjo6Y29tbW9uOjpEZW5vQ2FjaGVFbnY+OjpyZWFkX2ZpbGVfYnl0ZXM6Omg2Y2ZiZjAzZG\ -Q4YjA0MzU1sQI7c2VyZGVfanNvbjo6ZGU6OkRlc2VyaWFsaXplcjxSPjo6ZW5kX3NlcTo6aDY1YzQ2\ -YmQwNGI5NDUyZWayAkVwYXJraW5nX2xvdF9jb3JlOjp3b3JkX2xvY2s6OldvcmRMb2NrOjp1bmxvY2\ -tfc2xvdzo6aDhiMWQ1Y2Y3MjgzN2QwOTCzAjBpZG5hOjp1dHM0Njo6Q29uZmlnOjp0b19hc2NpaTo6\ -aGI3YzkxYTM4NTU2MTZjMTi0Ai9jb3JlOjpmbXQ6OldyaXRlOjp3cml0ZV9jaGFyOjpoYmMzYjA4NW\ -EzYmMxNThhYrUCOWNvcmU6OnVuaWNvZGU6OnByaW50YWJsZTo6aXNfcHJpbnRhYmxlOjpoYTExMGJl\ -Y2EzYWRiM2ZjZbYCbDxjb3JlOjppdGVyOjphZGFwdGVyczo6bWFwOjpNYXA8SSxGPiBhcyBjb3JlOj\ -ppdGVyOjp0cmFpdHM6Oml0ZXJhdG9yOjpJdGVyYXRvcj46OnRyeV9mb2xkOjpoZWMwODI5ODJiNDk2\ -N2Y4ObcCTDxjb3JlOjpoYXNoOjpzaXA6Okhhc2hlcjxTPiBhcyBjb3JlOjpoYXNoOjpIYXNoZXI+Oj\ -p3cml0ZTo6aDI2MDU5ZDhjNjU4MTA3ZDG4Akw8Y29yZTo6aGFzaDo6c2lwOjpIYXNoZXI8Uz4gYXMg\ -Y29yZTo6aGFzaDo6SGFzaGVyPjo6d3JpdGU6OmhjZTNjYWE5MWI5NGQ4OTE5uQI2Y29yZTo6c3RyOj\ -o8aW1wbCBzdHI+Ojp0cmltX21hdGNoZXM6OmhkOWVkZmU0ZDg3Y2RlMWE1ugI0dXJsOjpwYXJzZXI6\ -OlBhcnNlcjo6cGFyc2Vfc2NoZW1lOjpoODNhZmJmNDVjNWJhMDdhY7sCRjxzZXJkZV9qc29uOjplcn\ -Jvcjo6RXJyb3IgYXMgY29yZTo6Zm10OjpEZWJ1Zz46OmZtdDo6aDk0MzIyN2ExYjI0OTZjNGW8Ajhz\ -dGQ6OnRpbWU6OlN5c3RlbVRpbWU6OmR1cmF0aW9uX3NpbmNlOjpoYWEzOTgwMGMyYTdiMmI5Yr0CaD\ -xzdGQ6OnBhbmlja2luZzo6YmVnaW5fcGFuaWNfaGFuZGxlcjo6UGFuaWNQYXlsb2FkIGFzIGNvcmU6\ -OnBhbmljOjpCb3hNZVVwPjo6dGFrZV9ib3g6OmhmY2YwYWM4YTk0ODJjYWQwvgJAc2VyZGVfanNvbj\ -o6ZGU6OkRlc2VyaWFsaXplcjxSPjo6cGFyc2VfbnVtYmVyOjpoODc1MDljY2U3ODNlNjc1Ob8CQHNl\ -cmRlX2pzb246OmRlOjpEZXNlcmlhbGl6ZXI8Uj46OnBhcnNlX251bWJlcjo6aDcyNGM5OTk2NjQ0Yj\ -M3OGHAAl08c2VyZGVfanNvbjo6cmVhZDo6U2xpY2VSZWFkIGFzIHNlcmRlX2pzb246OnJlYWQ6OlJl\ -YWQ+OjpkZWNvZGVfaGV4X2VzY2FwZTo6aGVkMmM0ZWRkZTFkZTRiMjnBAkVjb3JlOjp1bmljb2RlOj\ -p1bmljb2RlX2RhdGE6OmNvbnZlcnNpb25zOjp0b19sb3dlcjo6aDgwYzM3NmQ5YTFhNDE3OTfCAnA8\ -YWxsb2M6OnZlYzo6VmVjPFQ+IGFzIGFsbG9jOjp2ZWM6OnNwZWNfZnJvbV9pdGVyX25lc3RlZDo6U3\ -BlY0Zyb21JdGVyTmVzdGVkPFQsST4+Ojpmcm9tX2l0ZXI6OmgyMzBmODliZmI4NDhkYzA2wwJDc2Vy\ -ZGVfanNvbjo6ZGU6OkRlc2VyaWFsaXplcjxSPjo6aWdub3JlX2V4cG9uZW50OjpoMTQ3YmViNzcwOT\ -BhNzdjOcQCPWhhc2hicm93bjo6cmF3Ojppbm5lcjo6UmF3VGFibGU8VCxBPjo6ZmluZDo6aDI4MDcy\ -MjU1NDQ0NWM0Y2PFAilpZG5hOjp1dHM0Njo6aXNfc2ltcGxlOjpoYmRhNTQyYmZjYmI2Zjg3ZsYCaD\ -xjb3JlOjppdGVyOjphZGFwdGVyczo6bWFwOjpNYXA8SSxGPiBhcyBjb3JlOjppdGVyOjp0cmFpdHM6\ -Oml0ZXJhdG9yOjpJdGVyYXRvcj46OmZvbGQ6OmhjNDNkNzVjMzE3MzQ2MDA4xwJCc2VyZGVfanNvbj\ -o6ZGU6OkRlc2VyaWFsaXplcjxSPjo6ZjY0X2Zyb21fcGFydHM6OmhhNWM4NjAzMTdkZWU0ZGQzyAJF\ -aW5kZXhtYXA6Om1hcDo6Y29yZTo6SW5kZXhNYXBDb3JlPEssVj46OnB1c2hfZW50cnk6Omg2NjIzOT\ -E0MmE3ZjY3YzhkyQJCc2VyZGVfanNvbjo6ZGU6OkRlc2VyaWFsaXplcjxSPjo6ZjY0X2Zyb21fcGFy\ -dHM6OmgyYmM5MmZlOTYyMTlmNWFhygJoPGNvcmU6Oml0ZXI6OmFkYXB0ZXJzOjptYXA6Ok1hcDxJLE\ -Y+IGFzIGNvcmU6Oml0ZXI6OnRyYWl0czo6aXRlcmF0b3I6Okl0ZXJhdG9yPjo6Zm9sZDo6aGVlOTQ2\ -OWMwOTVmMTQ5ZDjLAjdjb3JlOjpjaGFyOjptZXRob2RzOjplbmNvZGVfdXRmOF9yYXc6Omg0YzM1NT\ -FhNDMyZDUyMWRjzAI3Y29yZTo6Y2hhcjo6bWV0aG9kczo6ZW5jb2RlX3V0ZjhfcmF3OjpoNGMzNTUx\ -YTQzMmQ1MjFkY80CLmFsbG9jOjpyYXdfdmVjOjpmaW5pc2hfZ3Jvdzo6aDVhMmMwYTg0ZmIxNDkzOW\ -XOAi5hbGxvYzo6cmF3X3ZlYzo6ZmluaXNoX2dyb3c6OmgyMWEwYWE3N2Q1Zjg3YTQyzwI3Y29yZTo6\ -Y2hhcjo6bWV0aG9kczo6ZW5jb2RlX3V0ZjhfcmF3OjpoNGMzNTUxYTQzMmQ1MjFkY9ACLmFsbG9jOj\ -pyYXdfdmVjOjpmaW5pc2hfZ3Jvdzo6aDVlYjQyZDY1MWU4YmQyYTPRAjdjb3JlOjpjaGFyOjptZXRo\ -b2RzOjplbmNvZGVfdXRmOF9yYXc6Omg0YzM1NTFhNDMyZDUyMWRj0gIjdXJsOjpVcmw6Om11dGF0ZT\ -o6aDEzMTFkYmU3MWNmYjhmNTTTAjdjb3JlOjpjaGFyOjptZXRob2RzOjplbmNvZGVfdXRmOF9yYXc6\ -Omg0YzM1NTFhNDMyZDUyMWRj1AIuYWxsb2M6OnJhd192ZWM6OmZpbmlzaF9ncm93OjpoOWIzOWQ2Yj\ -ZlYjg5NjBmMtUCLmFsbG9jOjpyYXdfdmVjOjpmaW5pc2hfZ3Jvdzo6aGFmY2M2NGQ0YWQ5ZDZmY2LW\ -Ajdjb3JlOjpjaGFyOjptZXRob2RzOjplbmNvZGVfdXRmOF9yYXc6Omg0YzM1NTFhNDMyZDUyMWRj1w\ -IzZGVub19jYWNoZV9kaXI6OmNvbW1vbjo6Y2hlY2tzdW06Omg0YmJlMjc0MDcwMzBjMWM52AJkPGRl\ -bm9fY2FjaGVfZGlyOjp3YXNtOjpXYXNtRW52IGFzIGRlbm9fY2FjaGVfZGlyOjpjb21tb246OkRlbm\ -9DYWNoZUVudj46Om1vZGlmaWVkOjpoZDUyZjA3OTQ0OGRmMWNhMNkCLmFsbG9jOjpyYXdfdmVjOjpm\ -aW5pc2hfZ3Jvdzo6aDNkYmQ5MTRkMjY4NTk2NDTaAjpjb3JlOjpzbGljZTo6c29ydDo6bWVyZ2Vfc2\ -9ydDo6Y29sbGFwc2U6OmhjZjVjYWY1NGY3MjQ3ZjNm2wI2c2VyZGU6OnNlcjo6U2VyaWFsaXplcjo6\ -Y29sbGVjdF9tYXA6Omg5OTcxOTNhYjNlOTE4YjI53AJGaW5kZXhtYXA6Om1hcDo6Y29yZTo6SW5kZX\ -hNYXBDb3JlPEssVj46Omluc2VydF9mdWxsOjpoN2YwZmM5NmI0MzMyN2ViM90CPmFsbG9jOjpyYXdf\ -dmVjOjpSYXdWZWM8VCxBPjo6Z3Jvd19hbW9ydGl6ZWQ6Omg2YzA5NWUxYjYzYzM4MTlm3gI+YWxsb2\ -M6OnJhd192ZWM6OlJhd1ZlYzxULEE+Ojpncm93X2Ftb3J0aXplZDo6aDZlZjI3NmNiNGM4NmMzZmXf\ -Aj5hbGxvYzo6cmF3X3ZlYzo6UmF3VmVjPFQsQT46Omdyb3dfYW1vcnRpemVkOjpoOTVjMTk2OGY4N2\ -IxZTI3MOACPmFsbG9jOjpyYXdfdmVjOjpSYXdWZWM8VCxBPjo6Z3Jvd19hbW9ydGl6ZWQ6OmhiYzMy\ -Mjg5MjJkODQ1OTU14QI+YWxsb2M6OnJhd192ZWM6OlJhd1ZlYzxULEE+Ojpncm93X2Ftb3J0aXplZD\ -o6aDgwZjI5OWJmNjhlNjYxNmbiAj5hbGxvYzo6cmF3X3ZlYzo6UmF3VmVjPFQsQT46Omdyb3dfYW1v\ -cnRpemVkOjpoZTdjYTdlZGJkMDVjZDFiMuMCPmFsbG9jOjpyYXdfdmVjOjpSYXdWZWM8VCxBPjo6Z3\ -Jvd19hbW9ydGl6ZWQ6OmgxNjgxNDA3NmFhNTUxNjcx5AI+YWxsb2M6OnJhd192ZWM6OlJhd1ZlYzxU\ -LEE+Ojpncm93X2Ftb3J0aXplZDo6aDNmNDk3MzI1MWFhYmYyNmTlAj5hbGxvYzo6cmF3X3ZlYzo6Um\ -F3VmVjPFQsQT46Omdyb3dfYW1vcnRpemVkOjpoMTdmMjc2YWVjZTcxMWUxMuYCPmFsbG9jOjpyYXdf\ -dmVjOjpSYXdWZWM8VCxBPjo6Z3Jvd19hbW9ydGl6ZWQ6OmhkZjgxNjUyODU0ZWFlMWY25wJLPGNvcm\ -U6OnN0cjo6ZXJyb3I6OlV0ZjhFcnJvciBhcyBjb3JlOjpmbXQ6OkRpc3BsYXk+OjpmbXQ6Omg3NWYy\ -NWMyOTFkZjFlYmNj6AJJPGNvcmU6OnN0cjo6ZXJyb3I6OlV0ZjhFcnJvciBhcyBjb3JlOjpmbXQ6Ok\ -RlYnVnPjo6Zm10OjpoODZhYTA0Y2M3ZDI0OTc0ZOkCSTxjb3JlOjphbGxvYzo6bGF5b3V0OjpMYXlv\ -dXQgYXMgY29yZTo6Zm10OjpEZWJ1Zz46OmZtdDo6aGE2NmU4Nzg2MjdhNWQ3Y2XqAkJjb3JlOjpmbX\ -Q6OkZvcm1hdHRlcjo6ZGVidWdfdHVwbGVfZmllbGQxX2ZpbmlzaDo6aDZkNWUyMDZlY2IyNTgwNjXr\ -Ai9hbGxvYzo6c3RyaW5nOjpTdHJpbmc6OmRyYWluOjpoYmZjYThiZWZhZWZjNWNmMuwCZjxjb3JlOj\ -ppdGVyOjphZGFwdGVyczo6cmV2OjpSZXY8ST4gYXMgY29yZTo6aXRlcjo6dHJhaXRzOjppdGVyYXRv\ -cjo6SXRlcmF0b3I+OjpuZXh0OjpoZGM2M2I5YjI0OGY2YTFmYe0CTmFsbG9jOjpyYXdfdmVjOjpSYX\ -dWZWM8VCxBPjo6cmVzZXJ2ZTo6ZG9fcmVzZXJ2ZV9hbmRfaGFuZGxlOjpoZTQ0OTk2NWJmNWZjMWEz\ -Y+4CTmFsbG9jOjpyYXdfdmVjOjpSYXdWZWM8VCxBPjo6cmVzZXJ2ZTo6ZG9fcmVzZXJ2ZV9hbmRfaG\ -FuZGxlOjpoZGVhY2NhMTZhYWNiNzIwZe8CLmFsbG9jOjpyYXdfdmVjOjpmaW5pc2hfZ3Jvdzo6aDQ5\ -NjE3NGIxNzQ1NjkyMznwAjJzZXJkZTo6ZGU6OkVycm9yOjp1bmtub3duX2ZpZWxkOjpoNThmZTM4NT\ -hhZWExOTRkZPECQGFsbG9jOjpyYXdfdmVjOjpSYXdWZWM8VCxBPjo6cmVzZXJ2ZV9mb3JfcHVzaDo6\ -aDcwMGE2ODE3Y2RmYWE5YmLyAixzdGQ6OnBhdGg6OlBhdGhCdWY6Ol9wdXNoOjpoNjAwNGIzNzQyNz\ -hkNzY1YvMCQGFsbG9jOjpyYXdfdmVjOjpSYXdWZWM8VCxBPjo6cmVzZXJ2ZV9mb3JfcHVzaDo6aGIx\ -ZjRhZjg4ZmEzNmJlZWX0AnM8PHVybDo6VXJsIGFzIHNlcmRlOjpkZTo6RGVzZXJpYWxpemU+OjpkZX\ -NlcmlhbGl6ZTo6VXJsVmlzaXRvciBhcyBzZXJkZTo6ZGU6OlZpc2l0b3I+Ojp2aXNpdF9zdHI6Omhl\ -MjIyNjVkY2Q3OWI1NTJk9QI/dXJsOjpwYXJzZXI6OlBhcnNlcjo6d2l0aF9xdWVyeV9hbmRfZnJhZ2\ -1lbnQ6OmhhYjE2NDEzZWIwODVjNjU29gI3c3RkOjpwYW5pY2tpbmc6OnJ1c3RfcGFuaWNfd2l0aF9o\ -b29rOjpoNmRmNWRiN2FkOWY2NWRjOPcCRmluZGV4bWFwOjptYXA6OmNvcmU6OkluZGV4TWFwQ29yZT\ -xLLFY+OjppbnNlcnRfZnVsbDo6aDQ1ZDgyNDQ3OThlYWE4NDT4Aj5hbGxvYzo6cmF3X3ZlYzo6UmF3\ -VmVjPFQsQT46Omdyb3dfYW1vcnRpemVkOjpoODNjZmFkMjM4NmY1N2UxN/kCPmFsbG9jOjpyYXdfdm\ -VjOjpSYXdWZWM8VCxBPjo6Z3Jvd19hbW9ydGl6ZWQ6Omg1MjJmZjFkMjA0OWVkNzgw+gI/Y29yZTo6\ -c3RyOjppdGVyOjpTcGxpdEludGVybmFsPFA+OjpuZXh0X2JhY2s6OmhiZWFkNjk0NDRmNzRkODhk+w\ -I+YWxsb2M6OnJhd192ZWM6OlJhd1ZlYzxULEE+Ojpncm93X2Ftb3J0aXplZDo6aDM5NDcxZDZmZjM3\ -ZDc1Yzj8Aj5hbGxvYzo6cmF3X3ZlYzo6UmF3VmVjPFQsQT46Omdyb3dfYW1vcnRpemVkOjpoZGM0M2\ -JjOGI3MmNjNGY3OP0CM3N0ZDo6c3lzOjp3YXNtOjpvbmNlOjpPbmNlOjpjYWxsOjpoYWU1OWU3ZDFk\ -ZThiMWQ2Nf4CP2hhc2hicm93bjo6cmF3OjpSYXdUYWJsZUlubmVyPEE+OjpmaW5kX2lubmVyOjpoYW\ -I1ZTZjYmZiOGJjZmNmNv8CQ2NvcmU6OmZtdDo6Rm9ybWF0dGVyOjpkZWJ1Z19zdHJ1Y3RfZmllbGQy\ -X2ZpbmlzaDo6aGQwZWJmZWM3NWVkNDVlM2SAAy5pZG5hOjp1dHM0Njo6Y2hlY2tfdmFsaWRpdHk6Om\ -hkYjliNzc5NzQyOGYyMzI1gQNCdW5pY29kZV9ub3JtYWxpemF0aW9uOjpwZXJmZWN0X2hhc2g6Om1w\ -aF9sb29rdXA6Omg1OTBhMzdmMzNhNGE3YzIzggMuYWxsb2M6OnJhd192ZWM6OmZpbmlzaF9ncm93Oj\ -poZWQ1ODliZDE5NTQzZWZiYoMDWzxjb3JlOjpzdHI6Oml0ZXI6OkNoYXJzIGFzIGNvcmU6Oml0ZXI6\ -OnRyYWl0czo6aXRlcmF0b3I6Okl0ZXJhdG9yPjo6bmV4dDo6aDI1Y2Y1MmY2Y2MyZTg0ZGWEA1lkZW\ -5vX2NhY2hlX2Rpcjo6bG9jYWw6Om1hbmlmZXN0OjpMb2NhbENhY2hlTWFuaWZlc3REYXRhOjphZGRf\ -ZGlyZWN0b3J5OjpoYjg0NjZhYjRmMzRkNjIwYoUDWzxjb3JlOjpzdHI6Oml0ZXI6OkNoYXJzIGFzIG\ -NvcmU6Oml0ZXI6OnRyYWl0czo6aXRlcmF0b3I6Okl0ZXJhdG9yPjo6bmV4dDo6aDI1Y2Y1MmY2Y2My\ -ZTg0ZGWGAzZzZXJkZV9qc29uOjpkZTo6UGFyc2VyTnVtYmVyOjp2aXNpdDo6aDk0Y2NhNDI3ZmU5NT\ -Q4ZmOHA0NzZXJkZV9qc29uOjpkZTo6RGVzZXJpYWxpemVyPFI+OjppZ25vcmVfZXhwb25lbnQ6Omg3\ -OGM2NjNkNDE2YjVhOTZkiANHb25jZV9jZWxsOjppbXA6Ok9uY2VDZWxsPFQ+Ojppbml0aWFsaXplOj\ -p7e2Nsb3N1cmV9fTo6aGM1ZTRhMjkwNzkzZjA1MmSJA0dvbmNlX2NlbGw6OmltcDo6T25jZUNlbGw8\ -VD46OmluaXRpYWxpemU6Ont7Y2xvc3VyZX19OjpoZTA2MWY1OTg5OWZlNmFmZIoDU2Rlbm9fY2FjaG\ -VfZGlyOjpnbG9iYWw6Okdsb2JhbEh0dHBDYWNoZTxFbnY+OjpnZXRfY2FjaGVfZmlsZXBhdGg6Omhk\ -NDRmNjZhMmY2MjZjMzY0iwNtPGRlbm9fY2FjaGVfZGlyOjp3YXNtOjpXYXNtRW52IGFzIGRlbm9fY2\ -FjaGVfZGlyOjpjb21tb246OkRlbm9DYWNoZUVudj46OmF0b21pY193cml0ZV9maWxlOjpoMjI4ZGQ5\ -NzliMmMwZWRmZYwDNmFsbG9jOjpyYXdfdmVjOjpSYXdWZWM8VCxBPjo6c2hyaW5rOjpoYjdlZmExMW\ -VlOGNmYmMzZY0DSHVybDo6cGFyc2VyOjpzdGFydHNfd2l0aF93aW5kb3dzX2RyaXZlX2xldHRlcl9z\ -ZWdtZW50OjpoODJkMDU3YmNhNzBjN2ZkZo4DKnN0ZDo6cGF0aDo6UGF0aDo6cGFyZW50OjpoZTYwMz\ -Q1MzJiYmExOTIxZI8DRnNlcmRlX2pzb246OmRlOjpEZXNlcmlhbGl6ZXI8Uj46OnBhcnNlX2xvbmdf\ -aW50ZWdlcjo6aGM3YjQ2Njg4OGQ1OWU2OTaQA0ZzZXJkZV9qc29uOjpkZTo6RGVzZXJpYWxpemVyPF\ -I+OjpwYXJzZV9sb25nX2ludGVnZXI6OmhhZDAyZjBjNzlmZTcxNDY5kQMpbG9nOjpfX3ByaXZhdGVf\ -YXBpX2xvZzo6aDI3MjJlZDQ5NTg3NTZmMjeSAzFjb3JlOjpzbGljZTo6c29ydDo6ZmluZF9zdHJlYW\ -s6OmhhMjRmMTNhZjViYmUxMzY5kwNDY29yZTo6Zm10OjpGb3JtYXR0ZXI6OmRlYnVnX3N0cnVjdF9m\ -aWVsZDFfZmluaXNoOjpoOTg5NTFmNGZjNTE5YjdiZZQDMWNvbXBpbGVyX2J1aWx0aW5zOjptZW06Om\ -1lbXNldDo6aDYzNjdmMzNiOGVmM2U4YTeVAzZzZXJkZTo6c2VyOjpTZXJpYWxpemVyOjpjb2xsZWN0\ -X21hcDo6aDg0ZWIyNmQzOWM0MWYzMzeWAzZzZXJkZTo6c2VyOjpTZXJpYWxpemVyOjpjb2xsZWN0X2\ -1hcDo6aDk1OTEzMmZkNDIyYmQzNTWXAzZzZXJkZTo6c2VyOjpTZXJpYWxpemVyOjpjb2xsZWN0X21h\ -cDo6aDk4MGM5ZWI5Mjg0YmVjYzGYA088c2VyZGVfanNvbjo6ZXJyb3I6OkVycm9yIGFzIHNlcmRlOj\ -pkZTo6RXJyb3I+OjppbnZhbGlkX3R5cGU6OmhlMWZlZDRiOWU3YTZkYTJhmQNDdXJsOjpwYXJzZXI6\ -OlBhcnNlcjo6cGFyc2VfY2Fubm90X2JlX2FfYmFzZV9wYXRoOjpoY2M0Y2ViZjIyNWI5ZGVhNZoDMm\ -NvcmU6OnN0cjo6PGltcGwgc3RyPjo6aXNfYXNjaWk6Omg4NTg3NGIyNzRiMThhOTM2mwNjPCZtdXQg\ -c2VyZGVfanNvbjo6c2VyOjpTZXJpYWxpemVyPFcsRj4gYXMgc2VyZGU6OnNlcjo6U2VyaWFsaXplcj\ -46OnNlcmlhbGl6ZV9tYXA6Omg5ZGMxMTY2YmMwYzFjOWU5nANNaGFzaGJyb3duOjpyYXc6OmlubmVy\ -OjpSYXdUYWJsZUlubmVyPEE+OjpuZXdfdW5pbml0aWFsaXplZDo6aGI5YjAxNDdjZmQ0ZTBlZGSdAw\ -91cmxfdG9fZmlsZW5hbWWeAxNnbG9iYWxodHRwY2FjaGVfc2V0nwMSbG9jYWxodHRwY2FjaGVfc2V0\ -oANWPHNlcmRlX2pzb246OnJlYWQ6OlNsaWNlUmVhZCBhcyBzZXJkZV9qc29uOjpyZWFkOjpSZWFkPj\ -o6aWdub3JlX3N0cjo6aDcwZjRjODQ0NTJmMmE4OTmhA1RzdGQ6OnN5czo6Y29tbW9uOjp0aHJlYWRf\ -bG9jYWw6Omxhenk6OkxhenlLZXlJbm5lcjxUPjo6aW5pdGlhbGl6ZTo6aGU2ZGYyM2I0Mzg5YmI1Zj\ -eiA0k8b25jZV9jZWxsOjppbXA6Okd1YXJkIGFzIGNvcmU6Om9wczo6ZHJvcDo6RHJvcD46OmRyb3A6\ -Omg1YjgxMDQ4ZTQxZWM5MDE1owNCc2VyZGVfanNvbjo6ZGU6OkRlc2VyaWFsaXplcjxSPjo6aWdub3\ -JlX2RlY2ltYWw6OmhiMTdkYzI5OTEwZWQ1ZGMzpAM6YWxsb2M6OnJhd192ZWM6OlJhd1ZlYzxULEE+\ -Ojpncm93X2V4YWN0OjpoM2YwZGI1YmEyYWE1ZjZiYaUDOmFsbG9jOjpyYXdfdmVjOjpSYXdWZWM8VC\ -xBPjo6Z3Jvd19leGFjdDo6aDRjYWIxNmY3YTIzYTEyMGamAzphbGxvYzo6cmF3X3ZlYzo6UmF3VmVj\ -PFQsQT46Omdyb3dfZXhhY3Q6Omg5MGUxZDUxNzc4YWFkMWRjpwNLaW5kZXhtYXA6Om1hcDo6Y29yZT\ -o6SW5kZXhNYXBDb3JlPEssVj46OnN3YXBfcmVtb3ZlX2Z1bGw6OmhjZDNhM2YzNjE2ZTQyY2VkqAM2\ -YWxsb2M6OnJhd192ZWM6OlJhd1ZlYzxULEE+OjpzaHJpbms6OmhlMWJjYWRkZjA2MmNkYWUxqQMldX\ -JsOjpVcmw6OnNldF9wYXRoOjpoNmMxOTBkYTU1NDYwZmYzNaoDNXN0ZDo6dGltZTo6U3lzdGVtVGlt\ -ZTo6Y2hlY2tlZF9hZGQ6OmgxNDI3MWFlZWY5NjIyZjBlqwNGaW5kZXhtYXA6Om1hcDo6Y29yZTo6SW\ -5kZXhNYXBDb3JlPEssVj46Omluc2VydF9mdWxsOjpoZTkxNmE3MGJjODNjODk4MKwDRmhhc2hicm93\ -bjo6cmF3OjpSYXdUYWJsZUlubmVyPEE+OjpuZXdfdW5pbml0aWFsaXplZDo6aGZjNzgwNWY0YWYwMz\ -A0MDStA148Y29yZTo6c3RyOjppdGVyOjpTcGxpdDxQPiBhcyBjb3JlOjppdGVyOjp0cmFpdHM6Oml0\ -ZXJhdG9yOjpJdGVyYXRvcj46Om5leHQ6OmgwYzM3ODBhYjAwZmU5MzYzrgMxY29yZTo6c2xpY2U6On\ -NvcnQ6OmZpbmRfc3RyZWFrOjpoYTE3N2VmZTgzYTJmZDI4Za8Da3NlcmRlOjpkZTo6aW1wbHM6Ojxp\ -bXBsIHNlcmRlOjpkZTo6RGVzZXJpYWxpemUgZm9yIGNvcmU6Om9wdGlvbjo6T3B0aW9uPFQ+Pjo6ZG\ -VzZXJpYWxpemU6Omg4OThiNzc4M2NmN2I4NmU1sANnc2VyZGU6OnNlcjo6aW1wbHM6OjxpbXBsIHNl\ -cmRlOjpzZXI6OlNlcmlhbGl6ZSBmb3Igc3RkOjp0aW1lOjpTeXN0ZW1UaW1lPjo6c2VyaWFsaXplOj\ -poZThjZjk5YzcxYjc5Nzk1MbEDXTxzZXJkZV93YXNtX2JpbmRnZW46OmRlOjpNYXBBY2Nlc3MgYXMg\ -c2VyZGU6OmRlOjpNYXBBY2Nlc3M+OjpuZXh0X2tleV9zZWVkOjpoMzVkN2QyYjY3ZDE1ZDFkM7IDLn\ -NtYWxsdmVjOjpTbWFsbFZlYzxBPjo6cHVzaDo6aDcwY2U1ZmJmYjdhMDAzOWKzA3A8YWxsb2M6OnZl\ -Yzo6VmVjPFQ+IGFzIGFsbG9jOjp2ZWM6OnNwZWNfZnJvbV9pdGVyX25lc3RlZDo6U3BlY0Zyb21JdG\ -VyTmVzdGVkPFQsST4+Ojpmcm9tX2l0ZXI6Omg5OGI0MmEzMTZiZWZkZjk5tAM8Y29yZTo6c3RyOjo8\ -aW1wbCBzdHI+Ojp0cmltX3N0YXJ0X21hdGNoZXM6Omg3NDk4NjcwMDlkNTIzMWY4tQNHPGNvcmU6On\ -RpbWU6OkR1cmF0aW9uIGFzIGNvcmU6Om9wczo6YXJpdGg6OlN1Yj46OnN1Yjo6aGFhNjYzODc1ZjVl\ -ZjhlMGa2A2ppbmRleG1hcDo6bWFwOjpjb3JlOjpyYXc6OjxpbXBsIGluZGV4bWFwOjptYXA6OmNvcm\ -U6OkluZGV4TWFwQ29yZTxLLFY+Pjo6ZmluZF9vcl9pbnNlcnQ6OmgwMTUzNGRiNzBkODU3NWUxtwNq\ -aW5kZXhtYXA6Om1hcDo6Y29yZTo6cmF3Ojo8aW1wbCBpbmRleG1hcDo6bWFwOjpjb3JlOjpJbmRleE\ -1hcENvcmU8SyxWPj46OmZpbmRfb3JfaW5zZXJ0OjpoYTE2MjAwMDkwYjMxNTg1YbgDamluZGV4bWFw\ -OjptYXA6OmNvcmU6OnJhdzo6PGltcGwgaW5kZXhtYXA6Om1hcDo6Y29yZTo6SW5kZXhNYXBDb3JlPE\ -ssVj4+OjpmaW5kX29yX2luc2VydDo6aGM0YTg5YWNhMWY3MGExNze5A0VwZXJjZW50X2VuY29kaW5n\ -OjpQZXJjZW50RGVjb2RlOjpkZWNvZGVfdXRmOF9sb3NzeTo6aGQ3ZTg0ZjAzNTY5NjAxYmW6A148c3\ -RkOjp0aW1lOjpTeXN0ZW1UaW1lIGFzIGNvcmU6Om9wczo6YXJpdGg6OkFkZDxjb3JlOjp0aW1lOjpE\ -dXJhdGlvbj4+OjphZGQ6Omg2MWFmMjU0MThjN2UxMDJhuwNFaW5kZXhtYXA6Om1hcDo6Y29yZTo6SW\ -5kZXhNYXBDb3JlPEssVj46OnB1c2hfZW50cnk6Omg3NzlhYzYzOTE0ODVhOGJhvAM+YWxsb2M6OnJh\ -d192ZWM6OlJhd1ZlYzxULEE+Ojpncm93X2Ftb3J0aXplZDo6aDFmNjQyZTI3ZjJmMWI2MTm9A0lwYX\ -JraW5nX2xvdDo6cmF3X3J3bG9jazo6UmF3UndMb2NrOjp1bmxvY2tfc2hhcmVkX3Nsb3c6OmhhZmY1\ -MjgwYmFmZjUyYmRkvgM2YWxsb2M6OnJhd192ZWM6OlJhd1ZlYzxULEE+OjpzaHJpbms6OmhhNGMxN2\ -Y1NzUxMzkwYzNhvwM1cmluZzo6ZGlnZXN0OjpCbG9ja0NvbnRleHQ6OnVwZGF0ZTo6aDIzMDUzOThh\ -MzM2YWMxMGLAAzV0aW55dmVjOjp0aW55dmVjOjpUaW55VmVjPEE+OjpwdXNoOjpoMzVmYmU5ZGFhOT\ -JiNTc0M8EDRWluZGV4bWFwOjptYXA6OmNvcmU6OkluZGV4TWFwQ29yZTxLLFY+OjpwdXNoX2VudHJ5\ -OjpoNjg2NDk5YjU4NDg0Mzc1OcIDOmNvcmU6OmZtdDo6YnVpbGRlcnM6OkRlYnVnVHVwbGU6OmZpbm\ -lzaDo6aGRlOTExOTNhNDVjNjFkM2bDAz9zZXJkZV9qc29uOjpkZTo6RGVzZXJpYWxpemVyPFI+Ojpw\ -YXJzZV9pZGVudDo6aDcwMWI2OGRlZmEwNjQ5MWbEAztzZXJkZV9qc29uOjpkZTo6RGVzZXJpYWxpem\ -VyPFI+OjplbmRfbWFwOjpoZDQ3M2VkZTFkZDJhZDFjNcUDO3NlcmRlX2pzb246OmRlOjpEZXNlcmlh\ -bGl6ZXI8Uj46OmVuZF9tYXA6OmgzMjNhMDRlOGIwNzQzYjdkxgM+YWxsb2M6OnJhd192ZWM6OlJhd1\ -ZlYzxULEE+Ojpncm93X2Ftb3J0aXplZDo6aDIyNDJmMzk0MTE2ZjE5OTHHAzB1cmw6OnBhcnNlcjo6\ -SW5wdXQ6Om5leHRfdXRmODo6aGRjYzQ1MzE1NDA4OTVlNmLIAyN1cmw6OlVybDo6bXV0YXRlOjpoZj\ -cyY2NmYjUxZGFiODQyOckDMWNvcmU6OnNsaWNlOjpzb3J0OjppbnNlcnRfdGFpbDo6aDZhZDI3OGI2\ -ZGUwM2IxYWHKA0tzZXJkZV9qc29uOjpkZTo6RGVzZXJpYWxpemVyPFI+OjpwYXJzZV9leHBvbmVudF\ -9vdmVyZmxvdzo6aDFhOTE0ODc2MzdmNjk2M2LLAzRkZW5vX2NhY2hlX2Rpcjo6d2FzbTo6YXNfanNf\ -ZXJyb3I6Omg0OThjMWYwM2I0MzAyODUwzAOkAWRlbm9fY2FjaGVfZGlyOjpsb2NhbDo6bWFuaWZlc3\ -Q6Ol86OjxpbXBsIHNlcmRlOjpzZXI6OlNlcmlhbGl6ZSBmb3IgZGVub19jYWNoZV9kaXI6OmxvY2Fs\ -OjptYW5pZmVzdDo6U2VyaWFsaXplZExvY2FsQ2FjaGVNYW5pZmVzdERhdGE+OjpzZXJpYWxpemU6Om\ -gzNDNkZDUxNWI4YzFhMTM3zQNLc2VyZGVfanNvbjo6ZGU6OkRlc2VyaWFsaXplcjxSPjo6cGFyc2Vf\ -ZXhwb25lbnRfb3ZlcmZsb3c6Omg5YmZjY2RlMThjMmYyM2ZmzgMsdXJsOjpVcmw6OnRha2VfYWZ0ZX\ -JfcGF0aDo6aDlhZDA2ZjY5Mjg0ZTg5YTbPA0V1bmljb2RlX2JpZGk6OmNoYXJfZGF0YTo6YnNlYXJj\ -aF9yYW5nZV92YWx1ZV90YWJsZTo6aGI5MTA0NjdlMDk1NWJlMGTQA0JzZXJkZV9qc29uOjpkZTo6RG\ -VzZXJpYWxpemVyPFI+OjppZ25vcmVfZGVjaW1hbDo6aGIxODdjZDkxOGRjOTkzYzHRA19kZW5vX2Nh\ -Y2hlX2Rpcjo6Y2FjaGU6OlNlcmlhbGl6ZWRDYWNoZWRVcmxNZXRhZGF0YTo6aW50b19jYWNoZWRfdX\ -JsX21ldGFkYXRhOjpoMGU4Yzk1MDEyYjg5ZDA1MdIDU2Rlbm9fY2FjaGVfZGlyOjpsb2NhbDo6bWFu\ -aWZlc3Q6OkxvY2FsQ2FjaGVNYW5pZmVzdERhdGE6OmFzX2pzb246OmgwZTQ5ZWY1MzcwODU5MWI30w\ -MvdXJsOjpwYXJzZXI6OklucHV0Ojp3aXRoX2xvZzo6aGY1M2FlMzRkNmI3M2EwODjUAzFjb3JlOjpz\ -bGljZTo6c29ydDo6aW5zZXJ0X3RhaWw6OmgyNDRmMTNlZDlhZmViMzI01QM5YWxsb2M6OnZlYzo6Vm\ -VjPFQsQT46OmV4dGVuZF9kZXN1Z2FyZWQ6OmgwN2VlOTM2OTVlNmFjYzFi1gNJPHNlcmRlX2pzb246\ -OmVycm9yOjpFcnJvciBhcyBzZXJkZTo6ZGU6OkVycm9yPjo6Y3VzdG9tOjpoZGQ1Nzk4MWY0MWFkY2\ -NjN9cDejxjb3JlOjpzdHI6OnBhdHRlcm46OkNoYXJQcmVkaWNhdGVTZWFyY2hlcjxGPiBhcyBjb3Jl\ -OjpzdHI6OnBhdHRlcm46OlJldmVyc2VTZWFyY2hlcj46Om5leHRfcmVqZWN0X2JhY2s6Omg4YTY4Nz\ -dlZDgwZDM2OTdk2ANuPGNvcmU6OnN0cjo6cGF0dGVybjo6Q2hhclByZWRpY2F0ZVNlYXJjaGVyPEY+\ -IGFzIGNvcmU6OnN0cjo6cGF0dGVybjo6U2VhcmNoZXI+OjpuZXh0X3JlamVjdDo6aDkwZWJiODZhM2\ -UzN2NiMTXZA0pjb3JlOjpmbXQ6Om51bTo6PGltcGwgY29yZTo6Zm10OjpMb3dlckhleCBmb3IgaTE2\ -Pjo6Zm10OjpoOWI1YzYzM2ZkM2ZjMjA5MdoDSWNvcmU6OmZtdDo6bnVtOjo8aW1wbCBjb3JlOjpmbX\ -Q6OlVwcGVySGV4IGZvciBpOD46OmZtdDo6aGU5NThkNTAwNzc5MDkyZjjbA0ljb3JlOjpmbXQ6Om51\ -bTo6PGltcGwgY29yZTo6Zm10OjpMb3dlckhleCBmb3IgaTg+OjpmbXQ6OmhmNDFmZmJiYzQzNzM5NW\ -U23ANGaGFzaGJyb3duOjpyYXc6OmlubmVyOjpSYXdUYWJsZTxULEE+OjplcmFzZV9ub19kcm9wOjpo\ -MjYxNDc2YzY1ZTczMTgxZd0DO2Rlbm9fY2FjaGVfZGlyOjpsb2NhbDo6dXJsX3BhdGhfc2VnbWVudH\ -M6OmhhYjAyMTRlNzdkODgyNzll3gM2Y29yZTo6c3RyOjo8aW1wbCBzdHI+Ojp0cmltX21hdGNoZXM6\ -Omg3YzZiNmFlNzMzMDY4YTAy3wNKY29yZTo6Zm10OjpudW06OjxpbXBsIGNvcmU6OmZtdDo6TG93ZX\ -JIZXggZm9yIGkzMj46OmZtdDo6aGM2ZjAyM2ZkODExYjYwMmbgA0pjb3JlOjpmbXQ6Om51bTo6PGlt\ -cGwgY29yZTo6Zm10OjpVcHBlckhleCBmb3IgaTMyPjo6Zm10OjpoNWQzNjhhM2U1ZmY1NDk2NOEDLX\ -NlcmRlX2pzb246OmRlOjpmcm9tX3RyYWl0OjpoN2ViMGIyOTJkOGY4OWIwNeIDQXNlcmRlX3dhc21f\ -YmluZGdlbjo6ZGU6OkRlc2VyaWFsaXplcjo6YXNfYnl0ZXM6Omg1YjVlMjQxOWVlODZiMmEx4wM1c2\ -1hbGx2ZWM6OlNtYWxsVmVjPEE+Ojp0cnlfcmVzZXJ2ZTo6aGVjODE5MTVkZWNmNTU2ODDkA0I8RiBh\ -cyBjb3JlOjpzdHI6OnBhdHRlcm46Ok11bHRpQ2hhckVxPjo6bWF0Y2hlczo6aGVmMmU2Nzc4OWE1Zm\ -MxOWHlAzZhbGxvYzo6cmF3X3ZlYzo6UmF3VmVjPFQsQT46OnNocmluazo6aDdhZGZhZmM0ODk4YTIw\ -ODLmAzZhbGxvYzo6cmF3X3ZlYzo6UmF3VmVjPFQsQT46OnNocmluazo6aDg0MjNmZWI5ODk5ZjQ1Yj\ -fnAzZ1cmw6OnBhcnNlcjo6UGFyc2VyOjpwYXJzZV9mcmFnbWVudDo6aDg1MWEyMTNlZjRkZjllMWXo\ -A2g8Y29yZTo6aXRlcjo6YWRhcHRlcnM6Om1hcDo6TWFwPEksRj4gYXMgY29yZTo6aXRlcjo6dHJhaX\ -RzOjppdGVyYXRvcjo6SXRlcmF0b3I+Ojpmb2xkOjpoYjIzZDRlY2U0OWI5ZjcxM+kDLXNlcmRlX2pz\ -b246OmRlOjpmcm9tX3RyYWl0OjpoYWEwOTZlOWQyOTMxNjRjNeoDazxoYXNoYnJvd246Om1hcDo6SG\ -FzaE1hcDxLLFYsUyxBPiBhcyBjb3JlOjppdGVyOjp0cmFpdHM6OmNvbGxlY3Q6OkV4dGVuZDwoSyxW\ -KT4+OjpleHRlbmQ6OmhlYWMwYzViYzk5MDIxODM06wNpc2VyZGU6OmRlOjppbXBsczo6PGltcGwgc2\ -VyZGU6OmRlOjpEZXNlcmlhbGl6ZSBmb3Igc3RkOjp0aW1lOjpTeXN0ZW1UaW1lPjo6ZGVzZXJpYWxp\ -emU6OmhkZGIzOGZlNWFhNTY2Yjkx7AM6Y29yZTo6c3RyOjo8aW1wbCBzdHI+Ojp0cmltX2VuZF9tYX\ -RjaGVzOjpoY2E4NTE5MWQ1NjA4ZmIyNe0DN3BlcmNlbnRfZW5jb2Rpbmc6OmFmdGVyX3BlcmNlbnRf\ -c2lnbjo6aDRhOTE1NGM5MGM2ODRkZTbuAzNzdGQ6OnBhdGg6OlBhdGg6Ol93aXRoX2V4dGVuc2lvbj\ -o6aGM0ZmEyMWFjNTVmZTlmNznvA0NzdGQ6OnBhbmlja2luZzo6YmVnaW5fcGFuaWNfaGFuZGxlcjo6\ -e3tjbG9zdXJlfX06OmgwZDE2OWZhMjk3NDExZDZk8AM7aGFzaGJyb3duOjptYXA6Okhhc2hNYXA8Sy\ -xWLFMsQT46Omluc2VydDo6aGFlNzU4MDgyMTJiY2I2ZGLxAxpnbG9iYWxodHRwY2FjaGVfZ2V0SGVh\ -ZGVyc/IDG2dsb2JhbGh0dHBjYWNoZV9nZXRGaWxlVGV4dPMDGWxvY2FsaHR0cGNhY2hlX2dldEhlYW\ -RlcnP0Axpsb2NhbGh0dHBjYWNoZV9nZXRGaWxlVGV4dPUDNXRpbnl2ZWM6OnRpbnl2ZWM6OlRpbnlW\ -ZWM8QT46OnB1c2g6OmhiNzE3Y2MwMDg3ZjJmYTE59gNhPHN0ZDo6Y29sbGVjdGlvbnM6Omhhc2g6On\ -NldDo6SGFzaFNldDxUPiBhcyBjb3JlOjpjb252ZXJ0OjpGcm9tPFtUOyBOXT4+Ojpmcm9tOjpoNGVj\ -OWNkMDBjMDM4ZmFiN/cDYTxzdGQ6OmNvbGxlY3Rpb25zOjpoYXNoOjpzZXQ6Okhhc2hTZXQ8VD4gYX\ -MgY29yZTo6Y29udmVydDo6RnJvbTxbVDsgTl0+Pjo6ZnJvbTo6aGVmYzMwMDY3MzUzNzA5MzH4A388\ -c3RkOjpjb2xsZWN0aW9uczo6aGFzaDo6bWFwOjpIYXNoTWFwPEssVixTPiBhcyBjb3JlOjppdGVyOj\ -p0cmFpdHM6OmNvbGxlY3Q6OkZyb21JdGVyYXRvcjwoSyxWKT4+Ojpmcm9tX2l0ZXI6OmhiYWQ4Njll\ -ODdiNDdlMTMz+QM8c2VyZGU6OnNlcjo6U2VyaWFsaXplTWFwOjpzZXJpYWxpemVfZW50cnk6OmhkYm\ -UyMTQ5NjA5MDEzZjQx+gNLaGFzaGJyb3duOjpyYXc6OmlubmVyOjpUYWJsZUxheW91dDo6Y2FsY3Vs\ -YXRlX2xheW91dF9mb3I6Omg5YjIxN2EwNWZhMTEzMGQz+wNMaGFzaGJyb3duOjpyYXc6OmlubmVyOj\ -pSYXdUYWJsZUlubmVyPEE+OjpmaW5kX2luc2VydF9zbG90OjpoNWRjZjA4NTMwNGRkMDE3NvwDP3Nl\ -cmRlX2pzb246OmRlOjpEZXNlcmlhbGl6ZXI8Uj46OnBhcnNlX2lkZW50OjpoMTdjOWVhNWJlNzc3OT\ -QzYv0DO2FsbG9jOjpyYXdfdmVjOjpSYXdWZWM8VCxBPjo6YWxsb2NhdGVfaW46OmgxNTU0ZjExM2Vk\ -MmQzNTVk/gNfPGFsbG9jOjpzdHJpbmc6OlN0cmluZyBhcyBjb3JlOjppdGVyOjp0cmFpdHM6OmNvbG\ -xlY3Q6OkV4dGVuZDxjaGFyPj46OmV4dGVuZDo6aDQ2MjcxMzFlYWVjOWI2ZTP/AzthbGxvYzo6cmF3\ -X3ZlYzo6UmF3VmVjPFQsQT46OmFsbG9jYXRlX2luOjpoYTNkZTkxNDBkYzE2NDliNIAEfzxzdGQ6Om\ -NvbGxlY3Rpb25zOjpoYXNoOjptYXA6Okhhc2hNYXA8SyxWLFM+IGFzIGNvcmU6Oml0ZXI6OnRyYWl0\ -czo6Y29sbGVjdDo6RnJvbUl0ZXJhdG9yPChLLFYpPj46OmZyb21faXRlcjo6aDYxYzJjMTEzNTIxNm\ -EwNGaBBDB1cmw6OnBhcnNlcjo6UGFyc2VyOjpwb3BfcGF0aDo6aGIwNGYxNDk2MTYyYzNlM2GCBFs8\ -aWRuYTo6cHVueWNvZGU6OkRlY29kZSBhcyBjb3JlOjppdGVyOjp0cmFpdHM6Oml0ZXJhdG9yOjpJdG\ -VyYXRvcj46Om5leHQ6OmgzYmM3ZGE5NWM5ZGNlNzFmgwQ7YWxsb2M6OnJhd192ZWM6OlJhd1ZlYzxU\ -LEE+OjphbGxvY2F0ZV9pbjo6aDJmMDQzMmRmZmUxMTM0ZTGEBDthbGxvYzo6cmF3X3ZlYzo6UmF3Vm\ -VjPFQsQT46OmFsbG9jYXRlX2luOjpoZmRjY2E4ODM5MmI3OGYyMYUEYzxzdGQ6OnBhbmlja2luZzo6\ -YmVnaW5fcGFuaWNfaGFuZGxlcjo6UGFuaWNQYXlsb2FkIGFzIGNvcmU6OnBhbmljOjpCb3hNZVVwPj\ -o6Z2V0OjpoMmVlZDk0ZDI2NDY2MDNjOYYERGhhc2hicm93bjo6cmF3OjpSYXdUYWJsZUlubmVyPEE+\ -OjphbGxvY2F0aW9uX2luZm86Omg2ODg4ODY2ODhmMzY2MjA4hwQ8c2VyZGU6OnNlcjo6U2VyaWFsaX\ -plTWFwOjpzZXJpYWxpemVfZW50cnk6Omg1NWFlMzBhZjMwZjZlMDdmiAQ8c2VyZGU6OnNlcjo6U2Vy\ -aWFsaXplTWFwOjpzZXJpYWxpemVfZW50cnk6Omg4MjQ3OGJiNjAzNDc0NjNkiQQ6aGFzaGJyb3duOj\ -pyYXc6OlJhd1RhYmxlSW5uZXI8QT46OmVyYXNlOjpoZjNiZWE5ZjE4M2U3NzFhN4oETDxzZXJkZV9q\ -c29uOjplcnJvcjo6RXJyb3JJbXBsIGFzIGNvcmU6OmZtdDo6RGlzcGxheT46OmZtdDo6aDkzMzE5Zm\ -QyMGM3ODQ2MTKLBFR1bmljb2RlX25vcm1hbGl6YXRpb246OmRlY29tcG9zZTo6RGVjb21wb3NpdGlv\ -bnM8ST46OnNvcnRfcGVuZGluZzo6aGFmNDFlMDkxZWNlNDc4YWWMBFR1bmljb2RlX25vcm1hbGl6YX\ -Rpb246OmRlY29tcG9zZTo6RGVjb21wb3NpdGlvbnM8ST46OnNvcnRfcGVuZGluZzo6aGIxOTVjZWE3\ -NTlhMGY5ZTiNBEJ1bmljb2RlX25vcm1hbGl6YXRpb246OnBlcmZlY3RfaGFzaDo6bXBoX2xvb2t1cD\ -o6aGE3ZjQxNTEwNDExMzgyMzKOBDtoYXNoYnJvd246Om1hcDo6SGFzaE1hcDxLLFYsUyxBPjo6aW5z\ -ZXJ0OjpoY2VkODc1MmViM2NkYTZkYY8EJWFsbG9jOjpmbXQ6OmZvcm1hdDo6aGY5NzhmMWVjMzdjOT\ -JkMDmQBHE8Y29yZTo6aXRlcjo6YWRhcHRlcnM6OmNoYWluOjpDaGFpbjxBLEI+IGFzIGNvcmU6Oml0\ -ZXI6OnRyYWl0czo6aXRlcmF0b3I6Okl0ZXJhdG9yPjo6c2l6ZV9oaW50OjpoNjg3NGNlYmJhMGM0OD\ -Y3MZEEaDxzZXJkZV93YXNtX2JpbmRnZW46OmRlOjpEZXNlcmlhbGl6ZXIgYXMgc2VyZGU6OmRlOjpE\ -ZXNlcmlhbGl6ZXI+OjpkZXNlcmlhbGl6ZV9zdHJpbmc6OmgzNmM5MzJiYzhkNzRiM2EzkgQ6Y29yZT\ -o6c2xpY2U6OnNvcnQ6OnByb3ZpZGVfc29ydGVkX2JhdGNoOjpoM2FiYjI0MjUxMTM5NWFmZZMEOmNv\ -cmU6OnNsaWNlOjpzb3J0Ojpwcm92aWRlX3NvcnRlZF9iYXRjaDo6aDE5NGE1ZWRmMzQ0MzEyMjmUBE\ -08c3RkOjppbzo6ZXJyb3I6OkVycm9yIGFzIGNvcmU6OmVycm9yOjpFcnJvcj46OmRlc2NyaXB0aW9u\ -OjpoZDkyMDExZDBlZmE1ZjVhY5UEMDwmVCBhcyBjb3JlOjpmbXQ6OkRlYnVnPjo6Zm10OjpoNGI4Nz\ -BhODQzZWVhNDc5ZpYEZWRlbm9fY2FjaGVfZGlyOjpsb2NhbDo6TG9jYWxIdHRwQ2FjaGU8RW52Pjo6\ -Z2V0X3VybF9tZXRhZGF0YV9jaGVja2luZ19nbG9iYWxfY2FjaGU6Omg1NDQ0MGM3MWVhMjNhZjdllw\ -REaGFzaGJyb3duOjpyYXc6OlRhYmxlTGF5b3V0OjpjYWxjdWxhdGVfbGF5b3V0X2Zvcjo6aDhmMTcw\ -ZjM1ZTBhY2MyOTiYBCdzbWFsbHZlYzo6ZGVhbGxvY2F0ZTo6aGJlZTUxODczMGQ4NWEzMDKZBCpqc1\ -9zeXM6Okl0ZXJTdGF0ZTo6bmV4dDo6aGZhNjAwMTM2ZmZkMDdkYmWaBCl1cmw6OlVybDo6c2V0X2Zy\ -YWdtZW50OjpoMTE1MGE3NDk3ZTAxMGFlZpsEKnVybDo6VXJsOjp0YWtlX2ZyYWdtZW50OjpoZWYxZD\ -Y0ZGQ4MTMwN2FiYZwES3Rpbnl2ZWM6OmFycmF5dmVjOjpBcnJheVZlYzxBPjo6ZHJhaW5fdG9fdmVj\ -X2FuZF9yZXNlcnZlOjpoOWEwMWIxYmRiYTNmZDNhYZ0ES3Rpbnl2ZWM6OmFycmF5dmVjOjpBcnJheV\ -ZlYzxBPjo6ZHJhaW5fdG9fdmVjX2FuZF9yZXNlcnZlOjpoMDA4OWM0ODM0ZWU0OTRlY54ELGlkbmE6\ -OnV0czQ2OjpkZWNvZGVfc2xpY2U6OmhlOGRjNDI2ZThlNDkyMjUwnwQ5YWxsb2M6OnZlYzo6VmVjPF\ -QsQT46OmV4dGVuZF9kZXN1Z2FyZWQ6OmhiNDkzN2M5NWIwMmIxZDQyoAQtc3RkOjpwYXRoOjpQYXRo\ -OjpmaWxlX25hbWU6OmgzYjA2Njk3OWVkNzgzNmE5oQRAYWxsb2M6OnN5bmM6OmFyY2lubmVyX2xheW\ -91dF9mb3JfdmFsdWVfbGF5b3V0OjpoMzBiMTI5NWY2OTRiYmFiN6IENGNvcmU6Omhhc2g6OkJ1aWxk\ -SGFzaGVyOjpoYXNoX29uZTo6aDA3ZGI0YzRkNjcwNDYwMzKjBHhjb3JlOjpzdHI6OnRyYWl0czo6PG\ -ltcGwgY29yZTo6c2xpY2U6OmluZGV4OjpTbGljZUluZGV4PHN0cj4gZm9yIGNvcmU6Om9wczo6cmFu\ -Z2U6OlJhbmdlPHVzaXplPj46OmdldDo6aDEzNjBmYjA3NjQ5M2NmYTKkBEFzZXJkZV9qc29uOjpyZW\ -FkOjpTbGljZVJlYWQ6OnBvc2l0aW9uX29mX2luZGV4OjpoYmRiYTkxZjBmYjkzNWRhMKUEQzx3YXNt\ -X2JpbmRnZW46OkpzVmFsdWUgYXMgY29yZTo6Zm10OjpEZWJ1Zz46OmZtdDo6aDg5NTBlNjQwODZjMj\ -Q2Y2GmBHhjb3JlOjpzdHI6OnRyYWl0czo6PGltcGwgY29yZTo6c2xpY2U6OmluZGV4OjpTbGljZUlu\ -ZGV4PHN0cj4gZm9yIGNvcmU6Om9wczo6cmFuZ2U6OlJhbmdlPHVzaXplPj46OmdldDo6aDEzNjBmYj\ -A3NjQ5M2NmYTKnBHE8Y29yZTo6aXRlcjo6YWRhcHRlcnM6OmNoYWluOjpDaGFpbjxBLEI+IGFzIGNv\ -cmU6Oml0ZXI6OnRyYWl0czo6aXRlcmF0b3I6Okl0ZXJhdG9yPjo6c2l6ZV9oaW50OjpoMzJkZWU5MG\ -EyZGFkMzEwMKgENnNlcmRlX2pzb246OmRlOjpQYXJzZXJOdW1iZXI6OnZpc2l0OjpoZGZhM2M3ZGJl\ -ODIzNjc3OKkEQGNvcmU6Oml0ZXI6OnRyYWl0czo6aXRlcmF0b3I6Okl0ZXJhdG9yOjplcV9ieTo6aD\ -I5NGY5MWJiYTFmMmY3ZmSqBIsBZGVub19jYWNoZV9kaXI6OmNhY2hlOjpfOjo8aW1wbCBzZXJkZTo6\ -c2VyOjpTZXJpYWxpemUgZm9yIGRlbm9fY2FjaGVfZGlyOjpjYWNoZTo6U2VyaWFsaXplZENhY2hlZF\ -VybE1ldGFkYXRhPjo6c2VyaWFsaXplOjpoYTg5ODFmYWY4NmRlZWRjZKsETWRlbm9fY2FjaGVfZGly\ -Ojpsb2NhbDo6TG9jYWxDYWNoZVN1YlBhdGg6OmFzX3JlbGF0aXZlX3BhdGg6OmgyNDQ4ZjUxOTdkMG\ -MxNGE0rAQyc2VyZGVfanNvbjo6cmVhZDo6aWdub3JlX2VzY2FwZTo6aGUwY2RhOTM1NmU2ZDA3ODSt\ -BD1hbGxvYzo6c3RyOjo8aW1wbCBzdHI+Ojp0b19hc2NpaV9sb3dlcmNhc2U6Omg5MWY0N2I3ODdkMD\ -RmNTQ2rgRRdW5pY29kZV9ub3JtYWxpemF0aW9uOjpsb29rdXBzOjpjb21wYXRpYmlsaXR5X2Z1bGx5\ -X2RlY29tcG9zZWQ6Omg1MmVmNzBkNWZhYzg5NjVhrwRNdW5pY29kZV9ub3JtYWxpemF0aW9uOjpsb2\ -9rdXBzOjpjYW5vbmljYWxfZnVsbHlfZGVjb21wb3NlZDo6aDE0M2U0MWMyMmNiOWJkMWawBGdhbnlo\ -b3c6OmNoYWluOjo8aW1wbCBjb3JlOjppdGVyOjp0cmFpdHM6Oml0ZXJhdG9yOjpJdGVyYXRvciBmb3\ -IgYW55aG93OjpDaGFpbj46Om5leHQ6OmhlMGE4ZWMwODNkOGVmMWQ0sQQtY29yZTo6aGFzaDo6c2lw\ -Ojp1OHRvNjRfbGU6OmhmNDQ2NjhmNGM3NmE2NmEwsgQ4aGFzaGJyb3duOjpyYXc6OlJhd1RhYmxlPF\ -QsQT46Omluc2VydDo6aDVlZjA1NGZmZmJhMjc5ZjWzBBJsb2NhbGh0dHBjYWNoZV9uZXe0BC1jb3Jl\ -OjpoYXNoOjpzaXA6OnU4dG82NF9sZTo6aGY0NDY2OGY0Yzc2YTY2YTC1BClkYXRhX3VybDo6bWltZT\ -o6c3BsaXQyOjpoZjgwMjg0M2IxODY2NmE5Y7YERHNlcmRlX2pzb246OmRlOjpEZXNlcmlhbGl6ZXI8\ -Uj46OnBhcnNlX3doaXRlc3BhY2U6OmhkNmFmM2E3Mzg3NTAzZGFltwRGc2VyZGVfanNvbjo6ZGU6Ok\ -Rlc2VyaWFsaXplcjxSPjo6cGFyc2Vfb2JqZWN0X2NvbG9uOjpoN2Q1NmZkOGI3ZTI0ZTZlNLgEM3Nl\ -cmRlOjpkZTo6RXJyb3I6OmludmFsaWRfbGVuZ3RoOjpoOGI5NmRkMDYyNjIxZjczMLkERWhhc2hicm\ -93bjo6cmF3OjpSYXdUYWJsZUlubmVyPEE+OjpmaW5kX2luc2VydF9zbG90OjpoM2Q3NjMzYTI4MjYy\ -MTcyMboERHNlcmRlX2pzb246OmRlOjpEZXNlcmlhbGl6ZXI8Uj46OnBhcnNlX3doaXRlc3BhY2U6Om\ -g3NTY5NjJiN2NhM2ExYWU3uwRGc2VyZGVfanNvbjo6ZGU6OkRlc2VyaWFsaXplcjxSPjo6cGFyc2Vf\ -b2JqZWN0X2NvbG9uOjpoNzg4NmNlNTI4NDhhZjY3M7wEPGNvcmU6OnN0cjo6PGltcGwgc3RyPjo6dH\ -JpbV9zdGFydF9tYXRjaGVzOjpoOWE0M2EyOTUyZGJlOTM4Zb0EIXVybDo6VXJsOjpwYXRoOjpoMjQ4\ -MzYzNDFjZmEzNTQ3Y74ELWFsbG9jOjpzdHJpbmc6OlN0cmluZzo6cG9wOjpoNDEwNzZkMTU4ZDc2MT\ -BlY78ERzx1cmw6OnBhcnNlcjo6UGFyc2VFcnJvciBhcyBjb3JlOjpmbXQ6OkRpc3BsYXk+OjpmbXQ6\ -OmhlMWQ1MTA5NGM2OTk0NTc1wARDcGFya2luZ19sb3RfY29yZTo6d29yZF9sb2NrOjpXb3JkTG9jaz\ -o6bG9ja19zbG93OjpoOGE4MGFkOWZjM2M3NzFmY8EEV2NvcmU6OnNsaWNlOjpzb3J0OjptZXJnZV9z\ -b3J0OjpSdW5WZWM8UnVuQWxsb2NGLFJ1bkRlYWxsb2NGPjo6cmVtb3ZlOjpoNWZhOTE3ZmMxYzBiYj\ -FmNMIELmNvcmU6OnJlc3VsdDo6dW53cmFwX2ZhaWxlZDo6aDczODA5Y2MwNWE3ODZlNDjDBEpzZXJk\ -ZV9qc29uOjpkZTo6RGVzZXJpYWxpemVyPFI+OjpwYXJzZV9kZWNpbWFsX292ZXJmbG93OjpoN2NmMG\ -IxYzlkNjg5ZjJiMsQEqgFkZW5vX2NhY2hlX2Rpcjo6bG9jYWw6Om1hbmlmZXN0OjpfOjo8aW1wbCBz\ -ZXJkZTo6c2VyOjpTZXJpYWxpemUgZm9yIGRlbm9fY2FjaGVfZGlyOjpsb2NhbDo6bWFuaWZlc3Q6Ol\ -NlcmlhbGl6ZWRMb2NhbENhY2hlTWFuaWZlc3REYXRhTW9kdWxlPjo6c2VyaWFsaXplOjpoODk0NTlj\ -ODgyOTU4ZDlkZMUEQ2hhc2hicm93bjo6cmF3OjpSYXdUYWJsZUlubmVyPEE+OjpwcmVwYXJlX3Jlc2\ -l6ZTo6aDgwOGJiYWU0MzEwMTUwZDbGBEpzZXJkZV9qc29uOjpkZTo6RGVzZXJpYWxpemVyPFI+Ojpw\ -YXJzZV9kZWNpbWFsX292ZXJmbG93OjpoNGFmNzU0NmE0NDk2MDU3YscEVWNvcmU6OnNsaWNlOjpzb3\ -J0OjptZXJnZV9zb3J0OjpSdW5WZWM8UnVuQWxsb2NGLFJ1bkRlYWxsb2NGPjo6cHVzaDo6aDYwZDE2\ -MWE1MTA4NDJiMDHIBAhfX211bHRpM8kEczxpbmRleG1hcDo6bWFwOjpJbmRleE1hcDxLLFYxLFMxPi\ -BhcyBjb3JlOjpjbXA6OlBhcnRpYWxFcTxpbmRleG1hcDo6bWFwOjpJbmRleE1hcDxLLFYyLFMyPj4+\ -OjplcTo6aDUwNDRlMTViOGEwMDdlYmHKBD9oYXNoYnJvd246OnJhdzo6UmF3VGFibGU8VCxBPjo6ZH\ -JvcF9lbGVtZW50czo6aGFkMmU3Yjg2Y2FjZjc2NGTLBD9oYXNoYnJvd246OnJhdzo6UmF3VGFibGU8\ -VCxBPjo6ZHJvcF9lbGVtZW50czo6aDFkMGU0NDU3YzZmODM0NTDMBEFoYXNoYnJvd246Om1hcDo6SG\ -FzaE1hcDxLLFYsUyxBPjo6Y29udGFpbnNfa2V5OjpoN2I1MzNmNzg4NjI0MDFjZM0EO2FsbG9jOjpy\ -YXdfdmVjOjpSYXdWZWM8VCxBPjo6YWxsb2NhdGVfaW46OmhmMmQ1ODM2ZTY3ZDkzYTg4zgQidXJsOj\ -pVcmw6OnF1ZXJ5OjpoZjZkNDQwYTM2ZWY2YTAxZc8EL3VybDo6VXJsOjpyZXN0b3JlX2FmdGVyX3Bh\ -dGg6Omg3ZTNjNjcwNTc0MjM4ZmNl0AQ8dXJsOjpVcmw6OnJlc3RvcmVfYWxyZWFkeV9wYXJzZWRfZn\ -JhZ21lbnQ6OmgyMjMxYWExMWYyNWJmMTE10QRSZGVub19jYWNoZV9kaXI6OmxvY2FsOjptYW5pZmVz\ -dDo6TG9jYWxDYWNoZU1hbmlmZXN0RGF0YTo6cmVtb3ZlOjpoZTIwNDljNjI1MGZiOTkxM9IEO2FsbG\ -9jOjpyYXdfdmVjOjpSYXdWZWM8VCxBPjo6YWxsb2NhdGVfaW46OmhiMjExODcyMDYzYzA3NzU00wQ7\ -YWxsb2M6OnJhd192ZWM6OlJhd1ZlYzxULEE+OjphbGxvY2F0ZV9pbjo6aDJiNTNlYTc5OGI1NWU4NG\ -LUBEs8YWxsb2M6OmFsbG9jOjpHbG9iYWwgYXMgY29yZTo6YWxsb2M6OkFsbG9jYXRvcj46OnNocmlu\ -azo6aDE3NTZlNmRlODUxM2IyMDHVBDthbGxvYzo6cmF3X3ZlYzo6UmF3VmVjPFQsQT46OmFsbG9jYX\ -RlX2luOjpoNjQ5MDkwNTZlNzcxYmZjZtYEO2NvcmU6OmZtdDo6YnVpbGRlcnM6OkRlYnVnU3RydWN0\ -OjpmaW5pc2g6OmhjNmEyOWU5MTFhYmVjOGE41wQ0Y29yZTo6aGFzaDo6QnVpbGRIYXNoZXI6Omhhc2\ -hfb25lOjpoNjI5YjRmZjhhY2NhZmFmONgELmFsbG9jOjpzdHJpbmc6OlN0cmluZzo6cHVzaDo6aGZk\ -OWI5M2FhNWYxYzJlNjDZBDxzZXJkZTo6c2VyOjpTZXJpYWxpemVNYXA6OnNlcmlhbGl6ZV9lbnRyeT\ -o6aGVhZjcwZTdiNGUxYWVhNjnaBF88YWxsb2M6OnN0cmluZzo6U3RyaW5nIGFzIGNvcmU6Oml0ZXI6\ -OnRyYWl0czo6Y29sbGVjdDo6RXh0ZW5kPGNoYXI+Pjo6ZXh0ZW5kOjpoOWMyNTg1OGYwYjEyMDlkON\ -sEN2luZGV4bWFwOjptYXA6OkluZGV4TWFwPEssVixTPjo6aGFzaDo6aDg2ZmIxMTkyYTk3ZWFkZTTc\ -BGE8Y29yZTo6c3RyOjppdGVyOjpDaGFySW5kaWNlcyBhcyBjb3JlOjppdGVyOjp0cmFpdHM6Oml0ZX\ -JhdG9yOjpJdGVyYXRvcj46Om5leHQ6OmhkYzdhNDFkMGEzNmU5ZTZm3QRhPGNvcmU6OnN0cjo6aXRl\ -cjo6Q2hhckluZGljZXMgYXMgY29yZTo6aXRlcjo6dHJhaXRzOjppdGVyYXRvcjo6SXRlcmF0b3I+Oj\ -puZXh0OjpoZGM3YTQxZDBhMzZlOWU2Zt4ELmFsbG9jOjpzdHJpbmc6OlN0cmluZzo6cHVzaDo6aGZk\ -OWI5M2FhNWYxYzJlNjDfBGg8Y29yZTo6aXRlcjo6YWRhcHRlcnM6Om1hcDo6TWFwPEksRj4gYXMgY2\ -9yZTo6aXRlcjo6dHJhaXRzOjppdGVyYXRvcjo6SXRlcmF0b3I+Ojpmb2xkOjpoN2IyM2JlNGZiNjA4\ -NzJhNOAELmFsbG9jOjpzdHJpbmc6OlN0cmluZzo6cHVzaDo6aGZkOWI5M2FhNWYxYzJlNjDhBDthbG\ -xvYzo6cmF3X3ZlYzo6UmF3VmVjPFQsQT46OmFsbG9jYXRlX2luOjpoNDljMGU1ZmJmMzFkYWRjMuIE\ -aDxjb3JlOjppdGVyOjphZGFwdGVyczo6bWFwOjpNYXA8SSxGPiBhcyBjb3JlOjppdGVyOjp0cmFpdH\ -M6Oml0ZXJhdG9yOjpJdGVyYXRvcj46OmZvbGQ6OmhhMDY0MGNlYjQ5MjUzNWY54wQ3aW5kZXhtYXA6\ -Om1hcDo6SW5kZXhNYXA8SyxWLFM+OjpoYXNoOjpoYWFjZGMyMTRhMDg0YjA3ZOQELmFsbG9jOjpzdH\ -Jpbmc6OlN0cmluZzo6cHVzaDo6aGZkOWI5M2FhNWYxYzJlNjDlBEB1cmw6OnBhcnNlcjo6c3RhcnRz\ -X3dpdGhfd2luZG93c19kcml2ZV9sZXR0ZXI6OmgyNTI4MjdjNGE0NTAxZTU05gQ/Y29yZTo6c2xpY2\ -U6OnNvcnQ6Omluc2VydGlvbl9zb3J0X3NoaWZ0X2xlZnQ6OmgwMzliOTg1MDcwZGJlZDM55wRfPGFs\ -bG9jOjpzdHJpbmc6OlN0cmluZyBhcyBjb3JlOjppdGVyOjp0cmFpdHM6OmNvbGxlY3Q6OkV4dGVuZD\ -xjaGFyPj46OmV4dGVuZDo6aDdhOGNjZTUzNzFhNmFlMTjoBFZjb3JlOjppdGVyOjp0cmFpdHM6Oml0\ -ZXJhdG9yOjpJdGVyYXRvcjo6Zm9yX2VhY2g6OmNhbGw6Ont7Y2xvc3VyZX19OjpoNzBmMWU1OTJiMj\ -Y3MmViN+kEMnNlcmRlOjpkZTo6RXJyb3I6OmludmFsaWRfdmFsdWU6OmgyYjg5OThlZTZhZmJiYjhi\ -6gQ3aW5kZXhtYXA6Om1hcDo6SW5kZXhNYXA8SyxWLFM+OjpoYXNoOjpoYjJmYzk5ODIwZGQ2YzFhNu\ -sEPWhhc2hicm93bjo6cmF3OjpSYXdJdGVyUmFuZ2U8VD46Om5leHRfaW1wbDo6aDQ4NWVkZWFlYTBj\ -NzE1MDPsBD1oYXNoYnJvd246OnJhdzo6UmF3SXRlclJhbmdlPFQ+OjpuZXh0X2ltcGw6Omg4ZWY0Zm\ -JhNGE2NGVmOWM27QRSZGVub19jYWNoZV9kaXI6OmxvY2FsOjptYW5pZmVzdDo6TG9jYWxDYWNoZU1h\ -bmlmZXN0RGF0YTo6aW5zZXJ0OjpoMDkzZmJmZmMwZDY5MjVjMu4EMXNlcmRlOjpkZTo6RXJyb3I6Om\ -ludmFsaWRfdHlwZTo6aGM0NDY0M2QzZTU0ZjJiMjbvBEVwYXJraW5nX2xvdF9jb3JlOjpwYXJraW5n\ -X2xvdDo6bG9ja19idWNrZXRfY2hlY2tlZDo6aDU3NGY3NGMzZGE1MWJhOTnwBDlhbGxvYzo6dmVjOj\ -pWZWM8VCxBPjo6ZXh0ZW5kX2Rlc3VnYXJlZDo6aGE5OTFhOWVkOWZmOWNhMjXxBEg8YWxsb2M6OnN0\ -cmluZzo6RHJhaW4gYXMgY29yZTo6b3BzOjpkcm9wOjpEcm9wPjo6ZHJvcDo6aGU2MWVkNWJkOTFhMm\ -RhOWbyBGs8aGFzaGJyb3duOjptYXA6Okhhc2hNYXA8SyxWLFMsQT4gYXMgY29yZTo6aXRlcjo6dHJh\ -aXRzOjpjb2xsZWN0OjpFeHRlbmQ8KEssVik+Pjo6ZXh0ZW5kOjpoMDQ3NDc5Njg1YmMwM2VjZfMENG\ -NvcmU6Omhhc2g6OkJ1aWxkSGFzaGVyOjpoYXNoX29uZTo6aDlhZTUxZjg1MTMxNThiMmb0BDRjb3Jl\ -OjpoYXNoOjpCdWlsZEhhc2hlcjo6aGFzaF9vbmU6OmhkYWVkMjA5NWFlNTg2ZGIz9QQ0c2VyZGU6Om\ -RlOjpzaXplX2hpbnQ6OmZyb21fYm91bmRzOjpoMzM2YzczNDA4MjY1OTQ5M/YEdjxkZW5vX2NhY2hl\ -X2Rpcjo6Z2xvYmFsOjpHbG9iYWxIdHRwQ2FjaGU8RW52PiBhcyBkZW5vX2NhY2hlX2Rpcjo6Y2FjaG\ -U6Okh0dHBDYWNoZT46OnJlYWRfZmlsZV9ieXRlczo6aDEyMGI4M2NlYzI0NTRjMDH3BBlfX3diZ19s\ -b2NhbGh0dHBjYWNoZV9mcmVl+ARjPHN0ZDo6cGFuaWNraW5nOjpiZWdpbl9wYW5pYzo6UGFuaWNQYX\ -lsb2FkPEE+IGFzIGNvcmU6OnBhbmljOjpCb3hNZVVwPjo6dGFrZV9ib3g6Omg1NDFiZGMwNGFhYzY5\ -NjFi+QRcPGNvcmU6OmNoYXI6OlRvTG93ZXJjYXNlIGFzIGNvcmU6Oml0ZXI6OnRyYWl0czo6aXRlcm\ -F0b3I6Okl0ZXJhdG9yPjo6bmV4dDo6aDk0NDA3NDZmM2ZlMTIzM2T6BDZpbmRleG1hcDo6bWFwOjpJ\ -bmRleE1hcDxLLFYsUz46OmdldDo6aDZmNjJlYTM1MGM3MjIyNzf7BDljb3JlOjpvcHM6OmZ1bmN0aW\ -9uOjpGbk9uY2U6OmNhbGxfb25jZTo6aDk1ZTI4ZDc1MjlhZmRmNzH8BF88Y29yZTo6c3RyOjppdGVy\ -OjpTcGxpdE48UD4gYXMgY29yZTo6aXRlcjo6dHJhaXRzOjppdGVyYXRvcjo6SXRlcmF0b3I+OjpuZX\ -h0OjpoNGM1NmZlMWI4MTg3ZTJjNf0Ebjxjb3JlOjpvcHM6OnJhbmdlOjpSYW5nZUluY2x1c2l2ZTx1\ -c2l6ZT4gYXMgY29yZTo6c2xpY2U6OmluZGV4OjpTbGljZUluZGV4PFtUXT4+OjppbmRleF9tdXQ6Om\ -hlN2IwNTE3ZGZkODQ3OWEx/gRDYWxsb2M6OnZlYzo6VmVjPFQsQT46OnN3YXBfcmVtb3ZlOjphc3Nl\ -cnRfZmFpbGVkOjpoNDU0NmNlYTEyNWY5NmY1Yf8EPmFsbG9jOjp2ZWM6OlZlYzxULEE+OjpyZW1vdm\ -U6OmFzc2VydF9mYWlsZWQ6OmhhMDgyZjUyOGI3ZjU5NjU2gAVBYWxsb2M6OnZlYzo6VmVjPFQsQT46\ -OnNwbGl0X29mZjo6YXNzZXJ0X2ZhaWxlZDo6aDk3MDU4OWVjMDVhMjgyNDGBBTZjb3JlOjpwYW5pY2\ -tpbmc6OnBhbmljX2JvdW5kc19jaGVjazo6aGNlMjA3MDk2Yjk2ODU2MWSCBUFjb3JlOjpzbGljZTo6\ -aW5kZXg6OnNsaWNlX3N0YXJ0X2luZGV4X2xlbl9mYWlsOjpoM2UxMDJiNzVkMjY2NzU2NYMFP2Nvcm\ -U6OnNsaWNlOjppbmRleDo6c2xpY2VfZW5kX2luZGV4X2xlbl9mYWlsOjpoMzUzY2UyZTkzNjI3NzFl\ -OIQFPWNvcmU6OnNsaWNlOjppbmRleDo6c2xpY2VfaW5kZXhfb3JkZXJfZmFpbDo6aDZlMmU0YTVmNm\ -EyZGJhMjeFBU5jb3JlOjpzbGljZTo6PGltcGwgW1RdPjo6Y29weV9mcm9tX3NsaWNlOjpsZW5fbWlz\ -bWF0Y2hfZmFpbDo6aDk2NTc2ZDM2MzJjMTY5YmGGBWg8Y29yZTo6aXRlcjo6YWRhcHRlcnM6Om1hcD\ -o6TWFwPEksRj4gYXMgY29yZTo6aXRlcjo6dHJhaXRzOjppdGVyYXRvcjo6SXRlcmF0b3I+Ojpmb2xk\ -OjpoMDRhODY2NTIyYjI2NTcxMocFNmluZGV4bWFwOjptYXA6OkluZGV4TWFwPEssVixTPjo6Z2V0Oj\ -poYWMwYjA0NWJiNTVhYzQ5ZYgFPDxUIGFzIGFsbG9jOjpzdHJpbmc6OlRvU3RyaW5nPjo6dG9fc3Ry\ -aW5nOjpoZWY3MTAxMWI3NzhjZDUzZYkFM2FsbG9jOjpzdHJpbmc6OlN0cmluZzo6ZnJvbV91dGY4Oj\ -poZTQ1ZThkYTIxNWIxNDcwNIoFUzxjb3JlOjpoYXNoOjpzaXA6OlNpcDEzUm91bmRzIGFzIGNvcmU6\ -Omhhc2g6OnNpcDo6U2lwPjo6Y19yb3VuZHM6OmgwZDU1N2E5Y2EwMDNkZDZhiwVfPHNlcmRlX2pzb2\ -46OnNlcjo6UHJldHR5Rm9ybWF0dGVyIGFzIHNlcmRlX2pzb246OnNlcjo6Rm9ybWF0dGVyPjo6ZW5k\ -X29iamVjdDo6aGY3Y2YyM2M1ZDE3NTQ3YjaMBTZpbmRleG1hcDo6bWFwOjpJbmRleE1hcDxLLFYsUz\ -46OmdldDo6aGIwZWY5NTZlNGNiZGI4MzWNBTZpbmRleG1hcDo6bWFwOjpJbmRleE1hcDxLLFYsUz46\ -OmdldDo6aGQwZTYxNzA1MDQ5YzU0YTCOBTZoYXNoYnJvd246OnJhdzo6UmF3VGFibGU8VCxBPjo6Zm\ -luZDo6aGJjOGI2MmNjOGNjZDUzMTSPBVM8Y29yZTo6aGFzaDo6c2lwOjpTaXAxM1JvdW5kcyBhcyBj\ -b3JlOjpoYXNoOjpzaXA6OlNpcD46OmNfcm91bmRzOjpoMGQ1NTdhOWNhMDAzZGQ2YZAFbjxjb3JlOj\ -ppdGVyOjphZGFwdGVyczo6ZmlsdGVyOjpGaWx0ZXI8SSxQPiBhcyBjb3JlOjppdGVyOjp0cmFpdHM6\ -Oml0ZXJhdG9yOjpJdGVyYXRvcj46Om5leHQ6OmgxZTljYWUwOWQ5MzFmOWJlkQUoaWRuYTo6cHVueW\ -NvZGU6OmFkYXB0OjpoZGRmMmZkMWZhYjQ3MDZlN5IFPGRsbWFsbG9jOjpkbG1hbGxvYzo6RGxtYWxs\ -b2M8QT46OmluaXRfdG9wOjpoODBjN2U1ODFkNjAzNGUzN5MFSjxjb3JlOjpvcHM6OnJhbmdlOjpSYW\ -5nZTxJZHg+IGFzIGNvcmU6OmZtdDo6RGVidWc+OjpmbXQ6OmhhNTRmOWQ1NmE3Y2YyMWIxlAU6PHVy\ -bDo6VXJsIGFzIGNvcmU6OmNsb25lOjpDbG9uZT46OmNsb25lOjpoY2M4YjljODkwYTdiMWZmYZUFLG\ -NvcmU6OnRpbWU6OkR1cmF0aW9uOjpuZXc6OmgxODA1YTg4NDlhYjhhZTc5lgVUc3RkOjpzeXM6OmNv\ -bW1vbjo6dGhyZWFkX2xvY2FsOjpsYXp5OjpMYXp5S2V5SW5uZXI8VD46OmluaXRpYWxpemU6OmhhMz\ -JhODUyYzk1NzcyZDk5lwU9c2VyZGVfanNvbjo6ZGU6OlBhcnNlck51bWJlcjo6aW52YWxpZF90eXBl\ -OjpoNDRjOGIxYTNkNWIzOTliMpgFL2NvcmU6OnN0cjo6PGltcGwgc3RyPjo6c3BsaXQ6Omg1NjM1YT\ -QxOTI0NGNkOGMxmQUvY29yZTo6c3RyOjo8aW1wbCBzdHI+OjpzcGxpdDo6aDQ1ZDI3OWNiNGM0ODZk\ -NzSaBS5pZG5hOjp1dHM0Njo6aXNfYmlkaV9kb21haW46OmgzZGFjZjI3MmE4ZWIxZmY2mwVkPHBlcm\ -NlbnRfZW5jb2Rpbmc6OlBlcmNlbnREZWNvZGUgYXMgY29yZTo6aXRlcjo6dHJhaXRzOjppdGVyYXRv\ -cjo6SXRlcmF0b3I+OjpuZXh0OjpoNDFkYTliZjYxZjAxZTAyNpwFPDxUIGFzIGFsbG9jOjpzdHJpbm\ -c6OlRvU3RyaW5nPjo6dG9fc3RyaW5nOjpoNjYwNDdkNTZiOWYwZjI5M50FTmRlbm9fY2FjaGVfZGly\ -Ojpsb2NhbDo6TG9jYWxDYWNoZVN1YlBhdGg6OmFzX3BhdGhfZnJvbV9yb290OjpoZDcyOWM4Y2ViNT\ -gwY2IyMp4FcjxkZW5vX2NhY2hlX2Rpcjo6d2FzbTo6R2xvYmFsSHR0cENhY2hlIGFzIHdhc21fYmlu\ -ZGdlbjo6Y29udmVydDo6dHJhaXRzOjpGcm9tV2FzbUFiaT46OmZyb21fYWJpOjpoYTZhZmRjZjc2Nz\ -EyNWI1Yp8FRzxhbGxvYzo6c3RyaW5nOjpTdHJpbmcgYXMgY29yZTo6Y2xvbmU6OkNsb25lPjo6Y2xv\ -bmU6Omg0NzAyYWFiMjhlYmY0N2JjoAUvYWxsb2M6OnZlYzo6VmVjPFQsQT46OnJlbW92ZTo6aDQxZD\ -hkYzJiNDAzYWEwNjKhBUdpbmRleG1hcDo6bWFwOjpjb3JlOjpJbmRleE1hcENvcmU8SyxWPjo6Z2V0\ -X2luZGV4X29mOjpoOTEyNmE3YTU0MGEyNDA5Y6IFSmluZGV4bWFwOjptYXA6OmNvcmU6OkluZGV4TW\ -FwQ29yZTxLLFY+OjpyZXNlcnZlX2VudHJpZXM6OmhiZDhlZDA5ZmQ1ZDQzMDRiowVKaW5kZXhtYXA6\ -Om1hcDo6Y29yZTo6SW5kZXhNYXBDb3JlPEssVj46OnJlc2VydmVfZW50cmllczo6aDQ4N2NhY2IzMW\ -NiYTM2ODmkBUppbmRleG1hcDo6bWFwOjpjb3JlOjpJbmRleE1hcENvcmU8SyxWPjo6cmVzZXJ2ZV9l\ -bnRyaWVzOjpoMTJjMDQzZmMwMWFkNjEzYqUFNmhhc2hicm93bjo6cmF3OjpSYXdUYWJsZTxULEE+Oj\ -pmaW5kOjpoZWIxMjBlZDNkY2MwNTk5MKYFOGhhc2hicm93bjo6cmF3OjpSYXdUYWJsZTxULEE+Ojpp\ -bnNlcnQ6Omg3ZjIwNmE1ODUwZTM3NTIypwU8Y29yZTo6c3RyOjo8aW1wbCBzdHI+Ojp0cmltX3N0YX\ -J0X21hdGNoZXM6OmgzZmU2MjkxZDJiZDQwZjIyqAVmPGNvcmU6Oml0ZXI6OmFkYXB0ZXJzOjpyZXY6\ -OlJldjxJPiBhcyBjb3JlOjppdGVyOjp0cmFpdHM6Oml0ZXJhdG9yOjpJdGVyYXRvcj46Om5leHQ6Om\ -g4ZDBmNTZjOGJiM2Y2NDliqQU6PCZtdXQgVyBhcyBjb3JlOjpmbXQ6OldyaXRlPjo6d3JpdGVfZm10\ -OjpoOTJjZTBiMWRlYTM2ZWRlMaoFOjwmbXV0IFcgYXMgY29yZTo6Zm10OjpXcml0ZT46OndyaXRlX2\ -ZtdDo6aDU0NjQ5OTczYWZmYjNmNWWrBTo8Jm11dCBXIGFzIGNvcmU6OmZtdDo6V3JpdGU+Ojp3cml0\ -ZV9mbXQ6Omg4MWFkMDM5NDM4NjFhZjhjrAU6PCZtdXQgVyBhcyBjb3JlOjpmbXQ6OldyaXRlPjo6d3\ -JpdGVfZm10OjpoZTkyZGNjNDdkOTRhNDQxZq0FMmNvcmU6OmZtdDo6Rm9ybWF0dGVyOjp3cml0ZV9m\ -bXQ6Omg0ZWJlNDg3MjBlYjc3MzY0rgVrPGhhc2hicm93bjo6bWFwOjpIYXNoTWFwPEssVixTLEE+IG\ -FzIGNvcmU6Oml0ZXI6OnRyYWl0czo6Y29sbGVjdDo6RXh0ZW5kPChLLFYpPj46OmV4dGVuZDo6aDdk\ -MzZiMGEzNGY2ZTIwMmOvBTxzZXJkZTo6c2VyOjpTZXJpYWxpemVNYXA6OnNlcmlhbGl6ZV9lbnRyeT\ -o6aGFiOGFlNWQ3NzQyY2E2NDmwBTxzZXJkZTo6c2VyOjpTZXJpYWxpemVNYXA6OnNlcmlhbGl6ZV9l\ -bnRyeTo6aDI4MmMyYjIwMTVkNDQ3NWGxBV48c2VyZGVfanNvbjo6c2VyOjpDb21wb3VuZDxXLEY+IG\ -FzIHNlcmRlOjpzZXI6OlNlcmlhbGl6ZU1hcD46OnNlcmlhbGl6ZV9rZXk6Omg2YjAyNzBiNGYwZGFi\ -MTkysgU8c2VyZGU6OnNlcjo6U2VyaWFsaXplTWFwOjpzZXJpYWxpemVfZW50cnk6OmgzNmY1OWMzMW\ -IzOTg5MDc4swU8c2VyZGU6OnNlcjo6U2VyaWFsaXplTWFwOjpzZXJpYWxpemVfZW50cnk6Omg0NDcw\ -YmQ2ZmFkNjM0ZGZitAVePHNlcmRlX2pzb246OnNlcjo6Q29tcG91bmQ8VyxGPiBhcyBzZXJkZTo6c2\ -VyOjpTZXJpYWxpemVNYXA+OjpzZXJpYWxpemVfa2V5OjpoYTc4YjNiNDMzNzc4MDBkZrUFPHNlcmRl\ -OjpzZXI6OlNlcmlhbGl6ZU1hcDo6c2VyaWFsaXplX2VudHJ5OjpoNzM0MTA3YTBlMzM5ZjA5ZrYFPH\ -NlcmRlOjpzZXI6OlNlcmlhbGl6ZU1hcDo6c2VyaWFsaXplX2VudHJ5OjpoY2NkMzZhMmNiYTc4YjAw\ -MrcFMHNlcmRlX2pzb246OnJlYWQ6Om5leHRfb3JfZW9mOjpoZGRiNzQ4MzhkZTZlNDc2N7gFMWNvcm\ -U6OnBhbmlja2luZzo6YXNzZXJ0X2ZhaWxlZDo6aDdhYTRhY2ZlNmY1MTNlMja5BTFjb3JlOjpwYW5p\ -Y2tpbmc6OmFzc2VydF9mYWlsZWQ6Omg3OGNlZDAxZGQ0MDU1YTkwugUxY29yZTo6cGFuaWNraW5nOj\ -phc3NlcnRfZmFpbGVkOjpoNDMxYmY1MzkwZWJkYWJhMbsFmQE8c2VyZGU6OmRlOjppbXBsczo6PGlt\ -cGwgc2VyZGU6OmRlOjpEZXNlcmlhbGl6ZSBmb3Igc3RkOjp0aW1lOjpTeXN0ZW1UaW1lPjo6ZGVzZX\ -JpYWxpemU6OkZpZWxkIGFzIHNlcmRlOjpkZTo6RGVzZXJpYWxpemU+OjpkZXNlcmlhbGl6ZTo6aGFh\ -ZTJlYTg3YWExNjU0Mma8BWlzZXJkZTo6ZGU6OmltcGxzOjo8aW1wbCBzZXJkZTo6ZGU6OkRlc2VyaW\ -FsaXplIGZvciBhbGxvYzo6c3RyaW5nOjpTdHJpbmc+OjpkZXNlcmlhbGl6ZTo6aDZkNTdiYTJjNDJk\ -MTBmMjS9BTZoYXNoYnJvd246OnJhdzo6UmF3VGFibGU8VCxBPjo6ZmluZDo6aGMxN2M5Y2U5ODk4Mz\ -RlODS+BThoYXNoYnJvd246OnJhdzo6UmF3VGFibGU8VCxBPjo6aW5zZXJ0OjpoZDE2NGQ1ZDA1ZTdk\ -ZWZkZL8FaXNlcmRlOjpkZTo6aW1wbHM6OjxpbXBsIHNlcmRlOjpkZTo6RGVzZXJpYWxpemUgZm9yIG\ -FsbG9jOjpzdHJpbmc6OlN0cmluZz46OmRlc2VyaWFsaXplOjpoNTg0ODAwODBiNDg0OTcwY8AFN3N0\ -ZDo6YWxsb2M6OmRlZmF1bHRfYWxsb2NfZXJyb3JfaG9vazo6aGQ3OTM5ZjEwNjIzZmMwN2TBBURzZX\ -JkZTo6ZGU6OnZhbHVlOjpNYXBEZXNlcmlhbGl6ZXI8SSxFPjo6bmV4dF9wYWlyOjpoNTUyZDZiNTBj\ -NjZjODUyNsIFLmNvcmU6OmZtdDo6V3JpdGU6OndyaXRlX2ZtdDo6aGU1NzM5NWI0ZmFiMmFiNGPDBS\ -5jb3JlOjpmbXQ6OldyaXRlOjp3cml0ZV9mbXQ6OmgxOGM4Yzg2NGZjMTZiZTU3xAU1ZGVub19tZWRp\ -YV90eXBlOjpzcGVjaWZpZXJfdG9fcGF0aDo6aGQxNDlhNmQ3ZGQ3MDkzNTPFBTpjb3JlOjpzdHI6Oj\ -xpbXBsIHN0cj46OnRyaW1fZW5kX21hdGNoZXM6OmhmZWNiYmVlYTNmOGJjNmY3xgUuZGF0YV91cmw6\ -Om1pbWU6OnZhbGlkX3ZhbHVlOjpoNWI2OGU1MmU5NTQwYWZkYscFLmNvcmU6OmZtdDo6V3JpdGU6On\ -dyaXRlX2ZtdDo6aDc2MWUxOTA1MjRiOTQxOGHIBT9jb3JlOjpzbGljZTo6c29ydDo6aW5zZXJ0aW9u\ -X3NvcnRfc2hpZnRfbGVmdDo6aDFhOWU3ZGNjODY1ZGE5MDnJBS5jb3JlOjpmbXQ6OldyaXRlOjp3cm\ -l0ZV9mbXQ6Omg1OWJlNTlhOTZhNDYzMDJhygVCPGFsbG9jOjp2ZWM6OlZlYzxULEE+IGFzIGNvcmU6\ -OmZtdDo6RGVidWc+OjpmbXQ6OmhmMjM4YmYyNWZkYWNiMGNhywUuY29yZTo6Zm10OjpXcml0ZTo6d3\ -JpdGVfZm10OjpoOGFkYWFjNWZhMDQ1MWQyN8wFcDxhbGxvYzo6dmVjOjpWZWM8VD4gYXMgYWxsb2M6\ -OnZlYzo6c3BlY19mcm9tX2l0ZXJfbmVzdGVkOjpTcGVjRnJvbUl0ZXJOZXN0ZWQ8VCxJPj46OmZyb2\ -1faXRlcjo6aDFjZGQ0YTJmZTBkOTIzZGbNBTJzZXJkZTo6ZGU6OkVycm9yOjptaXNzaW5nX2ZpZWxk\ -OjpoYzQ4YWRkZDVhOWI0ZDA0MM4FNHNlcmRlOjpkZTo6RXJyb3I6OmR1cGxpY2F0ZV9maWVsZDo6aD\ -RhOWVmYWRmMTY5MjhhYzXPBSN1cmw6OlVybDo6c2NoZW1lOjpoMjU3MjY4OTM1NDQ0Y2FkNNAFPmNv\ -cmU6Om9wdGlvbjo6T3B0aW9uPFQ+OjpnZXRfb3JfaW5zZXJ0X3dpdGg6OmhhNGRmOTVkNzkzOTBiOD\ -I30QVHPGNoYXIgYXMgY29yZTo6c3RyOjpwYXR0ZXJuOjpQYXR0ZXJuPjo6aW50b19zZWFyY2hlcjo6\ -aDczZTY3MmRhZjVmYmY0NTnSBXU8Y29yZTo6c3RyOjppdGVyOjpDaGFySW5kaWNlcyBhcyBjb3JlOj\ -ppdGVyOjp0cmFpdHM6OmRvdWJsZV9lbmRlZDo6RG91YmxlRW5kZWRJdGVyYXRvcj46Om5leHRfYmFj\ -azo6aGQzZDJkNzU1MGZhNTI4NWTTBUc8Y2hhciBhcyBjb3JlOjpzdHI6OnBhdHRlcm46OlBhdHRlcm\ -4+OjppbnRvX3NlYXJjaGVyOjpoNzNlNjcyZGFmNWZiZjQ1OdQFLHVybDo6cGFyc2VyOjpkZWZhdWx0\ -X3BvcnQ6OmgzMjcyNTQxZThjZWYzMTUx1QVHPGNoYXIgYXMgY29yZTo6c3RyOjpwYXR0ZXJuOjpQYX\ -R0ZXJuPjo6aW50b19zZWFyY2hlcjo6aDczZTY3MmRhZjVmYmY0NTnWBS9zdGQ6OnBhdGg6OlBhdGg6\ -OnRvX3BhdGhfYnVmOjpoODdhZDNkYWQxMWIzYTEzNtcFOnN0ZDo6c3lzOjp3YXNtOjpvc19zdHI6Ol\ -NsaWNlOjp0b19vd25lZDo6aDMzYTY0MzY2NmRhYjBkMGPYBT9pbmRleG1hcDo6bWFwOjpJbmRleE1h\ -cDxLLFYsUz46OmdldF9pbmRleF9vZjo6aDM1NjQwOGNiNDgxZTJjNmPZBSN1cmw6OlVybDo6c2NoZW\ -1lOjpoMjU3MjY4OTM1NDQ0Y2FkNNoFRDx1cmw6OlVybCBhcyBzZXJkZTo6ZGU6OkRlc2VyaWFsaXpl\ -Pjo6ZGVzZXJpYWxpemU6Omg2MTliYzQ5ZDVmZTA4ZjJh2wU8c2VyZGU6OnNlcjo6U2VyaWFsaXplTW\ -FwOjpzZXJpYWxpemVfZW50cnk6OmhmOTExZmU3OGQ0MzRhOTJi3AVgPHNlcmRlX2pzb246OnNlcjo6\ -Q29tcG91bmQ8VyxGPiBhcyBzZXJkZTo6c2VyOjpTZXJpYWxpemVNYXA+OjpzZXJpYWxpemVfdmFsdW\ -U6OmgzZGQ0NDIwMmZiOGZmMGNk3QU4aGFzaGJyb3duOjpyYXc6OlJhd1RhYmxlPFQsQT46Omluc2Vy\ -dDo6aDU2YjA4YTU3MjQ1NTVjNzPeBWQ8ZGVub19jYWNoZV9kaXI6Omdsb2JhbDo6VXJsVG9GaWxlbm\ -FtZUNvbnZlcnNpb25FcnJvciBhcyBjb3JlOjpmbXQ6OkRpc3BsYXk+OjpmbXQ6OmgyN2I2NTY0YjQ5\ -MGEzYTE43wU6PCZtdXQgVyBhcyBjb3JlOjpmbXQ6OldyaXRlPjo6d3JpdGVfZm10OjpoNTI0YmM1ZG\ -FmM2NhNmMyM+AFOjwmbXV0IFcgYXMgY29yZTo6Zm10OjpXcml0ZT46OndyaXRlX2ZtdDo6aDQ2OTk2\ -N2M4YzA1NWEyODLhBT1wYXJraW5nX2xvdF9jb3JlOjpwYXJraW5nX2xvdDo6bG9ja19idWNrZXQ6Om\ -g5MTRjMDU3MDdmYmU5Yzgz4gVCPHVybDo6aG9zdDo6SG9zdDxTPiBhcyBjb3JlOjpmbXQ6OkRpc3Bs\ -YXk+OjpmbXQ6Omg3ODE5YTNlZDJhZWRmZTQz4wU6PCZtdXQgVyBhcyBjb3JlOjpmbXQ6OldyaXRlPj\ -o6d3JpdGVfZm10OjpoMTQwZTNmMDk2ZWE0Y2Q2YeQFMHVybDo6cGFyc2VyOjpTY2hlbWVUeXBlOjpm\ -cm9tOjpoODg3NGE0ODY2YTk1MDUyOeUFejxjb3JlOjpzbGljZTo6c29ydDo6bWVyZ2Vfc29ydDo6Un\ -VuVmVjPFJ1bkFsbG9jRixSdW5EZWFsbG9jRj4gYXMgY29yZTo6b3BzOjppbmRleDo6SW5kZXg8dXNp\ -emU+Pjo6aW5kZXg6OmgwYmM5ZTdkYjQ1YTJkNTlk5gVfPGFsbG9jOjpzdHJpbmc6OlN0cmluZyBhcy\ -Bjb3JlOjppdGVyOjp0cmFpdHM6OmNvbGxlY3Q6OkV4dGVuZDwmc3RyPj46OmV4dGVuZDo6aGUwMWNi\ -NDlmYTNjN2YyM2HnBU88cGVyY2VudF9lbmNvZGluZzo6UGVyY2VudEVuY29kZSBhcyBjb3JlOjpmbX\ -Q6OkRpc3BsYXk+OjpmbXQ6OmhlOTU0ZjdlMWIzMzA3M2Y56AU6PCZtdXQgVyBhcyBjb3JlOjpmbXQ6\ -OldyaXRlPjo6d3JpdGVfZm10OjpoNGUxZDRhMDc2NThlMzY5M+kFMWFsbG9jOjpzeW5jOjpBcmM8VD\ -46OmRyb3Bfc2xvdzo6aGZlMWI0NGEwZjU1ZGRmYTDqBVZjb3JlOjpzdHI6OnRyYWl0czo6PGltcGwg\ -Y29yZTo6b3BzOjppbmRleDo6SW5kZXg8ST4gZm9yIHN0cj46OmluZGV4OjpoNGEyMTk5NjA2MjliZW\ -YyZOsFhwFhbGxvYzo6dmVjOjppbl9wbGFjZV9jb2xsZWN0Ojo8aW1wbCBhbGxvYzo6dmVjOjpzcGVj\ -X2Zyb21faXRlcjo6U3BlY0Zyb21JdGVyPFQsST4gZm9yIGFsbG9jOjp2ZWM6OlZlYzxUPj46OmZyb2\ -1faXRlcjo6aDQzYzM1NTJjMmNiNmZmY2LsBWY8c2VyZGVfd2FzbV9iaW5kZ2VuOjpzZXI6Ok1hcFNl\ -cmlhbGl6ZXIgYXMgc2VyZGU6OnNlcjo6U2VyaWFsaXplTWFwPjo6c2VyaWFsaXplX2tleTo6aDRlYz\ -ljZGQ3ZGZhMjE4ZWPtBT5pbmRleG1hcDo6bWFwOjpJbmRleE1hcDxLLFYsUz46OnN3YXBfcmVtb3Zl\ -OjpoOTg5YzMyNDM4NDk0YzcwM+4FP2luZGV4bWFwOjptYXA6OkluZGV4TWFwPEssVixTPjo6Z2V0X2\ -luZGV4X29mOjpoMThlMjY2MjAxY2NkMmI0Me8FP2luZGV4bWFwOjptYXA6OkluZGV4TWFwPEssVixT\ -Pjo6Z2V0X2luZGV4X29mOjpoNDllMDk0ZjgwMmE2YjBlMvAFP2luZGV4bWFwOjptYXA6OkluZGV4TW\ -FwPEssVixTPjo6Z2V0X2luZGV4X29mOjpoNGJhNzBlNGM3MGRlODJkZfEFPGRlbm9fY2FjaGVfZGly\ -Ojp3YXNtOjpMb2NhbEh0dHBDYWNoZTo6bmV3OjpoZGUzNWI2ZTgyODU2ODU3OPIFbDxhbGxvYzo6c3\ -RyaW5nOjpTdHJpbmcgYXMgY29yZTo6b3BzOjppbmRleDo6SW5kZXg8Y29yZTo6b3BzOjpyYW5nZTo6\ -UmFuZ2U8dXNpemU+Pj46OmluZGV4OjpoMzVjZTAyYjA0ZDYwY2EzM/MFfmNvcmU6OnN0cjo6dHJhaX\ -RzOjo8aW1wbCBjb3JlOjpzbGljZTo6aW5kZXg6OlNsaWNlSW5kZXg8c3RyPiBmb3IgY29yZTo6b3Bz\ -OjpyYW5nZTo6UmFuZ2VGcm9tPHVzaXplPj46OmluZGV4OjpoNjQ3MGIwMGYyOGExYTA5MPQFQ3Nlcm\ -RlX2pzb246OnJlYWQ6OnBhcnNlX2VzY2FwZTo6ZW5jb2RlX3N1cnJvZ2F0ZTo6aDZhOWQ4NmE1OWFm\ -NGM0ZTn1BVZjb3JlOjpzdHI6OnRyYWl0czo6PGltcGwgY29yZTo6b3BzOjppbmRleDo6SW5kZXg8ST\ -4gZm9yIHN0cj46OmluZGV4OjpoZWFhYzk1MjZjNmZlMTQ2N/YFMHJpbmc6OmRpZ2VzdDo6Q29udGV4\ -dDo6ZmluaXNoOjpoYWY5OGRjYTNlMGNjMzRmZPcFbDxhbGxvYzo6c3RyaW5nOjpTdHJpbmcgYXMgY2\ -9yZTo6b3BzOjppbmRleDo6SW5kZXg8Y29yZTo6b3BzOjpyYW5nZTo6UmFuZ2U8dXNpemU+Pj46Omlu\ -ZGV4OjpoMzVjZTAyYjA0ZDYwY2EzM/gFO2FsbG9jOjpyYXdfdmVjOjpSYXdWZWM8VCxBPjo6YWxsb2\ -NhdGVfaW46Omg3NDUwYmY5NTg2YzZkMTc3+QV+Y29yZTo6c3RyOjp0cmFpdHM6OjxpbXBsIGNvcmU6\ -OnNsaWNlOjppbmRleDo6U2xpY2VJbmRleDxzdHI+IGZvciBjb3JlOjpvcHM6OnJhbmdlOjpSYW5nZU\ -Zyb208dXNpemU+Pjo6aW5kZXg6Omg2NDcwYjAwZjI4YTFhMDkw+gVoPGNvcmU6Oml0ZXI6OmFkYXB0\ -ZXJzOjptYXA6Ok1hcDxJLEY+IGFzIGNvcmU6Oml0ZXI6OnRyYWl0czo6aXRlcmF0b3I6Okl0ZXJhdG\ -9yPjo6Zm9sZDo6aGNiN2JjYWJhMmUxZTc2ZDb7BX5jb3JlOjpzdHI6OnRyYWl0czo6PGltcGwgY29y\ -ZTo6c2xpY2U6OmluZGV4OjpTbGljZUluZGV4PHN0cj4gZm9yIGNvcmU6Om9wczo6cmFuZ2U6OlJhbm\ -dlRnJvbTx1c2l6ZT4+OjppbmRleDo6aDY0NzBiMDBmMjhhMWEwOTD8BS5pZG5hOjp1dHM0Njo6RXJy\ -b3JzOjppc19lcnI6Omg0NjZkZjlkZTk3MDZjN2Ix/QVjPHN0ZDo6cGFuaWNraW5nOjpiZWdpbl9wYW\ -5pYzo6UGFuaWNQYXlsb2FkPEE+IGFzIGNvcmU6OnBhbmljOjpCb3hNZVVwPjo6dGFrZV9ib3g6Omg1\ -Zjg3MDNhOGE2OTA1NTk2/gVHPHN0ZDo6aW86OmVycm9yOjpFcnJvciBhcyBjb3JlOjplcnJvcjo6RX\ -Jyb3I+OjpjYXVzZTo6aGJmNDY2NDY3ZDFjYTE1YjP/BUg8c3RkOjppbzo6ZXJyb3I6OkVycm9yIGFz\ -IGNvcmU6OmVycm9yOjpFcnJvcj46OnNvdXJjZTo6aDNmOWMxZjJjMjdhMWQ2Y2WABm48YWxsb2M6On\ -N0cmluZzo6U3RyaW5nIGFzIGNvcmU6Om9wczo6aW5kZXg6OkluZGV4PGNvcmU6Om9wczo6cmFuZ2U6\ -OlJhbmdlVG88dXNpemU+Pj46OmluZGV4OjpoN2M1ZTUxODcwOWFhMjE5ZYEGOHN0ZDo6dGhyZWFkOj\ -psb2NhbDo6TG9jYWxLZXk8VD46OndpdGg6OmhkYTRmNGI4OGFkMDA3NGU5ggZKaGFzaGJyb3duOjpy\ -YXc6OmlubmVyOjpSYXdUYWJsZTxULEE+OjpmaW5kOjp7e2Nsb3N1cmV9fTo6aDM0ZmFiMDYwMDhmYW\ -RhNWGDBjdjb3JlOjpvcHRpb246Ok9wdGlvbjxUPjo6bWFwX29yX2Vsc2U6OmgxODQ4NjUzOWY3Yzg3\ -MzE3hAY9Y29yZTo6c3RyOjppdGVyOjpTcGxpdEludGVybmFsPFA+OjpnZXRfZW5kOjpoMTg3ZWExOG\ -ViMWE0Y2VhZYUGbjxhbGxvYzo6c3RyaW5nOjpTdHJpbmcgYXMgY29yZTo6b3BzOjppbmRleDo6SW5k\ -ZXg8Y29yZTo6b3BzOjpyYW5nZTo6UmFuZ2VUbzx1c2l6ZT4+Pjo6aW5kZXg6Omg3YzVlNTE4NzA5YW\ -EyMTllhgY9Y29yZTo6Y2hhcjo6bWV0aG9kczo6PGltcGwgY2hhcj46OnRvX2RpZ2l0OjpoZjEwNDdh\ -NWNiMmZhNzQ1MocGWjx1cmw6Omhvc3Q6Okhvc3RJbnRlcm5hbCBhcyBjb3JlOjpjb252ZXJ0OjpGcm\ -9tPHVybDo6aG9zdDo6SG9zdD4+Ojpmcm9tOjpoNWVlMjAzYTI3NTdkOTNjN4gGSDx1cmw6Omhvc3Q6\ -Okhvc3RJbnRlcm5hbCBhcyBjb3JlOjpjbXA6OlBhcnRpYWxFcT46OmVxOjpoYzQ0N2VjYzc3NGY1MD\ -gxY4kGaDxjb3JlOjppdGVyOjphZGFwdGVyczo6bWFwOjpNYXA8SSxGPiBhcyBjb3JlOjppdGVyOjp0\ -cmFpdHM6Oml0ZXJhdG9yOjpJdGVyYXRvcj46OmZvbGQ6Omg3MTdiMTAwNDljMGNkMDhkigYuY29yZT\ -o6b3B0aW9uOjpleHBlY3RfZmFpbGVkOjpoM2FmMTI2NjdlY2Q0ODg3Y4sGQWFsbG9jOjpyYXdfdmVj\ -OjpSYXdWZWM8VCxBPjo6dHJ5X3Jlc2VydmVfZXhhY3Q6OmgwNGE4MWVlYzZmNjEyNTQxjAZBYWxsb2\ -M6OnJhd192ZWM6OlJhd1ZlYzxULEE+Ojp0cnlfcmVzZXJ2ZV9leGFjdDo6aGQ2NDgzYjk4ZTM5OWFi\ -YmONBkFhbGxvYzo6cmF3X3ZlYzo6UmF3VmVjPFQsQT46OnRyeV9yZXNlcnZlX2V4YWN0OjpoZGRiMT\ -E3NTlhYzM1ZTYxMY4GOGhhc2hicm93bjo6cmF3OjpSYXdUYWJsZTxULEE+OjpyZW1vdmU6OmgwMjVh\ -NWYwZWFjYTU0YTUzjwZxPGRlbm9fY2FjaGVfZGlyOjp3YXNtOjpMb2NhbEh0dHBDYWNoZSBhcyB3YX\ -NtX2JpbmRnZW46OmNvbnZlcnQ6OnRyYWl0czo6RnJvbVdhc21BYmk+Ojpmcm9tX2FiaTo6aDljZDgy\ -ZTExNWE4ODBjZGKQBks8c2VyZGVfanNvbjo6ZXJyb3I6OkVycm9yIGFzIGNvcmU6OmVycm9yOjpFcn\ -Jvcj46OnNvdXJjZTo6aDg4NjY2NGZkMDg3NWMwMjGRBjFhbGxvYzo6c3luYzo6QXJjPFQ+Ojpkcm9w\ -X3Nsb3c6Omg4YzE5MTFjZGU4ZjY0NWJjkgY2Y29yZTo6c3RyOjo8aW1wbCBzdHI+OjpzdHJpcF9wcm\ -VmaXg6OmhjNmZiZjA4OGUzMDZmN2NlkwY2anNfc3lzOjpVaW50OEFycmF5OjpyYXdfY29weV90b19w\ -dHI6Omg5MzBmNzVhMzE2MDM3YTc5lAY2Y29yZTo6c3RyOjo8aW1wbCBzdHI+OjpzdHJpcF9wcmVmaX\ -g6OmgxMDE0NzFmMjc3YjQxNGMylQY/PCZzdHIgYXMgdXJsOjpwYXJzZXI6OlBhdHRlcm4+OjpzcGxp\ -dF9wcmVmaXg6OmhkNzQyZmY2NWIyZGFhNGRllgYjdXJsOjpVcmw6OmRvbWFpbjo6aGUxZjBhZTU1ZT\ -Q4MzE5OTaXBjtoYXNoYnJvd246Om1hcDo6SGFzaE1hcDxLLFYsUyxBPjo6aW5zZXJ0OjpoZjVmMzhh\ -ZTBjOWZmYTQ1ZJgGN3NlcmRlX2pzb246OmRlOjpEZXNlcmlhbGl6ZXI8Uj46OmVuZDo6aDc2MGVlZG\ -EyZWQ4MmM0YjOZBkVzZXJkZV9qc29uOjpkZTo6RGVzZXJpYWxpemVyPFI+OjpuZXh0X2NoYXJfb3Jf\ -bnVsbDo6aDhjMDIwMjEwZjZhNzJhNGaaBkVzZXJkZV9qc29uOjpkZTo6RGVzZXJpYWxpemVyPFI+Oj\ -puZXh0X2NoYXJfb3JfbnVsbDo6aDFlN2FiZDFhZDYzOTBmOWKbBjZzZXJkZV9qc29uOjpzZXI6OmZv\ -cm1hdF9lc2NhcGVkX3N0cjo6aGRjOWI3NmFjOGVhOWIzN2OcBsoBPDxzZXJkZTo6ZGU6OmltcGxzOj\ -o8aW1wbCBzZXJkZTo6ZGU6OkRlc2VyaWFsaXplIGZvciBzdGQ6OnRpbWU6OlN5c3RlbVRpbWU+Ojpk\ -ZXNlcmlhbGl6ZTo6RmllbGQgYXMgc2VyZGU6OmRlOjpEZXNlcmlhbGl6ZT46OmRlc2VyaWFsaXplOj\ -pGaWVsZFZpc2l0b3IgYXMgc2VyZGU6OmRlOjpWaXNpdG9yPjo6dmlzaXRfc3RyOjpoNjg0NDkxODBi\ -ZDJlMzgxMp0GSGhhc2hicm93bjo6cmF3OjpSYXdUYWJsZTxULEE+OjpmYWxsaWJsZV93aXRoX2NhcG\ -FjaXR5OjpoMGQyYTBkZGQzMzljY2NmZZ4GE2dsb2JhbGh0dHBjYWNoZV9uZXefBjdzZXJkZV9qc29u\ -OjpkZTo6RGVzZXJpYWxpemVyPFI+OjplbmQ6OmgzYWQyZmVmODNmZjdmOTU0oAYyYWxsb2M6OnN0cm\ -luZzo6U3RyaW5nOjp0cnVuY2F0ZTo6aGY0NzZiZjA5Y2Y2MzZiNWWhBhFydXN0X2JlZ2luX3Vud2lu\ -ZKIGLWFsbG9jOjp2ZWM6OlZlYzxULEE+OjpwdXNoOjpoNzMxZDA4NGFlZGRjNmRlMqMGWWFsbG9jOj\ -p2ZWM6OmludG9faXRlcjo6SW50b0l0ZXI8VCxBPjo6Zm9yZ2V0X2FsbG9jYXRpb25fZHJvcF9yZW1h\ -aW5pbmc6Omg2YjNhODA2ZjNmYjFjMTk2pAZaPHNtYWxsdmVjOjpJbnRvSXRlcjxBPiBhcyBjb3JlOj\ -ppdGVyOjp0cmFpdHM6Oml0ZXJhdG9yOjpJdGVyYXRvcj46Om5leHQ6OmhkYzZkNTY1NzlhMTZmNmQ4\ -pQZWPGpzX3N5czo6QXJyYXlJdGVyIGFzIGNvcmU6Oml0ZXI6OnRyYWl0czo6aXRlcmF0b3I6Okl0ZX\ -JhdG9yPjo6bmV4dDo6aDkxNWIyOWJhMDE4NmNlMGamBlZjb3JlOjpzdHI6OnRyYWl0czo6PGltcGwg\ -Y29yZTo6b3BzOjppbmRleDo6SW5kZXg8ST4gZm9yIHN0cj46OmluZGV4OjpoY2FiMWVhZWUyYjhkMW\ -I1OKcGJXVybDo6VXJsOjpob3N0X3N0cjo6aDkwMWFkZjhlMTZhZTkzYWWoBkR1bmljb2RlX25vcm1h\ -bGl6YXRpb246Omxvb2t1cHM6OmlzX2NvbWJpbmluZ19tYXJrOjpoYTgxZjQwODIwMDhjNWIwNakGOX\ -NlcmRlX2pzb246OmVycm9yOjpFcnJvcjo6Zml4X3Bvc2l0aW9uOjpoMDg1MTYzNTViMjdkOWY2ZKoG\ -RWhhc2hicm93bjo6cmF3Ojppbm5lcjo6UmF3VGFibGU8VCxBPjo6cmVtb3ZlX2VudHJ5OjpoMmM2OD\ -k1MGE2NmIzOTc1NqsGO2hhc2hicm93bjo6bWFwOjpIYXNoTWFwPEssVixTLEE+OjpyZW1vdmU6Omgy\ -NTRmZDZjMDgyZTQ3Njg3rAZKaGFzaGJyb3duOjpyYXc6OlJhd1RhYmxlSW5uZXI8QT46OnJlY29yZF\ -9pdGVtX2luc2VydF9hdDo6aGZlM2VlYzM1NDg2ZjdjODCtBnU8ZGVub19jYWNoZV9kaXI6Omdsb2Jh\ -bDo6R2xvYmFsSHR0cENhY2hlPEVudj4gYXMgZGVub19jYWNoZV9kaXI6OmNhY2hlOjpIdHRwQ2FjaG\ -U+OjpjYWNoZV9pdGVtX2tleTo6aGZlMTRiNDIyZjY5MTE5NWOuBi9jb3JlOjpmbXQ6OkFyZ3VtZW50\ -czo6YXNfc3RyOjpoZjk4YjYzN2RkODY4N2FiNa8GOXNlcmRlX2pzb246OmVycm9yOjpFcnJvcjo6Zm\ -l4X3Bvc2l0aW9uOjpoNjBjNzUxYTM3YmQ1NjE5OLAGP3dhc21fYmluZGdlbjo6Y29udmVydDo6Y2xv\ -c3VyZXM6Omludm9rZTNfbXV0OjpoNzgxYjNmOGJhOGU3ODI1MbEGVmNvcmU6OnN0cjo6dHJhaXRzOj\ -o8aW1wbCBjb3JlOjpvcHM6OmluZGV4OjpJbmRleDxJPiBmb3Igc3RyPjo6aW5kZXg6OmgwY2ZmNTVm\ -ZTVlNWIyZTllsgYqdXJsOjpVcmw6OnBhdGhfc2VnbWVudHM6OmgwOGZlYWU2NDE4N2UzNmVjswY0dX\ -JsOjpwYXJzZXI6OlBhcnNlcjo6c2hvcnRlbl9wYXRoOjpoMzlkNjkyNzMwODdjNjc0OLQGZTxjb3Jl\ -OjphcnJheTo6aXRlcjo6SW50b0l0ZXI8VCxfPiBhcyBjb3JlOjppdGVyOjp0cmFpdHM6Oml0ZXJhdG\ -9yOjpJdGVyYXRvcj46Om5leHQ6Omg1OTAwOTIyNThjYTdiMjM2tQY6b25jZV9jZWxsOjppbXA6Ok9u\ -Y2VDZWxsPFQ+Ojppbml0aWFsaXplOjpoODk5OWI1YzYyZjI3ZDg5OLYGOm9uY2VfY2VsbDo6aW1wOj\ -pPbmNlQ2VsbDxUPjo6aW5pdGlhbGl6ZTo6aGFiNzIyODI4MmIxMjZhY2G3BkJkZW5vX2NhY2hlX2Rp\ -cjo6bG9jYWw6OkxvY2FsSHR0cENhY2hlPEVudj46Om5ldzo6aGI2ZGE3MWE3Mjk4Nzg3Yma4Blk8c2\ -VyZGVfanNvbjo6cmVhZDo6U2xpY2VSZWFkIGFzIHNlcmRlX2pzb246OnJlYWQ6OlJlYWQ+OjpwZWVr\ -X3Bvc2l0aW9uOjpoZjNmODRmZTMwZGM4NmQ4YrkGMHNlcmRlX2pzb246OnJlYWQ6OnBlZWtfb3JfZW\ -9mOjpoMjdkZTc2MGQ4YjExNTQ0YroGSGhhc2hicm93bjo6cmF3Ojppbm5lcjo6RmFsbGliaWxpdHk6\ -OmNhcGFjaXR5X292ZXJmbG93OjpoZjg4M2M3NzAzOTBhYTQxMbsGQWhhc2hicm93bjo6cmF3OjpGYW\ -xsaWJpbGl0eTo6Y2FwYWNpdHlfb3ZlcmZsb3c6OmhlZjliMTBiZjA4ZGFlZWM0vAYxY29tcGlsZXJf\ -YnVpbHRpbnM6Om1lbTo6bWVtY21wOjpoYjJhZjExOGFhYWRiZTI0NL0GOHNlcmRlX3dhc21fYmluZG\ -dlbjo6ZXJyb3I6OkVycm9yOjpuZXc6Omg1ZDgzMjJiMGQ2NDU4MDcxvgY3c2VyZGVfd2FzbV9iaW5k\ -Z2VuOjpkZTo6Y29udmVydF9wYWlyOjpoOTBjYTY2MzI4OGNmMTYxYb8GUDxzZXJkZV93YXNtX2Jpbm\ -RnZW46OmVycm9yOjpFcnJvciBhcyBjb3JlOjpmbXQ6OkRpc3BsYXk+OjpmbXQ6OmgyY2EyNDA5ZTE2\ -YWI4MGJjwAZKPHNtYWxsdmVjOjpDb2xsZWN0aW9uQWxsb2NFcnIgYXMgY29yZTo6Zm10OjpEZWJ1Zz\ -46OmZtdDo6aGRlYTczN2M1ZmZlOGIzZmHBBlZjb3JlOjpzdHI6OnRyYWl0czo6PGltcGwgY29yZTo6\ -b3BzOjppbmRleDo6SW5kZXg8ST4gZm9yIHN0cj46OmluZGV4OjpoNDMzZDUzYzhkZTQ0ZjYyN8IGNW\ -NvcmU6OnNsaWNlOjo8aW1wbCBbVF0+OjplbmRzX3dpdGg6Omg3NzE4MTVmNzNjNzE2ZGZiwwY3YWxs\ -b2M6OnZlYzo6VmVjPFQsQT46OmV4dGVuZF90cnVzdGVkOjpoNzY5ZGEyNjAyYTNiNWQ3ZsQGN2FsbG\ -9jOjp2ZWM6OlZlYzxULEE+OjpleHRlbmRfdHJ1c3RlZDo6aGMyN2I1MDdhYTI5MTJmNDjFBnpjb3Jl\ -OjpzdHI6OnRyYWl0czo6PGltcGwgY29yZTo6c2xpY2U6OmluZGV4OjpTbGljZUluZGV4PHN0cj4gZm\ -9yIGNvcmU6Om9wczo6cmFuZ2U6OlJhbmdlVG88dXNpemU+Pjo6Z2V0OjpoODcyZmZhMDAxODk5MjZj\ -ZsYGOHNlcmRlX3dhc21fYmluZGdlbjo6ZXJyb3I6OkVycm9yOjpuZXc6Omg3ZmI3YmM0MzQ4NzhhOT\ -A2xwZxPGRlbm9fY2FjaGVfZGlyOjp3YXNtOjpMb2NhbEh0dHBDYWNoZSBhcyB3YXNtX2JpbmRnZW46\ -OmNvbnZlcnQ6OnRyYWl0czo6SW50b1dhc21BYmk+OjppbnRvX2FiaTo6aGQ2Y2ViMTgzMGQ2ZTcxND\ -jIBjB3YXNtX2JpbmRnZW46OkpzVmFsdWU6OmFzX2Y2NDo6aGY5NWNlNjNmZTI5NjE2OGHJBjdjb3Jl\ -OjpzbGljZTo6PGltcGwgW1RdPjo6c3RhcnRzX3dpdGg6OmhmZmIzZGJkMjI1NDlkNjY1ygYuYWxsb2\ -M6OnN0cmluZzo6U3RyaW5nOjpwdXNoOjpoZmQ5YjkzYWE1ZjFjMmU2MMsGN2NvcmU6OnNsaWNlOjo8\ -aW1wbCBbVF0+OjpzdGFydHNfd2l0aDo6aDRiZTQ4NzYzZjNkMDI3MTnMBjdjb3JlOjpzbGljZTo6PG\ -ltcGwgW1RdPjo6c3RhcnRzX3dpdGg6OmhiZThkYTRlMWFjOWExYWMxzQYtanNfc3lzOjpVaW50OEFy\ -cmF5Ojp0b192ZWM6OmgyNmNhMTU5MDVhNGRjYWY4zgZ6Y29yZTo6c3RyOjp0cmFpdHM6OjxpbXBsIG\ -NvcmU6OnNsaWNlOjppbmRleDo6U2xpY2VJbmRleDxzdHI+IGZvciBjb3JlOjpvcHM6OnJhbmdlOjpS\ -YW5nZVRvPHVzaXplPj46OmdldDo6aDg3MmZmYTAwMTg5OTI2Y2bPBnpjb3JlOjpzdHI6OnRyYWl0cz\ -o6PGltcGwgY29yZTo6c2xpY2U6OmluZGV4OjpTbGljZUluZGV4PHN0cj4gZm9yIGNvcmU6Om9wczo6\ -cmFuZ2U6OlJhbmdlVG88dXNpemU+Pjo6Z2V0OjpoODcyZmZhMDAxODk5MjZjZtAGPWNvcmU6OmNoYX\ -I6Om1ldGhvZHM6OjxpbXBsIGNoYXI+Ojp0b19kaWdpdDo6aGYxMDQ3YTVjYjJmYTc0NTLRBixjb3Jl\ -OjplcnJvcjo6RXJyb3I6OmNhdXNlOjpoOTI5YWU3MzRjMTM3ZjljNtIGTjxhbnlob3c6OmVycm9yOj\ -pFcnJvckltcGw8RT4gYXMgY29yZTo6ZXJyb3I6OkVycm9yPjo6c291cmNlOjpoMzY3M2M5ZjFkOTIx\ -YTZjNtMGPXNlcmRlX2pzb246OmRlOjpEZXNlcmlhbGl6ZXI8Uj46Om5leHRfY2hhcjo6aGMwOGQzYm\ -M0NGJiOGIyNTXUBjdhbGxvYzo6dmVjOjpWZWM8VCxBPjo6ZXh0ZW5kX3RydXN0ZWQ6OmgxOThhM2Zj\ -M2U5OTQ5YzI31QY+aW5kZXhtYXA6Om1hcDo6SW5kZXhNYXA8SyxWLFM+OjppbnNlcnRfZnVsbDo6aD\ -cxM2NjNWQwMzI1OWM2NDXWBmQ8ZGVub19jYWNoZV9kaXI6Ondhc206Oldhc21FbnYgYXMgZGVub19j\ -YWNoZV9kaXI6OmNvbW1vbjo6RGVub0NhY2hlRW52Pjo6dGltZV9ub3c6OmhjMWZmZTRlYjI1OTE3Yz\ -li1wZVPHNlcmRlOjpkZTo6aW1wbHM6OlN0cmluZ1Zpc2l0b3IgYXMgc2VyZGU6OmRlOjpWaXNpdG9y\ -Pjo6dmlzaXRfc3RyOjpoNWE3ZmFhMzZmYWY4ODhjMtgGUDxzZXJkZV9qc29uOjpyZWFkOjpTbGljZV\ -JlYWQgYXMgc2VyZGVfanNvbjo6cmVhZDo6UmVhZD46Om5leHQ6OmhjYzFkZTE3Yzc1NjQ0OGY32QYq\ -anNfc3lzOjpGdW5jdGlvbjo6Y2FsbDA6OmhhNzZiOGM4YWZiM2I5ODFl2gYnanNfc3lzOjpSZWZsZW\ -N0OjpnZXQ6Omg1NDgxMTU3YmEzYmUzNGI42wYzdXJsOjpwYXJzZXI6OklucHV0OjpzcGxpdF9wcmVm\ -aXg6OmhhNTAzMDFhNGZmNzhlMGQ33AZRdW5pY29kZV9ub3JtYWxpemF0aW9uOjpkZWNvbXBvc2U6Ok\ -RlY29tcG9zaXRpb25zPEk+OjpwdXNoX2JhY2s6OmgxOTMzOWM2MGZkY2NhNTVi3QZRdW5pY29kZV9u\ -b3JtYWxpemF0aW9uOjpkZWNvbXBvc2U6OkRlY29tcG9zaXRpb25zPEk+OjpwdXNoX2JhY2s6Omg4YW\ -NkYmE5ZDdmOTdkZjgz3gY3Y29yZTo6c2xpY2U6OjxpbXBsIFtUXT46OnN0YXJ0c193aXRoOjpoNmIy\ -MDkyZGFkOTc1ZTU0N98GTXRpbnl2ZWM6OnRpbnl2ZWM6OlRpbnlWZWM8QT46OnB1c2g6OmRyYWluX3\ -RvX2hlYXBfYW5kX3B1c2g6OmhhZmRmOWFmZGRkNWE0ODUy4AY6PCZtdXQgVyBhcyBjb3JlOjpmbXQ6\ -OldyaXRlPjo6d3JpdGVfc3RyOjpoYjJhYTA0NTA2YjQ3ZjZhOOEGEl9fcmRsX2FsbG9jX3plcm9lZO\ -IGOjwmbXV0IFcgYXMgY29yZTo6Zm10OjpXcml0ZT46OndyaXRlX3N0cjo6aGY5ODdmNjA0NDYyNjRi\ -NzfjBjo8Jm11dCBXIGFzIGNvcmU6OmZtdDo6V3JpdGU+Ojp3cml0ZV9zdHI6OmhjNjIyMzc4NzcwOW\ -JiMTM05AZhPGNvcmU6Om9wczo6cmFuZ2U6OlJhbmdlPHVzaXplPiBhcyBjb3JlOjpzbGljZTo6aW5k\ -ZXg6OlNsaWNlSW5kZXg8W1RdPj46OmluZGV4OjpoZjdlYmU5MWE0Njg2Mjg3NeUGOWNvcmU6Om9wcz\ -o6ZnVuY3Rpb246OkZuT25jZTo6Y2FsbF9vbmNlOjpoMTA1ZDI0YTViYTg3YTZhZOYG1AFjb3JlOjpw\ -dHI6OmRyb3BfaW5fcGxhY2U8aGFzaGJyb3duOjpzY29wZWd1YXJkOjpTY29wZUd1YXJkPGhhc2hicm\ -93bjo6cmF3OjpSYXdUYWJsZUlubmVyPGFsbG9jOjphbGxvYzo6R2xvYmFsPixoYXNoYnJvd246OnJh\ -dzo6UmF3VGFibGVJbm5lcjxhbGxvYzo6YWxsb2M6Okdsb2JhbD46OnByZXBhcmVfcmVzaXplOjp7e2\ -Nsb3N1cmV9fT4+OjpoNDYwZjY3ZGIyZmE3MWRiYecGVDxzZXJkZV9qc29uOjpzZXI6OkNvbXBvdW5k\ -PFcsRj4gYXMgc2VyZGU6OnNlcjo6U2VyaWFsaXplTWFwPjo6ZW5kOjpoNTQwMTUzNWUxZGRhZWVlYe\ -gGwQE8ZGVub19jYWNoZV9kaXI6OmNhY2hlOjpfOjo8aW1wbCBzZXJkZTo6ZGU6OkRlc2VyaWFsaXpl\ -IGZvciBkZW5vX2NhY2hlX2Rpcjo6Y2FjaGU6OlNlcmlhbGl6ZWRDYWNoZWRVcmxNZXRhZGF0YT46Om\ -Rlc2VyaWFsaXplOjpfX0ZpZWxkVmlzaXRvciBhcyBzZXJkZTo6ZGU6OlZpc2l0b3I+Ojp2aXNpdF9z\ -dHI6Omg4OTVjZmJjM2U2ZTI1MDY06QZHaGFzaGJyb3duOjpyYXc6OmlubmVyOjpSYXdUYWJsZTxULE\ -E+OjppbnNlcnRfaW5fc2xvdDo6aGI4M2E4Mjk1MGMzNmRjZTTqBitzZXJkZV9qc29uOjpyZWFkOjph\ -c19zdHI6OmhlZjc3MTVlYjg2Y2YwNWNj6wZoPGFsbG9jOjpzdHJpbmc6OlN0cmluZyBhcyBjb3JlOj\ -ppdGVyOjp0cmFpdHM6OmNvbGxlY3Q6OkZyb21JdGVyYXRvcjxjaGFyPj46OmZyb21faXRlcjo6aGNm\ -Y2YxZmVhMWFiNGYzNGHsBjN1cmw6OnBhcnNlcjo6SW5wdXQ6OnNwbGl0X3ByZWZpeDo6aDgwODcyYz\ -ZjMmY2NjMwYjXtBiJ1cmw6OlVybDo6c2xpY2U6OmhlZGZhNjU3OTUzYjI0NzVk7gZlPGNvcmU6Om9w\ -czo6cmFuZ2U6OlJhbmdlPHVzaXplPiBhcyBjb3JlOjpzbGljZTo6aW5kZXg6OlNsaWNlSW5kZXg8W1\ -RdPj46OmluZGV4X211dDo6aGFmZjU0Nzg3MjAxY2IzOTTvBmU8Y29yZTo6b3BzOjpyYW5nZTo6UmFu\ -Z2U8dXNpemU+IGFzIGNvcmU6OnNsaWNlOjppbmRleDo6U2xpY2VJbmRleDxbVF0+Pjo6aW5kZXhfbX\ -V0OjpoYmI2OWM3ZmQyODQ1NzI0Y/AGLWFsbG9jOjp2ZWM6OlZlYzxULEE+OjpwdXNoOjpoMjViMmI5\ -MjZmYzUwYWQzY/EGTXRpbnl2ZWM6OnRpbnl2ZWM6OlRpbnlWZWM8QT46OnB1c2g6OmRyYWluX3RvX2\ -hlYXBfYW5kX3B1c2g6OmhlNzdkMzc5NjcxOGFmYTIz8gYzY29yZTo6Y2hhcjo6Q2FzZU1hcHBpbmdJ\ -dGVyOjpuZXc6Omg1NDI4OTQ3NDUzY2ZhNDcx8wZOPGFueWhvdzo6ZXJyb3I6OkVycm9ySW1wbDxFPi\ -BhcyBjb3JlOjplcnJvcjo6RXJyb3I+Ojpzb3VyY2U6OmgyNzMxODFhMGVkYzc5ZWY49AZOPGFueWhv\ -dzo6ZXJyb3I6OkVycm9ySW1wbDxFPiBhcyBjb3JlOjplcnJvcjo6RXJyb3I+Ojpzb3VyY2U6OmgwYz\ -JlZmZmM2I3OWI0ZDdl9QZOPGFueWhvdzo6ZXJyb3I6OkVycm9ySW1wbDxFPiBhcyBjb3JlOjplcnJv\ -cjo6RXJyb3I+Ojpzb3VyY2U6OmhlM2Y0NDRkNTA4YTc5NzMx9gZOPGFueWhvdzo6ZXJyb3I6OkVycm\ -9ySW1wbDxFPiBhcyBjb3JlOjplcnJvcjo6RXJyb3I+Ojpzb3VyY2U6Omg3YjRhMzYyZTI4MjI2OTNi\ -9wY/aGFzaGJyb3duOjpyYXc6OmlubmVyOjpSYXdUYWJsZTxULEE+OjpyZW1vdmU6OmhjNGUwYWFjNG\ -E0ZjBmMGIw+AaHAXdhc21fYmluZGdlbjo6Y29udmVydDo6c2xpY2VzOjo8aW1wbCB3YXNtX2JpbmRn\ -ZW46OmNvbnZlcnQ6OnRyYWl0czo6RnJvbVdhc21BYmkgZm9yIGFsbG9jOjpzdHJpbmc6OlN0cmluZz\ -46OmZyb21fYWJpOjpoMGQ3NjNlMzg5YzUwNGIxMPkGSTxzbWFsbHZlYzo6U21hbGxWZWM8QT4gYXMg\ -Y29yZTo6b3BzOjpkcm9wOjpEcm9wPjo6ZHJvcDo6aDg2OGVmODk2MDBlYzFlNjb6BjRjb3JlOjpyZX\ -N1bHQ6OlJlc3VsdDxULEU+Ojp1bndyYXA6Omg5NmU5NmE5ODEzOGQwODZm+wY4anNfc3lzOjpJdGVy\ -YXRvcjo6bG9va3NfbGlrZV9pdGVyYXRvcjo6aGRiOTY1MDliODM4OTdkMmX8Bilqc19zeXM6Okl0ZX\ -JhdG9yOjpuZXh0OjpoZDIxNGQ1ODRiYjdlNDYxMP0GNGNvcmU6OnJlc3VsdDo6UmVzdWx0PFQsRT46\ -OnVud3JhcDo6aDE1MGUzNzI2MmFjMTExYjb+Bmg8YWxsb2M6OnN0cmluZzo6U3RyaW5nIGFzIGNvcm\ -U6Oml0ZXI6OnRyYWl0czo6Y29sbGVjdDo6RnJvbUl0ZXJhdG9yPGNoYXI+Pjo6ZnJvbV9pdGVyOjpo\ -MTlhNTk1ZDVkZWMzNTFmZf8GInVybDo6VXJsOjpzbGljZTo6aDZmZjkwMDRiOWYxZjZjNDOAByJ1cm\ -w6OlVybDo6c2xpY2U6OmgyNTkxZmMzNjMzNGEzYzI2gQdrPHN0ZDo6cGFuaWNraW5nOjpiZWdpbl9w\ -YW5pY19oYW5kbGVyOjpTdHJQYW5pY1BheWxvYWQgYXMgY29yZTo6cGFuaWM6OkJveE1lVXA+Ojp0YW\ -tlX2JveDo6aGIwYzUzOWI3YTQ4ZjNmNDiCBzhzdGQ6OnN5czo6d2FzbTo6b3Nfc3RyOjpTbGljZTo6\ -dG9fc3RyOjpoZDYzMDQxZDRkYWI3NWQ4N4MHKWNvcmU6OnBhbmlja2luZzo6cGFuaWM6OmgwNGIyOD\ -M1ZWY5YjQxZDE5hAdwPGhhc2hicm93bjo6cmF3Ojppbm5lcjo6Yml0bWFzazo6Qml0TWFza0l0ZXIg\ -YXMgY29yZTo6aXRlcjo6dHJhaXRzOjppdGVyYXRvcjo6SXRlcmF0b3I+OjpuZXh0OjpoYTM2NTVjMz\ -QxZjk4MTc4OIUHYTxjb3JlOjpvcHM6OnJhbmdlOjpSYW5nZTx1c2l6ZT4gYXMgY29yZTo6c2xpY2U6\ -OmluZGV4OjpTbGljZUluZGV4PFtUXT4+OjppbmRleDo6aDNlOTU2ZDA2ZjZhYzRkNWKGBzBzZXJkZT\ -o6ZGU6OlZpc2l0b3I6OnZpc2l0X2Y2NDo6aGU4MzNjZDI0ZmRhZDMyMzGHBzBzZXJkZTo6ZGU6OlZp\ -c2l0b3I6OnZpc2l0X2Y2NDo6aDUyNmIyYzIxNzAyNzY4ZTKIBzVjb25zb2xlX2Vycm9yX3BhbmljX2\ -hvb2s6OnNldF9vbmNlOjpoM2QyZjA0OGI5Yjg1Y2I4YokHXTxpbmRleG1hcDo6c2VyZGU6OkluZGV4\ -TWFwVmlzaXRvcjxLLFYsUz4gYXMgc2VyZGU6OmRlOjpWaXNpdG9yPjo6ZXhwZWN0aW5nOjpoMGFmM2\ -NkYjM5OTQwOWUzOIoHd2NvcmU6Oml0ZXI6OnJhbmdlOjo8aW1wbCBjb3JlOjppdGVyOjp0cmFpdHM6\ -Oml0ZXJhdG9yOjpJdGVyYXRvciBmb3IgY29yZTo6b3BzOjpyYW5nZTo6UmFuZ2U8QT4+OjpudGg6Om\ -gwMWFmMWJjZjg3MmQyNDFjiwc+PFEgYXMgaGFzaGJyb3duOjpFcXVpdmFsZW50PEs+Pjo6ZXF1aXZh\ -bGVudDo6aGU4NTBiMDgxZmU2YTAzOWaMB1RzZXJkZTo6c2VyOjppbXBsczo6PGltcGwgc2VyZGU6On\ -Nlcjo6U2VyaWFsaXplIGZvciAmVD46OnNlcmlhbGl6ZTo6aDUzYWMxMzJkMDIyNTNkMTONBz5pbmRl\ -eG1hcDo6bWFwOjpJbmRleE1hcDxLLFYsUz46Omluc2VydF9mdWxsOjpoOWE4Y2ZjY2M0MGQ2NzQ1N4\ -4HPmluZGV4bWFwOjptYXA6OkluZGV4TWFwPEssVixTPjo6aW5zZXJ0X2Z1bGw6OmhkOTk4OGQ0MmFm\ -Y2VmMzExjwc/aW5kZXhtYXA6Om1hcDo6Y29yZTo6ZXF1aXZhbGVudDo6e3tjbG9zdXJlfX06Omg5N2\ -U4NTFlZTkzZWFkMDA0kAc/aW5kZXhtYXA6Om1hcDo6Y29yZTo6ZXF1aXZhbGVudDo6e3tjbG9zdXJl\ -fX06OmhmNDRjMzg2NDYwZmZmNjQ5kQdUaGFzaGJyb3duOjpyYXc6OmlubmVyOjpSYXdUYWJsZTxULE\ -E+OjpyZXNlcnZlX3JlaGFzaDo6e3tjbG9zdXJlfX06Omg4NTJmYTQ0YTFmNDZmZjQ2kgdUaGFzaGJy\ -b3duOjpyYXc6OmlubmVyOjpSYXdUYWJsZTxULEE+OjpyZXNlcnZlX3JlaGFzaDo6e3tjbG9zdXJlfX\ -06Omg3NTMxYzBjMGRmMTg2YmIykwdUaGFzaGJyb3duOjpyYXc6OmlubmVyOjpSYXdUYWJsZTxULEE+\ -OjpyZXNlcnZlX3JlaGFzaDo6e3tjbG9zdXJlfX06Omg4ODQxNzYxMDI3OWJkYzYwlAdhPGNvcmU6Om\ -9wczo6cmFuZ2U6OlJhbmdlPHVzaXplPiBhcyBjb3JlOjpzbGljZTo6aW5kZXg6OlNsaWNlSW5kZXg8\ -W1RdPj46OmluZGV4OjpoZjRmNWMxZWZhMjA4N2ZjYZUHNGNvcmU6Om9wdGlvbjo6T3B0aW9uPFQ+Oj\ -phbmRfdGhlbjo6aGI4YTkyODAzNzZkM2JkNmaWB0JwYXJraW5nX2xvdF9jb3JlOjpwYXJraW5nX2xv\ -dDo6Y3JlYXRlX2hhc2h0YWJsZTo6aDVmZDI4NzNhMDQ4MDAyZjCXB088YWxsb2M6OnJhd192ZWM6Ol\ -Jhd1ZlYzxULEE+IGFzIGNvcmU6Om9wczo6ZHJvcDo6RHJvcD46OmRyb3A6Omg4ZGUzMjgxNGVjOGE4\ -NTU1mAdhPGNvcmU6Om9wczo6cmFuZ2U6OlJhbmdlPHVzaXplPiBhcyBjb3JlOjpzbGljZTo6aW5kZX\ -g6OlNsaWNlSW5kZXg8W1RdPj46OmluZGV4OjpoZDI2OTNjNjJjNGM1ZDM4MJkHYTxjb3JlOjpvcHM6\ -OnJhbmdlOjpSYW5nZTx1c2l6ZT4gYXMgY29yZTo6c2xpY2U6OmluZGV4OjpTbGljZUluZGV4PFtUXT\ -4+OjppbmRleDo6aDNhMDNlMGU2N2MxYWMwNDKaB2U8Y29yZTo6b3BzOjpyYW5nZTo6UmFuZ2U8dXNp\ -emU+IGFzIGNvcmU6OnNsaWNlOjppbmRleDo6U2xpY2VJbmRleDxbVF0+Pjo6aW5kZXhfbXV0OjpoMG\ -NiMjFhNTQzNjdhNjY0ZJsHYTxjb3JlOjpvcHM6OnJhbmdlOjpSYW5nZTx1c2l6ZT4gYXMgY29yZTo6\ -c2xpY2U6OmluZGV4OjpTbGljZUluZGV4PFtUXT4+OjppbmRleDo6aGYyMjhmYjBlMjVlMWFhMGOcB0\ -o8YWxsb2M6OnN0cmluZzo6RnJvbVV0ZjhFcnJvciBhcyBjb3JlOjpmbXQ6OkRlYnVnPjo6Zm10Ojpo\ -NGZlM2YyODEzNDYyMjdmM50HiQF3YXNtX2JpbmRnZW46OmNvbnZlcnQ6OnNsaWNlczo6PGltcGwgd2\ -FzbV9iaW5kZ2VuOjpjb252ZXJ0Ojp0cmFpdHM6OkZyb21XYXNtQWJpIGZvciBhbGxvYzo6Ym94ZWQ6\ -OkJveDxbdThdPj46OmZyb21fYWJpOjpoOGUyZTg4NzcwZmU0YjIzY54HOGNvcmU6OnNsaWNlOjo8aW\ -1wbCBbVF0+OjpzcGxpdF9hdF9tdXQ6Omg4MGY4ODFlM2Y1OTExYjRhnwc1Y29yZTo6cmVzdWx0OjpS\ -ZXN1bHQ8VCxFPjo6bWFwX2Vycjo6aGVmNjJhZmE4OGFkYWIyMGKgB9oBPGRlbm9fY2FjaGVfZGlyOj\ -psb2NhbDo6bWFuaWZlc3Q6Ol86OjxpbXBsIHNlcmRlOjpkZTo6RGVzZXJpYWxpemUgZm9yIGRlbm9f\ -Y2FjaGVfZGlyOjpsb2NhbDo6bWFuaWZlc3Q6OlNlcmlhbGl6ZWRMb2NhbENhY2hlTWFuaWZlc3REYX\ -RhPjo6ZGVzZXJpYWxpemU6Ol9fRmllbGRWaXNpdG9yIGFzIHNlcmRlOjpkZTo6VmlzaXRvcj46OnZp\ -c2l0X3N0cjo6aDM5ODA0NmI5OWNmNzA5NzehB3A8YWxsb2M6OnN0cmluZzo6U3RyaW5nIGFzIGNvcm\ -U6Om9wczo6aW5kZXg6OkluZGV4PGNvcmU6Om9wczo6cmFuZ2U6OlJhbmdlRnJvbTx1c2l6ZT4+Pjo6\ -aW5kZXg6OmhiNDRhYjk0YjBiYjJjOGQ3ogdwPGFsbG9jOjpzdHJpbmc6OlN0cmluZyBhcyBjb3JlOj\ -pvcHM6OmluZGV4OjpJbmRleDxjb3JlOjpvcHM6OnJhbmdlOjpSYW5nZUZyb208dXNpemU+Pj46Omlu\ -ZGV4OjpoYjQ0YWI5NGIwYmIyYzhkN6MHcDxhbGxvYzo6c3RyaW5nOjpTdHJpbmcgYXMgY29yZTo6b3\ -BzOjppbmRleDo6SW5kZXg8Y29yZTo6b3BzOjpyYW5nZTo6UmFuZ2VGcm9tPHVzaXplPj4+OjppbmRl\ -eDo6aGI0NGFiOTRiMGJiMmM4ZDekBy5zdGQ6OnBhdGg6OlBhdGg6OmNvbXBvbmVudHM6Omg4MGRjNW\ -E5NmI2NGU4ZWVmpQcwYWxsb2M6OmFsbG9jOjpleGNoYW5nZV9tYWxsb2M6Omg2YjMzMzU2ZTkxNTVl\ -MjAzpgdIPGFsbG9jOjp2ZWM6OlZlYzxULEE+IGFzIGNvcmU6Om9wczo6ZHJvcDo6RHJvcD46OmRyb3\ -A6OmhkYmNiMDY0ODRkZmQ3NDY0pwcxY29yZTo6cHRyOjpzd2FwX25vbm92ZXJsYXBwaW5nOjpoOWJm\ -ZDE2MzIzNTM1YjMwMagHSDxhbGxvYzo6dmVjOjpWZWM8VCxBPiBhcyBjb3JlOjpvcHM6OmRyb3A6Ok\ -Ryb3A+Ojpkcm9wOjpoZTc2OGIyNGU0YTI0ZjBmOKkHSTxzZXJkZV9qc29uOjplcnJvcjo6RXJyb3Ig\ -YXMgc2VyZGU6OmRlOjpFcnJvcj46OmN1c3RvbTo6aDI2ZjM3MzEwYmE2M2ZjYmSqBzZhbGxvYzo6dm\ -VjOjpWZWM8VCxBPjo6c2hyaW5rX3RvX2ZpdDo6aGU3YjdlMmU4ZjkwNzI1OWOrBzBhbGxvYzo6YWxs\ -b2M6OmV4Y2hhbmdlX21hbGxvYzo6aDZiMzMzNTZlOTE1NWUyMDOsBzZhbGxvYzo6dmVjOjpWZWM8VC\ -xBPjo6c2hyaW5rX3RvX2ZpdDo6aDQ1NmM2Zjg5MTQyNzQ3NjetBzZhbGxvYzo6dmVjOjpWZWM8VCxB\ -Pjo6c2hyaW5rX3RvX2ZpdDo6aGI2NjEyYzcyZWYyNjNmNDOuBzBhbGxvYzo6YWxsb2M6OmV4Y2hhbm\ -dlX21hbGxvYzo6aDZiMzMzNTZlOTE1NWUyMDOvB2M8c3RkOjpwYW5pY2tpbmc6OmJlZ2luX3Bhbmlj\ -OjpQYW5pY1BheWxvYWQ8QT4gYXMgY29yZTo6cGFuaWM6OkJveE1lVXA+Ojp0YWtlX2JveDo6aGFhZG\ -FhY2Y4MTFiNDhiMjmwB4ABPGNvcmU6Oml0ZXI6OmFkYXB0ZXJzOjpjb3BpZWQ6OkNvcGllZDxJPiBh\ -cyBjb3JlOjppdGVyOjp0cmFpdHM6OmRvdWJsZV9lbmRlZDo6RG91YmxlRW5kZWRJdGVyYXRvcj46Om\ -5leHRfYmFjazo6aDZlNzY4ZmRjZDUwZjBlODCxB1djb3JlOjpzbGljZTo6aW5kZXg6OjxpbXBsIGNv\ -cmU6Om9wczo6aW5kZXg6OkluZGV4PEk+IGZvciBbVF0+OjppbmRleDo6aGUzMWY1MTFkYzk3ODhjNG\ -OyB15jb3JlOjpzbGljZTo6aW5kZXg6OjxpbXBsIGNvcmU6Om9wczo6aW5kZXg6OkluZGV4TXV0PEk+\ -IGZvciBbVF0+OjppbmRleF9tdXQ6OmhhY2M0Mjk3NDUzNzFkMDZlswdaY29yZTo6YXJyYXk6OjxpbX\ -BsIGNvcmU6Om9wczo6aW5kZXg6OkluZGV4TXV0PEk+IGZvciBbVDsgTl0+OjppbmRleF9tdXQ6Omhj\ -MTBmYTgyOTAyOGMxNWFmtAc2YWxsb2M6OnZlYzo6VmVjPFQsQT46OnNocmlua190b19maXQ6Omg2Zj\ -JlNjg5M2U1ZjY0NzYwtQc2YWxsb2M6OnZlYzo6VmVjPFQsQT46OnNocmlua190b19maXQ6OmhhY2Iy\ -ZGIyNTc4NzA3NzUxtgctdXJsOjpVcmw6OmNhbm5vdF9iZV9hX2Jhc2U6OmhlNzI3YTcxZjgxMmRiYz\ -c3twdsPGNvcmU6Oml0ZXI6OmFkYXB0ZXJzOjptYXA6Ok1hcDxJLEY+IGFzIGNvcmU6Oml0ZXI6OnRy\ -YWl0czo6aXRlcmF0b3I6Okl0ZXJhdG9yPjo6dHJ5X2ZvbGQ6Omg5NTk4YmYxMWFlN2I2MjM1uActYW\ -xsb2M6OnZlYzo6VmVjPFQsQT46OnB1c2g6Omg2OTdlODBmMTdhZjJlZGQ2uQcwYWxsb2M6OmFsbG9j\ -OjpleGNoYW5nZV9tYWxsb2M6Omg2YjMzMzU2ZTkxNTVlMjAzugcuc3RkOjppbzo6ZXJyb3I6OkVycm\ -9yOjpfbmV3OjpoN2E4ZTYwMjA1N2IxZmZkZbsHSDxzdGQ6OnBhdGg6OlBhdGhCdWYgYXMgY29yZTo6\ -Y29udmVydDo6RnJvbTwmVD4+Ojpmcm9tOjpoODI0NDZmYmJkZGNmMzVlNLwHLGFsbG9jOjp2ZWM6Ol\ -ZlYzxULEE+Ojpwb3A6OmhhMjQ4ZGUzMTE3ZWE2MWU1vQc1Y29yZTo6cmVzdWx0OjpSZXN1bHQ8VCxF\ -Pjo6bWFwX2Vycjo6aDZhNGNiODk2ZjgxMDA5MGS+BzphbGxvYzo6dmVjOjpWZWM8VCxBPjo6dHJ5X3\ -Jlc2VydmVfZXhhY3Q6OmgwN2IxODM2NDVmMmQxNjEyvwc6YWxsb2M6OnZlYzo6VmVjPFQsQT46OnRy\ -eV9yZXNlcnZlX2V4YWN0OjpoMTUwZGE3NmQ5ZmNiNmYxZcAHOmFsbG9jOjp2ZWM6OlZlYzxULEE+Oj\ -p0cnlfcmVzZXJ2ZV9leGFjdDo6aDQzOGNhMmE0ZGYyNjllNjDBByxhbnlob3c6OmVycm9yOjpvYmpl\ -Y3RfcmVmOjpoMTUwY2YxZjczNjM1ZjFkNcIHLGFueWhvdzo6ZXJyb3I6Om9iamVjdF9yZWY6OmgyOT\ -kxOTM3MGQ3ZjY2MmI4wwcsYW55aG93OjplcnJvcjo6b2JqZWN0X3JlZjo6aDYyYzY5ZTk3YzU0OTUx\ -MjnEByxhbnlob3c6OmVycm9yOjpvYmplY3RfcmVmOjpoOWI5YTlmZTUwMTk2OWQ4MMUHLGFueWhvdz\ -o6ZXJyb3I6Om9iamVjdF9yZWY6OmhjZTc4NDg4YTE3MWNjN2MzxgdBYW55aG93OjplcnJvcjo6PGlt\ -cGwgYW55aG93OjpFcnJvcj46OmNvbnN0cnVjdDo6aDY3NTVhNzQwYzE1ZDVlNmTHBz9pbmRleG1hcD\ -o6bWFwOjpjb3JlOjplcXVpdmFsZW50Ojp7e2Nsb3N1cmV9fTo6aGE1NTExY2JlMTgwOGUxYmTIB0ho\ -YXNoYnJvd246OnJhdzo6UmF3VGFibGVJbm5lcjxBPjo6cHJlcGFyZV9pbnNlcnRfc2xvdDo6aDU5Yz\ -I3MjgzZjg3NGU5NDTJB0hoYXNoYnJvd246OnJhdzo6aW5uZXI6OlJhd1RhYmxlSW5uZXI8QT46OmZy\ -ZWVfYnVja2V0czo6aDU5ZjZkYTllYzI3OWQ2YmPKBypzZXJkZV9qc29uOjpyZWFkOjplcnJvcjo6aD\ -c2ODdiMTU2NmQyODQyYmLLBypzZXJkZV9qc29uOjpyZWFkOjplcnJvcjo6aDAwODcyZGYyZmZkYjJk\ -MTLMBypzZXJkZV9qc29uOjpyZWFkOjplcnJvcjo6aGNjNmYxODg0M2RiMWU1YTPNBypzZXJkZV9qc2\ -9uOjpyZWFkOjplcnJvcjo6aGFlZmJiYmJjNDUyNWYzMTXOB2w8Y29yZTo6aXRlcjo6YWRhcHRlcnM6\ -OmNvcGllZDo6Q29waWVkPEk+IGFzIGNvcmU6Oml0ZXI6OnRyYWl0czo6aXRlcmF0b3I6Okl0ZXJhdG\ -9yPjo6bmV4dDo6aDdjY2JlYjAxMDA1ZjdhMGPPBzVjb3JlOjpzdHI6OjxpbXBsIHN0cj46OnN0YXJ0\ -c193aXRoOjpoOTMwZjE1NDQ3N2Q1OTExNdAHXzwmbXV0IEkgYXMgY29yZTo6aXRlcjo6dHJhaXRzOj\ -pkb3VibGVfZW5kZWQ6OkRvdWJsZUVuZGVkSXRlcmF0b3I+OjpuZXh0X2JhY2s6OmhhNTA4OGQ1NjM4\ -MmFlOTVh0Qc1Y29yZTo6c3RyOjo8aW1wbCBzdHI+OjpzdGFydHNfd2l0aDo6aDdhYzE3OWNiMzAyZT\ -gxZjbSBzNjb3JlOjpzdHI6OjxpbXBsIHN0cj46OmVuZHNfd2l0aDo6aGEwM2Y4ZGM2N2NhMDQ0YjLT\ -B1pjb3JlOjphcnJheTo6PGltcGwgY29yZTo6b3BzOjppbmRleDo6SW5kZXhNdXQ8ST4gZm9yIFtUOy\ -BOXT46OmluZGV4X211dDo6aGE0MjQ4NDEwNGQxODI3NTLUB1U8anNfc3lzOjpJbnRvSXRlciBhcyBj\ -b3JlOjppdGVyOjp0cmFpdHM6Oml0ZXJhdG9yOjpJdGVyYXRvcj46Om5leHQ6Omg5YTEwZTMyMTdkNj\ -ZkOWM21QcqdXJsOjpwYXJzZXI6OklucHV0OjpuZXc6OmgzMzRlZjkzNmM0ODRiOTIx1gcydXJsOjpw\ -YXJzZXI6OmlzX2FzY2lpX2hleF9kaWdpdDo6aDUwMzYwOWM1NzNjNTJjNjTXB2w8Y29yZTo6aXRlcj\ -o6YWRhcHRlcnM6OmNvcGllZDo6Q29waWVkPEk+IGFzIGNvcmU6Oml0ZXI6OnRyYWl0czo6aXRlcmF0\ -b3I6Okl0ZXJhdG9yPjo6bmV4dDo6aDcwYWZkOWIwZWVkMTBhNWPYBzVjb3JlOjpzdHI6OjxpbXBsIH\ -N0cj46OnN0YXJ0c193aXRoOjpoOGJiMDUxYTJlOGNkZTcxMdkHM2NvcmU6OnN0cjo6PGltcGwgc3Ry\ -Pjo6ZW5kc193aXRoOjpoY2FlYjczZGQzYzdhYWYwM9oHMmFueWhvdzo6ZXJyb3I6OkVycm9ySW1wbD\ -o6ZXJyb3I6OmgwNDY3ZjNlMTJiMjFlMTJm2wdIPGRsbWFsbG9jOjpzeXM6OlN5c3RlbSBhcyBkbG1h\ -bGxvYzo6QWxsb2NhdG9yPjo6YWxsb2M6OmhhYmNiNzJiYjYwZDEzMDgx3AdDY29yZTo6Zm10OjpGb3\ -JtYXR0ZXI6OnBhZF9pbnRlZ3JhbDo6d3JpdGVfcHJlZml4OjpoNjkxNTBjYzg2MDlhZTQ4Y90HS2Nv\ -cmU6OmZtdDo6ZmxvYXQ6OjxpbXBsIGNvcmU6OmZtdDo6RGlzcGxheSBmb3IgZjY0Pjo6Zm10OjpoMW\ -NiNDI3MzFlMzUzNjZhYd4HWDxhbGxvYzo6dmVjOjppbnRvX2l0ZXI6OkludG9JdGVyPFQsQT4gYXMg\ -Y29yZTo6b3BzOjpkcm9wOjpEcm9wPjo6ZHJvcDo6aDNjMTA1MTNlMmY0Y2VjNmLfBzd3YXNtX2Jpbm\ -RnZW46OmNhc3Q6OkpzQ2FzdDo6ZHluX2ludG86OmgzYjE1MjZmMzcxMGFhYWFh4AdCY29yZTo6cHRy\ -Ojpkcm9wX2luX3BsYWNlPHN0ZDo6aW86OmVycm9yOjpFcnJvcj46Omg2MTI3MTI0ODEzZWE5Yzhl4Q\ -dIPGFsbG9jOjp2ZWM6OlZlYzxULEE+IGFzIGNvcmU6Om9wczo6ZHJvcDo6RHJvcD46OmRyb3A6Omgw\ -NjMxOWVlMmI0YWI1Yjky4gc0Y29yZTo6cmVzdWx0OjpSZXN1bHQ8VCxFPjo6dW53cmFwOjpoMzI3ZD\ -gwMWExZjRiOTJiOeMHTTxhbGxvYzo6YWxsb2M6Okdsb2JhbCBhcyBjb3JlOjphbGxvYzo6QWxsb2Nh\ -dG9yPjo6YWxsb2NhdGU6OmhmZjhmNjg4OGUyNWJiZmE45AdUPGFsbG9jOjphbGxvYzo6R2xvYmFsIG\ -FzIGNvcmU6OmFsbG9jOjpBbGxvY2F0b3I+OjphbGxvY2F0ZV96ZXJvZWQ6OmgzODNjNDFmNjQ0M2M4\ -ODFh5Qc5aW5kZXhtYXA6Om1hcDo6SW5kZXhNYXA8SyxWLFM+OjppbnNlcnQ6OmgxMzE5NTI4NDI3Nz\ -ZmODhk5gc5aW5kZXhtYXA6Om1hcDo6SW5kZXhNYXA8SyxWLFM+OjppbnNlcnQ6Omg1OGQ0MWQ4ZDYx\ -YWE2YzIy5wd5PGRlbm9fY2FjaGVfZGlyOjp3YXNtOjpHbG9iYWxIdHRwQ2FjaGUgYXMgd2FzbV9iaW\ -5kZ2VuOjpjb252ZXJ0Ojp0cmFpdHM6OlJlZkZyb21XYXNtQWJpPjo6cmVmX2Zyb21fYWJpOjpoNTVh\ -YWM2YzBkYjM0N2RmNegHeDxkZW5vX2NhY2hlX2Rpcjo6d2FzbTo6TG9jYWxIdHRwQ2FjaGUgYXMgd2\ -FzbV9iaW5kZ2VuOjpjb252ZXJ0Ojp0cmFpdHM6OlJlZkZyb21XYXNtQWJpPjo6cmVmX2Zyb21fYWJp\ -OjpoOGE2MmIxZTkyMjdiZjcwOekHQmNvcmU6OnB0cjo6ZHJvcF9pbl9wbGFjZTxzdGQ6OmlvOjplcn\ -Jvcjo6RXJyb3I+OjpoMjhjZjI1OWM5OWMxM2RhZuoHTTxhbGxvYzo6YWxsb2M6Okdsb2JhbCBhcyBj\ -b3JlOjphbGxvYzo6QWxsb2NhdG9yPjo6YWxsb2NhdGU6OmhmZjhmNjg4OGUyNWJiZmE46wdUPGFsbG\ -9jOjphbGxvYzo6R2xvYmFsIGFzIGNvcmU6OmFsbG9jOjpBbGxvY2F0b3I+OjphbGxvY2F0ZV96ZXJv\ -ZWQ6OmgzODNjNDFmNjQ0M2M4ODFh7AdUPHNlcmRlX2pzb246OnJlYWQ6OlNsaWNlUmVhZCBhcyBzZX\ -JkZV9qc29uOjpyZWFkOjpSZWFkPjo6cG9zaXRpb246OmgwMjU2NmFhZGVhNWQwNWE47QdNPGFsbG9j\ -OjphbGxvYzo6R2xvYmFsIGFzIGNvcmU6OmFsbG9jOjpBbGxvY2F0b3I+OjphbGxvY2F0ZTo6aGZmOG\ -Y2ODg4ZTI1YmJmYTjuB0g8YWxsb2M6OnZlYzo6VmVjPFQsQT4gYXMgY29yZTo6b3BzOjpkcm9wOjpE\ -cm9wPjo6ZHJvcDo6aGE4ZDA0YTRkNWM0YjE5NjnvB1s8Y29yZTo6c3RyOjppdGVyOjpCeXRlcyBhcy\ -Bjb3JlOjppdGVyOjp0cmFpdHM6Oml0ZXJhdG9yOjpJdGVyYXRvcj46Om5leHQ6OmhiNDczNTEzYTUw\ -ZWM1N2Zl8AdNPGFsbG9jOjphbGxvYzo6R2xvYmFsIGFzIGNvcmU6OmFsbG9jOjpBbGxvY2F0b3I+Oj\ -phbGxvY2F0ZTo6aGZmOGY2ODg4ZTI1YmJmYTjxB008YWxsb2M6OmFsbG9jOjpHbG9iYWwgYXMgY29y\ -ZTo6YWxsb2M6OkFsbG9jYXRvcj46OmFsbG9jYXRlOjpoZmY4ZjY4ODhlMjViYmZhOPIHVDxhbGxvYz\ -o6YWxsb2M6Okdsb2JhbCBhcyBjb3JlOjphbGxvYzo6QWxsb2NhdG9yPjo6YWxsb2NhdGVfemVyb2Vk\ -OjpoMzgzYzQxZjY0NDNjODgxYfMHOmNvcmU6Om9wczo6cmFuZ2U6OlJhbmdlQm91bmRzOjpjb250YW\ -luczo6aDE3MWRhYTVkZWUyMDViMGL0Byxjb3JlOjpzbGljZTo6aW5kZXg6OnJhbmdlOjpoZjQ2Zjg0\ -MjIxMmZhYWU5ZPUHI3VybDo6VXJsOjpzY2hlbWU6OmgyNTcyNjg5MzU0NDRjYWQ09gdPPGFsbG9jOj\ -pyYXdfdmVjOjpSYXdWZWM8VCxBPiBhcyBjb3JlOjpvcHM6OmRyb3A6OkRyb3A+Ojpkcm9wOjpoM2Zm\ -YTUxOTgzZjZiMDJmOfcHTTxhbGxvYzo6YWxsb2M6Okdsb2JhbCBhcyBjb3JlOjphbGxvYzo6QWxsb2\ -NhdG9yPjo6YWxsb2NhdGU6OmhmZjhmNjg4OGUyNWJiZmE4+AdUPGFsbG9jOjphbGxvYzo6R2xvYmFs\ -IGFzIGNvcmU6OmFsbG9jOjpBbGxvY2F0b3I+OjphbGxvY2F0ZV96ZXJvZWQ6OmgzODNjNDFmNjQ0M2\ -M4ODFh+QdbPGNvcmU6OnN0cjo6aXRlcjo6Qnl0ZXMgYXMgY29yZTo6aXRlcjo6dHJhaXRzOjppdGVy\ -YXRvcjo6SXRlcmF0b3I+OjpuZXh0OjpoYjQ3MzUxM2E1MGVjNTdmZfoHTTxhbGxvYzo6YWxsb2M6Ok\ -dsb2JhbCBhcyBjb3JlOjphbGxvYzo6QWxsb2NhdG9yPjo6YWxsb2NhdGU6OmhmZjhmNjg4OGUyNWJi\ -ZmE4+wdUPGFsbG9jOjphbGxvYzo6R2xvYmFsIGFzIGNvcmU6OmFsbG9jOjpBbGxvY2F0b3I+OjphbG\ -xvY2F0ZV96ZXJvZWQ6OmgzODNjNDFmNjQ0M2M4ODFh/AdNPGFsbG9jOjphbGxvYzo6R2xvYmFsIGFz\ -IGNvcmU6OmFsbG9jOjpBbGxvY2F0b3I+OjphbGxvY2F0ZTo6aGZmOGY2ODg4ZTI1YmJmYTj9By9jb3\ -JlOjpmbXQ6OldyaXRlOjp3cml0ZV9jaGFyOjpoMjY2YTcwZjBiNWUyNzdkMP4HQmFueWhvdzo6ZXJy\ -b3I6OjxpbXBsIGFueWhvdzo6RXJyb3I+Ojpmcm9tX2FkaG9jOjpoMDMzOGRmN2Y3NzM5YTRhOP8HSz\ -xhbnlob3c6OmVycm9yOjpFcnJvckltcGw8RT4gYXMgY29yZTo6Zm10OjpEaXNwbGF5Pjo6Zm10Ojpo\ -OGZkNDY0ODU0YTBiNTMyYYAIYzwmbXV0IHNlcmRlX2pzb246OnNlcjo6U2VyaWFsaXplcjxXLEY+IG\ -FzIHNlcmRlOjpzZXI6OlNlcmlhbGl6ZXI+OjpzZXJpYWxpemVfc3RyOjpoNTI1NWJiNDkxY2NmMTM4\ -OIEIM2FsbG9jOjphbGxvYzo6R2xvYmFsOjphbGxvY19pbXBsOjpoMGZiNWI2ZGFkNjk2MDg2N4IISD\ -xzdGQ6OnBhdGg6OlBhdGhCdWYgYXMgY29yZTo6Y29udmVydDo6RnJvbTwmVD4+Ojpmcm9tOjpoZDM5\ -NDE3NDZhNjZkYmI2MoMIQmhhc2hicm93bjo6cmF3OjpSYXdUYWJsZTxULEE+Ojp3aXRoX2NhcGFjaX\ -R5X2luOjpoMTE1ZmQ5NGU1M2JiYTJhOIQIPmRlbm9fY2FjaGVfZGlyOjpsb2NhbDo6aGVhZGVyc19j\ -b250ZW50X3R5cGU6OmgyNDlmOWNhYzNiNzhiMmE4hQg9ZGVub19jYWNoZV9kaXI6Ondhc206Okdsb2\ -JhbEh0dHBDYWNoZTo6bmV3OjpoNmIyOTI4YmIwNjEyZWE2ZoYIPnNlcmRlX3dhc21fYmluZGdlbjo6\ -c2VyOjpNYXBTZXJpYWxpemVyOjpuZXc6Omg1YzQ4NjRlZWRjMzA3ZWJkhwgtYWxsb2M6OnZlYzo6Vm\ -VjPFQsQT46OnB1c2g6OmhhZGI5NGU4NDQzZmI5ZTQ2iAgzYWxsb2M6OmFsbG9jOjpHbG9iYWw6OmFs\ -bG9jX2ltcGw6OmgwZmI1YjZkYWQ2OTYwODY3iQgzYWxsb2M6OmFsbG9jOjpHbG9iYWw6OmFsbG9jX2\ -ltcGw6OmgwZmI1YjZkYWQ2OTYwODY3ighIPHN0ZDo6cGF0aDo6UGF0aEJ1ZiBhcyBjb3JlOjpjb252\ -ZXJ0OjpGcm9tPCZUPj46OmZyb206OmhkMDZhYjcwMTQwOGRhZmFliwgzYWxsb2M6OmFsbG9jOjpHbG\ -9iYWw6OmFsbG9jX2ltcGw6OmgwZmI1YjZkYWQ2OTYwODY3jAg3d2FzbV9iaW5kZ2VuOjpjYXN0OjpK\ -c0Nhc3Q6OmR5bl9pbnRvOjpoMDcyNjc1MjE3NjdiYTJiNY0IN3dhc21fYmluZGdlbjo6Y2FzdDo6Sn\ -NDYXN0OjpkeW5faW50bzo6aDVhMTRhNWM4OGU1NDg2MGWOCDNhbGxvYzo6YWxsb2M6Okdsb2JhbDo6\ -YWxsb2NfaW1wbDo6aDBmYjViNmRhZDY5NjA4NjePCC9jb3JlOjpzdHI6OjxpbXBsIHN0cj46OnJmaW\ -5kOjpoYjI0YjgzOTE4ZGIxNTEwZpAIQnVybDo6cGFyc2VyOjppc19ub3JtYWxpemVkX3dpbmRvd3Nf\ -ZHJpdmVfbGV0dGVyOjpoODFmMDFjZTAwNzk5YWQwYZEIM2FsbG9jOjphbGxvYzo6R2xvYmFsOjphbG\ -xvY19pbXBsOjpoMGZiNWI2ZGFkNjk2MDg2N5IIM2FsbG9jOjphbGxvYzo6R2xvYmFsOjphbGxvY19p\ -bXBsOjpoMGZiNWI2ZGFkNjk2MDg2N5MIM2FsbG9jOjphbGxvYzo6R2xvYmFsOjphbGxvY19pbXBsOj\ -poMGZiNWI2ZGFkNjk2MDg2N5QIM2FsbG9jOjphbGxvYzo6R2xvYmFsOjphbGxvY19pbXBsOjpoMGZi\ -NWI2ZGFkNjk2MDg2N5UIOHN0ZDo6dGhyZWFkOjpUaHJlYWRJZDo6bmV3OjpleGhhdXN0ZWQ6OmhlZG\ -ZjYWU5M2JmYmY4ZmFllggkc3RkOjp0aHJlYWQ6OnBhcms6OmgwYTJlNGNiNjQyNjc1MTc5lwg0YWxs\ -b2M6OnJhd192ZWM6OmNhcGFjaXR5X292ZXJmbG93OjpoMGU5ODJjNjkwOTI3ZTkwM5gILWNvcmU6On\ -Bhbmlja2luZzo6cGFuaWNfZm10OjpoMmQzYzU1ODYxNzUwOThkOZkIRGNvcmU6OnNsaWNlOjppbmRl\ -eDo6c2xpY2VfZW5kX2luZGV4X292ZXJmbG93X2ZhaWw6OmhjYjkyNWIyZjdiNTJjMjlhmghlPGhhc2\ -hicm93bjo6c2V0OjpIYXNoU2V0PFQsUyxBPiBhcyBjb3JlOjppdGVyOjp0cmFpdHM6OmNvbGxlY3Q6\ -OkV4dGVuZDxUPj46OmV4dGVuZDo6aDM5M2QwNjJhZjBlZmY4MjebCGU8aGFzaGJyb3duOjpzZXQ6Ok\ -hhc2hTZXQ8VCxTLEE+IGFzIGNvcmU6Oml0ZXI6OnRyYWl0czo6Y29sbGVjdDo6RXh0ZW5kPFQ+Pjo6\ -ZXh0ZW5kOjpoYTNhODE5YzcyYjRiNjY1NZwIMGNvcmU6OnJlc3VsdDo6UmVzdWx0PFQsRT46Om9rOj\ -poMGExNThhZmI3NWQ0OWRlMZ0IlgE8Y29yZTo6cmVzdWx0OjpSZXN1bHQ8VCxGPiBhcyBjb3JlOjpv\ -cHM6OnRyeV90cmFpdDo6RnJvbVJlc2lkdWFsPGNvcmU6OnJlc3VsdDo6UmVzdWx0PGNvcmU6OmNvbn\ -ZlcnQ6OkluZmFsbGlibGUsRT4+Pjo6ZnJvbV9yZXNpZHVhbDo6aDE2ZmQzMTMyYmZhMDgwMTaeCCxj\ -b3JlOjplcnJvcjo6RXJyb3I6OmNhdXNlOjpoMzk5ZDNmNDJhY2FhOWNjMJ8ILGNvcmU6OmVycm9yOj\ -pFcnJvcjo6Y2F1c2U6Omg3ZmU2ODJmMTM1YmMyZTBioAgsY29yZTo6ZXJyb3I6OkVycm9yOjpjYXVz\ -ZTo6aGIxMzk2NWRmYjE5NzU1OWKhCCxjb3JlOjplcnJvcjo6RXJyb3I6OmNhdXNlOjpoYzAzMDVkMj\ -IyYzZhMTNjZKIIQGhhc2hicm93bjo6cmF3Ojppbm5lcjo6UmF3VGFibGU8VCxBPjo6cmVzZXJ2ZTo6\ -aGRmZmY5OGFiMmJmNjkyZTKjCEBoYXNoYnJvd246OnJhdzo6aW5uZXI6OlJhd1RhYmxlPFQsQT46On\ -Jlc2VydmU6Omg4ZjJkMGRiY2VlOTFmMDJlpAhAaGFzaGJyb3duOjpyYXc6OmlubmVyOjpSYXdUYWJs\ -ZTxULEE+OjpyZXNlcnZlOjpoZDI0ODkyMzdjYTRiNTg0N6UIOGhhc2hicm93bjo6cmF3OjpSYXdUYW\ -JsZTxULEE+OjpyZW1vdmU6OmgzYWI3NmQyODM5OTY5ZmE5pghiPGRlbm9fY2FjaGVfZGlyOjpnbG9i\ -YWw6OlVybFRvRmlsZW5hbWVDb252ZXJzaW9uRXJyb3IgYXMgY29yZTo6Zm10OjpEZWJ1Zz46OmZtdD\ -o6aGE0NzNhYjc0Y2Q4ZTA1ZDOnCENzZXJkZV93YXNtX2JpbmRnZW46OmRlOjpEZXNlcmlhbGl6ZXI6\ -OmlzX251bGxpc2g6OmhhNjAxZWM2YmQ2YTU5YzJhqAgsY29yZTo6ZXJyb3I6OkVycm9yOjpjYXVzZT\ -o6aGJhNzc0YTc0MjNkNTA1YTWpCFs8Y29yZTo6c3RyOjppdGVyOjpDaGFycyBhcyBjb3JlOjppdGVy\ -Ojp0cmFpdHM6Oml0ZXJhdG9yOjpJdGVyYXRvcj46Om5leHQ6OmgyNWNmNTJmNmNjMmU4NGRlqgg+ZG\ -F0YV91cmw6Om1pbWU6Om9ubHlfaHR0cF90b2tlbl9jb2RlX3BvaW50czo6aDRmNDRiNTcxM2IwNWEx\ -NDKrCC1yaW5nOjpkaWdlc3Q6OkNvbnRleHQ6Om5ldzo6aDgxMWY4NDVlYmZhYThiMDasCBFfX3diaW\ -5kZ2VuX21hbGxvY60IWzxjb3JlOjpzdHI6Oml0ZXI6OkNoYXJzIGFzIGNvcmU6Oml0ZXI6OnRyYWl0\ -czo6aXRlcmF0b3I6Okl0ZXJhdG9yPjo6bmV4dDo6aDI1Y2Y1MmY2Y2MyZTg0ZGWuCDdhbGxvYzo6dm\ -VjOjpWZWM8VCxBPjo6ZXh0ZW5kX3RydXN0ZWQ6OmhmYmYxNDQ3NTIzYTIwNmU1rwg5aGFzaGJyb3du\ -OjpyYXc6OlJhd1RhYmxlPFQsQT46OnJlc2VydmU6OmhhNTNiNWU1NWRlNzZhMzIxsAhrPGhhc2hicm\ -93bjo6bWFwOjpIYXNoTWFwPEssVixTLEE+IGFzIGNvcmU6Oml0ZXI6OnRyYWl0czo6Y29sbGVjdDo6\ -RXh0ZW5kPChLLFYpPj46OmV4dGVuZDo6aDRiZGMwMmU1OWFmMjI4OGSxCDloYXNoYnJvd246OnJhdz\ -o6UmF3VGFibGU8VCxBPjo6cmVzZXJ2ZTo6aGFmNzUxODRjZDBjYWVjZTKyCDloYXNoYnJvd246OnJh\ -dzo6UmF3VGFibGU8VCxBPjo6cmVzZXJ2ZTo6aGE1ZTYyYTA3YmI1YjI4ODGzCDloYXNoYnJvd246On\ -Jhdzo6UmF3VGFibGU8VCxBPjo6cmVzZXJ2ZTo6aDE4NDcwN2JkYTk3OTJmMjW0CD13YXNtX2JpbmRn\ -ZW46Ol9fcnQ6Oldhc21SZWZDZWxsPFQ+Ojpib3Jyb3c6Omg3NDNiYmUxMmQ3YzI4N2JjtQg9d2FzbV\ -9iaW5kZ2VuOjpfX3J0OjpXYXNtUmVmQ2VsbDxUPjo6Ym9ycm93OjpoOTI2ZTcyN2IxYWMwMGM5YrYI\ -MmNvcmU6OnRpbWU6OkR1cmF0aW9uOjpmcm9tX3NlY3M6Omg5MGVmMTc4MzVhMjViN2Fktwg1Y29yZT\ -o6cmVzdWx0OjpSZXN1bHQ8VCxFPjo6bWFwX2Vycjo6aGMzNTY1ZGRjMTA2NGI2YjC4CEs8YW55aG93\ -OjplcnJvcjo6RXJyb3JJbXBsPEU+IGFzIGNvcmU6OmZtdDo6RGlzcGxheT46OmZtdDo6aDM1ZmJjOG\ -ViYjM5NDM2MmG5CEs8YW55aG93OjplcnJvcjo6RXJyb3JJbXBsPEU+IGFzIGNvcmU6OmZtdDo6RGlz\ -cGxheT46OmZtdDo6aGFjN2FlZDk5OGEzYjNiNGK6CEs8YW55aG93OjplcnJvcjo6RXJyb3JJbXBsPE\ -U+IGFzIGNvcmU6OmZtdDo6RGlzcGxheT46OmZtdDo6aGNjN2IzNWM0NTRhODk1Mza7CEs8YW55aG93\ -OjplcnJvcjo6RXJyb3JJbXBsPEU+IGFzIGNvcmU6OmZtdDo6RGlzcGxheT46OmZtdDo6aGQ0MmYxM2\ -Q0MzJjMDFiNDC8CD5oYXNoYnJvd246OnJhdzo6UmF3VGFibGU8VCxBPjo6ZnJlZV9idWNrZXRzOjpo\ -MDZlMzI4MWM1NTRmODI0NL0IPmhhc2hicm93bjo6cmF3OjpSYXdUYWJsZTxULEE+OjpmcmVlX2J1Y2\ -tldHM6OmhjM2NmOGM5YzZmMDU1NDE0vgg+aGFzaGJyb3duOjpyYXc6OlJhd1RhYmxlPFQsQT46OmZy\ -ZWVfYnVja2V0czo6aGM3ZjJmYzQ3MWY1ZGEwYzm/CD5oYXNoYnJvd246OnJhdzo6UmF3VGFibGU8VC\ -xBPjo6ZnJlZV9idWNrZXRzOjpoNzJmZjMwMjk4MjA5MDgzZsAIOWluZGV4bWFwOjptYXA6OkluZGV4\ -TWFwPEssVixTPjo6aW5zZXJ0OjpoODYzMmUwZjRiMTRjYWY4McEIR2hhc2hicm93bjo6cmF3Ojppbm\ -5lcjo6UmF3VGFibGVJbm5lcjxBPjo6c2V0X2N0cmxfaDI6OmgwNDU5YTc4YjI1ODcxNzllwghKc2Vy\ -ZGVfd2FzbV9iaW5kZ2VuOjpkZTo6RGVzZXJpYWxpemVyOjphc19vYmplY3RfZW50cmllczo6aGE5Zj\ -czZTZkNDljN2FkYWTDCDdzZXJkZV9qc29uOjpkZTo6RGVzZXJpYWxpemVyPFI+OjpuZXc6Omg4MjFl\ -NTQ4YTIxZWMyMWZlxAg3c2VyZGVfanNvbjo6ZGU6OkRlc2VyaWFsaXplcjxSPjo6bmV3OjpoZTZkZm\ -IwMGEyODUyMGQyYsUIeGNvcmU6Oml0ZXI6OnJhbmdlOjo8aW1wbCBjb3JlOjppdGVyOjp0cmFpdHM6\ -Oml0ZXJhdG9yOjpJdGVyYXRvciBmb3IgY29yZTo6b3BzOjpyYW5nZTo6UmFuZ2U8QT4+OjpuZXh0Oj\ -poMjM0MTcwZWJmNDliNTVmZcYIMnVybDo6cGFyc2VyOjpJbnB1dDo6c3BsaXRfZmlyc3Q6Omg3ZTll\ -MDUzMGIxMjA3M2VmxwhlPGNvcmU6Om9wczo6cmFuZ2U6OlJhbmdlRnJvbTx1c2l6ZT4gYXMgY29yZT\ -o6c2xpY2U6OmluZGV4OjpTbGljZUluZGV4PFtUXT4+OjppbmRleDo6aDllM2Y1Y2Q2ZWYxN2NhMmPI\ -CDFpZG5hOjpwdW55Y29kZTo6dmFsdWVfdG9fZGlnaXQ6Omg3Y2U3YWQwMzU4OGRiMTcxyQgvc2VyZG\ -U6OmRlOjpzaXplX2hpbnQ6OmhlbHBlcjo6aDI1MDUxNzE2ODk2ZDM4ZTHKCGE8Y29yZTo6Y2hhcjo6\ -VG9Mb3dlcmNhc2UgYXMgY29yZTo6aXRlcjo6dHJhaXRzOjppdGVyYXRvcjo6SXRlcmF0b3I+OjpzaX\ -plX2hpbnQ6OmhjNTg2YjU0MWMyMjA4MzZlywgsY29yZTo6Zm10OjpGb3JtYXR0ZXI6Om5ldzo6aDg5\ -MTRiZWY5Y2IzMzMyNDDMCD9pbmRleG1hcDo6bWFwOjpJbmRleE1hcDxLLFYsUz46OmNvbnRhaW5zX2\ -tleTo6aGQwNWJiM2RiZWFlNmJkNWLNCGhjb3JlOjpvcHM6OmZ1bmN0aW9uOjppbXBsczo6PGltcGwg\ -Y29yZTo6b3BzOjpmdW5jdGlvbjo6Rm5NdXQ8QT4gZm9yICZtdXQgRj46OmNhbGxfbXV0OjpoYjRhMj\ -A1ZjlmMjUxZTE2Y84IPnNlcmRlX2pzb246OmRlOjpEZXNlcmlhbGl6ZXI8Uj46OnBlZWtfZXJyb3I6\ -OmhjMzg3NTQwNGUyOWMyNjlkzwg5c2VyZGVfanNvbjo6ZGU6OkRlc2VyaWFsaXplcjxSPjo6ZXJyb3\ -I6OmhmM2ZkZDE2M2UxODIyNjZk0AhgPHN0ZDo6Y29sbGVjdGlvbnM6Omhhc2g6Om1hcDo6UmFuZG9t\ -U3RhdGUgYXMgY29yZTo6ZGVmYXVsdDo6RGVmYXVsdD46OmRlZmF1bHQ6OmgyZGI4ZjJiNTQxZjY0Nz\ -M40QhFc2VyZGVfd2FzbV9iaW5kZ2VuOjpkZTo6RGVzZXJpYWxpemVyOjppbnZhbGlkX3R5cGU6Omg0\ -ZTExOTFlMjg1ZTZkMmI50ghFc2VyZGVfd2FzbV9iaW5kZ2VuOjpkZTo6RGVzZXJpYWxpemVyOjppbn\ -ZhbGlkX3R5cGU6OmhkNTFlYWIwZDZlNmZhZWU40wgvc2VyZGVfd2FzbV9iaW5kZ2VuOjp0b192YWx1\ -ZTo6aDA0N2M1NWI3NDRiZTExYTTUCGA8c3RkOjpjb2xsZWN0aW9uczo6aGFzaDo6bWFwOjpEZWZhdW\ -x0SGFzaGVyIGFzIGNvcmU6Omhhc2g6Okhhc2hlcj46OndyaXRlX3N0cjo6aDM5ZWExOTgzYTBkZmYy\ -MmbVCDZhbGxvYzo6dmVjOjpWZWM8VCxBPjo6cmVzZXJ2ZV9leGFjdDo6aDMxNjhlNzc2MTBkMzFiZD\ -TWCDZhbGxvYzo6dmVjOjpWZWM8VCxBPjo6cmVzZXJ2ZV9leGFjdDo6aDRhZjI4OTZiMTcwYWEyZDPX\ -CDZhbGxvYzo6dmVjOjpWZWM8VCxBPjo6cmVzZXJ2ZV9leGFjdDo6aGE4MWYyNjUwNzBhYzVjNDnYCD\ -FhbGxvYzo6c3luYzo6QXJjPFQ+Ojpkcm9wX3Nsb3c6Omg0ZTI3OTkzMzU0MmRhOTYw2QhIPGFsbG9j\ -OjpzeW5jOjpXZWFrPFQ+IGFzIGNvcmU6Om9wczo6ZHJvcDo6RHJvcD46OmRyb3A6Omg0MDM4YmYwMT\ -k3NDU1ODEx2gg+aGFzaGJyb3duOjptYXA6Okhhc2hNYXA8SyxWLFMsQT46OmdldF9pbm5lcjo6aDcz\ -ODM3Mzg3Yjc3ZjI2OTHbCFVoYXNoYnJvd246OnJhdzo6aW5uZXI6OlJhd1RhYmxlSW5uZXI8QT46Om\ -ZpbmRfaW5zZXJ0X3Nsb3RfaW5fZ3JvdXA6OmhhMDA3OTE4ZDM3MjkzMDIy3AhOPHNlcmRlX3dhc21f\ -YmluZGdlbjo6ZXJyb3I6OkVycm9yIGFzIGNvcmU6OmZtdDo6RGVidWc+OjpmbXQ6OmhhNWE1NmUxZj\ -VlYzk3Yjdi3Qg+c2VyZGVfanNvbjo6ZGU6OkRlc2VyaWFsaXplcjxSPjo6cGVla19lcnJvcjo6aDM2\ -MGMzYmEyYjdjNmZlZTHeCEBzZXJkZV9qc29uOjpkZTo6RGVzZXJpYWxpemVyPFI+OjpwZWVrX29yX2\ -51bGw6OmhmMjJhOGY2MmNhODk3MzY43wg5c2VyZGVfanNvbjo6ZGU6OkRlc2VyaWFsaXplcjxSPjo6\ -ZXJyb3I6OmhkMGQzNmQ1MmMxYzI0MTU34Agqc2VyZGVfanNvbjo6cmVhZDo6ZXJyb3I6OmhiMjdkY2\ -UxOGU4NGNjNmM04QgwPCZUIGFzIGNvcmU6OmZtdDo6RGVidWc+OjpmbXQ6OmhjZDMwODViYzM0MDU1\ -NjJj4ghIPGFsbG9jOjpzeW5jOjpXZWFrPFQ+IGFzIGNvcmU6Om9wczo6ZHJvcDo6RHJvcD46OmRyb3\ -A6OmgxNDFjNjM3NDg1ZjAyOWYx4wg+YWxsb2M6OnJhd192ZWM6OlJhd1ZlYzxULEE+OjpjdXJyZW50\ -X21lbW9yeTo6aGUyYzkwZmU2NDU3MGUyNDjkCDA8JlQgYXMgY29yZTo6Zm10OjpEZWJ1Zz46OmZtdD\ -o6aGZiMDFiYjY4NjdhMDQ3YWblCDRjb3JlOjpyZXN1bHQ6OlJlc3VsdDxULEU+Ojp1bndyYXA6Omhh\ -NmMyODljMjUyZDc0YjNj5ghfPGFsbG9jOjpzdHJpbmc6OlN0cmluZyBhcyBjb3JlOjppdGVyOjp0cm\ -FpdHM6OmNvbGxlY3Q6OkV4dGVuZDxjaGFyPj46OmV4dGVuZDo6aGY1ODhhY2QwNTMwOTAzOGTnCE9j\ -b3JlOjpzbGljZTo6c29ydDo6bWVyZ2Vfc29ydDo6QnVmR3VhcmQ8VCxFbGVtRGVhbGxvY0Y+OjpuZX\ -c6OmhjMmZkYzYyMzYxMjNiNjBj6AgoaWRuYTo6ZG9tYWluX3RvX2FzY2lpOjpoMDgyMjgyYzJlZmY0\ -Mzg0OOkIV2NvcmU6OnNsaWNlOjppbmRleDo6PGltcGwgY29yZTo6b3BzOjppbmRleDo6SW5kZXg8ST\ -4gZm9yIFtUXT46OmluZGV4OjpoNzU2YmQ5ZTFiNzdmZDk5Y+oITTxzdGQ6OnRocmVhZDo6bG9jYWw6\ -OkFjY2Vzc0Vycm9yIGFzIGNvcmU6OmZtdDo6RGVidWc+OjpmbXQ6Omg5Nzc1NGY1NGY5OWUwZTk06w\ -gwPCZUIGFzIGNvcmU6OmZtdDo6RGVidWc+OjpmbXQ6OmhiMmU2MTRlZjdkNTcxNTMx7Ag0Y29yZTo6\ -Zm10OjpGb3JtYXR0ZXI6OmRlYnVnX3R1cGxlOjpoZTU0MGFlYjYzZTcxNjgwNe0IZTxjb3JlOjpvcH\ -M6OnJhbmdlOjpSYW5nZUZyb208dXNpemU+IGFzIGNvcmU6OnNsaWNlOjppbmRleDo6U2xpY2VJbmRl\ -eDxbVF0+Pjo6aW5kZXg6OmhiZGNiMzFmNDAwYTMzZGI07ghIY29yZTo6b3BzOjpmdW5jdGlvbjo6Rm\ -5PbmNlOjpjYWxsX29uY2V7e3Z0YWJsZS5zaGltfX06OmgzNTc0YzUyOWZjZDhkZWQz7whIY29yZTo6\ -b3BzOjpmdW5jdGlvbjo6Rm5PbmNlOjpjYWxsX29uY2V7e3Z0YWJsZS5zaGltfX06Omg0ZjdiOGM5YW\ -VjOTQyOGRj8AhIY29yZTo6b3BzOjpmdW5jdGlvbjo6Rm5PbmNlOjpjYWxsX29uY2V7e3Z0YWJsZS5z\ -aGltfX06OmhiMmVkYWI5NWI1YTEwNDVk8QhIY29yZTo6b3BzOjpmdW5jdGlvbjo6Rm5PbmNlOjpjYW\ -xsX29uY2V7e3Z0YWJsZS5zaGltfX06OmhjOWJlNDJhNzRiZDM1Mjdj8ghAYWxsb2M6OnJhd192ZWM6\ -OlJhd1ZlYzxULEE+OjpyZXNlcnZlX2Zvcl9wdXNoOjpoN2E3ODNiYzhiYzg5NzFiNvMITmFsbG9jOj\ -pyYXdfdmVjOjpSYXdWZWM8VCxBPjo6cmVzZXJ2ZTo6ZG9fcmVzZXJ2ZV9hbmRfaGFuZGxlOjpoNTY1\ -ZDQ5Y2ZmNDQ0MTNiOPQIQGFsbG9jOjpyYXdfdmVjOjpSYXdWZWM8VCxBPjo6cmVzZXJ2ZV9mb3JfcH\ -VzaDo6aDA1ZWJlNGMxZjE1MTExMmT1CEBhbGxvYzo6cmF3X3ZlYzo6UmF3VmVjPFQsQT46OnJlc2Vy\ -dmVfZm9yX3B1c2g6OmgyMTEwOTQwMTMwZWM3MDc29ghAYWxsb2M6OnJhd192ZWM6OlJhd1ZlYzxULE\ -E+OjpyZXNlcnZlX2Zvcl9wdXNoOjpoZDNhMTdiNjQxMzY3ZWNiNvcIfDxhbGxvYzo6dmVjOjpWZWM8\ -VCxBPiBhcyBhbGxvYzo6dmVjOjpzcGVjX2V4dGVuZDo6U3BlY0V4dGVuZDwmVCxjb3JlOjpzbGljZT\ -o6aXRlcjo6SXRlcjxUPj4+OjpzcGVjX2V4dGVuZDo6aGQ1NGYxMGI4ZmE3MDBkY2b4CEBhbGxvYzo6\ -cmF3X3ZlYzo6UmF3VmVjPFQsQT46OnJlc2VydmVfZm9yX3B1c2g6OmgzNzA5OWUxNmU2NDg5NTgz+Q\ -hOYWxsb2M6OnJhd192ZWM6OlJhd1ZlYzxULEE+OjpyZXNlcnZlOjpkb19yZXNlcnZlX2FuZF9oYW5k\ -bGU6OmhhYWMyZTc5MjAxYWFjY2E5+gh8PGFsbG9jOjp2ZWM6OlZlYzxULEE+IGFzIGFsbG9jOjp2ZW\ -M6OnNwZWNfZXh0ZW5kOjpTcGVjRXh0ZW5kPCZULGNvcmU6OnNsaWNlOjppdGVyOjpJdGVyPFQ+Pj46\ -OnNwZWNfZXh0ZW5kOjpoZWRkM2IzMWZmNDU3MzgwMvsIQGFsbG9jOjpyYXdfdmVjOjpSYXdWZWM8VC\ -xBPjo6cmVzZXJ2ZV9mb3JfcHVzaDo6aDRmNGJhZjA2OGRiYzc2OGT8CE5hbGxvYzo6cmF3X3ZlYzo6\ -UmF3VmVjPFQsQT46OnJlc2VydmU6OmRvX3Jlc2VydmVfYW5kX2hhbmRsZTo6aDI3ZTBiN2MxZWQzOD\ -AxZjP9CDNzZXJkZV9qc29uOjplcnJvcjo6RXJyb3I6OnN5bnRheDo6aDM5NDg3OTM0NWVjOTY0YmP+\ -CEBhbGxvYzo6cmF3X3ZlYzo6UmF3VmVjPFQsQT46OnJlc2VydmVfZm9yX3B1c2g6Omg4MGRiMzE0Nm\ -UxZGU0ZTdj/whCY29yZTo6aXRlcjo6dHJhaXRzOjppdGVyYXRvcjo6SXRlcmF0b3I6OmNvbGxlY3Q6\ -OmgzMmM5YzI2YjI0YThkNzFlgAl8PGFsbG9jOjp2ZWM6OlZlYzxULEE+IGFzIGFsbG9jOjp2ZWM6On\ -NwZWNfZXh0ZW5kOjpTcGVjRXh0ZW5kPCZULGNvcmU6OnNsaWNlOjppdGVyOjpJdGVyPFQ+Pj46OnNw\ -ZWNfZXh0ZW5kOjpoMzNhN2Y4ZjZiYmE2ZmI2ZYEJTmFsbG9jOjpyYXdfdmVjOjpSYXdWZWM8VCxBPj\ -o6cmVzZXJ2ZTo6ZG9fcmVzZXJ2ZV9hbmRfaGFuZGxlOjpoZWYyNDJiZTUxZGU4MWZmM4IJQGFsbG9j\ -OjpyYXdfdmVjOjpSYXdWZWM8VCxBPjo6cmVzZXJ2ZV9mb3JfcHVzaDo6aGQ3NDlhOGUzOGQ0NzAxNj\ -aDCUBhbGxvYzo6cmF3X3ZlYzo6UmF3VmVjPFQsQT46OnJlc2VydmVfZm9yX3B1c2g6OmhlM2I5YWI0\ -YWNlY2UwZDk4hAkrZGF0YV91cmw6OnBlcmNlbnRfZW5jb2RlOjpoZWUzZmVhYjM1OWFkZDQ4MYUJZT\ -xjb3JlOjpvcHM6OnJhbmdlOjpSYW5nZUZyb208dXNpemU+IGFzIGNvcmU6OnNsaWNlOjppbmRleDo6\ -U2xpY2VJbmRleDxbVF0+Pjo6aW5kZXg6Omg1OTBkYmMyMjQ1YTM2NDQ5hgl8PGFsbG9jOjp2ZWM6Ol\ -ZlYzxULEE+IGFzIGFsbG9jOjp2ZWM6OnNwZWNfZXh0ZW5kOjpTcGVjRXh0ZW5kPCZULGNvcmU6OnNs\ -aWNlOjppdGVyOjpJdGVyPFQ+Pj46OnNwZWNfZXh0ZW5kOjpoN2UzZjg0NzAwYmNiOWFhZYcJQGFsbG\ -9jOjpyYXdfdmVjOjpSYXdWZWM8VCxBPjo6cmVzZXJ2ZV9mb3JfcHVzaDo6aDRjZjZlYTRmODJlMjg3\ -ZWaICU5hbGxvYzo6cmF3X3ZlYzo6UmF3VmVjPFQsQT46OnJlc2VydmU6OmRvX3Jlc2VydmVfYW5kX2\ -hhbmRsZTo6aDg4YjQwYzYwMzc4NTVlMDOJCU5hbGxvYzo6cmF3X3ZlYzo6UmF3VmVjPFQsQT46OnJl\ -c2VydmU6OmRvX3Jlc2VydmVfYW5kX2hhbmRsZTo6aDc4M2QxOTk3NTA0Y2FiMjiKCUBhbGxvYzo6cm\ -F3X3ZlYzo6UmF3VmVjPFQsQT46OnJlc2VydmVfZm9yX3B1c2g6Omg4ZGU2OWY5NWE5NDU1M2ZkiwlI\ -PGNvcmU6Om9wdGlvbjo6T3B0aW9uPFQ+IGFzIGNvcmU6OmNtcDo6UGFydGlhbEVxPjo6ZXE6Omg1ZT\ -A1YWVkMTUyYzNkMDk2jAkvdXJsOjpwYXJzZXI6OklucHV0Ojppc19lbXB0eTo6aGIyMWNmMzUwZmFj\ -ZDU3YTONCTJ1cmw6OnBhcnNlcjo6SW5wdXQ6OnN0YXJ0c193aXRoOjpoN2ZmMmM2Y2ZhM2U0NjJiYY\ -4JQGFsbG9jOjpyYXdfdmVjOjpSYXdWZWM8VCxBPjo6cmVzZXJ2ZV9mb3JfcHVzaDo6aDI2NTQ0ODZj\ -MzQzMTQ5YmKPCUBhbGxvYzo6cmF3X3ZlYzo6UmF3VmVjPFQsQT46OnJlc2VydmVfZm9yX3B1c2g6Om\ -gyZWNhOTgxMjExNDZiMzkxkAlOYWxsb2M6OnJhd192ZWM6OlJhd1ZlYzxULEE+OjpyZXNlcnZlOjpk\ -b19yZXNlcnZlX2FuZF9oYW5kbGU6OmgzNTc0OWRiZTdmMDljOTRjkQlOYWxsb2M6OnJhd192ZWM6Ol\ -Jhd1ZlYzxULEE+OjpyZXNlcnZlOjpkb19yZXNlcnZlX2FuZF9oYW5kbGU6Omg5MzkzZDZhMzA2NmRl\ -N2YxkgmGAWlkbmE6OnV0czQ2Ojo8aW1wbCBjb3JlOjpjb252ZXJ0OjpGcm9tPGlkbmE6OnV0czQ2Oj\ -pFcnJvcnM+IGZvciBjb3JlOjpyZXN1bHQ6OlJlc3VsdDwoKSxpZG5hOjp1dHM0Njo6RXJyb3JzPj46\ -OmZyb206Omg0M2NhMTc0ZWI4Njg5YWRikwl8PGFsbG9jOjp2ZWM6OlZlYzxULEE+IGFzIGFsbG9jOj\ -p2ZWM6OnNwZWNfZXh0ZW5kOjpTcGVjRXh0ZW5kPCZULGNvcmU6OnNsaWNlOjppdGVyOjpJdGVyPFQ+\ -Pj46OnNwZWNfZXh0ZW5kOjpoNGM3MmI3ZWZjYTYyZDZhY5QJTmFsbG9jOjpyYXdfdmVjOjpSYXdWZW\ -M8VCxBPjo6cmVzZXJ2ZTo6ZG9fcmVzZXJ2ZV9hbmRfaGFuZGxlOjpoMzBiMDdlZGFkZGNhODBhYpUJ\ -QGFsbG9jOjpyYXdfdmVjOjpSYXdWZWM8VCxBPjo6cmVzZXJ2ZV9mb3JfcHVzaDo6aDhmYmM4YTgxOT\ -lkZGNkNjeWCXw8YWxsb2M6OnZlYzo6VmVjPFQsQT4gYXMgYWxsb2M6OnZlYzo6c3BlY19leHRlbmQ6\ -OlNwZWNFeHRlbmQ8JlQsY29yZTo6c2xpY2U6Oml0ZXI6Okl0ZXI8VD4+Pjo6c3BlY19leHRlbmQ6Om\ -gxYThlZWFhYmU0MjVkMzQ5lwlOYWxsb2M6OnJhd192ZWM6OlJhd1ZlYzxULEE+OjpyZXNlcnZlOjpk\ -b19yZXNlcnZlX2FuZF9oYW5kbGU6OmgyMmYzNjI3NmQ1NjBmMDlmmAlAYWxsb2M6OnJhd192ZWM6Ol\ -Jhd1ZlYzxULEE+OjpyZXNlcnZlX2Zvcl9wdXNoOjpoMTA0YjRlMTRiMTEwODcyYZkJKnNlcmRlX2pz\ -b246OnNlcjo6aW5kZW50OjpoYWVlYTM5NjJhOTU3YmU1MJoJInVybDo6VXJsOjpwYXJzZTo6aGY3MD\ -U5ZjhiNDM2ZmYzMjWbCS1zdGQ6OmlvOjplcnJvcjo6RXJyb3I6Om5ldzo6aDI3NjNkZjcyOTkwOGI2\ -OWKcCUhjb3JlOjpvcHM6OmZ1bmN0aW9uOjpGbk9uY2U6OmNhbGxfb25jZXt7dnRhYmxlLnNoaW19fT\ -o6aDhkMmJkNTE1MjAzM2I4Y2adCUhjb3JlOjpvcHM6OmZ1bmN0aW9uOjpGbk9uY2U6OmNhbGxfb25j\ -ZXt7dnRhYmxlLnNoaW19fTo6aGE2MmEzMzhlNWYwODZmZDCeCUhjb3JlOjpvcHM6OmZ1bmN0aW9uOj\ -pGbk9uY2U6OmNhbGxfb25jZXt7dnRhYmxlLnNoaW19fTo6aGFlNTQyYmJjNDkwZGUzNjKfCUhjb3Jl\ -OjpvcHM6OmZ1bmN0aW9uOjpGbk9uY2U6OmNhbGxfb25jZXt7dnRhYmxlLnNoaW19fTo6aGQzYWExYz\ -Y4NDFhYjdhODagCUhjb3JlOjpvcHM6OmZ1bmN0aW9uOjpGbk9uY2U6OmNhbGxfb25jZXt7dnRhYmxl\ -LnNoaW19fTo6aGRlZjVjYjkwZmFlYzlmNjGhCUhjb3JlOjpvcHM6OmZ1bmN0aW9uOjpGbk9uY2U6Om\ -NhbGxfb25jZXt7dnRhYmxlLnNoaW19fTo6aGRmODRjNDU2Mjc0YmVmOTiiCUhjb3JlOjpvcHM6OmZ1\ -bmN0aW9uOjpGbk9uY2U6OmNhbGxfb25jZXt7dnRhYmxlLnNoaW19fTo6aGYwMWJmYmVjYmJlMTIzMz\ -SjCUhjb3JlOjpvcHM6OmZ1bmN0aW9uOjpGbk9uY2U6OmNhbGxfb25jZXt7dnRhYmxlLnNoaW19fTo6\ -aGZhYjJjNTkwNmZiOWZmMmGkCWU8c2VyZGVfanNvbjo6c2VyOjpQcmV0dHlGb3JtYXR0ZXIgYXMgc2\ -VyZGVfanNvbjo6c2VyOjpGb3JtYXR0ZXI+OjpiZWdpbl9vYmplY3Rfa2V5OjpoNzhiNWVmMDk2NjY2\ -ZjhiY6UJQ2luZGV4bWFwOjptYXA6OkluZGV4TWFwPEssVixTPjo6c3dhcF9yZW1vdmVfZnVsbDo6aG\ -Q3NWJjMjA1NDVjZDY3YzamCUtoYXNoYnJvd246OnJhdzo6aW5uZXI6OlJhd1RhYmxlSW5uZXI8QT46\ -OmZpeF9pbnNlcnRfc2xvdDo6aDZlODYyNmE0ZTJiMmU2NzCnCT1wYXJraW5nX2xvdF9jb3JlOjpzcG\ -lud2FpdDo6U3BpbldhaXQ6OnNwaW46Omg1ZGQwNzFjOTU0NDc0ODQ3qAk+YWxsb2M6OnJhd192ZWM6\ -OlJhd1ZlYzxULEE+OjpjdXJyZW50X21lbW9yeTo6aDc4YTg4NzlkNzM3YTI0MDGpCT5hbGxvYzo6cm\ -F3X3ZlYzo6UmF3VmVjPFQsQT46OmN1cnJlbnRfbWVtb3J5OjpoMzk1NjU3NjNmOTBhYTI5M6oJRHBl\ -cmNlbnRfZW5jb2Rpbmc6OkFzY2lpU2V0OjpzaG91bGRfcGVyY2VudF9lbmNvZGU6OmgyZWY3MjEwMz\ -Q1Y2I3ZmZmqwlOPGNvcmU6Om51bTo6bm9uemVybzo6Tm9uWmVyb1VzaXplIGFzIGNvcmU6OmZtdDo6\ -RGVidWc+OjpmbXQ6OmhhNTY5YWNmN2NhNGVhNTk1rAk5Y29yZTo6Zm10OjpidWlsZGVyczo6RGVidW\ -dMaXN0OjpmaW5pc2g6OmhkZTU3OGJiODA2ZTAzN2JhrQk1Y29yZTo6Zm10OjpGb3JtYXR0ZXI6OmRl\ -YnVnX3N0cnVjdDo6aDE1ZGQ0NWI2YWFjN2RiYTmuCTNjb3JlOjpmbXQ6OkZvcm1hdHRlcjo6ZGVidW\ -dfbGlzdDo6aGY1ZmI0OGI5NWEwN2RhNzSvCUVjb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8c2VyZGVf\ -anNvbjo6ZXJyb3I6OkVycm9yPjo6aGEzNmUxYjljOTBkNzdlNGawCZYBPGNvcmU6OnJlc3VsdDo6Um\ -VzdWx0PFQsRj4gYXMgY29yZTo6b3BzOjp0cnlfdHJhaXQ6OkZyb21SZXNpZHVhbDxjb3JlOjpyZXN1\ -bHQ6OlJlc3VsdDxjb3JlOjpjb252ZXJ0OjpJbmZhbGxpYmxlLEU+Pj46OmZyb21fcmVzaWR1YWw6Om\ -hjZGU1YTMwYmYyYjBjM2U0sQlBYW55aG93OjplcnJvcjo6PGltcGwgYW55aG93OjpFcnJvcj46OmNv\ -bnN0cnVjdDo6aGJmY2JhMDJmZTFlMTRkYWOyCXI8ZGVub19jYWNoZV9kaXI6Ondhc206Okdsb2JhbE\ -h0dHBDYWNoZSBhcyB3YXNtX2JpbmRnZW46OmNvbnZlcnQ6OnRyYWl0czo6SW50b1dhc21BYmk+Ojpp\ -bnRvX2FiaTo6aDc4ZjhjYWY0YTVkNTVhMDSzCUljb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8c2VyZG\ -VfanNvbjo6ZXJyb3I6OkVycm9yQ29kZT46OmhkYTYxYjM1ZjkzYTc0YWYxtAknc21hbGx2ZWM6Omlu\ -ZmFsbGlibGU6Omg0ZTY5YjNmMWE4MTU4NTgytQk7c3RkOjpwYW5pY2tpbmc6OmJlZ2luX3BhbmljOj\ -p7e2Nsb3N1cmV9fTo6aGE4YjI1Y2Q5MzAyNDExYTS2CTNhbGxvYzo6YWxsb2M6Okdsb2JhbDo6YWxs\ -b2NfaW1wbDo6aDBmYjViNmRhZDY5NjA4Nje3CTtzdGQ6OnBhbmlja2luZzo6YmVnaW5fcGFuaWM6On\ -t7Y2xvc3VyZX19OjpoY2UzNzU0Y2NjMjRjYWY5MLgJNmNvcmU6OnN0cjo6PGltcGwgc3RyPjo6c3Ry\ -aXBfcHJlZml4OjpoYjQ1ZDYzNmFiMzdjNzNhN7kJO3N0ZDo6cGFuaWNraW5nOjpiZWdpbl9wYW5pYz\ -o6e3tjbG9zdXJlfX06OmgwZGEyMmJlMTM1NmM2MTg3uglHY29yZTo6Zm10OjpudW06OjxpbXBsIGNv\ -cmU6OmZtdDo6RGVidWcgZm9yIGkzMj46OmZtdDo6aDk0NmRmNjI0MTU2NzQ0OTW7CTdkbG1hbGxvYz\ -o6ZGxtYWxsb2M6OkNodW5rOjpzZXRfaW51c2U6OmhkYzcxNmU4NDI2MjUwZmUxvAlBd2FzbV9iaW5k\ -Z2VuOjpfX3J0OjpXYXNtUmVmQ2VsbDxUPjo6Ym9ycm93X211dDo6aDEyYzBiMGU4N2M1YWQwNWS9CU\ -F3YXNtX2JpbmRnZW46Ol9fcnQ6Oldhc21SZWZDZWxsPFQ+Ojpib3Jyb3dfbXV0OjpoZDUyNmI2NDU3\ -M2E4YjQ1ZL4JiQE8PGFsbG9jOjp2ZWM6OmludG9faXRlcjo6SW50b0l0ZXI8VCxBPiBhcyBjb3JlOj\ -pvcHM6OmRyb3A6OkRyb3A+Ojpkcm9wOjpEcm9wR3VhcmQ8VCxBPiBhcyBjb3JlOjpvcHM6OmRyb3A6\ -OkRyb3A+Ojpkcm9wOjpoZTA2NmFmNjE5NDQ5ZDAwNb8JQ2hhc2hicm93bjo6cmF3OjpSYXdUYWJsZT\ -xULEE+OjpmaW5kOjp7e2Nsb3N1cmV9fTo6aDBkNTI3ZDU2MzgwZWQ1NjfACaoBY29yZTo6cHRyOjpk\ -cm9wX2luX3BsYWNlPGxvY2tfYXBpOjpyd2xvY2s6OlJ3TG9ja1JlYWRHdWFyZDxwYXJraW5nX2xvdD\ -o6cmF3X3J3bG9jazo6UmF3UndMb2NrLGRlbm9fY2FjaGVfZGlyOjpsb2NhbDo6bWFuaWZlc3Q6Okxv\ -Y2FsQ2FjaGVNYW5pZmVzdERhdGE+Pjo6aDA1ZTcyM2ZjZWNlMWZlYzLBCTVjb3JlOjpyZXN1bHQ6Ol\ -Jlc3VsdDxULEU+OjptYXBfZXJyOjpoM2Q5YzNiNGFjMDliZTFjOcIJXDxzZXJkZV93YXNtX2JpbmRn\ -ZW46OnNlcjo6TWFwU2VyaWFsaXplciBhcyBzZXJkZTo6c2VyOjpTZXJpYWxpemVNYXA+OjplbmQ6Om\ -gwZmQ0Njg4NGRkYjZhZGY4wwkebG9nOjpsb2dnZXI6OmhjMDNjYjkyOTVmMzhkOWFmxAlAcGFya2lu\ -Z19sb3RfY29yZTo6d29yZF9sb2NrOjpXb3JkTG9jazo6dW5sb2NrOjpoMzM4ZDk0YjFiZmIxYTRmYs\ -UJQHBhcmtpbmdfbG90X2NvcmU6OndvcmRfbG9jazo6V29yZExvY2s6OnVubG9jazo6aDMzOGQ5NGIx\ -YmZiMWE0ZmLGCUNoYXNoYnJvd246OnJhdzo6UmF3VGFibGU8VCxBPjo6ZmluZDo6e3tjbG9zdXJlfX\ -06Omg5Mjc1YjE5NWU4MjY2ZDlkxwk6d2FzbV9iaW5kZ2VuOjpfX3J0Ojp0YWtlX2xhc3RfZXhjZXB0\ -aW9uOjpoMDZiZTRkYjY2NzQyODI4OMgJVzx1cmw6OnBhcnNlcjo6SW5wdXQgYXMgY29yZTo6aXRlcj\ -o6dHJhaXRzOjppdGVyYXRvcjo6SXRlcmF0b3I+OjpuZXh0OjpoNzRmZDRjNzFmNDMwNGNkYskJiQE8\ -PGFsbG9jOjp2ZWM6OmludG9faXRlcjo6SW50b0l0ZXI8VCxBPiBhcyBjb3JlOjpvcHM6OmRyb3A6Ok\ -Ryb3A+Ojpkcm9wOjpEcm9wR3VhcmQ8VCxBPiBhcyBjb3JlOjpvcHM6OmRyb3A6OkRyb3A+Ojpkcm9w\ -OjpoMWNjMDIzZjZlNjBjNjgxOcoJPzxjaGFyIGFzIHVybDo6cGFyc2VyOjpQYXR0ZXJuPjo6c3BsaX\ -RfcHJlZml4OjpoYjBkMmFhZmMxNDY0NzJhN8sJNWNvcmU6OnNsaWNlOjo8aW1wbCBbVF0+OjplbmRz\ -X3dpdGg6OmgxOGI3ODFhZmIwYTcwYjQ2zAmJATw8YWxsb2M6OnZlYzo6aW50b19pdGVyOjpJbnRvSX\ -RlcjxULEE+IGFzIGNvcmU6Om9wczo6ZHJvcDo6RHJvcD46OmRyb3A6OkRyb3BHdWFyZDxULEE+IGFz\ -IGNvcmU6Om9wczo6ZHJvcDo6RHJvcD46OmRyb3A6OmhmNDgzMzkzNmE5NDVmYzM5zQlBYW55aG93Oj\ -plcnJvcjo6PGltcGwgYW55aG93OjpFcnJvcj46OmNvbnN0cnVjdDo6aDZkZTQwZWNiN2EzNTM3NjbO\ -CXlzZXJkZTo6ZGU6OmltcGxzOjo8aW1wbCBzZXJkZTo6ZGU6OkRlc2VyaWFsaXplIGZvciBzdGQ6On\ -RpbWU6OlN5c3RlbVRpbWU+OjpkZXNlcmlhbGl6ZTo6Y2hlY2tfb3ZlcmZsb3c6OmgyOTY0NDQzMWQ5\ -MTA5YzVizwlaPHNlcmRlX2pzb246OmRlOjpNYXBBY2Nlc3M8Uj4gYXMgc2VyZGU6OmRlOjpNYXBBY2\ -Nlc3M+OjpuZXh0X3ZhbHVlX3NlZWQ6Omg5ZTRlNDFkY2M5NDAxMjNl0AlaPHNlcmRlX2pzb246OmRl\ -OjpNYXBBY2Nlc3M8Uj4gYXMgc2VyZGU6OmRlOjpNYXBBY2Nlc3M+OjpuZXh0X3ZhbHVlX3NlZWQ6Om\ -g3N2Y4NzQ1MTE4OWJhMWEz0Qk2Y29yZTo6c3RyOjo8aW1wbCBzdHI+OjpzdHJpcF9zdWZmaXg6Omg0\ -NTIyMTlmYmQ1ZWY3YTBj0glaPHNlcmRlX2pzb246OmRlOjpNYXBBY2Nlc3M8Uj4gYXMgc2VyZGU6Om\ -RlOjpNYXBBY2Nlc3M+OjpuZXh0X3ZhbHVlX3NlZWQ6OmgxOWIxN2U1NDJhZDYzMmYy0wlaPHNlcmRl\ -X2pzb246OmRlOjpNYXBBY2Nlc3M8Uj4gYXMgc2VyZGU6OmRlOjpNYXBBY2Nlc3M+OjpuZXh0X3ZhbH\ -VlX3NlZWQ6OmgyN2U4OWY4NmZhZDkxOTdj1AlaPHNlcmRlX2pzb246OmRlOjpNYXBBY2Nlc3M8Uj4g\ -YXMgc2VyZGU6OmRlOjpNYXBBY2Nlc3M+OjpuZXh0X3ZhbHVlX3NlZWQ6OmgzMDUzMWNjNWMwODBlZT\ -gy1QlaPHNlcmRlX2pzb246OmRlOjpNYXBBY2Nlc3M8Uj4gYXMgc2VyZGU6OmRlOjpNYXBBY2Nlc3M+\ -OjpuZXh0X3ZhbHVlX3NlZWQ6OmgzODhhYTA2Yjc5ZDUzOWI31glaPHNlcmRlX2pzb246OmRlOjpNYX\ -BBY2Nlc3M8Uj4gYXMgc2VyZGU6OmRlOjpNYXBBY2Nlc3M+OjpuZXh0X3ZhbHVlX3NlZWQ6Omg2N2Rl\ -OWJmMWJiZjU3NjMy1wlaPHNlcmRlX2pzb246OmRlOjpNYXBBY2Nlc3M8Uj4gYXMgc2VyZGU6OmRlOj\ -pNYXBBY2Nlc3M+OjpuZXh0X3ZhbHVlX3NlZWQ6Omg4ZDI4NjI3NmUyYzM0NmE52AlaPHNlcmRlX2pz\ -b246OmRlOjpNYXBBY2Nlc3M8Uj4gYXMgc2VyZGU6OmRlOjpNYXBBY2Nlc3M+OjpuZXh0X3ZhbHVlX3\ -NlZWQ6OmhkZjgxMzgxYzNlYTg5OTU52QlaPHNlcmRlX2pzb246OmRlOjpNYXBBY2Nlc3M8Uj4gYXMg\ -c2VyZGU6OmRlOjpNYXBBY2Nlc3M+OjpuZXh0X3ZhbHVlX3NlZWQ6OmhmZGE3ZGFjY2NhMmQwZjIw2g\ -kuc3RkOjpwYW5pY2tpbmc6OmJlZ2luX3BhbmljOjpoZjgwMTMxNWNkMmE4MTdiMdsJM2FsbG9jOjph\ -bGxvYzo6R2xvYmFsOjphbGxvY19pbXBsOjpoMGZiNWI2ZGFkNjk2MDg2N9wJYTxjb3JlOjpvcHM6On\ -JhbmdlOjpSYW5nZTx1c2l6ZT4gYXMgY29yZTo6c2xpY2U6OmluZGV4OjpTbGljZUluZGV4PFtUXT4+\ -OjppbmRleDo6aDk3OWYxNDYzNWYwNDVkNjLdCWE8Y29yZTo6b3BzOjpyYW5nZTo6UmFuZ2U8dXNpem\ -U+IGFzIGNvcmU6OnNsaWNlOjppbmRleDo6U2xpY2VJbmRleDxbVF0+Pjo6aW5kZXg6OmhlNDAwNjFh\ -MTcwYmQ4ZTI33gkuc3RkOjpwYW5pY2tpbmc6OmJlZ2luX3BhbmljOjpoOWNjMTRhYzk1NTZkM2Q4Yt\ -8JLnN0ZDo6cGFuaWNraW5nOjpiZWdpbl9wYW5pYzo6aDkwNGYwOTgzZjVhNjRlZWbgCV5jb3JlOjpw\ -dHI6OmRyb3BfaW5fcGxhY2U8c3RkOjpwYW5pY2tpbmc6OmJlZ2luX3BhbmljX2hhbmRsZXI6OlBhbm\ -ljUGF5bG9hZD46Omg1M2FhYWVjZmExNDkwNWI54Qk1ZGxtYWxsb2M6OmRsbWFsbG9jOjpTZWdtZW50\ -Ojpob2xkczo6aDhhMjViOTJhOWUwMmJiMGTiCS1zZXJkZV9qc29uOjpkZTo6ZnJvbV9zbGljZTo6aG\ -M2YmE2N2E0NGY0NzhjYmHjCStzZXJkZV9qc29uOjpkZTo6ZnJvbV9zdHI6OmgyZWUzZTE2NDQ5Mzgz\ -Nzk05AlePGhhc2hicm93bjo6bWFwOjpJdGVyPEssVj4gYXMgY29yZTo6aXRlcjo6dHJhaXRzOjppdG\ -VyYXRvcjo6SXRlcmF0b3I+OjpuZXh0OjpoMzdiOTZkYTZmYzZiMzlhOOUJQ2hhc2hicm93bjo6cmF3\ -OjpSYXdUYWJsZTxULEE+OjpmaW5kOjp7e2Nsb3N1cmV9fTo6aGZiODI1ODQ5ZTViNzE0ZDjmCURjb3\ -JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8W2FsbG9jOjpzdHJpbmc6OlN0cmluZ10+OjpoODhkMGE1MDRi\ -YTFjMWM5Y+cJO2NvcmU6OnNsaWNlOjo8aW1wbCBbVF0+Ojpjb3B5X2Zyb21fc2xpY2U6Omg5MTUxOW\ -RiY2JiYmM0NDFh6AkxYWxsb2M6OnJhd192ZWM6OmhhbmRsZV9yZXNlcnZlOjpoZWJlYmVhZmQ5Mjc2\ -Y2UwY+kJXzxoYXNoYnJvd246OnJhdzo6UmF3SXRlcjxUPiBhcyBjb3JlOjppdGVyOjp0cmFpdHM6Om\ -l0ZXJhdG9yOjpJdGVyYXRvcj46Om5leHQ6OmgyMjVkZmI3MjkwMTkyNGJk6glfPGhhc2hicm93bjo6\ -cmF3OjpSYXdJdGVyPFQ+IGFzIGNvcmU6Oml0ZXI6OnRyYWl0czo6aXRlcmF0b3I6Okl0ZXJhdG9yPj\ -o6bmV4dDo6aGYxMmMwN2JiODBhNjc5ZmTrCUFoYXNoYnJvd246Om1hcDo6SGFzaE1hcDxLLFYsUyxB\ -Pjo6Y29udGFpbnNfa2V5OjpoY2RjZTRmOGY0ZTczMmUxN+wJPmhhc2hicm93bjo6cmF3OjpSYXdUYW\ -JsZTxULEE+OjpyZW1vdmVfZW50cnk6OmhlZmY3NTFjZGU1MDRlN2Mx7QkxYWxsb2M6OnJhd192ZWM6\ -OmhhbmRsZV9yZXNlcnZlOjpoZWJlYmVhZmQ5Mjc2Y2UwY+4JMWFsbG9jOjpyYXdfdmVjOjpoYW5kbG\ -VfcmVzZXJ2ZTo6aGViZWJlYWZkOTI3NmNlMGPvCTFhbGxvYzo6cmF3X3ZlYzo6aGFuZGxlX3Jlc2Vy\ -dmU6OmhlYmViZWFmZDkyNzZjZTBj8AlAY29yZTo6cHRyOjpkcm9wX2luX3BsYWNlPHN0ZDo6dGhyZW\ -FkOjpUaHJlYWQ+OjpoNTY4MmEyOWYzNDQ4MDQyMvEJPmRlbm9fbWVkaWFfdHlwZTo6TWVkaWFUeXBl\ -Ojphc190c19leHRlbnNpb246OmgwNDNjMDJjYmNmODI3MzM08gkxYWxsb2M6OnJhd192ZWM6Omhhbm\ -RsZV9yZXNlcnZlOjpoZWJlYmVhZmQ5Mjc2Y2UwY/MJO2NvcmU6OnNsaWNlOjo8aW1wbCBbVF0+Ojpj\ -b3B5X2Zyb21fc2xpY2U6Omg1YWM0YjY5ZDA3YjNhOTFk9AkxYWxsb2M6OnJhd192ZWM6OmhhbmRsZV\ -9yZXNlcnZlOjpoZWJlYmVhZmQ5Mjc2Y2UwY/UJMWFsbG9jOjpyYXdfdmVjOjpoYW5kbGVfcmVzZXJ2\ -ZTo6aGViZWJlYWZkOTI3NmNlMGP2CRJfX3diaW5kZ2VuX3JlYWxsb2P3CTFhbGxvYzo6cmF3X3ZlYz\ -o6aGFuZGxlX3Jlc2VydmU6OmhlYmViZWFmZDkyNzZjZTBj+AlYPGFsbG9jOjp2ZWM6OmludG9faXRl\ -cjo6SW50b0l0ZXI8VCxBPiBhcyBjb3JlOjpvcHM6OmRyb3A6OkRyb3A+Ojpkcm9wOjpoNGNhMmY5YT\ -kwODZlYmY2M/kJVGNvcmU6OnNsaWNlOjpzb3J0OjptZXJnZV9zb3J0OjpSdW5WZWM8UnVuQWxsb2NG\ -LFJ1bkRlYWxsb2NGPjo6bmV3OjpoYWY0ZGQ4MWVkMDYxNThlOfoJMWFsbG9jOjpyYXdfdmVjOjpoYW\ -5kbGVfcmVzZXJ2ZTo6aGViZWJlYWZkOTI3NmNlMGP7CVdjb3JlOjpzbGljZTo6aW5kZXg6OjxpbXBs\ -IGNvcmU6Om9wczo6aW5kZXg6OkluZGV4PEk+IGZvciBbVF0+OjppbmRleDo6aDVhYjY5ODBiYjNkZT\ -c4YjX8CTFhbGxvYzo6cmF3X3ZlYzo6aGFuZGxlX3Jlc2VydmU6OmhlYmViZWFmZDkyNzZjZTBj/Qkx\ -YWxsb2M6OnJhd192ZWM6OmhhbmRsZV9yZXNlcnZlOjpoZWJlYmVhZmQ5Mjc2Y2UwY/4JWDxhbGxvYz\ -o6dmVjOjppbnRvX2l0ZXI6OkludG9JdGVyPFQsQT4gYXMgY29yZTo6b3BzOjpkcm9wOjpEcm9wPjo6\ -ZHJvcDo6aDE1YzVhMWNjMjMxYzE1NWT/CUJkbG1hbGxvYzo6ZGxtYWxsb2M6OkNodW5rOjpzZXRfZn\ -JlZV93aXRoX3BpbnVzZTo6aDI0YWFlNGZlZDJhOTkyOWaACk5jb3JlOjpmbXQ6Om51bTo6aW1wOjo8\ -aW1wbCBjb3JlOjpmbXQ6OkRpc3BsYXkgZm9yIGkzMj46OmZtdDo6aDQyZTYwMzQ4NjYwOTgxOGaBCk\ -hjb3JlOjpvcHM6OmZ1bmN0aW9uOjpGbk9uY2U6OmNhbGxfb25jZXt7dnRhYmxlLnNoaW19fTo6aDhk\ -MjY4MjRiNTk3NjRjMzCCCkNoYXNoYnJvd246OnJhdzo6UmF3VGFibGU8VCxBPjo6ZmluZDo6e3tjbG\ -9zdXJlfX06OmhjMWI4ZjUwYmI4OWZjM2Y5gwpDaGFzaGJyb3duOjpyYXc6OlJhd1RhYmxlPFQsQT46\ -OmZpbmQ6Ont7Y2xvc3VyZX19OjpoZDYxNjA4ZjRlNjkwN2YxOIQKPmhhc2hicm93bjo6cmF3OjpSYX\ -dUYWJsZTxULEE+OjpyZW1vdmVfZW50cnk6OmhjZDJkOWE5MGRhY2Y3YmQwhQpDaGFzaGJyb3duOjpy\ -YXc6OlJhd1RhYmxlPFQsQT46OmZpbmQ6Ont7Y2xvc3VyZX19OjpoZTJlZmVlNDk2OTQ3MTc3Y4YKL3\ -NlcmRlX2pzb246OmVycm9yOjpFcnJvcjo6aW86Omg2ZWY5NmMxZmUwYjY1NWZihwpOZGVub19tZWRp\ -YV90eXBlOjpNZWRpYVR5cGU6OmZyb21fc3BlY2lmaWVyX2FuZF9jb250ZW50X3R5cGU6OmhlZTAwOD\ -UzNTU3ZWEzMDFliAo/d2FzbV9iaW5kZ2VuOjpjb252ZXJ0OjpjbG9zdXJlczo6aW52b2tlNF9tdXQ6\ -Omg4MmU3ZWRhYTMwZTYyMDRliQpoPGNvcmU6Oml0ZXI6OmFkYXB0ZXJzOjp0YWtlOjpUYWtlPEk+IG\ -FzIGNvcmU6Oml0ZXI6OnRyYWl0czo6aXRlcmF0b3I6Okl0ZXJhdG9yPjo6bmV4dDo6aDk3Y2FkOTNm\ -ZDM0Mzk2MWKKCkw8YWxsb2M6OmJvcnJvdzo6Q293PEI+IGFzIGNvcmU6Om9wczo6ZGVyZWY6OkRlcm\ -VmPjo6ZGVyZWY6Omg0ZmNhODM3MmUwYzgyZWFjiwpMPGFsbG9jOjpib3Jyb3c6OkNvdzxCPiBhcyBj\ -b3JlOjpvcHM6OmRlcmVmOjpEZXJlZj46OmRlcmVmOjpoNWI0NGQ1NjFmNDczYjJiZIwKTmNvcmU6Om\ -ZtdDo6bnVtOjppbXA6OjxpbXBsIGNvcmU6OmZtdDo6RGlzcGxheSBmb3IgaTY0Pjo6Zm10OjpoNGM5\ -OWNkOTcxZmQzNjZlMo0KTWhhc2hicm93bjo6cmF3OjpSYXdUYWJsZTxULEE+OjpyZXNlcnZlX3JlaG\ -FzaDo6e3tjbG9zdXJlfX06OmgzYzBmY2M2Y2JjMDc5MmY2jgpNaGFzaGJyb3duOjpyYXc6OlJhd1Rh\ -YmxlPFQsQT46OnJlc2VydmVfcmVoYXNoOjp7e2Nsb3N1cmV9fTo6aDM3M2RkMTgwZjc4NDlhNGOPCj\ -Jjb3JlOjpvcHRpb246Ok9wdGlvbjxUPjo6dW53cmFwOjpoNTIwZWI5MmQzOWY0YmEyMpAKMGFsbG9j\ -Ojp2ZWM6OlZlYzxULEE+OjpyZXNlcnZlOjpoOWVkOGI4OWFmYzg3YTRiZJEK4AE8ZGVub19jYWNoZV\ -9kaXI6OmxvY2FsOjptYW5pZmVzdDo6Xzo6PGltcGwgc2VyZGU6OmRlOjpEZXNlcmlhbGl6ZSBmb3Ig\ -ZGVub19jYWNoZV9kaXI6OmxvY2FsOjptYW5pZmVzdDo6U2VyaWFsaXplZExvY2FsQ2FjaGVNYW5pZm\ -VzdERhdGFNb2R1bGU+OjpkZXNlcmlhbGl6ZTo6X19GaWVsZFZpc2l0b3IgYXMgc2VyZGU6OmRlOjpW\ -aXNpdG9yPjo6dmlzaXRfc3RyOjpoNTNjZDQwYWFhMzA5NDNiMpIKGl9fd2JnX2dsb2JhbGh0dHBjYW\ -NoZV9mcmVlkwowYWxsb2M6OnZlYzo6VmVjPFQsQT46OnJlc2VydmU6OmgzZDJmZTZmNzZkMTc2Y2Jh\ -lAowYWxsb2M6OnZlYzo6VmVjPFQsQT46OnJlc2VydmU6OmgyZGEyOWE1NjQ0MzdhY2MwlQo+cGFya2\ -luZ19sb3RfY29yZTo6d29yZF9sb2NrOjpXb3JkTG9jazo6bG9jazo6aDYyYmUzYjgwMTEwNWI5MTOW\ -CkBoYXNoYnJvd246OnJhdzo6aW5uZXI6OkZhbGxpYmlsaXR5OjphbGxvY19lcnI6OmgzOTYzMzNjZW\ -M4ZjA1NTNklwowYWxsb2M6OnZlYzo6VmVjPFQsQT46OnJlc2VydmU6OmhkOTJlMmE2NWY3NzAzZWQz\ -mApGPFtBXSBhcyBjb3JlOjpzbGljZTo6Y21wOjpTbGljZVBhcnRpYWxFcTxCPj46OmVxdWFsOjpoOT\ -E1Yzk2MzIwYjI2YzYxZpkKMGFsbG9jOjp2ZWM6OlZlYzxULEE+OjpyZXNlcnZlOjpoOGI1ODQxZmZi\ -YTlmZWE5NZoKP3dhc21fYmluZGdlbjo6Y29udmVydDo6Y2xvc3VyZXM6Omludm9rZTNfbXV0OjpoMD\ -Q0YjY0M2UyMzlmODZlMJsKP3dhc21fYmluZGdlbjo6Y29udmVydDo6Y2xvc3VyZXM6Omludm9rZTNf\ -bXV0OjpoMWM1MjgyZWUyOGM3MzNlZpwKP3dhc21fYmluZGdlbjo6Y29udmVydDo6Y2xvc3VyZXM6Om\ -ludm9rZTNfbXV0OjpoMjQzYWE5YTA2NWQ4ZWNhZJ0KP3dhc21fYmluZGdlbjo6Y29udmVydDo6Y2xv\ -c3VyZXM6Omludm9rZTNfbXV0OjpoNTRiMGI0Y2IyNTU3MzRhNJ4KP3dhc21fYmluZGdlbjo6Y29udm\ -VydDo6Y2xvc3VyZXM6Omludm9rZTNfbXV0OjpoNmNlNTlhM2Q2MDc5MTYxM58KP3dhc21fYmluZGdl\ -bjo6Y29udmVydDo6Y2xvc3VyZXM6Omludm9rZTNfbXV0OjpoNzEyYTQ2YjVjMzgxNmQxNqAKP3dhc2\ -1fYmluZGdlbjo6Y29udmVydDo6Y2xvc3VyZXM6Omludm9rZTNfbXV0OjpoN2Y4MTQ2NTZlZTlhMjZm\ -M6EKP3dhc21fYmluZGdlbjo6Y29udmVydDo6Y2xvc3VyZXM6Omludm9rZTNfbXV0OjpoZjgyMDVlOD\ -kwYTk1MTFhN6IKRjxbQV0gYXMgY29yZTo6c2xpY2U6OmNtcDo6U2xpY2VQYXJ0aWFsRXE8Qj4+Ojpl\ -cXVhbDo6aGMzNTM2ZGQzNzY1Yjk4OGGjCjJjb3JlOjpvcHRpb246Ok9wdGlvbjxUPjo6dW53cmFwOj\ -poNTA2ZjNlNzkxNzliZjVmOaQKMGFsbG9jOjp2ZWM6OlZlYzxULEE+OjpyZXNlcnZlOjpoMjk1ZTAy\ -YjVkOTdjZTRlY6UKRTx1cmw6OnBhcnNlcjo6UGFyc2VFcnJvciBhcyBjb3JlOjpmbXQ6OkRlYnVnPj\ -o6Zm10OjpoZjJlMzFjOGE1YzIyOTdkZaYKRjxbQV0gYXMgY29yZTo6c2xpY2U6OmNtcDo6U2xpY2VQ\ -YXJ0aWFsRXE8Qj4+OjplcXVhbDo6aDNhOTUyYWEzMDk0YTNlYTGnCjBhbGxvYzo6dmVjOjpWZWM8VC\ -xBPjo6cmVzZXJ2ZTo6aDUxNTZkNmQwYjRiMGYzZTWoCjBhbGxvYzo6dmVjOjpWZWM8VCxBPjo6cmVz\ -ZXJ2ZTo6aGI4YTQwMWFjMDI2YzcyMzapCjBhbGxvYzo6dmVjOjpWZWM8VCxBPjo6cmVzZXJ2ZTo6aD\ -FiYmQ1ZjA2ZjIyZDJkMTWqCjBhbGxvYzo6dmVjOjpWZWM8VCxBPjo6cmVzZXJ2ZTo6aGJkYjkxODJl\ -ZjZmYTY2NDarCkY8W0FdIGFzIGNvcmU6OnNsaWNlOjpjbXA6OlNsaWNlUGFydGlhbEVxPEI+Pjo6ZX\ -F1YWw6OmgyNjA5ZTdmMTFkMDg1NzlmrApGPFtBXSBhcyBjb3JlOjpzbGljZTo6Y21wOjpTbGljZVBh\ -cnRpYWxFcTxCPj46OmVxdWFsOjpoNmRhNDA0ZDBhNjQxNGM2ZK0KRzxzdGQ6OmlvOjplcnJvcjo6RX\ -Jyb3JLaW5kIGFzIGNvcmU6OmZtdDo6RGVidWc+OjpmbXQ6Omg1ZDFmNjY2Y2ZkZGFhYzk3rgpCZGxt\ -YWxsb2M6OmRsbWFsbG9jOjpDaHVuazo6c2V0X2ludXNlX2FuZF9waW51c2U6OmhjM2RlYjM3OTE1OT\ -Q3ODg4rwo5aGFzaGJyb3duOjpyYXc6OkZhbGxpYmlsaXR5OjphbGxvY19lcnI6Omg3YTU1MDk5Mzll\ -MWFkYTNhsApPPGFsbG9jOjpyYXdfdmVjOjpSYXdWZWM8VCxBPiBhcyBjb3JlOjpvcHM6OmRyb3A6Ok\ -Ryb3A+Ojpkcm9wOjpoNWJiZDc3NDJiZmJlMGRmNrEKTHN0ZDo6c3lzOjpjb21tb246OnRocmVhZF9s\ -b2NhbDo6c3RhdGljX2xvY2FsOjpLZXk8VD46OmdldDo6aGZiOTgwZWE5MTUxMTUxNTSyCkNoYXNoYn\ -Jvd246OnJhdzo6UmF3VGFibGU8VCxBPjo6ZmluZDo6e3tjbG9zdXJlfX06Omg5NGZmNWRjYzYyMTFi\ -ZGVmswpPPGFsbG9jOjpyYXdfdmVjOjpSYXdWZWM8VCxBPiBhcyBjb3JlOjpvcHM6OmRyb3A6OkRyb3\ -A+Ojpkcm9wOjpoYjVkZTExZmM4OGE3NmE3YrQKTzxhbGxvYzo6cmF3X3ZlYzo6UmF3VmVjPFQsQT4g\ -YXMgY29yZTo6b3BzOjpkcm9wOjpEcm9wPjo6ZHJvcDo6aDliNmFlNWUxNjQyYTUyYWS1Ck88YWxsb2\ -M6OnJhd192ZWM6OlJhd1ZlYzxULEE+IGFzIGNvcmU6Om9wczo6ZHJvcDo6RHJvcD46OmRyb3A6Omg4\ -YzljMjQ1OWI0NDUxOTk2tgpBYW55aG93OjplcnJvcjo6PGltcGwgYW55aG93OjpFcnJvcj46OmNvbn\ -N0cnVjdDo6aGQ0ZjM4OTIyODQ1OTVmNmO3Ck88YWxsb2M6OnJhd192ZWM6OlJhd1ZlYzxULEE+IGFz\ -IGNvcmU6Om9wczo6ZHJvcDo6RHJvcD46OmRyb3A6OmhlZTQ5ZjU4YzYyMTk0MGI2uAo+Y29yZTo6cH\ -RyOjpkcm9wX2luX3BsYWNlPGRhdGFfdXJsOjpEYXRhVXJsPjo6aDdkNzY2MzY1ZmExZjRjNGS5Ck88\ -YWxsb2M6OnJhd192ZWM6OlJhd1ZlYzxULEE+IGFzIGNvcmU6Om9wczo6ZHJvcDo6RHJvcD46OmRyb3\ -A6OmhiNzM0MzRjNDVmMzI3NzE1ugo/d2FzbV9iaW5kZ2VuOjpjb252ZXJ0OjpjbG9zdXJlczo6aW52\ -b2tlMl9tdXQ6OmhhZTBmOTE2ZTUyMjRkYjQzuwpPPGFsbG9jOjpyYXdfdmVjOjpSYXdWZWM8VCxBPi\ -BhcyBjb3JlOjpvcHM6OmRyb3A6OkRyb3A+Ojpkcm9wOjpoOWJiOTk5NDA5Mzg5MGUxObwKTzxhbGxv\ -Yzo6cmF3X3ZlYzo6UmF3VmVjPFQsQT4gYXMgY29yZTo6b3BzOjpkcm9wOjpEcm9wPjo6ZHJvcDo6aD\ -BjNDA5ZjAyNzE3OTA3ZmW9Cjw8RiBhcyB1cmw6OnBhcnNlcjo6UGF0dGVybj46OnNwbGl0X3ByZWZp\ -eDo6aGI5NjYyNGM0ZDcxZTgyN2O+Ck88YWxsb2M6OnJhd192ZWM6OlJhd1ZlYzxULEE+IGFzIGNvcm\ -U6Om9wczo6ZHJvcDo6RHJvcD46OmRyb3A6OmhhMTA4MTI1M2U2NDkzZmVmvwpPPGFsbG9jOjpyYXdf\ -dmVjOjpSYXdWZWM8VCxBPiBhcyBjb3JlOjpvcHM6OmRyb3A6OkRyb3A+Ojpkcm9wOjpoOWRjYTExZT\ -FmNDdmYzcxMsAKTzxhbGxvYzo6cmF3X3ZlYzo6UmF3VmVjPFQsQT4gYXMgY29yZTo6b3BzOjpkcm9w\ -OjpEcm9wPjo6ZHJvcDo6aDQwOGRkYjhjODQ3N2JjNmbBCkJjb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2\ -U8YWxsb2M6OnN0cmluZzo6U3RyaW5nPjo6aGNhNTJhZmNlZDBmOWFiYTXCCr8BY29yZTo6cHRyOjpk\ -cm9wX2luX3BsYWNlPDxhbGxvYzo6Ym94ZWQ6OkJveDxkeW4gY29yZTo6ZXJyb3I6OkVycm9yK2Nvcm\ -U6Om1hcmtlcjo6U2VuZCtjb3JlOjptYXJrZXI6OlN5bmM+IGFzIGNvcmU6OmNvbnZlcnQ6OkZyb208\ -YWxsb2M6OnN0cmluZzo6U3RyaW5nPj46OmZyb206OlN0cmluZ0Vycm9yPjo6aDU1NDMwMmQ3ZjU1Nm\ -EzNznDCjQ8Ym9vbCBhcyBjb3JlOjpmbXQ6OkRpc3BsYXk+OjpmbXQ6OmhmYTk5OWVkM2ZjZDA2NmIz\ -xAo3Y29yZTo6cmVzdWx0OjpSZXN1bHQ8VCxFPjo6dW53cmFwX29yOjpoMTM4M2IwY2Q4ZTg5MzlkZc\ -UKTWhhc2hicm93bjo6cmF3OjpSYXdUYWJsZTxULEE+OjpyZXNlcnZlX3JlaGFzaDo6e3tjbG9zdXJl\ -fX06Omg1ODcyZGE1NzI5ZjZkZTA4xgpNaGFzaGJyb3duOjpyYXc6OlJhd1RhYmxlPFQsQT46OnJlc2\ -VydmVfcmVoYXNoOjp7e2Nsb3N1cmV9fTo6aDM4Y2I5YjI4NGQ1Yjk0YjXHCl5oYXNoYnJvd246OnJh\ -dzo6aW5uZXI6OlJhd1RhYmxlPFQsQT46OmZpbmRfb3JfZmluZF9pbnNlcnRfc2xvdDo6e3tjbG9zdX\ -JlfX06OmhjYTczNDgxNTA1MmU5MWIxyApeaGFzaGJyb3duOjpyYXc6OmlubmVyOjpSYXdUYWJsZTxU\ -LEE+OjpmaW5kX29yX2ZpbmRfaW5zZXJ0X3Nsb3Q6Ont7Y2xvc3VyZX19OjpoMzVjMWFkODc3MGEzMz\ -cxNMkKXmhhc2hicm93bjo6cmF3Ojppbm5lcjo6UmF3VGFibGU8VCxBPjo6ZmluZF9vcl9maW5kX2lu\ -c2VydF9zbG90Ojp7e2Nsb3N1cmV9fTo6aGJiNzhlYWJjYzZkZmQ5MTTKCl88c2VyZGVfd2FzbV9iaW\ -5kZ2VuOjpkZTo6TWFwQWNjZXNzIGFzIHNlcmRlOjpkZTo6TWFwQWNjZXNzPjo6bmV4dF92YWx1ZV9z\ -ZWVkOjpoMWU2ZDFkZDFlYzVkMjY2YssKSmhhc2hicm93bjo6cmF3Ojppbm5lcjo6UmF3VGFibGU8VC\ -xBPjo6ZmluZDo6e3tjbG9zdXJlfX06OmgwNzE3Yjg2NTNhNzU0NjhkzApKaGFzaGJyb3duOjpyYXc6\ -OmlubmVyOjpSYXdUYWJsZTxULEE+OjpmaW5kOjp7e2Nsb3N1cmV9fTo6aDQ4MzZmZGI1MjhjMTA1Y2\ -HNCkpoYXNoYnJvd246OnJhdzo6aW5uZXI6OlJhd1RhYmxlPFQsQT46OmZpbmQ6Ont7Y2xvc3VyZX19\ -OjpoZjBkYTc1ZDkzMjBmNTVhMc4KTmRlbm9fY2FjaGVfZGlyOjpnbG9iYWw6Okdsb2JhbEh0dHBDYW\ -NoZTxFbnY+OjprZXlfZmlsZV9wYXRoOjpoZGI0MjY0Nzc0NWYzYzBiMM8KOWhhc2hicm93bjo6cmF3\ -OjphbGxvYzo6aW5uZXI6OmRvX2FsbG9jOjpoNWYxNGVkM2FiMzBkNGNmN9AKTHN0ZDo6c3lzOjpjb2\ -1tb246OnRocmVhZF9sb2NhbDo6c3RhdGljX2xvY2FsOjpLZXk8VD46OmdldDo6aGUxN2MxOTAxZDlk\ -ZjAwMznRCl48c3RkOjpwYW5pY2tpbmc6OmJlZ2luX3BhbmljOjpQYW5pY1BheWxvYWQ8QT4gYXMgY2\ -9yZTo6cGFuaWM6OkJveE1lVXA+OjpnZXQ6Omg4NTcxNDc2MjExMWJkYmEx0go/d2FzbV9iaW5kZ2Vu\ -Ojpjb252ZXJ0OjpjbG9zdXJlczo6aW52b2tlMV9tdXQ6Omg2MTY2ZmY0YzhlY2Q0YjYy0womanNfc3\ -lzOjpBcnJheTo6aXRlcjo6aDk3YzcwNDM1MWUyMWI2MjTUCjd1cmw6OnBhcnNlcjo6aXNfd2luZG93\ -c19kcml2ZV9sZXR0ZXI6OmhiOGI3NDRhOWY2ZWZiNzc11QpePHN0ZDo6cGFuaWNraW5nOjpiZWdpbl\ -9wYW5pYzo6UGFuaWNQYXlsb2FkPEE+IGFzIGNvcmU6OnBhbmljOjpCb3hNZVVwPjo6Z2V0OjpoYTE2\ -NTE2NjhlYTc3YjAzY9YKXjxzdGQ6OnBhbmlja2luZzo6YmVnaW5fcGFuaWM6OlBhbmljUGF5bG9hZD\ -xBPiBhcyBjb3JlOjpwYW5pYzo6Qm94TWVVcD46OmdldDo6aDkwNGE4ZDk1YjRmYTNlMjfXCjtzdGQ6\ -OnN5czo6d2FzbTo6b3Nfc3RyOjpCdWY6OmZyb21fc3RyaW5nOjpoMWYwMjkyZTU1ODZmZjE4ONgKZG\ -NvcmU6OnB0cjo6ZHJvcF9pbl9wbGFjZTxpbmRleG1hcDo6bWFwOjpJbmRleE1hcDx1cmw6OlVybCxh\ -bGxvYzo6c3RyaW5nOjpTdHJpbmc+Pjo6aGI2YzY1OTUzYjIxYTNmOGLZCnFjb3JlOjpwdHI6OmRyb3\ -BfaW5fcGxhY2U8aW5kZXhtYXA6Om1hcDo6SW5kZXhNYXA8YWxsb2M6OnN0cmluZzo6U3RyaW5nLGFs\ -bG9jOjpzdHJpbmc6OlN0cmluZz4+OjpoNDQxNDVhZDg3MWE3ZmQ4MdoKlgFjb3JlOjpwdHI6OmRyb3\ -BfaW5fcGxhY2U8aW5kZXhtYXA6Om1hcDo6SW5kZXhNYXA8dXJsOjpVcmwsZGVub19jYWNoZV9kaXI6\ -OmxvY2FsOjptYW5pZmVzdDo6U2VyaWFsaXplZExvY2FsQ2FjaGVNYW5pZmVzdERhdGFNb2R1bGU+Pj\ -o6aDVjNWZlN2ZhNmYyMzM2NmLbCjxzZXJkZTo6c2VyOjpTZXJpYWxpemVNYXA6OnNlcmlhbGl6ZV9l\ -bnRyeTo6aDcyMzUyNzRmN2ZmN2M5Y2XcClo8c2VyZGVfanNvbjo6ZGU6Ok1hcEFjY2VzczxSPiBhcy\ -BzZXJkZTo6ZGU6Ok1hcEFjY2Vzcz46Om5leHRfdmFsdWVfc2VlZDo6aDg0ODY5NGMzMzU4ZjE2Yzbd\ -Clo8c2VyZGVfanNvbjo6ZGU6Ok1hcEFjY2VzczxSPiBhcyBzZXJkZTo6ZGU6Ok1hcEFjY2Vzcz46Om\ -5leHRfdmFsdWVfc2VlZDo6aGJhZDU1MmQ5YTc3ZTVhZjTeCk48YWxsb2M6OnZlYzo6VmVjPFQsQT4g\ -YXMgY29yZTo6b3BzOjppbmRleDo6SW5kZXg8ST4+OjppbmRleDo6aDU5N2U5MmJkMmExNDZmYTnfCk\ -FoYXNoYnJvd246Om1hcDo6SGFzaE1hcDxLLFYsUyxBPjo6cmVtb3ZlX2VudHJ5OjpoMjliMDdmMzE0\ -ODVhMTU4YeAKOXNlcmRlX3dhc21fYmluZGdlbjo6ZGU6Ok1hcEFjY2Vzczo6bmV3OjpoMzk2NjA5Mm\ -ZmNDQ5Yzg5NOEKTzxhbGxvYzo6cmF3X3ZlYzo6UmF3VmVjPFQsQT4gYXMgY29yZTo6b3BzOjpkcm9w\ -OjpEcm9wPjo6ZHJvcDo6aDA4M2FjOGE5YTQ0NzY3ODPiCk48YWxsb2M6OnZlYzo6VmVjPFQsQT4gYX\ -MgY29yZTo6b3BzOjppbmRleDo6SW5kZXg8ST4+OjppbmRleDo6aDY0ZGNiMGZkOGFlZmExNTLjCk88\ -YWxsb2M6OnJhd192ZWM6OlJhd1ZlYzxULEE+IGFzIGNvcmU6Om9wczo6ZHJvcDo6RHJvcD46OmRyb3\ -A6OmhmZjVjMzk3MmY0ZWE4Mjhi5ApPPGFsbG9jOjpyYXdfdmVjOjpSYXdWZWM8VCxBPiBhcyBjb3Jl\ -OjpvcHM6OmRyb3A6OkRyb3A+Ojpkcm9wOjpoOGYyM2IyMzZjMmE2ODNhZeUKZmFsbG9jOjp2ZWM6Om\ -Nvdzo6PGltcGwgY29yZTo6Y29udmVydDo6RnJvbTwmW1RdPiBmb3IgYWxsb2M6OmJvcnJvdzo6Q293\ -PFtUXT4+Ojpmcm9tOjpoNWQ3YTM1Y2FmNjQ0NDdmZOYKTzxhbGxvYzo6cmF3X3ZlYzo6UmF3VmVjPF\ -QsQT4gYXMgY29yZTo6b3BzOjpkcm9wOjpEcm9wPjo6ZHJvcDo6aDZkMzQzMDEwNWU2YWU4MWPnCk88\ -YWxsb2M6OnJhd192ZWM6OlJhd1ZlYzxULEE+IGFzIGNvcmU6Om9wczo6ZHJvcDo6RHJvcD46OmRyb3\ -A6OmgxMDNjZDdiYzdjMmYxMTg16AowPCZUIGFzIGNvcmU6OmZtdDo6RGVidWc+OjpmbXQ6OmgxYjgz\ -MzY4ODMzYWZkODZj6QoLX19yZGxfYWxsb2PqCkBkbG1hbGxvYzo6ZGxtYWxsb2M6OlRyZWVDaHVuaz\ -o6bGVmdG1vc3RfY2hpbGQ6Omg5ZWJhMTJlMzFlZTM2ZTBm6wooc3RkOjpwYXRoOjpQYXRoOjpqb2lu\ -OjpoZTNmZTQyN2Q5YTZlYmQwNuwKS2NvcmU6OnB0cjo6ZHJvcF9pbl9wbGFjZTxjb3JlOjpvcHRpb2\ -46Ok9wdGlvbjx1cmw6OlVybD4+OjpoMDMxMTlkNDViYThhMmE4ZO0KQWFueWhvdzo6ZXJyb3I6Ojxp\ -bXBsIGFueWhvdzo6RXJyb3I+Ojpjb25zdHJ1Y3Q6OmhiMzAwMTZlOTgzZjMyMTI57gpBYW55aG93Oj\ -plcnJvcjo6PGltcGwgYW55aG93OjpFcnJvcj46OmNvbnN0cnVjdDo6aDBmMDgyYTk3NmEwNWFkMmXv\ -CkBvbmNlX2NlbGw6OnN5bmM6Ok9uY2VDZWxsPFQ+OjpnZXRfb3JfdHJ5X2luaXQ6OmhmZDgwYTY3NG\ -RlZTViNzE28ApAb25jZV9jZWxsOjpzeW5jOjpPbmNlQ2VsbDxUPjo6Z2V0X29yX3RyeV9pbml0Ojpo\ -MTZkOWIxYmZkYmJkNDE1ZfEKb2Rlbm9fY2FjaGVfZGlyOjpsb2NhbDo6TG9jYWxDYWNoZU1hbmlmZX\ -N0PEVudj46Omluc2VydF9kYXRhOjpzaG91bGRfa2VlcF9jb250ZW50X3R5cGVfaGVhZGVyOjpoNWVh\ -ZWY1NzMwMTFiNWM3YvIKOWFsbG9jOjp2ZWM6OlZlYzxULEE+OjppbnRvX2JveGVkX3NsaWNlOjpoNz\ -VlOGNiZmEwZWM0YjYzNfMKOWFsbG9jOjp2ZWM6OlZlYzxULEE+OjppbnRvX2JveGVkX3NsaWNlOjpo\ -OWQzYTdmYzRjYTFjZDYwOfQKOWFsbG9jOjp2ZWM6OlZlYzxULEE+OjppbnRvX2JveGVkX3NsaWNlOj\ -poZmZmNDk3OTk2OTcwYjc0MvUKamNvcmU6OnNsaWNlOjppdGVyOjo8aW1wbCBjb3JlOjppdGVyOjp0\ -cmFpdHM6OmNvbGxlY3Q6OkludG9JdGVyYXRvciBmb3IgJltUXT46OmludG9faXRlcjo6aDFmNDExZT\ -hiN2UyOTk4YmP2CjlhbGxvYzo6dmVjOjpWZWM8VCxBPjo6aW50b19ib3hlZF9zbGljZTo6aGQ0ZWYx\ -OThjYmFkYWI0ZDn3CjlhbGxvYzo6dmVjOjpWZWM8VCxBPjo6aW50b19ib3hlZF9zbGljZTo6aDk2Yj\ -c0MDllNTE3NmRlZDL4ClFjb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8dGlueXZlYzo6dGlueXZlYzo6\ -VGlueVZlYzxbY2hhcjsgNF0+Pjo6aGQxNjNkNGEyYjk3OTEzMzL5ClZjb3JlOjpwdHI6OmRyb3BfaW\ -5fcGxhY2U8dGlueXZlYzo6dGlueXZlYzo6VGlueVZlYzxbKHU4LGNoYXIpOyA0XT4+OjpoOGFmYWJm\ -NTNiMzIxZGMzMvoKJ3N0ZDo6dGhyZWFkOjpjdXJyZW50OjpoMjUwYzIxYWMxYThmNGYzZPsKCF9fcm\ -dfb29t/Ao/ZGxtYWxsb2M6OmRsbWFsbG9jOjpsZWZ0c2hpZnRfZm9yX3RyZWVfaW5kZXg6Omg1NTAy\ -NWZmNzZkZmYxM2U1/QpPZGxtYWxsb2M6OmRsbWFsbG9jOjpDaHVuazo6c2V0X3NpemVfYW5kX3Bpbn\ -VzZV9vZl9mcmVlX2NodW5rOjpoYmMxZGQ0NmMyODkxMGE2NP4KSDxjb3JlOjpjZWxsOjpCb3Jyb3dN\ -dXRFcnJvciBhcyBjb3JlOjpmbXQ6OkRlYnVnPjo6Zm10OjpoZTQwZjY4YThjNTAyYmZjYf8KMmNvcm\ -U6OmZtdDo6Rm9ybWF0dGVyOjp3cml0ZV9zdHI6Omg3M2MzMWIxMDRiZjNkZjllgAs+PGNvcmU6OmZt\ -dDo6RXJyb3IgYXMgY29yZTo6Zm10OjpEZWJ1Zz46OmZtdDo6aGViMTc2OTViZDQyNDc3NmKBC048Y2\ -9yZTo6YWxsb2M6OmxheW91dDo6TGF5b3V0RXJyb3IgYXMgY29yZTo6Zm10OjpEZWJ1Zz46OmZtdDo6\ -aDY4NzQ3ZjZiMzlhMDNmZmGCC0Y8YWxsb2M6OnN0cmluZzo6U3RyaW5nIGFzIGNvcmU6OmNtcDo6UG\ -FydGlhbEVxPjo6ZXE6OmgwMTY3NzhlYzcxNjNiZTI2gwtPY29yZTo6Y21wOjppbXBsczo6PGltcGwg\ -Y29yZTo6Y21wOjpQYXJ0aWFsRXE8JkI+IGZvciAmQT46OmVxOjpoYWE5MDU2NjZlNjdiOTUzYYQLQm\ -NvcmU6OnB0cjo6ZHJvcF9pbl9wbGFjZTx3YXNtX2JpbmRnZW46OkpzVmFsdWU+OjpoZTU2ZDg1ZDUz\ -MjcyYmY3MIULUTxoYXNoYnJvd246OnJhdzo6UmF3VGFibGU8VCxBPiBhcyBjb3JlOjpvcHM6OmRyb3\ -A6OkRyb3A+Ojpkcm9wOjpoMzQ5ZDc1MjVlMWYwYmZhMIYLWGNvcmU6OnB0cjo6ZHJvcF9pbl9wbGFj\ -ZTxjb3JlOjpvcHRpb246Ok9wdGlvbjx3YXNtX2JpbmRnZW46OkpzVmFsdWU+Pjo6aGEwNmE0MmVlNT\ -VmNTUxODOHC1E8aGFzaGJyb3duOjpyYXc6OlJhd1RhYmxlPFQsQT4gYXMgY29yZTo6b3BzOjpkcm9w\ -OjpEcm9wPjo6ZHJvcDo6aDQ5YTVjNjFkZGFjOWZmNjSIC148d2FzbV9iaW5kZ2VuOjpKc1ZhbHVlIG\ -FzIGNvcmU6OmNvbnZlcnQ6OkZyb208YWxsb2M6OnN0cmluZzo6U3RyaW5nPj46OmZyb206OmhkODQ3\ -NWEzNzBhNWMxNDUxiQtBaGFzaGJyb3duOjptYXA6Okhhc2hNYXA8SyxWLFMsQT46OnJlbW92ZV9lbn\ -RyeTo6aDAyZDYyN2U1ZDBkMjg1NWSKCz9oYXNoYnJvd246OnJhdzo6UmF3VGFibGU8VCxBPjo6ZXJh\ -c2Vfbm9fZHJvcDo6aDFmNjU3ZDQwZWM4ODVhMjWLCz9oYXNoYnJvd246OnJhdzo6UmF3VGFibGU8VC\ -xBPjo6ZXJhc2Vfbm9fZHJvcDo6aGU2MTFlM2MyZWQ3ODhkNmKMC0Jjb3JlOjpwdHI6OmRyb3BfaW5f\ -cGxhY2U8d2FzbV9iaW5kZ2VuOjpKc1ZhbHVlPjo6aDVkZjkyMDYxNzEzMTFiODeNC2A8YWxsb2M6On\ -ZlYzo6VmVjPFQsQT4gYXMgY29yZTo6Y29udmVydDo6RnJvbTxhbGxvYzo6Ym94ZWQ6OkJveDxbVF0s\ -QT4+Pjo6ZnJvbTo6aGIwZTM2MmYxZjc2MzkwZWSOCzhzZXJkZV9qc29uOjpzZXI6OlByZXR0eUZvcm\ -1hdHRlcjo6bmV3OjpoODM2ZDZiZDRlMDZmYWE1M48LM3NlcmRlX2pzb246OnJlYWQ6OlNsaWNlUmVh\ -ZDo6bmV3OjpoYzE2NzA2OTYyZTRkZTA4OJALMXNlcmRlX2pzb246OnJlYWQ6OlN0clJlYWQ6Om5ldz\ -o6aDQ5MDUwZTM2NmM0NmIwYmSRC2xjb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8Y29yZTo6b3B0aW9u\ -OjpPcHRpb248cGFya2luZ19sb3RfY29yZTo6cGFya2luZ19sb3Q6OlRocmVhZERhdGE+Pjo6aDNlZW\ -Y5Mjg3ZWZkNDQ3MTiSC09jb3JlOjpjbXA6OmltcGxzOjo8aW1wbCBjb3JlOjpjbXA6OlBhcnRpYWxF\ -cTwmQj4gZm9yICZBPjo6bmU6Omg2NzcyZjI2ZDEwZjQyYjQ5kwsyY29yZTo6b3B0aW9uOjpPcHRpb2\ -48VD46OnVud3JhcDo6aDA4MTcwNzQxZDdmNTczMTWUC2A8YWxsb2M6OnZlYzo6VmVjPFQsQT4gYXMg\ -Y29yZTo6Y29udmVydDo6RnJvbTxhbGxvYzo6Ym94ZWQ6OkJveDxbVF0sQT4+Pjo6ZnJvbTo6aDE1Yz\ -E1ZTQ2ZDI1YTQ0MWGVC013YXNtX2JpbmRnZW46OmNvbnZlcnQ6OmltcGxzOjpXYXNtT3B0aW9uPEFi\ -aT46OmludG9fb3B0aW9uOjpoMjVkNWVhNzc2OTViYTM1M5YLQmNvcmU6OnB0cjo6ZHJvcF9pbl9wbG\ -FjZTx3YXNtX2JpbmRnZW46OkpzVmFsdWU+OjpoMjc4ODQ5ZGE3YjJmYmJhM5cLT2NvcmU6OmNtcDo6\ -aW1wbHM6OjxpbXBsIGNvcmU6OmNtcDo6UGFydGlhbEVxPCZCPiBmb3IgJkE+OjplcTo6aDYwZTVkMD\ -IxNzcwNjM4YWGYC09jb3JlOjpjbXA6OmltcGxzOjo8aW1wbCBjb3JlOjpjbXA6OlBhcnRpYWxFcTwm\ -Qj4gZm9yICZBPjo6ZXE6Omg2MGYyMTMzM2U2ZThjMDMxmQtMPGFsbG9jOjpzdHJpbmc6OlN0cmluZy\ -BhcyBjb3JlOjpjbXA6OlBhcnRpYWxFcTwmc3RyPj46Om5lOjpoNmRkMDNjOWY4NzhhYjU0OZoLJHVy\ -bDo6VXJsOjpvcHRpb25zOjpoMTI5ZWViYzkyMzYxZGFhMJsLMWFsbG9jOjp2ZWM6OlZlYzxULEE+Oj\ -p0cnVuY2F0ZTo6aDgyYmUzZjU5ODE5M2Q5OTWcCy9kbG1hbGxvYzo6ZGxtYWxsb2M6OmFsaWduX3Vw\ -OjpoYjdmMmQwYTk1NTkyNzcyM50LMjwmVCBhcyBjb3JlOjpmbXQ6OkRpc3BsYXk+OjpmbXQ6OmgwNz\ -Q4YTc1ZTIwNTc1NmY0ngtJPGNvcmU6OmZtdDo6Rm9ybWF0dGVyIGFzIGNvcmU6OmZtdDo6V3JpdGU+\ -Ojp3cml0ZV9jaGFyOjpoZGU0NTQxZmQ4ZjU4MzAwM58LVWNvcmU6OnB0cjo6ZHJvcF9pbl9wbGFjZT\ -xkZW5vX2NhY2hlX2Rpcjo6Y2FjaGU6OkNhY2hlZFVybE1ldGFkYXRhPjo6aGYxODI4MGI4M2Y2M2Ux\ -MTKgC05zdGQ6OmlvOjppbXBsczo6PGltcGwgc3RkOjppbzo6V3JpdGUgZm9yICZtdXQgVz46OndyaX\ -RlX2FsbDo6aDgzMjNlZjg0MDBmY2ZmYjKhCz13YXNtX2JpbmRnZW46OlVud3JhcFRocm93RXh0Ojp1\ -bndyYXBfdGhyb3c6OmgwZWMzNzUwYzVmNjU2YmNjogsrc3RkOjpwYXRoOjpQYXRoQnVmOjpwdXNoOj\ -poMDMxMjlmMWU3YTU4YjFlYaMLhAFjb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8Y29yZTo6cmVzdWx0\ -OjpSZXN1bHQ8Y29yZTo6b3B0aW9uOjpPcHRpb248c3RkOjp0aW1lOjpTeXN0ZW1UaW1lPixzdGQ6Om\ -lvOjplcnJvcjo6RXJyb3I+Pjo6aGQ2MjRjYjc1ZDEwZjczZGSkC088YWxsb2M6OmFsbG9jOjpHbG9i\ -YWwgYXMgY29yZTo6YWxsb2M6OkFsbG9jYXRvcj46OmRlYWxsb2NhdGU6OmhiZDg1M2E5NTM5MDUyOT\ -ZipQtrY29yZTo6cHRyOjpkcm9wX2luX3BsYWNlPGNvcmU6Om9wdGlvbjo6T3B0aW9uPGRlbm9fY2Fj\ -aGVfZGlyOjpjYWNoZTo6Q2FjaGVkVXJsTWV0YWRhdGE+Pjo6aDhiMmI2Yzc1MmIzODYxODmmC0E8dX\ -JsOjpVcmwgYXMgc2VyZGU6OnNlcjo6U2VyaWFsaXplPjo6c2VyaWFsaXplOjpoZWYwZDc5ZmE0NWNl\ -YmE1Y6cLLWFueWhvdzo6ZXJyb3I6Om9iamVjdF9kcm9wOjpoMDY4MzUyNjUwYTUzNmRmN6gLLWFueW\ -hvdzo6ZXJyb3I6Om9iamVjdF9kcm9wOjpoNDQ2NGI3NTRjNjQ4NzI3MKkLLWFueWhvdzo6ZXJyb3I6\ -Om9iamVjdF9kcm9wOjpoNjY3YmUzMWNmZGEzY2E1M6oLLWFueWhvdzo6ZXJyb3I6Om9iamVjdF9kcm\ -9wOjpoYTcyNGEyYzY2YmVmMjhjNasLMWFueWhvdzo6ZXJyb3I6Om9iamVjdF9kb3duY2FzdDo6aDA1\ -OTc4ZDg2YTQ3MmMwNjCsCzFhbnlob3c6OmVycm9yOjpvYmplY3RfZG93bmNhc3Q6OmgxNjFjNDJjNz\ -cwZjYyNTYyrQsxYW55aG93OjplcnJvcjo6b2JqZWN0X2Rvd25jYXN0OjpoOWE5MWRkY2U4ODRmMjhk\ -Mq4LMWFueWhvdzo6ZXJyb3I6Om9iamVjdF9kb3duY2FzdDo6aGExNmVkNzA4YzgwOWI0N2avCzFhbn\ -lob3c6OmVycm9yOjpvYmplY3RfZG93bmNhc3Q6OmhmNjY0NmJlZThiYWNjYmI4sAsOX19ydXN0X3Jl\ -YWxsb2OxC2I8JnNlcmRlX3dhc21fYmluZGdlbjo6c2VyOjpTZXJpYWxpemVyIGFzIHNlcmRlOjpzZX\ -I6OlNlcmlhbGl6ZXI+OjpzZXJpYWxpemVfc3RyOjpoNGQ4OGZjNTQ3NTU3ZDMyObILTzxhbGxvYzo6\ -YWxsb2M6Okdsb2JhbCBhcyBjb3JlOjphbGxvYzo6QWxsb2NhdG9yPjo6ZGVhbGxvY2F0ZTo6aGJkOD\ -UzYTk1MzkwNTI5NmKzCz9wYXJraW5nX2xvdF9jb3JlOjpwYXJraW5nX2xvdDo6Z2V0X2hhc2h0YWJs\ -ZTo6aGQ3NjYwMmFjNWJhN2UxYzK0C0k8c21hbGx2ZWM6OkludG9JdGVyPEE+IGFzIGNvcmU6Om9wcz\ -o6ZHJvcDo6RHJvcD46OmRyb3A6OmhkNjQ0MjYwYTI0ZTc2YzhjtQtPPGFsbG9jOjphbGxvYzo6R2xv\ -YmFsIGFzIGNvcmU6OmFsbG9jOjpBbGxvY2F0b3I+OjpkZWFsbG9jYXRlOjpoYmQ4NTNhOTUzOTA1Mj\ -k2YrYLMDwmVCBhcyBjb3JlOjpmbXQ6OkRlYnVnPjo6Zm10OjpoOGM2Y2Y1ZjYzY2Q3ZWI2M7cLTzxh\ -bGxvYzo6YWxsb2M6Okdsb2JhbCBhcyBjb3JlOjphbGxvYzo6QWxsb2NhdG9yPjo6ZGVhbGxvY2F0ZT\ -o6aGJkODUzYTk1MzkwNTI5NmK4C2pjb3JlOjpzbGljZTo6aXRlcjo6PGltcGwgY29yZTo6aXRlcjo6\ -dHJhaXRzOjpjb2xsZWN0OjpJbnRvSXRlcmF0b3IgZm9yICZbVF0+OjppbnRvX2l0ZXI6OmhiZGExYz\ -M5OGZlYjYwN2E2uQsucmluZzo6ZW5kaWFuOjphc19ieXRlX3NsaWNlOjpoNWNmMDZiZmU4YjBkOWYx\ -N7oLTzxhbGxvYzo6YWxsb2M6Okdsb2JhbCBhcyBjb3JlOjphbGxvYzo6QWxsb2NhdG9yPjo6ZGVhbG\ -xvY2F0ZTo6aGJkODUzYTk1MzkwNTI5NmK7C088YWxsb2M6OmFsbG9jOjpHbG9iYWwgYXMgY29yZTo6\ -YWxsb2M6OkFsbG9jYXRvcj46OmRlYWxsb2NhdGU6OmhiZDg1M2E5NTM5MDUyOTZivAsPX193YmluZG\ -dlbl9mcmVlvQsyPCZUIGFzIGNvcmU6OmZtdDo6RGlzcGxheT46OmZtdDo6aDZjNDhmZGYyNzU3MmZi\ -ODa+Czxjb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8dXJsOjpob3N0OjpIb3N0Pjo6aDBmY2VhNjFmNj\ -ExZmI3ZjS/C088YWxsb2M6OmFsbG9jOjpHbG9iYWwgYXMgY29yZTo6YWxsb2M6OkFsbG9jYXRvcj46\ -OmRlYWxsb2NhdGU6OmhiZDg1M2E5NTM5MDUyOTZiwAtrPGNvcmU6OnNsaWNlOjpzb3J0OjptZXJnZV\ -9zb3J0OjpCdWZHdWFyZDxULEVsZW1EZWFsbG9jRj4gYXMgY29yZTo6b3BzOjpkcm9wOjpEcm9wPjo6\ -ZHJvcDo6aDNlZjNjYTg1Mzc0NzViOTjBCzlhbGxvYzo6c2xpY2U6OnN0YWJsZV9zb3J0Ojp7e2Nsb3\ -N1cmV9fTo6aDhmZGNmYzVlYzcyNDAyZjXCCzJjb3JlOjpvcHRpb246Ok9wdGlvbjxUPjo6dW53cmFw\ -OjpoM2U4N2I5Njk0NWUzOGI1OcMLTzxhbGxvYzo6YWxsb2M6Okdsb2JhbCBhcyBjb3JlOjphbGxvYz\ -o6QWxsb2NhdG9yPjo6ZGVhbGxvY2F0ZTo6aGJkODUzYTk1MzkwNTI5NmLEC088YWxsb2M6OmFsbG9j\ -OjpHbG9iYWwgYXMgY29yZTo6YWxsb2M6OkFsbG9jYXRvcj46OmRlYWxsb2NhdGU6OmhiZDg1M2E5NT\ -M5MDUyOTZixQstYW55aG93OjplcnJvcjo6b2JqZWN0X2Ryb3A6OmhjNmNhNTBkZDAzZGZkNjIwxgss\ -YW55aG93OjplcnJvcjo6b2JqZWN0X3JlZjo6aDc2OTY4ZDJiZGUxOTZlYmPHCzFhbnlob3c6OmVycm\ -9yOjpvYmplY3RfZG93bmNhc3Q6Omg5OWJlMTM2ZmMyZWIzYjAwyAswZGxtYWxsb2M6OmRsbWFsbG9j\ -OjpsZWZ0X2JpdHM6OmgyMjcwMDIzZTgyODQ0YjhlyQvKATw8YWxsb2M6OmJveGVkOjpCb3g8ZHluIG\ -NvcmU6OmVycm9yOjpFcnJvcitjb3JlOjptYXJrZXI6OlNlbmQrY29yZTo6bWFya2VyOjpTeW5jPiBh\ -cyBjb3JlOjpjb252ZXJ0OjpGcm9tPGFsbG9jOjpzdHJpbmc6OlN0cmluZz4+Ojpmcm9tOjpTdHJpbm\ -dFcnJvciBhcyBjb3JlOjplcnJvcjo6RXJyb3I+OjpkZXNjcmlwdGlvbjo6aDhmZTliYWY5MDJhNDRl\ -NzDKCzI8JlQgYXMgY29yZTo6Zm10OjpEaXNwbGF5Pjo6Zm10OjpoM2FkMjI5MjJhMjQ5MmUzYcsLRD\ -xjb3JlOjpmbXQ6OkFyZ3VtZW50cyBhcyBjb3JlOjpmbXQ6OkRpc3BsYXk+OjpmbXQ6Omg2YjgxMjc0\ -MWVkOWRkOGU2zAtEY29yZTo6cHRyOjpkcm9wX2luX3BsYWNlPGFsbG9jOjpib3Jyb3c6OkNvdzxzdH\ -I+Pjo6aDhiMzJiZGFiMzA1YTM2NGbNC3ljb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8Y29yZTo6b3B0\ -aW9uOjpPcHRpb248YWxsb2M6OnZlYzo6aW50b19pdGVyOjpJbnRvSXRlcjxhbGxvYzo6c3RyaW5nOj\ -pTdHJpbmc+Pj46OmgwMzMwOTM2ODgyZTI5YzlhzguOAWRlbm9fY2FjaGVfZGlyOjpjYWNoZTo6Xzo6\ -PGltcGwgc2VyZGU6OmRlOjpEZXNlcmlhbGl6ZSBmb3IgZGVub19jYWNoZV9kaXI6OmNhY2hlOjpTZX\ -JpYWxpemVkQ2FjaGVkVXJsTWV0YWRhdGE+OjpkZXNlcmlhbGl6ZTo6aDBkMzM5ZmYxZGVlY2IzYTDP\ -C6cBZGVub19jYWNoZV9kaXI6OmxvY2FsOjptYW5pZmVzdDo6Xzo6PGltcGwgc2VyZGU6OmRlOjpEZX\ -NlcmlhbGl6ZSBmb3IgZGVub19jYWNoZV9kaXI6OmxvY2FsOjptYW5pZmVzdDo6U2VyaWFsaXplZExv\ -Y2FsQ2FjaGVNYW5pZmVzdERhdGE+OjpkZXNlcmlhbGl6ZTo6aDg0NWJjODc2NWUyNTkzNDnQC15jb3\ -JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8Y29yZTo6cmVzdWx0OjpSZXN1bHQ8KCksc2VyZGVfanNvbjo6\ -ZXJyb3I6OkVycm9yPj46Omg5ODZjYWQ4MDNiYTRlY2Zm0Qs2d2FzbV9iaW5kZ2VuOjpfX3J0Ojphc3\ -NlcnRfbm90X251bGw6Omg2ZWNlNWJmMDdlZjYxMDI50gtwY29yZTo6cHRyOjpkcm9wX2luX3BsYWNl\ -PGNvcmU6Om9wdGlvbjo6T3B0aW9uPChhbGxvYzo6c3RyaW5nOjpTdHJpbmcsYWxsb2M6OnN0cmluZz\ -o6U3RyaW5nKT4+OjpoNmJiYzNhYzY2OGNlZDBlMNMLemNvcmU6OnB0cjo6ZHJvcF9pbl9wbGFjZTxj\ -b3JlOjpvcHRpb246Ok9wdGlvbjxpbmRleG1hcDo6bWFwOjpJbmRleE1hcDx1cmw6OlVybCxhbGxvYz\ -o6c3RyaW5nOjpTdHJpbmc+Pj46Omg3YzRjZWFjYThhMDUxOWQ51AuKAWNvcmU6OnB0cjo6ZHJvcF9p\ -bl9wbGFjZTxjb3JlOjpvcHRpb246Ok9wdGlvbjxkZW5vX2NhY2hlX2Rpcjo6bG9jYWw6Om1hbmlmZX\ -N0OjpTZXJpYWxpemVkTG9jYWxDYWNoZU1hbmlmZXN0RGF0YU1vZHVsZT4+OjpoZGU2NTdjYzBmY2I4\ -MzAwM9ULWDxoYXNoYnJvd246OnJhdzo6aW5uZXI6OlJhd1RhYmxlPFQsQT4gYXMgY29yZTo6b3BzOj\ -pkcm9wOjpEcm9wPjo6ZHJvcDo6aGIzNDE0NDY2ZWM5Y2RhNDPWC6wBY29yZTo6cHRyOjpkcm9wX2lu\ -X3BsYWNlPGNvcmU6Om9wdGlvbjo6T3B0aW9uPGluZGV4bWFwOjptYXA6OkluZGV4TWFwPHVybDo6VX\ -JsLGRlbm9fY2FjaGVfZGlyOjpsb2NhbDo6bWFuaWZlc3Q6OlNlcmlhbGl6ZWRMb2NhbENhY2hlTWFu\ -aWZlc3REYXRhTW9kdWxlPj4+OjpoYzgyMzRiYjg0NmNkYjQ4YdcLPjxRIGFzIGhhc2hicm93bjo6RX\ -F1aXZhbGVudDxLPj46OmVxdWl2YWxlbnQ6Omg5NzAyMjAxMzI4NmNlZjFj2AutAWRlbm9fY2FjaGVf\ -ZGlyOjpsb2NhbDo6bWFuaWZlc3Q6Ol86OjxpbXBsIHNlcmRlOjpkZTo6RGVzZXJpYWxpemUgZm9yIG\ -Rlbm9fY2FjaGVfZGlyOjpsb2NhbDo6bWFuaWZlc3Q6OlNlcmlhbGl6ZWRMb2NhbENhY2hlTWFuaWZl\ -c3REYXRhTW9kdWxlPjo6ZGVzZXJpYWxpemU6OmgwNWZjNWFjNzI0YjQxYjZm2QtRPGhhc2hicm93bj\ -o6cmF3OjpSYXdUYWJsZTxULEE+IGFzIGNvcmU6Om9wczo6ZHJvcDo6RHJvcD46OmRyb3A6OmhjNGFh\ -Y2U0NjZmMzU0MTc12gtRPGhhc2hicm93bjo6cmF3OjpSYXdUYWJsZTxULEE+IGFzIGNvcmU6Om9wcz\ -o6ZHJvcDo6RHJvcD46OmRyb3A6OmhlMTA1NjJkZDFjZjUyOGEw2wtDY29yZTo6cHRyOjpkcm9wX2lu\ -X3BsYWNlPG9uY2VfY2VsbDo6aW1wOjpXYWl0ZXI+OjpoNGFmZGM0NGZjYWI5YTI1ZNwLWGNvcmU6On\ -B0cjo6ZHJvcF9pbl9wbGFjZTxjb3JlOjpvcHRpb246Ok9wdGlvbjxhbGxvYzo6c3RyaW5nOjpTdHJp\ -bmc+Pjo6aDA5ZDI0ODcwMjFmOGExNGHdCz48USBhcyBoYXNoYnJvd246OkVxdWl2YWxlbnQ8Sz4+Oj\ -plcXVpdmFsZW50OjpoYjE0MDQxYjZiNDVkMjNhON4LI2pzX3N5czo6TWFwOjpzZXQ6Omg4MGNlMGMw\ -OTA2OTFiOTEx3wtEY29yZTo6cHRyOjpkcm9wX2luX3BsYWNlPGFsbG9jOjpib3Jyb3c6OkNvdzxzdH\ -I+Pjo6aDk0MmQ2ZWU5YzZkYWJhYTTgCzI8JlQgYXMgY29yZTo6Zm10OjpEaXNwbGF5Pjo6Zm10Ojpo\ -MWFkOTIxNWU0MzlmOWZiOeELRmNvcmU6OnB0cjo6ZHJvcF9pbl9wbGFjZTxhbnlob3c6OmNoYWluOj\ -pDaGFpblN0YXRlPjo6aGRiNmQzYjc1ODYyYTQzZDHiC1Zhbnlob3c6OmVycm9yOjo8aW1wbCBjb3Jl\ -OjpvcHM6OmRyb3A6OkRyb3AgZm9yIGFueWhvdzo6RXJyb3I+Ojpkcm9wOjpoMmQxZDVmOTYyODA1YT\ -FkMeMLMDwmVCBhcyBjb3JlOjpmbXQ6OkRlYnVnPjo6Zm10OjpoMDU0YmYzYzgzNDZhYTVjOeQLLmNv\ -cmU6OnN0cjo6c2xpY2VfZXJyb3JfZmFpbDo6aDM3YjI2NDdjZDEzZjYyODHlC25jb3JlOjpwdHI6Om\ -Ryb3BfaW5fcGxhY2U8ZGVub19jYWNoZV9kaXI6OmxvY2FsOjptYW5pZmVzdDo6U2VyaWFsaXplZExv\ -Y2FsQ2FjaGVNYW5pZmVzdERhdGE+OjpoMzRhY2I2NzIzM2RlNTZkN+YLK3N0ZDo6cGF0aDo6UGF0aE\ -J1Zjo6cHVzaDo6aDE4MjcwMGUxODFjNjgzYmHnC0U8YWxsb2M6OnN0cmluZzo6U3RyaW5nIGFzIGNv\ -cmU6OmZtdDo6RGlzcGxheT46OmZtdDo6aGFjNzY3NjNmODI3YzZiMDfoC1pjb3JlOjpwdHI6OmRyb3\ -BfaW5fcGxhY2U8KGFsbG9jOjpzdHJpbmc6OlN0cmluZyxhbGxvYzo6c3RyaW5nOjpTdHJpbmcpPjo6\ -aDQ5Y2QxY2Q2OTRlNDM2NDDpC0Njb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8YWxsb2M6OmJveGVkOj\ -pCb3g8c3RyPj46Omg5ODcwYmQ2M2NiNDkzNjIz6gtKY29yZTo6cHRyOjpkcm9wX2luX3BsYWNlPChz\ -dGQ6OnBhdGg6OlBhdGhCdWYsdXJsOjpVcmwpPjo6aGU2ZTRmOTMyNzI0MDUyZGHrC0E8c3RkOjpwYX\ -RoOjpQYXRoQnVmIGFzIGNvcmU6Omhhc2g6Okhhc2g+OjpoYXNoOjpoMzVkZTlmM2MyZmQ2M2M5YuwL\ -RDxhbGxvYzo6c3RyaW5nOjpTdHJpbmcgYXMgY29yZTo6aGFzaDo6SGFzaD46Omhhc2g6OmhiNzY0Mj\ -FkNzFkZWRkZWE37QsyY29yZTo6ZXJyb3I6OkVycm9yOjpkZXNjcmlwdGlvbjo6aDMyNThhOWFhOTI4\ -MGIzZjbuCzJjb3JlOjplcnJvcjo6RXJyb3I6OmRlc2NyaXB0aW9uOjpoZTJmNzM1MmFkNzliNDUzMu\ -8LZ3NlcmRlOjpzZXI6OmltcGxzOjo8aW1wbCBzZXJkZTo6c2VyOjpTZXJpYWxpemUgZm9yIGFsbG9j\ -OjpzdHJpbmc6OlN0cmluZz46OnNlcmlhbGl6ZTo6aDc2NTFkOTFjMGUxZTYyYzHwCy5hbnlob3c6Om\ -Vycm9yOjpvYmplY3RfYm94ZWQ6OmgxZGUyNjYzNjIyMDlhYmRm8QsuYW55aG93OjplcnJvcjo6b2Jq\ -ZWN0X2JveGVkOjpoMmNjMzc3YjViMzZjMGM3ZfILLmFueWhvdzo6ZXJyb3I6Om9iamVjdF9ib3hlZD\ -o6aDMxNDhiMmY2NThjOTNhZDDzCy5hbnlob3c6OmVycm9yOjpvYmplY3RfYm94ZWQ6OmhiN2I1M2Y3\ -OGZkNjMyYzM59AsuYW55aG93OjplcnJvcjo6b2JqZWN0X2JveGVkOjpoZGJlYzk2N2I5MWJiNDA2ZP\ -ULQWhhc2hicm93bjo6bWFwOjpIYXNoTWFwPEssVixTLEE+Ojpjb250YWluc19rZXk6OmhiOTNhZTBh\ -ZTRmMWU5Nzg19gtIZGVub19jYWNoZV9kaXI6OmNhY2hlOjpDYWNoZWRVcmxNZXRhZGF0YTo6aXNfcm\ -VkaXJlY3Q6Omg2NzYzOTI3NzVmZGZlNWIz9wsMX19ydXN0X2FsbG9j+AsTX19ydXN0X2FsbG9jX3pl\ -cm9lZPkLMjwmVCBhcyBjb3JlOjpmbXQ6OkRpc3BsYXk+OjpmbXQ6OmgzYWM0NGE0Yjk0NzdiYWEw+g\ -s7PCZtdXQgVyBhcyBjb3JlOjpmbXQ6OldyaXRlPjo6d3JpdGVfY2hhcjo6aDM1ZDNjZDJjYjE2Y2Yx\ -YTP7Czo8Jm11dCBXIGFzIGNvcmU6OmZtdDo6V3JpdGU+Ojp3cml0ZV9zdHI6Omg1NjA2ZGRmOWE4ZG\ -JhZjhl/As6YWxsb2M6OnZlYzo6VmVjPFQsQT46OmV4dGVuZF9mcm9tX3NsaWNlOjpoYzU5MGM4MGIw\ -NjIxYTYyZf0LMjwmVCBhcyBjb3JlOjpmbXQ6OkRpc3BsYXk+OjpmbXQ6OmgzMzFlOTg1OWUwODU2Mj\ -gw/gtFY29yZTo6cHRyOjpkcm9wX2luX3BsYWNlPHNlcmRlX2pzb246OmVycm9yOjpFcnJvcj46Omg2\ -ZjcyYjNiMmMyZTEwMmEz/wsyY29yZTo6ZXJyb3I6OkVycm9yOjpkZXNjcmlwdGlvbjo6aGRjMjBjMW\ -JkMDMxMWIxMjeADDo8Jm11dCBXIGFzIGNvcmU6OmZtdDo6V3JpdGU+Ojp3cml0ZV9zdHI6OmhkODk0\ -MWIyNTk0YzNjNGE0gQw6YWxsb2M6OnZlYzo6VmVjPFQsQT46OmV4dGVuZF9mcm9tX3NsaWNlOjpoNj\ -UwNTk0ZWU2ZjQ2M2Q1ZoIMQzxhbGxvYzo6c3RyaW5nOjpTdHJpbmcgYXMgY29yZTo6Zm10OjpEZWJ1\ -Zz46OmZtdDo6aDkxMzdmZTc3ZGZjZjQ5YmaDDDxzZXJkZV9qc29uOjpkZTo6RGVzZXJpYWxpemVyPF\ -I+OjplYXRfY2hhcjo6aGVlZDM1YmU4ODk2YTViZjSEDDRzZXJkZV9qc29uOjpkZTo6TWFwQWNjZXNz\ -PFI+OjpuZXc6OmhmMzAxMWJhNTNjOWYwYTQwhQxdPHBhcmtpbmdfbG90X2NvcmU6OnBhcmtpbmdfbG\ -90OjpUaHJlYWREYXRhIGFzIGNvcmU6Om9wczo6ZHJvcDo6RHJvcD46OmRyb3A6OmhkZWVhYWEyZjFm\ -MmQzYWFjhgw6YWxsb2M6OnZlYzo6VmVjPFQsQT46OmV4dGVuZF9mcm9tX3NsaWNlOjpoNTAzOGUwYW\ -YwMDdkYmJiOYcMMjwmVCBhcyBjb3JlOjpmbXQ6OkRpc3BsYXk+OjpmbXQ6Omg0OGU0NTQ5N2JlMWNj\ -MjNmiAw6YWxsb2M6OnZlYzo6VmVjPFQsQT46OmV4dGVuZF9mcm9tX3NsaWNlOjpoOWZhN2UxMjhmMj\ -gwMjc4YokMTXdhc21fYmluZGdlbjo6Y29udmVydDo6aW1wbHM6Oldhc21PcHRpb248QWJpPjo6aW50\ -b19vcHRpb246OmgwNDY3ODM4M2EyYzgyM2Zligw/YWxsb2M6OnJhd192ZWM6OlJhd1ZlYzxULEE+Oj\ -pzZXRfcHRyX2FuZF9jYXA6OmgxYjc4OThlMDRhNDU2NzU1iwwqanNfc3lzOjpVaW50OEFycmF5Ojpz\ -ZXQ6OmgyMGYxY2I1YTQ1ZTQ3NTZjjAwmYWxsb2M6OmFsbG9jOjphbGxvYzo6aGJlM2VjZmU3NmY2NW\ -NkOTCNDEU8YWxsb2M6OnN0cmluZzo6U3RyaW5nIGFzIGNvcmU6OmZtdDo6RGlzcGxheT46OmZtdDo6\ -aGFjNzY3NjNmODI3YzZiMDeODBRfX3diaW5kZ2VuX2V4bl9zdG9yZY8MOjwmbXV0IFcgYXMgY29yZT\ -o6Zm10OjpXcml0ZT46OndyaXRlX3N0cjo6aGJlNzliZjgyN2FlMzRlMzWQDDlhbGxvYzo6c2xpY2U6\ -OnN0YWJsZV9zb3J0Ojp7e2Nsb3N1cmV9fTo6aDE1M2VkMzRmOWRjNWVhYmGRDD5jb3JlOjpwdHI6Om\ -Ryb3BfaW5fcGxhY2U8aWRuYTo6dXRzNDY6OklkbmE+OjpoODgzNTUxOTNmMWY4NTIyZZIMTHVuaWNv\ -ZGVfbm9ybWFsaXphdGlvbjo6bG9va3Vwczo6Y2Fub25pY2FsX2NvbWJpbmluZ19jbGFzczo6aDgxND\ -A3OGEzZjY4M2UwNjaTDDphbGxvYzo6dmVjOjpWZWM8VCxBPjo6ZXh0ZW5kX2Zyb21fc2xpY2U6Omgz\ -NmY1MmE4N2RkNDg1Y2I0lAw6YWxsb2M6OnZlYzo6VmVjPFQsQT46OmV4dGVuZF9mcm9tX3NsaWNlOj\ -poYWMxZWU0MzkwMTVmMzU4OZUMMDwmVCBhcyBjb3JlOjpmbXQ6OkRlYnVnPjo6Zm10OjpoYWQ0ZWJk\ -NGI0YTkyYWUyYZYMMjwmVCBhcyBjb3JlOjpmbXQ6OkRpc3BsYXk+OjpmbXQ6OmhlMGQ1OGQ3NDFhYT\ -FjNjFllww1PCZzdHIgYXMgc2VyZGU6OmRlOjpFeHBlY3RlZD46OmZtdDo6aDRhZDViMzcyMDVlYmUx\ -NTSYDDJjb3JlOjplcnJvcjo6RXJyb3I6OmRlc2NyaXB0aW9uOjpoNGE3Nzk1OTNjMjg4ZGQwZZkMLm\ -FueWhvdzo6ZXJyb3I6Om9iamVjdF9ib3hlZDo6aGIwZjc0NmU4Y2FkY2JkZGWaDC5hbnlob3c6OnB0\ -cjo6UmVmPFQ+OjpieV9tdXQ6Omg3ZmZjZjMzODQ1ZDQ2YjMwmwxOPGFueWhvdzo6d3JhcHBlcjo6TW\ -Vzc2FnZUVycm9yPE0+IGFzIGNvcmU6OmZtdDo6RGVidWc+OjpmbXQ6Omg0YTIzYWJlODQ5ZGUyNjZl\ -nAxQPGFueWhvdzo6d3JhcHBlcjo6TWVzc2FnZUVycm9yPE0+IGFzIGNvcmU6OmZtdDo6RGlzcGxheT\ -46OmZtdDo6aGQ5MDdkNDI2MDllMTFhNmSdDDA8JlQgYXMgY29yZTo6Zm10OjpEZWJ1Zz46OmZtdDo6\ -aDM0ODc5NmQ3ZTBlYzU1N2aeDDI8JlQgYXMgY29yZTo6Zm10OjpEaXNwbGF5Pjo6Zm10OjpoN2Q3MD\ -NjYzZmNzViYWUxYZ8MQzxhbGxvYzo6c3RyaW5nOjpTdHJpbmcgYXMgY29yZTo6Zm10OjpEZWJ1Zz46\ -OmZtdDo6aDkxMzdmZTc3ZGZjZjQ5YmagDEU8YWxsb2M6OnN0cmluZzo6U3RyaW5nIGFzIGNvcmU6Om\ -ZtdDo6RGlzcGxheT46OmZtdDo6aGFjNzY3NjNmODI3YzZiMDehDC9zdGQ6OnBhdGg6OlBhdGg6OmFz\ -X3U4X3NsaWNlOjpoNDk0M2VlZWI2ZWQ0ZTk0ZKIMZjxzdGQ6OnBhbmlja2luZzo6YmVnaW5fcGFuaW\ -NfaGFuZGxlcjo6U3RyUGFuaWNQYXlsb2FkIGFzIGNvcmU6OnBhbmljOjpCb3hNZVVwPjo6Z2V0Ojpo\ -ZjQ2MTNlOTAzYzFiMmI0NqMMPnN0ZDo6c3lzOjp3YXNtOjpjb21tb246Omhhc2htYXBfcmFuZG9tX2\ -tleXM6Omg5YmMwMTNlNzY4MTYxMTAwpAw0ZGxtYWxsb2M6OmRsbWFsbG9jOjpDaHVuazo6Y2ludXNl\ -OjpoMzA2M2U2MzJmOTUyYzM3MKUMOmRsbWFsbG9jOjpkbG1hbGxvYzo6Q2h1bms6OmNsZWFyX3Bpbn\ -VzZTo6aDE5NDcyNzJjZGNlNzNhMTWmDDNkbG1hbGxvYzo6ZGxtYWxsb2M6OkNodW5rOjppbnVzZTo6\ -aDAyZjhkYjEwNWE4ZWVkZWanDMIBPDxhbGxvYzo6Ym94ZWQ6OkJveDxkeW4gY29yZTo6ZXJyb3I6Ok\ -Vycm9yK2NvcmU6Om1hcmtlcjo6U2VuZCtjb3JlOjptYXJrZXI6OlN5bmM+IGFzIGNvcmU6OmNvbnZl\ -cnQ6OkZyb208YWxsb2M6OnN0cmluZzo6U3RyaW5nPj46OmZyb206OlN0cmluZ0Vycm9yIGFzIGNvcm\ -U6OmZtdDo6RGlzcGxheT46OmZtdDo6aDViYjZjM2Y5YWMwM2M2MzOoDMABPDxhbGxvYzo6Ym94ZWQ6\ -OkJveDxkeW4gY29yZTo6ZXJyb3I6OkVycm9yK2NvcmU6Om1hcmtlcjo6U2VuZCtjb3JlOjptYXJrZX\ -I6OlN5bmM+IGFzIGNvcmU6OmNvbnZlcnQ6OkZyb208YWxsb2M6OnN0cmluZzo6U3RyaW5nPj46OmZy\ -b206OlN0cmluZ0Vycm9yIGFzIGNvcmU6OmZtdDo6RGVidWc+OjpmbXQ6OmgyMmQxNTkzNWI2M2RmOT\ -gzqQxUPGFsbG9jOjpzdHJpbmc6OkZyb21VdGY4RXJyb3IgYXMgY29yZTo6ZXJyb3I6OkVycm9yPjo6\ -ZGVzY3JpcHRpb246Omg0NzJiMmY4MjU1ODI2ZWViqgwyPCZUIGFzIGNvcmU6OmZtdDo6RGlzcGxheT\ -46OmZtdDo6aGE0NDhiYWU3ZjIxNmEzMjarDDJjb3JlOjpmbXQ6OkZvcm1hdHRlcjo6YWx0ZXJuYXRl\ -OjpoMzI4OGQxMzM1OWY2ZjUzNKwMOGNvcmU6OmZtdDo6Rm9ybWF0dGVyOjpkZWJ1Z19sb3dlcl9oZX\ -g6OmhiMGYyODI0YmYzZDdmMWU1rQw4Y29yZTo6Zm10OjpGb3JtYXR0ZXI6OmRlYnVnX3VwcGVyX2hl\ -eDo6aDAwODlmNDIwZDU4YjA4NDGuDDRjb3JlOjpzdHI6Omxvc3N5OjpVdGY4Q2h1bmtzOjpuZXc6Om\ -g4N2Q5NmQ1Mjk1NzYwODdjrwxIPGFsbG9jOjp2ZWM6OlZlYzxULEE+IGFzIGNvcmU6Om9wczo6ZHJv\ -cDo6RHJvcD46OmRyb3A6Omg4MjQxNzY0N2YyNzUwNzhhsAxJPGFsbG9jOjpzdHJpbmc6OlN0cmluZy\ -BhcyBjb3JlOjpmbXQ6OldyaXRlPjo6d3JpdGVfc3RyOjpoZDBiNzY2OTk5MzEzMzVjYrEMZzxzZXJk\ -ZV9qc29uOjpzZXI6OlByZXR0eUZvcm1hdHRlciBhcyBzZXJkZV9qc29uOjpzZXI6OkZvcm1hdHRlcj\ -46OmJlZ2luX29iamVjdF92YWx1ZTo6aGRjMmFlYmI0YzAxYTQ4NzmyDA5fX3J1c3RfZGVhbGxvY7MM\ -Nndhc21fYmluZGdlbjo6Y2FzdDo6SnNDYXN0OjpkeW5fcmVmOjpoYmE0MTZiOTM1MjE2MTRjOLQMNn\ -dhc21fYmluZGdlbjo6Y2FzdDo6SnNDYXN0OjpkeW5fcmVmOjpoZWViY2U5OTNhOGEwYjliYrUMYjwm\ -c2VyZGVfd2FzbV9iaW5kZ2VuOjpzZXI6OlNlcmlhbGl6ZXIgYXMgc2VyZGU6OnNlcjo6U2VyaWFsaX\ -plcj46OnNlcmlhbGl6ZV9tYXA6OmhlMWY3ZWE2NjNhMGRmMGVktgw1c2VyZGVfd2FzbV9iaW5kZ2Vu\ -OjpPYmplY3RFeHQ6OnNldDo6aGUzN2NkZTFlODQ1MzY2YWO3DEk8YWxsb2M6OnN0cmluZzo6U3RyaW\ -5nIGFzIGNvcmU6OmZtdDo6V3JpdGU+Ojp3cml0ZV9zdHI6OmhkMGI3NjY5OTkzMTMzNWNiuAw7PCZt\ -dXQgVyBhcyBjb3JlOjpmbXQ6OldyaXRlPjo6d3JpdGVfY2hhcjo6aDliMDcxY2VjZTkxYWM0ZmO5DE\ -k8YWxsb2M6OnN0cmluZzo6U3RyaW5nIGFzIGNvcmU6OmZtdDo6V3JpdGU+Ojp3cml0ZV9zdHI6Omhk\ -MGI3NjY5OTkzMTMzNWNiugyHATxwYXJraW5nX2xvdF9jb3JlOjp0aHJlYWRfcGFya2VyOjppbXA6Ol\ -RocmVhZFBhcmtlciBhcyBwYXJraW5nX2xvdF9jb3JlOjp0aHJlYWRfcGFya2VyOjpUaHJlYWRQYXJr\ -ZXJUPjo6cHJlcGFyZV9wYXJrOjpoNmUzNGU5NjI3ZDU0MDNjYbsMhgE8cGFya2luZ19sb3RfY29yZT\ -o6dGhyZWFkX3Bhcmtlcjo6aW1wOjpUaHJlYWRQYXJrZXIgYXMgcGFya2luZ19sb3RfY29yZTo6dGhy\ -ZWFkX3Bhcmtlcjo6VGhyZWFkUGFya2VyVD46OnVucGFya19sb2NrOjpoMDM5MTVjOGZmMTE1NDlhOb\ -wMhAE8cGFya2luZ19sb3RfY29yZTo6dGhyZWFkX3Bhcmtlcjo6aW1wOjpUaHJlYWRQYXJrZXIgYXMg\ -cGFya2luZ19sb3RfY29yZTo6dGhyZWFkX3Bhcmtlcjo6VGhyZWFkUGFya2VyVD46OnRpbWVkX291dD\ -o6aDM0NDVjM2VkYWI4YzljOWO9DH88cGFya2luZ19sb3RfY29yZTo6dGhyZWFkX3Bhcmtlcjo6aW1w\ -OjpUaHJlYWRQYXJrZXIgYXMgcGFya2luZ19sb3RfY29yZTo6dGhyZWFkX3Bhcmtlcjo6VGhyZWFkUG\ -Fya2VyVD46OnBhcms6Omg1NjhiN2FjZWFiM2Y1YjNhvgyFATxwYXJraW5nX2xvdF9jb3JlOjp0aHJl\ -YWRfcGFya2VyOjppbXA6OlRocmVhZFBhcmtlciBhcyBwYXJraW5nX2xvdF9jb3JlOjp0aHJlYWRfcG\ -Fya2VyOjpUaHJlYWRQYXJrZXJUPjo6cGFya191bnRpbDo6aDAxOGI3MWIzNDgwNGRkYTG/DDNjb3Jl\ -OjpzdHI6OjxpbXBsIHN0cj46OmVuZHNfd2l0aDo6aDE4NjJiNjg5Yjk4NzA0ODDADEk8YWxsb2M6On\ -N0cmluZzo6U3RyaW5nIGFzIGNvcmU6OmZtdDo6V3JpdGU+Ojp3cml0ZV9zdHI6OmhkMGI3NjY5OTkz\ -MTMzNWNiwQw1d2FzbV9iaW5kZ2VuOjpKc1ZhbHVlOjppc19mdW5jdGlvbjo6aDQzMDQ0M2QxODViNW\ -ExMGTCDDd3YXNtX2JpbmRnZW46OmNhc3Q6OkpzQ2FzdDo6aGFzX3R5cGU6OmgzNzhkOTI3NmY3ZDJj\ -ZDZmwwwzd2FzbV9iaW5kZ2VuOjpKc1ZhbHVlOjppc19vYmplY3Q6OmhjMjYzNDVlNGMyNzNmN2Q1xA\ -wtanNfc3lzOjpJdGVyYXRvck5leHQ6OmRvbmU6Omg4OWY4Y2RmOGI2OTMwNWZmxQxjanNfc3lzOjpf\ -Ojo8aW1wbCB3YXNtX2JpbmRnZW46OmNhc3Q6OkpzQ2FzdCBmb3IganNfc3lzOjpBcnJheUJ1ZmZlcj\ -46Omluc3RhbmNlb2Y6OmhhY2M0OGM0ZjBjYThhNDRjxgxianNfc3lzOjpfOjo8aW1wbCB3YXNtX2Jp\ -bmRnZW46OmNhc3Q6OkpzQ2FzdCBmb3IganNfc3lzOjpVaW50OEFycmF5Pjo6aW5zdGFuY2VvZjo6aG\ -YwMmE4ODhhM2QxYmZjMGHHDE9jb3JlOjpjbXA6OmltcGxzOjo8aW1wbCBjb3JlOjpjbXA6OlBhcnRp\ -YWxFcTwmQj4gZm9yICZBPjo6ZXE6OmhmOWU1MmE0OTM3MTQ1Zjk4yAw7PCZtdXQgVyBhcyBjb3JlOj\ -pmbXQ6OldyaXRlPjo6d3JpdGVfY2hhcjo6aDA1NDhiYjFlYmZlYTRhMmHJDEk8YWxsb2M6OnN0cmlu\ -Zzo6U3RyaW5nIGFzIGNvcmU6OmZtdDo6V3JpdGU+Ojp3cml0ZV9zdHI6OmhkMGI3NjY5OTkzMTMzNW\ -NiygxNPGNvcmU6Om5ldDo6aXBfYWRkcjo6SXB2NkFkZHIgYXMgY29yZTo6Y21wOjpQYXJ0aWFsRXE+\ -OjplcTo6aDYwMzE1Y2UxOTlkNTE4ZTTLDHA8Y29yZTo6c2xpY2U6OnNvcnQ6Om1lcmdlX3NvcnQ6Ol\ -J1blZlYzxSdW5BbGxvY0YsUnVuRGVhbGxvY0Y+IGFzIGNvcmU6Om9wczo6ZHJvcDo6RHJvcD46OmRy\ -b3A6Omg5YjY0YjRlMGY5MTNjYWFlzAyFATx1bmljb2RlX25vcm1hbGl6YXRpb246OmRlY29tcG9zZT\ -o6RGVjb21wb3NpdGlvbnM8ST4gYXMgY29yZTo6aXRlcjo6dHJhaXRzOjppdGVyYXRvcjo6SXRlcmF0\ -b3I+OjpuZXh0Ojp7e2Nsb3N1cmV9fTo6aDAzZjU3ZGMwODA5YWFiNWXNDIUBPHVuaWNvZGVfbm9ybW\ -FsaXphdGlvbjo6ZGVjb21wb3NlOjpEZWNvbXBvc2l0aW9uczxJPiBhcyBjb3JlOjppdGVyOjp0cmFp\ -dHM6Oml0ZXJhdG9yOjpJdGVyYXRvcj46Om5leHQ6Ont7Y2xvc3VyZX19OjpoMzAxZTBhNzBiNWRhMG\ -M0Nc4MR3VuaWNvZGVfbm9ybWFsaXphdGlvbjo6bm9ybWFsaXplOjppc19oYW5ndWxfc3lsbGFibGU6\ -Omg3ZThkZGRkMWMxNjkxMmJjzwxHPGR5biBzZXJkZTo6ZGU6OkV4cGVjdGVkIGFzIGNvcmU6OmZtdD\ -o6RGlzcGxheT46OmZtdDo6aDM5NTc4NDA0YzQwOWU3OWbQDDo8Jm11dCBXIGFzIGNvcmU6OmZtdDo6\ -V3JpdGU+Ojp3cml0ZV9zdHI6OmhiMjIwZTcwYmQyNDBiNzk50QwKcnVzdF9wYW5pY9IMWTxzdGQ6On\ -N5czo6d2FzbTo6b25jZTo6Q29tcGxldGlvbkd1YXJkIGFzIGNvcmU6Om9wczo6ZHJvcDo6RHJvcD46\ -OmRyb3A6OmgyMjVmNjIyMTUyNDJmMGRh0wwwZGxtYWxsb2M6OmRsbWFsbG9jOjpsZWFzdF9iaXQ6Om\ -g1YmVkN2NmN2Q1ZTUyZWY31Aw1ZGxtYWxsb2M6OmRsbWFsbG9jOjpDaHVuazo6bW1hcHBlZDo6aDhi\ -ZWJiZjk5OWU0ZGJhODDVDFBkbG1hbGxvYzo6ZGxtYWxsb2M6OkNodW5rOjpzZXRfc2l6ZV9hbmRfcG\ -ludXNlX29mX2ludXNlX2NodW5rOjpoYTRjYWYyZjkzZWJmY2YwYdYMM2RsbWFsbG9jOjpkbG1hbGxv\ -Yzo6U2VnbWVudDo6dG9wOjpoNzUzMDM5Yjc2NGI1M2M1ONcMOzwmbXV0IFcgYXMgY29yZTo6Zm10Oj\ -pXcml0ZT46OndyaXRlX2NoYXI6OmhiZmE2ZGQwMTQ0OTdmZjY52AxMPGFsbG9jOjpzdHJpbmc6OkZy\ -b21VdGY4RXJyb3IgYXMgY29yZTo6Zm10OjpEaXNwbGF5Pjo6Zm10OjpoMjE0NzY0N2IwMDRmNjhkZd\ -kMOWNvcmU6Om9wczo6ZnVuY3Rpb246OkZuT25jZTo6Y2FsbF9vbmNlOjpoM2NmYzQ4MTMwODc0NmUz\ -ZtoMTmNvcmU6OmZtdDo6bnVtOjppbXA6OjxpbXBsIGNvcmU6OmZtdDo6RGlzcGxheSBmb3IgdTMyPj\ -o6Zm10OjpoMzUyZmIwZjEzMGI2YmVhONsMTWNvcmU6OmZtdDo6bnVtOjppbXA6OjxpbXBsIGNvcmU6\ -OmZtdDo6RGlzcGxheSBmb3IgdTg+OjpmbXQ6OmgxMTBkMDIyNmU1ODdlZDU23AxOY29yZTo6Zm10Oj\ -pudW06OmltcDo6PGltcGwgY29yZTo6Zm10OjpEaXNwbGF5IGZvciB1MTY+OjpmbXQ6Omg3ZjQyOWEx\ -MGIxZDYzOWEy3Qw3Y29yZTo6Zm10OjpidWlsZGVyczo6RGVidWdTZXQ6OmVudHJ5OjpoYWNkOGJkND\ -E2ZmUyMTM1Nt4MOjwmbXV0IFcgYXMgY29yZTo6Zm10OjpXcml0ZT46OndyaXRlX3N0cjo6aDZjMzVm\ -NTkzY2EwNTUzZTbfDE5jb3JlOjpmbXQ6Om51bTo6aW1wOjo8aW1wbCBjb3JlOjpmbXQ6OkRpc3BsYX\ -kgZm9yIHU2ND46OmZtdDo6aDNmNzU5N2Y2NjdlYjM2ODLgDDhjb3JlOjpudW06OjxpbXBsIHUzMj46\ -OmZyb21fc3RyX3JhZGl4OjpoNjVjNGRkMmJjMjMyMjI2NOEMH19fd2JpbmRnZW5fYWRkX3RvX3N0YW\ -NrX3BvaW50ZXLiDFNjb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8YWxsb2M6OnZlYzo6VmVjPGFsbG9j\ -OjpzdHJpbmc6OlN0cmluZz4+OjpoNzEzMGNiYTE5NmU1NTQ4MOMMQGNvcmU6OnB0cjo6ZHJvcF9pbl\ -9wbGFjZTxhbGxvYzo6dmVjOjpWZWM8dTg+Pjo6aDIxMzkxNTEwZDZjOTU5ZDHkDClhbGxvYzo6YWxs\ -b2M6OmJveF9mcmVlOjpoYTUwZjc4MzI2YWMzNDIyOeUMMXNlcmRlX3dhc21fYmluZGdlbjo6ZnJvbV\ -92YWx1ZTo6aDgyNTk1MmEyZDRhYmRlYzTmDLUBPHNlcmRlOjpkZTo6aW1wbHM6OjxpbXBsIHNlcmRl\ -OjpkZTo6RGVzZXJpYWxpemUgZm9yIHN0ZDo6Y29sbGVjdGlvbnM6Omhhc2g6Om1hcDo6SGFzaE1hcD\ -xLLFYsUz4+OjpkZXNlcmlhbGl6ZTo6TWFwVmlzaXRvcjxLLFYsUz4gYXMgc2VyZGU6OmRlOjpWaXNp\ -dG9yPjo6ZXhwZWN0aW5nOjpoNGNlMGY0ZjQyY2ZlYzllYecM2wE8ZGVub19jYWNoZV9kaXI6OmxvY2\ -FsOjptYW5pZmVzdDo6Xzo6PGltcGwgc2VyZGU6OmRlOjpEZXNlcmlhbGl6ZSBmb3IgZGVub19jYWNo\ -ZV9kaXI6OmxvY2FsOjptYW5pZmVzdDo6U2VyaWFsaXplZExvY2FsQ2FjaGVNYW5pZmVzdERhdGFNb2\ -R1bGU+OjpkZXNlcmlhbGl6ZTo6X19WaXNpdG9yIGFzIHNlcmRlOjpkZTo6VmlzaXRvcj46OmV4cGVj\ -dGluZzo6aDE4MzgwMDVkZTM5ZDcxYTLoDLwBPGRlbm9fY2FjaGVfZGlyOjpjYWNoZTo6Xzo6PGltcG\ -wgc2VyZGU6OmRlOjpEZXNlcmlhbGl6ZSBmb3IgZGVub19jYWNoZV9kaXI6OmNhY2hlOjpTZXJpYWxp\ -emVkQ2FjaGVkVXJsTWV0YWRhdGE+OjpkZXNlcmlhbGl6ZTo6X19WaXNpdG9yIGFzIHNlcmRlOjpkZT\ -o6VmlzaXRvcj46OmV4cGVjdGluZzo6aGZmMzAwNjBmMDdlNWFlMTHpDNUBPGRlbm9fY2FjaGVfZGly\ -Ojpsb2NhbDo6bWFuaWZlc3Q6Ol86OjxpbXBsIHNlcmRlOjpkZTo6RGVzZXJpYWxpemUgZm9yIGRlbm\ -9fY2FjaGVfZGlyOjpsb2NhbDo6bWFuaWZlc3Q6OlNlcmlhbGl6ZWRMb2NhbENhY2hlTWFuaWZlc3RE\ -YXRhPjo6ZGVzZXJpYWxpemU6Ol9fVmlzaXRvciBhcyBzZXJkZTo6ZGU6OlZpc2l0b3I+OjpleHBlY3\ -Rpbmc6OmgzMWM2OTk4ODJmM2RkNWIw6gxIY29yZTo6b3BzOjpmdW5jdGlvbjo6Rm5PbmNlOjpjYWxs\ -X29uY2V7e3Z0YWJsZS5zaGltfX06Omg0ODFlYWQzNTI1ZmE2MjA56wxIY29yZTo6b3BzOjpmdW5jdG\ -lvbjo6Rm5PbmNlOjpjYWxsX29uY2V7e3Z0YWJsZS5zaGltfX06Omg1OWE4M2IyN2IxMzIwNDVk7Ax7\ -Y29yZTo6cHRyOjpkcm9wX2luX3BsYWNlPGFueWhvdzo6ZXJyb3I6OkVycm9ySW1wbDxkZW5vX2NhY2\ -hlX2Rpcjo6Z2xvYmFsOjpVcmxUb0ZpbGVuYW1lQ29udmVyc2lvbkVycm9yPj46Omg3NGEwMGMyMDU0\ -YzEyZWJk7QxcY29yZTo6cHRyOjpkcm9wX2luX3BsYWNlPGFueWhvdzo6ZXJyb3I6OkVycm9ySW1wbD\ -xzdGQ6OmlvOjplcnJvcjo6RXJyb3I+Pjo6aDVkZDY3YWZmOGRlYmNkZTnuDF9jb3JlOjpwdHI6OmRy\ -b3BfaW5fcGxhY2U8YW55aG93OjplcnJvcjo6RXJyb3JJbXBsPHNlcmRlX2pzb246OmVycm9yOjpFcn\ -Jvcj4+OjpoNzlmNGJmY2RhNjVjOTA5M+8MY2NvcmU6OnB0cjo6ZHJvcF9pbl9wbGFjZTxhbnlob3c6\ -OmVycm9yOjpFcnJvckltcGw8YWxsb2M6OnN0cmluZzo6RnJvbVV0ZjhFcnJvcj4+OjpoYzM1MmU5Yz\ -g3M2RiMjlkMvAMPjxRIGFzIGhhc2hicm93bjo6RXF1aXZhbGVudDxLPj46OmVxdWl2YWxlbnQ6Omg0\ -MmZhNGJhZjhjY2JjYzc48QxKPGFsbG9jOjpzdHJpbmc6OlN0cmluZyBhcyBjb3JlOjpmbXQ6OldyaX\ -RlPjo6d3JpdGVfY2hhcjo6aGJjMzA4OTBiMGY0NjZlMjbyDC1hbnlob3c6OmVycm9yOjpvYmplY3Rf\ -ZHJvcDo6aGU0ODljNDc0NzM1ZDZkMTLzDDNhbnlob3c6OmVycm9yOjpvYmplY3RfZHJvcF9mcm9udD\ -o6aDE1ZWJhMDliOWZmMWRhODj0DDNhbnlob3c6OmVycm9yOjpvYmplY3RfZHJvcF9mcm9udDo6aDQz\ -YWI1MWYyYzcyOTYyMDb1DDNhbnlob3c6OmVycm9yOjpvYmplY3RfZHJvcF9mcm9udDo6aDk1ZDAyZj\ -Y1MDM4NTk1MGL2DDNhbnlob3c6OmVycm9yOjpvYmplY3RfZHJvcF9mcm9udDo6aGQwMmVmZjViYjk2\ -ZjhlMDD3DEVoYXNoYnJvd246OnJhdzo6aW5uZXI6OlJhd1RhYmxlPFQsQT46OmZyZWVfYnVja2V0cz\ -o6aGY0ZjdiOTI2YzUwYmE0Mjn4DEZkZW5vX2NhY2hlX2Rpcjo6bG9jYWw6OkxvY2FsQ2FjaGVNYW5p\ -ZmVzdDxFbnY+OjpuZXc6OmgxYTc1MzA2OWE2N2NhZmYz+QwaX19ydXN0X2FsbG9jX2Vycm9yX2hhbm\ -RsZXL6DEBjb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8YWxsb2M6OnZlYzo6VmVjPHU4Pj46Omg4NjVk\ -YzlhYzI3MzNmZDJi+wxCY29yZTo6cHRyOjpkcm9wX2luX3BsYWNlPGFsbG9jOjpzdHJpbmc6OlN0cm\ -luZz46OmhmNWRhMjNlZjc5ZjM2NzU0/AwpYWxsb2M6OmFsbG9jOjpib3hfZnJlZTo6aDdlMmNhNzg3\ -ZDRhN2NjMTT9DEo8YWxsb2M6OnN0cmluZzo6U3RyaW5nIGFzIGNvcmU6OmZtdDo6V3JpdGU+Ojp3cm\ -l0ZV9jaGFyOjpoYmMzMDg5MGIwZjQ2NmUyNv4MRHNlcmRlX2pzb246OmRlOjpEZXNlcmlhbGl6ZXI8\ -Uj46OnBhcnNlX2FueV9udW1iZXI6Omg2YzlhM2M2NmQ2NjRhZGJm/wxIPHNlcmRlX2pzb246OmVycm\ -9yOjpFcnJvciBhcyBjb3JlOjpmbXQ6OkRpc3BsYXk+OjpmbXQ6Omg4MThlMTBkMTFmMmNiNTk2gA3B\ -AWNvcmU6OnB0cjo6ZHJvcF9pbl9wbGFjZTxzbWFsbHZlYzo6SW50b0l0ZXI8WygqY29uc3QgcGFya2\ -luZ19sb3RfY29yZTo6cGFya2luZ19sb3Q6OlRocmVhZERhdGEsY29yZTo6b3B0aW9uOjpPcHRpb248\ -cGFya2luZ19sb3RfY29yZTo6dGhyZWFkX3Bhcmtlcjo6aW1wOjpVbnBhcmtIYW5kbGU+KTsgOF0+Pj\ -o6aDdhMmM0YzIyZWUzMGRlYWGBDTA8JlQgYXMgY29yZTo6Zm10OjpEZWJ1Zz46OmZtdDo6aDIyMDE5\ -YmU0MDM3MjEwOGKCDUBjb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8YWxsb2M6OnZlYzo6VmVjPHU4Pj\ -46Omg5OGVjNWFmMWUyOTA5ODQ2gw1CY29yZTo6cHRyOjpkcm9wX2luX3BsYWNlPGFsbG9jOjp2ZWM6\ -OlZlYzwmc3RyPj46OmhhZjI3MjI4NjYyNDJkNTQzhA0zPCZUIGFzIGNvcmU6OmZtdDo6TG93ZXJIZX\ -g+OjpmbXQ6Omg4NTRjNDRjY2E1MDZjOTNlhQ0wPCZUIGFzIGNvcmU6OmZtdDo6RGVidWc+OjpmbXQ6\ -Omg0OTE5NzU2NmFkZjZhNjM0hg0lanNfc3lzOjpBcnJheTo6Z2V0OjpoNWZhYmRlZTk5ZTQyNDc0Zo\ -cNKndhc21fYmluZGdlbjo6dGhyb3dfc3RyOjpoZjBkZjdlMTYyZjZkMTlmOYgNMXdhc21fYmluZGdl\ -bjo6X19ydDo6dGhyb3dfbnVsbDo6aDdkNDczN2U3ZjE0NWU4OTiJDTJ3YXNtX2JpbmRnZW46Ol9fcn\ -Q6OmJvcnJvd19mYWlsOjpoMDM1Zjg3MDljNDA1MDA1ZooNQGNvcmU6OnB0cjo6ZHJvcF9pbl9wbGFj\ -ZTxhbGxvYzo6dmVjOjpWZWM8dTg+Pjo6aDNmMzkwY2Q5NDEyZDkxYWOLDUo8YWxsb2M6OnN0cmluZz\ -o6U3RyaW5nIGFzIGNvcmU6OmZtdDo6V3JpdGU+Ojp3cml0ZV9jaGFyOjpoYmMzMDg5MGIwZjQ2NmUy\ -NowNMjwmVCBhcyBjb3JlOjpmbXQ6OkRpc3BsYXk+OjpmbXQ6OmhhZjk2ZTUxM2JkZWIyNGUxjQ1VPH\ -NlcmRlOjpkZTo6aW1wbHM6OlN0cmluZ1Zpc2l0b3IgYXMgc2VyZGU6OmRlOjpWaXNpdG9yPjo6ZXhw\ -ZWN0aW5nOjpoOThjMjIxZjBhN2MxMDI1YY4NnQE8c2VyZGU6OmRlOjppbXBsczo6PGltcGwgc2VyZG\ -U6OmRlOjpEZXNlcmlhbGl6ZSBmb3Igc3RkOjp0aW1lOjpTeXN0ZW1UaW1lPjo6ZGVzZXJpYWxpemU6\ -OkR1cmF0aW9uVmlzaXRvciBhcyBzZXJkZTo6ZGU6OlZpc2l0b3I+OjpleHBlY3Rpbmc6Omg4MDQ2Zj\ -gxOGQ1YmFkOWRkjw2MATxzZXJkZTo6ZGU6OmltcGxzOjo8aW1wbCBzZXJkZTo6ZGU6OkRlc2VyaWFs\ -aXplIGZvciB1MzI+OjpkZXNlcmlhbGl6ZTo6UHJpbWl0aXZlVmlzaXRvciBhcyBzZXJkZTo6ZGU6Ol\ -Zpc2l0b3I+OjpleHBlY3Rpbmc6OmgyMzczNDZlMmUxNjQ5ZWQykA2MATxzZXJkZTo6ZGU6OmltcGxz\ -Ojo8aW1wbCBzZXJkZTo6ZGU6OkRlc2VyaWFsaXplIGZvciB1NjQ+OjpkZXNlcmlhbGl6ZTo6UHJpbW\ -l0aXZlVmlzaXRvciBhcyBzZXJkZTo6ZGU6OlZpc2l0b3I+OjpleHBlY3Rpbmc6OmhkNTc1ZDRlYTEz\ -NTY2NzgxkQ17Y29yZTo6cHRyOjpkcm9wX2luX3BsYWNlPGFueWhvdzo6ZXJyb3I6OkVycm9ySW1wbD\ -xhbnlob3c6OndyYXBwZXI6Ok1lc3NhZ2VFcnJvcjxhbGxvYzo6c3RyaW5nOjpTdHJpbmc+Pj46Omhh\ -MGEwZDlhYWE1NzllNmFkkg07PCZtdXQgVyBhcyBjb3JlOjpmbXQ6OldyaXRlPjo6d3JpdGVfY2hhcj\ -o6aDE4MTI5OTE3NzFiZjJiOTKTDTNhbnlob3c6OmVycm9yOjpvYmplY3RfZHJvcF9mcm9udDo6aDM2\ -ZGI1ZGYyOGMyM2QxNzCUDUFzdGQ6OnN5czo6d2FzbTo6b3Nfc3RyOjpTbGljZTo6dG9fc3RyaW5nX2\ -xvc3N5OjpoMjc2ZjYxOGIyZTQ1NmMyMpUNMmRsbWFsbG9jOjpkbG1hbGxvYzo6Q2h1bms6OnNpemU6\ -OmhlNmRlYWZjOThiNWI5YTE0lg00ZGxtYWxsb2M6OmRsbWFsbG9jOjpDaHVuazo6cGludXNlOjpoMj\ -IzZGNlZWRkMDI1MzRiOJcNOWRsbWFsbG9jOjpkbG1hbGxvYzo6U2VnbWVudDo6aXNfZXh0ZXJuOjpo\ -YmMxMmE2ZWI0Zjk2OWVmY5gNOWRsbWFsbG9jOjpkbG1hbGxvYzo6U2VnbWVudDo6c3lzX2ZsYWdzOj\ -poMThhM2YxNTdkYWZkZmM2MpkNMDwmVCBhcyBjb3JlOjpmbXQ6OkRlYnVnPjo6Zm10OjpoZTA1ZDVj\ -ZmUyZjEzOTExM5oNM2FsbG9jOjphbGxvYzo6aGFuZGxlX2FsbG9jX2Vycm9yOjpoNzI3YTVmNTM3Mz\ -AwZjllOZsNPWFsbG9jOjphbGxvYzo6aGFuZGxlX2FsbG9jX2Vycm9yOjpydF9lcnJvcjo6aDMyYjBl\ -ZGY2YTNjMWI1YjicDTM8c3RyIGFzIGNvcmU6OmZtdDo6RGlzcGxheT46OmZtdDo6aDI2MjdmM2Q1NT\ -IzYzk1ZmWdDTVjb3JlOjpzdHI6Omxvc3N5OjpVdGY4Q2h1bms6OnZhbGlkOjpoMjNkNGM2ZWY2Nzgw\ -ZmQwOJ4NN2NvcmU6OnN0cjo6bG9zc3k6OlV0ZjhDaHVuazo6aW52YWxpZDo6aDIwMzg2ZDIzNTYwMD\ -AwNjifDTA8JlQgYXMgY29yZTo6Zm10OjpEZWJ1Zz46OmZtdDo6aDNhNGQwOTJhYTQ1MTNjMDWgDTA8\ -JlQgYXMgY29yZTo6Zm10OjpEZWJ1Zz46OmZtdDo6aDdhZDQxN2I5NDYyNjJmMjGhDQZtZW1zZXSiDQ\ -ZtZW1jbXCjDQdtZW1tb3ZlpA0GbWVtY3B5pQ1AYW55aG93OjplcnJvcjo6PGltcGwgYW55aG93OjpF\ -cnJvcj46OmZyb21fc3RkOjpoNzY2MjUzNmVkZGJjZDc5NaYNT3N0ZDo6Y29sbGVjdGlvbnM6Omhhc2\ -g6Om1hcDo6UmFuZG9tU3RhdGU6Om5ldzo6S0VZUzo6X19nZXRpdDo6aGYxZmIzMjE4ODY5OTUxZTmn\ -DTI8VCBhcyBzZXJkZTo6ZGU6OkV4cGVjdGVkPjo6Zm10OjpoMGJiNGIyNDdmYTdlOTI4N6gNMjxUIG\ -FzIHNlcmRlOjpkZTo6RXhwZWN0ZWQ+OjpmbXQ6OmgwZmRlM2MyYmU3NjgzMmZkqQ0yPFQgYXMgc2Vy\ -ZGU6OmRlOjpFeHBlY3RlZD46OmZtdDo6aDJhZThhNGMwZDNiN2ZmYTKqDTI8VCBhcyBzZXJkZTo6ZG\ -U6OkV4cGVjdGVkPjo6Zm10OjpoM2RiMmE1ODZjMGNiNWE1OasNMjxUIGFzIHNlcmRlOjpkZTo6RXhw\ -ZWN0ZWQ+OjpmbXQ6OmgzZjgwNGYxZTZkNzMxNWQ0rA0yPFQgYXMgc2VyZGU6OmRlOjpFeHBlY3RlZD\ -46OmZtdDo6aDVhMmZhMjU5MzcxZDI3MDatDTI8VCBhcyBzZXJkZTo6ZGU6OkV4cGVjdGVkPjo6Zm10\ -OjpoNWQ1NDIwMjU2N2MxNmRmZq4NMjxUIGFzIHNlcmRlOjpkZTo6RXhwZWN0ZWQ+OjpmbXQ6Omg1ZD\ -Y1YTRlYWRmZmRmMTEwrw0yPFQgYXMgc2VyZGU6OmRlOjpFeHBlY3RlZD46OmZtdDo6aDdjODZlNzdi\ -YmJjODlhOTSwDSxjb3JlOjplcnJvcjo6RXJyb3I6OmNhdXNlOjpoNDE2ZjI5ZjczNjdmY2ViOLENLG\ -NvcmU6OmVycm9yOjpFcnJvcjo6Y2F1c2U6OmhmOTM2NWNkNmMzYWJjOWEzsg1AYW55aG93OjplcnJv\ -cjo6PGltcGwgYW55aG93OjpFcnJvcj46OmZyb21fc3RkOjpoNTFjMWEwMzhlMTc4MDk3MbMNQGFueW\ -hvdzo6ZXJyb3I6OjxpbXBsIGFueWhvdzo6RXJyb3I+Ojpmcm9tX3N0ZDo6aDcxMjI3YzVmNmRkNWRk\ -MDe0DUBhbnlob3c6OmVycm9yOjo8aW1wbCBhbnlob3c6OkVycm9yPjo6ZnJvbV9zdGQ6Omg4ZTc2ND\ -Q5NTNkMDAxOGVltQ1AYW55aG93OjplcnJvcjo6PGltcGwgYW55aG93OjpFcnJvcj46OmZyb21fc3Rk\ -OjpoYjEzZDljMzM1OGQyNjFiZbYNSTxhbnlob3c6OmVycm9yOjpFcnJvckltcGw8RT4gYXMgY29yZT\ -o6Zm10OjpEZWJ1Zz46OmZtdDo6aDEwMTlhYjA2YzRjZWEyOGO3DUk8YW55aG93OjplcnJvcjo6RXJy\ -b3JJbXBsPEU+IGFzIGNvcmU6OmZtdDo6RGVidWc+OjpmbXQ6OmgzMjQ1OWVjMjI4Y2ZkODdluA1JPG\ -FueWhvdzo6ZXJyb3I6OkVycm9ySW1wbDxFPiBhcyBjb3JlOjpmbXQ6OkRlYnVnPjo6Zm10OjpoNzNk\ -YzVhNGE0ZTEzOTFmYbkNSTxhbnlob3c6OmVycm9yOjpFcnJvckltcGw8RT4gYXMgY29yZTo6Zm10Oj\ -pEZWJ1Zz46OmZtdDo6aGRiZGI3NjkyNjdlZjU0ZTO6DTRvbmNlX2NlbGw6OnN5bmM6Okxhenk8VCxG\ -Pjo6Zm9yY2U6Omg1MWNmZWRlOTgzYzI2MTJluw00b25jZV9jZWxsOjpzeW5jOjpMYXp5PFQsRj46Om\ -ZvcmNlOjpoNzc4YjRiNjZmYWMxYjU4MLwNLGNvcmU6OmVycm9yOjpFcnJvcjo6Y2F1c2U6Omg1MmM3\ -NjhjY2Q0Mjc4MWY2vQ09c2VyZGVfanNvbjo6ZGU6OkRlc2VyaWFsaXplcjxSPjo6bmV4dF9jaGFyOj\ -poNTFhYTJiMzI3YWIzMTJhOb4NQHNlcmRlX2pzb246OmRlOjpEZXNlcmlhbGl6ZXI8Uj46OmZpeF9w\ -b3NpdGlvbjo6aDY4YTczN2JjNWIyZDNmNTe/DVhwYXJraW5nX2xvdF9jb3JlOjpwYXJraW5nX2xvdD\ -o6d2l0aF90aHJlYWRfZGF0YTo6VEhSRUFEX0RBVEE6Ol9fZ2V0aXQ6OmgzNjBiNzU4NjNjM2EzZDY4\ -wA1Jc3RkOjpzeXNfY29tbW9uOjpiYWNrdHJhY2U6Ol9fcnVzdF9lbmRfc2hvcnRfYmFja3RyYWNlOj\ -poZGVjNDc5YWQ2ZDY0MDc1ZsENKGpzX3N5czo6QXJyYXk6Omxlbmd0aDo6aDM1N2UxYzFjMzNhNDRk\ -ZTTCDSVqc19zeXM6OkVycm9yOjpuZXc6Omg2NDU2OWJiMThjMWY0ZjU2ww0qanNfc3lzOjpPYmplY3\ -Q6OmVudHJpZXM6OmhmM2JlZjQ5NDI4Yjk5MDQ1xA0tanNfc3lzOjpVaW50OEFycmF5OjpsZW5ndGg6\ -OmgwMWQ0NmYwN2U0Mjc1NzE4xQ0qanNfc3lzOjpVaW50OEFycmF5OjpuZXc6Omg4MWU4ZWI4ZjRiNT\ -NmNzJjxg1jPGFsbG9jOjp2ZWM6OlZlYzxUPiBhcyBhbGxvYzo6dmVjOjpzcGVjX2Zyb21faXRlcjo6\ -U3BlY0Zyb21JdGVyPFQsST4+Ojpmcm9tX2l0ZXI6OmgyODJkODIwYjY5NTA1MTk2xw1Jc3RkOjpzeX\ -NfY29tbW9uOjpiYWNrdHJhY2U6Ol9fcnVzdF9lbmRfc2hvcnRfYmFja3RyYWNlOjpoZDE3ZjNhOWI1\ -OGYwZDc2MsgNSXN0ZDo6c3lzX2NvbW1vbjo6YmFja3RyYWNlOjpfX3J1c3RfZW5kX3Nob3J0X2JhY2\ -t0cmFjZTo6aDEwMjVmNDk5M2FhZDM2OTTJDSxjb3JlOjplcnJvcjo6RXJyb3I6OmNhdXNlOjpoYzZl\ -ZTY5MzI1Yjc0ZGUzN8oNSTxhbnlob3c6OmVycm9yOjpFcnJvckltcGw8RT4gYXMgY29yZTo6Zm10Oj\ -pEZWJ1Zz46OmZtdDo6aGEyODZmM2M3NjcwMzcwMznLDUFzdGQ6OnBhbmlja2luZzo6cGFuaWNfY291\ -bnQ6OmlzX3plcm9fc2xvd19wYXRoOjpoMjRiOGUxY2VjOTNlZmM4OMwNQzxzdGQ6OmlvOjplcnJvcj\ -o6RXJyb3IgYXMgY29yZTo6Zm10OjpEZWJ1Zz46OmZtdDo6aGFmOGFhMDA5ZWUwNGI4ZTjNDUlzdGQ6\ -OnN5c19jb21tb246OmJhY2t0cmFjZTo6X19ydXN0X2VuZF9zaG9ydF9iYWNrdHJhY2U6Omg3ZmU1MW\ -ZiNGQzYmE2MDYwzg05ZGxtYWxsb2M6OmRsbWFsbG9jOjpDaHVuazo6cGx1c19vZmZzZXQ6OmhiODQz\ -ZDMxNzBhZTMxZThmzw06ZGxtYWxsb2M6OmRsbWFsbG9jOjpDaHVuazo6bWludXNfb2Zmc2V0OjpoZT\ -RhYTg2MGY4NDg2M2MzONANNGRsbWFsbG9jOjpkbG1hbGxvYzo6Q2h1bms6OnRvX21lbTo6aGU1ZTU5\ -MjAyNTU5ZTljYWPRDTZkbG1hbGxvYzo6ZGxtYWxsb2M6OkNodW5rOjpmcm9tX21lbTo6aDQwNjJmYW\ -QzOTNjYjE3Y2TSDTBjb3JlOjpvcHM6OmZ1bmN0aW9uOjpGbjo6Y2FsbDo6aDM0M2FiM2U0MDY3MjQ1\ -ODTTDTdjb3JlOjpvcHM6OmZ1bmN0aW9uOjpGbk11dDo6Y2FsbF9tdXQ6OmhhODVmOTgzNDUzMTViOG\ -Vk1A1IY29yZTo6b3BzOjpmdW5jdGlvbjo6Rm5PbmNlOjpjYWxsX29uY2V7e3Z0YWJsZS5zaGltfX06\ -Omg0ZDhmNzc1ZTBjNDBjMTRi1Q2/AWNvcmU6OnB0cjo6ZHJvcF9pbl9wbGFjZTw8YWxsb2M6OmJveG\ -VkOjpCb3g8ZHluIGNvcmU6OmVycm9yOjpFcnJvcitjb3JlOjptYXJrZXI6OlNlbmQrY29yZTo6bWFy\ -a2VyOjpTeW5jPiBhcyBjb3JlOjpjb252ZXJ0OjpGcm9tPGFsbG9jOjpzdHJpbmc6OlN0cmluZz4+Oj\ -pmcm9tOjpTdHJpbmdFcnJvcj46Omg1NTk5ODQyZDM2YzFmMTVj1g1JY29yZTo6cHRyOjpkcm9wX2lu\ -X3BsYWNlPGFsbG9jOjpzdHJpbmc6OkZyb21VdGY4RXJyb3I+OjpoNWNjNzI1NDc4NDU3YzJmMNcNTW\ -NvcmU6OnB0cjo6ZHJvcF9pbl9wbGFjZTxzZXJkZV93YXNtX2JpbmRnZW46OmVycm9yOjpFcnJvcj46\ -Omg3MzIyNGUyZmEzOGI4OWI12A2/AWNvcmU6OnB0cjo6ZHJvcF9pbl9wbGFjZTw8YWxsb2M6OmJveG\ -VkOjpCb3g8ZHluIGNvcmU6OmVycm9yOjpFcnJvcitjb3JlOjptYXJrZXI6OlNlbmQrY29yZTo6bWFy\ -a2VyOjpTeW5jPiBhcyBjb3JlOjpjb252ZXJ0OjpGcm9tPGFsbG9jOjpzdHJpbmc6OlN0cmluZz4+Oj\ -pmcm9tOjpTdHJpbmdFcnJvcj46Omg0NjcyMWRjNGY3OTI2OTRl2Q1UPHNlcmRlX2pzb246OnJlYWQ6\ -OlN0clJlYWQgYXMgc2VyZGVfanNvbjo6cmVhZDo6UmVhZD46Omlnbm9yZV9zdHI6OmgwYTM5ZTc1Nm\ -IzMzNkMjEy2g1CY29yZTo6cHRyOjpkcm9wX2luX3BsYWNlPGFsbG9jOjpzdHJpbmc6OlN0cmluZz46\ -Omg5ZmQ5YjVjNjNmNWVmZmZj2w01d2FzbV9iaW5kZ2VuOjpfX3J0OjptYWxsb2NfZmFpbHVyZTo6aD\ -M3NTVkNGM4ZjlmMTU2MDDcDUJjb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8YWxsb2M6OnN0cmluZzo6\ -U3RyaW5nPjo6aDY1MmYxMDFkN2Q2YzNlN2LdDTZ1bmljb2RlX2JpZGk6OmNoYXJfZGF0YTo6YmlkaV\ -9jbGFzczo6aGU3M2I3YTg0ZTAyNzQ5OWLeDWFjb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8YW55aG93\ -Ojp3cmFwcGVyOjpNZXNzYWdlRXJyb3I8YWxsb2M6OnN0cmluZzo6U3RyaW5nPj46OmgxMjZkNzhmYW\ -U2YTdkMzM03w07YW55aG93OjplcnJvcjo6PGltcGwgYW55aG93OjpFcnJvcj46Om1zZzo6aGU5ZWE5\ -YjhiNGRiMjE4NGLgDQ1fX3JkbF9kZWFsbG9j4Q02ZGxtYWxsb2M6OmRsbWFsbG9jOjpUcmVlQ2h1bm\ -s6Om5leHQ6Omg1OTM5OTYxNjAwMWI2NTE14g02ZGxtYWxsb2M6OmRsbWFsbG9jOjpUcmVlQ2h1bms6\ -OnByZXY6Omg2ZTVmNWUyYTlmMWU5OWJl4w0+Y29yZTo6cGFuaWM6OnBhbmljX2luZm86OlBhbmljSW\ -5mbzo6bWVzc2FnZTo6aGE5YWQyMWVlMmJkOWYwNTDkDT9jb3JlOjpwYW5pYzo6cGFuaWNfaW5mbzo6\ -UGFuaWNJbmZvOjpsb2NhdGlvbjo6aGQ1MDc1YjMyNzVkYjQ0ZTLlDUFjb3JlOjpwYW5pYzo6cGFuaW\ -NfaW5mbzo6UGFuaWNJbmZvOjpjYW5fdW53aW5kOjpoYjM3MTEwMWE2OTg3ZjU2Y+YNLmNvcmU6OmVy\ -cm9yOjpFcnJvcjo6dHlwZV9pZDo6aDBjY2EwZTllNzQzNzQ5MTXnDS5jb3JlOjplcnJvcjo6RXJyb3\ -I6OnR5cGVfaWQ6OmgzOWJkYzQ0ZWM0YWM5YWIw6A0uY29yZTo6ZXJyb3I6OkVycm9yOjp0eXBlX2lk\ -OjpoM2RhYTIxMGQ3ZjViZDEwYukNLmNvcmU6OmVycm9yOjpFcnJvcjo6dHlwZV9pZDo6aDY1YTNkYj\ -BiYjdkMjJkYzHqDS5jb3JlOjplcnJvcjo6RXJyb3I6OnR5cGVfaWQ6Omg2NzFkYmU4ZWZmM2VkMTA1\ -6w0uY29yZTo6ZXJyb3I6OkVycm9yOjp0eXBlX2lkOjpoN2FiOGEzYzQ3ZTY1YTI5N+wNLmNvcmU6Om\ -Vycm9yOjpFcnJvcjo6dHlwZV9pZDo6aGI1OTNjMWViYTFiMzc4NDXtDS5jb3JlOjplcnJvcjo6RXJy\ -b3I6OnR5cGVfaWQ6OmhkNzdlMGIxNTMzZGM3MjJh7g0uY29yZTo6ZXJyb3I6OkVycm9yOjp0eXBlX2\ -lkOjpoZTJhODhjODMyZTVlY2RhY+8NaTxzZXJkZV93YXNtX2JpbmRnZW46OmVycm9yOjpFcnJvciBh\ -cyBjb3JlOjpjb252ZXJ0OjpGcm9tPHdhc21fYmluZGdlbjo6SnNWYWx1ZT4+Ojpmcm9tOjpoZmYwND\ -U1YTM1MTU0YzdlOfANO3NlcmRlX3dhc21fYmluZGdlbjo6c2VyOjpTZXJpYWxpemVyOjpuZXc6Omgz\ -NjA4YzUwMzEwMjc5ZWZj8Q0uY29yZTo6ZXJyb3I6OkVycm9yOjp0eXBlX2lkOjpoOGZmMGU1NzMwYz\ -c1NWI4ZPINLmNvcmU6OmVycm9yOjpFcnJvcjo6dHlwZV9pZDo6aGVmOGE1ZWY0YTQyNmYzMjnzDTk8\ -VCBhcyBjb3JlOjpib3Jyb3c6OkJvcnJvdzxUPj46OmJvcnJvdzo6aDVjNWRlZDRjODI4YjE0OWT0DT\ -g8bG9nOjpOb3BMb2dnZXIgYXMgbG9nOjpMb2c+OjplbmFibGVkOjpoMWNlMTY1YTVkZGY1ZjI0N/UN\ -MTxUIGFzIGNvcmU6OmFueTo6QW55Pjo6dHlwZV9pZDo6aDUyNTI3ZjNmZjZiN2IyMDn2DUVwYXJraW\ -5nX2xvdF9jb3JlOjp0aHJlYWRfcGFya2VyOjppbXA6OnRocmVhZF95aWVsZDo6aDcwYmZhZTFkODc2\ -ZWUxYzf3DS9kYXRhX3VybDo6RGF0YVVybDo6bWltZV90eXBlOjpoNzFlN2FiMTA1ZjVkZjNhMPgNPH\ -dhc21fYmluZGdlbjo6Y2FzdDo6SnNDYXN0Ojp1bmNoZWNrZWRfcmVmOjpoMDNhMDkwZmYzMjhmYWE1\ -MfkNPXdhc21fYmluZGdlbjo6Y2FzdDo6SnNDYXN0Ojp1bmNoZWNrZWRfaW50bzo6aDA3NjkzNzkxZD\ -VhZDYyZmX6DUM8anNfc3lzOjpNYXAgYXMgY29yZTo6ZGVmYXVsdDo6RGVmYXVsdD46OmRlZmF1bHQ6\ -OmhiZGVkZmJiMTkwYTU2MTgw+w1GPGpzX3N5czo6T2JqZWN0IGFzIGNvcmU6OmRlZmF1bHQ6OkRlZm\ -F1bHQ+OjpkZWZhdWx0OjpoZTBkZjU1NTFlMzVlNTNhMPwNhgF3YXNtX2JpbmRnZW46OmNvbnZlcnQ6\ -OmltcGxzOjo8aW1wbCB3YXNtX2JpbmRnZW46OmNvbnZlcnQ6OnRyYWl0czo6SW50b1dhc21BYmkgZm\ -9yIHdhc21fYmluZGdlbjo6SnNFcnJvcj46OmludG9fYWJpOjpoYTgxMWRlYzFmZjUxZThjOP0NJ3dh\ -c21fYmluZGdlbjo6bWVtb3J5OjpoYzE4NGRlMzczMDM2MjdlYv4NMTxUIGFzIGNvcmU6OmFueTo6QW\ -55Pjo6dHlwZV9pZDo6aDc0NzY0NjE1YTM5NjhmOGL/DUFjb3JlOjppdGVyOjp0cmFpdHM6Oml0ZXJh\ -dG9yOjpJdGVyYXRvcjo6YnlfcmVmOjpoODhlMjhkMzU4ZmQxOGQ2MYAOMTxUIGFzIGNvcmU6OmFueT\ -o6QW55Pjo6dHlwZV9pZDo6aDBlZDQzZTUxYmFlODc4ZGGBDi5jb3JlOjplcnJvcjo6RXJyb3I6OnR5\ -cGVfaWQ6Omg4Y2U5YTFmYjhlMzZkZDU0gg4uY29yZTo6ZXJyb3I6OkVycm9yOjp0eXBlX2lkOjpoYW\ -I1OWE1M2VkZmMwYjA2YoMOMTxUIGFzIGNvcmU6OmFueTo6QW55Pjo6dHlwZV9pZDo6aDFiOTlkMWMz\ -YzA3MTAzNDSEDjE8VCBhcyBjb3JlOjphbnk6OkFueT46OnR5cGVfaWQ6OmhiNjNkNjUyZjRkODhmNG\ -MxhQ4xPFQgYXMgY29yZTo6YW55OjpBbnk+Ojp0eXBlX2lkOjpoZjQxMzY0NGUwNDFlZmVmNoYOLXN0\ -ZDo6dGhyZWFkOjpJbm5lcjo6cGFya2VyOjpoZmUyNTJlMDZmNGVhZTM1NYcOJnN0ZDo6cHJvY2Vzcz\ -o6YWJvcnQ6OmgyYmQyNDQ3MGY1ZTQ1YzE0iA4SX19ydXN0X3N0YXJ0X3BhbmljiQ48ZGxtYWxsb2M6\ -OmRsbWFsbG9jOjpDaHVuazo6ZmVuY2Vwb3N0X2hlYWQ6OmhjNzc4NzczNTUyOWY5OTkwig44ZGxtYW\ -xsb2M6OmRsbWFsbG9jOjpDaHVuazo6bWVtX29mZnNldDo6aDg2MGRjYzg0MjA5MGViMDeLDjdkbG1h\ -bGxvYzo6ZGxtYWxsb2M6OlRyZWVDaHVuazo6Y2h1bms6OmhiNTU5YjE1NjliMjlhNjAxjA5IPGRsbW\ -FsbG9jOjpzeXM6OlN5c3RlbSBhcyBkbG1hbGxvYzo6QWxsb2NhdG9yPjo6cmVtYXA6OmgxZDM1Njhj\ -NzY2ZjFjNDM2jQ5MPGRsbWFsbG9jOjpzeXM6OlN5c3RlbSBhcyBkbG1hbGxvYzo6QWxsb2NhdG9yPj\ -o6ZnJlZV9wYXJ0OjpoYWZkNTJhMmQ4YjljZGNiMo4ORzxkbG1hbGxvYzo6c3lzOjpTeXN0ZW0gYXMg\ -ZGxtYWxsb2M6OkFsbG9jYXRvcj46OmZyZWU6OmgwOTI0MzNkYzhlNGQwNGM4jw5TPGRsbWFsbG9jOj\ -pzeXM6OlN5c3RlbSBhcyBkbG1hbGxvYzo6QWxsb2NhdG9yPjo6Y2FuX3JlbGVhc2VfcGFydDo6aGY2\ -MGM0MWNiY2I0ZTZjNjSQDlI8ZGxtYWxsb2M6OnN5czo6U3lzdGVtIGFzIGRsbWFsbG9jOjpBbGxvY2\ -F0b3I+OjphbGxvY2F0ZXNfemVyb3M6OmhkNTVlOWQ5YzA5Njc1YzQ4kQ5MPGRsbWFsbG9jOjpzeXM6\ -OlN5c3RlbSBhcyBkbG1hbGxvYzo6QWxsb2NhdG9yPjo6cGFnZV9zaXplOjpoMmNiNmVhMDEzOWFkY2\ -U3MZIOMTxUIGFzIGNvcmU6OmFueTo6QW55Pjo6dHlwZV9pZDo6aGMxZTAyMjJhOWNkYjliMjmTDnJj\ -b3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8JmluZGV4bWFwOjptYXA6OkluZGV4TWFwPGFsbG9jOjpzdH\ -Jpbmc6OlN0cmluZyxhbGxvYzo6c3RyaW5nOjpTdHJpbmc+Pjo6aGU3ZTQyYzJmN2RlMzdkM2GUDoMB\ -Y29yZTo6cHRyOjpkcm9wX2luX3BsYWNlPHNlcmRlOjpkZTo6aW1wbHM6OjxpbXBsIHNlcmRlOjpkZT\ -o6RGVzZXJpYWxpemUgZm9yIHUzMj46OmRlc2VyaWFsaXplOjpQcmltaXRpdmVWaXNpdG9yPjo6aDkw\ -MWI2NGU4MjZiYWQxMGaVDjFjb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8Ym9vbD46Omg1MzMzMGUwNW\ -E1Y2U2NDZllg4uY29yZTo6ZXJyb3I6OkVycm9yOjpwcm92aWRlOjpoMDkyMjNmYjU4MGVjZWQ1Y5cO\ -LmNvcmU6OmVycm9yOjpFcnJvcjo6cHJvdmlkZTo6aGFiNmM5MmU1NDA2MDE2ZGWYDkNjb3JlOjpwdH\ -I6OmRyb3BfaW5fcGxhY2U8Jndhc21fYmluZGdlbjo6SnNWYWx1ZT46OmgxZmZmNDQ2NjNkZDI3MTY4\ -mQ49Y29yZTo6cHRyOjpkcm9wX2luX3BsYWNlPGNvcmU6OmZtdDo6RXJyb3I+OjpoODI3NjBiMjg0MT\ -E4MDMxOJoOR2NvcmU6OnB0cjo6ZHJvcF9pbl9wbGFjZTwmbXV0IGFsbG9jOjpzdHJpbmc6OlN0cmlu\ -Zz46OmhkNjI3YTdhYmVlM2U1OGM1mw4yY29yZTo6cHRyOjpkcm9wX2luX3BsYWNlPHVzaXplPjo6aD\ -UzNjU4MzE4YTE5ZDJlZmacDj1jb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8Y29yZTo6Zm10OjpFcnJv\ -cj46Omg0ZjM5OWJlYzI0ZmIyNzhhnQ4uY29yZTo6ZXJyb3I6OkVycm9yOjpwcm92aWRlOjpoMzBiYT\ -M3YzRhNmRlNTUzYp4OO2NvcmU6OnB0cjo6ZHJvcF9pbl9wbGFjZTxsb2c6Ok5vcExvZ2dlcj46Omg4\ -MGQ1ZjAzMjAwYTY0OGRhnw40PGxvZzo6Tm9wTG9nZ2VyIGFzIGxvZzo6TG9nPjo6bG9nOjpoMTk5Zj\ -EwM2MwOTM1ZmVjOKAONjxsb2c6Ok5vcExvZ2dlciBhcyBsb2c6OkxvZz46OmZsdXNoOjpoZmE4Yzgy\ -NTcxZmQ1ODViNaEOMmNvcmU6OnB0cjo6ZHJvcF9pbl9wbGFjZTwmYm9vbD46OmhjZDM1MGUwN2E4Yz\ -dhMTg0og4yY29yZTo6cHRyOjpkcm9wX2luX3BsYWNlPHVzaXplPjo6aDk0YzUxZGRlYjBmZTY0Mzij\ -Dn48cGFya2luZ19sb3RfY29yZTo6dGhyZWFkX3Bhcmtlcjo6aW1wOjpUaHJlYWRQYXJrZXIgYXMgcG\ -Fya2luZ19sb3RfY29yZTo6dGhyZWFkX3Bhcmtlcjo6VGhyZWFkUGFya2VyVD46Om5ldzo6aDQwMzg3\ -NDRiZmYyMTgzYjGkDkljb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8JmNvcmU6OmFsbG9jOjpsYXlvdX\ -Q6OkxheW91dD46OmhmOTY5MzUwZGFhYzYxNjY0pQ4zY29yZTo6cHRyOjpkcm9wX2luX3BsYWNlPCZ1\ -c2l6ZT46Omg4MmE4MTVlYzMzYjU5MDVjpg49Y29yZTo6cHRyOjpkcm9wX2luX3BsYWNlPGNvcmU6Om\ -ZtdDo6RXJyb3I+OjpoYmNiYTA5NTQ2YmJkYTczZqcOSDxhbGxvYzo6dmVjOjpWZWM8VCxBPiBhcyBj\ -b3JlOjpvcHM6OmRyb3A6OkRyb3A+Ojpkcm9wOjpoMzQ2M2EyNDBkNjE1NGZlNagOM2NvcmU6OnB0cj\ -o6ZHJvcF9pbl9wbGFjZTwmdXNpemU+OjpoYWRmZGY4YzI4YjlkZTg3ZqkOSDxhbGxvYzo6dmVjOjpW\ -ZWM8VCxBPiBhcyBjb3JlOjpvcHM6OmRyb3A6OkRyb3A+Ojpkcm9wOjpoMmJhYTNmMzczMGYzYjFkNa\ -oOMWNvcmU6OnB0cjo6ZHJvcF9pbl9wbGFjZTxib29sPjo6aGY0ZDE5ODZhZjY3YTM4MDCrDjJjb3Jl\ -OjpwdHI6OmRyb3BfaW5fcGxhY2U8dXNpemU+OjpoNjRiZmUxNDFmNWIyZTA2MKwOPWNvcmU6OnB0cj\ -o6ZHJvcF9pbl9wbGFjZTxjb3JlOjpmbXQ6OkVycm9yPjo6aGYzYTgwZGVkNDk3NmU4NDetDkg8YWxs\ -b2M6OnZlYzo6VmVjPFQsQT4gYXMgY29yZTo6b3BzOjpkcm9wOjpEcm9wPjo6ZHJvcDo6aGM5OGM3Yz\ -EzYzYyNDZkNjGuDjBjb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8JnU4Pjo6aGRlN2U5OTdiYWQxNTI3\ -NTKvDkg8YWxsb2M6OnZlYzo6VmVjPFQsQT4gYXMgY29yZTo6b3BzOjpkcm9wOjpEcm9wPjo6ZHJvcD\ -o6aDVlYmZmYjI3ZWU1ZTE3MTWwDn1jb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8JihzZXJkZTo6X19w\ -cml2YXRlOjpkZTo6Y29udGVudDo6Q29udGVudCxzZXJkZTo6X19wcml2YXRlOjpkZTo6Y29udGVudD\ -o6Q29udGVudCk+OjpoYjIzZmQyMGNmOGYyZTU5YrEOM2NvcmU6OnB0cjo6ZHJvcF9pbl9wbGFjZTwm\ -dXNpemU+OjpoMzA1YjdhNTM2MDQwMzBmOLIOLmNvcmU6OmVycm9yOjpFcnJvcjo6cHJvdmlkZTo6aD\ -RkOGY0Zjc4ZTRhNmEyZjezDmljb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8Jm11dCBzdGQ6OmlvOjpX\ -cml0ZTo6d3JpdGVfZm10OjpBZGFwdGVyPGFsbG9jOjp2ZWM6OlZlYzx1OD4+Pjo6aDA4NDY0ZWM0NT\ -k1Nzk1NDm0DjFjb3JlOjpwdHI6OmRyb3BfaW5fcGxhY2U8Ym9vbD46OmhhZDBjZDNkZDAyYjhmM2Jh\ -tQ4vY29yZTo6cHRyOjpkcm9wX2luX3BsYWNlPCgpPjo6aDcyYTZhZDliNThhMWU5MDi2DixzdGQ6Om\ -ZzOjpPcGVuT3B0aW9uczo6bmV3OjpoNDFlMDdkMjMzOTZkMjFjN7cOQXN0ZDo6c3lzOjp3YXNtOjp0\ -aHJlYWRfcGFya2luZzo6UGFya2VyOjp1bnBhcms6OmgyNDE5N2JiNjNkNjQ1NGE4uA4yY29yZTo6cH\ -RyOjpkcm9wX2luX3BsYWNlPHVzaXplPjo6aGNlN2RmNDAxMTY0MzM0Yzm5Dj1jb3JlOjpwdHI6OmRy\ -b3BfaW5fcGxhY2U8Y29yZTo6Zm10OjpFcnJvcj46OmgzMDE3NjdkMGQ2OWU0NDY2ug5vY29yZTo6cH\ -RyOjpkcm9wX2luX3BsYWNlPCZjb3JlOjppdGVyOjphZGFwdGVyczo6Y29waWVkOjpDb3BpZWQ8Y29y\ -ZTo6c2xpY2U6Oml0ZXI6Okl0ZXI8dTg+Pj46Omg4N2Y0MmU3MmU0OTE1YTZkuw49Y29yZTo6cHRyOj\ -pkcm9wX2luX3BsYWNlPGNvcmU6OmZtdDo6RXJyb3I+OjpoM2Y0MzFhYzE5OGIxYWQzOADvgICAAAlw\ -cm9kdWNlcnMCCGxhbmd1YWdlAQRSdXN0AAxwcm9jZXNzZWQtYnkDBXJ1c3RjHTEuNzEuMSAoZWIyNj\ -I5NmI1IDIwMjMtMDgtMDMpBndhbHJ1cwYwLjE5LjAMd2FzbS1iaW5kZ2VuBjAuMi44NgCsgICAAA90\ -YXJnZXRfZmVhdHVyZXMCKw9tdXRhYmxlLWdsb2JhbHMrCHNpZ24tZXh0\ -", - ); - const wasmModule = new WebAssembly.Module(wasmBytes); - return new WebAssembly.Instance(wasmModule, imports); -} - -function base64decode(b64) { - const binString = atob(b64); - const size = binString.length; - const bytes = new Uint8Array(size); - for (let i = 0; i < size; i++) { - bytes[i] = binString.charCodeAt(i); - } - return bytes; -} diff --git a/vendor/deno.land/x/deno_cache@0.5.2/lib/snippets/#deno_cache_dir-77bed_2801c/fs.js b/vendor/deno.land/x/deno_cache@0.5.2/lib/snippets/#deno_cache_dir-77bed_2801c/fs.js deleted file mode 100644 index ba3fc23..0000000 --- a/vendor/deno.land/x/deno_cache@0.5.2/lib/snippets/#deno_cache_dir-77bed_2801c/fs.js +++ /dev/null @@ -1,86 +0,0 @@ -export function read_file_bytes(path) { - try { - return Deno.readFileSync(path); - } catch (err) { - if (err instanceof Deno.errors.NotFound) { - return undefined; - } else { - throw err; - } - } -} - -export function atomic_write_file(path, bytes) { - function parentPath(path) { - const lastSlashIndex = path.lastIndexOf("/") ?? path.lastIndexOf("\\"); - return path.slice(0, lastSlashIndex); - } - - // write to a temporary file write beside the other file, then rename it - // in a single sys call in order to prevent issues where the process - // is killed while writing to a file and the file ends up in a corrupted state - - const cachePerm = 0o644; - const tempName = path + "." + randomHex(); - try { - Deno.writeFileSync(tempName, bytes, { mode: cachePerm }); - } catch (err) { - if (err instanceof Deno.errors.NotFound) { - try { - Deno.mkdirSync(parentPath(path), { recursive: true }); - } catch { - // ignore - } - Deno.writeFileSync(tempName, bytes, { mode: cachePerm }); - } else { - throw err; - } - } - try { - Deno.renameSync(tempName, path); - } catch (err) { - try { - Deno.removeSync(tempName); - } catch { - // ignore - } - throw err; - } - - function randomHex() { - //https://stackoverflow.com/a/27747377/188246 - const arr = new Uint8Array(2); - crypto.getRandomValues(arr); - return Array.from(arr, (dec) => dec.toString(16).padStart(2, "0")).join(""); - } -} - -export function modified_time(path) { - try { - const stat = Deno.lstatSync(path); - return msToS(stat.mtime.getTime()); - } catch (err) { - if (err instanceof Deno.errors.NotFound) { - return undefined; - } else { - throw err; - } - } -} - -export function is_file(path) { - try { - const stat = Deno.lstatSync(path); - return stat.isFile; - } catch { - return false; - } -} - -export function time_now() { - return msToS(Date.now()); -} - -function msToS(ms) { - return Math.round(ms / 1000); -} diff --git a/vendor/deno.land/x/deno_cache@0.5.2/mod.ts b/vendor/deno.land/x/deno_cache@0.5.2/mod.ts deleted file mode 100644 index 2f76211..0000000 --- a/vendor/deno.land/x/deno_cache@0.5.2/mod.ts +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. - -/** - * A module which provides a TypeScript implementation of the Deno CLI's cache - * directory logic (`DENO_DIR`). This can be used in combination with other - * modules to provide user loadable APIs that are like the Deno CLI's - * functionality. - * - * This also can provide user read access in Deploy to a Deno CLI's cache when - * the cache is checked into the repository. - * - * ### Example - * - * ```ts - * import { createCache } from "https://deno.land/x/deno_cache/mod.ts"; - * import { createGraph } from "https://deno.land/x/deno_graph/mod.ts"; - * - * // create a cache where the location will be determined environmentally - * const cache = createCache(); - * // destructuring the two functions we need to pass to the graph - * const { cacheInfo, load } = cache; - * // create a graph that will use the cache above to load and cache dependencies - * const graph = await createGraph("https://deno.land/x/oak@v9.0.1/mod.ts", { - * cacheInfo, - * load, - * }); - * - * // log out the console a similar output to `deno info` on the command line. - * console.log(graph.toString()); - * ``` - * - * @module - */ - -import { FetchCacher } from "./cache.ts"; -import { type CacheInfo, type LoadResponse } from "./deps.ts"; -import { DenoDir } from "./deno_dir.ts"; -import { type CacheSetting, FileFetcher } from "./file_fetcher.ts"; - -export { FetchCacher } from "./cache.ts"; -export { DenoDir } from "./deno_dir.ts"; -export { type CacheSetting, FileFetcher } from "./file_fetcher.ts"; - -export interface Loader { - /** A function that can be passed to a `deno_graph` building function to - * provide information about the cache to populate the output. - */ - cacheInfo?(specifier: string): CacheInfo; - /** A function that can be passed to a `deno_graph` that will load and cache - * dependencies in the graph in the disk cache. - */ - load(specifier: string): Promise; -} - -export interface CacheOptions { - /** Allow remote URLs to be fetched if missing from the cache. This defaults - * to `true`. Setting it to `false` is like passing the `--no-remote` in the - * Deno CLI, meaning that any modules not in cache error. */ - allowRemote?: boolean; - /** Determines how the cache will be used. The default value is `"use"` - * meaning the cache will be used, and any remote module cache misses will - * be fetched and stored in the cache. */ - cacheSetting?: CacheSetting; - /** This forces the cache into a `readOnly` mode, where fetched resources - * will not be stored on disk if `true`. The default is detected from the - * environment, checking to see if `Deno.writeFile` exists. */ - readOnly?: boolean; - /** Specifies a path to the root of the cache. Setting this value overrides - * the detection of location from the environment. */ - root?: string | URL; - /** Specifies a path to the local vendor directory if it exists. */ - vendorRoot?: string | URL; -} - -/** - * Creates a cache object that allows access to the internal `DENO_DIR` cache - * structure for remote dependencies and cached output of emitted modules. - */ -export function createCache({ - root, - cacheSetting = "use", - allowRemote = true, - readOnly, - vendorRoot, -}: CacheOptions = {}): Loader { - const denoDir = new DenoDir(root); - const cache = denoDir.createHttpCache({ - readOnly, - vendorRoot, - }); - const fileFetcher = new FileFetcher(cache, cacheSetting, allowRemote); - return new FetchCacher(fileFetcher); -} diff --git a/vendor/deno.land/x/deno_cache@0.5.2/util.ts b/vendor/deno.land/x/deno_cache@0.5.2/util.ts deleted file mode 100644 index cecbda9..0000000 --- a/vendor/deno.land/x/deno_cache@0.5.2/util.ts +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. - -export const CACHE_PERM = 0o644; - -export function assert(cond: unknown, msg = "Assertion failed."): asserts cond { - if (!cond) { - throw new Error(msg); - } -} - -export function isFileSync(filePath: string): boolean { - try { - const stats = Deno.lstatSync(filePath); - return stats.isFile; - } catch (err) { - if (err instanceof Deno.errors.NotFound) { - return false; - } - throw err; - } -} diff --git a/vendor/deno.land/x/deno_graph@0.26.0/lib/deno_graph.generated.js b/vendor/deno.land/x/deno_graph@0.26.0/lib/deno_graph.generated.js deleted file mode 100644 index 6359f82..0000000 --- a/vendor/deno.land/x/deno_graph@0.26.0/lib/deno_graph.generated.js +++ /dev/null @@ -1,881 +0,0 @@ -// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. -// @generated file from build script, do not edit -// deno-lint-ignore-file - -import * as import0 from "./snippets/deno_graph-de651bc9c240ed8d/src/deno_apis.js"; - -const heap = new Array(32).fill(undefined); - -heap.push(undefined, null, true, false); - -function getObject(idx) { - return heap[idx]; -} - -let heap_next = heap.length; - -function dropObject(idx) { - if (idx < 36) return; - heap[idx] = heap_next; - heap_next = idx; -} - -function takeObject(idx) { - const ret = getObject(idx); - dropObject(idx); - return ret; -} - -let WASM_VECTOR_LEN = 0; - -let cachegetUint8Memory0 = null; -function getUint8Memory0() { - if ( - cachegetUint8Memory0 === null || - cachegetUint8Memory0.buffer !== wasm.memory.buffer - ) { - cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer); - } - return cachegetUint8Memory0; -} - -let cachedTextEncoder = new TextEncoder("utf-8"); - -const encodeString = function (arg, view) { - return cachedTextEncoder.encodeInto(arg, view); -}; - -function passStringToWasm0(arg, malloc, realloc) { - if (realloc === undefined) { - const buf = cachedTextEncoder.encode(arg); - const ptr = malloc(buf.length); - getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf); - WASM_VECTOR_LEN = buf.length; - return ptr; - } - - let len = arg.length; - let ptr = malloc(len); - - const mem = getUint8Memory0(); - - let offset = 0; - - for (; offset < len; offset++) { - const code = arg.charCodeAt(offset); - if (code > 0x7F) break; - mem[ptr + offset] = code; - } - - if (offset !== len) { - if (offset !== 0) { - arg = arg.slice(offset); - } - ptr = realloc(ptr, len, len = offset + arg.length * 3); - const view = getUint8Memory0().subarray(ptr + offset, ptr + len); - const ret = encodeString(arg, view); - - offset += ret.written; - } - - WASM_VECTOR_LEN = offset; - return ptr; -} - -let cachegetInt32Memory0 = null; -function getInt32Memory0() { - if ( - cachegetInt32Memory0 === null || - cachegetInt32Memory0.buffer !== wasm.memory.buffer - ) { - cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer); - } - return cachegetInt32Memory0; -} - -let cachedTextDecoder = new TextDecoder("utf-8", { - ignoreBOM: true, - fatal: true, -}); - -cachedTextDecoder.decode(); - -function getStringFromWasm0(ptr, len) { - return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len)); -} - -function addHeapObject(obj) { - if (heap_next === heap.length) heap.push(heap.length + 1); - const idx = heap_next; - heap_next = heap[idx]; - - heap[idx] = obj; - return idx; -} - -function debugString(val) { - // primitive types - const type = typeof val; - if (type == "number" || type == "boolean" || val == null) { - return `${val}`; - } - if (type == "string") { - return `"${val}"`; - } - if (type == "symbol") { - const description = val.description; - if (description == null) { - return "Symbol"; - } else { - return `Symbol(${description})`; - } - } - if (type == "function") { - const name = val.name; - if (typeof name == "string" && name.length > 0) { - return `Function(${name})`; - } else { - return "Function"; - } - } - // objects - if (Array.isArray(val)) { - const length = val.length; - let debug = "["; - if (length > 0) { - debug += debugString(val[0]); - } - for (let i = 1; i < length; i++) { - debug += ", " + debugString(val[i]); - } - debug += "]"; - return debug; - } - // Test for built-in - const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val)); - let className; - if (builtInMatches.length > 1) { - className = builtInMatches[1]; - } else { - // Failed to match the standard '[object ClassName]' - return toString.call(val); - } - if (className == "Object") { - // we're a user defined class or Object - // JSON.stringify avoids problems with cycles, and is generally much - // easier than looping through ownProperties of `val`. - try { - return "Object(" + JSON.stringify(val) + ")"; - } catch (_) { - return "Object"; - } - } - // errors - if (val instanceof Error) { - return `${val.name}: ${val.message}\n${val.stack}`; - } - // TODO we could test for more things here, like `Set`s and `Map`s. - return className; -} - -const CLOSURE_DTORS = new FinalizationRegistry((state) => { - wasm.__wbindgen_export_2.get(state.dtor)(state.a, state.b); -}); - -function makeMutClosure(arg0, arg1, dtor, f) { - const state = { a: arg0, b: arg1, cnt: 1, dtor }; - const real = (...args) => { - // First up with a closure we increment the internal reference - // count. This ensures that the Rust closure environment won't - // be deallocated while we're invoking it. - state.cnt++; - const a = state.a; - state.a = 0; - try { - return f(a, state.b, ...args); - } finally { - if (--state.cnt === 0) { - wasm.__wbindgen_export_2.get(state.dtor)(a, state.b); - CLOSURE_DTORS.unregister(state); - } else { - state.a = a; - } - } - }; - real.original = state; - CLOSURE_DTORS.register(real, state, state); - return real; -} -function __wbg_adapter_20(arg0, arg1, arg2) { - wasm - ._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__haaf10ac45db29e97( - arg0, - arg1, - addHeapObject(arg2), - ); -} - -function isLikeNone(x) { - return x === undefined || x === null; -} -/** - * @param {string} specifier - * @param {any} maybe_headers - * @param {string | undefined} maybe_jsx_import_source_module - * @param {string} content - * @param {any} maybe_kind - * @param {Function | undefined} maybe_resolve - * @param {Function | undefined} maybe_resolve_types - * @returns {Module} - */ -export function parseModule( - specifier, - maybe_headers, - maybe_jsx_import_source_module, - content, - maybe_kind, - maybe_resolve, - maybe_resolve_types, -) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - var ptr0 = passStringToWasm0( - specifier, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - var len0 = WASM_VECTOR_LEN; - var ptr1 = isLikeNone(maybe_jsx_import_source_module) - ? 0 - : passStringToWasm0( - maybe_jsx_import_source_module, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - var len1 = WASM_VECTOR_LEN; - var ptr2 = passStringToWasm0( - content, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - var len2 = WASM_VECTOR_LEN; - wasm.parseModule( - retptr, - ptr0, - len0, - addHeapObject(maybe_headers), - ptr1, - len1, - ptr2, - len2, - addHeapObject(maybe_kind), - isLikeNone(maybe_resolve) ? 0 : addHeapObject(maybe_resolve), - isLikeNone(maybe_resolve_types) ? 0 : addHeapObject(maybe_resolve_types), - ); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - var r2 = getInt32Memory0()[retptr / 4 + 2]; - if (r2) { - throw takeObject(r1); - } - return Module.__wrap(r0); - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - } -} - -/** - * @param {any} roots - * @param {Function} load - * @param {string | undefined} maybe_jsx_import_source_module - * @param {Function | undefined} maybe_cache_info - * @param {Function | undefined} maybe_resolve - * @param {Function | undefined} maybe_resolve_types - * @param {Function | undefined} maybe_check - * @param {Function | undefined} maybe_get_checksum - * @param {string | undefined} maybe_lockfile_name - * @param {string | undefined} maybe_build_kind - * @param {any} maybe_imports - * @returns {Promise} - */ -export function createGraph( - roots, - load, - maybe_jsx_import_source_module, - maybe_cache_info, - maybe_resolve, - maybe_resolve_types, - maybe_check, - maybe_get_checksum, - maybe_lockfile_name, - maybe_build_kind, - maybe_imports, -) { - var ptr0 = isLikeNone(maybe_jsx_import_source_module) - ? 0 - : passStringToWasm0( - maybe_jsx_import_source_module, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - var len0 = WASM_VECTOR_LEN; - var ptr1 = isLikeNone(maybe_lockfile_name) - ? 0 - : passStringToWasm0( - maybe_lockfile_name, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - var len1 = WASM_VECTOR_LEN; - var ptr2 = isLikeNone(maybe_build_kind) - ? 0 - : passStringToWasm0( - maybe_build_kind, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - var len2 = WASM_VECTOR_LEN; - var ret = wasm.createGraph( - addHeapObject(roots), - addHeapObject(load), - ptr0, - len0, - isLikeNone(maybe_cache_info) ? 0 : addHeapObject(maybe_cache_info), - isLikeNone(maybe_resolve) ? 0 : addHeapObject(maybe_resolve), - isLikeNone(maybe_resolve_types) ? 0 : addHeapObject(maybe_resolve_types), - isLikeNone(maybe_check) ? 0 : addHeapObject(maybe_check), - isLikeNone(maybe_get_checksum) ? 0 : addHeapObject(maybe_get_checksum), - ptr1, - len1, - ptr2, - len2, - addHeapObject(maybe_imports), - ); - return takeObject(ret); -} - -const u32CvtShim = new Uint32Array(2); - -const uint64CvtShim = new BigUint64Array(u32CvtShim.buffer); - -const int64CvtShim = new BigInt64Array(u32CvtShim.buffer); - -function handleError(f, args) { - try { - return f.apply(this, args); - } catch (e) { - wasm.__wbindgen_exn_store(addHeapObject(e)); - } -} -function __wbg_adapter_69(arg0, arg1, arg2, arg3) { - wasm.wasm_bindgen__convert__closures__invoke2_mut__had5d8f15ca1c7c5b( - arg0, - arg1, - addHeapObject(arg2), - addHeapObject(arg3), - ); -} - -const ModuleFinalization = new FinalizationRegistry((ptr) => - wasm.__wbg_module_free(ptr) -); -/** */ -export class Module { - static __wrap(ptr) { - const obj = Object.create(Module.prototype); - obj.ptr = ptr; - ModuleFinalization.register(obj, obj.ptr, obj); - return obj; - } - - __destroy_into_raw() { - const ptr = this.ptr; - this.ptr = 0; - ModuleFinalization.unregister(this); - return ptr; - } - - free() { - const ptr = this.__destroy_into_raw(); - wasm.__wbg_module_free(ptr); - } - /** - * @returns {any} - */ - get cacheInfo() { - var ret = wasm.module_cacheInfo(this.ptr); - return takeObject(ret); - } - /** - * @returns {string | undefined} - */ - get checksum() { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - wasm.module_checksum(retptr, this.ptr); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - let v0; - if (r0 !== 0) { - v0 = getStringFromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 1); - } - return v0; - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - } - } - /** - * @returns {any} - */ - get dependencies() { - var ret = wasm.module_dependencies(this.ptr); - return takeObject(ret); - } - /** - * @returns {any} - */ - get kind() { - var ret = wasm.module_kind(this.ptr); - return takeObject(ret); - } - /** - * @returns {string} - */ - get mediaType() { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - wasm.module_mediaType(retptr, this.ptr); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - return getStringFromWasm0(r0, r1); - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - wasm.__wbindgen_free(r0, r1); - } - } - /** - * @returns {number} - */ - get size() { - var ret = wasm.module_size(this.ptr); - return ret >>> 0; - } - /** - * @returns {string} - */ - get source() { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - wasm.module_source(retptr, this.ptr); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - return getStringFromWasm0(r0, r1); - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - wasm.__wbindgen_free(r0, r1); - } - } - /** - * @returns {string} - */ - get specifier() { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - wasm.module_specifier(retptr, this.ptr); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - return getStringFromWasm0(r0, r1); - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - wasm.__wbindgen_free(r0, r1); - } - } - /** - * @returns {any} - */ - get typesDependency() { - var ret = wasm.module_typesDependency(this.ptr); - return takeObject(ret); - } - /** - * @returns {any} - */ - toJSON() { - var ret = wasm.module_toJSON(this.ptr); - return takeObject(ret); - } -} - -const ModuleGraphFinalization = new FinalizationRegistry((ptr) => - wasm.__wbg_modulegraph_free(ptr) -); -/** */ -export class ModuleGraph { - static __wrap(ptr) { - const obj = Object.create(ModuleGraph.prototype); - obj.ptr = ptr; - ModuleGraphFinalization.register(obj, obj.ptr, obj); - return obj; - } - - __destroy_into_raw() { - const ptr = this.ptr; - this.ptr = 0; - ModuleGraphFinalization.unregister(this); - return ptr; - } - - free() { - const ptr = this.__destroy_into_raw(); - wasm.__wbg_modulegraph_free(ptr); - } - /** - * @returns {Array} - */ - get roots() { - var ret = wasm.modulegraph_roots(this.ptr); - return takeObject(ret); - } - /** - * @param {string} specifier - * @returns {Module | undefined} - */ - get(specifier) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - var ptr0 = passStringToWasm0( - specifier, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - var len0 = WASM_VECTOR_LEN; - wasm.modulegraph_get(retptr, this.ptr, ptr0, len0); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - var r2 = getInt32Memory0()[retptr / 4 + 2]; - if (r2) { - throw takeObject(r1); - } - return r0 === 0 ? undefined : Module.__wrap(r0); - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - } - } - /** */ - lock() { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - wasm.modulegraph_lock(retptr, this.ptr); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - if (r1) { - throw takeObject(r0); - } - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - } - } - /** - * @returns {Array} - */ - get modules() { - var ret = wasm.modulegraph_modules(this.ptr); - return takeObject(ret); - } - /** - * @param {string} specifier - * @returns {string} - */ - resolve(specifier) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - var ptr0 = passStringToWasm0( - specifier, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - var len0 = WASM_VECTOR_LEN; - wasm.modulegraph_resolve(retptr, this.ptr, ptr0, len0); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - return getStringFromWasm0(r0, r1); - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - wasm.__wbindgen_free(r0, r1); - } - } - /** - * @param {string} specifier - * @param {string} referrer - * @param {boolean} prefer_types - * @returns {string | undefined} - */ - resolveDependency(specifier, referrer, prefer_types) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - var ptr0 = passStringToWasm0( - specifier, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - var len0 = WASM_VECTOR_LEN; - var ptr1 = passStringToWasm0( - referrer, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - var len1 = WASM_VECTOR_LEN; - wasm.modulegraph_resolveDependency( - retptr, - this.ptr, - ptr0, - len0, - ptr1, - len1, - prefer_types, - ); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - let v2; - if (r0 !== 0) { - v2 = getStringFromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 1); - } - return v2; - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - } - } - /** - * @returns {any} - */ - toJSON() { - var ret = wasm.modulegraph_toJSON(this.ptr); - return takeObject(ret); - } - /** - * @param {boolean | undefined} maybe_no_color - * @returns {string} - */ - toString(maybe_no_color) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - wasm.modulegraph_toString( - retptr, - this.ptr, - isLikeNone(maybe_no_color) ? 0xFFFFFF : maybe_no_color ? 1 : 0, - ); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - return getStringFromWasm0(r0, r1); - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - wasm.__wbindgen_free(r0, r1); - } - } -} - -const imports = { - __wbindgen_placeholder__: { - __wbindgen_object_drop_ref: function (arg0) { - takeObject(arg0); - }, - __wbindgen_json_serialize: function (arg0, arg1) { - const obj = getObject(arg1); - var ret = JSON.stringify(obj === undefined ? null : obj); - var ptr0 = passStringToWasm0( - ret, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - var len0 = WASM_VECTOR_LEN; - getInt32Memory0()[arg0 / 4 + 1] = len0; - getInt32Memory0()[arg0 / 4 + 0] = ptr0; - }, - __wbindgen_string_new: function (arg0, arg1) { - var ret = getStringFromWasm0(arg0, arg1); - return addHeapObject(ret); - }, - __wbg_module_new: function (arg0) { - var ret = Module.__wrap(arg0); - return addHeapObject(ret); - }, - __wbg_modulegraph_new: function (arg0) { - var ret = ModuleGraph.__wrap(arg0); - return addHeapObject(ret); - }, - __wbg_BigInt_1b7cf17b993da2bd: function (arg0, arg1) { - u32CvtShim[0] = arg0; - u32CvtShim[1] = arg1; - const n0 = uint64CvtShim[0]; - var ret = BigInt(n0); - return addHeapObject(ret); - }, - __wbg_BigInt_4f2945f00df26418: function (arg0, arg1) { - u32CvtShim[0] = arg0; - u32CvtShim[1] = arg1; - const n0 = int64CvtShim[0]; - var ret = BigInt(n0); - return addHeapObject(ret); - }, - __wbg_set_fbb49ad265f9dee8: function (arg0, arg1, arg2) { - getObject(arg0)[takeObject(arg1)] = takeObject(arg2); - }, - __wbindgen_object_clone_ref: function (arg0) { - var ret = getObject(arg0); - return addHeapObject(ret); - }, - __wbindgen_number_new: function (arg0) { - var ret = arg0; - return addHeapObject(ret); - }, - __wbindgen_cb_drop: function (arg0) { - const obj = takeObject(arg0).original; - if (obj.cnt-- == 1) { - obj.a = 0; - return true; - } - var ret = false; - return ret; - }, - __wbg_new_16f24b0728c5e67b: function () { - var ret = new Array(); - return addHeapObject(ret); - }, - __wbg_new_b563cacb0bf27b31: function () { - var ret = new Map(); - return addHeapObject(ret); - }, - __wbg_new_d3138911a89329b0: function () { - var ret = new Object(); - return addHeapObject(ret); - }, - __wbindgen_is_string: function (arg0) { - var ret = typeof (getObject(arg0)) === "string"; - return ret; - }, - __wbg_push_a72df856079e6930: function (arg0, arg1) { - var ret = getObject(arg0).push(getObject(arg1)); - return ret; - }, - __wbg_new_55259b13834a484c: function (arg0, arg1) { - var ret = new Error(getStringFromWasm0(arg0, arg1)); - return addHeapObject(ret); - }, - __wbg_call_94697a95cb7e239c: function () { - return handleError(function (arg0, arg1, arg2) { - var ret = getObject(arg0).call(getObject(arg1), getObject(arg2)); - return addHeapObject(ret); - }, arguments); - }, - __wbg_call_471669b9b42539e5: function () { - return handleError(function (arg0, arg1, arg2, arg3) { - var ret = getObject(arg0).call( - getObject(arg1), - getObject(arg2), - getObject(arg3), - ); - return addHeapObject(ret); - }, arguments); - }, - __wbg_set_e543156a3c4d08a8: function (arg0, arg1, arg2) { - var ret = getObject(arg0).set(getObject(arg1), getObject(arg2)); - return addHeapObject(ret); - }, - __wbg_new_4beacc9c71572250: function (arg0, arg1) { - try { - var state0 = { a: arg0, b: arg1 }; - var cb0 = (arg0, arg1) => { - const a = state0.a; - state0.a = 0; - try { - return __wbg_adapter_69(a, state0.b, arg0, arg1); - } finally { - state0.a = a; - } - }; - var ret = new Promise(cb0); - return addHeapObject(ret); - } finally { - state0.a = state0.b = 0; - } - }, - __wbg_resolve_4f8f547f26b30b27: function (arg0) { - var ret = Promise.resolve(getObject(arg0)); - return addHeapObject(ret); - }, - __wbg_then_a6860c82b90816ca: function (arg0, arg1) { - var ret = getObject(arg0).then(getObject(arg1)); - return addHeapObject(ret); - }, - __wbg_then_58a04e42527f52c6: function (arg0, arg1, arg2) { - var ret = getObject(arg0).then(getObject(arg1), getObject(arg2)); - return addHeapObject(ret); - }, - __wbindgen_debug_string: function (arg0, arg1) { - var ret = debugString(getObject(arg1)); - var ptr0 = passStringToWasm0( - ret, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - var len0 = WASM_VECTOR_LEN; - getInt32Memory0()[arg0 / 4 + 1] = len0; - getInt32Memory0()[arg0 / 4 + 0] = ptr0; - }, - __wbindgen_throw: function (arg0, arg1) { - throw new Error(getStringFromWasm0(arg0, arg1)); - }, - __wbindgen_closure_wrapper1683: function (arg0, arg1, arg2) { - var ret = makeMutClosure(arg0, arg1, 284, __wbg_adapter_20); - return addHeapObject(ret); - }, - }, - "./snippets/deno_graph-de651bc9c240ed8d/src/deno_apis.js": import0, -}; - -const wasm_url = new URL("deno_graph_bg.wasm", import.meta.url); -let wasmInstantiatePromise; -switch (wasm_url.protocol) { - case "file:": { - if ("permissions" in Deno) { - Deno.permissions.request({ name: "read", path: wasm_url }); - } - const wasmCode = await Deno.readFile(wasm_url); - wasmInstantiatePromise = WebAssembly.instantiate(wasmCode, imports); - break; - } - case "https:": - case "http:": { - if ("permissions" in Deno) { - Deno.permissions.request({ name: "net", host: wasm_url.host }); - } - const wasmResponse = await fetch(wasm_url); - if ( - wasmResponse.headers.get("content-type")?.toLowerCase().startsWith( - "application/wasm", - ) - ) { - wasmInstantiatePromise = WebAssembly.instantiateStreaming( - wasmResponse, - imports, - ); - } else { - wasmInstantiatePromise = WebAssembly.instantiate( - await wasmResponse.arrayBuffer(), - imports, - ); - } - break; - } - default: - throw new Error(`Unsupported protocol: ${wasm_url.protocol}`); -} - -const wasmInstance = (await wasmInstantiatePromise).instance; -const wasm = wasmInstance.exports; - -/* for testing and debugging */ -export const _wasm = wasm; -export const _wasmInstance = wasmInstance; diff --git a/vendor/deno.land/x/deno_graph@0.26.0/lib/loader.ts b/vendor/deno.land/x/deno_graph@0.26.0/lib/loader.ts deleted file mode 100644 index 04fe924..0000000 --- a/vendor/deno.land/x/deno_graph@0.26.0/lib/loader.ts +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. - -import type { LoadResponse } from "./types.d.ts"; - -const hasPermissions = "permissions" in Deno; -let readRequested = false; -const netRequested = new Set(); - -async function requestRead(path: URL): Promise { - if (readRequested || !hasPermissions) { - return; - } - readRequested = true; - await Deno.permissions.request({ name: "read", path }); -} - -async function requestNet(host: string): Promise { - if (!hasPermissions || netRequested.has(host)) { - return; - } - netRequested.add(host); - await Deno.permissions.request({ name: "net", host }); -} - -/** A Deno specific loader function that can be passed to the - * `createModuleGraph` which will use `Deno.readTextFile` for local files, or - * use `fetch()` for remote modules. - * - * @param specifier The string module specifier from the module graph. - */ -export async function load( - specifier: string, -): Promise { - const url = new URL(specifier); - try { - switch (url.protocol) { - case "file:": { - await requestRead(url); - const content = await Deno.readTextFile(url); - return { - kind: "module", - specifier, - content, - }; - } - case "http:": - case "https:": { - await requestNet(url.host); - const response = await fetch(String(url), { redirect: "follow" }); - if (response.status !== 200) { - // ensure the body is read as to not leak resources - await response.arrayBuffer(); - return undefined; - } - const content = await response.text(); - const headers: Record = {}; - for (const [key, value] of response.headers) { - headers[key.toLowerCase()] = value; - } - return { - kind: "module", - specifier: response.url, - headers, - content, - }; - } - default: - return undefined; - } - } catch { - return undefined; - } -} diff --git a/vendor/deno.land/x/deno_graph@0.26.0/lib/media_type.ts b/vendor/deno.land/x/deno_graph@0.26.0/lib/media_type.ts deleted file mode 100644 index d85da9b..0000000 --- a/vendor/deno.land/x/deno_graph@0.26.0/lib/media_type.ts +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. - -export enum MediaType { - JavaScript = "JavaScript", - Mjs = "Mjs", - Cjs = "Cjs", - Jsx = "Jsx", - TypeScript = "TypeScript", - Mts = "Mts", - Cts = "Cts", - Dts = "Dts", - Dmts = "Dmts", - Dcts = "Dcts", - Tsx = "Tsx", - Json = "Json", - Wasm = "Wasm", - TsBuildInfo = "TsBuildInfo", - SourceMap = "SourceMap", - Unknown = "Unknown", -} diff --git a/vendor/deno.land/x/deno_graph@0.26.0/lib/snippets/deno_graph-de651bc9c240ed8d/src/deno_apis.js b/vendor/deno.land/x/deno_graph@0.26.0/lib/snippets/deno_graph-de651bc9c240ed8d/src/deno_apis.js deleted file mode 100644 index 3ede47e..0000000 --- a/vendor/deno.land/x/deno_graph@0.26.0/lib/snippets/deno_graph-de651bc9c240ed8d/src/deno_apis.js +++ /dev/null @@ -1,6 +0,0 @@ -// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. -// deno-lint-ignore-file - -export function get_no_color() { - return "Deno" in globalThis ? Boolean(Deno.noColor) : true; -} diff --git a/vendor/deno.land/x/deno_graph@0.26.0/lib/types.d.ts b/vendor/deno.land/x/deno_graph@0.26.0/lib/types.d.ts deleted file mode 100644 index e0a3cdb..0000000 --- a/vendor/deno.land/x/deno_graph@0.26.0/lib/types.d.ts +++ /dev/null @@ -1,267 +0,0 @@ -// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. - -import type { MediaType } from "./media_type.ts"; - -/** Additional meta data that is used to enrich the output of the module - * graph. */ -export interface CacheInfo { - /** The string path to where the local version of the content is located. For - * non `file:` URLs, this is the location of the cached content, otherwise it - * is the absolute path to the local file. */ - local?: string; - /** The string path to where a transpiled version of the source content is - * located, if any. */ - emit?: string; - /** The string path to where an external source map of the transpiled source - * content is located, if any. */ - map?: string; -} - -export interface TypesDependency { - /** The string URL to the type information for the module. */ - types: string; - /** An optional range which indicates the source of the dependency. */ - source?: Range; -} - -export interface ResolveResult { - /** The string URL of the fully qualified specifier for a module. */ - specifier: string; - /** The module kind of the resolved module. */ - kind: ModuleKind; -} - -export interface LoadResponseModule { - /** A module with code has been loaded. */ - kind: "module"; - /** The string URL of the resource. If there were redirects, the final - * specifier should be set here, otherwise the requested specifier. */ - specifier: string; - /** For remote resources, a record of headers should be set, where the key's - * have been normalized to be lower case values. */ - headers?: Record; - /** The string value of the loaded resources. */ - content: string; -} - -export interface LoadResponseExternalBuiltIn { - /** The loaded module is either _external_ or _built-in_ to the runtime. */ - kind: "external" | "builtIn"; - /** The strung URL of the resource. If there were redirects, the final - * specifier should be set here, otherwise the requested specifier. */ - specifier: string; -} - -export type LoadResponse = LoadResponseModule | LoadResponseExternalBuiltIn; - -export interface PositionJson { - /** The line number of a position within a source file. The number is a zero - * based index. */ - line: number; - /** The character number of a position within a source file. The number is a - * zero based index. */ - character: number; -} - -export interface Range { - /** A string URL representing a source of a dependency. */ - specifier: string; - /** The start location of a range of text in a source file. */ - start?: PositionJson; - /** The end location of a range of text in a source file. */ - end?: PositionJson; -} - -export interface RangeJson { - /** The start location of a range of text in a source file. */ - start: PositionJson; - /** The end location of a range of text in a source file. */ - end: PositionJson; -} - -export interface ResolvedDependency { - /** The fully resolved string URL of the dependency, which should be - * resolvable in the module graph. If there was an error, `error` will be set - * and this will be undefined. */ - specifier?: string; - /** Any error encountered when trying to resolved the specifier. If this is - * defined, `specifier` will be undefined. */ - error?: string; - /** The range within the source code where the specifier was identified. */ - span: RangeJson; -} - -export interface TypesDependencyJson { - /** The string specifier that was used for the dependency. */ - specifier: string; - /** An object pointing to the resolved dependency. */ - dependency: ResolvedDependency; -} - -/** The kind of module. - * - * For asserted modules, the value of the `asserted` property is set to the - * `type` value of the assertion. - * - * Dependency analysis is not performed for asserted, AMD, Script, SystemJS, or - * UMD modules currently. Synthetic modules were injected into the graph with - * their own dependencies provided. */ -export type ModuleKind = - | "amd" - | "asserted" - | "commonJs" - | "esm" - | "script" - | "synthetic" - | "systemJs" - | "umd"; - -export interface DependencyJson { - /** The string specifier that was used for the dependency. */ - specifier: string; - /** An object pointing to the resolved _code_ dependency. */ - code?: ResolvedDependency; - /** An object pointing to the resolved _type_ dependency of a module. This is - * populated when the `@deno-types` directive was used to supply a type - * definition file for a dependency. */ - type?: ResolvedDependency; - /** A flag indicating if the dependency was dynamic. (e.g. - * `await import("mod.ts")`) */ - isDynamic?: true; -} - -export interface ModuleJson extends CacheInfo { - /** The string URL of the module. */ - specifier: string; - /** Any error encountered when attempting to load the module. */ - error?: string; - /** The module kind that was determined when the module was resolved. This is - * used by loaders to indicate how a module needs to be loaded at runtime. */ - kind?: ModuleKind; - /** An array of dependencies that were identified in the module. */ - dependencies?: DependencyJson[]; - /** If the module had a types dependency, the information about that - * dependency. */ - typesDependency?: TypesDependencyJson; - /** The resolved media type of the module, which determines how Deno will - * handle the module. */ - mediaType?: MediaType; - /** The size of the source content of the module in bytes. */ - size?: number; - /** If available, the calculated checksum of the module which can be used for - * validating the integrity of the module. */ - checksum?: string; -} - -/** The plain-object representation of a module graph that is suitable for - * serialization to JSON. */ -export interface ModuleGraphJson { - /** The module specifiers (URL string) of the _roots_ of the module graph of - * which the module graph was built for. */ - roots: string[]; - /** An array of modules that are part of the module graph. */ - modules: ModuleJson[]; - /** A record/map of any redirects encountered when resolving modules. The - * key was the requested module specifier and the value is the redirected - * module specifier. */ - redirects: Record; -} - -export interface Dependency { - /** An object pointing to the resolved _code_ dependency. */ - code?: ResolvedDependency; - /** An object pointing to the resolved _type_ dependency of a module. This is - * populated when the `@deno-types` directive was used to supply a type - * definition file for a dependency. */ - type?: ResolvedDependency; - /** A flag indicating if the dependency was dynamic. (e.g. - * `await import("mod.ts")`) */ - isDynamic?: true; -} - -export class Module { - private constructor(); - - /** Any cache information that was available on the module when the graph - * was built. */ - readonly cacheInfo?: CacheInfo; - /** The calculated checksum of the source of the module if available when the - * graph was built. */ - readonly checksum?: string; - /** A record of the dependencies, where the key is the string specifier of - * the dependency and the value is the dependency object. */ - readonly dependencies?: Record; - /** A module kind that can be used to determine how a module should be loaded - * at runtime. */ - readonly kind: ModuleKind; - /** The media type assigned to the module. This determines how Deno will - * handle the module. */ - readonly mediaType: MediaType; - /** The size of the source content in bytes. */ - readonly size: number; - /** The source content of the module. */ - readonly source: string; - /** The fully qualified string URL of the module. */ - readonly specifier: string; - /** The types dependency for the module, where the first value in the tuple - * was the string specifier used and the second value is the resolved - * dependency. */ - readonly typesDependency?: [string, ResolvedDependency]; - - /** Explicitly free the memory used by the module. */ - free(): void; - - /** Returns a plain-object representation of the module suitable for - * serialization as JSON. */ - toJSON(): ModuleJson; -} - -/** An interface to the web assembly structure of a built module graph. */ -export class ModuleGraph { - private constructor(); - - /** The modules that are part of the module graph. */ - readonly modules: Module[]; - - /** The root specifiers that were used to build the module graph from. */ - readonly roots: string[]; - - /** Explicitly free the memory used by the module graph. The web assembly - * bindings does use weak references, meaning that the memory should be - * automatically garbage collected when the graph falls out of use. */ - free(): void; - - /** Retrieve a module from the module graph, if an error was encountered when - * loading the module, this method will throw with that error. */ - get(specifier: string): Module | undefined; - - /** Determine if the graph sources are valid by calling the passed `check()` - * function. If any of the modules in the graph fail the check, then an - * error is thrown. */ - lock(): void; - - /** Given a string URL, return the resolved string URL accounting for any - * redirections that might have occurred when resolving the module graph. */ - resolve(specifier: string): string; - - /** Given a string specifier of a module's dependency and the referring - * module's string URL, return the string URL of the dependency, otherwise - * return undefined. */ - resolveDependency(specifier: string, referrer: string): string | undefined; - - /** Returns a plain-object representation of the module graph suitable for - * serialization as JSON, similar to the `deno info --json` output. */ - toJSON(): ModuleGraphJson; - - /** Provides a string output representation of the module graph similar to - * `deno info` with or without ANSI color escape sequences. If `noColor` is - * expressly `true`, the string will be returned without color escape - * sequences. If `noColor` is expressly `false` the returned string will - * include ANSI color escape sequences. If not expressly set, `Deno.noColor` - * will be used, or if the `Deno` namespace isn't present, will default to - * `true` and not provide ANSI color escape sequences. - * - * @param noColor An optional flag indicating if ANSI color escape codes - * should be included in the returned string. */ - toString(noColor?: boolean): string; -} diff --git a/vendor/deno.land/x/deno_graph@0.26.0/mod.ts b/vendor/deno.land/x/deno_graph@0.26.0/mod.ts deleted file mode 100644 index 0aee1d6..0000000 --- a/vendor/deno.land/x/deno_graph@0.26.0/mod.ts +++ /dev/null @@ -1,244 +0,0 @@ -// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. - -/** - * A JavaScript/TypeScript interface to the Deno CLI's module graph logic. - * - * ### Example - * - * To build and output a graph as a JSON structure to the console: - * - * ```ts - * import { createGraph } from "https://deno.land/x/deno_graph@{VERSION}/mod.ts"; - * - * const graph = await createGraph("https://deno.land/x/std/testing/asserts.ts"); - * - * console.log(JSON.stringify(graph, undefined, " ")); - * ``` - * - * @module - */ - -import { - createGraph as jsCreateGraph, - parseModule as jsParseModule, -} from "./lib/deno_graph.generated.js"; -import { load as defaultLoad } from "./lib/loader.ts"; -import type { - CacheInfo, - LoadResponse, - Module, - ModuleGraph, - ModuleKind, - ResolveResult, - TypesDependency, -} from "./lib/types.d.ts"; - -export { load } from "./lib/loader.ts"; -export type { - CacheInfo, - Dependency, - LoadResponse, - Module, - ModuleGraph, - ModuleGraphJson, - ModuleKind, - ResolveResult, - TypesDependency, -} from "./lib/types.d.ts"; - -export interface CreateGraphOptions { - /** - * A callback that is called with the URL string of the resource to be loaded - * and a flag indicating if the module was required dynamically. The callback - * should resolve with a `LoadResponse` or `undefined` if the module is not - * found. If there are other errors encountered, a rejected promise should be - * returned. - * - * @param specifier The URL string of the resource to be loaded and resolved - * @param isDynamic A flag that indicates if the module was being loaded - * dynamically - */ - load?( - specifier: string, - isDynamic: boolean, - ): Promise; - /** The type of graph to build. `"all"` includes all dependencies of the - * roots. `"typesOnly"` skips any code only dependencies that do not impact - * the types of the graph, and `"codeOnly"` only includes dependencies that - * are runnable code. */ - kind?: "all" | "typesOnly" | "codeOnly"; - /** When identifying a `@jsxImportSource` pragma, what module name will be - * appended to the import source. This defaults to `jsx-runtime`. */ - jsxImportSourceModule?: string; - /** An optional callback that will be called with a URL string of the resource - * to provide additional meta data about the resource to enrich the module - * graph. */ - cacheInfo?(specifier: string): CacheInfo; - /** An optional callback that allows the default resolution logic of the - * module graph to be "overridden". This is intended to allow items like an - * import map to be used with the module graph. The callback takes the string - * of the module specifier from the referrer and the string URL of the - * referrer. The callback then returns a fully qualified resolved URL string - * specifier or an object which contains the URL string and the module kind. - * If just the string is returned, the module kind is inferred to be ESM. */ - resolve?(specifier: string, referrer: string): string | ResolveResult; - /** An optional callback that can allow custom logic of how type dependencies - * of a module to be provided. This will be called if a module is being added - * to the graph that is is non-typed source code (e.g. JavaScript/JSX) and - * allow resolution of a type only dependency for the module (e.g. `@types` - * or a `.d.ts` file). */ - resolveTypes?(specifier: string): TypesDependency | undefined; - /** An optional callback that returns `true` if the sub-resource integrity of - * the provided specifier and content is valid, otherwise `false`. This allows - * for items like lock files to be applied to the module graph. */ - check?(specifier: string, content: Uint8Array): boolean; - /** An optional callback that returns the sub-resource integrity checksum for - * a given set of content. */ - getChecksum?(content: Uint8Array): string; - /** An optional string to be used when generating an error when the integrity - * check of the module graph fails. */ - lockFilename?: string; - /** An optional record of "injected" dependencies to the module graph. This - * allows adding things like TypeScript's `"types"` values into the graph. */ - imports?: Record; -} - -/** Create a module graph using the same algorithms that are used in the Deno - * CLI, resolving with the module graph for further processing. - * - * A default `load()` function is provided which will attempt to load local - * modules via `Deno.readFile()` and will use `fetch()` to load remote - * modules. An alternative `load()` function can be provided via the options. - * - * ### Example - * - * ```ts - * import { createGraph } from "https://deno.land/x/deno_graph/mod.ts"; - * - * const graph = await createGraph("https://example.com/a.ts"); - * - * console.log(graph.toString()); - * ``` - * - * @param rootSpecifier A URL string of the root module specifier to build the - * graph from. - * @param options A set of options for building the graph - */ -export function createGraph( - rootSpecifier: string, - options?: CreateGraphOptions, -): Promise; -/** Create a module graph using the same algorithms that are used in the Deno - * CLI, resolving with the module graph for further processing. - * - * A default `load()` function is provided which will attempt to load local - * modules via `Deno.readFile()` and will use `fetch()` to load remote - * modules. An alternative `load()` function can be provided via the options. - * - * ### Example - * - * ```ts - * import { createGraph } from "https://deno.land/x/deno_graph/mod.ts"; - * - * const graph = await createGraph([ - * ["https://example.com/a.ts", "esm"], - * ["https://example.com/a.ts", "esm"], - * ]); - * - * console.log(graph.toJSON()); - * ``` - * - * @param rootSpecifiers An array of URL strings or tuples of URL strings and - * module kinds of the root module specifiers to build - * the graph from. - * @param options A set of options for building the graph - */ -export function createGraph( - rootSpecifiers: string[] | [string, ModuleKind][], - options?: CreateGraphOptions, -): Promise; -export function createGraph( - rootSpecifiers: string | string[] | [string, ModuleKind][], - options: CreateGraphOptions = {}, -): Promise { - rootSpecifiers = Array.isArray(rootSpecifiers) - ? rootSpecifiers - : [rootSpecifiers]; - const { - load = defaultLoad, - jsxImportSourceModule, - cacheInfo, - resolve, - resolveTypes, - check, - getChecksum, - lockFilename, - kind, - imports, - } = options; - return jsCreateGraph( - rootSpecifiers, - load, - jsxImportSourceModule, - cacheInfo, - resolve, - resolveTypes, - check, - getChecksum, - lockFilename, - kind, - imports, - // deno-lint-ignore no-explicit-any - ) as any; -} - -export interface ParseModuleOptions { - /** For remote resources, a record of headers should be set, where the key's - * have been normalized to be lower case values. */ - headers?: Record; - /** When identifying a `@jsxImportSource` pragma, what module name will be - * appended to the import source. This defaults to `jsx-runtime`. */ - jsxImportSourceModule?: string; - /** The kind of module to set on the resulting parsed module. */ - kind?: ModuleKind; - /** An optional callback that allows the default resolution logic of the - * module graph to be "overridden". This is intended to allow items like an - * import map to be used with the module graph. The callback takes the string - * of the module specifier from the referrer and the string URL of the - * referrer. The callback then returns a fully qualified resolved URL string - * specifier or an object which contains the URL string and the module kind. - * If just the string is returned, the module kind is inferred to be ESM. */ - resolve?(specifier: string, referrer: string): string | ResolveResult; - /** An optional callback that can allow custom logic of how type dependencies - * of a module to be provided. This will be called if a module is being added - * to the graph that is is non-typed source code (e.g. JavaScript/JSX) and - * allow resolution of a type only dependency for the module (e.g. `@types` - * or a `.d.ts` file). */ - resolveTypes?(specifier: string): string | undefined; -} - -/** Parse a module based on the supplied information and return its analyzed - * representation. If an error is encountered when parsing, the function will - * throw. - * - * @param specifier The URL text specifier to use when parsing the module. - * @param content The content of the module to be parsed. - * @param options Options to use when parsing the module. - */ -export function parseModule( - specifier: string, - content: string, - options: ParseModuleOptions = {}, -): Module { - const { headers, jsxImportSourceModule, kind, resolve, resolveTypes } = - options; - return jsParseModule( - specifier, - headers, - jsxImportSourceModule, - content, - kind, - resolve, - resolveTypes, - ) as Module; -} diff --git a/vendor/deno.land/x/dir@1.5.1/data_local_dir/mod.ts b/vendor/deno.land/x/dir@1.5.1/data_local_dir/mod.ts deleted file mode 100644 index 323d591..0000000 --- a/vendor/deno.land/x/dir@1.5.1/data_local_dir/mod.ts +++ /dev/null @@ -1,34 +0,0 @@ -/** Returns the path to the user's local data directory. - * - * The returned value depends on the operating system and is either a string, - * containing a value from the following table, or `null`. - * - * | Platform | Value | Example | - * | -------- | ---------------------------------------- | -------------------------------------------- | - * | Linux | `$XDG_DATA_HOME` or `$HOME`/.local/share | /home/justjavac/.local/share | - * | macOS | `$HOME`/Library/Application Support | /Users/justjavac/Library/Application Support | - * | Windows | `$LOCALAPPDATA` | C:\Users\justjavac\AppData\Local | - */ -export default function dataDir(): string | null { - switch (Deno.build.os) { - case "linux": { - const xdg = Deno.env.get("XDG_DATA_HOME"); - if (xdg) return xdg; - - const home = Deno.env.get("HOME"); - if (home) return `${home}/.local/share`; - break; - } - - case "darwin": { - const home = Deno.env.get("HOME"); - if (home) return `${home}/Library/Application Support`; - break; - } - - case "windows": - return Deno.env.get("LOCALAPPDATA") ?? null; - } - - return null; -} diff --git a/vendor/deno.land/x/dnt@0.38.1/lib/compiler.ts b/vendor/deno.land/x/dnt@0.38.1/lib/compiler.ts deleted file mode 100644 index 68438e3..0000000 --- a/vendor/deno.land/x/dnt@0.38.1/lib/compiler.ts +++ /dev/null @@ -1,209 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. - -import { path, ts } from "./mod.deps.ts"; -import { ScriptTarget } from "./types.ts"; - -export function outputDiagnostics(diagnostics: readonly ts.Diagnostic[]) { - const host: ts.FormatDiagnosticsHost = { - getCanonicalFileName: (fileName) => path.resolve(fileName), - getCurrentDirectory: () => Deno.cwd(), - getNewLine: () => "\n", - }; - const output = Deno.noColor - ? ts.formatDiagnostics(diagnostics, host) - : ts.formatDiagnosticsWithColorAndContext(diagnostics, host); - console.error(output); -} - -export function getCompilerScriptTarget(target: ScriptTarget) { - switch (target) { - case "ES3": - return ts.ScriptTarget.ES3; - case "ES5": - return ts.ScriptTarget.ES5; - case "ES2015": - return ts.ScriptTarget.ES2015; - case "ES2016": - return ts.ScriptTarget.ES2016; - case "ES2017": - return ts.ScriptTarget.ES2017; - case "ES2018": - return ts.ScriptTarget.ES2018; - case "ES2019": - return ts.ScriptTarget.ES2019; - case "ES2020": - return ts.ScriptTarget.ES2020; - case "ES2021": - return ts.ScriptTarget.ES2021; - case "ES2022": - return ts.ScriptTarget.ES2022; - case "Latest": - return ts.ScriptTarget.Latest; - default: - throw new Error(`Unknown target compiler option: ${target}`); - } -} - -// Created from https://github.com/microsoft/TypeScript/blob/0ad5f82d6243db80d42bc0abb7a191dd380e980e/src/compiler/commandLineParser.ts -// then aligned with tsconfig.json's casing -export type LibName = - | "ES5" - | "ES6" - | "ES2015" - | "ES7" - | "ES2016" - | "ES2017" - | "ES2018" - | "ES2019" - | "ES2020" - | "ES2021" - | "ES2022" - | "ESNext" - | "DOM" - | "DOM.Iterable" - | "WebWorker" - | "WebWorker.ImportScripts" - | "WebWorker.Iterable" - | "ScriptHost" - | "ES2015.Core" - | "ES2015.Collection" - | "ES2015.Generator" - | "ES2015.Iterable" - | "ES2015.Promise" - | "ES2015.Proxy" - | "ES2015.Reflect" - | "ES2015.Symbol" - | "ES2015.Symbol.WellKnown" - | "ES2016.Array.Include" - | "ES2017.Object" - | "ES2017.SharedMemory" - | "ES2017.String" - | "ES2017.Intl" - | "ES2017.TypedArrays" - | "ES2018.AsyncGenerator" - | "ES2018.AsyncIterable" - | "ES2018.Intl" - | "ES2018.Promise" - | "ES2018.RegExp" - | "ES2019.Array" - | "ES2019.Object" - | "ES2019.String" - | "ES2019.Symbol" - | "ES2020.BigInt" - | "ES2020.Date" - | "ES2020.Promise" - | "ES2020.SharedMemory" - | "ES2020.String" - | "ES2020.Symbol.WellKnown" - | "ES2020.Intl" - | "ES2020.Number" - | "ES2021.Promise" - | "ES2021.String" - | "ES2021.WeakRef" - | "ES2021.Intl" - | "ES2022.Array" - | "ES2022.Error" - | "ES2022.Intl" - | "ES2022.Object" - | "ES2022.String" - | "ESNext.Array" - | "ESNext.Symbol" - | "ESNext.AsyncIterable" - | "ESNext.Intl" - | "ESNext.BigInt" - | "ESNext.String" - | "ESNext.Promise" - | "ESNext.WeakRef"; - -export function getCompilerLibOption(target: ScriptTarget): LibName[] { - switch (target) { - case "ES3": - return []; - case "ES5": - return ["ES5"]; - case "ES2015": - return ["ES2015"]; - case "ES2016": - return ["ES2016"]; - case "ES2017": - return ["ES2017"]; - case "ES2018": - return ["ES2018"]; - case "ES2019": - return ["ES2019"]; - case "ES2020": - return ["ES2020"]; - case "ES2021": - return ["ES2021"]; - case "ES2022": - return ["ES2022"]; - case "Latest": - return ["ESNext"]; - default: { - const _assertNever: never = target; - throw new Error(`Unknown target compiler option: ${target}`); - } - } -} - -export function libNamesToCompilerOption(names: LibName[]) { - const libFileNames: string[] = []; - const libMap = (ts as any).libMap as Map; - for (const name of names) { - const fileName = libMap.get(name.toLowerCase()); - if (fileName == null) { - throw new Error(`Could not find filename for lib: ${name}`); - } else { - libFileNames.push(fileName); - } - } - return libFileNames; -} - -export type SourceMapOptions = "inline" | boolean; - -export function getCompilerSourceMapOptions( - sourceMaps: SourceMapOptions | undefined, -): { inlineSourceMap?: boolean; sourceMap?: boolean } { - switch (sourceMaps) { - case "inline": - return { inlineSourceMap: true }; - case true: - return { sourceMap: true }; - default: - return {}; - } -} - -export function getTopLevelAwaitLocation(sourceFile: ts.SourceFile) { - const topLevelAwait = getTopLevelAwait(sourceFile); - if (topLevelAwait !== undefined) { - return sourceFile.getLineAndCharacterOfPosition( - topLevelAwait.getStart(sourceFile), - ); - } - return undefined; -} - -function getTopLevelAwait(node: ts.Node): ts.Node | undefined { - if (ts.isAwaitExpression(node)) { - return node; - } - if (ts.isForOfStatement(node) && node.awaitModifier !== undefined) { - return node; - } - return ts.forEachChild(node, (child) => { - if ( - !ts.isFunctionDeclaration(child) && !ts.isFunctionExpression(child) && - !ts.isArrowFunction(child) && !ts.isMethodDeclaration(child) - ) { - return getTopLevelAwait(child); - } - }); -} - -export function transformCodeToTarget(code: string, target: ts.ScriptTarget) { - return ts.transpile(code, { - target, - }); -} diff --git a/vendor/deno.land/x/dnt@0.38.1/lib/compiler_transforms.ts b/vendor/deno.land/x/dnt@0.38.1/lib/compiler_transforms.ts deleted file mode 100644 index f87aec7..0000000 --- a/vendor/deno.land/x/dnt@0.38.1/lib/compiler_transforms.ts +++ /dev/null @@ -1,160 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. - -import { ts } from "./mod.deps.ts"; - -// transform `import.meta.url` to a replacement that works in script modules -export const transformImportMeta: ts.TransformerFactory = ( - context, -) => { - const factory = context.factory; - const compilerModule = context.getCompilerOptions().module; - const isScriptModule = compilerModule === ts.ModuleKind.CommonJS || - compilerModule === ts.ModuleKind.UMD; - - return (sourceFile) => ts.visitEachChild(sourceFile, visitNode, context); - - function visitNode(node: ts.Node): ts.Node { - // find `import.meta.resolve` - if ( - ts.isCallExpression(node) && - node.arguments.length === 1 && - isImportMetaProp(node.expression) && - node.expression.name.escapedText === "resolve" - ) { - return ts.visitEachChild( - getReplacementImportMetaResolve(node.arguments), - visitNode, - context, - ); - } else if (isImportMetaProp(node)) { - // find `import.meta.url` or `import.meta.main` - if (node.name.escapedText === "url" && isScriptModule) { - return getReplacementImportMetaUrl(); - } else if (node.name.escapedText === "main") { - if (isScriptModule) { - return getReplacementImportMetaMainScript(); - } else { - return getReplacementImportMetaMainEsm(); - } - } - } - - return ts.visitEachChild(node, visitNode, context); - } - - function isImportMetaProp( - node: ts.Node, - ): node is ts.PropertyAccessExpression & { name: ts.Identifier } { - return ts.isPropertyAccessExpression(node) && - ts.isMetaProperty(node.expression) && - node.expression.keywordToken === ts.SyntaxKind.ImportKeyword && - ts.isIdentifier(node.name); - } - - function getReplacementImportMetaUrl() { - // Copy and pasted from ts-ast-viewer.com - // require("url").pathToFileURL(__filename).href - return factory.createPropertyAccessExpression( - factory.createCallExpression( - factory.createPropertyAccessExpression( - factory.createCallExpression( - factory.createIdentifier("require"), - undefined, - [factory.createStringLiteral("url")], - ), - factory.createIdentifier("pathToFileURL"), - ), - undefined, - [factory.createIdentifier("__filename")], - ), - factory.createIdentifier("href"), - ); - } - - function getReplacementImportMetaMainScript() { - // Copy and pasted from ts-ast-viewer.com - // (require.main === module) - return factory.createParenthesizedExpression(factory.createBinaryExpression( - factory.createPropertyAccessExpression( - factory.createIdentifier("require"), - factory.createIdentifier("main"), - ), - factory.createToken(ts.SyntaxKind.EqualsEqualsEqualsToken), - factory.createIdentifier("module"), - )); - } - - function getReplacementImportMetaMainEsm() { - // Copy and pasted from ts-ast-viewer.com - // (import.meta.url === ('file:///'+process.argv[1].replace(/\\/g,'/')).replace(/\/{3,}/,'///')); - // 1. `process.argv[1]` is fullpath; - // 2. Win's path is `E:\path\to\main.mjs`, replace to `E:/path/to/main.mjs` - return factory.createParenthesizedExpression( - factory.createBinaryExpression( - factory.createPropertyAccessExpression( - factory.createMetaProperty( - ts.SyntaxKind.ImportKeyword, - factory.createIdentifier("meta"), - ), - factory.createIdentifier("url"), - ), - factory.createToken(ts.SyntaxKind.EqualsEqualsEqualsToken), - factory.createCallExpression( - factory.createPropertyAccessExpression( - factory.createParenthesizedExpression( - factory.createBinaryExpression( - factory.createStringLiteral("file:///"), - factory.createToken(ts.SyntaxKind.PlusToken), - factory.createCallExpression( - factory.createPropertyAccessExpression( - factory.createElementAccessExpression( - factory.createPropertyAccessExpression( - factory.createIdentifier("process"), - factory.createIdentifier("argv"), - ), - factory.createNumericLiteral("1"), - ), - factory.createIdentifier("replace"), - ), - undefined, - [ - factory.createRegularExpressionLiteral("/\\\\/g"), - factory.createStringLiteral("/"), - ], - ), - ), - ), - factory.createIdentifier("replace"), - ), - undefined, - [ - factory.createRegularExpressionLiteral("/\\/{3,}/"), - factory.createStringLiteral("///"), - ], - ), - ), - ); - } - - function getReplacementImportMetaResolve(args: ts.NodeArray) { - // Copy and pasted from ts-ast-viewer.com - // new URL(specifier, import.meta.url).href - return factory.createPropertyAccessExpression( - factory.createNewExpression( - factory.createIdentifier("URL"), - undefined, - [ - ...args, - factory.createPropertyAccessExpression( - factory.createMetaProperty( - ts.SyntaxKind.ImportKeyword, - factory.createIdentifier("meta"), - ), - factory.createIdentifier("url"), - ), - ], - ), - factory.createIdentifier("href"), - ); - } -}; diff --git a/vendor/deno.land/x/dnt@0.38.1/lib/mod.deps.ts b/vendor/deno.land/x/dnt@0.38.1/lib/mod.deps.ts deleted file mode 100644 index 94522cb..0000000 --- a/vendor/deno.land/x/dnt@0.38.1/lib/mod.deps.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. - -export * from "./transform.deps.ts"; -export { - createProjectSync, - ts, -} from "https://deno.land/x/ts_morph@18.0.0/bootstrap/mod.ts"; -export { default as CodeBlockWriter } from "https://deno.land/x/code_block_writer@12.0.0/mod.ts"; -export * as colors from "https://deno.land/std@0.182.0/fmt/colors.ts"; -export * as glob from "https://deno.land/std@0.182.0/fs/expand_glob.ts"; -export { emptyDir } from "https://deno.land/std@0.182.0/fs/empty_dir.ts"; diff --git a/vendor/deno.land/x/dnt@0.38.1/lib/npm_ignore.ts b/vendor/deno.land/x/dnt@0.38.1/lib/npm_ignore.ts deleted file mode 100644 index 7ffffa8..0000000 --- a/vendor/deno.land/x/dnt@0.38.1/lib/npm_ignore.ts +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. - -import { OutputFile } from "../transform.ts"; -import { SourceMapOptions } from "./compiler.ts"; - -export function getNpmIgnoreText(options: { - sourceMap?: SourceMapOptions; - inlineSources?: boolean; - testFiles: OutputFile[]; - declaration: "separate" | "inline" | false; - includeScriptModule: boolean | undefined; - includeEsModule: boolean | undefined; -}) { - // Try to make as little of this conditional in case a user edits settings - // to exclude something, but then the output directory still has that file - const lines = []; - if (!isUsingSourceMaps() || options.inlineSources) { - lines.push("src/"); - } - for (const fileName of getTestFileNames()) { - lines.push(fileName); - } - lines.push("yarn.lock", "pnpm-lock.yaml"); - return Array.from(lines).join("\n") + "\n"; - - function* getTestFileNames() { - for (const file of options.testFiles) { - const filePath = file.filePath.replace(/\.ts$/i, ".js"); - const dtsFilePath = file.filePath.replace(/\.ts$/i, ".d.ts"); - if (options.includeEsModule) { - const esmFilePath = `esm/${filePath}`; - yield esmFilePath; - if (options.sourceMap === true) { - yield `${esmFilePath}.map`; - } - if (options.declaration === "inline") { - yield `esm/${dtsFilePath}`; - } - } - if (options.includeScriptModule) { - const scriptFilePath = `script/${filePath}`; - yield scriptFilePath; - if (options.sourceMap === true) { - yield `${scriptFilePath}.map`; - } - if (options.declaration === "inline") { - yield `script/${dtsFilePath}`; - } - } - if (options.declaration === "separate") { - yield `types/${dtsFilePath}`; - } - } - yield "test_runner.js"; - } - - function isUsingSourceMaps() { - return options?.sourceMap === "inline" || - options?.sourceMap === true; - } -} diff --git a/vendor/deno.land/x/dnt@0.38.1/lib/package_json.ts b/vendor/deno.land/x/dnt@0.38.1/lib/package_json.ts deleted file mode 100644 index 62e792b..0000000 --- a/vendor/deno.land/x/dnt@0.38.1/lib/package_json.ts +++ /dev/null @@ -1,185 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. - -import type { EntryPoint, ShimOptions } from "../mod.ts"; -import { TransformOutput } from "../transform.ts"; -import { PackageJson } from "./types.ts"; - -export interface GetPackageJsonOptions { - transformOutput: TransformOutput; - entryPoints: EntryPoint[]; - package: PackageJson; - includeEsModule: boolean | undefined; - includeScriptModule: boolean | undefined; - includeDeclarations: boolean | undefined; - includeTsLib: boolean | undefined; - testEnabled: boolean | undefined; - shims: ShimOptions; -} - -export function getPackageJson({ - transformOutput, - entryPoints, - package: packageJsonObj, - includeEsModule, - includeScriptModule, - includeDeclarations, - includeTsLib, - testEnabled, - shims, -}: GetPackageJsonOptions): Record { - const finalEntryPoints = transformOutput - .main.entryPoints.map((e, i) => ({ - name: entryPoints[i].name, - kind: entryPoints[i].kind ?? "export", - path: e.replace(/\.tsx?$/i, ".js"), - types: e.replace(/\.tsx?$/i, ".d.ts"), - })); - const exports = finalEntryPoints.filter((e) => e.kind === "export"); - const binaries = finalEntryPoints.filter((e) => e.kind === "bin"); - const dependencies = { - // typescript helpers library (https://www.npmjs.com/package/tslib) - ...(includeTsLib - ? { - tslib: "^2.4.1", - } - : {}), - // add dependencies from transform - ...Object.fromEntries( - transformOutput.main.dependencies - .filter((d) => !d.peerDependency) - .map((d) => [d.name, d.version]), - ), - // override with specified dependencies - ...(packageJsonObj.dependencies ?? {}), - }; - const peerDependencies = { - // add dependencies from transform - ...Object.fromEntries( - transformOutput.main.dependencies - .filter((d) => d.peerDependency) - .map((d) => [d.name, d.version]), - ), - // override with specified dependencies - ...(packageJsonObj.peerDependencies ?? {}), - }; - const testDevDependencies = testEnabled - ? ({ - ...(!Object.keys(dependencies).includes("picocolors") - ? { - "picocolors": "^1.0.0", - } - : {}), - // add dependencies from transform - ...Object.fromEntries( - // ignore peer dependencies on this - transformOutput.test.dependencies.map((d) => [d.name, d.version]) ?? - [], - ), - }) - : {}; - const devDependencies = { - ...(shouldIncludeTypesNode() - ? { - "@types/node": "^18.11.9", - } - : {}), - ...testDevDependencies, - // override with specified dependencies - ...(packageJsonObj.devDependencies ?? {}), - }; - const scripts = testEnabled - ? ({ - test: "node test_runner.js", - // override with specified scripts - ...(packageJsonObj.scripts ?? {}), - }) - : packageJsonObj.scripts; - const mainExport = exports.length > 0 - ? { - module: includeEsModule ? `./esm/${exports[0].path}` : undefined, - main: includeScriptModule ? `./script/${exports[0].path}` : undefined, - types: includeDeclarations ? `./types/${exports[0].types}` : undefined, - } - : {}; - const binaryExport = binaries.length > 0 - ? { - bin: Object.fromEntries(binaries.map((b) => [b.name, `./esm/${b.path}`])), - } - : {}; - - return { - ...mainExport, - ...binaryExport, - ...packageJsonObj, - ...deleteEmptyKeys({ - exports: { - ...(includeEsModule || exports.length > 1 - ? { - ...(Object.fromEntries(exports.map((e) => { - return [e.name, { - import: includeEsModule - ? getPathOrTypesObject(`./esm/${e.path}`) - : undefined, - require: includeScriptModule - ? getPathOrTypesObject(`./script/${e.path}`) - : undefined, - ...(packageJsonObj.exports?.[e.name] ?? {}), - }]; - - function getPathOrTypesObject(path: string) { - if (includeDeclarations) { - return { - // "types" must always be first and "default" last - types: - (e.name === "." ? packageJsonObj.types : undefined) ?? - `./types/${e.types}`, - default: path, - }; - } else { - return path; - } - } - }))), - } - : {}), - // allow someone to override - ...(packageJsonObj.exports ?? {}), - }, - scripts, - dependencies, - peerDependencies, - devDependencies, - }), - }; - - function shouldIncludeTypesNode() { - if (Object.keys(dependencies).includes("@types/node")) { - return false; - } - - if (typeof shims.deno === "object") { - if (shims.deno.test) { - return true; - } else { - return false; - } - } else if (shims.deno || shims.undici) { - return true; - } else { - return false; - } - } - - function deleteEmptyKeys(obj: Record) { - for (const key of Object.keys(obj)) { - const value = obj[key]; - if ( - typeof value === "object" && value != null && - Object.keys(value).length === 0 - ) { - delete obj[key]; - } - } - return obj; - } -} diff --git a/vendor/deno.land/x/dnt@0.38.1/lib/pkg/dnt_wasm.generated.js b/vendor/deno.land/x/dnt@0.38.1/lib/pkg/dnt_wasm.generated.js deleted file mode 100644 index 14a48dc..0000000 --- a/vendor/deno.land/x/dnt@0.38.1/lib/pkg/dnt_wasm.generated.js +++ /dev/null @@ -1,612 +0,0 @@ -// @generated file from wasmbuild -- do not edit -// deno-lint-ignore-file -// deno-fmt-ignore-file -// source-hash: abe9e39e07ec39d195f316eff9b6bf7127f8ddc3 -let wasm; - -import { fetch_specifier } from "./snippets/dnt-wasm-a15ef721fa5290c5/helpers.js"; - -const heap = new Array(128).fill(undefined); - -heap.push(undefined, null, true, false); - -function getObject(idx) { - return heap[idx]; -} - -let heap_next = heap.length; - -function dropObject(idx) { - if (idx < 132) return; - heap[idx] = heap_next; - heap_next = idx; -} - -function takeObject(idx) { - const ret = getObject(idx); - dropObject(idx); - return ret; -} - -let WASM_VECTOR_LEN = 0; - -let cachedUint8Memory0 = null; - -function getUint8Memory0() { - if (cachedUint8Memory0 === null || cachedUint8Memory0.byteLength === 0) { - cachedUint8Memory0 = new Uint8Array(wasm.memory.buffer); - } - return cachedUint8Memory0; -} - -const cachedTextEncoder = typeof TextEncoder !== "undefined" - ? new TextEncoder("utf-8") - : { - encode: () => { - throw Error("TextEncoder not available"); - }, - }; - -const encodeString = function (arg, view) { - return cachedTextEncoder.encodeInto(arg, view); -}; - -function passStringToWasm0(arg, malloc, realloc) { - if (realloc === undefined) { - const buf = cachedTextEncoder.encode(arg); - const ptr = malloc(buf.length, 1) >>> 0; - getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf); - WASM_VECTOR_LEN = buf.length; - return ptr; - } - - let len = arg.length; - let ptr = malloc(len, 1) >>> 0; - - const mem = getUint8Memory0(); - - let offset = 0; - - for (; offset < len; offset++) { - const code = arg.charCodeAt(offset); - if (code > 0x7F) break; - mem[ptr + offset] = code; - } - - if (offset !== len) { - if (offset !== 0) { - arg = arg.slice(offset); - } - ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0; - const view = getUint8Memory0().subarray(ptr + offset, ptr + len); - const ret = encodeString(arg, view); - - offset += ret.written; - } - - WASM_VECTOR_LEN = offset; - return ptr; -} - -function isLikeNone(x) { - return x === undefined || x === null; -} - -let cachedInt32Memory0 = null; - -function getInt32Memory0() { - if (cachedInt32Memory0 === null || cachedInt32Memory0.byteLength === 0) { - cachedInt32Memory0 = new Int32Array(wasm.memory.buffer); - } - return cachedInt32Memory0; -} - -const cachedTextDecoder = typeof TextDecoder !== "undefined" - ? new TextDecoder("utf-8", { ignoreBOM: true, fatal: true }) - : { - decode: () => { - throw Error("TextDecoder not available"); - }, - }; - -if (typeof TextDecoder !== "undefined") cachedTextDecoder.decode(); - -function getStringFromWasm0(ptr, len) { - ptr = ptr >>> 0; - return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len)); -} - -function addHeapObject(obj) { - if (heap_next === heap.length) heap.push(heap.length + 1); - const idx = heap_next; - heap_next = heap[idx]; - - heap[idx] = obj; - return idx; -} - -let cachedFloat64Memory0 = null; - -function getFloat64Memory0() { - if (cachedFloat64Memory0 === null || cachedFloat64Memory0.byteLength === 0) { - cachedFloat64Memory0 = new Float64Array(wasm.memory.buffer); - } - return cachedFloat64Memory0; -} - -function debugString(val) { - // primitive types - const type = typeof val; - if (type == "number" || type == "boolean" || val == null) { - return `${val}`; - } - if (type == "string") { - return `"${val}"`; - } - if (type == "symbol") { - const description = val.description; - if (description == null) { - return "Symbol"; - } else { - return `Symbol(${description})`; - } - } - if (type == "function") { - const name = val.name; - if (typeof name == "string" && name.length > 0) { - return `Function(${name})`; - } else { - return "Function"; - } - } - // objects - if (Array.isArray(val)) { - const length = val.length; - let debug = "["; - if (length > 0) { - debug += debugString(val[0]); - } - for (let i = 1; i < length; i++) { - debug += ", " + debugString(val[i]); - } - debug += "]"; - return debug; - } - // Test for built-in - const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val)); - let className; - if (builtInMatches.length > 1) { - className = builtInMatches[1]; - } else { - // Failed to match the standard '[object ClassName]' - return toString.call(val); - } - if (className == "Object") { - // we're a user defined class or Object - // JSON.stringify avoids problems with cycles, and is generally much - // easier than looping through ownProperties of `val`. - try { - return "Object(" + JSON.stringify(val) + ")"; - } catch (_) { - return "Object"; - } - } - // errors - if (val instanceof Error) { - return `${val.name}: ${val.message}\n${val.stack}`; - } - // TODO we could test for more things here, like `Set`s and `Map`s. - return className; -} - -const CLOSURE_DTORS = new FinalizationRegistry((state) => { - wasm.__wbindgen_export_2.get(state.dtor)(state.a, state.b); -}); - -function makeMutClosure(arg0, arg1, dtor, f) { - const state = { a: arg0, b: arg1, cnt: 1, dtor }; - const real = (...args) => { - // First up with a closure we increment the internal reference - // count. This ensures that the Rust closure environment won't - // be deallocated while we're invoking it. - state.cnt++; - const a = state.a; - state.a = 0; - try { - return f(a, state.b, ...args); - } finally { - if (--state.cnt === 0) { - wasm.__wbindgen_export_2.get(state.dtor)(a, state.b); - CLOSURE_DTORS.unregister(state); - } else { - state.a = a; - } - } - }; - real.original = state; - CLOSURE_DTORS.register(real, state, state); - return real; -} -function __wbg_adapter_38(arg0, arg1, arg2) { - wasm - ._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h922ebca14ef72c27( - arg0, - arg1, - addHeapObject(arg2), - ); -} - -/** - * @param {any} options - * @returns {Promise} - */ -export function transform(options) { - const ret = wasm.transform(addHeapObject(options)); - return takeObject(ret); -} - -function handleError(f, args) { - try { - return f.apply(this, args); - } catch (e) { - wasm.__wbindgen_exn_store(addHeapObject(e)); - } -} -function __wbg_adapter_74(arg0, arg1, arg2, arg3) { - wasm.wasm_bindgen__convert__closures__invoke2_mut__h887f43db23be9095( - arg0, - arg1, - addHeapObject(arg2), - addHeapObject(arg3), - ); -} - -const imports = { - __wbindgen_placeholder__: { - __wbindgen_object_drop_ref: function (arg0) { - takeObject(arg0); - }, - __wbindgen_cb_drop: function (arg0) { - const obj = takeObject(arg0).original; - if (obj.cnt-- == 1) { - obj.a = 0; - return true; - } - const ret = false; - return ret; - }, - __wbindgen_is_object: function (arg0) { - const val = getObject(arg0); - const ret = typeof val === "object" && val !== null; - return ret; - }, - __wbindgen_is_undefined: function (arg0) { - const ret = getObject(arg0) === undefined; - return ret; - }, - __wbindgen_in: function (arg0, arg1) { - const ret = getObject(arg0) in getObject(arg1); - return ret; - }, - __wbindgen_string_get: function (arg0, arg1) { - const obj = getObject(arg1); - const ret = typeof obj === "string" ? obj : undefined; - var ptr1 = isLikeNone(ret) - ? 0 - : passStringToWasm0( - ret, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - var len1 = WASM_VECTOR_LEN; - getInt32Memory0()[arg0 / 4 + 1] = len1; - getInt32Memory0()[arg0 / 4 + 0] = ptr1; - }, - __wbindgen_json_serialize: function (arg0, arg1) { - const obj = getObject(arg1); - const ret = JSON.stringify(obj === undefined ? null : obj); - const ptr1 = passStringToWasm0( - ret, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - const len1 = WASM_VECTOR_LEN; - getInt32Memory0()[arg0 / 4 + 1] = len1; - getInt32Memory0()[arg0 / 4 + 0] = ptr1; - }, - __wbindgen_string_new: function (arg0, arg1) { - const ret = getStringFromWasm0(arg0, arg1); - return addHeapObject(ret); - }, - __wbindgen_error_new: function (arg0, arg1) { - const ret = new Error(getStringFromWasm0(arg0, arg1)); - return addHeapObject(ret); - }, - __wbg_fetchspecifier_a6bda29173284144: function (arg0, arg1) { - let deferred0_0; - let deferred0_1; - try { - deferred0_0 = arg0; - deferred0_1 = arg1; - const ret = fetch_specifier(getStringFromWasm0(arg0, arg1)); - return addHeapObject(ret); - } finally { - wasm.__wbindgen_free(deferred0_0, deferred0_1, 1); - } - }, - __wbindgen_is_null: function (arg0) { - const ret = getObject(arg0) === null; - return ret; - }, - __wbindgen_object_clone_ref: function (arg0) { - const ret = getObject(arg0); - return addHeapObject(ret); - }, - __wbindgen_jsval_loose_eq: function (arg0, arg1) { - const ret = getObject(arg0) == getObject(arg1); - return ret; - }, - __wbindgen_boolean_get: function (arg0) { - const v = getObject(arg0); - const ret = typeof v === "boolean" ? (v ? 1 : 0) : 2; - return ret; - }, - __wbindgen_number_get: function (arg0, arg1) { - const obj = getObject(arg1); - const ret = typeof obj === "number" ? obj : undefined; - getFloat64Memory0()[arg0 / 8 + 1] = isLikeNone(ret) ? 0 : ret; - getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret); - }, - __wbg_getwithrefkey_5e6d9547403deab8: function (arg0, arg1) { - const ret = getObject(arg0)[getObject(arg1)]; - return addHeapObject(ret); - }, - __wbg_set_841ac57cff3d672b: function (arg0, arg1, arg2) { - getObject(arg0)[takeObject(arg1)] = takeObject(arg2); - }, - __wbg_get_44be0491f933a435: function (arg0, arg1) { - const ret = getObject(arg0)[arg1 >>> 0]; - return addHeapObject(ret); - }, - __wbg_length_fff51ee6522a1a18: function (arg0) { - const ret = getObject(arg0).length; - return ret; - }, - __wbg_new_898a68150f225f2e: function () { - const ret = new Array(); - return addHeapObject(ret); - }, - __wbindgen_is_function: function (arg0) { - const ret = typeof (getObject(arg0)) === "function"; - return ret; - }, - __wbg_next_526fc47e980da008: function (arg0) { - const ret = getObject(arg0).next; - return addHeapObject(ret); - }, - __wbg_next_ddb3312ca1c4e32a: function () { - return handleError(function (arg0) { - const ret = getObject(arg0).next(); - return addHeapObject(ret); - }, arguments); - }, - __wbg_done_5c1f01fb660d73b5: function (arg0) { - const ret = getObject(arg0).done; - return ret; - }, - __wbg_value_1695675138684bd5: function (arg0) { - const ret = getObject(arg0).value; - return addHeapObject(ret); - }, - __wbg_iterator_97f0c81209c6c35a: function () { - const ret = Symbol.iterator; - return addHeapObject(ret); - }, - __wbg_get_97b561fb56f034b5: function () { - return handleError(function (arg0, arg1) { - const ret = Reflect.get(getObject(arg0), getObject(arg1)); - return addHeapObject(ret); - }, arguments); - }, - __wbg_call_cb65541d95d71282: function () { - return handleError(function (arg0, arg1) { - const ret = getObject(arg0).call(getObject(arg1)); - return addHeapObject(ret); - }, arguments); - }, - __wbg_new_b51585de1b234aff: function () { - const ret = new Object(); - return addHeapObject(ret); - }, - __wbg_set_502d29070ea18557: function (arg0, arg1, arg2) { - getObject(arg0)[arg1 >>> 0] = takeObject(arg2); - }, - __wbg_instanceof_ArrayBuffer_39ac22089b74fddb: function (arg0) { - let result; - try { - result = getObject(arg0) instanceof ArrayBuffer; - } catch { - result = false; - } - const ret = result; - return ret; - }, - __wbg_call_01734de55d61e11d: function () { - return handleError(function (arg0, arg1, arg2) { - const ret = getObject(arg0).call(getObject(arg1), getObject(arg2)); - return addHeapObject(ret); - }, arguments); - }, - __wbg_entries_e51f29c7bba0c054: function (arg0) { - const ret = Object.entries(getObject(arg0)); - return addHeapObject(ret); - }, - __wbg_new_43f1b47c28813cbd: function (arg0, arg1) { - try { - var state0 = { a: arg0, b: arg1 }; - var cb0 = (arg0, arg1) => { - const a = state0.a; - state0.a = 0; - try { - return __wbg_adapter_74(a, state0.b, arg0, arg1); - } finally { - state0.a = a; - } - }; - const ret = new Promise(cb0); - return addHeapObject(ret); - } finally { - state0.a = state0.b = 0; - } - }, - __wbg_resolve_53698b95aaf7fcf8: function (arg0) { - const ret = Promise.resolve(getObject(arg0)); - return addHeapObject(ret); - }, - __wbg_then_f7e06ee3c11698eb: function (arg0, arg1) { - const ret = getObject(arg0).then(getObject(arg1)); - return addHeapObject(ret); - }, - __wbg_then_b2267541e2a73865: function (arg0, arg1, arg2) { - const ret = getObject(arg0).then(getObject(arg1), getObject(arg2)); - return addHeapObject(ret); - }, - __wbg_buffer_085ec1f694018c4f: function (arg0) { - const ret = getObject(arg0).buffer; - return addHeapObject(ret); - }, - __wbg_new_8125e318e6245eed: function (arg0) { - const ret = new Uint8Array(getObject(arg0)); - return addHeapObject(ret); - }, - __wbg_set_5cf90238115182c3: function (arg0, arg1, arg2) { - getObject(arg0).set(getObject(arg1), arg2 >>> 0); - }, - __wbg_length_72e2208bbc0efc61: function (arg0) { - const ret = getObject(arg0).length; - return ret; - }, - __wbg_instanceof_Uint8Array_d8d9cb2b8e8ac1d4: function (arg0) { - let result; - try { - result = getObject(arg0) instanceof Uint8Array; - } catch { - result = false; - } - const ret = result; - return ret; - }, - __wbg_new_abda76e883ba8a5f: function () { - const ret = new Error(); - return addHeapObject(ret); - }, - __wbg_stack_658279fe44541cf6: function (arg0, arg1) { - const ret = getObject(arg1).stack; - const ptr1 = passStringToWasm0( - ret, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - const len1 = WASM_VECTOR_LEN; - getInt32Memory0()[arg0 / 4 + 1] = len1; - getInt32Memory0()[arg0 / 4 + 0] = ptr1; - }, - __wbg_error_f851667af71bcfc6: function (arg0, arg1) { - let deferred0_0; - let deferred0_1; - try { - deferred0_0 = arg0; - deferred0_1 = arg1; - console.error(getStringFromWasm0(arg0, arg1)); - } finally { - wasm.__wbindgen_free(deferred0_0, deferred0_1, 1); - } - }, - __wbindgen_debug_string: function (arg0, arg1) { - const ret = debugString(getObject(arg1)); - const ptr1 = passStringToWasm0( - ret, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - const len1 = WASM_VECTOR_LEN; - getInt32Memory0()[arg0 / 4 + 1] = len1; - getInt32Memory0()[arg0 / 4 + 0] = ptr1; - }, - __wbindgen_throw: function (arg0, arg1) { - throw new Error(getStringFromWasm0(arg0, arg1)); - }, - __wbindgen_memory: function () { - const ret = wasm.memory; - return addHeapObject(ret); - }, - __wbindgen_closure_wrapper707: function (arg0, arg1, arg2) { - const ret = makeMutClosure(arg0, arg1, 228, __wbg_adapter_38); - return addHeapObject(ret); - }, - }, -}; - -import { Loader } from "https://deno.land/x/wasmbuild@0.15.0/loader.ts"; -import { cacheToLocalDir } from "https://deno.land/x/wasmbuild@0.15.0/cache.ts"; - -const loader = new Loader({ - imports, - cache: cacheToLocalDir, -}); -/** - * Decompression callback - * - * @callback DecompressCallback - * @param {Uint8Array} compressed - * @return {Uint8Array} decompressed - */ - -/** - * Options for instantiating a Wasm instance. - * @typedef {Object} InstantiateOptions - * @property {URL=} url - Optional url to the Wasm file to instantiate. - * @property {DecompressCallback=} decompress - Callback to decompress the - * raw Wasm file bytes before instantiating. - */ - -/** Instantiates an instance of the Wasm module returning its functions. - * @remarks It is safe to call this multiple times and once successfully - * loaded it will always return a reference to the same object. - * @param {InstantiateOptions=} opts - */ -export async function instantiate(opts) { - return (await instantiateWithInstance(opts)).exports; -} - -/** Instantiates an instance of the Wasm module along with its exports. - * @remarks It is safe to call this multiple times and once successfully - * loaded it will always return a reference to the same object. - * @param {InstantiateOptions=} opts - * @returns {Promise<{ - * instance: WebAssembly.Instance; - * exports: { transform: typeof transform } - * }>} - */ -export async function instantiateWithInstance(opts) { - const { instance } = await loader.load( - opts?.url ?? new URL("dnt_wasm_bg.wasm", import.meta.url), - opts?.decompress, - ); - wasm = wasm ?? instance.exports; - cachedInt32Memory0 = cachedInt32Memory0 ?? new Int32Array(wasm.memory.buffer); - cachedUint8Memory0 = cachedUint8Memory0 ?? new Uint8Array(wasm.memory.buffer); - return { - instance, - exports: getWasmInstanceExports(), - }; -} - -function getWasmInstanceExports() { - return { transform }; -} - -/** Gets if the Wasm module has been instantiated. */ -export function isInstantiated() { - return loader.instance != null; -} diff --git a/vendor/deno.land/x/dnt@0.38.1/lib/pkg/dnt_wasm_bg.wasm b/vendor/deno.land/x/dnt@0.38.1/lib/pkg/dnt_wasm_bg.wasm deleted file mode 100644 index 08f329b..0000000 Binary files a/vendor/deno.land/x/dnt@0.38.1/lib/pkg/dnt_wasm_bg.wasm and /dev/null differ diff --git a/vendor/deno.land/x/dnt@0.38.1/lib/pkg/snippets/dnt-wasm-a15ef721fa5290c5/helpers.js b/vendor/deno.land/x/dnt@0.38.1/lib/pkg/snippets/dnt-wasm-a15ef721fa5290c5/helpers.js deleted file mode 100644 index 43dc71d..0000000 --- a/vendor/deno.land/x/dnt@0.38.1/lib/pkg/snippets/dnt-wasm-a15ef721fa5290c5/helpers.js +++ /dev/null @@ -1,7 +0,0 @@ -import { createCache } from "https://deno.land/x/deno_cache@0.5.2/mod.ts"; - -const fileFetcher = createCache(); - -export function fetch_specifier(specifier) { - return fileFetcher.load(new URL(specifier)); -} diff --git a/vendor/deno.land/x/dnt@0.38.1/lib/shims.ts b/vendor/deno.land/x/dnt@0.38.1/lib/shims.ts deleted file mode 100644 index 59f0743..0000000 --- a/vendor/deno.land/x/dnt@0.38.1/lib/shims.ts +++ /dev/null @@ -1,267 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. - -import type { GlobalName, Shim } from "../transform.ts"; - -/** Provide `true` to use the shim in both the distributed code and test code, - * `"dev"` to only use it in the test code, or `false` to not use the shim - * at all. - * - * @remarks Defaults to `false`. - */ -export type ShimValue = boolean | "dev"; - -/** Provide `true` to use the shim in both the distributed code and test code, - * `"dev"` to only use it in the test code, or `false` to not use the shim - * at all. - * - * @remarks These all default to `false`. - */ -export interface ShimOptions { - /** Shim the `Deno` namespace. */ - deno?: ShimValue | { - test: ShimValue; - }; - /** Shim the global `setTimeout` and `setInterval` functions with - * Deno and browser compatible versions. - */ - timers?: ShimValue; - /** Shim the global `confirm`, `alert`, and `prompt` functions. */ - prompts?: ShimValue; - /** Shim the `Blob` global with the one from the `"buffer"` module. */ - blob?: ShimValue; - /** Shim the `crypto` global. */ - crypto?: ShimValue; - /** Shim `DOMException` using the "domexception" package (https://www.npmjs.com/package/domexception) */ - domException?: ShimValue; - /** Shim `fetch`, `File`, `FormData`, `Headers`, `Request`, and `Response` by - * using the "undici" package (https://www.npmjs.com/package/undici). - */ - undici?: ShimValue; - /** Use a sham for the `WeakRef` global, which uses `globalThis.WeakRef` when - * it exists. The sham will throw at runtime when calling `deref()` and `WeakRef` - * doesn't globally exist, so this is only intended to help type check code that - * won't actually use it. - */ - weakRef?: ShimValue; - /** Shim `WebSocket` with the `ws` package (https://www.npmjs.com/package/ws). */ - webSocket?: boolean | "dev"; - /** Custom shims to use. */ - custom?: Shim[]; - /** Custom shims to use only for the test code. */ - customDev?: Shim[]; -} - -export interface DenoShimOptions { - /** Only import the `Deno` namespace for `Deno.test`. - * This may be useful for environments - */ - test: boolean | "dev"; -} - -export function shimOptionsToTransformShims(options: ShimOptions) { - const shims: Shim[] = []; - const testShims: Shim[] = []; - - if (typeof options.deno === "object") { - add(options.deno.test, getDenoTestShim); - } else { - add(options.deno, getDenoShim); - } - add(options.blob, getBlobShim); - add(options.crypto, getCryptoShim); - add(options.prompts, getPromptsShim); - add(options.timers, getTimersShim); - add(options.domException, getDomExceptionShim); - add(options.undici, getUndiciShim); - add(options.weakRef, getWeakRefShim); - add(options.webSocket, getWebSocketShim); - - if (options.custom) { - shims.push(...options.custom); - testShims.push(...options.custom); - } - if (options.customDev) { - testShims.push(...options.customDev); - } - - return { - shims, - testShims, - }; - - function add(option: boolean | "dev" | undefined, getShim: () => Shim) { - if (option === true) { - shims.push(getShim()); - testShims.push(getShim()); - } else if (option === "dev") { - testShims.push(getShim()); - } - } -} - -function getDenoShim(): Shim { - return { - package: { - name: "@deno/shim-deno", - version: "~0.16.1", - }, - globalNames: ["Deno"], - }; -} - -function getDenoTestShim(): Shim { - return { - package: { - name: "@deno/shim-deno-test", - version: "~0.4.0", - }, - globalNames: ["Deno"], - }; -} - -function getCryptoShim(): Shim { - return { - package: { - name: "@deno/shim-crypto", - version: "~0.3.1", - }, - globalNames: [ - "crypto", - typeOnly("Crypto"), - typeOnly("SubtleCrypto"), - typeOnly("AlgorithmIdentifier"), - typeOnly("Algorithm"), - typeOnly("RsaOaepParams"), - typeOnly("BufferSource"), - typeOnly("AesCtrParams"), - typeOnly("AesCbcParams"), - typeOnly("AesGcmParams"), - typeOnly("CryptoKey"), - typeOnly("KeyAlgorithm"), - typeOnly("KeyType"), - typeOnly("KeyUsage"), - typeOnly("EcdhKeyDeriveParams"), - typeOnly("HkdfParams"), - typeOnly("HashAlgorithmIdentifier"), - typeOnly("Pbkdf2Params"), - typeOnly("AesDerivedKeyParams"), - typeOnly("HmacImportParams"), - typeOnly("JsonWebKey"), - typeOnly("RsaOtherPrimesInfo"), - typeOnly("KeyFormat"), - typeOnly("RsaHashedKeyGenParams"), - typeOnly("RsaKeyGenParams"), - typeOnly("BigInteger"), - typeOnly("EcKeyGenParams"), - typeOnly("NamedCurve"), - typeOnly("CryptoKeyPair"), - typeOnly("AesKeyGenParams"), - typeOnly("HmacKeyGenParams"), - typeOnly("RsaHashedImportParams"), - typeOnly("EcKeyImportParams"), - typeOnly("AesKeyAlgorithm"), - typeOnly("RsaPssParams"), - typeOnly("EcdsaParams"), - ], - }; -} - -function getBlobShim(): Shim { - return { - module: "buffer", - globalNames: ["Blob"], - }; -} - -function getPromptsShim(): Shim { - return { - package: { - name: "@deno/shim-prompts", - version: "~0.1.0", - }, - globalNames: ["alert", "confirm", "prompt"], - }; -} - -function getTimersShim(): Shim { - return { - package: { - name: "@deno/shim-timers", - version: "~0.1.0", - }, - globalNames: ["setInterval", "setTimeout"], - }; -} - -function getUndiciShim(): Shim { - return { - package: { - name: "undici", - version: "^5.21.0", - }, - globalNames: [ - "fetch", - "File", - "FormData", - "Headers", - "Request", - "Response", - typeOnly("BodyInit"), - typeOnly("HeadersInit"), - typeOnly("RequestInit"), - typeOnly("ResponseInit"), - ], - }; -} - -function getDomExceptionShim(): Shim { - return { - package: { - name: "domexception", - version: "^4.0.0", - }, - typesPackage: { - name: "@types/domexception", - version: "^4.0.0", - }, - globalNames: [{ - name: "DOMException", - exportName: "default", - }], - }; -} - -function getWeakRefShim(): Shim { - return { - package: { - name: "@deno/sham-weakref", - version: "~0.1.0", - }, - globalNames: ["WeakRef", typeOnly("WeakRefConstructor")], - }; -} - -function getWebSocketShim(): Shim { - return { - package: { - name: "ws", - version: "^8.13.0", - }, - typesPackage: { - name: "@types/ws", - version: "^8.5.4", - peerDependency: false, - }, - globalNames: [{ - name: "WebSocket", - exportName: "default", - }], - }; -} - -function typeOnly(name: string): GlobalName { - return { - name, - typeOnly: true, - }; -} diff --git a/vendor/deno.land/x/dnt@0.38.1/lib/test_runner/get_test_runner_code.ts b/vendor/deno.land/x/dnt@0.38.1/lib/test_runner/get_test_runner_code.ts deleted file mode 100644 index 903ea2f..0000000 --- a/vendor/deno.land/x/dnt@0.38.1/lib/test_runner/get_test_runner_code.ts +++ /dev/null @@ -1,116 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. - -import { CodeBlockWriter } from "../mod.deps.ts"; -import { runTestDefinitions } from "./test_runner.ts"; - -export function getTestRunnerCode(options: { - testEntryPoints: string[]; - denoTestShimPackageName: string | undefined; - includeEsModule: boolean | undefined; - includeScriptModule: boolean | undefined; -}) { - const usesDenoTest = options.denoTestShimPackageName != null; - const writer = createWriter(); - writer.writeLine(`const pc = require("picocolors");`) - .writeLine(`const process = require("process");`); - if (usesDenoTest) { - writer.writeLine(`const { pathToFileURL } = require("url");`); - writer.writeLine( - `const { testDefinitions } = require("${options.denoTestShimPackageName}");`, - ); - } - writer.blankLine(); - - writer.writeLine("const filePaths = ["); - writer.indent(() => { - for (const entryPoint of options.testEntryPoints) { - writer.quote(entryPoint.replace(/\.ts$/, ".js")).write(",").newLine(); - } - }); - writer.writeLine("];").newLine(); - - writer.write("async function main()").block(() => { - if (usesDenoTest) { - writer.write("const testContext = ").inlineBlock(() => { - writer.writeLine("process,"); - writer.writeLine("pc,"); - }).write(";").newLine(); - } - writer.write("for (const [i, filePath] of filePaths.entries())") - .block(() => { - writer.write("if (i > 0)").block(() => { - writer.writeLine(`console.log("");`); - }).blankLine(); - - if (options.includeScriptModule) { - writer.writeLine(`const scriptPath = "./script/" + filePath;`); - writer.writeLine( - `console.log("Running tests in " + pc.underline(scriptPath) + "...\\n");`, - ); - writer.writeLine(`process.chdir(__dirname + "/script");`); - if (usesDenoTest) { - writer.write(`const scriptTestContext = `).inlineBlock(() => { - writer.writeLine("origin: pathToFileURL(filePath).toString(),"); - writer.writeLine("...testContext,"); - }).write(";").newLine(); - } - writer.write("try ").inlineBlock(() => { - writer.writeLine(`require(scriptPath);`); - }).write(" catch(err)").block(() => { - writer.writeLine("console.error(err);"); - writer.writeLine("process.exit(1);"); - }); - if (usesDenoTest) { - writer.writeLine( - "await runTestDefinitions(testDefinitions.splice(0, testDefinitions.length), scriptTestContext);", - ); - } - } - - if (options.includeEsModule) { - if (options.includeScriptModule) { - writer.blankLine(); - } - writer.writeLine(`const esmPath = "./esm/" + filePath;`); - writer.writeLine( - `console.log("\\nRunning tests in " + pc.underline(esmPath) + "...\\n");`, - ); - writer.writeLine(`process.chdir(__dirname + "/esm");`); - if (usesDenoTest) { - writer.write(`const esmTestContext = `).inlineBlock(() => { - writer.writeLine("origin: pathToFileURL(filePath).toString(),"); - writer.writeLine("...testContext,"); - }).write(";").newLine(); - } - writer.writeLine(`await import(esmPath);`); - if (usesDenoTest) { - writer.writeLine( - "await runTestDefinitions(testDefinitions.splice(0, testDefinitions.length), esmTestContext);", - ); - } - } - }); - }); - writer.blankLine(); - - if (options.denoTestShimPackageName != null) { - writer.writeLine(`${getRunTestDefinitionsCode()}`); - writer.blankLine(); - } - - writer.writeLine("main();"); - return writer.toString(); -} - -function getRunTestDefinitionsCode() { - return runTestDefinitions.toString().replace( - "export async function", - "async function", - ); -} - -function createWriter() { - return new CodeBlockWriter({ - indentNumberOfSpaces: 2, - }); -} diff --git a/vendor/deno.land/x/dnt@0.38.1/lib/test_runner/test_runner.ts b/vendor/deno.land/x/dnt@0.38.1/lib/test_runner/test_runner.ts deleted file mode 100644 index 847745d..0000000 --- a/vendor/deno.land/x/dnt@0.38.1/lib/test_runner/test_runner.ts +++ /dev/null @@ -1,211 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. - -export interface Picocolors { - green(text: string): string; - red(text: string): string; - gray(text: string): string; -} - -export interface NodeProcess { - stdout: { - write(text: string): void; - }; - exit(code: number): number; -} - -export interface RunTestDefinitionsOptions { - pc: Picocolors; - process: NodeProcess; - /** The file the tests are running in. */ - origin: string; -} - -export interface TestDefinition { - name: string; - fn: (context: TestContext) => Promise | void; - ignore?: boolean; -} - -export interface TestContext { - name: string; - parent: TestContext | undefined; - origin: string; - err: any; - children: TestContext[]; - hasFailingChild: boolean; - getOutput(): string; - step( - nameOrDefinition: string | TestDefinition, - fn?: (context: TestContext) => void | Promise, - ): Promise; - status: "ok" | "fail" | "pending" | "ignored"; -} - -export async function runTestDefinitions( - testDefinitions: TestDefinition[], - options: RunTestDefinitionsOptions, -) { - const testFailures = []; - for (const definition of testDefinitions) { - options.process.stdout.write("test " + definition.name + " ..."); - if (definition.ignore) { - options.process.stdout.write(` ${options.pc.gray("ignored")}\n`); - continue; - } - const context = getTestContext(definition, undefined); - let pass = false; - try { - await definition.fn(context); - if (context.hasFailingChild) { - testFailures.push({ - name: definition.name, - err: new Error("Had failing test step."), - }); - } else { - pass = true; - } - } catch (err) { - testFailures.push({ name: definition.name, err }); - } - const testStepOutput = context.getOutput(); - if (testStepOutput.length > 0) { - options.process.stdout.write(testStepOutput); - } else { - options.process.stdout.write(" "); - } - options.process.stdout.write(getStatusText(pass ? "ok" : "fail")); - options.process.stdout.write("\n"); - } - - if (testFailures.length > 0) { - options.process.stdout.write("\nFAILURES"); - for (const failure of testFailures) { - options.process.stdout.write("\n\n"); - options.process.stdout.write(failure.name + "\n"); - options.process.stdout.write( - indentText((failure.err?.stack ?? failure.err).toString(), 1), - ); - } - options.process.exit(1); - } - - function getTestContext( - definition: TestDefinition, - parent: TestContext | undefined, - ): TestContext { - return { - name: definition.name, - parent, - origin: options.origin, - /** @type {any} */ - err: undefined, - status: "ok", - children: [], - get hasFailingChild() { - return this.children.some((c) => - c.status === "fail" || c.status === "pending" - ); - }, - getOutput() { - let output = ""; - if (this.parent) { - output += "test " + this.name + " ..."; - } - if (this.children.length > 0) { - output += "\n" + this.children.map((c) => - indentText(c.getOutput(), 1) - ).join("\n") + "\n"; - } else if (!this.err) { - output += " "; - } - if (this.parent && this.err) { - output += "\n"; - } - if (this.err) { - output += indentText((this.err.stack ?? this.err).toString(), 1); - if (this.parent) { - output += "\n"; - } - } - if (this.parent) { - output += getStatusText(this.status); - } - return output; - }, - async step(nameOrTestDefinition, fn) { - const definition = getDefinition(); - - const context = getTestContext(definition, this); - context.status = "pending"; - this.children.push(context); - - if (definition.ignore) { - context.status = "ignored"; - return false; - } - - try { - await definition.fn(context); - context.status = "ok"; - if (context.hasFailingChild) { - context.status = "fail"; - return false; - } - return true; - } catch (err) { - context.status = "fail"; - context.err = err; - return false; - } - - /** @returns {TestDefinition} */ - function getDefinition() { - if (typeof nameOrTestDefinition === "string") { - if (!(fn instanceof Function)) { - throw new TypeError("Expected function for second argument."); - } - return { - name: nameOrTestDefinition, - fn, - }; - } else if (typeof nameOrTestDefinition === "object") { - return nameOrTestDefinition; - } else { - throw new TypeError( - "Expected a test definition or name and function.", - ); - } - } - }, - }; - } - - function getStatusText(status: TestContext["status"]) { - switch (status) { - case "ok": - return options.pc.green(status); - case "fail": - case "pending": - return options.pc.red(status); - case "ignored": - return options.pc.gray(status); - default: { - const _assertNever: never = status; - return status; - } - } - } - - function indentText(text: string, indentLevel: number) { - if (text === undefined) { - text = "[undefined]"; - } else if (text === null) { - text = "[null]"; - } else { - text = text.toString(); - } - return text.split(/\r?\n/) - .map((line) => " ".repeat(indentLevel) + line) - .join("\n"); - } -} diff --git a/vendor/deno.land/x/dnt@0.38.1/lib/transform.deps.ts b/vendor/deno.land/x/dnt@0.38.1/lib/transform.deps.ts deleted file mode 100644 index e284f19..0000000 --- a/vendor/deno.land/x/dnt@0.38.1/lib/transform.deps.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. - -export * as path from "https://deno.land/std@0.182.0/path/mod.ts"; diff --git a/vendor/deno.land/x/dnt@0.38.1/lib/types.ts b/vendor/deno.land/x/dnt@0.38.1/lib/types.ts deleted file mode 100644 index 903abca..0000000 --- a/vendor/deno.land/x/dnt@0.38.1/lib/types.ts +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. - -interface PackageJsonPerson { - name: string; - email?: string; - url?: string; -} - -interface PackageJsonBugs { - url?: string; - email?: string; -} - -/** - * Based on version 9.6.6 - */ -export interface PackageJson { - name: string; - version: string; - description?: string; - keywords?: string[]; - homepage?: string; - bugs?: PackageJsonBugs | string; - /** - * Check https://spdx.org/licenses/ for valid licences - */ - license?: "MIT" | "ISC" | "UNLICENSED" | string; - author?: PackageJsonPerson | string; - contributors?: (PackageJsonPerson | string)[]; - main?: string; - types?: string; - scripts?: { [key: string]: string }; - repository?: string | { type: string; url: string; directory?: string }; - dependencies?: { [packageName: string]: string }; - devDependencies?: { [packageName: string]: string }; - peerDependencies?: { [packageName: string]: string }; - bundleDependencies?: { [packageName: string]: string }; - optionalDependencies?: { [packageName: string]: string }; - engines?: { [engineName: string]: string }; - /** - * A list of os like "darwin", "linux", "win32", OS names can be prefix by a "!" - */ - os?: string[]; - /** - * A list of cpu like "x64", "ia32", "arm", "mips", CPU names can be prefix by a "!" - */ - cpu?: string[]; - private?: boolean; - /** - * rest of the fields - */ - [propertyName: string]: any; -} - -// NOTICE: make sure to update `ScriptTarget` in the rust code when changing the names on this -// todo(dsherret): code generate this from the Rust code to prevent out of sync issues - -/** Version of ECMAScript to compile the code to. */ -export type ScriptTarget = - | "ES3" - | "ES5" - | "ES2015" - | "ES2016" - | "ES2017" - | "ES2018" - | "ES2019" - | "ES2020" - | "ES2021" - | "ES2022" - | "Latest"; diff --git a/vendor/deno.land/x/dnt@0.38.1/lib/utils.ts b/vendor/deno.land/x/dnt@0.38.1/lib/utils.ts deleted file mode 100644 index 5712b61..0000000 --- a/vendor/deno.land/x/dnt@0.38.1/lib/utils.ts +++ /dev/null @@ -1,105 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. - -import * as deps from "./mod.deps.ts"; -import { path } from "./mod.deps.ts"; - -/** Gets the files found in the provided root dir path based on the glob. */ -export async function glob(options: { - pattern: string; - rootDir: string; - excludeDirs: string[]; -}) { - const paths: string[] = []; - const entries = deps.glob.expandGlob(options.pattern, { - root: options.rootDir, - extended: true, - globstar: true, - exclude: options.excludeDirs, - }); - for await (const entry of entries) { - if (entry.isFile) { - paths.push(entry.path); - } - } - return paths; -} - -export function runNpmCommand({ bin, args, cwd }: { - bin: string; - args: string[]; - cwd: string; -}) { - return runCommand({ - cmd: [bin, ...args], - cwd, - }); -} - -export async function runCommand(opts: { - cmd: string[]; - cwd: string; -}) { - const [cmd, ...args] = getCmd(); - await Deno.permissions.request({ name: "run", command: cmd }); - - try { - const process = new Deno.Command(cmd, { - args, - cwd: opts.cwd, - stderr: "inherit", - stdout: "inherit", - stdin: "inherit", - }); - - const output = await process.output(); - if (!output.success) { - throw new Error( - `${opts.cmd.join(" ")} failed with exit code ${output.code}`, - ); - } - } catch (err) { - // won't happen on Windows, but that's ok because cmd outputs - // a message saying that the command doesn't exist - if (err instanceof Deno.errors.NotFound) { - throw new Error( - `Could not find command '${ - opts.cmd[0] - }'. Ensure it is available on the path.`, - { cause: err }, - ); - } else { - throw err; - } - } - - function getCmd() { - const cmd = [...opts.cmd]; - if (Deno.build.os === "windows") { - return ["cmd", "/c", ...opts.cmd]; - } else { - return cmd; - } - } -} - -export function standardizePath(fileOrDirPath: string) { - if (fileOrDirPath.startsWith("file:")) { - return path.fromFileUrl(fileOrDirPath); - } - return path.resolve(fileOrDirPath); -} - -export function valueToUrl(value: string) { - const lowerCaseValue = value.toLowerCase(); - if ( - lowerCaseValue.startsWith("http:") || - lowerCaseValue.startsWith("https:") || - lowerCaseValue.startsWith("npm:") || - lowerCaseValue.startsWith("node:") || - lowerCaseValue.startsWith("file:") - ) { - return value; - } else { - return path.toFileUrl(path.resolve(value)).toString(); - } -} diff --git a/vendor/deno.land/x/dnt@0.38.1/mod.ts b/vendor/deno.land/x/dnt@0.38.1/mod.ts deleted file mode 100644 index 831985a..0000000 --- a/vendor/deno.land/x/dnt@0.38.1/mod.ts +++ /dev/null @@ -1,594 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. - -import { - getCompilerLibOption, - getCompilerScriptTarget, - getCompilerSourceMapOptions, - getTopLevelAwaitLocation, - type LibName, - libNamesToCompilerOption, - outputDiagnostics, - type SourceMapOptions, - transformCodeToTarget, -} from "./lib/compiler.ts"; -import { colors, createProjectSync, path, ts } from "./lib/mod.deps.ts"; -import { type ShimOptions, shimOptionsToTransformShims } from "./lib/shims.ts"; -import { getNpmIgnoreText } from "./lib/npm_ignore.ts"; -import type { PackageJson, ScriptTarget } from "./lib/types.ts"; -import { glob, runNpmCommand, standardizePath } from "./lib/utils.ts"; -import { - type SpecifierMappings, - transform, - type TransformOutput, -} from "./transform.ts"; -import * as compilerTransforms from "./lib/compiler_transforms.ts"; -import { getPackageJson } from "./lib/package_json.ts"; -import { getTestRunnerCode } from "./lib/test_runner/get_test_runner_code.ts"; - -export type { PackageJson } from "./lib/types.ts"; -export type { LibName, SourceMapOptions } from "./lib/compiler.ts"; -export type { ShimOptions } from "./lib/shims.ts"; -export { emptyDir } from "./lib/mod.deps.ts"; - -export interface EntryPoint { - /** - * If the entrypoint is for an npm binary or export. - * @default "export" - */ - kind?: "bin" | "export"; - /** Name of the entrypoint in the "binary" or "exports". */ - name: string; - /** Path to the entrypoint. */ - path: string; -} - -export interface BuildOptions { - /** Entrypoint(s) to the Deno module. Ex. `./mod.ts` */ - entryPoints: (string | EntryPoint)[]; - /** Directory to output to. */ - outDir: string; - /** Shims to use. */ - shims: ShimOptions; - /** Type check the output. - * * `"both"` - Type checks both the ESM and script modules separately. This - * is the recommended option when publishing a dual ESM and script package, - * but it runs slower so it's not the default. - * * `"single"` - Type checks the ESM module only or the script module if not emitting ESM. - * * `false` - Do not type check the output. - * @default "single" - */ - typeCheck?: "both" | "single" | false; - /** Collect and run test files. - * @default true - */ - test?: boolean; - /** Create declaration files. - * - * * `"inline"` - Emit declaration files beside the .js files in both - * the esm and script folders. This is the recommended option when publishing - * a dual ESM and script package to npm. - * * `"separate"` - Emits declaration files to the `types` folder where both - * the ESM and script code share the same type declarations. - * * `false` - Do not emit declaration files. - * @default "inline" - */ - declaration?: "inline" | "separate" | false; - /** Include a CommonJS or UMD module. - * @default "cjs" - */ - scriptModule?: "cjs" | "umd" | false; - /** Whether to emit an ES module. - * @default true - */ - esModule?: boolean; - /** Skip outputting the canonical TypeScript in the output directory before emitting. - * @default false - */ - skipSourceOutput?: boolean; - /** Root directory to find test files in. Defaults to the cwd. */ - rootTestDir?: string; - /** Glob pattern to use to find tests files. Defaults to `deno test`'s pattern. */ - testPattern?: string; - /** - * Specifiers to map from and to. - * - * This can be used to create a node specific file: - * - * ``` - * mappings: { - * "./file.deno.ts": "./file.node.ts", - * } - * ``` - * - * Or map a specifier to an npm package: - * - * ``` - * mappings: { - * "https://deno.land/x/code_block_writer@11.0.0/mod.ts": { - * name: "code-block-writer", - * version: "^11.0.0", - * } - * ``` - */ - mappings?: SpecifierMappings; - /** Package.json output. You may override dependencies and dev dependencies in here. */ - package: PackageJson; - /** Path or url to import map. */ - importMap?: string; - /** Package manager used to install dependencies and run npm scripts. - * This also can be an absolute path to the executable file of package manager. - * @default "npm" - */ - packageManager?: "npm" | "yarn" | "pnpm" | string; - /** Optional TypeScript compiler options. */ - compilerOptions?: { - /** Uses tslib to import helper functions once per project instead of including them per-file if necessary. - * @default false - */ - importHelpers?: boolean; - strictBindCallApply?: boolean; - strictFunctionTypes?: boolean; - strictNullChecks?: boolean; - strictPropertyInitialization?: boolean; - noImplicitAny?: boolean; - noImplicitReturns?: boolean; - noImplicitThis?: boolean; - noStrictGenericChecks?: boolean; - noUncheckedIndexedAccess?: boolean; - target?: ScriptTarget; - /** - * Use source maps from the canonical typescript to ESM/CommonJS emit. - * - * Specify `true` to include separate files or `"inline"` to inline the source map in the same file. - * @remarks Using this option will cause your sources to be included in the npm package. - * @default false - */ - sourceMap?: SourceMapOptions; - /** - * Whether to include the source file text in the source map when using source maps. - * @remarks It's not recommended to do this if you are distributing both ESM and CommonJS - * sources as then it will duplicate the the source data being published. - */ - inlineSources?: boolean; - /** Default set of library options to use. See https://www.typescriptlang.org/tsconfig/#lib */ - lib?: LibName[]; - /** - * Skip type checking of declaration files (those in dependencies). - * @default true - */ - skipLibCheck?: boolean; - /** - * @default false - */ - emitDecoratorMetadata?: boolean; - useUnknownInCatchVariables?: boolean; - }; - /** Filter out diagnostics that you want to ignore during type checking and emitting. - * @returns `true` to surface the diagnostic or `false` to ignore it. - */ - filterDiagnostic?: (diagnostic: ts.Diagnostic) => boolean; - /** Action to do after emitting and before running tests. */ - postBuild?: () => void | Promise; - /** Custom Wasm URL for the internal Wasm module used by dnt. */ - internalWasmUrl?: string; -} - -/** Builds the specified Deno module to an npm package using the TypeScript compiler. */ -export async function build(options: BuildOptions): Promise { - if (options.scriptModule === false && options.esModule === false) { - throw new Error("`scriptModule` and `esModule` cannot both be `false`"); - } - // set defaults - options = { - ...options, - outDir: standardizePath(options.outDir), - entryPoints: options.entryPoints, - scriptModule: options.scriptModule ?? "cjs", - esModule: options.esModule ?? true, - typeCheck: options.typeCheck ?? "single", - test: options.test ?? true, - declaration: (options.declaration as boolean) === true - ? "inline" - : options.declaration ?? "inline", - }; - const packageManager = options.packageManager ?? "npm"; - const scriptTarget = options.compilerOptions?.target ?? "ES2021"; - const entryPoints: EntryPoint[] = options.entryPoints.map((e, i) => { - if (typeof e === "string") { - return { - name: i === 0 ? "." : e.replace(/\.tsx?$/i, ".js"), - path: standardizePath(e), - }; - } else { - return { - ...e, - path: standardizePath(e.path), - }; - } - }); - - await Deno.permissions.request({ name: "write", path: options.outDir }); - - log("Transforming..."); - const transformOutput = await transformEntryPoints(); - for (const warning of transformOutput.warnings) { - warn(warning); - } - - const createdDirectories = new Set(); - const writeFile = (filePath: string, fileText: string) => { - const dir = path.dirname(filePath); - if (!createdDirectories.has(dir)) { - Deno.mkdirSync(dir, { recursive: true }); - createdDirectories.add(dir); - } - Deno.writeTextFileSync(filePath, fileText); - }; - - createPackageJson(); - createNpmIgnore(); - - // install dependencies in order to prepare for checking TS diagnostics - log(`Running ${packageManager} install...`); - const npmInstallPromise = runNpmCommand({ - bin: packageManager, - args: ["install"], - cwd: options.outDir, - }); - if (options.typeCheck || options.declaration) { - // Unfortunately this can't be run in parallel to building the project - // in this case because TypeScript will resolve the npm packages when - // creating the project. - await npmInstallPromise; - } - - log("Building project..."); - const esmOutDir = path.join(options.outDir, "esm"); - const scriptOutDir = path.join(options.outDir, "script"); - const typesOutDir = path.join(options.outDir, "types"); - const compilerScriptTarget = getCompilerScriptTarget(scriptTarget); - const project = createProjectSync({ - compilerOptions: { - outDir: typesOutDir, - allowJs: true, - alwaysStrict: true, - stripInternal: true, - strictBindCallApply: options.compilerOptions?.strictBindCallApply ?? true, - strictFunctionTypes: options.compilerOptions?.strictFunctionTypes ?? true, - strictNullChecks: options.compilerOptions?.strictNullChecks ?? true, - strictPropertyInitialization: - options.compilerOptions?.strictPropertyInitialization ?? true, - suppressExcessPropertyErrors: false, - suppressImplicitAnyIndexErrors: false, - noImplicitAny: options.compilerOptions?.noImplicitAny ?? true, - noImplicitReturns: options.compilerOptions?.noImplicitReturns ?? false, - noImplicitThis: options.compilerOptions?.noImplicitThis ?? true, - noStrictGenericChecks: options.compilerOptions?.noStrictGenericChecks ?? - false, - noUncheckedIndexedAccess: - options.compilerOptions?.noUncheckedIndexedAccess ?? false, - declaration: !!options.declaration, - esModuleInterop: false, - isolatedModules: true, - useDefineForClassFields: true, - experimentalDecorators: true, - emitDecoratorMetadata: options.compilerOptions?.emitDecoratorMetadata ?? - false, - jsx: ts.JsxEmit.React, - jsxFactory: "React.createElement", - jsxFragmentFactory: "React.Fragment", - importsNotUsedAsValues: ts.ImportsNotUsedAsValues.Remove, - module: ts.ModuleKind.ESNext, - moduleResolution: ts.ModuleResolutionKind.Node16, - target: compilerScriptTarget, - lib: libNamesToCompilerOption( - options.compilerOptions?.lib ?? getCompilerLibOption(scriptTarget), - ), - allowSyntheticDefaultImports: true, - importHelpers: options.compilerOptions?.importHelpers, - ...getCompilerSourceMapOptions(options.compilerOptions?.sourceMap), - inlineSources: options.compilerOptions?.inlineSources, - skipLibCheck: options.compilerOptions?.skipLibCheck ?? true, - useUnknownInCatchVariables: - options.compilerOptions?.useUnknownInCatchVariables ?? false, - }, - }); - - const binaryEntryPointPaths = new Set( - entryPoints.map((e, i) => ({ - kind: e.kind, - path: transformOutput.main.entryPoints[i], - })).filter((p) => p.kind === "bin").map((p) => p.path), - ); - - for ( - const outputFile of [ - ...transformOutput.main.files, - ...transformOutput.test.files, - ] - ) { - const outputFilePath = path.join( - options.outDir, - "src", - outputFile.filePath, - ); - const outputFileText = binaryEntryPointPaths.has(outputFile.filePath) - ? `#!/usr/bin/env node\n${outputFile.fileText}` - : outputFile.fileText; - const sourceFile = project.createSourceFile( - outputFilePath, - outputFileText, - ); - - if (options.scriptModule) { - // cjs does not support TLA so error fast if we find one - const tlaLocation = getTopLevelAwaitLocation(sourceFile); - if (tlaLocation) { - warn( - `Top level await cannot be used when distributing CommonJS/UMD ` + - `(See ${outputFile.filePath} ${tlaLocation.line + 1}:${ - tlaLocation.character + 1 - }). ` + - `Please re-organize your code to not use a top level await or only distribute an ES module by setting the 'scriptModule' build option to false.`, - ); - throw new Error( - "Build failed due to top level await when creating CommonJS/UMD package.", - ); - } - } - - if (!options.skipSourceOutput) { - writeFile(outputFilePath, outputFileText); - } - } - - let program = getProgramAndMaybeTypeCheck("ESM"); - - // emit only the .d.ts files - if (options.declaration === "separate") { - log("Emitting declaration files..."); - emit({ onlyDtsFiles: true }); - } - - if (options.esModule) { - // emit the esm files - log("Emitting ESM package..."); - project.compilerOptions.set({ - declaration: options.declaration === "inline", - outDir: esmOutDir, - }); - program = project.createProgram(); - emit({ - transformers: { - before: [compilerTransforms.transformImportMeta], - }, - }); - writeFile( - path.join(esmOutDir, "package.json"), - `{\n "type": "module"\n}\n`, - ); - } - - // emit the script files - if (options.scriptModule) { - log("Emitting script package..."); - project.compilerOptions.set({ - declaration: options.declaration === "inline", - esModuleInterop: true, - outDir: scriptOutDir, - module: options.scriptModule === "umd" - ? ts.ModuleKind.UMD - : ts.ModuleKind.CommonJS, - }); - program = getProgramAndMaybeTypeCheck("script"); - emit({ - transformers: { - before: [compilerTransforms.transformImportMeta], - }, - }); - writeFile( - path.join(scriptOutDir, "package.json"), - `{\n "type": "commonjs"\n}\n`, - ); - } - - // ensure this is done before running tests - await npmInstallPromise; - - // run post build action - if (options.postBuild) { - log("Running post build action..."); - await options.postBuild(); - } - - if (options.test) { - log("Running tests..."); - createTestLauncherScript(); - await runNpmCommand({ - bin: packageManager, - args: ["run", "test"], - cwd: options.outDir, - }); - } - - log("Complete!"); - - function emit( - opts?: { onlyDtsFiles?: boolean; transformers?: ts.CustomTransformers }, - ) { - const emitResult = program.emit( - undefined, - (filePath, data, writeByteOrderMark) => { - if (writeByteOrderMark) { - data = "\uFEFF" + data; - } - writeFile(filePath, data); - }, - undefined, - opts?.onlyDtsFiles, - opts?.transformers, - ); - - if (emitResult.diagnostics.length > 0) { - outputDiagnostics(emitResult.diagnostics); - throw new Error(`Had ${emitResult.diagnostics.length} emit diagnostics.`); - } - } - - function getProgramAndMaybeTypeCheck(current: "ESM" | "script") { - // When creating the program and type checking, we need to ensure that - // the cwd is the directory that contains the node_modules directory - // so that TypeScript will read it and resolve any @types/ packages. - // This is done in `getAutomaticTypeDirectiveNames` of TypeScript's code. - const originalDir = Deno.cwd(); - let program: ts.Program; - Deno.chdir(options.outDir); - try { - program = project.createProgram(); - - if (shouldTypeCheck()) { - log(`Type checking ${current}...`); - const diagnostics = filterDiagnostics( - ts.getPreEmitDiagnostics(program), - ).filter((d) => options.filterDiagnostic?.(d) ?? true); - if (diagnostics.length > 0) { - outputDiagnostics(diagnostics); - throw new Error(`Had ${diagnostics.length} diagnostics.`); - } - } - - return program; - } finally { - Deno.chdir(originalDir); - } - - function filterDiagnostics(diagnostics: ReadonlyArray) { - // we transform import.meta's when outputting a script, so ignore these diagnostics - return diagnostics.filter((d) => - // 1343: The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system_node16_or_nodenext - d.code !== 1343 && - // 1470: The_import_meta_meta_property_is_not_allowed_in_files_which_will_build_into_CommonJS_output - d.code !== 1470 && - (options.filterDiagnostic?.(d) ?? true) - ); - } - - function shouldTypeCheck() { - const typeCheck = options.typeCheck!; - switch (typeCheck) { - case "both": - return true; - case false: - return false; - case "single": - if (options.esModule) { - return current === "ESM"; - } - if (options.scriptModule) { - return current === "script"; - } - return false; - default: { - const _assertNever: never = typeCheck; - warn(`Unknown type check option: ${typeCheck}`); - return false; - } - } - } - } - - function createPackageJson() { - const packageJsonObj = getPackageJson({ - entryPoints, - transformOutput, - package: options.package, - testEnabled: options.test, - includeEsModule: options.esModule !== false, - includeScriptModule: options.scriptModule !== false, - includeDeclarations: options.declaration === "separate", - includeTsLib: options.compilerOptions?.importHelpers, - shims: options.shims, - }); - writeFile( - path.join(options.outDir, "package.json"), - JSON.stringify(packageJsonObj, undefined, 2), - ); - } - - function createNpmIgnore() { - const fileText = getNpmIgnoreText({ - sourceMap: options.compilerOptions?.sourceMap, - inlineSources: options.compilerOptions?.inlineSources, - testFiles: transformOutput.test.files, - includeScriptModule: options.scriptModule !== false, - includeEsModule: options.esModule !== false, - declaration: options.declaration!, - }); - writeFile( - path.join(options.outDir, ".npmignore"), - fileText, - ); - } - - async function transformEntryPoints(): Promise { - const { shims, testShims } = shimOptionsToTransformShims(options.shims); - return transform({ - entryPoints: entryPoints.map((e) => e.path), - testEntryPoints: options.test - ? await glob({ - pattern: getTestPattern(), - rootDir: options.rootTestDir ?? Deno.cwd(), - excludeDirs: [options.outDir], - }) - : [], - shims, - testShims, - mappings: options.mappings, - target: scriptTarget, - importMap: options.importMap, - internalWasmUrl: options.internalWasmUrl, - }); - } - - function log(message: string) { - console.log(`[dnt] ${message}`); - } - - function warn(message: string) { - console.warn(colors.yellow(`[dnt] ${message}`)); - } - - function createTestLauncherScript() { - const denoTestShimPackage = getDependencyByName("@deno/shim-deno-test") ?? - getDependencyByName("@deno/shim-deno"); - writeFile( - path.join(options.outDir, "test_runner.js"), - transformCodeToTarget( - getTestRunnerCode({ - denoTestShimPackageName: denoTestShimPackage == null - ? undefined - : denoTestShimPackage.name === "@deno/shim-deno" - ? "@deno/shim-deno/test-internals" - : denoTestShimPackage.name, - testEntryPoints: transformOutput.test.entryPoints, - includeEsModule: options.esModule !== false, - includeScriptModule: options.scriptModule !== false, - }), - compilerScriptTarget, - ), - ); - - function getDependencyByName(name: string) { - return transformOutput.test.dependencies.find((d) => d.name === name) ?? - transformOutput.main.dependencies.find((d) => d.name === name); - } - } - - function getTestPattern() { - // * named `test.{ts, mts, tsx, js, mjs, jsx}`, - // * or ending with `.test.{ts, mts, tsx, js, mjs, jsx}`, - // * or ending with `_test.{ts, mts, tsx, js, mjs, jsx}` - return options.testPattern ?? - "**/{test.{ts,mts,tsx,js,mjs,jsx},*.test.{ts,mts,tsx,js,mjs,jsx},*_test.{ts,mts,tsx,js,mjs,jsx}}"; - } -} diff --git a/vendor/deno.land/x/dnt@0.38.1/transform.ts b/vendor/deno.land/x/dnt@0.38.1/transform.ts deleted file mode 100644 index ea32733..0000000 --- a/vendor/deno.land/x/dnt@0.38.1/transform.ts +++ /dev/null @@ -1,219 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. - -import { instantiate } from "./lib/pkg/dnt_wasm.generated.js"; -import { ScriptTarget } from "./lib/types.ts"; -import { valueToUrl } from "./lib/utils.ts"; - -/** Specifier to specifier mappings. */ -export interface SpecifierMappings { - /** Map a specifier to another module or npm package. */ - [specifier: string]: PackageMappedSpecifier | string; -} - -export interface PackageMappedSpecifier { - /** Name of the npm package specifier to map to. */ - name: string; - /** Version to use in the package.json file. - * - * Not specifying a version will exclude it from the package.json file. - * This is useful for built-in modules such as "fs". - */ - version?: string; - /** Sub path of the npm package to use in the module specifier. - * - * @remarks This should not include the package name and should not - * include a leading slash. It will be concatenated to the package - * name in the module specifier like so: `/` - */ - subPath?: string; - /** If this should be a peer dependency. */ - peerDependency?: boolean; -} - -export interface GlobalName { - /** Name to use as the global name. */ - name: string; - /** Name of the export from the package. - * @remarks Defaults to the name. Specify `"default"` to use the default export. - */ - exportName?: string; - /** Whether this is a name that only exists as a type declaration. */ - typeOnly?: boolean; -} - -export type Shim = PackageShim | ModuleShim; - -export interface PackageShim { - /** Information about the npm package specifier to import. */ - package: PackageMappedSpecifier; - /** Npm package to include in the dev depedencies that has the type declarations. */ - typesPackage?: Dependency; - /** Named exports from the shim to use as globals. */ - globalNames: (GlobalName | string)[]; -} - -export interface ModuleShim { - /** The module or bare specifier. */ - module: string; - /** Named exports from the shim to use as globals. */ - globalNames: (GlobalName | string)[]; -} - -export interface TransformOptions { - entryPoints: string[]; - testEntryPoints?: string[]; - shims?: Shim[]; - testShims?: Shim[]; - mappings?: SpecifierMappings; - target: ScriptTarget; - /// Path or url to the import map. - importMap?: string; - internalWasmUrl?: string; -} - -/** Dependency in a package.json file. */ -export interface Dependency { - /** Name of the package. */ - name: string; - /** Version specifier (ex. `^1.0.0`). */ - version: string; - /** If this is suggested to be a peer dependency. */ - peerDependency?: boolean; -} - -export interface TransformOutput { - main: TransformOutputEnvironment; - test: TransformOutputEnvironment; - warnings: string[]; -} - -export interface TransformOutputEnvironment { - entryPoints: string[]; - dependencies: Dependency[]; - files: OutputFile[]; -} - -export interface OutputFile { - filePath: string; - fileText: string; -} - -/** Analyzes the provided entry point to get all the dependended on modules and - * outputs canonical TypeScript code in memory. The output of this function - * can then be sent to the TypeScript compiler or a bundler for further processing. */ -export async function transform( - options: TransformOptions, -): Promise { - if (options.entryPoints.length === 0) { - throw new Error("Specify one or more entry points."); - } - const newOptions = { - ...options, - mappings: Object.fromEntries( - Object.entries(options.mappings ?? {}).map(([key, value]) => { - return [valueToUrl(key), mapMappedSpecifier(value)]; - }), - ), - entryPoints: options.entryPoints.map(valueToUrl), - testEntryPoints: (options.testEntryPoints ?? []).map(valueToUrl), - shims: (options.shims ?? []).map(mapShim), - testShims: (options.testShims ?? []).map(mapShim), - target: options.target, - importMap: options.importMap == null - ? undefined - : valueToUrl(options.importMap), - }; - const wasmFuncs = await instantiate({ - url: options.internalWasmUrl ? new URL(options.internalWasmUrl) : undefined, - }); - return wasmFuncs.transform(newOptions); -} - -type SerializableMappedSpecifier = { - kind: "package"; - value: PackageMappedSpecifier; -} | { - kind: "module"; - value: string; -}; - -function mapMappedSpecifier( - value: string | PackageMappedSpecifier, -): SerializableMappedSpecifier { - if (typeof value === "string") { - if (isPathOrUrl(value)) { - return { - kind: "module", - value: valueToUrl(value), - }; - } else { - return { - kind: "package", - value: { - name: value, - }, - }; - } - } else { - return { - kind: "package", - value, - }; - } -} - -type SerializableShim = { kind: "package"; value: PackageShim } | { - kind: "module"; - value: ModuleShim; -}; - -function mapShim(value: Shim): SerializableShim { - const newValue: Shim = { - ...value, - globalNames: value.globalNames.map(mapToGlobalName), - }; - if (isPackageShim(newValue)) { - return { kind: "package", value: newValue }; - } else { - return { - kind: "module", - value: { - ...newValue, - module: resolveBareSpecifierOrPath(newValue.module), - }, - }; - } -} - -function isPackageShim(value: Shim): value is PackageShim { - return (value as PackageShim).package != null; -} - -function mapToGlobalName(value: string | GlobalName): GlobalName { - if (typeof value === "string") { - return { - name: value, - typeOnly: false, - }; - } else { - value.typeOnly ??= false; - return value; - } -} - -function resolveBareSpecifierOrPath(value: string) { - value = value.trim(); - if (isPathOrUrl(value)) { - return valueToUrl(value); - } else { - return value; - } -} - -function isPathOrUrl(value: string) { - value = value.trim(); - return /^[a-z]+:\/\//i.test(value) || // has scheme - value.startsWith("./") || - value.startsWith("../") || - /\.[a-z]+$/i.test(value); // has extension -} diff --git a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/alt.ts b/vendor/deno.land/x/fun@v.2.0.0-alpha.11/alt.ts deleted file mode 100644 index 075f8f1..0000000 --- a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/alt.ts +++ /dev/null @@ -1,41 +0,0 @@ -import type { $, Kind, TypeClass } from "./kind.ts"; -import type { Functor } from "./functor.ts"; -import type { NonEmptyArray } from "./array.ts"; - -/** - * An instance of Alt extends Functor and provides a new method - * called alt. This method takes two matching Kinds, left and right, - * and returns one of them. A good way to think of this is as - * a boolean or, where if the left kind is "false" then the right - * kind is returned. - * - * An instance of alt must obey the following laws: - * - * 1. Associativity: - * pipe(a, alt(b), alt(c)) === pipe(a, alt(pipe(b, alt(c)))) - * 2. Distributivity: - * pipe(a, alt(b), map(f)) === pipe(a, map(f), alt(pipe(b, map(f)))) - * - * The original type came from - * [here](https://github.com/fantasyland/static-land/blob/master/docs/spec.md#alt) - */ -export interface Alt extends TypeClass, Functor { - readonly alt: ( - second: $, - ) => (first: $) => $; -} - -export function concatAll( - { alt }: Alt, -): ( - uas: NonEmptyArray<$>, -) => $ { - return (uas) => { - const [head, ...tail] = uas; - let out = head; - for (const ua of tail) { - out = alt(ua)(out); - } - return out; - }; -} diff --git a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/applicative.ts b/vendor/deno.land/x/fun@v.2.0.0-alpha.11/applicative.ts deleted file mode 100644 index de0ef30..0000000 --- a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/applicative.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { $, Kind, TypeClass } from "./kind.ts"; -import type { Apply } from "./apply.ts"; - -/** - * Applicative - * https://github.com/fantasyland/static-land/blob/master/docs/spec.md#applicative - */ -export interface Applicative extends Apply, TypeClass { - readonly of: ( - a: A, - ) => $; -} diff --git a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/apply.ts b/vendor/deno.land/x/fun@v.2.0.0-alpha.11/apply.ts deleted file mode 100644 index 336be72..0000000 --- a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/apply.ts +++ /dev/null @@ -1,24 +0,0 @@ -import type { $, Kind, TypeClass } from "./kind.ts"; -import type { Functor } from "./functor.ts"; - -/** - * Apply - * https://github.com/fantasyland/static-land/blob/master/docs/spec.md#apply - */ -export interface Apply extends Functor, TypeClass { - readonly ap: ( - ta: $, - ) => ( - tfai: $ I, J, K], [D], [E]>, - ) => $; -} - -// export function createApplySemigroup( -// A: Apply, -// ): ( -// S: Semigroup, -// ) => Semigroup<$> { -// return (S) => ({ -// concat: (second) => (first) => pipe(first, A.map(S.concat), A.ap(second)), -// }); -// } diff --git a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/array.ts b/vendor/deno.land/x/fun@v.2.0.0-alpha.11/array.ts deleted file mode 100644 index 8a727c1..0000000 --- a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/array.ts +++ /dev/null @@ -1,1483 +0,0 @@ -/** - * This file contains a collection of utilities and - * algebraic structure implemenuations for ReadonlyArray - * in JavaScript. - * - * @todo Look into lodash for perf hints on array iterating in its various - * forms. - * - * @module Array - */ - -import type { $, AnySub, Intersect, Kind, Out } from "./kind.ts"; -import type { Alt } from "./alt.ts"; -import type { Applicative } from "./applicative.ts"; -import type { Functor } from "./functor.ts"; -import type { Apply } from "./apply.ts"; -import type { Chain } from "./chain.ts"; -import type { Filterable } from "./filterable.ts"; -import type { Foldable } from "./foldable.ts"; -import type { Monad } from "./monad.ts"; -import type { Monoid } from "./monoid.ts"; -import type { Option } from "./option.ts"; -import type { Either } from "./either.ts"; -import type { Ord } from "./ord.ts"; -import type { Pair } from "./pair.ts"; -import type { Semigroup } from "./semigroup.ts"; -import type { Eq } from "./eq.ts"; -import type { Show } from "./show.ts"; -import type { Traversable } from "./traversable.ts"; - -import { pair } from "./pair.ts"; -import { isRight } from "./either.ts"; -import { fromCompare, sign } from "./ord.ts"; -import { isSome, none, some } from "./option.ts"; -import { identity, pipe } from "./fn.ts"; - -/** - * This type can be used as a placeholder for an array of any type. - * - * @since 2.0.0 - */ -// deno-lint-ignore no-explicit-any -export type AnyArray = ReadonlyArray; - -/** - * This type alias extracts the inner type of a ReadonlyArray. - * - * @since 2.0.0 - */ -export type TypeOf = T extends ReadonlyArray ? A : never; - -/** - * This type alias represents a ReadonlyArray conuaining - * at least one value at the head. - * - * @since 2.0.0 - */ -export type NonEmptyArray = readonly [A, ...A[]]; - -/** - * Specifies ReadonlyArray as a Higher Kinded Type, with covariant - * parameter A corresponding to the 0th index of any substitutions. - * - * @since 2.0.0 - */ -export interface KindArray extends Kind { - readonly kind: ReadonlyArray>; -} - -/** - * *UNSAFE* This operation creates a new array from ua with the value a inserted - * at the given index. The insertion index must be tested as in bounds before - * calling this function. This function is intended for internal use only and - * thus has no api guaruntees. - * - * @since 2.0.0 - */ -export function _unsafeInsertAt( - index: number, - a: A, - ua: ReadonlyArray, -): ReadonlyArray { - const result = ua.slice(); - result.splice(index, 0, a); - return result; -} - -/** - * *UNSAFE* This operation creates a new array from ua with the value a changed - * at the given index. The insertion index must be tested as in bounds before - * calling this function. This function is intended for internal use only and - * thus has no api guaruntees. - * - * @since 2.0.0 - */ -export function _unsafeUpdateAt( - index: number, - a: A, - ua: ReadonlyArray, -): ReadonlyArray { - if (ua[index] === a) { - return ua; - } else { - const result = ua.slice(); - result[index] = a; - return result; - } -} - -/** - * *UNSAFE* This operation creates a new array from ua with the value deleted - * at the given index. The deletiong index must be tested as in bounds before - * calling this function. This function is intended for internal use only and - * thus has no api guaruntees. - * - * @since 2.0.0 - */ -export function _unsafeDeleteAt( - index: number, - ua: ReadonlyArray, -): ReadonlyArray { - const result = ua.slice(); - result.splice(index, 1); - return result; -} - -/** - * *UNSAFE* This operation mutates a standard Array by pushing onto it. - * This function is intended for internal use only and thus has no api - * guaruntees. - * - * @since 2.0.0 - */ -export function _unsafeAppend( - last: A, -): (ua: Array) => Array { - return (ua) => { - ua.push(last); - return ua; - }; -} - -/** - * *UNSAFE* This operation mutates a standard Array by pushing onto it. - * This function is intended for internal use only and thus has no api - * guaruntees. - * - * @since 2.0.0 - */ -export function _unsafePush(ua: Array, a: A): Array { - ua.push(a); - return ua; -} - -/** - * *UNSAFE* This operation muuates a standard Array by unshifting onto it. - * This function is intended for internal use only and thus has no api - * guaruntees. - * - * @since 2.0.0 - */ -export function _unsafePrepend( - head: A, -): (ua: Array) => Array { - return (ua) => { - ua.unshift(head); - return ua; - }; -} - -/** - * *UNSAFE* This operation mutates a standard Array by adding all elements - * from a second array to it. This function is intended for internal use only - * and thus has no api guaruntees. - * - * @since 2.0.0 - */ -export function _unsafeJoin( - into: Array, - from: ReadonlyArray, -): Array { - const length = from.length; - let index = -1; - while (++index < length) { - into.push(from[index]); - } - return into; -} - -/** - * Given an index and a ReadonlyArray, return true if the index is valid - * for the given array. This tests whether index is between 0 and arr.length - * inclusive. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * - * const arr = A.of(1); - * - * const result1 = A.isOutOfBounds(0, arr); // false - * const result2 = A.isOutOfBounds(-1, arr); // true - * const result3 = A.isOutOfBounds(10, arr); // true - * ``` - * - * @since 2.0.0 - */ -export function isOutOfBounds(index: number, ua: ReadonlyArray): boolean { - return index < 0 || index >= ua.length; -} - -/** - * This predicate over ReadonlyArray returns true when called with an - * empty array, otherwise it returns false. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * - * const arr1 = A.empty(); - * const arr2 = A.of(1); - * - * const result1 = A.isEmpty(arr1); // true - * const result2 = A.isEmpty(arr2); // false - * ``` - * - * @since 2.0.0 - */ -export function isEmpty(ua: ReadonlyArray): boolean { - return ua.length === 0; -} - -/** - * A Refinement, NonEmptyArray>, returning true if - * called with an array that has at least one item. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * - * const arr1 = [1] - * const arr2 = A.empty(); - * - * const result1 = A.isNonEmpty(arr1); - * // true and arr1 has type NonEmptyArray - * const result2 = A.isNonEmpty(arr2); - * // false - * ``` - * - * @since 2.0.0 - */ -export function isNonEmpty(a: ReadonlyArray): a is NonEmptyArray { - return a.length > 0; -} - -/** - * Create a NonEmptyArray from a variadic number of arguments. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * - * const result = A.array(1, 2, 3, 4); // [1, 2, 3, 4] - * ``` - * - * @since 2.0.0 - */ -export function array(...a: NonEmptyArray): NonEmptyArray { - return a; -} - -/** - * Create a range of numbers with count values, starting at start (default 0) - * and stepping by step (default 1). - * - * @example - * ```ts - * import * as A from "./array.ts"; - * - * const result1 = A.range(3); // [0, 1, 2] - * const result2 = A.range(3, 1); // [1, 2, 3] - * const result3 = A.range(3, -1, 0.1); // [-1, -0.9, -0.8] - * const result4 = A.range(2.5); // [0, 1] - * const result5 = A.range(-1); // [] - * ``` - * - * @since 2.0.0 - */ -export function range( - count: number, - start = 0, - step = 1, -): ReadonlyArray { - const length = Math.max(0, Math.floor(count)); - const result = new Array(length); - let index = -1; - let value = start; - while (++index < length) { - result[index] = value; - value += step; - } - return result; -} - -/** - * Create an empty array of type A (defaulting to never). - * - * @example - * ```ts - * import * as A from "./array.ts"; - * - * const result = A.empty(); // ReadonlyArray - * ``` - * - * @since 2.0.0 - */ -export function empty(): ReadonlyArray { - return []; -} - -/** - * Create a NonEmptyArray conuaining the value A. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * - * const result = A.of(1); // [1] of type NonEmptyArray - * ``` - * - * @since 2.0.0 - */ -export function of(a: A): NonEmptyArray { - return [a]; -} - -/** - * Given two arrays first and second, if first is empty the return second, - * otherwise return first. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const result1 = pipe( - * A.empty(), - * A.alt(A.of(1)), - * ); // [1] - * const result2 = pipe( - * A.array(1, 2, 3), - * A.alt(A.array(3, 2, 1)), - * ); // [1, 2, 3] - * ``` - * - * @since 2.0.0 - */ -export function alt( - second: ReadonlyArray, -): (first: ReadonlyArray) => ReadonlyArray { - return (first) => isEmpty(first) ? second : first; -} - -/** - * Apply the function fai: (A, index) => I to every element in the array ua. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * A.array("Hello", "World"), - * A.map(s => s.length), - * ); // [5, 5] - * ``` - * - * @since 2.0.0 - */ -export function map( - fai: (a: A, i: number) => I, -): (ua: ReadonlyArray) => ReadonlyArray { - return (ua) => { - let index = -1; - const length = ua.length; - const result = new Array(length); - - while (++index < length) { - result[index] = fai(ua[index], index); - } - - return result; - }; -} - -/** - * Reduce an array from left to right, accumulating into a type O via the - * function foao: (O, A, index) => O and an initial value O. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * A.range(5, 1), - * A.reduce((sum, value, index) => sum + value + index, 0), - * ); - * // 0 + 0 + 0 = 0 - * // 0 + 1 + 1 = 2 - * // 2 + 2 + 2 = 6 - * // 6 + 3 + 3 = 12 - * // 12 + 4 + 4 = 20 - * // 20 - * ``` - * - * @since 2.0.0 - */ -export function reduce( - foao: (o: O, a: A, i: number) => O, - o: O, -): (ua: ReadonlyArray) => O { - return (ua) => { - let result = o; - let index = -1; - const length = ua.length; - - while (++index < length) { - result = foao(result, ua[index], index); - } - - return result; - }; -} - -/** - * Given two arrays first and second, join them into a new array effectively - * doing [...first, ...second]. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * A.range(3, 1), - * A.concat(A.range(3, 3, -1)), - * ); // [1, 2, 3, 3, 2, 1] - * ``` - * - * @since 2.0.0 - */ -export function concat( - second: ReadonlyArray, -): (first: ReadonlyArray) => ReadonlyArray { - if (isEmpty(second)) { - return identity; - } - - return (first) => { - const firstLength = first.length; - const length = firstLength + second.length; - const result = Array(length); - let index = -1; - - while (++index < firstLength) { - result[index] = first[index]; - } - - index--; - - while (++index < length) { - result[index] = second[index - firstLength]; - } - - return result; - }; -} - -/** - * Given an array of arrays, flatten all inner arrays into a single - * external array. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * - * const result = A.join(A.array( - * A.range(3), - * A.range(2), - * A.range(1), - * )); // [0, 1, 2, 0, 1, 0] - * ``` - * - * @since 2.0.0 - */ -export function join( - uaa: ReadonlyArray>, -): ReadonlyArray { - let index = -1; - const length = uaa.length; - const result = new Array(); - - while (++index < length) { - const ua = uaa[index]; - let _index = -1; - const _length = ua.length; - while (++_index < _length) { - result.push(ua[_index]); - } - } - - return result; -} - -/** - * Given a function A -> ReadonlyArray and a ReadonlyArray apply the - * function to every value in the array and combine all results, returning a - * ReadonlyArray. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * A.range(3, 1, 3), // [1, 4, 7] - * A.chain(n => [n, n + 1, n + 2]), // ie. 1 -> [1, 2, 3] - * ); // [1, 2, 3, 4, 5, 6, 7, 8, 9] - * ``` - * - * @since 2.0.0 - */ -export function chain( - fati: (a: A, index: number) => ReadonlyArray, -): (ua: ReadonlyArray) => ReadonlyArray { - return (ua) => { - const length = ua.length; - const result = new Array(); - let index = -1; - - while (++index < length) { - const chained = fati(ua[index], index); - // Mutates - _unsafeJoin(result, chained); - } - - return result; - }; -} - -/** - * Given an array of functions ReadonlyArray I> and a ReadonlyArray - * apply every function in the function array to every value in the - * ReadonlyArray. This implementation loops first over the functions, and then - * over the values, so the order of results will be [fn1(val1), fn2(val1), - * fn3(val1), ..., fn1(val2), fn2(val2), ... fn1(valN), ... fnN(valN)]. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * A.of((n: number) => n + 1), - * A.ap(A.array(1, 2, 3)), - * ); // [2, 3, 4] - * ``` - * - * @since 2.0.0 - */ -export function ap( - ua: ReadonlyArray, -): (ufai: ReadonlyArray<(a: A, index: number) => I>) => ReadonlyArray { - return ( - ufai: ReadonlyArray<(a: A, index: number) => I>, - ): ReadonlyArray => { - const fnlength = ufai.length; - const vallength = ua.length; - const result = new Array(fnlength * vallength); - let fnindex = -1; - while (++fnindex < fnlength) { - let valindex = -1; - while (++valindex < vallength) { - const index = (vallength * fnindex) + valindex; - const value = ua[valindex]; - const fn = ufai[fnindex]; - result[index] = fn(value, valindex); - } - } - return result; - }; -} - -/** - * Given a Predicate or Refinement, apply the predicate or refinement to - * every value in an array, removing (and refining) the elements that - * the predicate or refinement return false for. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * A.array(1, 2, 3, 4, 5, 6), - * A.filter(n => n % 2 === 0), - * ); // [2, 4, 6] - * ``` - * - * @since 2.0.0 - */ -export function filter( - refinement: (a: A, index: number) => a is B, -): (ua: ReadonlyArray) => ReadonlyArray; -export function filter( - predicate: (a: A, index: number) => boolean, -): (ua: ReadonlyArray) => ReadonlyArray; -export function filter( - predicate: (a: A, index: number) => boolean, -): (ua: ReadonlyArray) => ReadonlyArray { - return (ua) => { - let index = -1; - let resultIndex = 0; - const length = ua.length; - const result = []; - - while (++index < length) { - const value = ua[index]; - if (predicate(value, index)) { - result[resultIndex++] = value; - } - } - return result; - }; -} - -/** - * Filter and map over an ReadonlyArray in the same step. This function - * applies the predicate to each value in an array. If the predicate - * returns Some, then the inner I is added to the output array. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import * as O from "./option.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * A.array("Hello", "Big", "World"), - * A.filterMap(s => s.includes("o") ? O.some(s.toUpperCase()) : O.none), - * ); // ["HELLO", "WORLD"] - * ``` - * - * @since 2.0.0 - */ -export function filterMap( - predicate: (a: A, index: number) => Option, -): (ua: ReadonlyArray) => ReadonlyArray { - return (ua) => { - let index = -1; - let resultIndex = 0; - const length = ua.length; - const result = []; - - while (++index < length) { - const value = ua[index]; - const filtered = predicate(value, index); - if (isSome(filtered)) { - result[resultIndex++] = filtered.value; - } - } - return result; - }; -} - -/** - * Partition a ReadonlyArray into two ReadonlyArrays using a predicate or - * refinement to do the sorting. If the predicate or refinement returns true for - * a value, the value is pushed into the first array in a Pair, otherwise it is - * pushed into the second array in a pair. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * A.range(10, 1), // [1, 2, 3, ..., 10] - * A.partition(n => n % 2 === 0), - * ); // Pair<[2, 4, 6, 8, 10], [1, 3, 5, 7, 9]> - * ``` - * - * @since 2.0.0 - */ -export function partition( - refinement: (a: A, index: number) => a is B, -): (ua: ReadonlyArray) => Pair, ReadonlyArray>; -export function partition( - predicate: (a: A, index: number) => boolean, -): (ua: ReadonlyArray) => Pair, ReadonlyArray>; -export function partition( - refinement: (a: A, index: number) => boolean, -): (ua: ReadonlyArray) => Pair, ReadonlyArray> { - return (ua) => { - const first: Array = []; - const second: Array = []; - const length = ua.length; - let index = -1; - - while (++index < length) { - const value = ua[index]; - if (refinement(value, index)) { - first.push(value); - } else { - second.push(value); - } - } - return pair(first, second); - }; -} - -/** - * Partition and map over a ReadonlyArray in the same loop. Given a predicate - * A => Either, this function passes each element in an array into the - * predicate. If the predicate returns Right then the inner I is pushed into - * the first array in a pair. If the predicate returns Left then the inner J - * is pushed into the second array in a pair. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import * as E from "./either.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * A.range(10, 1), // [1, 2, 3, ..., 10] - * A.partitionMap(n => n % 2 === 0 ? E.right(n * 100) : E.left(n / 10)), - * ); // Pair<[200, 400, 600, 800, 1000], [0.1, 0.3, 0.5, 0.7, 0.9]> - * ``` - * - * @since 2.0.0 - */ -export function partitionMap( - predicate: (a: A, index: number) => Either, -): (ua: ReadonlyArray) => Pair, ReadonlyArray> { - return (ua) => { - const first: Array = []; - const second: Array = []; - const length = ua.length; - let index = -1; - - while (++index < length) { - const value = ua[index]; - const filtered = predicate(value, index); - if (isRight(filtered)) { - first.push(filtered.right); - } else { - second.push(filtered.left); - } - } - return pair(first, second); - }; -} - -/** - * Traverse a ReadonlyArray using an Applicative over V and a mapping - * function A => V. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe, identity } from "./fn.ts"; - * - * const traverse = A.traverse(A.ApplicativeArray); - * - * const result = pipe( - * [[1, 2], [3, 4]], - * traverse(identity), - * ); // [[1, 3], [1, 4], [2, 3], [2, 4]] - * ``` - * - * @since 2.0.0 - */ -export function traverse( - A: Applicative, -): ( - favi: (a: A, i: number) => $, -) => (ua: ReadonlyArray) => $, J, K], [L], [M]> { - return ( - favi: (a: A, i: number) => $, - ): (ua: ReadonlyArray) => $, J, K], [L], [M]> => { - const pusher = (is: I[]) => (i: I) => [...is, i]; - return reduce( - (vis, a: A, index) => - pipe( - vis, - A.map(pusher), - A.ap(favi(a, index)), - ), - A.of([] as I[]), - ); - }; -} - -/** - * The Sequence inverts a tuple of substitutions over V into V containing a - * tuple of inferred values of the substitution. - * - * ie. - * [Option, Option] - * becomes - * Option<[number, string]> - * - * or - * - * [Either Either] - * becomes - * Either - */ -// deno-fmt-ignore -type Sequence[]> = $ ? A : never; }, - { [K in keyof R]: R[K] extends $ ? B : never; }[number], - { [K in keyof R]: R[K] extends $ ? C : never; }[number], - ], [ - Intersect<{ [K in keyof R]: R[K] extends $ ? D : never; }[number]>, - ], [ - Intersect<{ [K in keyof R]: R[K] extends $ ? E : never; }[number]>, - ] ->; - -/** - * Sequence over an array of type V, inverting the relationship between V and - * ReadonlyArray. This function also keeps the indexed types of in each V at - * covariant position 0. In other words sequence over [Option, - * Option] becomes Option<[number, string]>. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import * as O from "./option.ts"; - * - * const sequence = A.sequence(O.ApplicativeOption); - * - * const result1 = sequence(O.some(1), O.some("Hello")); // Some([1, "Hello"]) - * const result2 = sequence(O.none, O.some("Uh Oh")); // None - * ``` - * - * @since 2.0.0 - */ -export function sequence( - A: Applicative, -): []>( - ...ua: VS -) => Sequence { - const sequence = traverse(A)(identity as any); - return []>(...vs: VS): Sequence => - sequence(vs) as Sequence; -} - -/** - * Create a new array by appending an item to the end of an existing array. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * [1, 2, 3], - * A.append(4), - * ); // [1, 2, 3, 4] - * ``` - * - * @since 2.0.0 - */ -export function append( - last: A, -): (ua: ReadonlyArray) => ReadonlyArray { - return (ma) => [...ma, last]; -} - -/** - * Create a new array by prepending an item to the head of an existing array. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * [1, 2, 3], - * A.prepend(4), - * ); // [4, 1, 2, 3] - * ``` - * - * @since 2.0.0 - */ -export function prepend( - head: A, -): (ua: ReadonlyArray) => ReadonlyArray { - return (ma) => [head, ...ma]; -} - -/** - * Create a new array by inserting a value into an array at an index. If the - * index is out of range of the existing array then no change is made. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const insert = A.insert(100); // Insert the value 100 - * const arr = [1, 2, 3]; - * - * const result1 = pipe(arr, insert(0)); // [100, 1, 2, 3] - * const result2 = pipe(arr, insert(1)); // [1, 100, 2, 3] - * const result3 = pipe(arr, insert(4)); // [1, 2, 3, 100] - * const result4 = pipe(arr, insert(4)); // [1, 2, 3] - * ``` - * - * @since 2.0.0 - */ -export function insert(value: A) { - return (index: number) => (arr: ReadonlyArray): ReadonlyArray => - index < 0 || index > arr.length ? arr : _unsafeInsertAt(index, value, arr); -} - -/** - * Create a new array by inserting a value into an array at an index. If the - * index is out of range of the existing array then no change is made. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const insertAt = A.insertAt(0); // Insert at index 0 - * const arr = [1, 2, 3]; - * - * const result1 = pipe(arr, insertAt(0)); // [0, 1, 2, 3] - * const result2 = pipe(arr, insertAt(1)); // [1, 1, 2, 3] - * const result3 = pipe( - * arr, - * A.insertAt(100)(100), - * ); // [1, 2, 3] - * ``` - * - * @since 2.0.0 - */ -export function insertAt(index: number) { - return (value: A) => (arr: ReadonlyArray): ReadonlyArray => - index < 0 || index > arr.length ? arr : _unsafeInsertAt(index, value, arr); -} - -/** - * Create a new array by replacing a value of an array at an index. If the - * index is out of range of the existing array then no change is made. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const update = A.update(100); // Update the value 100 - * const arr = [1, 2, 3]; - * - * const result1 = pipe(arr, update(0)); // [100, 2, 3] - * const result2 = pipe(arr, update(1)); // [1, 100, 3] - * const result3 = pipe(arr, update(4)); // [1, 2, 3] - * ``` - * - * @since 2.0.0 - */ -export function update(value: A) { - return (index: number) => (arr: ReadonlyArray): ReadonlyArray => - isOutOfBounds(index, arr) ? arr : _unsafeUpdateAt(index, value, arr); -} - -/** - * Create a new array by replacing a value of an array at an index. If the - * index is out of range of the existing array then no change is made. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const updateAt = A.updateAt(0); // Update at index 0 - * const arr = [1, 2, 3]; - * - * const result1 = pipe(arr, updateAt(100)); // [100, 2, 3] - * const result2 = pipe(arr, updateAt(200)); // [200, 2, 3] - * const result3 = pipe(arr, A.updateAt(100)(100)); // [1, 2, 3] - * ``` - * - * @since 2.0.0 - */ -export function updateAt(index: number) { - return (value: A) => (arr: ReadonlyArray): ReadonlyArray => - isOutOfBounds(index, arr) ? arr : _unsafeUpdateAt(index, value, arr); -} - -/** - * Create a new array by modifying a value of an array at an index. If the - * index is out of range of the existing array then no change is made. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const modify = A.modify((n: number) => n + 1); // Increment the value - * const arr = [1, 2, 3]; - * - * const result1 = pipe(arr, modify(0)); // [2, 2, 3] - * const result2 = pipe(arr, modify(1)); // [1, 3, 3] - * const result3 = pipe(arr, modify(4)); // [1, 2, 3] - * ``` - * - * @since 2.0.0 - */ -export function modify(modifyFn: (a: A) => A) { - return (index: number) => (arr: ReadonlyArray): ReadonlyArray => - isOutOfBounds(index, arr) - ? arr - : _unsafeUpdateAt(index, modifyFn(arr[index]), arr); -} - -/** - * Create a new array by modifying a value of an array at an index. If the - * index is out of range of the existing array then no change is made. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const inc = (n: number) => n + 1 - * const modifyAt = A.modifyAt(0); // Modify value at - * const arr = [1, 2, 3]; - * - * const result1 = pipe(arr, modifyAt(inc)); // [2, 2, 3] - * const result2 = pipe(arr, A.modifyAt(100)(inc)); // [1, 2, 3] - * ``` - * - * @since 2.0.0 - */ -export function modifyAt(index: number) { - return (modifyFn: (a: A) => A) => - (arr: ReadonlyArray): ReadonlyArray => - isOutOfBounds(index, arr) - ? arr - : _unsafeUpdateAt(index, modifyFn(arr[index]), arr); -} - -/** - * Lookup the value in an array at the given index. If the index is out of - * bounds this function returns none. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const result1 = pipe( - * [1, 2, 3], - * A.lookup(0), - * ); // Some(1) - * const result2 = pipe( - * [1, 2, 3], - * A.lookup(100), - * ); // None - * ``` - * - * @since 2.0.0 - */ -export function lookup(index: number) { - return (as: ReadonlyArray): Option => - isOutOfBounds(index, as) ? none : some(as[index]); -} - -/** - * Delete the value in an array at the given index. If the index is out of - * bounds then no change is made. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const result1 = pipe([1, 2, 3], A.deleteAt(0)); // [2, 3] - * const result2 = pipe([1, 2, 3], A.deleteAt(100)); // [1, 2, 3] - * ``` - * - * @since 2.0.0 - */ -export function deleteAt(index: number) { - return (arr: ReadonlyArray): ReadonlyArray => - isOutOfBounds(index, arr) ? arr : _unsafeDeleteAt(index, arr); -} - -/** - * Returns a new array conuaining elements of `as` sorted in ascending order - * according to the sort order defined by `O`. - * - * @example - * import { ordNumber } from "./ord.ts"; - * import { sort } from './array.ts' - * - * sort(ordNumber)([3, 1, 2]) - * // [1, 2, 3] - * - * @category combinators - */ -export function sort( - O: Ord, -): (as: ReadonlyArray) => ReadonlyArray { - return (as) => as.slice().sort(O.compare); -} - -/** - * Given an Ord over A, create a binary search function for a sorted - * ReadonlyArray that returns the array index that the new value should - * be inserted at in order to maintain a sorted array. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { OrdNumber } from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const search = A.binarySearch(OrdNumber); - * const arr = A.range(100, 1); // [1, 2, ..., 100] - * - * const index1 = search(30.5, arr); // Index 29 - * const index2 = search(10000, arr); // Index 100 - * ``` - * - * @since 2.0.0 - */ -export function binarySearch( - ord: Ord, -): (value: A, sorted: ReadonlyArray) => number { - const { compare } = ord; - return (value, sorted) => { - let low = 0; - let high = sorted.length; - let middle, cursor, ordering; - - while (low < high) { - middle = Math.floor((low + high) / 2); - cursor = sorted[middle]; - ordering = compare(value, cursor); - - if (ordering === 0) { - return middle; - } else if (ordering === -1) { - high = middle; - } else { - low = middle + 1; - } - } - return high; - }; -} - -/** - * Given an Ord construct a curried insert function that inserts values into - * a new array in a sorted fashion. Internally this uses binarySearch to find - * the insertion index of any inserted items. Since the returned function will - * always insert this function will always return a new array. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import * as O from "./ord.ts"; - * import { OrdNumber } from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * type Person = { name: string, age: number }; - * function person(name: string, age: number) { - * return { name, age }; - * } - * - * const OrdPerson = pipe( - * OrdNumber, - * O.contramap((p: Person) => p.age), - * ); - * const insert = A.orderedInsert(OrdPerson); - * - * const result = pipe( - * A.empty(), - * insert(person("Brandon", 37)), - * insert(person("Emily", 32)), - * insert( - * person("Rufus", 0.7), - * person("Clementine", 0.5) - * ), - * ); - * // [ - * // { name: "Clementine", age: 0.5 }, - * // { name: "Rufus", age: 0.7 }, - * // { name: "Emily", age: 32 }, - * // { name: "Brandon", age: 37 }, - * // ] - * ``` - * - * @since 2.0.0 - */ -export function orderedInsert( - ord: Ord, -): ( - ...values: NonEmptyArray -) => (arr: ReadonlyArray) => ReadonlyArray { - const search = binarySearch(ord); - return (...values) => (arr) => { - const out = arr.slice(); - const length = values.length; - let index = -1; - while (++index < length) { - const value = values[index]; - const insertAt = search(value, out); - out.splice(insertAt, 0, value); - } - return out; - }; -} - -/** - * Collect the values of many arrays into an array of tuples. Each tuple - * contains an element from each of the input arrays at a shared index. The number of - * tuples in the returned array will match the minimum length of the input - * arrays. ie. If any input array is empty, then the output array will be empty. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * - * const result1 = A.zip([1, 2, 3], ["a", "b", "c"]); - * // [[1, "a"], [2, "b"], [3, "c"]] - * const result2 = A.zip([], A.range(100)); // [] - * ``` - * - * @since 2.0.0 - */ -export function zip>( - ...arrays: A -): ReadonlyArray<{ [K in keyof A]: TypeOf }> { - switch (arrays.length) { - case 0: - return []; - case 1: - return arrays[0]; - default: { - const length = Math.min(...arrays.map((a) => a.length)); - const output: Array<{ [K in keyof A]: TypeOf }> = new Array(length); - let index = -1; - while (++index < length) { - output[index] = arrays.map((a) => a[index]) as { - [K in keyof A]: TypeOf; - }; - } - return output; - } - } -} - -/** - * The canonical implementation of Functor for ReadonlyArray. It contains - * the method map. - * - * @since 2.0.0 - */ -export const FunctorArray: Functor = { map }; - -/** - * The canonical implementation of Apply for ReadonlyArray. It contains - * the methods ap and map. - * - * @since 2.0.0 - */ -export const ApplyArray: Apply = { ap, map }; - -/** - * The canonical implementation of Applicative for ReadonlyArray. It contains - * the methods of, ap, and map. - * - * @since 2.0.0 - */ -export const ApplicativeArray: Applicative = { of, ap, map }; - -/** - * The canonical implementation of Chain for ReadonlyArray. It contains - * the methods of, map, and chain. - * - * @since 2.0.0 - */ -export const ChainArray: Chain = { ap, map, chain }; - -/** - * The canonical implementation of Monad for ReadonlyArray. It contains - * the methods of, ap, map, join, and chain. - * - * @since 2.0.0 - */ -export const MonadArray: Monad = { of, ap, map, join, chain }; - -/** - * The canonical implementation of Alt for ReadonlyArray. It contains - * the methods alt and map. - * - * @since 2.0.0 - */ -export const AltArray: Alt = { alt, map }; - -/** - * The canonical implementation of Filterable for ReadonlyArray. It contains - * the methods filter, filterMap, partition, and partitionMap. - * - * @since 2.0.0 - */ -export const FilterableArray: Filterable = { - filter, - filterMap, - partition, - partitionMap, -}; - -/** - * The canonical implementation of Foldable for ReadonlyArray. It contains - * the method reduce. - * - * @since 2.0.0 - */ -export const FoldableArray: Foldable = { reduce }; - -/** - * The canonical implementation of Traversable for ReadonlyArray. It contains - * the methods map, reduce, and traverse. - * - * @since 2.0.0 - */ -export const TraversableArray: Traversable = { - map, - reduce, - traverse, -}; - -/** - * Given an instance Eq create a Eq>. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { EqNumber } from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const { equals } = A.getEq(EqNumber); - * - * const result1 = pipe([1, 2, 3], equals([1, 2, 3])); // true - * const result2 = pipe(A.empty(), equals([1, 2, 3])); // false - * const result3 = pipe([1, 2], equals([2, 1])); // false - * ``` - * - * @since 2.0.0 - */ -export function getEq(S: Eq): Eq> { - return ({ - equals: (a) => (b) => { - if (a === b) { - return true; - } else if (a.length !== b.length) { - return false; - } else { - return a.every((v, i) => S.equals(v)(b[i])); - } - }, - }); -} - -/** - * Given an instance Ord create a Ord>. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { OrdNumber } from "./number.ts"; - * - * const { compare } = A.getOrd(OrdNumber); - * - * const result1 = compare([1, 2], [1, 2]); // 0 - * const result2 = compare([1, 2], [1]); // 1 - * const result3 = compare([1, 2, 4], [1, 2, 3]); // -1 - * ``` - * - * @since 2.0.0 - */ -export function getOrd(O: Ord): Ord> { - return fromCompare((fst, snd) => { - const length = Math.min(fst.length, snd.length); - let index = -1; - // Compare all elements that exist in both arrays - while (++index < length) { - const ordering = O.compare(fst[index], snd[index]); - if (ordering !== 0) return ordering; - } - // If all compared elements are equal, longest array is greater - return sign(fst.length - snd.length); - }); -} - -/** - * Create a Free semigroup over a type A using Array.concat. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const { concat } = A.getSemigroup(); - * - * const result = pipe( - * [1, 2, 3], - * concat([4, 5, 6]), - * ); // [1, 2, 3, 4, 5, 6] - * ``` - * - * @since 2.0.0 - */ -export function getSemigroup(): Semigroup> { - return ({ concat }); -} - -/** - * Create an instance of Show for ReadonlyArray given an instance of Show for - * A. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { ShowNumber } from "./number.ts"; - * - * const { show } = A.getShow(ShowNumber); - * - * const result = show([1, 2, 3]); // "ReadonlyArray[1, 2, 3]" - * ``` - * - * @since 2.0.0 - */ -export function getShow({ show }: Show): Show> { - return ({ - show: (ua) => `ReadonlyArray[${ua.map(show).join(", ")}]`, - }); -} - -/** - * Create an instance of Monoid> given a type A. This instance - * uses array concat and empty as the instance methods for the Monoid. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const monoid = A.getMonoid(); - * - * const result = pipe( - * monoid.empty(), // [] - * monoid.concat([1, 2, 3]), - * ); // [1, 2, 3] - * ``` - * - * @since 2.0.0 - */ -export function getMonoid(): Monoid> { - return ({ - empty, - concat, - }); -} diff --git a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/bifunctor.ts b/vendor/deno.land/x/fun@v.2.0.0-alpha.11/bifunctor.ts deleted file mode 100644 index 531f2c6..0000000 --- a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/bifunctor.ts +++ /dev/null @@ -1,18 +0,0 @@ -import type { $, Kind, TypeClass } from "./kind.ts"; - -/** - * Bifunctor - * https://github.com/fantasyland/static-land/blob/master/docs/spec.md#bifunctor - */ -export interface Bifunctor extends TypeClass { - readonly bimap: ( - fbj: (b: B) => J, - fai: (a: A) => I, - ) => (tab: $) => $; - - readonly mapLeft: ( - fbj: (b: B) => J, - ) => ( - tea: $, - ) => $; -} diff --git a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/category.ts b/vendor/deno.land/x/fun@v.2.0.0-alpha.11/category.ts deleted file mode 100644 index dd2e5ea..0000000 --- a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/category.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { $, Kind, TypeClass } from "./kind.ts"; -import type { Semigroupoid } from "./semigroupoid.ts"; - -/** - * Category - * https://github.com/fantasyland/static-land/blob/master/docs/spec.md#category - */ -export interface Category - extends TypeClass, Semigroupoid { - readonly id: () => $; -} diff --git a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/chain.ts b/vendor/deno.land/x/fun@v.2.0.0-alpha.11/chain.ts deleted file mode 100644 index e2c040e..0000000 --- a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/chain.ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { $, Kind, TypeClass } from "./kind.ts"; -import type { Apply } from "./apply.ts"; - -/** - * Chain - * https://github.com/fantasyland/static-land/blob/master/docs/spec.md#chain - */ -export interface Chain extends TypeClass, Apply { - readonly chain: ( - fati: (a: A) => $, - ) => ( - ta: $, - ) => $; -} diff --git a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/comonad.ts b/vendor/deno.land/x/fun@v.2.0.0-alpha.11/comonad.ts deleted file mode 100644 index d200ca8..0000000 --- a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/comonad.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type { $, Kind, TypeClass } from "./kind.ts"; -import type { Extend } from "./extend.ts"; - -/** - * Comonad - * https://github.com/fantasyland/static-land/blob/master/docs/spec.md#comonad - */ -export interface Comonad extends Extend, TypeClass { - readonly extract: (ta: $) => A; -} diff --git a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/contravariant.ts b/vendor/deno.land/x/fun@v.2.0.0-alpha.11/contravariant.ts deleted file mode 100644 index 01f87b4..0000000 --- a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/contravariant.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { $, Kind, TypeClass } from "./kind.ts"; - -/** - * Contravariant - * https://github.com/fantasyland/static-land/blob/master/docs/spec.md#contravariant - */ -export interface Contravariant extends TypeClass { - readonly contramap: ( - fia: (l: L) => D, - ) => (ua: $) => $; -} diff --git a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/decoder.ts b/vendor/deno.land/x/fun@v.2.0.0-alpha.11/decoder.ts deleted file mode 100644 index c20aa14..0000000 --- a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/decoder.ts +++ /dev/null @@ -1,1928 +0,0 @@ -/** - * The Decoder module contains tools for the course parsing of javascript - * objects into well typed structures. In the event that parsing fails a Decoder - * returns a DecodeError data structure which contains detailed information on - * how and where parsing failed. - * - * @todo Revisit array, tuple, record, and struct to have a concept of ...rest - * - * @module Decoder - * - * @since 2.0.0 - */ - -import type { In, Kind, Out } from "./kind.ts"; -import type { Alt } from "./alt.ts"; -import type { AnyArray, NonEmptyArray } from "./array.ts"; -import type { Applicative } from "./applicative.ts"; -import type { Apply } from "./apply.ts"; -import type { Chain } from "./chain.ts"; -import type { Either } from "./either.ts"; -import type { FnEither } from "./fn_either.ts"; -import type { Forest } from "./tree.ts"; -import type { Functor } from "./functor.ts"; -import type { Literal, Schemable } from "./schemable.ts"; -import type { Monad } from "./monad.ts"; -import type { Monoid } from "./monoid.ts"; -import type { Predicate } from "./predicate.ts"; -import type { ReadonlyRecord } from "./record.ts"; -import type { Refinement } from "./refinement.ts"; -import type { Semigroup } from "./semigroup.ts"; - -import * as FE from "./fn_either.ts"; -import * as TR from "./tree.ts"; -import * as E from "./either.ts"; -import * as A from "./array.ts"; -import * as R from "./record.ts"; -import * as O from "./option.ts"; -import * as S from "./schemable.ts"; -import * as G from "./refinement.ts"; -import { flow, memoize, pipe } from "./fn.ts"; - -/** - * The required tag denotes that a property in a struct or tuple is required. - * This means that the key or index must exist on the struct or tuple. - * - * @since 2.0.0 - */ -export const required = "required" as const; - -/** - * The optional tag denotes that a property in a struct or tuple is optional. - * This means that the key or index may not exist on the struct or tuple. - * - * @since 2.0.0 - */ -export const optional = "optional" as const; - -/** - * The Property type is a type level denotation that specifies whether a key or - * index is required or optional. - * - * @since 2.0.0 - */ -export type Property = typeof required | typeof optional; - -/** - * The Leaf type is the simplest of DecodeErrors. It indicates that some - * concrete value did not match the expected value. The reason field is used to - * indicate the expected value. - * - * @since 2.0.0 - */ -export type Leaf = { - readonly tag: "Leaf"; - readonly value: unknown; - readonly reason: string; -}; - -/** - * The Wrap type is used to give context to an existing DecodeError. This can be - * as simple as wrapping an array decode error to indicate that we first check - * for an array before we check that the array matches a tuple definition. It - * can also be used to constrain or annotate. - * - * @since 2.0.0 - */ -export type Wrap = { - readonly tag: "Wrap"; - readonly context: string; - readonly error: DecodeError; -}; - -/** - * The Key type is used to contextualize an error that occurred at a key in a - * struct. - * - * @since 2.0.0 - */ -export type Key = { - readonly tag: "Key"; - readonly key: string; - readonly property: Property; - readonly error: DecodeError; -}; - -/** - * The Index type is used to contextualize an error that occurred at an index in - * an Array or Tuple. - * - * @since 2.0.0 - */ -export type Index = { - readonly tag: "Index"; - readonly index: number; - readonly property: Property; - readonly error: DecodeError; -}; - -/** - * The Union type is used to associate two or more DecoderErrors as a union of - * errors. - * - * @since 2.0.0 - */ -export type Union = { - readonly tag: "Union"; - readonly errors: readonly [DecodeError, DecodeError, ...DecodeError[]]; -}; - -/** - * The Intersection type is used to associate two or more DecodeErrors as an - * intersection of errors. - * - * @since 2.0.0 - */ -export type Intersection = { - readonly tag: "Intersection"; - readonly errors: readonly [DecodeError, DecodeError, ...DecodeError[]]; -}; - -/** - * The Many type is used to represent zero or more DecodeErrors without - * context. It's purpose is to be used as both Empty and a target for - * concatenation of DecodeErrors that are neither Union or Intersection types. - * This allows us to build a Monoid over DecodeError. - * - * @since 2.0.0 - */ -export type Many = { - readonly tag: "Many"; - readonly errors: readonly DecodeError[]; -}; - -/** - * The DecodeError type is a discriminated union of potential contextualized - * errors that are encountered while decoding. - * - * @since 2.0.0 - */ -export type DecodeError = - | Leaf - | Wrap - | Key - | Index - | Union - | Intersection - | Many; - -/** - * A refinement that returns true when a DecodeError is a Leaf. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.isLeaf(D.leafErr(1, "expected string")); // true - * const result2 = D.isLeaf(D.manyErr()); // false - * ``` - * - * @since 2.0.0 - */ -export function isLeaf(err: DecodeError): err is Leaf { - return err.tag === "Leaf"; -} - -/** - * A refinement that returns true when a DecodeError is a Wrap. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.isWrap(D.wrapErr( - * "This is some context", - * D.leafErr(1, "expected string") - * )); // true - * const result2 = D.isWrap(D.manyErr()); // false - * ``` - * - * @since 2.0.0 - */ -export function isWrap(err: DecodeError): err is Wrap { - return err.tag === "Wrap"; -} - -/** - * A refinement that returns true when a DecodeError is a Key. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.isKey(D.keyErr( - * "one", - * D.leafErr(1, "expected string") - * )); // true - * const result2 = D.isKey(D.manyErr()); // false - * ``` - * - * @since 2.0.0 - */ -export function isKey(err: DecodeError): err is Key { - return err.tag === "Key"; -} - -/** - * A refinement that returns true when a DecodeError is an Index. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.isIndex(D.indexErr( - * 1, - * D.leafErr(1, "expected string") - * )); // true - * const result2 = D.isIndex(D.manyErr()); // false - * ``` - * - * @since 2.0.0 - */ -export function isIndex(err: DecodeError): err is Index { - return err.tag === "Index"; -} - -/** - * A refinement that returns true when a DecodeError is a Union. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.isUnion(D.unionErr( - * D.leafErr(1, "expected null"), - * D.leafErr(1, "expected string") - * )); // true - * const result2 = D.isUnion(D.manyErr()); // false - * ``` - * - * @since 2.0.0 - */ -export function isUnion(err: DecodeError): err is Union { - return err.tag === "Union"; -} - -/** - * A refinement that returns true when a DecodeError is an Intersection. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.isIntersection(D.intersectionErr( - * D.leafErr(1, "expected null"), - * D.leafErr(1, "expected string") - * )); // true - * const result2 = D.isIntersection(D.manyErr()); // false - * ``` - * - * @since 2.0.0 - */ -export function isIntersection(err: DecodeError): err is Intersection { - return err.tag === "Intersection"; -} - -/** - * A refinement that returns true when a DecodeError is a Many. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.isMany(D.intersectionErr( - * D.leafErr(1, "expected null"), - * D.leafErr(1, "expected string") - * )); // false - * const result2 = D.isMany(D.manyErr()); // true - * ``` - * - * @since 2.0.0 - */ -export function isMany(err: DecodeError): err is Many { - return err.tag === "Many"; -} - -/** - * Construct a Lead from an unknown value and a reason for the decode error. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result = D.leafErr(1, "expected string"); - * ``` - * - * @since 2.0.0 - */ -export function leafErr(value: unknown, reason: string): DecodeError { - return { tag: "Leaf", value, reason }; -} - -/** - * Construct a Wrap from context and an existing DecodeError. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result = D.wrapErr( - * "expected password", - * D.leafErr(1, "expected string") - * ); - * ``` - * - * @since 2.0.0 - */ -export function wrapErr(context: string, error: DecodeError): DecodeError { - return { tag: "Wrap", context, error }; -} - -/** - * Construct a Key from a key and an existing DecodeError. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result = D.keyErr( - * "title", - * D.leafErr(1, "expected string"), - * D.required, - * ); - * ``` - * - * @since 2.0.0 - */ -export function keyErr( - key: string, - error: DecodeError, - property: Property = optional, -): DecodeError { - return { tag: "Key", key, property, error }; -} - -/** - * Construct an Index from an index and an existing DecodeError. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result = D.indexErr( - * 1, - * D.leafErr(1, "expected string"), - * D.required, - * ); - * ``` - * - * @since 2.0.0 - */ -export function indexErr( - index: number, - error: DecodeError, - property: Property = optional, -): DecodeError { - return { tag: "Index", index, property, error }; -} - -/** - * Construct a Union from two or more DecodeErrors. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result = D.unionErr( - * D.leafErr(1, "expected string"), - * D.leafErr(1, "expected array"), - * ); - * ``` - * - * @since 2.0.0 - */ -export function unionErr( - ...errors: readonly [DecodeError, DecodeError, ...DecodeError[]] -): DecodeError { - const _errors = pipe( - errors, - A.chain((err) => isUnion(err) ? err.errors : [err]), - ) as unknown as typeof errors; - return { tag: "Union", errors: _errors }; -} - -/** - * Construct an Intersection from two or more DecodeErrors. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result = D.intersectionErr( - * D.leafErr(1, "expected nonempty string"), - * D.leafErr(1, "expected string with no spaces"), - * ); - * ``` - * - * @since 2.0.0 - */ -export function intersectionErr( - ...errors: readonly [DecodeError, DecodeError, ...DecodeError[]] -): DecodeError { - const _errors = pipe( - errors, - A.chain((err) => isIntersection(err) ? err.errors : [err]), - ) as unknown as typeof errors; - return { tag: "Intersection", errors: _errors }; -} - -/** - * Construct a Many from zero or more DecodeErrors. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.manyErr( - * D.leafErr(1, "expected nonempty string"), - * D.leafErr(1, "expected string with no spaces"), - * ); - * const result2 = D.manyErr(); - * ``` - * - * @since 2.0.0 - */ -export function manyErr( - ...errors: readonly DecodeError[] -): DecodeError { - const _errors = pipe( - errors, - A.chain((err) => isMany(err) ? err.errors : [err]), - ); - return { tag: "Many", errors: _errors }; -} - -/** - * Construct a catamorphism over DecodeError, mapping each case of a DecodeError - * into the single type O. - * - * @example - * ```ts - * import type { DecodeError } from "./decoder.ts"; - * import * as D from "./decoder.ts"; - * import * as A from "./array.ts"; - * - * const countErrors: (err: DecodeError) => number = D.match( - * () => 1, - * (_, err) => countErrors(err), - * (_, __, err) => countErrors(err), - * (_, __, err) => countErrors(err), - * A.reduce((acc, err) => acc + countErrors(err), 0), - * A.reduce((acc, err) => acc + countErrors(err), 0), - * A.reduce((acc, err) => acc + countErrors(err), 0), - * ); - * - * const result1 = countErrors(D.leafErr(1, "expected string")); // 1 - * const result2 = countErrors(D.manyErr( - * D.leafErr(1, "expected string"), - * D.leafErr(1, "expected string"), - * D.leafErr(1, "expected string"), - * )); // 3 - * ``` - * - * @since 2.0.0 - */ -export function match( - Leaf: (value: unknown, reason: string) => O, - Wrap: (context: string, error: DecodeError) => O, - Key: (key: string, property: Property, error: DecodeError) => O, - Index: (index: number, property: Property, error: DecodeError) => O, - Union: (errors: readonly [DecodeError, DecodeError, ...DecodeError[]]) => O, - Intersection: ( - errors: readonly [DecodeError, DecodeError, ...DecodeError[]], - ) => O, - Many: (errors: readonly DecodeError[]) => O, -): (e: DecodeError) => O { - return (e) => { - switch (e.tag) { - case "Leaf": - return Leaf(e.value, e.reason); - case "Wrap": - return Wrap(e.context, e.error); - case "Key": - return Key(e.key, e.property, e.error); - case "Index": - return Index(e.index, e.property, e.error); - case "Union": - return Union(e.errors); - case "Intersection": - return Intersection(e.errors); - case "Many": - return Many(e.errors); - } - }; -} - -/** - * An internal helper that wraps JSON.stringify such that it returns an - * Option and handles any thrown errors. - */ -const stringify = O.tryCatch(JSON.stringify); - -/** - * An internal helper that maps a Leaf into a Forest. This is used to - * draw a DecodeError tree. - */ -function onLeaf(value: unknown, reason: string): Forest { - return pipe( - stringify(value), - O.map((str) => `cannot decode ${str}, should be ${reason}`), - O.getOrElse(() => `cannot decode or render, should be ${reason}`), - TR.of, - A.of, - ); -} - -/** - * An internal helper that maps a Wrap into a Forest. This is used to - * draw a DecodeError tree. - */ -function onWrap(context: string, error: DecodeError): Forest { - return [TR.of(context, toForest(error))]; -} - -/** - * An internal helper that maps a Key into a Forest. This is used to - * draw a DecodeError tree. - */ -function onKey( - key: string, - property: Property, - error: DecodeError, -): Forest { - return [TR.of(`${property} property "${key}"`, toForest(error))]; -} - -/** - * An internal helper that maps an Index into a Forest. This is used to - * draw a DecodeError tree. - */ -function onIndex( - index: number, - property: Property, - error: DecodeError, -): Forest { - return [TR.of(`${property} index ${index}`, toForest(error))]; -} - -/** - * An internal helper that maps a Union into a Forest. This is used to - * draw a DecodeError tree. - */ -function onUnion( - errors: readonly [DecodeError, DecodeError, ...DecodeError[]], -): Forest { - return [ - TR.of(`cannot decode union (any of)`, pipe(errors, A.chain(toForest))), - ]; -} - -/** - * An internal helper that maps an Intersection into a Forest. This is - * used to draw a DecodeError tree. - */ -function onIntersection( - errors: readonly [DecodeError, DecodeError, ...DecodeError[]], -): Forest { - return [ - TR.of( - `cannot decode intersection (all of)`, - pipe(errors, A.chain(toForest)), - ), - ]; -} - -/** - * An internal helper that maps a Many into a Forest. This is - * used to draw a DecodeError tree. - */ -function onMany(errors: readonly DecodeError[]): Forest { - return pipe(errors, A.chain(toForest)); -} - -/** - * An internal helper that maps a DecodeError into a Forest. This is - * used to draw a DecodeError tree. - */ -function toForest(err: DecodeError): Forest { - return pipe( - err, - match(onLeaf, onWrap, onKey, onIndex, onUnion, onIntersection, onMany), - ); -} - -/** - * Given a DecodeError, this function will produce a printable tree of errors. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.draw(D.leafErr(1, "string")); - * // "cannot decode 1, should be string" - * - * const result2 = D.draw(D.wrapErr( - * "decoding password", - * D.leafErr(1, "string"), - * )); - * // decoding password - * // └─ cannot decode 1, should be string - * ``` - * - * @since 2.0.0 - */ -export function draw(err: DecodeError): string { - return pipe( - toForest(err), - A.map(TR.drawTree), - (results) => results.join("\n"), - ); -} - -/** - * Construct an empty DecodeError. This is a many that contains no errors. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result = D.empty(); // DecodeError - * ``` - * - * @since 2.0.0 - */ -export function empty(): DecodeError { - return manyErr(); -} - -/** - * Combine two DecodeErrors into one. If both DecodeErrors are Unions then they - * are merged into a Union, if they are both Intersections then are merged into - * an Intersection, otherwise they are wrapped in a Many. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * D.leafErr(1, "string"), - * D.concat(D.leafErr("hello", "number")), - * ); // Many[Leaf, Leaf] - * ``` - * - * @since 2.0.0 - */ -export function concat( - second: DecodeError, -): (first: DecodeError) => DecodeError { - return (first) => - isIntersection(first) && isIntersection(second) - ? intersectionErr(first, second) - : isUnion(first) && isUnion(second) - ? unionErr(first, second) - : manyErr(first, second); -} - -/** - * The canonical implementation of Semigroup for DecodeError. It contains - * the method concat. - * - * @since 2.0.0 - */ -export const SemigroupDecodeError: Semigroup = { - concat, -}; - -/** - * The canonical implementation of Monoid for DecodeError. It contains - * the methods concat and empty. - * - * @since 2.0.0 - */ -export const MonoidDecodeError: Monoid = { - concat, - empty, -}; - -/** - * The Decoded type is an alias of Either. This is the output - * of a Decoder when the parsing fails. - * - * @since 2.0.0 - */ -export type Decoded = Either; - -/** - * Specifies Decoded as a Higher Kinded Type, with covariant - * parameter A corresponding to the 0th index of any substitutions. - * - * @since 2.0.0 - */ -export interface KindDecoded extends Kind { - readonly kind: Decoded>; -} - -/** - * Construct a Decoded from a value A. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.success(1); // Decoder; - * const result2 = D.success("Hello"); // Decoder; - * ``` - * - * @since 2.0.0 - */ -export function success(a: A): Decoded { - return E.right(a); -} - -/** - * Construct a Decoded failure. Specifically, this constructs a Leaf - * DecodeError and wraps it in Left. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.failure(1, "string"); - * // Represents a Decoded value that failed because a 1 was supplied - * // when a string was expected. - * ``` - * - * @since 2.0.0 - */ -export function failure(actual: unknown, error: string): Decoded { - return E.left(leafErr(actual, error)); -} - -/** - * Construct a Decoded from a DecodeError. This allows one to construct a - * Decoded failure directly from DecodeErrors other than Leaf. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.fromDecodeError(D.wrapErr( - * "decoding password", - * D.leafErr(1, "string"), - * )); - * ``` - * - * @since 2.0.0 - */ -export function fromDecodeError(err: DecodeError): Decoded { - return E.left(err); -} - -/** - * A combinator over Decoded that maps a DecodeError into a printable tree. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * import { pipe } from "./fn.ts"; - * - * const result1 = pipe( - * D.failure(1, "string"), - * D.extract, - * ); // Left("cannot decode 1, should be string") - * const result2 = pipe( - * D.success(1), - * D.extract - * ); // Right(1) - * ``` - * - * @since 2.0.0 - */ -export function extract(ta: Decoded): Either { - return pipe(ta, E.mapLeft(draw)); -} - -/** - * The canonical instance of Monad for Decoded. It contains the methods of, ap, map, - * join, and chain. - * - * @since 2.0.0 - */ -export const MonadDecoded: Monad = E.getRightMonad( - SemigroupDecodeError, -); - -/** - * A traversal over a Record of Decoded results. - */ -const traverseRecord = R.traverse(MonadDecoded); - -/** - * A traversal over an Array of Decoded results. - */ -const traverseArray = A.traverse(MonadDecoded); - -/** - * The Decoder type represents a function that parses some input D into a - * value A or a DecodeError. This isn't true parsing of a grammar but instead a - * combination of refinement and error tracking. - * - * @since 2.0.0 - */ -export type Decoder = FnEither; - -/** - * A type that matches any decoder type. - * - * @since 2.0.0 - */ -// deno-lint-ignore no-explicit-any -export type AnyDecoder = Decoder; - -/** - * Specifies Decoder as a Higher Kinded Type, with covariant - * parameter A corresponding to the 0th index of any substitutions and - * contravariant paramter D corresponding to the 0th index of any substitutions. - * - * @since 2.0.0 - */ -export interface KindDecoder extends Kind { - readonly kind: Decoder, Out>; -} - -/** - * Construct a Decoder from a Predicate and a reason for failure or a - * Decoder from a Refinement and a reason for failure. While - * decoding, the value A is passed to the predicate/refinement. If it returns - * true then the result is wrapped in Success, otherwise the value and reason - * are wrapped in Failure. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * import * as R from "./refinement.ts"; - * import { pipe } from "./fn.ts"; - * - * const nonEmpty = D.fromPredicate( - * (s: string) => s.length > 0, // Predicate - * "nonempty string" - * ); - * const string = D.fromPredicate(R.string, "string"); - * const nonEmptyString = pipe( - * string, - * D.compose(nonEmpty), - * ); - * - * const result1 = nonEmptyString(null); // Left(DecodeError) - * const result2 = nonEmptyString(""); // Left(DecodeError) - * const result3 = nonEmptyString("Hello"); // Right("Hello") - * ``` - * - * @since 2.0.0 - */ -export function fromPredicate( - guard: Refinement, - expected: string, -): Decoder; -export function fromPredicate( - guard: Predicate, - expected: string, -): Decoder; -export function fromPredicate( - guard: Predicate, - expected: string, -): Decoder { - return (a: A) => guard(a) ? success(a) : failure(a, expected); -} - -/** - * Create a Decoder from a constant value A. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const one = D.of("one"); - * - * const result = one(null); // Right("one") - * ``` - * - * @since 2.0.0 - */ -export function of(a: A): Decoder { - return MonadDecoder.of(a); -} - -/** - * Given a Decoder returning a function A => I and a Decoder returning a value - * A, combine them into a Decoder returning I. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * import { pipe } from "./fn.ts"; - * - * type Person = { name: string; age: number }; - * const person = (name: string) => (age: number): Person => ({ name, age }); - * - * const result = pipe( - * D.of(person), - * D.ap(D.of("Brandon")), - * D.ap(D.of(37)), - * ); // Decoder - * ``` - * - * @since 2.0.0 - */ -export function ap( - ua: Decoder, -): (ufai: Decoder I>) => Decoder { - return MonadDecoder.ap(ua); -} - -/** - * Provide an alternative Decoder to fallback against if the first one fails. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * import { pipe } from "./fn.ts"; - * - * const numOrStr = pipe( - * D.string, - * D.alt(D.number), - * ); - * - * const result1 = numOrStr(0); // Right(0) - * const result2 = numOrStr("Hello"); // Right("Hello") - * const result3 = numOrStr(null); // Left(DecodeError) - * ``` - * - * @since 2.0.0 - */ -export function alt( - second: Decoder, -): (first: Decoder) => Decoder { - return (first) => (d) => { - const fst = first(d); - if (E.isRight(fst)) { - return fst; - } - const snd = second(d); - if (E.isRight(snd)) { - return snd; - } - return fromDecodeError(unionErr(fst.left, snd.left)); - }; -} - -/** - * Map over the output of a Decoder. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * import { pipe } from "./fn.ts"; - * - * const stringLength = pipe( - * D.string, - * D.map(s => s.length), - * ); - * - * const result1 = stringLength(null); // Left(DecodeError) - * const result2 = stringLength(""); // Right(0) - * const result3 = stringLength("Hello"); // Right(5) - * ``` - * - * @since 2.0.0 - */ -export function map( - fai: (a: A) => I, -): (ua: Decoder) => Decoder { - return MonadDecoder.map(fai); -} - -/** - * Collapse a Decoder that returns a Decoder into a new Decoder. - * - * @since 2.0.0 - */ -export function join( - uua: Decoder>, -): Decoder { - return MonadDecoder.join(uua); -} - -/** - * Chain the result of one decoder into a new decoder. - * - * @since 2.0.0 - */ -export function chain( - faui: (a: A) => Decoder, -): (ua: Decoder) => Decoder { - return MonadDecoder.chain(faui); -} - -/** - * Annotate the DecodeError output of an existing Decoder if it fails while - * parsing. Internally, this uses the DecodeError Wrap constructor. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * import { pipe } from "./fn.ts"; - * - * const decoder = pipe( - * D.literal("a", "b", "c", 1, 2, 3), - * D.annotate("like the song"), - * ); - * - * const result1 = decoder(1); // Right(1) - * const result2 = D.extract(decoder("d")); - * // Left(`like the song - * // └─ cannot decode "d", should be "a", "b", "c", 1, 2, 3`) - * - * ``` - * - * @since 2.0.0 - */ -export function annotate( - context: string, -): (decoder: Decoder) => Decoder { - return FE.mapLeft((error) => wrapErr(context, error)); -} - -/** - * Create a Decoder from a type D. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const num = D.id(); - * - * const result1 = num(1); // Right(1) - * ``` - * - * @since 2.0.0 - */ -export function id(): Decoder { - return E.right; -} - -/** - * Compose two Decoders where the input to second aligns with the output of - * first. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * import * as S from "./string.ts"; - * import { pipe } from "./fn.ts"; - * - * const prefixed = (prefix: T) => - * D.fromPredicate(S.startsWith(prefix), `prefixed with "${prefix}"`); - * - * const eventMethod = pipe( - * D.string, - * D.compose(prefixed("on")), - * ); - * - * const result1 = eventMethod(null); // Left(DecodeError) - * const result2 = eventMethod("hello"); // Left(DecodeError) - * const result3 = eventMethod("onClick"); // Right("onClick"); - * ``` - * - * @since 2.0.0 - */ -export function compose( - second: Decoder, -): (first: Decoder) => Decoder { - return FE.compose(second); -} - -/** - * Map over the input of a Decoder contravariantly. This allows one to use an - * existing decoder against a transformed input. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * import { pipe } from "./fn.ts"; - * - * const fromStr = pipe( - * D.tuple(D.string, D.string), - * D.contramap((s) => [s, s] as const), - * ); - * - * const result1 = fromStr("hello"); // Right(["hello", "hello"]) - * const result2 = fromStr(null); // Left(DecodeError) - * ``` - * - * @since 2.0.0 - */ -export function contramap( - fld: (l: L) => D, -): (ua: Decoder) => Decoder { - return FE.contramap(fld); -} - -/** - * Map over the input and output of a Decoder. This is effectively a combination - * of map and contramap in a single operator. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * import { pipe } from "./fn.ts"; - * - * const fromStr = pipe( - * D.tuple(D.string, D.string), - * D.dimap( - * (s) => [s, s], - * ([s]) => [s, s.length] as const, - * ), - * ); - * - * const result1 = fromStr("hello"); // Right(["hello", 5]) - * const result2 = fromStr(null); // Left(DecodeError) - * ``` - * - * @since 2.0.0 - */ -export function dimap( - fld: (l: L) => D, - fai: (a: A) => I, -): (ua: Decoder) => Decoder { - return FE.dimap(fld, fai); -} - -/** - * Apply a refinement or predicate to the output of an existing Decoder. This is - * useful for building complicated Decoders. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * import { pipe } from "./fn.ts"; - * - * const nonEmptyString = pipe( - * D.string, - * D.refine(s => s.length > 0, "nonempty"), - * ); - * - * const result1 = nonEmptyString(null); // Left(DecodeError) - * const result2 = nonEmptyString(""); // Left(DecodeError) - * const result3 = nonEmptyString("Hello"); // Right("Hello") - * ``` - * - * @since 2.0.0 - */ -export function refine( - refinement: Refinement, - id: string, -): (from: Decoder) => Decoder; -export function refine( - refinement: Predicate, - id: string, -): (from: Decoder) => Decoder; -export function refine( - refinement: Predicate, - id: string, -): (from: Decoder) => Decoder { - return compose(fromPredicate(refinement, id)); -} - -/** - * An internal helper that maps a Literal to a string for use - * in DecodeErrors - */ -const literalToString = (literal: S.Literal): string => - typeof literal === "string" ? `"${literal}"` : `${literal}`; - -/** - * Create a Decoder from a list of literal values. Literal values can be - * strings, numbers, booleans, null, or undefined. This decoder will only return - * Right if the value being decoded has object equality with one of the literals - * supplied. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const firstThree = D.literal(1, 2, 3); - * - * const result1 = firstThree(0); // Left(DecodeError) - * const result2 = firstThree(1); // Right(1) - * const result3 = firstThree(2); // Right(2) - * const result4 = firstThree(3); // Right(3) - * const result5 = firstThree(null); // Left(DecodeError) - * ``` - * - * @since 2.0.0 - */ -export function literal>( - ...literals: A -): Decoder { - return fromPredicate( - G.literal(...literals), - literals.map(literalToString).join(", "), - ) as unknown as Decoder; -} - -/** - * A Decoder that always returns true and casts the result to unknown. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.unknown(null); // Right(null) - * const result2 = D.unknown("Brandon"); // Right("Brandon") - * ``` - * - * @since 2.0.0 - */ -export const unknown: Decoder = E.right; - -/** - * A Decoder that validates strings. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.string(null); // Left(DecodeError) - * const result2 = D.string("Hello"); // Right("Hello") - * ``` - * - * @since 2.0.0 - */ -export const string: Decoder = fromPredicate( - G.string, - "string", -); - -/** - * A Decoder that validates numbers. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.number(null); // Left(DecodeError) - * const result2 = D.number(1); // Right(1) - * ``` - * - * @since 2.0.0 - */ -export const number: Decoder = fromPredicate( - G.number, - "number", -); - -/** - * A Decoder that validates booleans. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.boolean(null); // Left(DecodeError) - * const result2 = D.boolean(true); // Right(true) - * ``` - * - * @since 2.0.0 - */ -export const boolean: Decoder = fromPredicate( - G.boolean, - "boolean", -); - -/** - * A Decoder that attempts to decode a Date using new Date(value). If the - * process of calling new Date throws or the getTime method on the new date - * object returns NaN, then a failure is returned. If a Date can be derived from - * the object then a Date object is returned. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.date(null); // Left(DecodeError) - * const result2 = D.date(Date.now()); // Right(Date) - * const result3 = D.date("1990"); // Right(Date) - * const result4 = D.date(new Date()); // Right(Date) - * ``` - * - * @since 2.0.0 - */ -export function date(a: unknown): Decoded { - try { - // deno-lint-ignore no-explicit-any - const _date = new Date(a as any); - return isNaN(_date.getTime()) ? failure(a, "date") : success(_date); - } catch { - return failure(a, "date"); - } -} - -/** - * A Decoder that checks that an object is both an Array and that it's length is - * N. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const two = D.arrayN(2); - * - * const result1 = two(null); // Left(DecodeError) - * const result2 = two([]); // Left(DecodeError) - * const result3 = two(["hello"]); // Left(DecodeError) - * const result4 = two(["hello", 2]); // Right(["hello", 2]) - * ``` - * - * @since 2.0.0 - */ -export function arrayN( - length: N, -): Decoder & { length: N }> { - return fromPredicate(G.isArrayN(length), `tuple of length ${length}`); -} - -/** - * A Decoder combinator that will check that a value is a string and then - * attempt to parse it as JSON. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * import { pipe } from "./fn.ts"; - * - * const person = D.struct({ - * name: D.string, - * age: D.number, - * }); - * const json = D.json(person); - * - * const result1 = json(null); // Left(DecodeError) - * const result2 = json(""); // Left(DecodeError) - * const result3 = json('{"name":"Brandon","age":37}'); - * // Right({ name: "Brandon", age: 37 }) - * ``` - * - * @since 2.0.0 - */ -export function json(decoder: Decoder): Decoder { - return pipe( - string, - compose((s) => { - try { - return success(JSON.parse(s)); - } catch { - return failure(s, "json"); - } - }), - compose(decoder), - ); -} - -/** - * A Decoder combinator that intersects two existing decoders. The resultant - * decoder ensures that an input matches both decoders. Nested intersection - * combinators will combine and flatten their error trees. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * import { pipe } from "./fn.ts"; - * - * const person = pipe( - * D.struct({ name: D.string }), - * D.intersect(D.partial({ age: D.string })), - * ); - * - * const result1 = person(null); // Left(DecodeError) - * const result2 = person({ name: "Brandon" }); // Right({ name: "Brandon" }) - * const result3 = person({ name: "Brandon", age: 37 }); - * // Right({ name: "Brandon", age: 37 }) - * const result4 = person({ age: 37 }); // Left(DecodeError) - * ``` - * - * @since 2.0.0 - */ -export function intersect( - second: Decoder, -): (first: Decoder) => Decoder> { - return (first: Decoder): Decoder> => (a) => { - const fst = first(a) as Decoded>; - const snd = second(a) as Decoded>; - - if (E.isRight(snd) && E.isRight(fst)) { - return success( - Object.assign({}, fst.right, snd.right), - ); - } - - if (E.isLeft(fst)) { - if (E.isLeft(snd)) { - return fromDecodeError( - intersectionErr(fst.left, snd.left), - ); - } - return fst; - } - return snd; - }; -} - -/** - * Provide an alternative Decoder to fallback against if the first one fails. - * This is an alias of alt. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * import { pipe } from "./fn.ts"; - * - * const numOrStr = pipe( - * D.string, - * D.union(D.number), - * ); - * - * const result1 = numOrStr(0); // Right(0) - * const result2 = numOrStr("Hello"); // Right("Hello") - * const result3 = numOrStr(null); // Left(DecodeError) - * ``` - * - * @since 2.0.0 - */ -export function union( - right: Decoder, -): (left: Decoder) => Decoder { - return alt(right); -} - -/** - * An internal literal instance over null used in the nullable combinator. - * - * @since 2.0.0 - */ -export const _null = literal(null); - -/** - * A decoder combinator that modifies an existing decoder to accept null as an - * input value and a successful return value. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const orNull = D.nullable(D.string); - * - * const result1 = orNull(null); // Right(null) - * const result2 = orNull(2); // Left(DecodeError) - * const result3 = orNull("Hello"); // Right("Hello") - * ``` - * - * @since 2.0.0 - */ -export function nullable( - second: Decoder, -): Decoder { - return pipe(_null, union(second)) as Decoder; -} - -/** - * An internal literal instance over undefined used in the undefinable combinator. - * - * @since 2.0.0 - */ -export const _undefined = literal(undefined); - -/** - * A decoder combinator that modifies an existing decoder to accept undefined - * as an input value and a successful return value. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const orUndefined = D.undefinable(D.string); - * - * const result1 = orUndefined(undefined); // Right(null) - * const result2 = orUndefined(2); // Left(DecodeError) - * const result3 = orUndefined("Hello"); // Right("Hello") - * ``` - * - * @since 2.0.0 - */ -export function undefinable( - second: Decoder, -): Decoder { - return pipe(_undefined, union(second)) as Decoder< - D | undefined, - A | undefined - >; -} - -/** - * An internal optimization decoder that checks that an input is a non-null - * object. - * - * @since 2.0.0 - */ -const _record = fromPredicate(G.isRecord, "record"); - -/** - * A decoder against a record with string keys and values that match the items - * decoder. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const strings = D.record(D.string); - * - * const result1 = strings(null); // Left(DecodeError) - * const result2 = strings({}); // Right({}) - * const result3 = strings([]); // Right({}) - * const result4 = strings({"one": 1}); // Left(DecodeError) - * const result5 = strings({ one: "one" }); // Right({ one: "one" }) - * ``` - * - * @since 2.0.0 - */ -export function record( - items: Decoder, -): Decoder> { - return flow( - _record, - E.chain(flow( - traverseRecord((a, index) => - pipe(items(a), E.mapLeft((e) => keyErr(index, e))) - ), - E.mapLeft((e) => wrapErr("cannot decode record", e)), - )), - ); -} - -/** - * An internal optimization decoder that checks that an input is an array. - * - * @since 2.0.0 - */ -const _array = fromPredicate(G.isArray, "array"); - -/** - * A decoder against an array with only values that adhere to the passed in - * items decoder. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const strings = D.array(D.string); - * - * const result1 = strings(null); // Left(DecodeError) - * const result2 = strings({}); // Left(DecodeError) - * const result3 = strings([]); // Right([]) - * const result4 = strings([1, 2, 3]); // Left(DecodeError) - * const result5 = strings(["one", "two"]); // Right(["one", "two"]) - * ``` - * - * @since 2.0.0 - */ -export function array( - items: Decoder, -): Decoder> { - return flow( - _array, - E.chain(flow( - traverseArray((a, index) => - pipe(items(a), E.mapLeft((e) => indexErr(index, e))) - ), - E.mapLeft((e) => wrapErr("cannot decode array", e)), - )), - ); -} - -/** - * A decoder over a heterogenous tuple. This tuple can have different values for - * each tuple element, but is constrained to a specific size and order. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const tuple = D.tuple(D.string, D.number); - * - * const result1 = tuple([]); // Left(DecodeError) - * const result2 = tuple([3, "Hello"]); // Left(DecodeError) - * const result3 = tuple(["Brandon", 37]); // Right(["Brandon", 37]) - * ``` - * - * @since 2.0.0 - */ -export function tuple( - ...items: { [K in keyof A]: Decoder } -): Decoder { - return flow( - arrayN(items.length), - E.chain( - traverseArray((a, index) => { - const decoder: AnyDecoder = items[index]; - return pipe( - decoder(a), - E.mapLeft((e) => indexErr(index, e, "required")), - ); - }), - ), - E.mapLeft((e) => wrapErr("cannot decode tuple", e)), - ) as Decoder; -} - -/** - * An internal helper function that traverses a structure, decoding each entry - * in the struct with its corresponding decoder. - * - * @since 2.0.0 - */ -const traverseStruct = - (items: Record>) => - (a: Record) => - pipe( - items, - traverseRecord((decoder, key) => - pipe( - decoder(a[key]), - E.mapLeft((e) => keyErr(key, e, "required")), - ) - ), - ); - -/** - * A decoder over a heterogenous record type. This struct can have different - * values at each key, and the resultant decoder will ensure that each key - * matches its corresponding decoder. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const person = D.struct({ name: D.string, age: D.number }); - * - * const result1 = person({}); // Left(DecodeError) - * const result2 = person(null); // Left(DecodeError) - * const result3 = person({ name: "Brandon" }); // Left(DecodeError) - * const result4 = person({ name: "Brandon", age: 37 }); - * // Right({ name: "Brandon", age: 37 }) - * ``` - * - * @since 2.0.0 - */ -export function struct( - items: { [K in keyof A]: Decoder }, -): Decoder { - return flow( - _record, - E.chain(traverseStruct(items)), - E.mapLeft((e) => wrapErr("cannot decode struct", e)), - ) as Decoder; -} - -/** - * An internal helper decoded value that represents a partial value that does - * not exist in the record being decoded. - * - * @since 2.0.0 - */ -const skipProperty: Decoded> = success( - E.left(undefined), -); - -/** - * An internal helper decoded value that represents a partial value that does - * exists but is undefined. - * - * @since 2.0.0 - */ -const undefinedProperty: Decoded> = success( - E.right(undefined), -); - -/** - * An internal helper function that traverses a partial, decoding each entry - * in the struct with its corresponding decoder and handling the cases where a - * property does not exist on the struct and where a property is undefined. - * - * @since 2.0.0 - */ -const traversePartial = - (items: Record>) => - (a: Record) => - pipe( - items, - traverseRecord((decoder, key) => { - if (a[key] === undefined) { - return key in a ? undefinedProperty : skipProperty; - } - return pipe( - decoder(a[key]), - E.bimap((e) => keyErr(key, e), E.right), - ); - }), - ); - -/** - * An internal helper that is used to construct a partial record where - * Left values are not added to the resultant record. - * - * @since 2.0.0 - */ -const compactRecord = ( - r: Record>, -): Record => { - const out: Record = {}; - for (const k in r) { - const rk = r[k]; - if (E.isRight(rk)) { - out[k] = rk.right; - } - } - return out; -}; - -/** - * A decoder over a heterogenous record type. This struct can have different - * values at each key or the key can not exist or the value can be undefined, - * and the resultant decoder will ensure that each key - * matches its corresponding decoder. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const person = D.partial({ name: D.string, age: D.number }); - * - * const result1 = person({}); // Right({}) - * const result2 = person(null); // Left(DecodeError) - * const result3 = person({ name: "Brandon" }); // Right({ name: "Brandon" }) - * const result4 = person({ name: "Brandon", age: 37 }); - * // Right({ name: "Brandon", age: 37 }) - * ``` - * - * @since 2.0.0 - */ -export function partial( - items: { [K in keyof A]: Decoder }, -): Decoder { - return flow( - _record, - E.chain(traversePartial(items)), - E.bimap((e) => wrapErr("cannot decode partial struct", e), compactRecord), - ) as Decoder; -} - -/** - * The Lazy decoder combinator allows for the creation of recursive or mutually - * recursive decoding. The passed decoder thunk is memoized to keep the vm from - * falling into an infinite loop. - * - * @example - * ```ts - * import type { Decoder } from "./decoder.ts"; - * - * import * as D from "./decoder.ts"; - * import { pipe } from "./fn.ts"; - * - * type Person = { name: string; age: number; children: ReadonlyArray }; - * const person = ( - * name: string, - * age: number, - * children: ReadonlyArray = [] - * ): Person => ({ name, age, children }); - * - * const decode: Decoder = D.lazy( - * "Person", - * () => D.struct({ name: D.string, age: D.number, children: D.array(decode) }), - * ); - * - * const rufus = person("Rufus", 1); - * const brandon = person("Brandon", 37, [rufus]); - * const jackie = person("Jackie", 57, [brandon]); - * - * const result1 = decode(null); // Left(DecodeError) - * const result2 = decode(rufus); // Right(rufus) - * const result3 = decode(brandon); // Right(brandon) - * const result4 = decode(jackie); // Right(jackie) - * ``` - * - * @since 2.0.0 - */ -export function lazy( - id: string, - decoder: () => Decoder, -): Decoder { - const get = memoize>(decoder); - return (u) => pipe(get()(u), E.mapLeft((e) => wrapErr(`lazy type ${id}`, e))); -} - -/** - * Specifies Decoder as a Higher Kinded Type, with covariant - * parameter A corresponding to the 0th index of any substitutions. This is a - * specific Kind used to construct the Schemable Decoder. - * - * @since 2.0.0 - */ -export interface KindUnknownDecoder extends Kind { - readonly kind: Decoder>; -} - -/** - * The canonical implementation of Functor for Decoder. It contains - * the method map. - * - * @since 2.0.0 - */ -export const FunctorDecoder: Functor = { map }; - -/** - * The canonical implementation of Apply for Decoder. It contains - * the methods ap and map. - * - * @since 2.0.0 - */ -export const ApplyDecoder: Apply = { ap, map }; - -/** - * The canonical implementation of Applicative for Decoder. It contains - * the methods of, ap, and map. - * - * @since 2.0.0 - */ -export const ApplicativeDecoder: Applicative = { of, ap, map }; - -/** - * The canonical implementation of Chain for Decoder. It contains - * the methods ap, map, and chain. - * - * @since 2.0.0 - */ -export const ChainDecoder: Chain = { ap, map, chain }; - -/** - * The canonical implementation of Monad for Decoder. It contains - * the methods of, ap, map, join, and chain. - * - * @since 2.0.0 - */ -export const MonadDecoder: Monad = FE.getRightMonad( - SemigroupDecodeError, -); - -/** - * The canonical implementation of Alt for Decoder. It contains - * the methods alt and map - * - * @since 2.0.0 - */ -export const AltDecoder: Alt = { alt, map }; - -/** - * The canonical implementation of Schemable for Decoder. It contains - * the methods unknown, string, number, boolean, literal, nullable, undefinable, - * record, array, tuple, struct, partial, intersect, union, and lazy. - * - * @since 2.0.0 - */ -export const SchemableDecoder: Schemable = { - unknown: () => unknown, - string: () => string, - number: () => number, - boolean: () => boolean, - literal, - nullable, - undefinable, - record, - array, - tuple: tuple as Schemable["tuple"], - struct, - partial, - intersect, - union, - lazy, -}; diff --git a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/either.ts b/vendor/deno.land/x/fun@v.2.0.0-alpha.11/either.ts deleted file mode 100644 index e360dbb..0000000 --- a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/either.ts +++ /dev/null @@ -1,311 +0,0 @@ -import type { $, Kind, Out } from "./kind.ts"; -import type { Alt } from "./alt.ts"; -import type { Applicative } from "./applicative.ts"; -import type { Bifunctor } from "./bifunctor.ts"; -import type { Extend } from "./extend.ts"; -import type { Monad } from "./monad.ts"; -import type { Monoid } from "./monoid.ts"; -import type { Ord } from "./ord.ts"; -import type { Predicate } from "./predicate.ts"; -import type { Refinement } from "./refinement.ts"; -import type { Semigroup } from "./semigroup.ts"; -import type { Eq } from "./eq.ts"; -import type { Show } from "./show.ts"; -import type { Traversable } from "./traversable.ts"; - -import * as O from "./option.ts"; -import { isNotNil } from "./nilable.ts"; -import { fromCompare } from "./ord.ts"; -import { flow, pipe } from "./fn.ts"; - -export type Left = { tag: "Left"; left: L }; - -export type Right = { tag: "Right"; right: R }; - -export type Either = Left | Right; - -export interface KindEither extends Kind { - readonly kind: Either, Out>; -} - -export interface KindRightEither extends Kind { - readonly kind: Either>; -} - -export function left(left: E): Either { - return ({ tag: "Left", left }); -} - -export function right(right: A): Either { - return ({ tag: "Right", right }); -} - -export function of(a: A): Either { - return right(a); -} - -export function throwError(b: B): Either { - return left(b); -} - -export function fromNullable(fe: () => E) { - return ( - a: A, - ): Either> => (isNotNil(a) ? right(a) : left(fe())); -} - -export function tryCatch( - fa: () => A, - onError: (e: unknown) => E, -): Either { - try { - return right(fa()); - } catch (e) { - return left(onError(e)); - } -} - -export function tryCatchWrap( - fn: (...as: AS) => A, - onError: (e: unknown) => E, -): (...as: AS) => Either { - return (...as: AS) => { - try { - return right(fn(...as)); - } catch (e) { - return left(onError(e)); - } - }; -} - -export function fromPredicate( - refinement: Refinement, - onFalse: (a: A) => E, -): (a: A) => Either; -export function fromPredicate( - predicate: Predicate, - onFalse: (a: A) => E, -): (a: A) => Either { - return (a: A) => predicate(a) ? right(a) : left(onFalse(a)); -} - -export function match( - onLeft: (left: L) => B, - onRight: (right: R) => B, -): (ta: Either) => B { - return (ta) => isLeft(ta) ? onLeft(ta.left) : onRight(ta.right); -} - -export function getOrElse(onLeft: (e: E) => A) { - return (ma: Either): A => isLeft(ma) ? onLeft(ma.left) : ma.right; -} - -export function getRight(ma: Either): O.Option { - return pipe(ma, match(O.constNone, O.some)); -} - -export function getLeft(ma: Either): O.Option { - return pipe(ma, match(O.some, O.constNone)); -} - -export function isLeft(m: Either): m is Left { - return m.tag === "Left"; -} - -export function isRight(m: Either): m is Right { - return m.tag === "Right"; -} - -export function getShow( - SB: Show, - SA: Show, -): Show> { - return ({ - show: match( - (left) => `Left(${SB.show(left)})`, - (right) => `Right(${SA.show(right)})`, - ), - }); -} - -export function getEq( - SB: Eq, - SA: Eq, -): Eq> { - return ({ - equals: (b) => (a) => { - if (isLeft(a)) { - if (isLeft(b)) { - return SB.equals(b.left)(a.left); - } - return false; - } - - if (isLeft(b)) { - return false; - } - return SA.equals(b.right)(a.right); - }, - }); -} - -export function getOrd( - OB: Ord, - OA: Ord, -): Ord> { - return fromCompare((fst, snd) => - isLeft(fst) - ? isLeft(snd) ? OB.compare(fst.left, snd.left) : -1 - : isLeft(snd) - ? 1 - : OA.compare(fst.right, snd.right) - ); -} - -export function getLeftSemigroup( - SE: Semigroup, -): Semigroup> { - return ({ - concat: (x) => (y) => - isRight(x) ? x : isRight(y) ? y : left(SE.concat(x.left)(y.left)), - }); -} - -export function getRightSemigroup( - SA: Semigroup, -): Semigroup> { - return ({ - concat: (x) => (y) => - isLeft(x) ? x : isLeft(y) ? y : right(SA.concat(x.right)(y.right)), - }); -} - -export function getRightMonoid( - MA: Monoid, -): Monoid> { - return ({ - ...getRightSemigroup(MA), - empty: () => right(MA.empty()), - }); -} - -export function getRightMonad( - { concat }: Semigroup, -): Monad> { - return ({ - of, - ap: (ua) => (ufai) => - isLeft(ufai) - ? (isLeft(ua) ? left(concat(ua.left)(ufai.left)) : ufai) - : (isLeft(ua) ? ua : right(ufai.right(ua.right))), - map, - join, - chain, - }); -} - -export function bimap( - fbj: (b: B) => J, - fai: (a: A) => I, -): (ta: Either) => Either { - return (ta) => isLeft(ta) ? left(fbj(ta.left)) : right(fai(ta.right)); -} - -export function swap(ma: Either): Either { - return isLeft(ma) ? right(ma.left) : left(ma.right); -} - -export function stringifyJSON( - u: unknown, - onError: (reason: unknown) => E, -): Either { - return tryCatch(() => JSON.stringify(u), onError); -} - -export function map( - fai: (a: A) => I, -): (ta: Either) => Either { - return (ta) => isLeft(ta) ? ta : right(fai(ta.right)); -} - -export function chainLeft( - fbj: (b: B) => Either, -): (ta: Either) => Either { - return (tab) => (isLeft(tab) ? fbj(tab.left) : tab); -} - -export function ap( - ua: Either, -): (ufai: Either I>) => Either { - return (ufai) => - isLeft(ua) ? ua : isLeft(ufai) ? ufai : right(ufai.right(ua.right)); -} - -export function chain( - fati: (a: A) => Either, -): (ta: Either) => Either { - return (ta) => isLeft(ta) ? ta : fati(ta.right); -} - -export function join( - ta: Either>, -): Either { - return isLeft(ta) ? ta : ta.right; -} - -export function mapLeft( - fbj: (b: B) => J, -): (ta: Either) => Either { - return (ta) => isLeft(ta) ? left(fbj(ta.left)) : ta; -} - -export function alt( - tb: Either, -): (ta: Either) => Either { - return (ta) => isLeft(ta) ? tb : ta; -} - -export function extend( - ftai: (ta: Either) => I, -): (ta: Either) => Either { - return (ta) => right(ftai(ta)); -} - -export function reduce( - foao: (o: O, a: A) => O, - o: O, -): (ta: Either) => O { - return (ta) => isLeft(ta) ? o : foao(o, ta.right); -} - -export function traverse( - A: Applicative, -): ( - faui: (a: A) => $, -) => (ta: Either) => $, J, K], [L], [M]> { - //deno-lint-ignore no-explicit-any - const onLeft: any = flow(left, A.of); - //deno-lint-ignore no-explicit-any - const mapRight: any = A.map(right); - return (faui) => match(onLeft, flow(faui, mapRight)); -} - -export const MonadEither: Monad = { - of, - ap, - map, - join, - chain, -}; - -export const BifunctorEither: Bifunctor = { bimap, mapLeft }; - -export const AltEither: Alt = { alt, map }; - -export const ExtendEither: Extend = { map, extend }; - -export const TraversableEither: Traversable = { - map, - reduce, - traverse, -}; diff --git a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/eq.ts b/vendor/deno.land/x/fun@v.2.0.0-alpha.11/eq.ts deleted file mode 100644 index 512c3c0..0000000 --- a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/eq.ts +++ /dev/null @@ -1,639 +0,0 @@ -/** - * This file contains all of the tools for creating and - * composing Eqs. Since a Eq encapsulates the concept - * of equality, this file contains a lot of tools for - * comparing objects to see if they are the same, or can - * be treated the same. - */ - -import type { In, Kind, Out } from "./kind.ts"; -import type { Contravariant } from "./contravariant.ts"; -import type { NonEmptyArray } from "./array.ts"; -import type { ReadonlyRecord } from "./record.ts"; -import type { Literal, Schemable, Spread } from "./schemable.ts"; - -import { isNil } from "./nilable.ts"; -import { memoize } from "./fn.ts"; -import { isSubrecord } from "./record.ts"; - -/** - * A Eq is an algebra with a notion of equality. Specifically, - * a Eq for a type T has an equal method that determines if the - * two objects are the same. Eqs can be combined, like many - * algebraic structures. The combinators for Eq in fun can be found - * in [eq.ts](./eq.ts). - * - * An instance of a Eq must obey the following laws: - * - * 1. Reflexivity: equals(a)(a) === true - * 2. Symmetry: equals(a)(b) === equals(b)(a) - * 3. Transitivity: if equals(a)(b) and equals(b)(c), then equals(a)(c) - * - * The original type came from [static-land](https://github.com/fantasyland/static-land/blob/master/docs/spec.md#Eq) - * - * @since 2.0.0 - */ -export interface Eq { - readonly equals: (second: T) => (first: T) => boolean; -} - -/** - * Specifies Eq as a Higher Kinded Type, with - * covariant parameter A corresponding to the 0th - * index of any Substitutions. - * - * @since 2.0.0 - */ -export interface KindEq extends Kind { - readonly kind: Eq>; -} - -/** - * Specifies Eq as a Higher Kinded Type, with - * contravariant parameter D corresponding to the 0th - * index of any Substitutions. - * - * @since 2.0.0 - */ -export interface KindContraEq extends Kind { - readonly kind: Eq>; -} - -/** - * Create a Eq from an uncurried function that checks equality. - * - * @example - * ```ts - * import { fromEquals } from "./eq.ts"; - * import { pipe } from "./fn.ts"; - * - * const EqNumber = fromEquals( - * (first, second) => first === second - * ); - * - * const result = pipe( - * 1, - * EqNumber.equals(1) - * ); // true - * ``` - * - * @since 2.0.0 - */ -export function fromEquals( - equals: (first: A, second: A) => boolean, -): Eq { - return ({ - equals: (second) => (first) => first === second || equals(first, second), - }); -} - -/** - * Create a Eq that casts the inner type of another Eq to - * Readonly. - * - * @example - * ```ts - * import { readonly, fromEquals } from "./eq.ts"; - * - * // This has type Eq> - * const EqMutableArray = fromEquals>( - * (first, second) => first.length === second.length - * && first.every((value, index) => value === second[index]) - * ); - * - * // This has type Eq>> - * const EqReadonlyArray = readonly(EqMutableArray); - * ``` - * - * @since 2.0.0 - */ -export function readonly(eq: Eq): Eq> { - return eq; -} - -/** - * A Eq that can compare any unknown values (and thus can - * compare any values). Underneath it uses strict equality - * for the comparison. - * - * @example - * ```ts - * import { unknown } from "./eq.ts"; - * - * const result1 = unknown.equals(1)("Hello"); // false - * const result2 = unknown.equals(1)(1); // true - * ``` - * - * @since 2.0.0 - */ -export const unknown: Eq = { - equals: (second) => (first) => first === second, -}; - -/** - * A Eq that compares strings using strict equality. - * - * @example - * ```ts - * import { string } from "./eq.ts"; - * - * const result1 = string.equals("World")("Hello"); // false - * const result2 = string.equals("")(""); // true - * ``` - * - * @since 2.0.0 - */ -export const string: Eq = unknown; - -/** - * A Eq that compares number using strict equality. - * - * @example - * ```ts - * import { number } from "./eq.ts"; - * - * const result1 = number.equals(1)(2); // false - * const result2 = number.equals(1)(1); // true - * ``` - * - * @since 2.0.0 - */ -export const number: Eq = unknown; - -/** - * A Eq that compares booleans using strict equality. - * - * @example - * ```ts - * import { boolean } from "./eq.ts"; - * - * const result1 = boolean.equals(true)(false); // false - * const result2 = boolean.equals(true)(true); // true - * ``` - * - * @since 2.0.0 - */ -export const boolean: Eq = unknown; - -/** - * Creates a Eq that compares a union of literals - * using strict equality. - * - * @example - * ```ts - * import { literal } from "./eq.ts"; - * - * const { equals } = literal(1, 2, "Three"); - * - * const result1 = equals(1)("Three"); // false - * const result2 = equals("Three")("Three"); // true - * ``` - * - * @since 2.0.0 - */ -export function literal>( - ..._: A -): Eq { - return unknown; -} - -/** - * Creates a derivative Eq that can also compare null - * values in addition to the source eq. - * - * @example - * ```ts - * import { nullable, number } from "./eq.ts"; - * - * const { equals } = nullable(number); - * - * const result1 = equals(1)(null); // false - * const result2 = equals(null)(null); // true - * ``` - * - * @since 2.0.0 - */ -export function nullable(eq: Eq): Eq { - return { - equals: (second) => (first) => - (isNil(first) || isNil(second)) - ? first === second - : eq.equals(second)(first), - }; -} - -/** - * Creates a derivative Eq that can also compare undefined - * values in addition to the source eq. - * - * @example - * ```ts - * import { undefinable, number } from "./eq.ts"; - * - * const { equals } = undefinable(number); - * - * const result1 = equals(1)(undefined); // false - * const result2 = equals(undefined)(undefined); // true - * ``` - * - * @since 2.0.0 - */ -export function undefinable(eq: Eq): Eq { - return { - equals: (second) => (first) => - (isNil(first) || isNil(second)) - ? first === second - : eq.equals(second)(first), - }; -} - -/** - * Creates a Eq that compares readonly records with items - * that have the type compared in the supplied eq. - * - * @example - * ```ts - * import { record, number } from "./eq.ts"; - * - * const { equals } = record(number); - * - * const result1 = equals({ one: 1 })({ one: 2 }); // false - * const result2 = equals({ one: 1 })({ one: 1 }); // true - * ``` - * - * @since 2.0.0 - */ -export function record(eq: Eq): Eq> { - const isSub = isSubrecord(eq); - return { - equals: (second) => (first) => isSub(second)(first) && isSub(first)(second), - }; -} - -/** - * Creates a Eq that compares readonly array with items - * that have the type compared in the supplied eq. - * - * @example - * ```ts - * import { array, number } from "./eq.ts"; - * - * const { equals } = array(number); - * - * const result1 = equals([1, 2])([1, 2, 3]); // false - * const result2 = equals([1, 2])([1, 2]); // true - * ``` - * - * @since 2.0.0 - */ -export function array(eq: Eq): Eq> { - return { - equals: (second) => (first) => - first.length === second.length && - first.every((value, index) => eq.equals(second[index])(value)), - }; -} - -/** - * Creates a eq that compares, index for index, tuples according - * to the order and eqs passed into tuple. - * - * @example - * ```ts - * import { tuple, number, string } from "./eq.ts"; - * - * const { equals } = tuple(number, string); - * - * const result1 = equals([1, "Hello"])([1, "Goodbye"]); // false - * const result2 = equals([1, ""])([1, ""]); // true - * ``` - * - * @since 2.0.0 - */ -// deno-lint-ignore no-explicit-any -export function tuple>>( - ...Eqs: T -): Eq<{ [K in keyof T]: T[K] extends Eq ? A : never }> { - return fromEquals((first, second) => - Eqs.every((E, i) => E.equals(first[i])(second[i])) - ); -} - -/** - * Create a eq that compares, key for key, structs according - * to the structure of the eqs passed into struct. - * - * @example - * ```ts - * import { struct, number, string } from "./eq.ts"; - * - * const { equals } = struct({ name: string, age: number }); - * - * const brandon = { name: "Brandon", age: 37 }; - * const emily = { name: "Emily", age: 32 }; - * - * const result1 = equals(brandon)(emily); // false - * const result2 = equals(brandon)(brandon); // true - * ``` - * - * @since 2.0.0 - */ -export function struct( - eqs: { readonly [K in keyof A]: Eq }, -): Eq<{ readonly [K in keyof A]: A[K] }> { - const _eqs = Object.entries(eqs) as [keyof A, Eq][]; - return fromEquals((first, second) => - _eqs.every(([key, { equals }]) => equals(second[key])(first[key])) - ); -} - -/** - * Create a eq that compares, key for key, structs according - * to the structure of the eqs passed into struct. It allows - * the values in the struct to be optional or null. - * - * @example - * ```ts - * import { struct, number, string } from "./eq.ts"; - * - * const { equals } = struct({ name: string, age: number }); - * - * const brandon = { name: "Brandon", age: 37 }; - * const emily = { name: "Emily", age: 32 }; - * - * const result1 = equals(brandon)(emily); // false - * const result2 = equals(brandon)(brandon); // true - * ``` - * - * @since 2.0.0 - */ -export function partial( - Eqs: { readonly [K in keyof A]: Eq }, -): Eq<{ readonly [K in keyof A]?: A[K] }> { - const eqs = Object.entries(Eqs) as [keyof A, Eq][]; - return fromEquals((first, second) => - eqs.every(([key, { equals }]) => { - const firstValue = first[key] as A[keyof A] | null | undefined; - const secondValue = second[key] as A[keyof A] | null | undefined; - if (isNil(firstValue) || isNil(secondValue)) { - return firstValue === secondValue; - } else { - return equals(secondValue)(firstValue); - } - }) - ); -} - -/** - * Create a eq from two other eqs. The resultant eq checks - * that any two values are equal according to both supplied eqs. - * - * @example - * ```ts - * import { intersect, struct, partial, string } from "./eq.ts"; - * import { pipe } from "./fn.ts"; - * - * const { equals } = pipe( - * struct({ firstName: string }), - * intersect(partial({ lastName: string })) - * ); - * - * const batman = { firstName: "Batman" }; - * const grace = { firstName: "Grace", lastName: "Hopper" }; - * - * const result1 = equals(batman)(grace); // false - * const result2 = equals(grace)(grace); // true - * ``` - * - * @since 2.0.0 - */ -export function intersect( - second: Eq, -): (first: Eq) => Eq> { - return (first: Eq): Eq> => ({ - equals: (snd) => (fst) => - first.equals(snd as A)(fst as A) && second.equals(snd as I)(fst as I), - }); -} - -/** - * Create a eq from two other eqs. The resultant eq checks - * that any two values are equal according to at least one of the supplied - * eqs. - * - * It should be noted that we cannot differentiate the eq used to - * compare two disparate types like number and number[]. Thus, internally - * union must type cast to any and treat thrown errors as a false - * equivalence. - * - * @example - * ```ts - * import { union, number, string } from "./eq.ts"; - * import { pipe } from "./fn.ts"; - * - * const { equals } = pipe(number, union(string)); - * - * const result1 = equals(1)("Hello"); // false - * const result2 = equals(1)(1); // true - * ``` - * - * @since 2.0.0 - */ -export function union( - ui: Eq, -): (first: Eq) => Eq { - return (ua) => ({ - equals: (second) => (first) => { - if (first === second) { - return true; - } else { - try { - // deno-lint-ignore no-explicit-any - return ua.equals(second as any)(first as any) || - // deno-lint-ignore no-explicit-any - ui.equals(second as any)(first as any); - } catch { - return false; - } - } - }, - }); -} - -/** - * Create a eq that evaluates lazily. This is useful for equality - * of recursive types (either mutual or otherwise). - * - * @example - * ```ts - * import { lazy, intersect, struct, partial, string, Eq } from "./eq.ts"; - * import { pipe } from "./fn.ts"; - * - * type Person = { name: string, child?: Person }; - * - * // Annotating the type is required for recursion - * const person: Eq = lazy('Person', () => pipe( - * struct({ name: string }), - * intersect(partial({ child: person })) - * )); - * - * const icarus = { name: "Icarus" }; - * const daedalus = { name: "Daedalus", child: icarus }; - * - * const result1 = person.equals(icarus)(daedalus); // false - * const result2 = person.equals(daedalus)(daedalus); // true - * ``` - * - * @since 2.0.0 - */ -export function lazy(_: string, f: () => Eq): Eq { - const memo = memoize>(f); - return { equals: (second) => (first) => memo().equals(second)(first) }; -} - -/** - * Create a eq that tests the output of a thunk (IO). This assumes that - * the output of the thunk is always the same, which for true IO is not - * the case. This assumes that the context for the function is undefined, - * which means that it doesn't rely on "this" to execute. - * - * @example - * ```ts - * import { struct, io, number } from "./eq.ts"; - * import { of as constant } from "./fn.ts"; - * - * const { equals } = struct({ asNumber: io(number) }); - * - * const one = { asNumber: () => 1 }; - * const two = { asNumber: () => 2 }; - * - * const result1 = equals(one)(two); // false - * const result2 = equals(one)(one); // true - * ``` - * - * @since 2.0.0 - */ -export function io(eq: Eq): Eq<() => A> { - return { equals: (second) => (first) => eq.equals(second())(first()) }; -} - -/** - * Create a eq from a method on a class or prototypical object. This - * exists because many objects in javascript do now allow you to pass an - * object method around on its own without its parent object. For example, - * if you pass Date.valueOf (type () => number) into another function and - * call it, the call will fail because valueOf does not carry the reference - * of its parent object around. - * - * @example - * ```ts - * import { method, number } from "./eq.ts"; - * - * // This eq will work for date, but also for any objects that have - * // a valueOf method that returns a number. - * const date = method("valueOf", number); - * - * const now = new Date(); - * const alsoNow = new Date(Date.now()); - * const later = new Date(Date.now() + 60 * 60 * 1000); - * - * const result1 = date.equals(now)(alsoNow); // true - * const result2 = date.equals(now)(later); // false - * ``` - * - * @since 2.0.0 - */ -export function method( - method: M, - eq: Eq, -): Eq<{ readonly [K in M]: () => A }> { - return { - equals: (second) => (first) => eq.equals(second[method]())(first[method]()), - }; -} - -/** - * Create a Eq using a Eq and a function that takes - * a type L and returns a type D. - * - * @example - * ```ts - * import { contramap, number } from "./eq.ts"; - * import { pipe } from "./fn.ts"; - * - * const dateToNumber = (d: Date): number => d.valueOf(); - * const date = pipe(number, contramap(dateToNumber)); - * - * const now = new Date(); - * const alsoNow = new Date(Date.now()); - * const later = new Date(Date.now() + 60 * 60 * 1000); - * - * const result1 = date.equals(now)(alsoNow); // true - * const result2 = date.equals(now)(later); // false - * ``` - * - * Another use for contramap with eq is to check for - * equality after normalizing data. In the following we - * can compare strings ignoring case by normalizing to - * lowercase strings. - * - * @example - * ```ts - * import { contramap, string } from "./eq.ts"; - * import { pipe } from "./fn.ts"; - * - * const lowercase = (s: string) => s.toLowerCase(); - * const insensitive = pipe( - * string, // exact string compare - * contramap(lowercase), // makes all strings lowercase - * ); - * - * const result1 = insensitive.equals("Hello")("World"); // false - * const result2 = insensitive.equals("hello")("Hello"); // true - * ``` - * - * @since 2.0.0 - */ -export function contramap( - fld: (l: L) => D, -): (eq: Eq) => Eq { - return ({ equals }) => ({ - equals: ((second) => (first) => equals(fld(second))(fld(first))), - }); -} - -/** - * The canonical implementation of Contravariant for Eq. It contains - * the method contramap. - * - * @since 2.0.0 - */ -export const ContravariantEq: Contravariant = { - contramap, -}; - -/** - * The canonical implementation of Schemable for a Eq. It contains - * the methods unknown, string, number, boolean, literal, nullable, - * undefinable, record, array, tuple, struct, partial, intersect, - * union, and lazy. - * - * @since 2.0.0 - */ -export const SchemableEq: Schemable = { - unknown: () => unknown, - string: () => string, - number: () => number, - boolean: () => boolean, - literal, - nullable, - undefinable, - record, - array, - tuple, - struct, - partial, - intersect, - union, - lazy, -}; diff --git a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/extend.ts b/vendor/deno.land/x/fun@v.2.0.0-alpha.11/extend.ts deleted file mode 100644 index ae794bb..0000000 --- a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/extend.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { $, Kind, TypeClass } from "./kind.ts"; -import type { Functor } from "./functor.ts"; - -/** - * Extend - * https://github.com/fantasyland/static-land/blob/master/docs/spec.md#extend - */ -export interface Extend extends Functor, TypeClass { - readonly extend: ( - ftai: (t: $) => I, - ) => (ta: $) => $; -} diff --git a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/filterable.ts b/vendor/deno.land/x/fun@v.2.0.0-alpha.11/filterable.ts deleted file mode 100644 index 6db3e99..0000000 --- a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/filterable.ts +++ /dev/null @@ -1,41 +0,0 @@ -import type { $, Kind, TypeClass } from "./kind.ts"; -import type { Pair } from "./pair.ts"; -import type { Option } from "./option.ts"; -import type { Either } from "./either.ts"; - -/** - * Filterable - * https://github.com/fantasyland/static-land/blob/master/docs/spec.md#filterable - * - * TODO; add refine method - */ -export interface Filterable extends TypeClass { - readonly filter: { - ( - refinement: (a: A) => a is I, - ): (ta: $) => $; - ( - predicate: (a: A) => boolean, - ): (ta: $) => $; - }; - readonly filterMap: ( - fai: (a: A) => Option, - ) => (ua: $) => $; - readonly partition: { - ( - refinement: (a: A) => a is I, - ): ( - ta: $, - ) => Pair<$, $>; - ( - predicate: (a: A) => boolean, - ): ( - ta: $, - ) => Pair<$, $>; - }; - readonly partitionMap: ( - fai: (a: A) => Either, - ) => ( - ua: $, - ) => Pair<$, $>; -} diff --git a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/fn.ts b/vendor/deno.land/x/fun@v.2.0.0-alpha.11/fn.ts deleted file mode 100644 index 42e6158..0000000 --- a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/fn.ts +++ /dev/null @@ -1,913 +0,0 @@ -import type { Applicative } from "./applicative.ts"; -import type { Apply } from "./apply.ts"; -import type { Category } from "./category.ts"; -import type { Chain } from "./chain.ts"; -import type { Profunctor } from "./profunctor.ts"; -import type { Contravariant } from "./contravariant.ts"; -import type { Functor } from "./functor.ts"; -import type { In, Kind, Out } from "./kind.ts"; -import type { Monad } from "./monad.ts"; - -/** - * A Fn, also known as Reader or Environment, is a type over a variadic - * javascript function. ie. (a: number, b: string) => string can be - * a Fn. As an algebraic data type, the associated type class instances - * for Fn are limited to single variable inputs so they will look like - * (a: number) => string, with only one argument. The purposes of a Fn - * are many and varied, some common purposes are: computation, reading - * values from a shared environment, and sub-computations in a modified - * environment. In many ways Fn is a more powerful abstraction than - * State, and indeed the State monad in fun is exactly State = - * Fn<[S], [A, S]>. - * - * Currently, there is no implementation of Chain recursion or - * trampolining for Fn implemented, but it is likely to be a future - * feature. Once implemented Fn will gain some much needed stack safety. - * - * @since 2.0.0 - */ -export type Fn = (d: D) => A; - -/** - * A Fn type over any, useful for constraining generics that - * take or return Fns. - * - * @since 2.0.0 - */ -// deno-lint-ignore no-explicit-any -export type AnyFn = Fn; - -/** - * Specifies Fn as a Higher Kinded Type, with - * covariant parameter A corresponding to the 0th - * index of any Substitutions and a contravariant - * parameter D corresponding to the 0th index of - * any Substititions. The Fn KindFn is unique in that - * it constrains the Fn type to taking a single - * argument for the purposes of type substitution - * while the implementations of Fn combinators such - * as map, chain, etc are mostly variadic (multiple - * arguments). - * - * @since 2.0.0 - */ -export interface KindFn extends Kind { - readonly kind: Fn, Out>; -} - -/** - * Take a variadic Fn and make it unary, collapsing multiple arguments - * into a single tuple argument. - * - * @example - * ```ts - * import * as F from "./fn.ts"; - * - * const person = (age: number, name: string) => ({ age, name }); - * const personUnary = F.unary(person); - * - * // ({ name: "Brandon", age: 37 }) - * const result1 = personUnary([37, "Brandon"]); - * ``` - * @since 2.0.0 - */ -export function unary(fda: (...d: D) => A): Fn { - return (d) => fda(...d); -} - -/** - * A common pattern in optics is to apply an input value to a function at the - * beginning and the end of a computation. This can (and has) been achieved by - * the composition of Pair using flow(P.dup, P.map(fn), P.merge). But for - * performance reasons it's nice to have a straighforward function that achieves - * the same result. - * - * @since 2.0.0 - */ -export function over(faai: (a: A) => (a: A) => I): (a: A) => I { - return (a) => faai(a)(a); -} - -/** - * Wrap a thunk (a Fn that takes no arguments) in a try catch block, using - * an onThrow function (that should itself never throw) to handle a default - * case should the original function throw. This is useful for wrapping - * functions that might throw. - * - * @example - * ```ts - * import * as F from "./fn.ts"; - * - * const getZero = (): number => { - * if (Math.random() > 0.5) { - * throw new Error("Too high!"); - * } - * return 0; - * } - * - * const result = F.tryThunk(getZero, () => 0); // 0 - * ``` - * - * @since 2.0.0 - */ -export function tryThunk(ua: Fn, onThrow: Fn): A { - try { - return ua(); - } catch (err) { - return onThrow(err); - } -} - -/** - * Wrap any function in a try catch block, passing the result and - * arguments to onResult when the function does not throw as well - * as passing the error and arguments to the onThrow function when - * it does. Neither the onResult nor the onThrow functions should - * ever throw an error themselves. None of the functions in the fun - * library will throw on their own. If they do it is a bug in fun - * or the underlying runtime (or you used fun in javascript). This - * function primarily exists to wrap functions exported from other - * libraries that may use exceptions as their error mechanism. This - * makes those functions safe to use with fun. - * - * @example - * ```ts - * import * as F from "./fn.ts"; - * - * const throwOverFive = (n: number): number => { - * if (n > 5) { - * throw new Error("Larger than five"); - * } - * return n; - * } - * const caught = F.handleThrow( - * throwOverFive, - * result => result, - * err => 0, // Default to 0 - * ); - * - * const result1 = caught(0); // 0 - * const result2 = caught(5); // 5 - * const result3 = caught(6); // 0 - * ``` - * - * @since 2.0.0 - */ -export function handleThrow( - ua: (...d: D) => A, - onResult: (result: A, args: D) => I, - onThrow: (error: unknown, args: D) => I, -): (...d: D) => I { - return (...d) => { - try { - return onResult(ua(...d), d); - } catch (err) { - return onThrow(err, d); - } - }; -} - -/** - * Memoize a unary function using a Map. This - * means that this algorithm puposefully leaks memory. - * - * TODO: Extend memoize to be variadic. - * - * @example - * ```ts - * import * as F from "./fn.ts"; - * - * // Big old expensive recursive algorithm - * const fib = (n: number): number => - * n < 1 ? 0 : - * n <= 1 ? 1 : - * fib(n - 2) + fib(n - 1); - * - * const mfib = F.memoize(fib); - * - * const result1 = mfib(10); // 55 - * const result2 = mfib(10); // 55 but does not recompute - * ``` - * - * @since 2.0.0 - */ -export function memoize(ua: Fn): Fn { - const cache = new Map(); - return (d) => { - if (cache.has(d)) { - return cache.get(d) as A; - } - const a = ua(d); - cache.set(d, a); - return a; - }; -} - -/** - * A function that can be called to output any type. It's used for type - * hole based programming. This allows one to define interfaces and types - * for a function and stub them with todo() until you are ready to implement - * the actual behavior. The todo function will throw if it is ever actually - * called. - * - * @example - * ```ts - * import { todo } from "./fn.ts"; - * - * type InOut = { - * read: () => Promise, - * write: (s: string) => Promise, - * } - * - * const mockInOut: InOut = todo(); // InOut !!THROWS!! - * ``` - * - * @since 2.0.0 - */ -export function todo(): T { - throw new Error("TODO: this function has not been implemented"); -} - -/** - * Does an unsafe type coercion on any type. This is only safe when - * the types A and I have referential transparency. This is to say - * when the type A can be substituted for I and I for A at runtime - * without there being any change to the operation of the program. - * The primary use case for unsafeCoerce is in Newtype implementations. - */ -export function unsafeCoerce(a: A): I { - return a as unknown as I; -} - -/** - * The flow function is like the pipe function without the initial value. It - * composes up to 9 functions from left to right (top to bottom). The first - * function can take multiple arguments but every subsequent function must - * be unary (only take one argument). - * - * @example - * ```ts - * import { flow } from "./fn.ts"; - * - * const add = (m: number) => (n: number) => m + n; - * const multiply = (m: number) => (n: number) => m * n; - * - * const flowed = flow( - * add(1), - * multiply(2), - * add(1), - * multiply(2), - * ); - * - * const result1 = flowed(1); // 10 - * const result2 = flowed(2); // 14 - * const result3 = flowed(3); // 18 - * ``` - * - * @since 2.0.0 - */ -export function flow( - ab: (...a: A) => B, -): (...a: A) => B; -export function flow( - ab: (...a: A) => B, - bc: (b: B) => C, -): (...a: A) => C; -export function flow( - ab: (...a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, -): (...a: A) => D; -export function flow( - ab: (...a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, -): (...a: A) => E; -export function flow( - ab: (...a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, -): (...a: A) => F; -export function flow( - ab: (...a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, -): (...a: A) => G; -export function flow( - ab: (...a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, - gh: (g: G) => H, -): (...a: A) => H; -export function flow( - ab: (...a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, - gh: (g: G) => H, - hi: (h: H) => I, -): (...a: A) => I; -export function flow< - A extends unknown[], - B, - C, - D, - E, - F, - G, - H, - I, - J, ->( - ab: (...a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, - gh: (g: G) => H, - hi: (h: H) => I, - ij: (i: I) => J, -): (...a: A) => J; -export function flow< - A extends unknown[], - B, - C, - D, - E, - F, - G, - H, - I, - J, - K, ->( - ab: (...a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, - gh: (g: G) => H, - hi: (h: H) => I, - ij: (i: I) => J, - jk: (j: J) => K, -): (...a: A) => K; -export function flow< - A extends unknown[], - B, - C, - D, - E, - F, - G, - H, - I, - J, - K, - L, ->( - ab: (...a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, - gh: (g: G) => H, - hi: (h: H) => I, - ij: (i: I) => J, - jk: (j: J) => K, - kl: (k: K) => L, -): (...a: A) => L; -export function flow( - ...[ab, bc, cd, de, ef, fg, gh, hi, ij, jk, kl, ...rest]: AnyFn[] -): AnyFn { - switch (arguments.length) { - case 1: - return (...as) => ab(...as); - case 2: - return (...as) => bc(ab(...as)); - case 3: - return (...as) => cd(bc(ab(...as))); - case 4: - return (...as) => de(cd(bc(ab(...as)))); - case 5: - return (...as) => ef(de(cd(bc(ab(...as))))); - case 6: - return (...as) => fg(ef(de(cd(bc(ab(...as)))))); - case 7: - return (...as) => gh(fg(ef(de(cd(bc(ab(...as))))))); - case 8: - return (...as) => hi(gh(fg(ef(de(cd(bc(ab(...as)))))))); - case 9: - return (...as) => ij(hi(gh(fg(ef(de(cd(bc(ab(...as))))))))); - case 10: - return (...as) => jk(ij(hi(gh(fg(ef(de(cd(bc(ab(...as)))))))))); - case 11: - return (...as) => kl(jk(ij(hi(gh(fg(ef(de(cd(bc(ab(...as))))))))))); - default: - return (...as) => - rest.reduce( - (val, fn) => fn(val), - kl(jk(ij(hi(gh(fg(ef(de(cd(bc(ab(...as))))))))))), - ); - } -} - -/** - * The pipe takes a value as the first argument and composes it with subsequent - * function arguments, returning the result of the last function passed in. It - * handles and correctly types up to 10 unary functions. Beyond 10 it makes - * sense to break up pipe into multiple pipes. - * - * @example - * ```ts - * import { pipe } from "./fn.ts"; - * - * const add = (n: number) => (m: number) => m + n; - * const multiply = (n: number) => (m: number) => m * n; - * - * const result = pipe( - * 1, - * add(1), // 2 - * multiply(2), // 4 - * add(1), // 5 - * multiply(2), // 10 - * ); // 10 - * ``` - * - * @since 2.0.0 - */ -export function pipe(a: A): A; -export function pipe(a: A, ab: (a: A) => B): B; -export function pipe(a: A, ab: (a: A) => B, bc: (b: B) => C): C; -export function pipe( - a: A, - ab: (a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, -): D; -export function pipe( - a: A, - ab: (a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, -): E; -export function pipe( - a: A, - ab: (a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, -): F; -export function pipe( - a: A, - ab: (a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, -): G; -export function pipe( - a: A, - ab: (a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, - gh: (g: G) => H, -): H; -export function pipe( - a: A, - ab: (a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, - gh: (g: G) => H, - hi: (h: H) => I, -): I; -export function pipe( - a: A, - ab: (a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, - gh: (g: G) => H, - hi: (h: H) => I, - ij: (i: I) => J, -): J; -export function pipe( - a: A, - ab: (a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, - gh: (g: G) => H, - hi: (h: H) => I, - ij: (i: I) => J, - jk: (j: J) => K, -): K; -export function pipe( - a: A, - ab: (a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, - gh: (g: G) => H, - hi: (h: H) => I, - ij: (i: I) => J, - jk: (j: J) => K, - kl: (K: K) => L, -): L; -export function pipe( - a: A, - ab: (a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, - gh: (g: G) => H, - hi: (h: H) => I, - ij: (i: I) => J, - jk: (j: J) => K, - kl: (K: K) => L, - end: never, -): L; -export function pipe( - value: unknown, - ...fns: AnyFn[] -): unknown { - return fns.reduce((val, fn) => fn(val), value); -} - -/** - * Create a Fn that always returns a value. This is equivalent to - * constant. - * - * @example - * ```ts - * import { of } from "./fn.ts"; - * - * const alwaysA = of("A"); - * - * const result = alwaysA(null); // "A" - * ``` - * - * @since 2.0.0 - */ -export function of(a: A): Fn { - return () => a; -} - -/** - * Create a Fn that always returns a value. This is equivalent to - * of but without the ability to specify a contravariant argument. - * - * @example - * ```ts - * import { constant } from "./fn.ts"; - * - * const alwaysA = constant("A"); - * - * const result = alwaysA(); // "A" - * ``` - * - * @since 2.0.0 - */ -export function constant(a: A): () => A { - return () => a; -} - -/** - * Apply functions to an unknown function. Useful for pipeing values into - * functions. - */ -export function apply(d: D): (ua: Fn) => A { - return (ua) => ua(d); -} - -/** - * Given L => A => I and D => A create a new Fn - * D & L => I. In order to preserve type widening for - * ap, it only handles unary functions. - * - * @example - * ```ts - * import * as F from "./fn.ts"; - * import { ap, pipe } from "./fn.ts"; - * - * type Person = { name: string, age: number }; - * - * const person = (name: string) => (age: number): Person => ({ name, age }); - * - * const result = pipe( - * F.of(person), - * F.ap(F.of("Brandon")), - * F.ap(F.of(37)), - * ); // Fn<[], Person> - * ``` - * - * @since 2.0.0 - */ -export function ap( - ua: Fn, -): (ufai: Fn I>) => Fn { - return (ufai) => (d) => ufai(d)(ua(d)); -} - -/** - * Map over the output of a Fn. This is equivalent to - * function composition. - * ie. a => pipe(f, map(g))(a) === a => g(f(a)) - * - * @example - * ```ts - * import { map, of, pipe } from "./fn.ts"; - * - * const result = pipe(of(1), map(n => n + 1)); // 2 - * ``` - * - * @since 2.0.0 - */ -export function map( - fai: (a: A) => I, -): (ta: Fn) => Fn { - return (ta) => flow(ta, fai); -} - -/** - * Collapse a curried function D => D => A into - * D => A. - * - * @example - * ```ts - * import { join } from "./fn.ts"; - * - * const add = (n: number) => (m: number) => m + n; - * const dup = join(add); - * - * const result1 = dup(1); // 2 - * const result2 = dup(2); // 4 - * const result3 = dup(10); // 20 - * ``` - * - * @since 2.0.0 - */ -export function join( - tta: Fn>, -): Fn { - return (d) => tta(d)(d); -} - -/** - * Create a new Fn by combining A => L => I with - * D => A to produce D & L => I. This is equivalent - * to ap with the first two arguments switched. It is - * also limited to unary functions in order to properly - * handle type widening on the input type. - * - * @example - * ```ts - * import { pipe, chain } from "./fn.ts"; - * const add = (n: number) => (m: number) => n + m; - * - * const chainer = pipe( - * (n: number) => n, - * chain(add), - * chain(add), - * chain(add), - * chain(add), - * chain(add), - * ); - * - * const result1 = chainer(1); // 6 - * const result2 = chainer(2); // 12 - * const result3 = chainer(3); // 18 - * ``` - * - * @since 2.0.0 - */ -export function chain( - fati: (a: A) => Fn, -): (ta: Fn) => Fn { - return (ta) => (d) => fati(ta(d))(d); -} - -/** - * Map over the input of a function, turning - * D => A and L => D into L => A. - * - * @example - * ```ts - * import { contramap, pipe } from "./fn.ts"; - * - * const equalsZero = (n: number): boolean => n === 0; - * const strLength = (s: string): number => s.length; - * - * const isEmpty = pipe( - * equalsZero, - * contramap(strLength), - * ); - * - * const result1 = isEmpty(""); // true - * const result2 = isEmpty("Hello"); // false - * ``` - * - * @since 2.0.0 - */ -export function contramap( - fld: (l: L) => D, -): (ta: Fn) => Fn { - return (ta) => (d) => ta(fld(d)); -} - -/** - * A combination of contramap and map, dimap applies fld - * to the input of a function and fai to the output. - * - * @example - * ```ts - * import type { NonEmptyArray } from "./array.ts"; - * import { dimap, pipe } from "./fn.ts"; - * import { plural, split } from "./string.ts"; - * - * const are = plural("is", "are"); - * const words = plural("word", "words"); - * const describe = (n: number) => `There ${are(n)} ${n} ${words(n)}`; - * - * const toWords = split(/\s+/g); // string => string[] - * const count = (ws: NonEmptyArray) => ws.length; - * - * const fromString = pipe( - * count, - * dimap(toWords, describe), - * ); - * - * const result1 = fromString("Hello World"); // "There are 2 words" - * const result2 = fromString("Hi"); // "There is 1 word" - * const result3 = fromString("This is a test"); // "There are 4 words" - * ``` - * - * @since 2.0.0 - */ -export function dimap( - fld: (l: L) => D, - fai: (a: A) => I, -): (ta: Fn) => Fn { - return (ta) => flow(fld, ta, fai); -} - -/** - * The canonical identity function. It returns whatever value was - * passed to it. - * - * @example - * ```ts - * import { identity } from "./fn.ts"; - * - * const result1 = identity(1); // 1 - * const result2 = identity("Hello"); // "Hello" - * ``` - * @since 2.0.0 - */ -export function identity(a: A): A { - return a; -} - -/** - * A thunk over the identity function. It allows one - * to constrain an identity to a specific type. - * - * @example - * ```ts - * import { id } from "./fn.ts"; - * - * const idString = id(); // (s: string) => string - * const idNumber = id(); // (n: number) => number - * - * const result1 = idString("Hello"); // "Hello" - * const result2 = idNumber(1); // 1 - * ``` - * - * @since 2.0.0 - */ -export function id(): Fn { - return identity; -} - -/** - * Compose two functions by taking the output of - * one and passing it to another. This is equivalent - * to the map function. - * - * @example - * ```ts - * import { compose, pipe } from "./fn.ts"; - * - * const length = (s: string) => s.length; - * const dup = (n: number) => n + n; - * - * const composed = pipe( - * length, - * compose(dup), - * ); - * - * const result1 = composed("Hello"); // 10 - * const result2 = composed(""); // 0 - * ``` - * - * @since 2.0.0 - */ -export function compose( - second: Fn, -): (first: Fn) => Fn { - return (first) => flow(first, second); -} - -/** - * The canonical implementation of Profunctor for Fn. It contains - * the method dimap. - * - * @since 2.0.0 - */ -export const ProfunctorFn: Profunctor = { dimap }; - -/** - * The canonical implementation of Functor for Fn. It contains - * the method map. - * - * @since 2.0.0 - */ -export const FunctorFn: Functor = { map }; - -/** - * The canonical implementation of Apply for Fn. It contains - * the methods ap and map. - * - * @since 2.0.0 - */ -export const ApplyFn: Apply = { map, ap }; - -/** - * The canonical implementation of Applicative for Fn. It contains - * the methods of, ap, and map. - * - * @since 2.0.0 - */ -export const ApplicativeFn: Applicative = { of, ap, map }; - -/** - * The canonical implementation of Chain for Fn. It contains - * the methods ap, map, and chain. - * - * @since 2.0.0 - */ -export const ChainFn: Chain = { ap, map, chain }; - -/** - * The canonical implementation of Monad for Fn. It contains - * the methods of, ap, map, join, and chain. - * - * @since 2.0.0 - */ -export const MonadFn: Monad = { of, ap, map, join, chain }; - -/** - * The canonical implementation of Contravariant for Fn. It contains - * the method contramap. - * - * @since 2.0.0 - */ -export const ContravariantFn: Contravariant = { contramap }; - -/** - * The canonical implementation of Category for Fn. It contains - * the methods id and compose. - * - * @since 2.0.0 - */ -export const CategoryFn: Category = { id, compose }; diff --git a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/fn_either.ts b/vendor/deno.land/x/fun@v.2.0.0-alpha.11/fn_either.ts deleted file mode 100644 index eaae2b2..0000000 --- a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/fn_either.ts +++ /dev/null @@ -1,700 +0,0 @@ -/** - * FnEither is also known as ReaderEither. In essence a FnEither is - * a function that returns an either. This pattern can be used as - * a validation, a failable computation, a computation resulting - * in a "Choice", and many other things. - * - * @module FnEither - */ - -import type { In, Kind, Out } from "./kind.ts"; -import type { Alt } from "./alt.ts"; -import type { Bifunctor } from "./bifunctor.ts"; -import type { Monad } from "./monad.ts"; -import type { Semigroup } from "./semigroup.ts"; -import type { Contravariant } from "./contravariant.ts"; -import type { Category } from "./category.ts"; -import type { Profunctor } from "./profunctor.ts"; -import type { Predicate } from "./predicate.ts"; -import type { Refinement } from "./refinement.ts"; -import type { Fn } from "./fn.ts"; -import type { Either } from "./either.ts"; - -import * as E from "./either.ts"; -import * as F from "./fn.ts"; - -/** - * A FnEither, also known as ReaderEither, is a type over a variadic - * javascript function that returns an Either. - * ie. (a: number, b: string) => Either can be - * a FnEither. As an algebraic data type, the associated type class - * instances for Fn are limited to single variable inputs so they will - * look like (a: number) => Either, with only one - * argument. The purposes of a FnEither are many and varied, some - * common purposes are: failable computation, reading values from a - * shared environment, and sub-computations in a modified - * environment. - * - * Currently, there is no implementation of Chain recursion or - * trampolining for FnEIther implemented, but it is likely to be a future - * feature. Once implemented Fn will gain some much needed stack safety. - * - * @since 2.0.0 - */ -export type FnEither = Fn>; - -/** - * A FnEither type over any, useful for constraining generics that - * take or return FnEithers. - * - * @since 2.0.0 - */ -// deno-lint-ignore no-explicit-any -export type AnyFnEither = FnEither; - -/** - * Specifies FnEither as a Higher Kinded Type, with - * covariant parameter A and B corresponding to the 0th - * and 1st indices of any Substitutions and a contravariant - * parameter D corresponding to the 0th index of - * any Substititions. The FnEither KindFnEither is unique in that - * it constrains the FnEither type to taking a single - * argument for the purposes of type substitution - * while the implementations of FnEither combinators such - * as map, chain, etc are mostly variadic (multiple - * arguments). - * - * @since 2.0.0 - */ -export interface KindFnEither extends Kind { - readonly kind: FnEither, Out, Out>; -} - -/** - * Specifies FnEither as a Higher Kinded Type, with - * covariant parameter A corresponding to the 0th - * index of any Substitutions and a contravariant - * parameter D corresponding to the 0th index of - * any Substititions. KindRightFnEither curries the Left parameter - * of the output Either. This is useful when one - * needs to Fix the Left output with a Semigroup or - * some other collection algebraic structure. - * - * @since 2.0.0 - */ -export interface KindRightFnEither extends Kind { - readonly kind: FnEither, B, Out>; -} - -/** - * Wrap any function in a try catch block. The returned - * function will lazily call and handle any throwing of - * the wrapped function. Non-throwing calls will be - * returned in a Right, and throwing calls will have - * their error and arguments passed to the onThrow function - * before being returned in a Left. - * - * @example - * ```ts - * import { tryCatch } from "./fn_either.ts"; - * import { todo } from "./fn.ts"; - * - * const throws = tryCatch(todo, () => "Failed!"); - * const returns = tryCatch((n: number) => n, () => "Failed!"); - * - * const result1 = throws()(0); // Left("Failed!"); - * const result2 = returns(1)(0); // Right(1); - * ``` - * - * @since 2.0.0 - */ -export function tryCatch( - ua: (...d: D) => A, - onThrow: (e: unknown, d: D) => B, -): (...d: D) => FnEither { - return F.handleThrow( - ua, - right, - (e, d) => left(onThrow(e, d)), - ); -} - -/** - * Create a FnEither that always returns a Left(B). - * - * @example - * ```ts - * import { left } from "./fn_either.ts"; - * - * const leftNumber = left(1); - * - * const result = leftNumber(0); // Left(1); - * ``` - * - * @since 2.0.0 - */ -export function left( - left: B, -): FnEither { - return F.of(E.left(left)); -} - -/** - * Create a FnEither that always returns a Right(A). - * - * @example - * ```ts - * import { right } from "./fn_either.ts"; - * - * const rightNumber = right(1); - * - * const result = rightNumber(null); // Right(1); - * ``` - * - * @since 2.0.0 - */ -export function right( - right: A, -): FnEither { - return F.of(E.right(right)); -} - -/** - * Turn an Either into a FnEither. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import * as E from "./either.ts"; - * - * const left = E.left(1); - * const right = E.right(1); - * - * const fnLeft = FE.fromEither(left); - * const fnRight = FE.fromEither(right); - * - * const result1 = fnLeft(null); // Left(1); - * const result2 = fnRight(null); // Right(1); - * ``` - * - * @since 2.0.0 - */ -export function fromEither( - ua: Either, -): FnEither { - return F.of(ua); -} - -/** - * Lift a Fn into FnEither<[D], never, A> - * - * @example - * ```ts - * import { fromFn } from "./fn_either.ts"; - * - * const double = (first: number) => first + first; - * const lifted = fromFn(double); - * - * const result = lifted(1); // Right(2) - * ``` - * - * @since 2.0.0 - */ -export function fromFn( - fda: Fn, -): FnEither { - return F.flow(fda, E.right); -} - -/** - * Create a FnEither from a Predicate or a Refinement. - * If the Predicate or Refinement returns true then the - * FnEither returns Right, otherwise it returns Left. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import { pipe } from "./fn.ts"; - * - * const isPositive = (n: number) => n > 0; - * const computation = FE.fromPredicate(isPositive); - * - * const result1 = computation(0); // Left(0) - * const result2 = computation(1); // Right(1) - * ``` - * - * @since 2.0.0 - */ -export function fromPredicate( - refinement: Refinement, -): FnEither; -export function fromPredicate( - predicate: Predicate, -): FnEither; -export function fromPredicate( - predicate: Predicate, -): FnEither { - return (a) => predicate(a) ? E.right(a) : E.left(a); -} - -/** - * An alias for right. Creates a FnEither from a value. The created - * FnEither does not require any arguments, but can widen when used - * in a chain. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import { pipe } from "./fn.ts"; - * - * const computation = pipe( - * FE.id(), // Ask for a number - * FE.map(n => n + 1), // Add one - * FE.chain(_ => FE.of("Hello")), // Forget about the number - * ); - * - * const result = computation(1); // Right("Hello") - * ``` - * - * @since 2.0.0 - */ -export function of( - a: A, -): FnEither { - return right(a); -} - -/** - * Given a FnEither returning a function A => I and a FnEither returning - * a value A, combine them into a FnEither returning an I. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import { pipe } from "./fn.ts"; - * - * type Person = { name: string; age: number }; - * - * const person = (name: string) => (age: number): Person => ({ name, age }); - * - * const result = pipe( - * FE.of(person), - * FE.ap(FE.of("Brandon")), - * FE.ap(FE.of(37)), - * ); // FnEither<[], never, Person> - * ``` - * - * @since 2.0.0 - */ -export function ap( - ua: FnEither, -): (ufai: FnEither I>) => FnEither { - return (ufai) => (d) => F.pipe(ufai(d), E.ap(ua(d))); -} - -/** - * Provide an alternative FnEither in the event that an original - * FnEither returns Left. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * FE.left("Oh no I broke!"), - * FE.alt(FE.right("But I work")), - * )(null); // Right("But I work") - * ``` - * - * @since 2.0.0 - */ -export function alt( - ub: FnEither, -): (ua: FnEither) => FnEither { - return (ua) => (d) => { - const e = ua(d); - return E.isLeft(e) ? ub(d) : e; - }; -} - -/** - * Map over the left and right return values of a FnEither. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import * as E from "./either.ts"; - * import { pipe } from "./fn.ts"; - * - * const boundedValue = (n: number) => n > 10 || n < 0 ? E.left(n) : E.right(n); - * - * const log = pipe( - * boundedValue, - * FE.bimap(n => `Out of bounds: ${n}`, n => `Received a good value: ${n}`), - * ); - * - * const result1 = log(1); // Right("Received a good value: 1") - * const result2 = log(20); // Left("Out of bounds: 20") - * ``` - * - * @since 2.0.0 - */ -export function bimap( - fbj: (b: B) => J, - fai: (a: A) => I, -): ( - ua: FnEither, -) => FnEither { - return F.map(E.bimap(fbj, fai)); -} - -/** - * Map over the right return value of a FnEither. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * FE.id(), - * FE.map(n => n + 1), - * )(0); // Right(1) - * ``` - * - * @since 2.0.0 - */ -export function map( - fai: (a: A) => I, -): ( - ua: FnEither, -) => FnEither { - return F.map(E.map(fai)); -} - -/** - * Map over the left return value of a FnEither. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import { pipe } from "./fn.ts"; - * - * const result1 = pipe( - * FE.id(), - * FE.mapLeft((n: number) => n + 1), - * )(0); // Right(0) - * - * const result2 = pipe( - * FE.idLeft(), - * FE.mapLeft(n => n + 1), - * )(0); // Left(1) - * ``` - * - * @since 2.0.0 - */ -export function mapLeft( - fbj: (b: B) => J, -): ( - ua: FnEither, -) => FnEither { - return F.map(E.mapLeft(fbj)); -} - -/** - * Flatten nested FnEithers with the same input and - * left types. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * FE.right(FE.right(1)), - * FE.join, - * )(null); // Right(1) - * ``` - * - * @since 2.0.0 - */ -export function join( - tua: FnEither>, -): FnEither { - return (d) => F.pipe(tua(d), E.chain(F.apply(d))); -} - -/** - * Chain the right result of one FnEither into another - * FnEither. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * FE.id(), - * FE.chain(s => FE.right(s.length)), - * )("Hello"); // Right(5) - * ``` - * - * @since 2.0.0 - */ -export function chain( - fati: (a: A) => FnEither, -): ( - ua: FnEither, -) => FnEither { - return (ua) => (d) => { - const e = ua(d); - return E.isLeft(e) ? e : fati(e.right)(d); - }; -} - -/** - * Chain the left result of one FnEither into another - * FnEither. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * FE.id(), - * FE.chain(s => FE.left(s.length)), - * FE.chainLeft(n => FE.right(String(n))), - * )("Hello"); // Right("5") - * ``` - * - * @since 2.0.0 - */ -export function chainLeft( - fbtj: (b: B) => FnEither, -): ( - ua: FnEither, -) => FnEither { - return (ua) => (d) => { - const e = ua(d); - return E.isRight(e) ? e : fbtj(e.left)(d); - }; -} - -/** - * Map over the input value of a FnEither. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import { pipe } from "./fn.ts"; - * - * // This has type FnEither<[Date], never, number> - * const computation = pipe( - * FE.id(), - * FE.contramap((d: Date) => d.valueOf()), - * ); - * - * const result = computation(new Date(0)); // Right(0) - * ``` - * - * @since 2.0.0 - */ -export function contramap( - fld: (l: L) => D, -): (ua: FnEither) => FnEither { - return (ua) => F.flow(fld, ua); -} - -/** - * Map over the input of a FnEither contravariantly and the - * right result of a FnEither covariantly. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import { pipe } from "./fn.ts"; - * - * // This has type FnEither<[Date], never, string> - * const computation = pipe( - * FE.id(), - * FE.dimap( - * (d: Date) => d.valueOf(), - * String, - * ), - * ); - * - * const result = computation(new Date(0)); // Right('0') - * ``` - * - * @since 2.0.0 - */ -export function dimap( - fld: (l: L) => D, - fai: (a: A) => I, -): (ua: FnEither) => FnEither { - return F.flow(contramap(fld), map(fai)); -} - -/** - * Perform the same function as Reader ask. Given a type A - * (and optionally a type B), return a FnEither<[A], B, A>. - * This is useful for starting a FnEither chain. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import { pipe } from "./fn.ts"; - * - * const computation = FE.id(); - * - * const result1 = computation(1); // Right(1); - * const result2 = computation(2); // Right(2); - * ``` - * - * @since 2.0.0 - */ -export function id(): FnEither { - return E.right; -} - -/** - * Perform the same function as Reader askLeft. Given a type B - * (and optionally a type A), return a FnEither<[B], B, A>. - * This is useful for starting a FnEither chain with a left value. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import { pipe } from "./fn.ts"; - * - * const computation = FE.idLeft(); - * - * const result1 = computation(1); // Left(1); - * const result2 = computation(2); // Left(2); - * ``` - * - * @since 2.0.0 - */ -export function idLeft(): FnEither { - return E.left; -} - -/** - * Compose two FnEithers, passing the right value of the first - * into the second. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import { pipe } from "./fn.ts"; - * - * const isPositive = (n: number) => n > 0; - * const isInteger = (n: number) => Number.isInteger(n); - * - * const isPositiveInteger = pipe( - * FE.fromPredicate(isPositive), - * FE.compose(FE.fromPredicate(isInteger)), - * ); - * - * const result1 = isPositiveInteger(0); // Left(0) - * const result2 = isPositiveInteger(1); // Right(1) - * const result3 = isPositiveInteger(1.1); // Left(1.1) - * ``` - * - * @since 2.0.0 - */ -export function compose( - second: FnEither, -): ( - first: FnEither, -) => FnEither { - return (first) => F.flow(first, E.chain(second)); -} - -/** - * The canonical implementation of Bifunctor for FnEither. It contains - * the methods bimap and mapLeft. - * - * @since 2.0.0 - */ -export const BifunctorFnEither: Bifunctor = { bimap, mapLeft }; - -/** - * The canonical implementation of Monad for FnEither. It contains - * the methods of, ap, map, join, and chain. - * - * @since 2.0.0 - */ -export const MonadFnEither: Monad = { of, ap, map, join, chain }; - -/** - * The canonical implementation of Alt for FnEither. It contains - * the methods alt and map - * - * @since 2.0.0 - */ -export const AltFnEither: Alt = { alt, map }; - -/** - * The canonical implementation of Contravariant for FnEither. It contains - * the method contramap. - * - * @since 2.0.0 - */ -export const ContravariantFnEither: Contravariant = { contramap }; - -/** - * The canonical implementation of Profunctor for FnEither. It contains - * the method dimap. - * - * @since 2.0.0 - */ -export const ProfunctorFnEither: Profunctor = { dimap }; - -/** - * The canonical implementation of Category for FnEither. It contains - * the methods of and compose. - * - * @since 2.0.0 - */ -export const CategoryFnEither: Category = { id, compose }; - -/** - * Create a Monad for FnEither where left values are combined using the - * supplied Semigroup. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import { SemigroupNumberSum } from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const { ap } = FE.getRightMonad(SemigroupNumberSum); - * - * const result1 = pipe( - * FE.left(1), - * ap(FE.left(1)), - * ); // Left(2) - * ``` - * - * @since 2.0.0 - */ -export function getRightMonad( - { concat }: Semigroup, -): Monad> { - return ({ - of, - ap: (ua) => (ufai) => (c) => { - const efai = ufai(c); - const ea = ua(c); - return E.isLeft(efai) - ? (E.isLeft(ea) ? E.left(concat(efai.left)(ea.left)) : efai) - : (E.isLeft(ea) ? ea : E.right(efai.right(ea.right))); - }, - map, - join, - chain, - }); -} diff --git a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/foldable.ts b/vendor/deno.land/x/fun@v.2.0.0-alpha.11/foldable.ts deleted file mode 100644 index 14ef630..0000000 --- a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/foldable.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { $, Kind, TypeClass } from "./kind.ts"; - -/** - * Foldable - * https://github.com/fantasyland/static-land/blob/master/docs/spec.md#foldable - */ -export interface Foldable extends TypeClass { - readonly reduce: ( - foao: (o: O, a: A) => O, - o: O, - ) => (ta: $) => O; -} diff --git a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/functor.ts b/vendor/deno.land/x/fun@v.2.0.0-alpha.11/functor.ts deleted file mode 100644 index 472ab23..0000000 --- a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/functor.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { $, Kind, TypeClass } from "./kind.ts"; - -/** - * Functor - * https://github.com/fantasyland/static-land/blob/master/docs/spec.md#functor - */ -export interface Functor extends TypeClass { - readonly map: ( - fai: (value: A) => I, - ) => ( - ta: $, - ) => $; -} diff --git a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/kind.ts b/vendor/deno.land/x/fun@v.2.0.0-alpha.11/kind.ts deleted file mode 100644 index be096c4..0000000 --- a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/kind.ts +++ /dev/null @@ -1,100 +0,0 @@ -/** - * Splits the different type level substitutions into tuples - * based on variance. - */ -export type Substitutions = { - // Covariant Substitutions - readonly ["covariant"]: unknown[]; - // Contravariant Substitutions - readonly ["contravariant"]: unknown[]; - // Invariant Substitutions - readonly ["invariant"]: unknown[]; -}; - -/** - * Kind is an interface that can be extended - * to retrieve inner types using "this". - */ -export interface Kind extends Substitutions { - readonly kind?: unknown; -} - -/** - * Substitute is a substitution type, taking a Kind implementation T and - * substituting it with types passed in S. - */ -export type Substitute = T extends - { readonly kind: unknown } ? (T & S)["kind"] - : { - readonly T: T; - readonly ["covariant"]: () => S["covariant"]; - readonly ["contravariant"]: (_: S["contravariant"]) => void; - readonly ["invariant"]: (_: S["invariant"]) => S["invariant"]; - }; - -/** - * $ is an alias of Substitute, lifting out, in, and inout - * substitutions to positional type parameters. - */ -export type $< - T extends Kind, - Out extends unknown[], - In extends unknown[] = [never], - InOut extends unknown[] = [never], -> = Substitute; - -// deno-lint-ignore no-explicit-any -export type AnySub = $; - -// deno-lint-ignore no-explicit-any -export type Intersect = (U extends any ? (k: U) => void : never) extends - ((k: infer I) => void) ? I : never; - -/** - * Access the Covariant substitution type at index N - */ -export type Out = - T["covariant"][N]; - -/** - * Access the Contravariant substitution type at index N - */ -export type In = - T["contravariant"][N]; - -/** - * Access the Invariant substitution type at index N - */ -export type InOut = - T["invariant"][N]; - -/** - * This declared symbol is used to create - * phantom concrete types that do not exist - * but are useful for carrying type data around - * for inferrence. - */ -declare const PhantomType: unique symbol; - -/** - * Holds a type level value in a concrete position - * in order to keep a type around for better inference. - */ -export interface Hold { - readonly [PhantomType]?: A; -} - -/** - * Extract the inner type from a Hold - */ -export type ToHold = T extends Hold ? A : never; - -/** - * Typeclass is a type constrained Hold type, specifically constrained - * to a "Kind" (ie. type level type) - */ -export type TypeClass = Hold; diff --git a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/monad.ts b/vendor/deno.land/x/fun@v.2.0.0-alpha.11/monad.ts deleted file mode 100644 index 61b6b86..0000000 --- a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/monad.ts +++ /dev/null @@ -1,86 +0,0 @@ -import type { $, Kind, TypeClass } from "./kind.ts"; -import type { Applicative } from "./applicative.ts"; -import type { Chain } from "./chain.ts"; - -import { pipe } from "./fn.ts"; - -/** - * A Monad is an algebra with a notion of join(aka flatten or flat) for - * a given algebraic data type T. A Monad must also extend Functor, - * Apply, Applicative, and Chain. This means a Monad has - * the following methods: of, ap, map, join, and chain. An intuition for - * Monad can be found by thinking about how Promise.then handles functions - * that return a new Promise. - * - * An instance of a Monad must obey the following laws: - * - * 1. Left identity: chain(f)(of(a)) === f(a) - * 2. Right identity: chain(of)(ua) === ua - * - * The original type came from [static-land](https://github.com/fantasyland/static-land/blob/master/docs/spec.md#monad) - * - * @since 2.0.0 - */ -export interface Monad - extends Applicative, Chain, TypeClass { - readonly join: < - A, - B = never, - C = never, - D = unknown, - E = unknown, - J = never, - K = never, - >( - tta: $, J, K], [D], [E]>, - ) => $; -} - -/** - * Derive a Monad instance from of, chain, and a Kind. This is - * the simplest way to get a Monad instance when one has a - * creation function (of) and a chain function (aka flatMap or - * bind). - * - * @example - * ```ts - * import type { Kind, Out } from "./kind.ts"; - * import { createMonad } from "./monad.ts"; - * import { pipe } from "./fn.ts"; - * - * // Create a Kind for Promise - * interface KindPromise extends Kind { - * readonly kind: Promise>; - * }; - * - * // Create an of and chain function for Promise - * const of = (a: A): Promise => Promise.resolve(a); - * const chain = (faui: (a: A) => Promise) => - * (ua: Promise): Promise => ua.then(faui); - * - * // Derive a Monad for Promise - * const M = createMonad({ of, chain }); - * - * const result = await pipe( - * M.of((n: number) => (m: number) => n + m), - * M.ap(M.of(1)), - * M.ap(M.of(1)), - * ); // 2 - * ``` - * - * @experimental - * - * @since 2.0.0 - */ -export function createMonad( - { of, chain }: Pick, "of" | "chain">, -): Monad { - const Monad: Monad = { - of, - ap: (ua) => (ufai) => pipe(ufai, chain((fab) => pipe(ua, Monad.map(fab)))), - map: (fai) => (ta) => pipe(ta, chain((a) => of(fai(a)))), - chain, - join: (uua) => pipe(uua, chain((ua) => ua)), - }; - return Monad; -} diff --git a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/monoid.ts b/vendor/deno.land/x/fun@v.2.0.0-alpha.11/monoid.ts deleted file mode 100644 index 984173f..0000000 --- a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/monoid.ts +++ /dev/null @@ -1,202 +0,0 @@ -import type { Semigroup } from "./semigroup.ts"; - -import { pipe } from "./fn.ts"; -import * as S from "./semigroup.ts"; - -/** - * A Monoid is an algebra with a notion of emptiness. In addition - * to this it extends the algebra of a Semigroup. This means that - * an instance of Monoid has the methods empty and concat. - * - * An instance of Monoid must obey the following laws: - * - * 1. Associativity: - * pipe(a, concat(b), concat(c)) === pipe(a, concat(pipe(b, concat(c)))) - * 2. Right identity: concat(a)(empty()) === a - * 3. Left identity: concat(M.empty())(a) === a - * - * The original type came from - * [static-land](https://github.com/fantasyland/static-land/blob/master/docs/spec.md#monoid) - * - * @since 2.0.0 - */ -export interface Monoid extends Semigroup { - readonly empty: () => T; -} - -/** - * A type for Monoid over any, useful as an extension target for - * functions that take any Monoid and do not need to - * extract the type. - * - * @since 2.0.0 - */ -// deno-lint-ignore no-explicit-any -export type AnyMonoid = Monoid; - -/** - * A type level extractor, used to pull the inner type from a Monoid. - * - * @since 2.0.0 - */ -export type TypeOf = T extends Monoid ? A : never; - -/** - * Create a tuple Monoid from an array of Monoids. - * - * @example - * ```ts - * import { tuple, concatAll } from "./monoid.ts"; - * import * as N from "./number.ts"; - * - * const monoid = tuple( - * N.MonoidNumberSum, - * N.MonoidNumberProduct - * ); - * const concat = concatAll(monoid); - * - * const result1 = concat([[1, 2], [3, 4]]); // [4, 8] - * const result2 = concat([]); // [0, 1] - * const result3 = concat([[1, 2]]); // [1, 2] - * const result4 = concat([[1, 0], [1, 100], [1, -1]]); // [3, 0] - * ``` - * - * @since 2.0.0 - */ -export function tuple( - ...monoids: T -): Monoid<{ readonly [K in keyof T]: TypeOf }> { - type Concat = Monoid<{ readonly [K in keyof T]: TypeOf }>["concat"]; - return ({ - concat: S.tuple(...monoids).concat as Concat, - empty: () => - monoids.map((m) => m.empty()) as unknown as { - [K in keyof T]: TypeOf; - }, - }); -} - -/** - * Create a dual Monoid from an existing monoid. This effectively - * switches the order of application of the original Monoid. - * - * @example - * ```ts - * import { dual, concatAll, intercalcate } from "./monoid.ts"; - * import { MonoidString } from "./string.ts"; - * import { pipe } from "./fn.ts"; - * - * const reverse = dual(MonoidString); - * const reverseAll = pipe( - * reverse, - * intercalcate(" "), - * concatAll, - * ); - * - * const result = reverseAll(["Hello", "World"]); // "World Hello" - * ``` - * - * @since 2.0.0 - */ -export function dual(M: Monoid): Monoid { - return ({ - concat: S.dual(M).concat, - empty: M.empty, - }); -} - -/** - * Create a monoid that works like Array.join, - * inserting middle between every two values - * that are concatenated. This can have some interesting - * results. - * - * @example - * ```ts - * import * as M from "./monoid.ts"; - * import * as S from "./string.ts"; - * import { pipe } from "./fn.ts"; - * - * const { concat: toList } = pipe( - * S.MonoidString, - * M.intercalcate(", "), - * ); - * - * const list = pipe( - * "apples", - * toList("oranges"), - * toList("and bananas"), - * ); // list === "apples, oranges, and bananas" - * ``` - * - * @since 2.0.0 - */ -export function intercalcate(middle: A) { - return (M: Monoid): Monoid => ({ - concat: (right) => M.concat(pipe(middle, M.concat(right))), - empty: M.empty, - }); -} - -/** - * Create a struct Monoid from an struct of Monoids. - * - * @example - * ```ts - * import { struct, concatAll } from "./monoid.ts"; - * import * as N from "./number.ts"; - * - * const monoid = struct({ - * sum: N.MonoidNumberSum, - * mult: N.MonoidNumberProduct - * }); - * const concat = concatAll(monoid); - * - * const result1 = concat([ - * { sum: 1, mult: 2 }, - * { sum: 3, mult: 4 } - * ]); // { sum: 4, mult: 8 } - * const result2 = concat([]); // { sum: 0, mult: 1 } - * const result3 = concat([{ sum: 1, mult: 2 }]); // { sum: 1, mult: 2 } - * ``` - * - * @since 2.0.0 - */ -// deno-lint-ignore no-explicit-any -export function struct>( - monoids: { [K in keyof O]: Monoid }, -): Monoid<{ readonly [K in keyof O]: O[K] }> { - return { - ...S.struct(monoids), - empty: () => { - const empty = {} as { [K in keyof O]: O[K] }; - for (const key of Object.keys(monoids) as (keyof O)[]) { - empty[key] = monoids[key].empty(); - } - return empty; - }, - }; -} - -/** - * Given a Monoid, create a function that will - * iterate through an array of values and concat - * them. This is not much more than Array.reduce(concat). - * - * @example - * ```ts - * import * as M from "./monoid.ts"; - * import * as N from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const sumAll = M.concatAll(N.MonoidNumberSum); - * - * const sum = sumAll([1, 30, 80, 1000, 52, 42]); // sum === 1205 - * ``` - * - * @since 2.0.0 - */ -export function concatAll(M: Monoid): (as: ReadonlyArray) => A { - const innerFold = S.concatAll(M); - return innerFold(M.empty()); -} diff --git a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/nilable.ts b/vendor/deno.land/x/fun@v.2.0.0-alpha.11/nilable.ts deleted file mode 100644 index 4786d01..0000000 --- a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/nilable.ts +++ /dev/null @@ -1,114 +0,0 @@ -/** ***************************************************************************** - * Nilable - * Note: The Nilable Functor is not a true Functor as it does not satisfy the functor laws. - * However, it is still fairly useful. - * - * Nilable is a type like Maybe/Option that uses undefined/null in lieu of tagged unions. - * *****************************************************************************/ - -import type { Alt } from "./alt.ts"; -import type { Kind, Out } from "./kind.ts"; -import type { Monad } from "./monad.ts"; -import type { Predicate } from "./predicate.ts"; -import type { Show } from "./show.ts"; - -import { identity, pipe } from "./fn.ts"; - -export type Nil = undefined | null; - -export type Nilable = Nil | A; - -export interface KindNilable extends Kind { - readonly kind: Nilable>; -} - -export const nil: Nil = undefined; - -export function constNil(): Nilable { - return nil; -} - -export function make(a: A): Nilable { - return isNotNil(a) ? a : nil; -} - -export function fromPredicate( - predicate: Predicate, -): (ta: Nilable) => Nilable { - return (ta) => isNotNil(ta) && predicate(ta) ? ta : nil; -} - -export function tryCatch(fa: () => A): Nilable { - try { - return fa(); - } catch (_) { - return nil; - } -} - -export function match( - onNil: () => I, - onValue: (a: A) => I, -): (ta: Nilable) => I { - return (ta) => (isNil(ta) ? onNil() : onValue(ta)); -} - -export function getOrElse(onNil: () => A): (ta: Nilable) => A { - return (ta) => isNil(ta) ? onNil() : ta; -} - -export function toNull(ta: Nilable): A | null { - return isNil(ta) ? null : ta; -} - -export function toUndefined(ta: Nilable): A | undefined { - return isNil(ta) ? undefined : ta; -} - -export function isNil(ta: Nilable): ta is Nil { - return ta === undefined || ta === null; -} - -export function isNotNil(ta: Nilable): ta is NonNullable { - return !isNil(ta); -} - -export function of(a: A): Nilable { - return a; -} - -export function throwError(): Nilable { - return nil; -} - -export function ap( - ua: Nilable, -): (ufai: Nilable<(a: A) => I>) => Nilable { - return (ufai) => isNil(ua) ? nil : isNil(ufai) ? nil : ufai(ua); -} - -export function map(fai: (a: A) => I): (ta: Nilable) => Nilable { - return (ta) => isNil(ta) ? nil : fai(ta); -} - -export function join(tta: Nilable>): Nilable { - return pipe(tta, chain(identity)); -} - -export function chain( - fati: (a: A) => Nilable, -): (ta: Nilable) => Nilable { - return (ta) => isNil(ta) ? nil : fati(ta); -} - -export function alt(tb: Nilable): (ta: Nilable) => Nilable { - return (ta) => isNil(ta) ? tb : ta; -} - -export const MonadNilable: Monad = { of, ap, map, join, chain }; - -export const AltNilable: Alt = { alt, map }; - -export function getShow({ show }: Show): Show> { - return { show: (ma) => (isNil(ma) ? "nil" : show(ma)) }; -} diff --git a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/option.ts b/vendor/deno.land/x/fun@v.2.0.0-alpha.11/option.ts deleted file mode 100644 index 6b5a3a5..0000000 --- a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/option.ts +++ /dev/null @@ -1,934 +0,0 @@ -/** - * The Option type is generally considered functional programming's response to - * handling null or undefined. Sometimes Option is also called Maybe. Its - * purpose is to represent the possibility that some data is not available. - * - * @module Option - * @since 2.0.0 - */ -import type { $, Kind, Out } from "./kind.ts"; -import type { Alt } from "./alt.ts"; -import type { Applicative } from "./applicative.ts"; -import type { Apply } from "./apply.ts"; -import type { Chain } from "./chain.ts"; -import type { Extend } from "./extend.ts"; -import type { Either } from "./either.ts"; -import type { Filterable } from "./filterable.ts"; -import type { Foldable } from "./foldable.ts"; -import type { Functor } from "./functor.ts"; -import type { Monad } from "./monad.ts"; -import type { Monoid } from "./monoid.ts"; -import type { Ord } from "./ord.ts"; -import type { Pair } from "./pair.ts"; -import type { Predicate } from "./predicate.ts"; -import type { Refinement } from "./refinement.ts"; -import type { Semigroup } from "./semigroup.ts"; -import type { Eq } from "./eq.ts"; -import type { Show } from "./show.ts"; -import type { Traversable } from "./traversable.ts"; - -import { isNotNil } from "./nilable.ts"; -import { fromCompare } from "./ord.ts"; -import { flow, handleThrow, identity, pipe } from "./fn.ts"; - -/** - * The None type represents the non-existence of a value. - * - * @since 2.00. - */ -export type None = { tag: "None" }; - -/** - * The Some type represents the existence of a value. - * - * @since 2.00. - */ -export type Some = { tag: "Some"; value: V }; - -/** - * The Option represents a type A that may or may not exist. It's the functional - * progamming equivalent of A | undefined | null. - * - * @since 2.0.0 - */ -export type Option = Some | None; - -/** - * Specifies Option as a Higher Kinded Type, with covariant - * parameter A corresponding to the 0th index of any substitutions. - * - * @since 2.0.0 - */ -export interface KindOption extends Kind { - readonly kind: Option>; -} - -/** - * The cannonical implementation of the None type. Since all None values are equivalent there - * is no reason to construct more than one object instance. - * - * @example - * ```ts - * import type { Option } from "./option.ts"; - * import * as O from "./option.ts"; - * - * function fromNilable(a: A | null | undefined): Option { - * return a === null || a === undefined ? O.none : O.some(a); - * } - * - * const result1 = fromNilable(null); // None - * const result2 = fromNilable(1); // Some - * ``` - * - * @since 2.0.0 - */ -export const none: Option = { tag: "None" }; - -/** - * The some constructer takes any value and wraps it in the Some type. - * - * @example - * ```ts - * import type { Option } from "./option.ts"; - * import * as O from "./option.ts"; - * - * function fromNilable(a: A | null | undefined): Option { - * return a === null || a === undefined ? O.none : O.some(a); - * } - * - * const result1 = fromNilable(null); // None - * const result2 = fromNilable(1); // Some - * ``` - * - * @since 2.0.0 - */ -export function some(value: A): Option { - return ({ tag: "Some", value }); -} - -/** - * The constNone is a thunk that returns the canonical none instance. - */ -export function constNone(): Option { - return none; -} - -/** - * The fromNullable function takes a potentially null or undefined value - * and maps null or undefined to None and non-null and non-undefined - * values to Some>. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * - * const a: number | undefined = undefined; - * const b: number | undefined = 2; - * const c = [1, 2, 3]; - * - * const result1 = O.fromNullable(a); // None - * const result2 = O.fromNullable(b); // Some - * const result3 = O.fromNullable(c[3]); // None - * ``` - * - * @since 2.0.0 - */ -export function fromNullable(a: A): Option> { - return isNotNil(a) ? some(a) : none; -} - -/** - * The fromPredicate function will test the value a with the predicate. If - * the predicate evaluates to false then the function will return a None, - * otherwise it will return the value wrapped in Some. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * - * const positive = O.fromPredicate((n: number) => n > 0); - * - * const result1 = positive(-1); // None - * const result2 = positive(1); // Some - * ``` - * - * @since 2.0.0 - */ -export function fromPredicate( - refinement: Refinement, -): (a: A) => Option; -export function fromPredicate( - refinement: Predicate, -): (a: A) => Option; -export function fromPredicate(predicate: Predicate) { - return (a: A): Option => (predicate(a) ? some(a) : none); -} - -/** - * Take a function that can throw and wrap it in a try/catch block. Returns a - * new function that takes the same arguments as the original but returns the - * original value wrapped in an Option. If the function throws then the new - * function returns None, otherwise it returns Some. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * - * function thrower(n: number): number { - * if (n < 0) { - * throw new Error("This number is too small"); - * } - * return n; - * } - * - * const handler = O.tryCatch(thrower); - * - * const result1 = handler(-1); // None - * const result2 = handler(0); // Some(0); - * ``` - * - * @since 2.0.0 - */ -export function tryCatch( - fn: (...d: D) => A, -): (...d: D) => Option { - return handleThrow(fn, some, constNone); -} - -/** - * The match functionis the standard catamorphism on an Option. It operates like - * a switch case operator over the two potential cases for an Option type. One - * supplies functions for handling the Some case and the None case with matching - * return types and fold calls the correct function for the given option. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * - * const toNumber = O.match(() => 0, n => n); - * - * const result1 = toNumber(O.none); // 0 - * const result2 = toNumber(O.some(1)); // 1 - * ``` - * - * @since 2.0.0 - */ -export function match(onNone: () => B, onSome: (a: A) => B) { - return (ta: Option): B => (isNone(ta) ? onNone() : onSome(ta.value)); -} - -/** - * getOrElse operates like a simplified fold. One supplies a thunk that returns a default - * inner value of the Option for the cases where the option is None. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * - * const toNumber = O.getOrElse(() => 0); - * - * const result1 = toNumber(O.some(1)); // 1 - * const result2 = toNumber(O.none); // 0 - * ``` - * - * @since 2.0.0 - */ -export function getOrElse(onNone: () => B) { - return (ta: Option): B => isNone(ta) ? onNone() : ta.value; -} - -/** - * toNullable returns either null or the inner value of an Option. This is useful for - * interacting with code that handles null but has no concept of the Option type. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * - * const result1 = O.toNull(O.none); // null - * const result2 = O.toNull(O.some(1)); // 1 - * ``` - * - * @since 2.0.0 - */ -export function toNull(ma: Option): A | null { - return isNone(ma) ? null : ma.value; -} - -/** - * toUndefined returns either undefined or the inner value of an Option. This is useful for - * interacting with code that handles undefined but has no concept of the Option type. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * - * const result1 = O.toUndefined(O.none); // undefined - * const result2 = O.toUndefined(O.some(1)); // 1 - * ``` - * - * @since 2.0.0 - */ -export function toUndefined(ma: Option): A | undefined { - return isNone(ma) ? undefined : ma.value; -} - -/** - * Tests wether an Option is None, returning true if the passed option is None - * and false if it is Some. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * - * const result1 = O.isNone(O.none); // true - * const result2 = O.isNone(O.some(1)); // false - * ``` - * - * @since 2.0.0 - */ -export function isNone(m: Option): m is None { - return m.tag === "None"; -} - -/** - * Tests wether an Option is Some, returning true if the passed option is Some - * and false if it is None. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * - * const result1 = O.isSome(O.none); // false - * const result2 = O.isSome(O.some(1)); // true - * ``` - * - * @since 2.0.0 - */ -export function isSome(m: Option): m is Some { - return m.tag === "Some"; -} - -/** - * Returns none, always. This is the empty function used by getMonoid. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * - * const result = O.empty(); // None - * ``` - * - * @since 2.0.0 - */ -export function empty(): Option { - return none; -} - -/** - * Create an Option by wrapping any value A in Some. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * - * const result1 = O.of(1); // Some(1) - * const result2 = O.of("Hello"); // Some("Hello") - * ``` - * - * @since 2.0.0 - */ -export function of(a: A): Option { - return some(a); -} - -/** - * Apply the mapping function fai to the inner value of an Option if it - * exists. If the option is None then this function does nothing. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * import { pipe } from "./fn.ts"; - * - * const result1 = pipe(O.some(1), O.map(n => n + 1)); // Some(2) - * const result2 = pipe(O.none, O.map((n: number) => n + 1)); // None - * ``` - * - * @since 2.0.0 - */ -export function map(fai: (a: A) => I): (ua: Option) => Option { - return (ua) => isNone(ua) ? none : some(fai(ua.value)); -} - -/** - * Apply a mapping function to an Option but if the mapping function returns - * null or undefined the null or undefined value is lifted into None. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * import { pipe } from "./fn.ts"; - * - * const result1 = pipe( - * O.some([1, 2, 3]), - * O.mapNullable(arr => arr[10]), - * ); // None - * const result2 = pipe( - * O.constNone>(), - * O.mapNullable(arr => arr[0]), - * ); // None - * const result3 = pipe( - * O.some([1, 2, 3]), - * O.mapNullable(arr => arr[0]), - * ); // Some(1) - * ``` - * - * @since 2.0.0 - */ -export function mapNullable( - f: (a: A) => I | null | undefined, -): (ua: Option) => Option { - return chain(flow(f, fromNullable)); -} - -/** - * Apply a value A wrapped in an option to a function (a: A) => I wrapped in an - * Option. If either the wrapped value or the wrapped function are None then the - * result is None, if they are both Some then the result is Some. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * import { pipe } from "./fn.ts"; - * - * const result1 = pipe( - * O.some((n: number) => n + 1), - * O.ap(O.some(1)), - * ); // Some(2) - * const result2 = pipe( - * O.some((n: number) => n + 1), - * O.ap(O.none), - * ); // None - * ``` - * - * @since 2.0.0 - */ -export function ap( - ua: Option, -): (ufai: Option<(a: A) => I>) => Option { - return (ufai) => - isNone(ufai) || isNone(ua) ? none : some(ufai.value(ua.value)); -} - -/** - * Apply a function (a: A) => Option to the wrapped value of an Option if - * the wrapped value exists, flattening the application result into an - * Option. This is the equivalent of first mapping from Option to - * Option> and then calling join to flatten the Options. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * O.some(1), - * O.chain(n => n > 0 ? O.some(n) : O.none), - * ); // Some(1) - * ``` - * - * @since 2.0.0 - */ -export function chain( - fati: (a: A) => Option, -): (ta: Option) => Option { - return (ua) => isNone(ua) ? ua : fati(ua.value); -} - -/** - * Flatten a nested Option> into an Option. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * - * const result1 = O.join(O.some(O.some(1))); // Some(1) - * const result2 = O.join(O.some(O.none)); // None - * const result3 = O.join(O.none); // None - * ``` - * - * @since 2.0.0 - */ -export function join(taa: Option>): Option { - return pipe(taa, chain(identity)); -} - -/** - * Replace an first with second if first is None. This allows one to offer a - * a replacement or default. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * import { pipe } from "./fn.ts"; - * - * const result1 = pipe(O.some(1), O.alt(O.some(2))); // Some(1); - * const result2 = pipe(O.some(1), O.alt(O.constNone())); // Some(1); - * const result3 = pipe(O.none, O.alt(O.some(2))); // Some(2); - * const result4 = pipe(O.none, O.alt(O.none)); // None - * ``` - * - * @since 2.0.0 - */ -export function alt(second: Option): (first: Option) => Option { - return (first) => isNone(first) ? second : first; -} - -/** - * Extend an Option by mapping it to a concrete value. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * import { identity } from "./fn.ts"; - * - * const match = O.match(() => 0, identity); - * const extend = O.extend(match); - * - * const result1 = extend(O.some(1)); // Some(1); - * const result2 = extend(O.none); // Some(0); - * ``` - * - * @since 2.0.0 - */ -export function extend( - ftai: (ta: Option) => I, -): (ta: Option) => Option { - return flow(ftai, some); -} - -/** - * Apply a predicate to the inner value of an Option, returning true if the - * option is Some and the predicate returns true, otherwise returning false. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * import { pipe } from "./fn.ts"; - * - * const positive = (n: number) => n > 0; - * - * const result1 = pipe(O.some(1), O.exists(positive)); // true - * const result2 = pipe(O.some(0), O.exists(positive)); // false - * const result3 = pipe(O.none, O.exists(positive)); // false - * ``` - * - * @since 2.0.0 - */ -export function exists(predicate: Predicate): (ua: Option) => boolean { - return (ua) => isSome(ua) && predicate(ua.value); -} - -/** - * Apply a refinement or predicate to the inner value of an Option, returning - * the original option if the value exists and the predicate/refinement return - * true, otherwise returning None. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * import { pipe } from "./fn.ts"; - * - * const positive = (n: number) => n > 0; - * - * const result1 = pipe(O.some(1), O.filter(positive)); // Some(1) - * const result2 = pipe(O.some(0), O.filter(positive)); // None - * const result3 = pipe(O.none, O.filter(positive)); // None - * ``` - * - * @since 2.0.0 - */ -export function filter( - refinement: Refinement, -): (ta: Option) => Option; -export function filter( - predicate: Predicate, -): (ta: Option) => Option; -export function filter( - predicate: Predicate, -): (ta: Option) => Option { - const _exists = exists(predicate); - return (ta) => _exists(ta) ? ta : none; -} - -/** - * Apply a filter and mapping operation at the same time against an Option. This - * is equivalent to the chain function for Option. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * - * const nonempty = (str: string) => str.length > 0 ? O.some(str.length) : O.none; - * const filterMap = O.filterMap(nonempty); - * - * const result1 = filterMap(O.some("Hello")); // Some(5); - * const result2 = filterMap(O.some("")); // None - * const result3 = filterMap(O.none); // None - * ``` - * - * @since 2.0.0 - */ -export function filterMap( - fai: (a: A) => Option, -): (ua: Option) => Option { - return chain(fai); -} - -/** - * Given a refinement or predicate, return a function that splits an Option into - * a Pair. Due to the nature of the option type this will always - * return Pair, Pair, or Pair. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * - * const partition = O.partition((n: number) => n > 0); - * - * const result1 = partition(O.some(1)); // [Some(1), None] - * const result2 = partition(O.some(0)); // [None, Some(0)] - * const result3 = partition(O.none); // [None, None] - * ``` - * - * @since 2.0.0 - */ -export function partition( - refinement: Refinement, -): (ua: Option) => Pair, Option>; -export function partition( - predicate: Predicate, -): (ua: Option) => Pair, Option>; -export function partition( - predicate: Predicate, -): (ua: Option) => Pair, Option> { - type Output = Pair, Option>; - const empty: Output = [none, none]; - return (ua) => - isNone(ua) ? empty : predicate(ua.value) ? [ua, none] : [none, ua]; -} - -/** - * Map and partition over the inner value of an Option at the same time. If - * the option passed is None then the result is [None, None], otherwise Right - * will result in [Some, None], and Left will result in [None, Some]. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * import * as E from "./either.ts"; - * - * const partitioner = (n: number) => n > 0 ? E.right(n) : E.left(n * -1); - * const partitionMap = O.partitionMap(partitioner); - * - * const result1 = partitionMap(O.some(1)); // [Some(1), None] - * const result2 = partitionMap(O.some(-1)); // [None, Some(1)] - * const result3 = partitionMap(O.none); // [None, None] - * ``` - * - * @since 2.0.0 - */ -export function partitionMap( - fai: (a: A) => Either, -): (ua: Option) => Pair, Option> { - type Output = Pair, Option>; - const empty: Output = [none, none]; - return (ua) => { - if (isNone(ua)) { - return empty; - } - const result = fai(ua.value); - return result.tag === "Right" - ? [some(result.right), none] - : [none, some(result.left)]; - }; -} - -/** - * Reduce over an Option. Since an Option contains at most one value this - * function operates a lot like getOrElse. If the passed option is None then it - * returns the initial value, otherwise the reducer function is called with both - * the initial value and the inner A. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * - * const reduce = O.reduce((n: number, m: number) => n + m, 0); - * - * const result1 = reduce(O.some(1)); // 1 - * const result2 = reduce(O.none); // 0 - * ``` - * - * @since 2.0.0 - */ -export function reduce( - reducer: (accumulator: O, current: A) => O, - initial: O, -): (ua: Option) => O { - return (ua) => isSome(ua) ? reducer(initial, ua.value) : initial; -} - -/** - * Traverse over an Option using the supplied Applicative. This allows one to - * turn an Option into Kind>. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const toRange = (n: number) => A.range(n); - * const traverse = pipe(toRange, O.traverse(A.ApplicativeArray)); - * - * const result1 = traverse(O.some(3)); // [Some(0), Some(1), Some(2)]; - * const result2 = traverse(O.none); // [None] - * ``` - * - * @since 2.0.0 - */ -export function traverse( - A: Applicative, -): ( - favi: (a: A) => $, -) => (ta: Option) => $, J, K], [L], [M]> { - return ( - favi: (a: A) => $, - ): (ta: Option) => $, J, K], [L], [M]> => - match( - () => A.of(constNone()), - (a) => pipe(favi(a), A.map(some)), - ); -} - -/** - * The canonical implementation of Functor for Option. It contains - * the method map. - * - * @since 2.0.0 - */ -export const FunctorOption: Functor = { map }; - -/** - * The canonical implementation of Apply for Option. It contains - * the methods ap and map. - * - * @since 2.0.0 - */ -export const ApplyOption: Apply = { ap, map }; - -/** - * The canonical implementation of Applicative for Option. It contains - * the methods of, ap, and map. - * - * @since 2.0.0 - */ -export const ApplicativeOption: Applicative = { of, ap, map }; - -/** - * The canonical implementation of Chain for Option. It contains - * the methods ap, map, and chain. - * - * @since 2.0.0 - */ -export const ChainOption: Chain = { ap, map, chain }; - -/** - * The canonical implementation of Monad for Option. It contains - * the methods of, ap, map, join, and chain. - * - * @since 2.0.0 - */ -export const MonadOption: Monad = { of, ap, map, join, chain }; - -/** - * The canonical implementation of Alt for Option. It contains - * the methods alt and map - * - * @since 2.0.0 - */ -export const AltOption: Alt = { alt, map }; - -/** - * The canonical implementation of Extend for Option. It contains - * the methods map and extend - * - * @since 2.0.0 - */ -export const ExtendsOption: Extend = { map, extend }; - -/** - * The canonical implementation of Filterable for Option. It contains - * the methods filter, filterMap, partition, and partitionMap. - * - * @since 2.0.0 - */ -export const FilterableOption: Filterable = { - filter, - filterMap, - partition, - partitionMap, -}; - -/** - * The canonical implementation of Foldable for Option. It contains - * the method reduce. - * - * @since 2.0.0 - */ -export const FoldableOption: Foldable = { reduce }; - -/** - * The canonical implementation of Traversable for Option. It contains - * the methods map, reduce, and traverse. - * - * @since 2.0.0 - */ -export const TraversableOption: Traversable = { - map, - reduce, - traverse, -}; - -/** - * Create an instance of Show for Option given an instance of Show for A. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * - * const Show = O.getShow({ show: (n: number) => n.toString() }); // Show> - * - * const result1 = Show.show(O.some(1)); // "Some(1)" - * const result2 = Show.show(O.none); // "None" - * ``` - * - * @since 2.0.0 - */ -export function getShow({ show }: Show): Show> { - return ({ - show: (ma) => (isNone(ma) ? "None" : `${"Some"}(${show(ma.value)})`), - }); -} - -/** - * Create an instance of Eq> given an instance of Eq. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * import * as N from "./number.ts"; - * - * const Eq = O.getEq(N.EqNumber); - * - * const result1 = Eq.equals(O.some(1))(O.some(2)); // false - * const result2 = Eq.equals(O.some(1))(O.some(1)); // true - * const result3 = Eq.equals(O.none)(O.none); // true - * const result4 = Eq.equals(O.some(1))(O.none); // false - * ``` - * - * @since 2.0.0 - */ -export function getEq(S: Eq): Eq> { - return ({ - equals: (a) => (b) => - a === b || - ((isSome(a) && isSome(b)) - ? S.equals(a.value)(b.value) - : (isNone(a) && isNone(b))), - }); -} - -/** - * Create an instance of Ord> given an instance of Ord. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * import * as N from "./number.ts"; - * - * const Ord = O.getOrd(N.OrdNumber); - * - * const result1 = Ord.compare(O.some(1), O.some(2)); // 1 - * const result2 = Ord.compare(O.some(1), O.some(1)); // 0 - * const result3 = Ord.compare(O.none, O.none); // 0 - * const result4 = Ord.compare(O.none, O.some(1)); // -1 - * ``` - * - * @since 2.0.0 - */ -export function getOrd(O: Ord): Ord> { - return fromCompare((fst, snd) => - isNone(fst) - ? isNone(snd) ? 0 : -1 - : isNone(snd) - ? 1 - : O.compare(fst.value, snd.value) - ); -} - -/** - * Create an instance of Semigroup> given an instance of Semigroup. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * import * as N from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const { concat } = O.getSemigroup(N.SemigroupNumberSum); - * - * const result1 = pipe(O.some(1), concat(O.some(1))); // Some(2) - * const result2 = pipe(O.none, concat(O.some(1))); // Some(1) - * const result3 = pipe(O.some(1), concat(O.none)); // Some(1) - * ``` - * - * @since 2.0.0 - */ -export function getSemigroup( - S: Semigroup, -): Semigroup> { - return ({ - concat: (x) => (y) => - isNone(x) ? y : isNone(y) ? x : of(S.concat(x.value)(y.value)), - }); -} - -/** - * Create an instance of Monoid> given an instance of Monoid. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * import * as N from "./number.ts"; - * import * as M from "./monoid.ts"; - * - * const monoid = O.getMonoid(N.MonoidNumberSum); - * const concatAll = M.concatAll(monoid); - * - * const result1 = concatAll([O.some(1), O.some(2), O.some(3)]); // Some(6) - * const result2 = concatAll([O.some(1), O.some(2), O.none]); // Some(3) - * const result3 = concatAll([O.none, O.none, O.none]); // None - * const result4 = concatAll([]); // None - * ``` - * - * @since 2.0.0 - */ -export function getMonoid(M: Monoid): Monoid> { - return ({ - ...getSemigroup(M), - empty: constNone, - }); -} diff --git a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/ord.ts b/vendor/deno.land/x/fun@v.2.0.0-alpha.11/ord.ts deleted file mode 100644 index 69ee820..0000000 --- a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/ord.ts +++ /dev/null @@ -1,458 +0,0 @@ -/** - * This file contains all of the tools for creating and - * composing Ords. Since an Ord encapsulates partial - * equality, the tools in this file should concern - * itself with sorting according to an Ordering as well - */ - -import type { Contravariant } from "./contravariant.ts"; -import type { In, Kind } from "./kind.ts"; -import type { Eq } from "./eq.ts"; - -/** - * The ordering type is the expected output of any - * Compare function. The canonical example is the output - * of the Array.sort function. For any two values `first` - * and `second`, Ordering means the following: - * - * * -1 : first < second - * * 0 : first = second - * * 1 : first > second - * - * @since 2.0.0 - */ -export type Ordering = -1 | 0 | 1; - -/** - * The Compare function takes to values of the same - * type and returns an ordering, indicating whether - * `first` is less than, equal to, or greater than - * `second. - * - * @since 2.0.0 - */ -export type Compare = (first: A, second: A) => Ordering; - -/** - * An Ord is an algebra with a notion of equality and - * order. Specifically, Ord extends Eq and thus - * inherites an `equals` method. For order it contains - * a signed comparison function, taking two values - * and returning -1, 0, or 1 when first < second, - * first === second, and first > second respectively. - * - * The original type came from - * [static-land](https://github.com/fantasyland/static-land/blob/master/docs/spec.md#ord) - * - * @since 2.0.0 - */ -export interface Ord extends Eq { - readonly compare: Compare; -} - -/** - * Specifies Ord as a Higher Kinded Type, with - * contravariant parameter D corresponding to the 0th - * index of any Substitutions. - * - * @since 2.0.0 - */ -export interface KindOrd extends Kind { - readonly kind: Ord>; -} - -/** - * Returns an Ordering from any number according - * to its relationship with 0. - * - * @example - * ```ts - * import { sign } from "./ord.ts"; - * - * const result1 = sign(-9586); // -1 - * const result2 = sign(-0.005); // -1 - * const result3 = sign(1000); // 1 - * const result4 = sign(Number.NEGATIVE_INFINITY); // -1 - * const result5 = sign(0); // 0 - * ``` - * - * @since 2.0.0 - */ -export function sign(n: number): Ordering { - return n < 0 ? -1 : n > 0 ? 1 : 0; -} - -/** - * Construct a curried less than function over A from Ord. - * - * @example - * ```ts - * import * as O from "./ord.ts"; - * import { OrdNumber } from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const lt = O.lt(OrdNumber); - * - * const result1 = pipe(1, lt(2)); // true - * const result2 = pipe(2, lt(1)); // false - * const result3 = pipe(1, lt(1)); // false - * ``` - * - * @since 2.0.0 - */ -export function lt(ord: Ord): (snd: A) => (fst: A) => boolean { - return (snd) => (fst): boolean => ord.compare(fst, snd) === -1; -} - -/** - * Construct a curried less than or equal to function over A from Ord. - * - * @example - * ```ts - * import * as O from "./ord.ts"; - * import { OrdNumber } from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const lte = O.lte(OrdNumber); - * - * const result1 = pipe(1, lte(2)); // true - * const result2 = pipe(2, lte(1)); // false - * const result3 = pipe(1, lte(1)); // true - * ``` - * - * @since 2.0.0 - */ -export function lte(ord: Ord): (snd: A) => (fst: A) => boolean { - return (snd) => (fst) => ord.compare(fst, snd) !== 1; -} - -/** - * Construct a curried greater than or equal to function over A from Ord. - * - * @example - * ```ts - * import * as O from "./ord.ts"; - * import { OrdNumber } from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const gte = O.gte(OrdNumber); - * - * const result1 = pipe(1, gte(2)); // false - * const result2 = pipe(2, gte(1)); // true - * const result3 = pipe(1, gte(1)); // true - * ``` - * - * @since 2.0.0 - */ -export function gte(ord: Ord): (snd: A) => (fst: A) => boolean { - return (snd) => (fst) => ord.compare(fst, snd) !== -1; -} - -/** - * Construct a curried greater than function over A from Ord. - * - * @example - * ```ts - * import * as O from "./ord.ts"; - * import { OrdNumber } from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const gt = O.gt(OrdNumber); - * - * const result1 = pipe(1, gt(2)); // false - * const result2 = pipe(2, gt(1)); // true - * const result3 = pipe(1, gt(1)); // false - * ``` - * - * @since 2.0.0 - */ -export function gt(ord: Ord): (snd: A) => (fst: A) => boolean { - return (snd) => (fst) => ord.compare(fst, snd) === 1; -} - -/** - * Construct a minimum function over A from Ord. - * - * @example - * ```ts - * import * as O from "./ord.ts"; - * import { OrdNumber } from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const min = O.min(OrdNumber); - * - * const result1 = pipe(1, min(2)); // 1 - * const result2 = pipe(2, min(1)); // 1 - * const result3 = pipe(1, min(1)); // 1 - * ``` - * - * @since 2.0.0 - */ -export function min(ord: Ord): (snd: A) => (fst: A) => A { - return (snd) => (fst) => ord.compare(fst, snd) !== 1 ? fst : snd; -} - -/** - * Construct a maximum function over A from Ord. - * - * @example - * ```ts - * import * as O from "./ord.ts"; - * import { OrdNumber } from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const max = O.max(OrdNumber); - * - * const result1 = pipe(1, max(2)); // 2 - * const result2 = pipe(2, max(1)); // 2 - * const result3 = pipe(1, max(1)); // 1 - * ``` - * - * @since 2.0.0 - */ -export function max(ord: Ord): (snd: A) => (fst: A) => A { - return (snd) => (fst) => ord.compare(fst, snd) !== -1 ? fst : snd; -} - -/** - * Construct an inclusive clamp function over A from Ord. - * - * @example - * ```ts - * import * as O from "./ord.ts"; - * import { OrdNumber } from "./number.ts"; - * - * const clamp = O.clamp(OrdNumber); - * const clamp1 = clamp(0, 10) - * - * const result1 = clamp1(-1); // 0 - * const result2 = clamp1(1); // 1 - * const result3 = clamp1(100); // 10 - * ``` - * - * @since 2.0.0 - */ -export function clamp(ord: Ord): (low: A, high: A) => (value: A) => A { - const _min = min(ord); - const _max = max(ord); - return (low, high) => { - const __min = _min(high); - const __max = _max(low); - return (value) => __min(__max(value)); - }; -} - -/** - * Construct an exclusive between function over A from Ord. - * - * @example - * ```ts - * import * as O from "./ord.ts"; - * import { OrdNumber } from "./number.ts"; - * - * const between = O.between(OrdNumber); - * const between1 = between(0, 10) - * - * const result1 = between1(-1); // false - * const result2 = between1(1); // true - * const result3 = between1(100); // false - * ``` - * - * @since 2.0.0 - */ -export function between( - ord: Ord, -): (low: A, high: A) => (value: A) => boolean { - const _gt = gt(ord); - const _lt = lt(ord); - return (low, high) => { - const __gt = _gt(low); - const __lt = _lt(high); - return (value) => __gt(value) && __lt(value); - }; -} - -/** - * Derives an Ord from a Compare function. - * - * @example - * ```ts - * import { clamp, lte, min, fromCompare, sign } from "./ord.ts"; - * import { pipe } from "./fn.ts"; - * - * const date = fromCompare( - * (fst, snd) => sign(fst.valueOf() - snd.valueOf()) - * ); - * - * const now = new Date(); - * const later = new Date(Date.now() + 60 * 60 * 1000); - * const tomorrow = new Date(Date.now() + 24 * 60 * 60 * 1000); - * - * const result1 = pipe(now, lte(date)(later)); // true - * const result2 = pipe(tomorrow, clamp(date)(now, later)); // later - * const result3 = pipe(tomorrow, min(date)(now)); // now - * ``` - * - * @since 2.0.0 - */ -export function fromCompare(compare: Compare): Ord { - return { - equals: (second) => (first) => compare(first, second) === 0, - compare, - }; -} - -/** - * Create a trivial Ord, where all values of A are considered equal. - * - * @example - * ```ts - * import { lt, trivial } from "./ord.ts"; - * import { pipe } from "./fn.ts"; - * - * const date = trivial(); - * const now = new Date(); - * const later = new Date(Date.now() + 60 * 60 * 1000); - * - * const result1 = pipe(now, lt(date)(later)); // false - * const result2 = pipe(later, lt(date)(now)); // false - * const result3 = pipe(now, date.equals(later)); // true - * ``` - * - * @since 2.0.0 - */ -export function trivial(): Ord { - return fromCompare(() => 0); -} - -/** - * Derive an Ord with the reverse ordering of an existing Ord. - * - * @example - * ```ts - * import { reverse, lt } from "./ord.ts"; - * import { OrdNumber } from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const rev = reverse(OrdNumber); - * - * const result1 = pipe(1, lt(rev)(2)); // false - * const result2 = pipe(2, lt(rev)(1)); // true - * ``` - * - * @since 2.0.0 - */ -export function reverse(ord: Ord): Ord { - return fromCompare((first, second) => ord.compare(second, first)); -} - -/** - * Derives an Ord from a tuple of Ords. The derived Ord will compare - * two tuples starting at index 0 and return the first ordering - * that is non-zero, otherwise the two tuples are equal. - * - * @example - * ```ts - * import { tuple, lt } from "./ord.ts" - * import { OrdNumber } from "./number.ts"; - * import { OrdString } from "./string.ts"; - * import { pipe } from "./fn.ts"; - * - * const tup = tuple(OrdNumber, OrdString); - * - * const result1 = pipe([1, "a"], lt(tup)([2, "b"])); // true - * const result2 = pipe([1, "a"], lt(tup)([1, "b"])); // true - * const result3 = pipe([1, "a"], lt(tup)([1, "a"])); // false - * ``` - * - * @since 2.0.0 - */ -export function tuple>( - ...ords: { [K in keyof T]: Ord } -): Ord> { - return fromCompare((a, b) => { - for (let i = 0; i < ords.length; i++) { - const ordering = ords[i].compare(a[i], b[i]); - if (ordering !== 0) return ordering; - } - return 0; - }); -} - -/** - * Derives an Ord from a structs of Ords. The derived Ord will compare - * two structs starting with the first defined key and return the first - * ordering that is non-zero, otherwise the two structs are equal. - * - * @example - * ```ts - * import { struct, lt } from "./ord.ts" - * import { OrdNumber } from "./number.ts"; - * import { OrdString } from "./string.ts"; - * import { pipe } from "./fn.ts"; - * - * const ord = struct({ num: OrdNumber, str: OrdString }); - * const _lt = lt(ord); - * - * const result1 = pipe( - * { num: 1, str: "a" }, - * _lt({ str: "b", num: 2 }) - * ); // true - * const result2 = pipe( - * { num: 1, str: "a" }, - * _lt({ str: "b", num: 1 }) - * ); // true - * const result3 = pipe( - * { num: 1, str: "a" }, - * _lt({ str: "a", num: 1 }) - * ); // false - * - * ``` - * - * @since 2.0.0 - */ -export function struct( - ords: { readonly [K in keyof A]: Ord }, -): Ord<{ readonly [K in keyof A]: A[K] }> { - return fromCompare((fst, snd) => { - for (const key in ords) { - const ordering = ords[key].compare(fst[key], snd[key]); - if (ordering !== 0) return ordering; - } - return 0; - }); -} - -/** - * Derives an instance of Ord by take an existing Ord over D and - * a function that turns an L into D and returns an Ord over L. - * - * @example - * ```ts - * import { contramap } from "./ord.ts"; - * import { OrdNumber } from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * // Use number ordering, turn date into number and contramap - * const date = pipe( - * OrdNumber, - * contramap((d: Date) => d.valueOf()), - * ); - * ``` - * - * @since 2.0.0 - */ -export function contramap(fld: (l: L) => D): (ord: Ord) => Ord { - return ({ compare }) => - fromCompare((fst, snd) => compare(fld(fst), fld(snd))); -} - -/** - * The canonical implementation of Contravariant for Ord. It contains - * the method contramap. - * - * @since 2.0.0 - */ -export const ContravariantOrd: Contravariant = { - contramap, -}; diff --git a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/pair.ts b/vendor/deno.land/x/fun@v.2.0.0-alpha.11/pair.ts deleted file mode 100644 index 0fcec5c..0000000 --- a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/pair.ts +++ /dev/null @@ -1,513 +0,0 @@ -/** - * Pair represents a pair of values. It can be thought of as a tuple - * of two, or first and second, or separated values. - */ - -import type { $, Kind, Out } from "./kind.ts"; -import type { Applicative } from "./applicative.ts"; -import type { Bifunctor } from "./bifunctor.ts"; -import type { Comonad } from "./comonad.ts"; -import type { Extend } from "./extend.ts"; -import type { Foldable } from "./foldable.ts"; -import type { Functor } from "./functor.ts"; -import type { Monad } from "./monad.ts"; -import type { Monoid } from "./monoid.ts"; -import type { Show } from "./show.ts"; -import type { Traversable } from "./traversable.ts"; - -import { createMonad } from "./monad.ts"; -import { dual } from "./monoid.ts"; -import { pipe } from "./fn.ts"; - -/** - * Pair represents a pair of values. This is - * equivalent to a Tuple of length two, the - * Separated type in fp-ts, and any other type - * that contains exactly two covariant other - * types. - * - * The primary use fo Pair in this library - * is the target of a partition, where some - * type A is partitioned, either into - * [A, A], or [A, B] where B extends A. - * - * Other uses will likely come when Arrows - * are implemented in fun. - */ -export type Pair = readonly [A, B]; - -/** - * Specifies Pair as a Higher Kinded Type, with covariant - * parameters A and B corresponding to the 0th and 1st - * index of any Substitutions. - * - * @since 2.0.0 - */ -export interface KindPair extends Kind { - readonly kind: Pair, Out>; -} - -/** - * Creates a Pair from two values first and second with types - * A and B respectively. Used to quickly construct a Pair. - * - * @example - * ```ts - * import * as P from "./pair.ts"; - * - * const nameAndAge = P.pair("Brandon", 37); - * - * const name = P.getFirst(nameAndAge); // "Brandon" - * const age = P.getSecond(nameAndAge); // 37 - * ``` - * - * @since 2.0.0 - */ -export function pair(first: A, second: B): Pair { - return [first, second]; -} - -/** - * Creates a pair from a single type - * - * @example - * ```ts - * import { dup } from "./pair.ts"; - * - * const result = dup(1); // [1, 1] - * ``` - * - * @since 2.0.0 - */ -export function dup(a: A): Pair { - return pair(a, a); -} - -/** - * Apply a function in the first position of a pair to a value - * in the second position of a pair. - * - * @example - * ```ts - * import * as P from "./pair.ts"; - * import { flow } from "./fn.ts"; - * - * const double = flow( - * P.dup, - * P.map(n => (m: number) => n + m), - * P.merge, - * ); - * - * const result1 = double(1); // 2 - * const result2 = double(2); // 4 - * ``` - * - * @since 2.0.0 - */ -export function merge(ua: Pair<(a: A) => I, A>): I { - return ua[0](ua[1]); -} - -/** - * Apply a function in the first position of a pair to a value - * in the second position of a pair. - * - * @example - * ```ts - * import * as P from "./pair.ts"; - * import { flow } from "./fn.ts"; - * - * const double = flow( - * P.dup, - * P.mapLeft(n => (m: number) => n + m), - * P.mergeSecond, - * ); - * - * const result1 = double(1); // 2 - * const result2 = double(2); // 4 - * ``` - * - * @since 2.0.0 - */ -export function mergeSecond(ua: Pair I>): I { - return ua[1](ua[0]); -} - -/** - * Extracts the first value from a Pair. - * - * @example - * ```ts - * import * as P from "./pair.ts"; - * import { pipe } from "./fn.ts"; - * - * const shouldBe1 = pipe( - * P.pair(1, 2), - * P.getFirst - * ); // 1 - * ``` - * - * @since 2.0.0 - */ -export function getFirst([first]: Pair): A { - return first; -} - -/** - * Extracts the second value from a Pair. - * - * @example - * ```ts - * import * as P from "./pair.ts"; - * import { pipe } from "./fn.ts"; - * - * const shouldBe2 = pipe( - * P.pair(1, 2), - * P.getSecond - * ); // 2 - * ``` - * - * @since 2.0.0 - */ -export function getSecond([_, second]: Pair): B { - return second; -} - -/** - * A curried form of the pair constructor, starting with the first - * value of a pair. - * - * @example - * ```ts - * import * as P from "./pair.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * 37, - * P.first("Brandon"), - * P.mapLeft(n => n + 1), - * ); // ["Brandon", 38] - * ``` - * - * @since 2.0.0 - */ -export function first(first: A): (second: B) => Pair { - return (second) => pair(first, second); -} - -/** - * A curried form of the pair constructor, starting with the second - * value of a pair. - * - * @example - * ```ts - * import * as P from "./pair.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * 37, - * P.second("Brandon"), - * P.map(n => n + 1), - * ); // [38, "Brandon"] - * ``` - * - * @since 2.0.0 - */ -export function second(second: B): (first: A) => Pair { - return (first) => pair(first, second); -} - -/** - * Creates a new Pair with the first and second values swapped. - * - * @example - * ```ts - * import * as P from "./pair.ts"; - * import { pipe } from "./fn.ts"; - * - * const shouldBe2 = pipe( - * P.pair(1, 2), - * P.swap, - * P.first - * ); // 2 - * ``` - * - * @since 2.0.0 - */ -export function swap([first, second]: Pair): Pair { - return pair(second, first); -} - -/** - * Creates a new Pair with the same second value and a new first - * value determined by the output of the fai function. - * - * @example - * ```ts - * import * as P from "./pair.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * P.pair(1, 2), - * P.map(String), - * ); // ['1', 2] - * ``` - * - * @since 2.0.0 - */ -export function map( - fai: (a: A) => I, -): (ta: Pair) => Pair { - return ([first, second]) => pair(fai(first), second); -} - -/** - * Creates a new Pair with the same first value and a new second - * value determined by the output of the fbj function. - * - * @example - * ```ts - * import * as P from "./pair.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * P.pair(1, 2), - * P.mapLeft(String), - * ); // [1, '2'] - * ``` - * - * @since 2.0.0 - */ -export function mapLeft( - fbj: (a: B) => J, -): (ta: Pair) => Pair { - return ([first, second]) => pair(first, fbj(second)); -} - -/** - * Creates a new pair by mapping first through the fai - * function and second through the fbj function. - * - * @example - * ```ts - * import * as P from "./pair.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * P.pair(1, 2), - * P.bimap(String, n => n + 1), - * ); // ['1', 3] - * ``` - * - * @since 2.0.0 - */ -export function bimap( - fbj: (b: B) => J, - fai: (a: A) => I, -): (ta: Pair) => Pair { - return ([first, second]) => pair(fai(first), fbj(second)); -} - -/** - * Just like the first function, extract returns the first - * value in a pair. - * - * @example - * ```ts - * import { pair, extract } from "./pair.ts"; - * - * const result = extract(pair(1, 2)); // 1 - * ``` - * - * @since 2.0.0 - */ -export function extract([first]: Pair): A { - return first; -} - -/** - * Creates a new pair by constructing a first value from - * the whole pair and keeping the second value from the - * original pair. Can be used somewhat like a - * superpowered Reader. - * - * @example - * ```ts - * import { extend, pair } from "./pair.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * pair("Brandon", 37), - * extend(([name, age]) => `${name} is ${age}`) - * ); // ["Brandon is 37", 37]; - * ``` - * - * @since 2.0.0 - */ -export function extend( - ftai: (ua: Pair) => I, -): (ua: Pair) => Pair { - return (ua) => pair(ftai(ua), ua[1]); -} - -/** - * Reduces a pair with an initial value, also passing - * the second value into the reducer as well. - * - * @example - * ```ts - * import { pair, reduce } from "./pair.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * pair(10, 20), - * reduce(Math.max, Number.NEGATIVE_INFINITY), - * ); // 20 - * ``` - * - * @since 2.0.0 - */ -export function reduce( - foao: (acc: O, first: A, second: B) => O, - initial: O, -): (ua: Pair) => O { - return ([first, second]) => foao(initial, first, second); -} - -/** - * Traverse a pair using another algebraic structure's Applicative. - * - * @example - * ```ts - * import { traverse, pair } from "./pair.ts"; - * import { some, ApplicativeOption, fromPredicate } from "./option.ts"; - * import { pipe } from "./fn.ts"; - * - * const traverseOption = traverse(ApplicativeOption); - * const startsWithB = fromPredicate( - * (name: string) => name.startsWith("B") - * ); - * - * const result1 = pipe( - * pair("Brandon", 37), - * traverseOption(startsWithB), - * ); // { tag: "Some", value: ["Brandon", 37] } - * - * const result2 = pipe( - * pair("Alice", 37), - * traverseOption(startsWithB), - * ); // { tag: "None" } - * ``` - * - * @since 2.0.0 - */ -export function traverse(A: Applicative) { - return ( - favi: (a: A) => $, - ): (ua: Pair) => $, J, K], [L], [M]> => - ([fst, snd]) => - pipe( - favi(fst), - A.map(second(snd)), - ); -} - -/** - * The canonical Functor instance for Pair. Contains the - * map method. - * - * @since 2.0.0 - */ -export const FunctorPair: Functor = { map }; - -/** - * The canonical Bifunctor instance for Pair. Contains the - * bimap and mapLeft methods. - * - * @since 2.0.0 - */ -export const BifunctorPair: Bifunctor = { mapLeft, bimap }; - -/** - * The canonical Comonad instance for Pair. Contains the - * extract, extend, and map methods. - * - * @since 2.0.0 - */ -export const ComonadPair: Comonad = { extract, extend, map }; - -/** - * The canonical Extend instance for Pair. Contains the - * extend and map methods. - * - * @since 2.0.0 - */ -export const ExtendPair: Extend = { extend, map }; - -/** - * The canonical Foldable instance for Pair. Contains the - * reduce method. - * - * @since 2.0.0 - */ -export const FoldablePair: Foldable = { reduce }; - -/** - * The canonical Traversable instance for Pair. Contains the - * map, reduce, and traverse methods. - * - * @since 2.0.0 - */ -export const TraversablePair: Traversable = { map, reduce, traverse }; - -/** - * A Kind implementation used to fix the second parameter in a Pair. - * Otherwise it operates the same as Pair does. - * - * @since 2.0.0 - */ -export interface KindRightPair extends Kind { - readonly kind: Pair, B>; -} - -/** - * Creates a Monad instance for Pair where the second parameter is - * concatenated according to the Monoid instance passed in. - * - * @example - * ```ts - * import { MonoidNumberSum } from "./number.ts"; - * import { getRightMonad, pair } from "./pair.ts"; - * import { pipe } from "./fn.ts"; - * - * const Monad = getRightMonad(MonoidNumberSum); - * - * const ageOneYear = (name: string) => pair(name, 1); - * - * const result = pipe( - * pair("Brandon", 36), // Pair(Name, Age) - * Monad.chain(ageOneYear), - * Monad.chain(ageOneYear) - * ); // ["Brandon", 38] - * ``` - * - * @since 2.0.0 - */ -export function getRightMonad(M: Monoid): Monad> { - const { empty, concat } = dual(M); - return createMonad>({ - of: (a) => pair(a, empty()), - chain: (fati) => ([first, second]) => - pipe(fati(first), mapLeft(concat(second))), - }); -} - -/** - * Creates a Show instance for a pair, wrapping the Show instances provided - * for the first and second values. - */ -export function getShow(SA: Show, SB: Show): Show> { - return { - show: ([first, second]) => `Pair(${SA.show(first)}, ${SB.show(second)})`, - }; -} diff --git a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/predicate.ts b/vendor/deno.land/x/fun@v.2.0.0-alpha.11/predicate.ts deleted file mode 100644 index 96b9ea5..0000000 --- a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/predicate.ts +++ /dev/null @@ -1,240 +0,0 @@ -import type { In, Kind } from "./kind.ts"; -import type { Contravariant } from "./contravariant.ts"; -import type { Monoid } from "./monoid.ts"; -import type { Semigroup } from "./semigroup.ts"; - -import { flow } from "./fn.ts"; - -/** - * The Predicate type is a function that takes some - * value of type A and returns boolean, indicating - * that a property is true or false for the value A. - * - * @example - * ```ts - * import type { Predicate } from "./predicate.ts"; - * import * as O from "./option.ts"; - * - * function fromPredicate(predicate: Predicate) { - * return (a: A): O.Option => predicate(a) - * ? O.some(a) : O.none; - * } - * - * function isPositive(n: number): boolean { - * return n > 0; - * } - * - * const isPos = fromPredicate(isPositive); - * - * const resultSome = isPos(1); // Some(1) - * const resultNone = isPos(-1); // None - * ``` - * - * @since 2.0.0 - */ -export type Predicate = (a: A) => boolean; - -/** - * Specifies Predicate as a Higher Kinded Type, with - * contravariant parameter A corresponding to the 0th - * index of any Substitutions. - * - * @since 2.0.0 - */ -export interface KindPredicate extends Kind { - readonly kind: Predicate>; -} - -/** - * Create a Predicate using a Predicate and a function that takes - * a type L and returns a type D. This maps over the input value of - * the predicate. - * - * @example - * ```ts - * import { contramap } from "./predicate.ts"; - * import { pipe } from "./fn.ts"; - * - * const isGreaterThan3 = (n: number) => n > 3; - * const isLongerThan3 = pipe( - * isGreaterThan3, - * contramap((s: string) => s.length), - * ); - * - * const result1 = isLongerThan3("Hello"); // true - * const result2 = isLongerThan3("Hi"); // false - * ``` - * - * @since 2.0.0 - */ -export function contramap( - fia: (i: I) => A, -): (ua: Predicate) => Predicate { - return (ua) => flow(fia, ua); -} - -/** - * Negates the result of an existing Predicate. - * - * @example - * ```ts - * import { not } from "./predicate.ts"; - * - * const isPositive = (n: number) => n > 0; - * const isZeroOrNegative = not(isPositive); - * - * const result1 = isZeroOrNegative(1); // false - * const result2 = isZeroOrNegative(0); // true - * const result3 = isZeroOrNegative(-1); // true - * ``` - * - * @since 2.0.0 - */ -export function not(predicate: Predicate): Predicate { - return (a) => !predicate(a); -} - -/** - * Creates the union of two predicates, returning true if either - * predicate returns true. - * - * @example - * ```ts - * import { or } from "./predicate.ts"; - * import { string, number } from "./refinement.ts"; - * import { pipe } from "./fn.ts"; - * - * // A Refinement is also a Predicate - * const stringOrNumber = pipe( - * string, - * or(number), - * ); - * - * const result1 = stringOrNumber("Hello"); // true - * const result2 = stringOrNumber(1); // true - * const result3 = stringOrNumber({}); // false - * ``` - * - * @since 2.0.0 - */ -export function or(second: Predicate) { - return (first: Predicate): Predicate => (a) => first(a) || second(a); -} - -/** - * Creates the intersection of two predicates, returning true if both - * predicates return true. - * - * @example - * ```ts - * import { and } from "./predicate.ts"; - * import { pipe } from "./fn.ts"; - * - * const isPositive = (n: number) => n > 0; - * const isInteger = (n: number) => Number.isInteger(n); - * - * const isPositiveInteger = pipe( - * isPositive, - * and(isInteger), - * ); - * - * const result1 = isPositiveInteger(1); // true - * const result2 = isPositiveInteger(100); // true - * const result3 = isPositiveInteger(-1); // false - * ``` - * - * @since 2.0.0 - */ -export function and(second: Predicate) { - return (first: Predicate): Predicate => (a) => first(a) && second(a); -} - -/** - * The canonical implementation of Contravariant for Predicate. It contains - * the method contramap. - * - * @since 2.0.0 - */ -export const ContravariantPredicate: Contravariant = { - contramap, -}; - -/** - * Get a Semigroup> for any type A that concats using the - * Predicate or function. - * - * @example - * ```ts - * import { getSemigroupAny } from "./predicate.ts"; - * import { pipe } from "./fn.ts"; - * - * const SemigroupAny = getSemigroupAny(); - * - * const lessThanZero = (n: number) => n < 0; - * const greaterThanFifty = (n: number) => n > 50; - * - * const notBetweenZeroAndFifty = pipe( - * lessThanZero, - * SemigroupAny.concat(greaterThanFifty), - * ); - * - * const result1 = notBetweenZeroAndFifty(10); // false - * const result2 = notBetweenZeroAndFifty(-10); // true - * const result3 = notBetweenZeroAndFifty(100); // true - * ``` - * - * @since 2.0.0 - */ -export function getSemigroupAny(): Semigroup> { - return { concat: or }; -} - -/** - * Get a Semigroup> for any type A that concats using the - * Predicate and function. - * - * @example - * ```ts - * import { getSemigroupAll } from "./predicate.ts"; - * import { pipe } from "./fn.ts"; - * - * const SemigroupAll = getSemigroupAll(); - * - * const greaterThanZero = (n: number) => n > 0; - * const lessThanFifty = (n: number) => n < 50; - * - * const betweenZeroAndFifty = pipe( - * greaterThanZero, - * SemigroupAll.concat(lessThanFifty), - * ); - * - * const result1 = betweenZeroAndFifty(10); // true - * const result2 = betweenZeroAndFifty(-10); // false - * const result3 = betweenZeroAndFifty(100); // false - * ``` - * - * @since 2.0.0 - */ -export function getSemigroupAll(): Semigroup> { - return { concat: and }; -} - -/** - * Get a Monoid> for any type A that concats using the - * Predicate or function and defaults to false. - * - * @since 2.0.0 - */ -export function getMonoidAny(): Monoid> { - return { concat: or, empty: () => () => false }; -} - -/** - * Get a Monoid> for any type A that concats using the - * Predicate and function and defaults to true. - * - * @since 2.0.0 - */ -export function getMonoidAll(): Monoid> { - return { concat: and, empty: () => () => true }; -} diff --git a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/profunctor.ts b/vendor/deno.land/x/fun@v.2.0.0-alpha.11/profunctor.ts deleted file mode 100644 index caf7f48..0000000 --- a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/profunctor.ts +++ /dev/null @@ -1,34 +0,0 @@ -import type { $, Kind, TypeClass } from "./kind.ts"; - -/** - * Profunctor - * https://github.com/fantasyland/static-land/blob/master/docs/spec.md#profunctor - * - * TODO: Strong, Choice, Star, Join, and Split - */ -export interface Profunctor extends TypeClass { - readonly dimap: ( - fld: (l: L) => D, - fai: (a: A) => I, - ) => (ta: $) => $; -} - -// // TODO: fanout and splitStrong -// export interface Strong extends TypeClass, Profunctor { -// readonly first: ( -// ua: $, -// ) => $, B, C], [Pair], [E]>; -// readonly second: ( -// ua: $, -// ) => $, B, C], [Pair], [E]>; -// } - -// // TODO: fanin and splitChoice -// export interface Choice extends TypeClass, Profunctor { -// readonly left: ( -// ua: $, -// ) => $, B, C], [Either], [E]>; -// readonly right: ( -// ua: $, -// ) => $, B, C], [Either], [E]>; -// } diff --git a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/record.ts b/vendor/deno.land/x/fun@v.2.0.0-alpha.11/record.ts deleted file mode 100644 index 584f7d6..0000000 --- a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/record.ts +++ /dev/null @@ -1,996 +0,0 @@ -// deno-lint-ignore-file no-explicit-any - -/** - * ReadonlyRecord is a readonly product structure that operates - * like a Map. Keys are always strings and Key/Value pairs - * can be added and removed arbitrarily. The ReadonlyRecord - * type in fun favors immutability. - * - * @module ReadonlyRecord - */ - -import type { $, AnySub, Intersect, Kind, Out } from "./kind.ts"; -import type { Applicative } from "./applicative.ts"; -import type { Either } from "./either.ts"; -import type { Eq } from "./eq.ts"; -import type { Filterable } from "./filterable.ts"; -import type { Foldable } from "./foldable.ts"; -import type { Functor } from "./functor.ts"; -import type { Monoid } from "./monoid.ts"; -import type { Option } from "./option.ts"; -import type { Pair } from "./pair.ts"; -import type { Show } from "./show.ts"; -import type { Traversable } from "./traversable.ts"; - -import { isRight } from "./either.ts"; -import { isSome, none, some } from "./option.ts"; -import { pair } from "./pair.ts"; -import { identity, pipe } from "./fn.ts"; - -/** - * ReadonlyRecord is an alias of Readonly>. - * It's meant to be used wherever a Record can be used. - * - * @since 2.0.0 - */ -export type ReadonlyRecord = Readonly>; - -/** - * Extract the inner type of a ReadonlyRecord - * - * @since 2.0.0 - */ -export type TypeOf = T extends ReadonlyRecord ? A : never; - -/** - * NonEmptyRecord is a bounding type that will - * return a type level never if the type value of R is - * either not a record is a record without any - * index or key values. - * - * @example - * ``` - * import type { NonEmptyRecord } from "./record.ts"; - * - * function doSomething(_: NonEmptyRecord): void { - * return undefined; - * } - * - * const result = doSomething({ one: 1 }); // This is ok - * // const result2 = doSomethign({}); // This is a type error - * ``` - * - * @since 2.0.0 - */ -export type NonEmptyRecord = keyof R extends never ? never : R; - -/** - * Specifies ReadonlyRecord as a Higher Kinded Type, with covariant - * parameter A corresponding to the 0th index of any substitutions. - * - * @since 2.0.0 - */ -export interface KindReadonlyRecord extends Kind { - readonly kind: ReadonlyRecord>; -} - -/** - * An alias of Object.entries - * - * @example - * ```ts - * import * as R from "./record.ts"; - * - * const data: R.ReadonlyRecord = { - * hello: "world", - * foo: "bar", - * }; - * - * // [["hello", "world"], ["foo", "bar"]] - * const result1 = R.entries(data); - * const result2 = R.entries({}); // [] - * ``` - * - * @since 2.0.0 - */ -export function entries(ua: ReadonlyRecord): ReadonlyArray<[string, A]> { - return Object.entries(ua); -} - -/** - * An alias of Object.keys specific to ReadonlyRecord. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * - * const data: R.ReadonlyRecord = { - * hello: "world", - * foo: "bar", - * }; - * - * const result1 = R.keys(data); // ["hello", "foo"] - * const result2 = R.keys({}); // [] - * ``` - * - * @since 2.0.0 - */ -export function keys(ua: ReadonlyRecord): ReadonlyArray { - return Object.keys(ua); -} - -/** - * Omit specified `keys` from a `record`. Value-space implementation of the - * [`Omit`](https://www.typescriptlang.org/docs/handbook/utility-types.html#omittype-keys) - * utility type. - * - * @example - * ```ts - * import { omit } from "./record.ts"; - * omit("a", "c")({ a: 1, b: 2 }) // { b: 2 } - * ``` - * - * @since 2.0.0 - */ -export function omit( - ...keys: K -): (record: T) => Omit { - return (record: T) => { - const output = { ...record }; - for (const key of keys as unknown as (keyof typeof output)[]) { - delete output[key]; - } - return output; - }; -} - -/** - * Picks specified `keys` from a `record`. Value-space implemenuation of the - * [`Pick`](https://www.typescriptlang.org/docs/handbook/utility-types.html#picktype-keys) - * utility type. - * - * @example - * ```ts - * import { pipe } from "./fn.ts"; - * import { pick } from "./record.ts"; - * - * pipe({ a: 1, b: 2, c: 3 }, pick("a", "b")) - * // { a: 1, b: 2 } - * ``` - * - * @since 2.0.0 - */ -export function pick, K extends keyof T>( - ...keys: readonly K[] -): (record: T) => Pick { - return (record) => { - const output = {} as Pick; - for (const key of keys) { - if (key in record) { - output[key] = record[key]; - } - } - return output; - }; -} - -/** - * Creates a new object with the same keys of `ua`. Values are transformed - * using `fai`. - * - * @example - * ```ts - * import { map } from "./record.ts" - * map((n: number) => n + 1)({ a: 1 }); // { a: 2 } - * ``` - * - * @since 2.0.0 - */ -export function map( - fai: (a: A, i: string) => I, -): (ua: ReadonlyRecord) => ReadonlyRecord { - return (ua) => { - const out = {} as Record; - for (const [key, entry] of Object.entries(ua) as [string, A][]) { - out[key] = fai(entry, key); - } - return out; - }; -} - -/** - * Collect all of the A values in a ReadonlyRecord into a single - * O value by the process of reduction. The order of key/value pairs - * in this reduction are stable and determined by ecmascript standard - * [here](https://262.ecma-international.org/8.0/#sec-enumerate-object-properties). - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * { one: 1, two: 2 }, - * R.reduce((sum, value) => sum + value, 0), - * ); // 3 - * ``` - * - * @since 2.0.0 - */ -export function reduce( - foao: (o: O, a: A, i: string) => O, - o: O, -) { - return (rec: ReadonlyRecord): O => { - let result = o; - for (const key in rec) { - result = foao(result, rec[key], key); - } - return result; - }; -} - -/** - * Collect all values in a ReadonlyRecord into a single - * value I by using a Monoid and a mapping function - * from A to I. This is effectively reduce using a Monoid - * for the initial value. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { MonoidNumberSum } from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const collectSum = R.collect(MonoidNumberSum); - * const collectLengths = collectSum((s: string) => s.length); - * - * const result = collectLengths({ one: "one", two: "two" }); // 6 - * ``` - * - * @since 2.0.0 - */ -export function collect( - M: Monoid, -): (fai: (a: A, index: string) => I) => (ua: ReadonlyRecord) => I { - return (fai: (a: A, index: string) => I) => { - const reducer = reduce( - (i, a: A, index) => M.concat(fai(a, index))(i), - M.empty(), - ); - return (ua: ReadonlyRecord) => reducer(ua); - }; -} - -/** - * Collect all values in a ReadonlyRecord into a single - * value I by using a Monoid.This is effectively reduce - * using a Monoid for the initial value and combination. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { MonoidNumberSum } from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * { one: 1, two: 2, three: 3 }, - * R.collapse(MonoidNumberSum), - * ); // 6 - * ``` - * - * @since 2.0.0 - */ -export function collapse( - M: Monoid, -): (ua: ReadonlyRecord) => A { - return reduce( - (first: A, second: A) => M.concat(second)(first), - M.empty(), - ); -} - -/** - * Traverse a ReadonlyRecord, mapping each A into an - * algebraic data type V (so V), then collecting each - * I in V back into a ReadonlyRecord, ultimately - * returning V>. In more concrete terms - * this can take ReadonlyRecord> and return - * Option> (or any other inner type. - * - * Traverse, in general, is much like reducing and collecting - * over the outer and inner types of an ADT at the same time. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import * as O from "./option.ts"; - * import { pipe } from "./fn.ts"; - * - * const traverseOption = R.traverse(O.ApplicativeOption); - * const swapOption = traverseOption((o: O.Option) => o); - * - * const result1 = swapOption({ one: O.some(1), two: O.some(2) }); - * // Some({ one: 1, two: 2 }); - * const result2 = swapOption({ one: O.some(1), two: O.none }); // None - * ``` - * - * TODO: Revisit because mutability is bad here - * @since 2.0.0 - */ -export function traverse( - A: Applicative, -): ( - favi: (value: A, key: string) => $, -) => (ua: ReadonlyRecord) => $, J, K], [L], [M]> { - // We include a copy of the type parameters here to make the implementation - // type safe. - return ( - favi: (a: A, i: string) => $, - ): (ua: ReadonlyRecord) => $, J, K], [L], [M]> => { - // Mutably pushes an i into is at key - const pusher = (key: string) => - (is: Record) => - ( - i: I, - ): Record => ({ ...is, [key]: i }); - // Interior mutability is used to increase perf - const reducer = ( - vis: $, J, K], [L], [M]>, - a: A, - key: string, - ): $, J, K], [L], [M]> => - pipe( - vis, - A.map(pusher(key)), - A.ap(favi(a, key)), - ); - - return (ua) => pipe(ua, reduce(reducer, A.of({}))); - }; -} - -/** - * The Sequence inverts a tuple of substitutions over V into V containing a - * tuple of inferred values of the substitution. - * - * ie. - * [Option, Option] - * becomes - * Option<[number, string]> - * - * or - * - * [Either Either] - * becomes - * Either - */ -// deno-fmt-ignore -type Sequence>> = $ ? A : never; }, - { [K in keyof R]: R[K] extends $ ? B : never; }[keyof R], - { [K in keyof R]: R[K] extends $ ? C : never; }[keyof R], - ], [ - Intersect< { [K in keyof R]: R[K] extends $ ? D : never; }[keyof R] >, - ], [ - Intersect< { [K in keyof R]: R[K] extends $ ? E : never; }[keyof R] >, - ] ->; - -/** - * Sequence over an ReadonlyRecord of type V, inverting the relationship between V and - * ReadonlyRecord. This function also keeps the indexed types of in each V at - * covariant position 0. In other words sequence over [Option, - * Option] becomes Option<[number, string]>. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import * as O from "./option.ts"; - * - * const sequence = R.sequence(O.ApplicativeOption); - * - * const result1 = sequence({ one: O.some(1), two: O.some("Hello")}); // Some({ one: 1, two: "Hello"}) - * const result2 = sequence({ one: O.none, two: O.some("Uh Oh")}); // None - * ``` - * - * @since 2.0.0 - */ -export function sequence( - A: Applicative, -): >>( - values: NonEmptyRecord, -) => Sequence { - const sequence = traverse(A)(identity as any); - return >>( - vs: NonEmptyRecord, - ): Sequence => sequence(vs) as Sequence; -} - -/** - * Insert a value A into a ReadonlyRecord at the key location. If the value - * inserted has object equality with the current value in the record then - * no change is made and the original record is returned. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { pipe } from "./fn.ts"; - * - * const insert = R.insert(1); - * - * const result1 = pipe( - * { one: 1, two: 2 }, - * insert('one'), - * ); // No Mutation, returns original object - * const result2 = pipe( - * { two: 2 }, - * insert('one'), - * ); // { one: 1, two: 2 } - * ``` - * - * @since 2.0.0 - */ -export function insert(value: A) { - return (key: string) => (rec: ReadonlyRecord): ReadonlyRecord => - rec[key] === value ? rec : { ...rec, [key]: value }; -} - -/** - * Insert a value A into a ReadonlyRecord at the key location. If the value - * inserted has object equality with the current value in the record then - * no change is made and the original record is returned. This is the same - * function as insert but with the order of parameters swapped - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { pipe } from "./fn.ts"; - * - * const atOne = R.insertAt('one'); - * - * const result1 = pipe( - * { one: 1, two: 2 }, - * atOne(1), - * ); // No Mutation, returns original object - * const result2 = pipe( - * { two: 2 }, - * atOne(1), - * ); // { one: 1, two: 2 } - * ``` - * - * @since 2.0.0 - */ -export function insertAt(key: string) { - return (value: A) => (rec: ReadonlyRecord): ReadonlyRecord => - rec[key] === value ? rec : { ...rec, [key]: value }; -} - -/** - * Modify a value A into a ReadonlyRecord at the key location. If the - * object does not hold the specified key then no change is made. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { pipe } from "./fn.ts"; - * - * const addOne = R.modify((n: number) => n + 1); - * - * const result1 = pipe( - * { one: 1, two: 2 }, - * addOne('one'), - * ); // { one: 2, two: 2 } - * const result2 = pipe( - * { two: 2 }, - * addOne('one') - * ); // { two: 2 } - * ``` - * - * @since 2.0.0 - */ -export function modify(modifyFn: (a: A) => A) { - return (key: string) => (rec: ReadonlyRecord): ReadonlyRecord => { - if (Object.hasOwn(rec, key)) { - const out = modifyFn(rec[key]); - return out === rec[key] ? rec : { ...rec, [key]: out }; - } - return rec; - }; -} - -/** - * Modify a value A into a ReadonlyRecord at the key location. If the - * object does not hold the specified key then no change is made. This - * is the same function as modify with the order of parameters flipped. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { pipe } from "./fn.ts"; - * - * const inc = (n: number) => n + 1; - * const atOne = R.modifyAt('one'); - * - * const result1 = pipe( - * { one: 1, two: 2 }, - * atOne(inc), - * ); // { one: 2, two: 2 } - * const result2 = pipe( - * { two: 2 }, - * atOne(inc), - * ); // { two: 2 } - * ``` - * - * @since 2.0.0 - */ -export function modifyAt(key: string) { - return (modifyFn: (a: A) => A) => - (rec: ReadonlyRecord): ReadonlyRecord => { - if (Object.hasOwn(rec, key)) { - const out = modifyFn(rec[key]); - return out === rec[key] ? rec : { ...rec, [key]: out }; - } - return rec; - }; -} - -/** - * Update a ReadonlyRecord at key with a value A. The record will only be - * updated if it already holds the specified key, otherwise no changes are - * made. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { pipe } from "./fn.ts"; - * - * const to2 = R.update(2); - * - * const result1 = pipe( - * { one: 1, two: 2 }, - * to2('one'), - * ); // { one: 2, two: 2 } - * const result2 = pipe( - * { two: 2 }, - * to2('one'), - * ); // No change { two: 2 } - * ``` - * - * @since 2.0.0 - */ -export function update(value: A) { - return (key: string) => (rec: ReadonlyRecord): ReadonlyRecord => - Object.hasOwn(rec, key) ? { ...rec, [key]: value } : rec; -} - -/** - * Update a ReadonlyRecord at key with a value A. The record will only be - * updated if it already holds the specified key, otherwise no changes are - * made. This function does the same as update but has the parameters - * switched in order - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { pipe } from "./fn.ts"; - * - * const atOne = R.updateAt('one'); - * - * const result1 = pipe( - * { one: 1, two: 2 }, - * atOne(2), - * ); // { one: 2, two: 2 } - * const result2 = pipe( - * { two: 2 }, - * atOne(2), - * ); // No change { two: 2 } - * ``` - * - * @since 2.0.0 - */ -export function updateAt(key: string) { - return (value: A) => (rec: ReadonlyRecord): ReadonlyRecord => - Object.hasOwn(rec, key) ? { ...rec, [key]: value } : rec; -} - -/** - * Lookup the value at key. Returns an Option, where None indicates - * that the record does not hold the key. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { pipe } from "./fn.ts"; - * - * const result1 = pipe( - * { one: 1, two: 2 }, - * R.lookupAt('one'), - * ); // Some(1) - * const result2 = pipe( - * { one: 1, two: 2 }, - * R.lookupAt('three'), - * ); // None - * ``` - * - * @since 2.0.0 - */ -export function lookupAt(key: string) { - return (rec: ReadonlyRecord): Option => - Object.hasOwn(rec, key) ? some(rec[key]) : none; -} - -/** - * Lookup the value in a record at key and return an optional - * pair with the key and the value if the record holds the key. - * Returns None if the record does not hold the key. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { pipe } from "./fn.ts"; - * - * const result1 = pipe( - * { one: 1, two: 2 }, - * R.lookupWithKey('one'), - * ); // Some(['one', 1]) - * const result2 = pipe( - * { one: 1, two: 2 }, - * R.lookupWithKey('three'), - * ); // None - * ``` - * - * @since 2.0.0 - */ -export function lookupWithKey(key: string) { - return (record: ReadonlyRecord): Option> => { - if (Object.hasOwn(record, key)) { - return some([key, record[key]]); - } - return none; - }; -} - -/** - * Remove the value and key at key from a ReadonlyRecord. If the - * record does not hold the key then no change is made and the - * original record is returned. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { pipe } from "./fn.ts"; - * - * const result1 = pipe( - * { one: 1, two: 2 }, - * R.deleteAt('one'), - * ); // { two: 2 } - * const result2 = pipe( - * { two: 2 }, - * R.deleteAt('one'), - * ); // No Change { two: 2 } - * - * ``` - * - * @since 2.0.0 - */ -export function deleteAt(key: string) { - return ( - rec: ReadonlyRecord, - ): ReadonlyRecord => { - if (Object.hasOwn(rec, key)) { - const out = { ...rec }; - delete out[key]; - return out; - } - return rec; - }; -} - -/** - * Remove the key from the ReadonlyRecord, returning a pair containing - * the new record and an Option containing the removed key value. If - * the record did not hold the specified key then this is a non-op and - * the return will be the original record and none. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { pipe } from "./fn.ts"; - * - * const result1 = pipe( - * { one: 1, two: 2 }, - * R.deleteAtWithValue('one'), - * ); // [{ two: 2 }, Some(1)] - * const result2 = pipe( - * { one: 1, two: 2 }, - * R.deleteAtWithValue('three'), - * ); // [{ one: 1, two: 2}, None] - * ``` - * - * @since 2.0.0 - */ -export function deleteAtWithValue(key: string) { - return ( - rec: ReadonlyRecord, - ): Pair, Option> => { - if (Object.hasOwn(rec, key)) { - const out = { ...rec }; - const value = rec[key]; - delete out[key]; - return [out, some(value)]; - } - return [rec, none]; - }; -} - -/** - * Given an instance of Eq for the values in a ReadonlyRecord - * return a curried function `second => first => boolean` that returns - * true when first is a subrecord of second. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { EqNumber } from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const first = { one: 1, two: 2 }; - * const second = { one: 1, two: 2, three: 3 }; - * const isSub = R.isSubrecord(EqNumber); - * - * const result1 = pipe( - * first, - * isSub(second), - * ); // true - * const result2 = pipe( - * second, - * isSub(first), - * ); // false - * ``` - * - * @since 2.0.0 - */ -export function isSubrecord( - S: Eq, -): (second: ReadonlyRecord) => (first: ReadonlyRecord) => boolean { - return (second) => (first) => { - for (const key in first) { - if (!Object.hasOwn(second, key) || !S.equals(second[key])(first[key])) { - return false; - } - } - return true; - }; -} - -/** - * Given a refinement or a predicate, filter a ReadonlyRecord - * by removing any values that do not match the predicate or - * refinement. ie. When the predicate/refinement return true - * a value is kept and when it returns false a value is removed. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * { one: 1, two: 2, three: 3 }, - * R.filter(n => n > 1), - * ); // { one: 1 } - * ``` - * - * @since 2.0.0 - */ -export function filter( - refinement: (a: A, key: string) => a is I, -): (ua: ReadonlyRecord) => ReadonlyRecord; -export function filter( - predicate: (a: A, key: string) => boolean, -): (ua: ReadonlyRecord) => ReadonlyRecord; -export function filter( - predicate: (a: A, key: string) => boolean, -): (ua: ReadonlyRecord) => ReadonlyRecord { - return (ua) => { - const output = {} as Record; - for (const key in ua) { - if (predicate(ua[key], key)) { - output[key] = ua[key]; - } - } - return output; - }; -} - -/** - * Given a function over the values in a ReadonlyArray returning an - * Option, return a function thatsimultaneously filters and maps over - * the values in a ReadonlyRecord. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import * as O from "./option.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * { one: 1, two: 2, three: 3 }, - * R.filterMap(n => n > 1 ? O.some(`${n} is big enough`) : O.none), - * ); // { two: "2 is big enough", three: "3 is big enough" } - * ``` - * - * @since 2.0.0 - */ -export function filterMap( - fai: (a: A, key: string) => Option, -): (ua: ReadonlyRecord) => ReadonlyRecord { - return (ua) => { - const output = {} as Record; - for (const key in ua) { - const result = fai(ua[key], key); - if (isSome(result)) { - output[key] = result.value; - } - } - return output; - }; -} - -/** - * Given a refinement or predicate, return a function that splits a - * ReadonlyRecord into a Pair of ReadonlyRecords, with the first - * record containing the values for which the predicate/refinement - * returned true and the second record containing the values for which - * the predicate/refinement returned false. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * { one: 1, two: 2, three: 3 }, - * R.partition(n => n > 1), - * ); // [{ two: 2, three: 3 }, { one: 1 }] - * ``` - * - * @since 2.0.0 - */ -export function partition( - refinement: (a: A, key: string) => a is I, -): (ua: ReadonlyRecord) => Pair, ReadonlyRecord>; -export function partition( - predicate: (a: A, key: string) => boolean, -): (ua: ReadonlyRecord) => Pair, ReadonlyRecord>; -export function partition( - predicate: (a: A, key: string) => boolean, -): (ua: ReadonlyRecord) => Pair, ReadonlyRecord> { - return (ua) => { - const first = {} as Record; - const second = {} as Record; - for (const key in ua) { - if (predicate(ua[key], key)) { - first[key] = ua[key]; - } else { - second[key] = ua[key]; - } - } - return pair(first as ReadonlyRecord, second as ReadonlyRecord); - }; -} - -/** - * Given a function that takes an A and a key and returns an Either - * return a function that simultaneously partitions and maps over the - * values in a ReadonlyRecord. This is the equivalent of first - * partitioning a ReadonlyRecord, and then using Pair's Bimap over - * both values in a Pair. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import * as E from "./either.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * { one: 1, two: 2, three: 3 }, - * R.partitionMap( - * n => n > 1 - * ? E.right(`${n} is big enough`) - * : E.left(`${n} is small enough`) - * ), - * ); - * // [ - * // { two: "2 is big enough", three: "3 is big enough" }, - * // { one: "1 is small enough" } - * // ] - * ``` - * - * @since 2.0.0 - */ -export function partitionMap( - fai: (a: A, key: string) => Either, -): (ua: ReadonlyRecord) => Pair, ReadonlyRecord> { - return (ua) => { - const first = {} as Record; - const second = {} as Record; - for (const key in ua) { - const result = fai(ua[key], key); - if (isRight(result)) { - first[key] = result.right; - } else { - second[key] = result.left; - } - } - return pair(first, second); - }; -} - -/** - * The canonical implementation of Filterable for ReadonlyRecord. It contains - * the methods filter, filterMap, partition, and partitionMap. - * - * @since 2.0.0 - */ -export const FilterableRecord: Filterable = { - filter, - filterMap, - partition, - partitionMap, -}; - -/** - * The canonical implementation of Functor for ReadonlyRecord. It contains - * the method map. - * - * @since 2.0.0 - */ -export const FunctorRecord: Functor = { map }; - -/** - * The canonical implementation of Foldable for ReadonlyRecord. It contains - * the method reduce. - * - * @since 2.0.0 - */ -export const FoldableRecord: Foldable = { reduce }; - -/** - * The canonical implementation of Traversable for ReadonlyRecord. It contains - * the methods map, reduce, and traverse. - * - * @since 2.0.0 - */ -export const TraversableRecord: Traversable = { - map, - reduce, - traverse, -}; - -/** - * Given a Show for the inner values of a ReadonlyRecord, return an instance - * of Show for ReadonlyRecord. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { ShowNumber } from "./number.ts"; - * - * const { show } = R.getShow(ShowNumber); - * - * const result = show({ one: 1, two: 2, three: 3 }); - * // "{one: 1, two: 2, three: 3}" - * ``` - * - * @since 2.0.0 - */ -export function getShow(SA: Show): Show> { - return ({ - show: (ua) => - `{${ - Object.entries(ua).map(([key, value]) => `${key}: ${SA.show(value)}`) - .join(", ") - }}`, - }); -} diff --git a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/refinement.ts b/vendor/deno.land/x/fun@v.2.0.0-alpha.11/refinement.ts deleted file mode 100644 index f34db9b..0000000 --- a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/refinement.ts +++ /dev/null @@ -1,670 +0,0 @@ -/** - * The Refinement type represents a function that takes a type and returns a - * boolean. It denotes a function that narrows a type at runtime. For example - * the function `(n: unknown): n is number => typeof n === "number"` is the - * refinement type `Refinement`. The primary use for Refinement - * is to align the runtime value with compile time types. - * - * @module Refinement - * @since 2.0.0 - */ -import type { In, Kind, Out } from "./kind.ts"; - -import type { NonEmptyArray } from "./array.ts"; -import type { Option } from "./option.ts"; -import type { Either } from "./either.ts"; -import type { ReadonlyRecord } from "./record.ts"; -import type { Literal, Schemable } from "./schemable.ts"; - -import { memoize } from "./fn.ts"; - -/** - * The refinement type is a function that returns a boolean indicating that a - * value satisfies a type. - * - * @since 2.0.0 - */ -export type Refinement = (a: A) => a is B; - -/** - * A type that matches any refinement type. - * - * @since 2.0.0 - */ -// deno-lint-ignore no-explicit-any -export type AnyRefinement = Refinement; - -/** - * The ToIn type takes a Refinement type and returns the type of its input. - * - * @since 2.0.0 - */ -export type ToIn = T extends Refinement ? B : never; - -/** - * The ToOut type takes a Refinement type and returns the type of its output - * refinement. - * - * @since 2.0.0 - */ -export type ToOut = T extends Refinement ? A : never; - -/** - * Specifies Refinement as a Higher Kinded Type, with covariant - * parameter B corresponding to the 0th index of any substitutions and - * contravariant parameter A corresponding to the 0th index of any - * substitutions. - * - * @since 2.0.0 - */ -export interface KindRefinement extends Kind { - readonly kind: Refinement, Out>; -} - -/** - * Specifies Refinement as a Higher Kinded Type, with covariant - * parameter B corresponding to the 0th index of any substitutions. - * - * @since 2.0.0 - */ -export interface KindUnknownRefinement extends Kind { - readonly kind: Refinement>; -} - -/** - * Construct a refinement from a function (a: A) => Option where None denotes - * that a type does not satisfy the refinement. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * import * as O from "./option.ts"; - * - * const refine = R.fromOption((u: unknown) => typeof u === "number" ? O.some(u) - * : O.none); - * const value1: unknown = "Hello"; - * const value2: unknown = 0; - * - * const result1 = refine(value1); // false, value1: unknown - * const result2 = refine(value2); // true, value2: number - * ``` - * - * @since 2.0.0 - */ -export function fromOption( - faob: (a: A) => Option, -): Refinement { - return (a: A): a is B => faob(a).tag === "Some"; -} - -/** - * Construct a refinement from a function (a: A) => Either where Left denotes - * that a type does not satisfy the refinement. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * import * as E from "./either.ts"; - * - * const refine = R.fromEither((u: unknown) => typeof u === "number" ? E.right(u) - * : E.left(u)); - * const value1: unknown = "Hello"; - * const value2: unknown = 0; - * - * const result1 = refine(value1); // false, value1: unknown - * const result2 = refine(value2); // true, value2: number - * ``` - * - * @since 2.0.0 - */ -export function fromEither( - faob: (a: A) => Either, -): Refinement { - return (a: A): a is B => faob(a).tag === "Right"; -} - -/** - * Compose two refinements into a new refinement that returns true if either of - * the two input refinements return true. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * import { pipe } from "./fn.ts"; - * - * const number = (u: unknown): u is number => typeof u === "number"; - * const string = (u: unknown): u is string => typeof u === "string"; - * const refine = pipe(number, R.or(string)); - * - * const result1 = refine("Hello"); // true - * const result2 = refine(null); // false - * ``` - * - * @since 2.0.0 - */ -export function or( - second: Refinement, -): (first: Refinement) => Refinement { - return (first: Refinement): Refinement => - (a: A): a is B | C => first(a) || second(a); -} - -/** - * Compose two refinements into a new refinement that returns true if both of - * the two input refinements return true. - * - * @example - * ```ts - * import type { Newtype } from "./newtype.ts"; - * - * import * as R from "./refinement.ts"; - * import { pipe } from "./fn.ts"; - * - * const isBig = (s: unknown): s is "Big" => s === "Big"; - * const refine = pipe(R.string, R.and(isBig)); - * - * const result1 = refine(null); // false - * const result2 = refine("Hello"); // false - * const result3 = refine("Big"); // false - * ``` - * - * @since 2.0.0 - */ -export function and( - second: Refinement, -): (first: Refinement) => Refinement { - return (first: Refinement): Refinement => - (a: A): a is B & C => first(a) && second(a); -} - -/** - * Create a identity refinement that always returns true as at the type level a - * type A is always a type A. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * - * const number = R.id(); - * - * const result = number(1); // true.. but only numbers can be passed here. - * ``` - * - * @since 2.0.0 - */ -export function id(): Refinement { - return (() => true) as unknown as Refinement; -} - -/** - * Compose two refinements, A -> B and B -> C creating a `Refinement`. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * import { pipe } from "./fn.ts"; - * - * type Person = { name: string }; - * type Rec = Record; - * - * const nonnull = (u: unknown): u is Rec => u !== null && u !== undefined; - * const hasKey = - * (key: K) => (u: Rec): u is Record => - * Object.hasOwn(u, key); - * const person = (u: Record<"name", unknown>): u is Person => - * typeof u.name === - * "string"; - * - * const isPerson = pipe(nonnull, R.compose(hasKey("name")), R.compose(person)); - * - * const value1 = null; - * const value2 = {}; - * const value3 = { name: 1 }; - * const value4 = { name: "Brandon" }; - * - * const result1 = isPerson(value1); // false - * const result2 = isPerson(value2); // false - * const result3 = isPerson(value3); // false - * const result4 = isPerson(value4); // true, value4: Person - * ``` - * - * @since 2.0.0 - */ -export function compose( - second: Refinement, -): (first: Refinement) => Refinement { - return (first: Refinement): Refinement => (a: A): a is C => - first(a) && second(a); -} - -/** - * An instance of `Refinement`. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * - * const result = R.unknown(null); // true, null is unknown! all is unknown! - * ``` - * - * @since 2.0.0 - */ -export function unknown(_: unknown): _ is unknown { - return true; -} - -/** - * An instance of `Refinement`. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * - * const result1 = R.string(null); // false - * const result2 = R.string("Hello"); // true, a variable is now typed as string - * ``` - * - * @since 2.0.0 - */ -export function string(a: unknown): a is string { - return typeof a === "string"; -} - -/** - * An instance of `Refinement`. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * - * const result1 = R.number(null); // false - * const result2 = R.number(2); // true, a variable is now typed as number - * ``` - * - * @since 2.0.0 - */ -export function number(a: unknown): a is number { - return typeof a === "number"; -} - -/** - * An instance of `Refinement`. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * - * const result1 = R.boolean(null); // false - * const result2 = R.boolean(true); // true, a variable is now typed as true - * ``` - * - * @since 2.0.0 - */ -export function boolean(a: unknown): a is boolean { - return typeof a === "boolean"; -} - -/** - * An instance of `Refinement>`. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * - * const result1 = R.isRecord(null); // false - * const result2 = R.isRecord({}); - * // true, a variable is now typed as Record - * ``` - * - * @since 2.0.0 - */ -export function isRecord(a: unknown): a is Record { - return typeof a === "object" && a !== null; -} - -/** - * An instance of `Refinement>`. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * - * const result1 = R.isArray(null); // false - * const result2 = R.isArray([]); - * // true, a variable is now typed as Array - * ``` - * - * @since 2.0.0 - */ -export function isArray(a: unknown): a is Array { - return Array.isArray(a); -} - -/** - * Creates an instance `Refinement & { length: N }>` - * where N is a number. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * - * const isTwoTuple = R.isArrayN(2); - * - * const result1 = isTwoTuple(null); // false - * const result2 = isTwoTuple([]); // false - * const result3 = isTwoTuple([1, 2]); - * // true, a variable is now typed as Array & { length: 2 } - * ``` - * - * @since 2.0.0 - */ -export function isArrayN( - n: N, -): Refinement & { length: N }> { - return (a): a is Array & { length: N } => - isArray(a) && a.length == n; -} - -/** - * Creates an instance of `Refinement` where P is a union of literal - * values. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * - * const places = R.literal(1, 2, 3); - * - * const result1 = places(null); // false - * const result2 = places(1); // true, variable now typed as 1 | 2 | 3 - * const result3 = places(2); // true, variable now typed as 1 | 2 | 3 - * const result4 = places(10); // false - * ``` - * - * @since 2.0.0 - */ -export function literal>( - ...literals: A -): Refinement { - return (a): a is A[number] => literals.some((l) => l === a); -} - -/** - * Turn a `Refinement` into `Refinement`. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * - * const nullOrNum = R.nullable(R.number); - * - * const result1 = nullOrNum(null); // true, variable is now null | number - * const result2 = nullOrNum(1); // true, variable is now null | number - * const result3 = nullOrNum("hello"); // false - * ``` - * - * @since 2.0.0 - */ -export function nullable( - or: Refinement, -): Refinement { - return (a): a is B | null => a === null || or(a); -} - -/** - * Turn a `Refinement` into `Refinement`. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * - * const test = R.undefinable(R.number); - * - * const result1 = test(null); // false - * const result2 = test(1); // true, variable is now undefined | number - * const result3 = test("hello"); // false - * const result4 = test(undefined); // true, variable is now undefined | number - * ``` - * - * @since 2.0.0 - */ -export function undefinable( - or: Refinement, -): Refinement { - return (a): a is B | undefined => a === undefined || or(a); -} - -/** - * Turn a `Refinement` into `Refinement>`. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * - * const numbers = R.record(R.number); - * - * const result1 = numbers(null); // false - * const result2 = numbers({}); // true, {} has type ReadonlyRecord - * const result3 = numbers({ hello: "world" }); // false - * const result4 = numbers({ hello: 1 }); - * // true, variable has type ReadonlyRecord - * ``` - * - * @since 2.0.0 - */ -export function record( - codomain: Refinement, -): Refinement> { - return (a): a is ReadonlyRecord => - isRecord(a) && Object.values(a).every(codomain); -} - -/** - * Turn a `Refinement` into `Refinement>`. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * - * const numbers = R.array(R.number); - * - * const result1 = numbers(null); // false - * const result2 = numbers([]); // true, [] has type ReadonlyArray - * const result3 = numbers(["Hello"]); // false - * const result4 = numbers([1]); - * // true, variable has type ReadonlyArray - * ``` - * - * @since 2.0.0 - */ -export function array( - item: Refinement, -): Refinement> { - return (a): a is Array => Array.isArray(a) && a.every(item); -} - -/** - * Create a Refinement from an array of refinements, where each index of a type - * much match the originated refinement type. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * - * const tuple = R.tuple(R.number, R.string); - * - * const result1 = tuple(null); // false - * const result2 = tuple([]); // false - * const result3 = tuple(["Hello", 1]); // false - * const result4 = tuple([1, "Hello"]); - * // true, variable has type [number, string] - * const result5 = tuple([1, "Hello", "Goodbye"]); // false - * ``` - * - * @since 2.0.0 - */ -// deno-lint-ignore no-explicit-any -export function tuple( - ...items: { [K in keyof A]: Refinement } -): Refinement { - return (a): a is { [K in keyof A]: A[K] } => - Array.isArray(a) && items.length === a.length && - a.every((value, index) => items[index](value)); -} - -/** - * Create a Refinement from a struct of refinements, where each index of a type - * much match the originated refinement type, key for key. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * - * const struct = R.struct({ - * num: R.number, - * str: R.string - * }); - * - * const result1 = struct(null); // false - * const result2 = struct({}); // false - * const result3 = struct({ num: "Hello", str: 1 }); // false - * const result4 = struct({ num: 1, str: "Hello" }); - * // true, variable has type { num: number, str: string } - * const result5 = struct([1, "Hello", "Goodbye"]); // false - * ``` - * - * @since 2.0.0 - */ -export function struct( - items: { [K in keyof A]: Refinement }, -): Refinement { - const entries: [string, Refinement][] = Object.entries( - items, - ); - return (a): a is { readonly [K in keyof A]: A[K] } => - isRecord(a) && - entries.every(([key, refine]) => key in a && refine(a[key])); -} - -/** - * Create a Refinement from a struct of refinements, where each index of a type - * much match the originated refinement type, key for key, or not have that - * property at all. This is distinct from the property being null or undefined. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * - * const struct = R.partial({ - * num: R.number, - * str: R.string - * }); - * - * const result1 = struct(null); // false - * const result2 = struct({}); // true, - * const result3 = struct({ num: "Hello", str: 1 }); // false - * const result4 = struct({ num: 1, str: "Hello" }); - * // true, variable has type { num?: number, str": string } - * const result5 = struct({ - * num: 1, - * str: "Hello", - * other: "Goodbye" - * }); // true, variable ahs type { num?: number, str?: string } - * ``` - * - * @since 2.0.0 - */ -export function partial( - items: { [K in keyof A]: Refinement }, -): Refinement { - const entries: [string, Refinement][] = Object.entries( - items, - ); - return (a): a is { [K in keyof A]?: A[K] } => - isRecord(a) && - entries.every(([key, refine]) => !(key in a) || refine(a[key])); -} - -/** - * Intersect is an alias of and. - * - * @since 2.0.0 - */ -export function intersect( - gi: Refinement, -): (ga: Refinement) => Refinement { - return (ga: Refinement) => (a): a is A & I => - ga(a) && gi(a); -} - -/** - * Union is an alias of or. - * - * @since 2.0.0 - */ -export function union( - gi: Refinement, -): (ga: Refinement) => Refinement { - return (ga: Refinement) => (a): a is A | I => - ga(a) || gi(a); -} - -/** - * Lazy is used to handle the case where a refinement is recursive. - * - * @example - * ```ts - * import type { Refinement } from "./refinement.ts"; - * import * as R from "./refinement.ts"; - * - * type Person = { name: string; age: number; children: ReadonlyArray }; - * - * const person: Refinement = R.lazy("Person", () => - * R.struct({ - * name: R.string, - * age: R.number, - * children: R.array(person), - * })); - * - * const rufus = { name: "Rufus", age: 1, children: [] }; - * const brandon = { name: "Brandon", age: 37, children: [rufus] }; - * - * const result1 = person(null); // false - * const result2 = person(rufus); // true, rufus: Person - * const result3 = person(brandon); // true, brandon: Person - * ``` - * - * @since 2.0.0 - */ -export function lazy( - _: string, - refinement: () => Refinement, -): Refinement { - const get = memoize>(refinement); - return (u: A): u is B => get()(u); -} - -/** - * The canonical implementation of Schemable for UnknownRefinement. It contains - * the methods unknown, string, number, boolean, literal, nullable, undefinable, - * record, array, tuple, struct, partial, intersect, union, and lazy. - * - * @since 2.0.0 - */ -export const SchemableRefinement: Schemable = { - unknown: () => unknown, - string: () => string, - number: () => number, - boolean: () => boolean, - literal, - nullable, - undefinable, - record, - array, - tuple: tuple as Schemable["tuple"], - struct, - partial, - intersect: intersect as Schemable["intersect"], - union, - lazy, -}; diff --git a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/schemable.ts b/vendor/deno.land/x/fun@v.2.0.0-alpha.11/schemable.ts deleted file mode 100644 index 3d89e5f..0000000 --- a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/schemable.ts +++ /dev/null @@ -1,323 +0,0 @@ -/** - * Schemable presents a unified algebra for parsing, decoding - * guarding, or otherwise building typed js structures in - * TypeScript. - */ - -import type { $, Kind, TypeClass } from "./kind.ts"; -import type { NonEmptyArray } from "./array.ts"; -import type { ReadonlyRecord } from "./record.ts"; - -import { memoize } from "./fn.ts"; - -export type Spread = { [K in keyof A]: A[K] } extends infer B ? B : never; - -/** - * These are the super-types that a Literal schema must extent. - * They are used to constrain the inputs for LiteralSchemable. - * - * @since 2.0.0 - */ -export type Literal = string | number | boolean | null | undefined; - -/** - * Wraps an unknown type in Schemable. This is the best escape - * hatch when a Schema isn't known ahead of time. - * - * @since 2.0.0 - */ -export type UnknownSchemable = TypeClass & { - readonly unknown: () => $; -}; - -/** - * Wraps a string type in Schemable. - * - * @since 2.0.0 - */ -export type StringSchemable = TypeClass & { - readonly string: () => $; -}; - -/** - * Wraps a number type in Schemable. - * - * @since 2.0.0 - */ -export type NumberSchemable = TypeClass & { - readonly number: () => $; -}; - -/** - * Wraps a boolean type in Schemable. - * - * @since 2.0.0 - */ -export type BooleanSchemable = TypeClass & { - readonly boolean: () => $; -}; - -/** - * Wraps a union of literals in Schemable. - * - * @since 2.0.0 - */ -export type LiteralSchemable = TypeClass & { - readonly literal: , B, C, D, E>( - ...s: A - ) => $; -}; - -/** - * Takes a Schemable and returns a Schemable; - * - * @since 2.0.0 - */ -export type NullableSchemable = TypeClass & { - readonly nullable: ( - or: $, - ) => $; -}; - -/** - * Takes a Schemable and returns a Schemable; - * - * @since 2.0.0 - */ -export type UndefinableSchemable = TypeClass & { - readonly undefinable: ( - or: $, - ) => $; -}; - -/** - * Takes a Schemable and returns a Schemable> - * - * @since 2.0.0 - */ -export type RecordSchemable = TypeClass & { - readonly record: ( - codomain: $, - ) => $, B, C], [D], [E]>; -}; - -/** - * Takes a Schemable and returns a Schemable> - * - * @since 2.0.0 - */ -export type ArraySchemable = TypeClass & { - readonly array: ( - item: $, - ) => $, B, C], [D], [E]>; -}; - -/** - * Takes a tuple of Schemables and returns a Schemable - * for a tuple that matches, index for index, the input - * schemables. - * - * ie. [StringSchemable, NumberSchemable] becomes - * Schemable<[string, number]> - * - * @since 2.0.0 - */ -export type TupleSchemable = TypeClass & { - // deno-lint-ignore no-explicit-any - readonly tuple: ( - ...items: { readonly [K in keyof A]: $ } - ) => $; -}; - -/** - * Takes a struct of Schemables and returns a Schemable - * for a struct that matches, key for key, the input - * schemables. - * - * ie. { str: StringSchemable, num: NumberSchemable } becomes - * Schemable<{ str: string, num: number }> - * - * @since 2.0.0 - */ -export type StructSchemable = TypeClass & { - readonly struct: ( - items: { readonly [K in keyof A]: $ }, - ) => $; -}; - -/** - * Takes a struct of Schemables and returns a Schemable - * for a struct that matches, key for key, the input - * schemables but the values can also be partial. - * - * ie. { str: StringSchemable, num: NumberSchemable } becomes - * Schemable<{ str?: string, num?: number }> - * - * @since 2.0.0 - */ -export type PartialSchemable = TypeClass & { - readonly partial: ( - items: { readonly [K in keyof A]: $ }, - ) => $; -}; - -/** - * Takes two schemables, left and right, and returns - * the intersection of them. This means that any value - * for must match both schemables. - * - * @since 2.0.0 - */ -export type IntersectSchemable = TypeClass & { - readonly intersect: ( - right: $, - ) => ( - left: $, - ) => $, B, C], [D], [E]>; -}; - -/** - * Takes two schemables, left and right, and returns - * the union of them. This means that any value - * for must match either schemable. - * - * @since 2.0.0 - */ -export type UnionSchemable = TypeClass & { - readonly union: ( - right: $, - ) => (left: $) => $; -}; - -/** - * Takes an id and a thunk returning a schemable and - * returns a schemable that matches the return value - * of the thunk. This schemable is necessary for - * handling recursive or corecursive schemables. - * - * @since 2.0.0 - */ -export type LazySchemable = TypeClass & { - readonly lazy: ( - id: string, - f: () => $, - ) => $; -}; - -/** - * A Schemable is the union of all schemable methods. - * This allows one to build an arbitrary Schema using - * the Schemable interface, then pass a concrete - * Schemable implementation to the Schema. Thus, one - * can build a single model and produce decoders, - * guards, or jsonschema from that model. - * - * @since 2.0.0 - */ -export type Schemable = - & TypeClass - & UnknownSchemable - & StringSchemable - & NumberSchemable - & BooleanSchemable - & LiteralSchemable - & NullableSchemable - & UndefinableSchemable - & RecordSchemable - & ArraySchemable - & TupleSchemable - & StructSchemable - & PartialSchemable - & IntersectSchemable - & UnionSchemable - & LazySchemable; - -/** - * A Schema is the a function that takes a generic schemable and builds - * a specific model from it. - * - * @since 2.0.0 - */ -export type Schema = < - U extends Kind, ->(S: Schemable) => $; - -/** - * Extracts the inner type of a Schema - * - * @since 2.0.0 - */ -export type TypeOf = T extends Schema ? A : unknown; - -// Helps inference in the schema function -type InferSchema = - & TypeClass - & ((S: Schemable) => $); - -/** - * A helper function to build a generic Schema that can be used - * with any Schemable. - * - * @example - * ```ts - * import { schema, TypeOf } from "./schemable.ts"; - * import { SchemableDecoder } from "./decoder.ts"; - * import { SchemableRefinement } from "./refinement.ts"; - * import { SchemableJsonBuilder, print } from "./json_schema.ts"; - * import { pipe } from "./fn.ts"; - * - * const mySchema = schema(s => pipe( - * s.struct({ - * name: s.string(), - * age: s.number(), - * }), - * s.intersect(s.partial({ - * interests: s.array(s.string()), - * })) - * )); - * - * // Derive the type from the schema - * type MySchema = TypeOf; - * - * const decode = mySchema(SchemableDecoder); - * const refine = mySchema(SchemableRefinement); - * const jsonSchema = mySchema(SchemableJsonBuilder); - * - * const unknown1 = { - * name: "Batman", - * age: 45, - * interests: ["crime fighting", "cake", "bats"], - * }; - * const unknown2 = { - * name: "Cthulhu", - * interests: ["madness"], - * }; - * - * const decoded1 = decode(unknown1); // Success! - * const decoded2 = decode(unknown2); // Failure with info - * - * const refine1 = refine(unknown1); // true - * const refine2 = refine(unknown2); // false - * - * const jsonSchemaString = pipe( - * jsonSchema, - * print, - * json => JSON.stringify(json, null, 2), - * ); // Turns the jsonSchema into a prettified string - * - * ``` - * - * @since 2.0.0 - */ -export function schema< - A, - B = unknown, - C = unknown, - D = unknown, - E = unknown, - U extends Kind = Kind, ->( - s: InferSchema, -): Schema { - return memoize(s) as Schema; -} diff --git a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/semigroup.ts b/vendor/deno.land/x/fun@v.2.0.0-alpha.11/semigroup.ts deleted file mode 100644 index 31d1cfb..0000000 --- a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/semigroup.ts +++ /dev/null @@ -1,394 +0,0 @@ -/** - * Semigroup is an algebra over associativity and totality. It's - * basic purpose can be understood as "a way to merge, concatenate, - * or combine" two of a thing into one thing. - * - * This file contains the Semigroup algebra, a collection of - * instance getters, and some utilities around Semigroups. - * - * @module Semigroup - */ - -import type { ReadonlyRecord } from "./record.ts"; -import type { Ord } from "./ord.ts"; - -import * as O from "./ord.ts"; -import { reduce } from "./array.ts"; -import { pipe } from "./fn.ts"; - -/** - * A Semigroup is an algebra with a notion of concatenation. This - * means that it's used to merge two Ts into one T. The only rule - * that this merging must follow is that if you merge A, B, and C, - * that it doesn't matter if you start by merging A and B or start - * by merging B and C. There are many ways to merge values that - * follow these rules. A simple example is addition for numbers. - * It doesn't matter if you add (A + B) + C or if you add A + (B + C). - * The resulting sum will be the same. Thus, (number, +) can be - * used to make a Semigroup (see [SemigroupNumberSum](./number.ts) - * for this exact instance). - * - * An instance of concat must obey the following laws: - * - * 1. Associativity: - * pipe(a, concat(b), concat(c)) === pipe(a, concat(pipe(b, concat(c)))) - * - * The original type came from - * [static-land](https://github.com/fantasyland/static-land/blob/master/docs/spec.md#semigroup) - * - * @since 2.0.0 - */ -export interface Semigroup { - readonly concat: (right: D) => (left: D) => D; -} - -/** - * A type for Semigroup over any, useful as an extension target for - * functions that take any Semigroup and do not need to - * extract the type. - * - * @since 2.0.0 - */ -// deno-lint-ignore no-explicit-any -export type AnySemigroup = Semigroup; - -/** - * A type level extractor, used to pull the inner type from a Semigroup. - * - * @since 2.0.0 - */ -export type TypeOf = T extends Semigroup ? A : never; - -/** - * Get an Semigroup over A that always returns the first - * parameter supplied to concat (confusingly this is - * actually the last parameter since concat is in curried - * form). - * - * @example - * ```ts - * import { first } from "./semigroup.ts"; - * import { pipe } from "./fn.ts"; - * - * type Person = { name: string, age: number }; - * - * const SemigroupPerson = first(); - * - * const octavia: Person = { name: "Octavia", age: 42 }; - * const kimbra: Person = { name: "Kimbra", age: 32 }; - * const brandon: Person = { name: "Brandon", age: 37 }; - * - * const firstPerson = pipe( - * octavia, - * SemigroupPerson.concat(kimbra), - * SemigroupPerson.concat(brandon), - * ); // firstPerson === octavia - * ``` - * - * @since 2.0.0 - */ -export function first(): Semigroup { - return ({ concat: () => (left) => left }); -} - -/** - * Get an Semigroup over A that always returns the last - * parameter supplied to concat (confusingly this is - * actually the first parameter since concat is in curried - * form). - * - * @example - * ```ts - * import { last } from "./semigroup.ts"; - * import { pipe } from "./fn.ts"; - * - * type Person = { name: string, age: number }; - * - * const SemigroupPerson = last(); - * - * const octavia: Person = { name: "Octavia", age: 42 }; - * const kimbra: Person = { name: "Kimbra", age: 32 }; - * const brandon: Person = { name: "Brandon", age: 37 }; - * - * const lastPerson = pipe( - * octavia, - * SemigroupPerson.concat(kimbra), - * SemigroupPerson.concat(brandon), - * ); // lastPerson === brandon - * ``` - * - * @since 2.0.0 - */ -export function last(): Semigroup { - return ({ concat: (right) => () => right }); -} - -/** - * Get the "Dual" of an existing Semigroup. This effectively reverses - * the order of the input semigroup's application. For example, the - * dual of the "first" semigroup is the "last" semigroup. The dual - * of (boolean, ||) is itself. - * - * @example - * ```ts - * import * as SG from "./semigroup.ts"; - * import { pipe } from "./fn.ts"; - * - * type Person = { name: string, age: number }; - * - * const last = SG.last(); - * const dual = SG.dual(last); - * - * const octavia: Person = { name: "Octavia", age: 42 }; - * const kimbra: Person = { name: "Kimbra", age: 32 }; - * const brandon: Person = { name: "Brandon", age: 37 }; - * - * const dualPerson = pipe( - * octavia, - * dual.concat(kimbra), - * dual.concat(brandon), - * ); // dualPerson === octavia - * ``` - * - * @since 2.0.0 - */ -export function dual(S: Semigroup): Semigroup { - return ({ concat: (right) => (left) => S.concat(left)(right) }); -} - -/** - * Get a Semigroup from a tuple of semigroups. The resulting - * semigroup will operate over tuples applying the input - * semigroups applying each based on its position, - * - * @example - * ```ts - * import * as SG from "./semigroup.ts"; - * import { pipe } from "./fn.ts"; - * - * type Person = { name: string, age: number }; - * - * const first = SG.first(); - * const last = SG.last(); - * const { concat } = SG.tuple(first, last); - * - * const octavia: Person = { name: "Octavia", age: 42 }; - * const kimbra: Person = { name: "Kimbra", age: 32 }; - * const brandon: Person = { name: "Brandon", age: 37 }; - * - * const tuplePeople = pipe( - * [octavia, octavia], - * concat([kimbra, kimbra]), - * concat([brandon, brandon]), - * ); // tuplePeople === [octavia, brandon] - * ``` - * - * @since 2.0.0 - */ -export function tuple( - ...semigroups: T -): Semigroup<{ readonly [K in keyof T]: TypeOf }> { - type Return = { [K in keyof T]: TypeOf }; - return ({ - concat: (right) => (left): Return => - semigroups.map((s, i) => - s.concat(right[i])(left[i]) - ) as unknown as Return, - }); -} - -/** - * Get a Semigroup from a struct of semigroups. The resulting - * semigroup will operate over similar shaped structs applying - * the input semigroups applying each based on its position, - * - * @example - * ```ts - * import type { Semigroup } from "./semigroup.ts"; - * import * as SG from "./semigroup.ts"; - * import * as N from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * type Person = { name: string, age: number }; - * const person = (name: string, age: number): Person => ({ name, age }); - * - * // Chooses the longest string, defaulting to left when equal - * const longestString: Semigroup = { - * concat: (right) => (left) => right.length > left.length ? right : left, - * }; - * - * // This semigroup will merge two people, choosing the longest - * // name and the oldest age - * const { concat } = SG.struct({ - * name: longestString, - * age: N.SemigroupNumberMax, - * }) - * - * const brandon = pipe( - * person("Brandon Blaylock", 12), - * concat(person("Bdon", 17)), - * concat(person("Brandon", 30)) - * ); // brandon === { name: "Brandon Blaylock", age: 30 } - * ``` - * - * @since 2.0.0 - */ -// deno-lint-ignore no-explicit-any -export function struct>( - semigroups: { [K in keyof O]: Semigroup }, -): Semigroup { - type Entries = [keyof O, typeof semigroups[keyof O]][]; - return ({ - concat: (right) => (left) => { - const r = {} as Record; - for (const [key, semigroup] of Object.entries(semigroups) as Entries) { - r[key] = semigroup.concat(right[key])(left[key]); - } - return r as { [K in keyof O]: O[K] }; - }, - }); -} - -/** - * Create a semigroup fron an instance of Ord that returns - * that maximum for the type being ordered. This Semigroup - * functions identically to max from Ord. - * - * @example - * ```ts - * import * as SG from "./semigroup.ts"; - * import * as N from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const { concat } = SG.max(N.OrdNumber); - * - * const biggest = pipe( - * 0, - * concat(-1), - * concat(10), - * concat(1000), - * concat(5), - * concat(9001) - * ); // biggest is over 9000 - * ``` - * - * @since 2.0.0 - */ -export function max(ord: Ord): Semigroup { - return { concat: O.max(ord) }; -} - -/** - * Create a semigroup fron an instance of Ord that returns - * that minimum for the type being ordered. This Semigroup - * functions identically to min from Ord. - * - * @example - * ```ts - * import * as SG from "./semigroup.ts"; - * import * as N from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const { concat } = SG.min(N.OrdNumber); - * - * const smallest = pipe( - * 0, - * concat(-1), - * concat(10), - * concat(1000), - * concat(5), - * concat(9001) - * ); // smallest is -1 - * ``` - * - * @since 2.0.0 - */ -export function min(ord: Ord): Semigroup { - return { concat: O.min(ord) }; -} - -/** - * Create a semigroup that works like Array.join, - * inserting middle between every two values - * that are concatenated. This can have some interesting - * results. - * - * @example - * ```ts - * import * as SG from "./semigroup.ts"; - * import * as S from "./string.ts"; - * import { pipe } from "./fn.ts"; - * - * const { concat: toList } = pipe( - * S.SemigroupString, - * SG.intercalcate(", "), - * ); - * - * const list = pipe( - * "apples", - * toList("oranges"), - * toList("and bananas"), - * ); // list === "apples, oranges, and bananas" - * ``` - * - * @since 2.0.0 - */ -export function intercalcate(middle: A) { - return (S: Semigroup): Semigroup => ({ - concat: (right) => S.concat(pipe(middle, S.concat(right))), - }); -} - -/** - * Create a semigroup that always returns the - * given value, ignoring anything that it is - * concatenated with. - * - * @example - * ```ts - * import * as SG from "./semigroup.ts"; - * import { pipe } from "./fn.ts"; - * - * const { concat } = SG.constant("cake"); - * - * const whatDoWeWant = pipe( - * "apples", - * concat("oranges"), - * concat("bananas"), - * concat("pie"), - * concat("money"), - * ); // whatDoWeWant === "cake" - * ``` - * - * @since 2.0.0 - */ -export function constant(a: A): Semigroup { - return { concat: () => () => a }; -} - -/** - * Given a semigroup, create a function that will - * iterate through an array of values and concat - * them. This is not much more than Array.reduce(concat). - * - * @example - * ```ts - * import * as SG from "./semigroup.ts"; - * import * as N from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const sumAll = SG.concatAll(N.SemigroupNumberSum); - * - * const sum = pipe( - * [1, 30, 80, 1000, 52, 42], - * sumAll(0), - * ); // sum === 1205 - * ``` - * - * @since 2.0.0 - */ -export function concatAll( - S: Semigroup, -): (startWith: A) => (as: ReadonlyArray) => A { - return (startWith) => reduce((a, c) => S.concat(c)(a), startWith); -} diff --git a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/semigroupoid.ts b/vendor/deno.land/x/fun@v.2.0.0-alpha.11/semigroupoid.ts deleted file mode 100644 index fa9e3e0..0000000 --- a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/semigroupoid.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { $, Kind, TypeClass } from "./kind.ts"; - -/** - * Semigroupoid - * https://github.com/fantasyland/static-land/blob/master/docs/spec.md#semigroupoid - */ -export interface Semigroupoid extends TypeClass { - readonly compose: ( - second: $, - ) => ( - first: $, - ) => $; -} diff --git a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/show.ts b/vendor/deno.land/x/fun@v.2.0.0-alpha.11/show.ts deleted file mode 100644 index ff830a9..0000000 --- a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/show.ts +++ /dev/null @@ -1,8 +0,0 @@ -/** - * Show is the "fun" version of JavaScripts toString - * method. For algebraic data types that can be - * stringified it allows a structured way to do so. - */ -export interface Show { - readonly show: (t: T) => string; -} diff --git a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/traversable.ts b/vendor/deno.land/x/fun@v.2.0.0-alpha.11/traversable.ts deleted file mode 100644 index 73ce4da..0000000 --- a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/traversable.ts +++ /dev/null @@ -1,19 +0,0 @@ -import type { $, Kind, TypeClass } from "./kind.ts"; -import type { Applicative } from "./applicative.ts"; -import type { Foldable } from "./foldable.ts"; -import type { Functor } from "./functor.ts"; - -/** - * Traversable - * https://github.com/fantasyland/static-land/blob/master/docs/spec.md#traversable - */ -export interface Traversable - extends Functor, Foldable, TypeClass { - readonly traverse: ( - A: Applicative, - ) => ( - faui: (a: A) => $, - ) => ( - ta: $, - ) => $, J, K], [L], [M]>; -} diff --git a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/tree.ts b/vendor/deno.land/x/fun@v.2.0.0-alpha.11/tree.ts deleted file mode 100644 index 94c3a0b..0000000 --- a/vendor/deno.land/x/fun@v.2.0.0-alpha.11/tree.ts +++ /dev/null @@ -1,118 +0,0 @@ -import type { $, Kind, Out } from "./kind.ts"; -import type { Traversable } from "./traversable.ts"; -import type { Show } from "./show.ts"; -import type { Applicative } from "./applicative.ts"; -import type { Monad } from "./monad.ts"; - -import * as A from "./array.ts"; -import { flow, identity, pipe } from "./fn.ts"; - -export type Forest = ReadonlyArray>; - -export type Tree = { - readonly value: A; - readonly forest: Forest; -}; - -export interface KindTree extends Kind { - readonly kind: Tree>; -} - -function draw(indentation: string, forest: Forest): string { - let r = ""; - const len = forest.length; - let tree: Tree; - for (let i = 0; i < len; i++) { - tree = forest[i]; - const isLast = i === len - 1; - r += indentation + (isLast ? "└" : "├") + "─ " + tree.value; - r += draw(indentation + (len > 1 && !isLast ? "│ " : " "), tree.forest); - } - return r; -} - -export function tree(value: A, forest: Forest = []): Tree { - return ({ value, forest }); -} - -export function of(value: A, forest: Forest = A.empty()): Tree { - return tree(value, forest); -} - -export function map(fai: (a: A) => I): (ta: Tree) => Tree { - return (ta) => of(fai(ta.value), ta.forest.map(map(fai))); -} - -export function chain(fati: (a: A) => Tree): (ta: Tree) => Tree { - const concat = A.getMonoid>().concat; - return (ta) => { - const { value, forest } = fati(ta.value); - return of(value, concat(forest)(ta.forest.map(chain(fati)))); - }; -} - -export function ap(ua: Tree): (tfai: Tree<(a: A) => I>) => Tree { - return (ufai) => pipe(ufai, chain(flow(map, (fn) => fn(ua)))); -} - -export function join(tta: Tree>): Tree { - return pipe(tta, chain(identity)); -} - -export function reduce( - foao: (o: O, a: A) => O, - o: O, -): (ta: Tree) => O { - const reducer = (result: O, tree: Tree) => reduce(foao, result)(tree); - return (ta) => A.reduce(reducer, foao(o, ta.value))(ta.forest); -} - -export function traverse( - V: Applicative, -): ( - favi: (a: A) => $, -) => (ta: Tree) => $, J, K], [L], [M]> { - const traverseArray = A.traverse(V); - return ( - favi: (a: A) => $, - ): (ua: Tree) => $, J, K], [L], [M]> => { - const pusher: (i: I) => (is: Forest) => Tree = (i) => (fs) => - tree(i, fs); - const wrappedPusher = V.of(pusher); - const traverseTree = (ua: Tree): $, J, K], [L], [M]> => - pipe( - wrappedPusher, - V.ap(favi(ua.value)), - V.ap(traverseForest(ua.forest)), - ); - const traverseForest = traverseArray(traverseTree); - return traverseTree; - }; -} - -export function drawForest(forest: Forest): string { - return draw("\n", forest); -} - -export function drawTree(tree: Tree): string { - return tree.value + drawForest(tree.forest); -} - -export function match( - fai: (a: A, is: Array) => I, -): (ta: Tree) => I { - const go = (tree: Tree): I => fai(tree.value, tree.forest.map(go)); - return go; -} - -export const MonadTree: Monad = { of, ap, map, join, chain }; - -export const TraversableTree: Traversable = { map, reduce, traverse }; - -export const getShow = (S: Show): Show> => { - const show = (ta: Tree): string => - ta.forest.length === 0 - ? `Tree(${S.show(ta.value)})` - : `Tree(${S.show(ta.value)}, [${ta.forest.map(show).join(", ")}])`; - return ({ show }); -}; diff --git a/vendor/deno.land/x/fun@v2.0.0-alpha.10/applicative.ts b/vendor/deno.land/x/fun@v2.0.0-alpha.10/applicative.ts deleted file mode 100644 index de0ef30..0000000 --- a/vendor/deno.land/x/fun@v2.0.0-alpha.10/applicative.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { $, Kind, TypeClass } from "./kind.ts"; -import type { Apply } from "./apply.ts"; - -/** - * Applicative - * https://github.com/fantasyland/static-land/blob/master/docs/spec.md#applicative - */ -export interface Applicative extends Apply, TypeClass { - readonly of: ( - a: A, - ) => $; -} diff --git a/vendor/deno.land/x/fun@v2.0.0-alpha.10/apply.ts b/vendor/deno.land/x/fun@v2.0.0-alpha.10/apply.ts deleted file mode 100644 index 336be72..0000000 --- a/vendor/deno.land/x/fun@v2.0.0-alpha.10/apply.ts +++ /dev/null @@ -1,24 +0,0 @@ -import type { $, Kind, TypeClass } from "./kind.ts"; -import type { Functor } from "./functor.ts"; - -/** - * Apply - * https://github.com/fantasyland/static-land/blob/master/docs/spec.md#apply - */ -export interface Apply extends Functor, TypeClass { - readonly ap: ( - ta: $, - ) => ( - tfai: $ I, J, K], [D], [E]>, - ) => $; -} - -// export function createApplySemigroup( -// A: Apply, -// ): ( -// S: Semigroup, -// ) => Semigroup<$> { -// return (S) => ({ -// concat: (second) => (first) => pipe(first, A.map(S.concat), A.ap(second)), -// }); -// } diff --git a/vendor/deno.land/x/fun@v2.0.0-alpha.10/category.ts b/vendor/deno.land/x/fun@v2.0.0-alpha.10/category.ts deleted file mode 100644 index dd2e5ea..0000000 --- a/vendor/deno.land/x/fun@v2.0.0-alpha.10/category.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { $, Kind, TypeClass } from "./kind.ts"; -import type { Semigroupoid } from "./semigroupoid.ts"; - -/** - * Category - * https://github.com/fantasyland/static-land/blob/master/docs/spec.md#category - */ -export interface Category - extends TypeClass, Semigroupoid { - readonly id: () => $; -} diff --git a/vendor/deno.land/x/fun@v2.0.0-alpha.10/chain.ts b/vendor/deno.land/x/fun@v2.0.0-alpha.10/chain.ts deleted file mode 100644 index e2c040e..0000000 --- a/vendor/deno.land/x/fun@v2.0.0-alpha.10/chain.ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { $, Kind, TypeClass } from "./kind.ts"; -import type { Apply } from "./apply.ts"; - -/** - * Chain - * https://github.com/fantasyland/static-land/blob/master/docs/spec.md#chain - */ -export interface Chain extends TypeClass, Apply { - readonly chain: ( - fati: (a: A) => $, - ) => ( - ta: $, - ) => $; -} diff --git a/vendor/deno.land/x/fun@v2.0.0-alpha.10/contravariant.ts b/vendor/deno.land/x/fun@v2.0.0-alpha.10/contravariant.ts deleted file mode 100644 index 01f87b4..0000000 --- a/vendor/deno.land/x/fun@v2.0.0-alpha.10/contravariant.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { $, Kind, TypeClass } from "./kind.ts"; - -/** - * Contravariant - * https://github.com/fantasyland/static-land/blob/master/docs/spec.md#contravariant - */ -export interface Contravariant extends TypeClass { - readonly contramap: ( - fia: (l: L) => D, - ) => (ua: $) => $; -} diff --git a/vendor/deno.land/x/fun@v2.0.0-alpha.10/fn.ts b/vendor/deno.land/x/fun@v2.0.0-alpha.10/fn.ts deleted file mode 100644 index 191a6b3..0000000 --- a/vendor/deno.land/x/fun@v2.0.0-alpha.10/fn.ts +++ /dev/null @@ -1,913 +0,0 @@ -import type { Applicative } from "./applicative.ts"; -import type { Apply } from "./apply.ts"; -import type { Category } from "./category.ts"; -import type { Chain } from "./chain.ts"; -import type { Profunctor } from "./profunctor.ts"; -import type { Contravariant } from "./contravariant.ts"; -import type { Functor } from "./functor.ts"; -import type { In, Kind, Out } from "./kind.ts"; -import type { Monad } from "./monad.ts"; - -/** - * A Fn, also known as Reader or Environment, is a type over a variadic - * javascript function. ie. (a: number, b: string) => string can be - * a Fn. As an algebraic data type, the associated type class instances - * for Fn are limited to single variable inputs so they will look like - * (a: number) => string, with only one argument. The purposes of a Fn - * are many and varied, some common purposes are: computation, reading - * values from a shared environment, and sub-computations in a modified - * environment. In many ways Fn is a more powerful abstraction than - * State, and indeed the State monad in fun is exactly State = - * Fn<[S], [A, S]>. - * - * Currently, there is no implementation of Chain recursion or - * trampolining for Fn implemented, but it is likely to be a future - * feature. Once implemented Fn will gain some much needed stack safety. - * - * @since 2.0.0 - */ -export type Fn = (d: D) => A; - -/** - * A Fn type over any, useful for constraining generics that - * take or return Fns. - * - * @since 2.0.0 - */ -// deno-lint-ignore no-explicit-any -export type AnyFn = Fn; - -/** - * Specifies Fn as a Higher Kinded Type, with - * covariant parameter A corresponding to the 0th - * index of any Substitutions and a contravariant - * parameter D corresponding to the 0th index of - * any Substititions. The Fn URI is unique in that - * it constrains the Fn type to taking a single - * argument for the purposes of type substitution - * while the implementations of Fn combinators such - * as map, chain, etc are mostly variadic (multiple - * arguments). - * - * @since 2.0.0 - */ -export interface URI extends Kind { - readonly kind: Fn, Out>; -} - -/** - * Take a variadic Fn and make it unary, collapsing multiple arguments - * into a single tuple argument. - * - * @example - * ```ts - * import * as F from "./fn.ts"; - * - * const person = (age: number, name: string) => ({ age, name }); - * const personUnary = F.unary(person); - * - * // ({ name: "Brandon", age: 37 }) - * const result1 = personUnary([37, "Brandon"]); - * ``` - * @since 2.0.0 - */ -export function unary(fda: (...d: D) => A): Fn { - return (d) => fda(...d); -} - -/** - * A common pattern in optics is to apply an input value to a function at the - * beginning and the end of a computation. This can (and has) been achieved by - * the composition of Pair using flow(P.dup, P.map(fn), P.merge). But for - * performance reasons it's nice to have a straighforward function that achieves - * the same result. - * - * @since 2.0.0 - */ -export function over(faai: (a: A) => (a: A) => I): (a: A) => I { - return (a) => faai(a)(a); -} - -/** - * Wrap a thunk (a Fn that takes no arguments) in a try catch block, using - * an onThrow function (that should itself never throw) to handle a default - * case should the original function throw. This is useful for wrapping - * functions that might throw. - * - * @example - * ```ts - * import * as F from "./fn.ts"; - * - * const getZero = (): number => { - * if (Math.random() > 0.5) { - * throw new Error("Too high!"); - * } - * return 0; - * } - * - * const result = F.tryThunk(getZero, () => 0); // 0 - * ``` - * - * @since 2.0.0 - */ -export function tryThunk(ua: Fn, onThrow: Fn): A { - try { - return ua(); - } catch (err) { - return onThrow(err); - } -} - -/** - * Wrap any function in a try catch block, passing the result and - * arguments to onResult when the function does not throw as well - * as passing the error and arguments to the onThrow function when - * it does. Neither the onResult nor the onThrow functions should - * ever throw an error themselves. None of the functions in the fun - * library will throw on their own. If they do it is a bug in fun - * or the underlying runtime (or you used fun in javascript). This - * function primarily exists to wrap functions exported from other - * libraries that may use exceptions as their error mechanism. This - * makes those functions safe to use with fun. - * - * @example - * ```ts - * import * as F from "./fn.ts"; - * - * const throwOverFive = (n: number): number => { - * if (n > 5) { - * throw new Error("Larger than five"); - * } - * return n; - * } - * const caught = F.handleThrow( - * throwOverFive, - * result => result, - * err => 0, // Default to 0 - * ); - * - * const result1 = caught(0); // 0 - * const result2 = caught(5); // 5 - * const result3 = caught(6); // 0 - * ``` - * - * @since 2.0.0 - */ -export function handleThrow( - ua: (...d: D) => A, - onResult: (result: A, args: D) => I, - onThrow: (error: unknown, args: D) => I, -): (...d: D) => I { - return (...d) => { - try { - return onResult(ua(...d), d); - } catch (err) { - return onThrow(err, d); - } - }; -} - -/** - * Memoize a unary function using a Map. This - * means that this algorithm puposefully leaks memory. - * - * TODO: Extend memoize to be variadic. - * - * @example - * ```ts - * import * as F from "./fn.ts"; - * - * // Big old expensive recursive algorithm - * const fib = (n: number): number => - * n < 1 ? 0 : - * n <= 1 ? 1 : - * fib(n - 2) + fib(n - 1); - * - * const mfib = F.memoize(fib); - * - * const result1 = mfib(10); // 55 - * const result2 = mfib(10); // 55 but does not recompute - * ``` - * - * @since 2.0.0 - */ -export function memoize(ua: Fn): Fn { - const cache = new Map(); - return (d) => { - if (cache.has(d)) { - return cache.get(d) as A; - } - const a = ua(d); - cache.set(d, a); - return a; - }; -} - -/** - * A function that can be called to output any type. It's used for type - * hole based programming. This allows one to define interfaces and types - * for a function and stub them with todo() until you are ready to implement - * the actual behavior. The todo function will throw if it is ever actually - * called. - * - * @example - * ```ts - * import { todo } from "./fn.ts"; - * - * type InOut = { - * read: () => Promise, - * write: (s: string) => Promise, - * } - * - * const mockInOut: InOut = todo(); // InOut !!THROWS!! - * ``` - * - * @since 2.0.0 - */ -export function todo(): T { - throw new Error("TODO: this function has not been implemented"); -} - -/** - * Does an unsafe type coercion on any type. This is only safe when - * the types A and I have referential transparency. This is to say - * when the type A can be substituted for I and I for A at runtime - * without there being any change to the operation of the program. - * The primary use case for unsafeCoerce is in Newtype implementations. - */ -export function unsafeCoerce(a: A): I { - return a as unknown as I; -} - -/** - * The flow function is like the pipe function without the initial value. It - * composes up to 9 functions from left to right (top to bottom). The first - * function can take multiple arguments but every subsequent function must - * be unary (only take one argument). - * - * @example - * ```ts - * import { flow } from "./fn.ts"; - * - * const add = (m: number) => (n: number) => m + n; - * const multiply = (m: number) => (n: number) => m * n; - * - * const flowed = flow( - * add(1), - * multiply(2), - * add(1), - * multiply(2), - * ); - * - * const result1 = flowed(1); // 10 - * const result2 = flowed(2); // 14 - * const result3 = flowed(3); // 18 - * ``` - * - * @since 2.0.0 - */ -export function flow( - ab: (...a: A) => B, -): (...a: A) => B; -export function flow( - ab: (...a: A) => B, - bc: (b: B) => C, -): (...a: A) => C; -export function flow( - ab: (...a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, -): (...a: A) => D; -export function flow( - ab: (...a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, -): (...a: A) => E; -export function flow( - ab: (...a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, -): (...a: A) => F; -export function flow( - ab: (...a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, -): (...a: A) => G; -export function flow( - ab: (...a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, - gh: (g: G) => H, -): (...a: A) => H; -export function flow( - ab: (...a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, - gh: (g: G) => H, - hi: (h: H) => I, -): (...a: A) => I; -export function flow< - A extends unknown[], - B, - C, - D, - E, - F, - G, - H, - I, - J, ->( - ab: (...a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, - gh: (g: G) => H, - hi: (h: H) => I, - ij: (i: I) => J, -): (...a: A) => J; -export function flow< - A extends unknown[], - B, - C, - D, - E, - F, - G, - H, - I, - J, - K, ->( - ab: (...a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, - gh: (g: G) => H, - hi: (h: H) => I, - ij: (i: I) => J, - jk: (j: J) => K, -): (...a: A) => K; -export function flow< - A extends unknown[], - B, - C, - D, - E, - F, - G, - H, - I, - J, - K, - L, ->( - ab: (...a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, - gh: (g: G) => H, - hi: (h: H) => I, - ij: (i: I) => J, - jk: (j: J) => K, - kl: (k: K) => L, -): (...a: A) => L; -export function flow( - ...[ab, bc, cd, de, ef, fg, gh, hi, ij, jk, kl, ...rest]: AnyFn[] -): AnyFn { - switch (arguments.length) { - case 1: - return (...as) => ab(...as); - case 2: - return (...as) => bc(ab(...as)); - case 3: - return (...as) => cd(bc(ab(...as))); - case 4: - return (...as) => de(cd(bc(ab(...as)))); - case 5: - return (...as) => ef(de(cd(bc(ab(...as))))); - case 6: - return (...as) => fg(ef(de(cd(bc(ab(...as)))))); - case 7: - return (...as) => gh(fg(ef(de(cd(bc(ab(...as))))))); - case 8: - return (...as) => hi(gh(fg(ef(de(cd(bc(ab(...as)))))))); - case 9: - return (...as) => ij(hi(gh(fg(ef(de(cd(bc(ab(...as))))))))); - case 10: - return (...as) => jk(ij(hi(gh(fg(ef(de(cd(bc(ab(...as)))))))))); - case 11: - return (...as) => kl(jk(ij(hi(gh(fg(ef(de(cd(bc(ab(...as))))))))))); - default: - return (...as) => - rest.reduce( - (val, fn) => fn(val), - kl(jk(ij(hi(gh(fg(ef(de(cd(bc(ab(...as))))))))))), - ); - } -} - -/** - * The pipe takes a value as the first argument and composes it with subsequent - * function arguments, returning the result of the last function passed in. It - * handles and correctly types up to 10 unary functions. Beyond 10 it makes - * sense to break up pipe into multiple pipes. - * - * @example - * ```ts - * import { pipe } from "./fn.ts"; - * - * const add = (n: number) => (m: number) => m + n; - * const multiply = (n: number) => (m: number) => m * n; - * - * const result = pipe( - * 1, - * add(1), // 2 - * multiply(2), // 4 - * add(1), // 5 - * multiply(2), // 10 - * ); // 10 - * ``` - * - * @since 2.0.0 - */ -export function pipe(a: A): A; -export function pipe(a: A, ab: (a: A) => B): B; -export function pipe(a: A, ab: (a: A) => B, bc: (b: B) => C): C; -export function pipe( - a: A, - ab: (a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, -): D; -export function pipe( - a: A, - ab: (a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, -): E; -export function pipe( - a: A, - ab: (a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, -): F; -export function pipe( - a: A, - ab: (a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, -): G; -export function pipe( - a: A, - ab: (a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, - gh: (g: G) => H, -): H; -export function pipe( - a: A, - ab: (a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, - gh: (g: G) => H, - hi: (h: H) => I, -): I; -export function pipe( - a: A, - ab: (a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, - gh: (g: G) => H, - hi: (h: H) => I, - ij: (i: I) => J, -): J; -export function pipe( - a: A, - ab: (a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, - gh: (g: G) => H, - hi: (h: H) => I, - ij: (i: I) => J, - jk: (j: J) => K, -): K; -export function pipe( - a: A, - ab: (a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, - gh: (g: G) => H, - hi: (h: H) => I, - ij: (i: I) => J, - jk: (j: J) => K, - kl: (K: K) => L, -): L; -export function pipe( - a: A, - ab: (a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, - gh: (g: G) => H, - hi: (h: H) => I, - ij: (i: I) => J, - jk: (j: J) => K, - kl: (K: K) => L, - end: never, -): L; -export function pipe( - value: unknown, - ...fns: AnyFn[] -): unknown { - return fns.reduce((val, fn) => fn(val), value); -} - -/** - * Create a Fn that always returns a value. This is equivalent to - * constant. - * - * @example - * ```ts - * import { of } from "./fn.ts"; - * - * const alwaysA = of("A"); - * - * const result = alwaysA(null); // "A" - * ``` - * - * @since 2.0.0 - */ -export function of(a: A): Fn { - return () => a; -} - -/** - * Create a Fn that always returns a value. This is equivalent to - * of but without the ability to specify a contravariant argument. - * - * @example - * ```ts - * import { constant } from "./fn.ts"; - * - * const alwaysA = constant("A"); - * - * const result = alwaysA(); // "A" - * ``` - * - * @since 2.0.0 - */ -export function constant(a: A): () => A { - return () => a; -} - -/** - * Apply functions to an unknown function. Useful for pipeing values into - * functions. - */ -export function apply(d: D): (ua: Fn) => A { - return (ua) => ua(d); -} - -/** - * Given L => A => I and D => A create a new Fn - * D & L => I. In order to preserve type widening for - * ap, it only handles unary functions. - * - * @example - * ```ts - * import * as F from "./fn.ts"; - * import { ap, pipe } from "./fn.ts"; - * - * type Person = { name: string, age: number }; - * - * const person = (name: string) => (age: number): Person => ({ name, age }); - * - * const result = pipe( - * F.of(person), - * F.ap(F.of("Brandon")), - * F.ap(F.of(37)), - * ); // Fn<[], Person> - * ``` - * - * @since 2.0.0 - */ -export function ap( - ua: Fn, -): (ufai: Fn I>) => Fn { - return (ufai) => (d) => ufai(d)(ua(d)); -} - -/** - * Map over the output of a Fn. This is equivalent to - * function composition. - * ie. a => pipe(f, map(g))(a) === a => g(f(a)) - * - * @example - * ```ts - * import { map, of, pipe } from "./fn.ts"; - * - * const result = pipe(of(1), map(n => n + 1)); // 2 - * ``` - * - * @since 2.0.0 - */ -export function map( - fai: (a: A) => I, -): (ta: Fn) => Fn { - return (ta) => flow(ta, fai); -} - -/** - * Collapse a curried function D => D => A into - * D => A. - * - * @example - * ```ts - * import { join } from "./fn.ts"; - * - * const add = (n: number) => (m: number) => m + n; - * const dup = join(add); - * - * const result1 = dup(1); // 2 - * const result2 = dup(2); // 4 - * const result3 = dup(10); // 20 - * ``` - * - * @since 2.0.0 - */ -export function join( - tta: Fn>, -): Fn { - return (d) => tta(d)(d); -} - -/** - * Create a new Fn by combining A => L => I with - * D => A to produce D & L => I. This is equivalent - * to ap with the first two arguments switched. It is - * also limited to unary functions in order to properly - * handle type widening on the input type. - * - * @example - * ```ts - * import { pipe, chain } from "./fn.ts"; - * const add = (n: number) => (m: number) => n + m; - * - * const chainer = pipe( - * (n: number) => n, - * chain(add), - * chain(add), - * chain(add), - * chain(add), - * chain(add), - * ); - * - * const result1 = chainer(1); // 6 - * const result2 = chainer(2); // 12 - * const result3 = chainer(3); // 18 - * ``` - * - * @since 2.0.0 - */ -export function chain( - fati: (a: A) => Fn, -): (ta: Fn) => Fn { - return (ta) => (d) => fati(ta(d))(d); -} - -/** - * Map over the input of a function, turning - * D => A and L => D into L => A. - * - * @example - * ```ts - * import { contramap, pipe } from "./fn.ts"; - * - * const equalsZero = (n: number): boolean => n === 0; - * const strLength = (s: string): number => s.length; - * - * const isEmpty = pipe( - * equalsZero, - * contramap(strLength), - * ); - * - * const result1 = isEmpty(""); // true - * const result2 = isEmpty("Hello"); // false - * ``` - * - * @since 2.0.0 - */ -export function contramap( - fld: (l: L) => D, -): (ta: Fn) => Fn { - return (ta) => (d) => ta(fld(d)); -} - -/** - * A combination of contramap and map, dimap applies fld - * to the input of a function and fai to the output. - * - * @example - * ```ts - * import type { NonEmptyArray } from "./array.ts"; - * import { dimap, pipe } from "./fn.ts"; - * import { plural, split } from "./string.ts"; - * - * const are = plural("is", "are"); - * const words = plural("word", "words"); - * const describe = (n: number) => `There ${are(n)} ${n} ${words(n)}`; - * - * const toWords = split(/\s+/g); // string => string[] - * const count = (ws: NonEmptyArray) => ws.length; - * - * const fromString = pipe( - * count, - * dimap(toWords, describe), - * ); - * - * const result1 = fromString("Hello World"); // "There are 2 words" - * const result2 = fromString("Hi"); // "There is 1 word" - * const result3 = fromString("This is a test"); // "There are 4 words" - * ``` - * - * @since 2.0.0 - */ -export function dimap( - fld: (l: L) => D, - fai: (a: A) => I, -): (ta: Fn) => Fn { - return (ta) => flow(fld, ta, fai); -} - -/** - * The canonical identity function. It returns whatever value was - * passed to it. - * - * @example - * ```ts - * import { identity } from "./fn.ts"; - * - * const result1 = identity(1); // 1 - * const result2 = identity("Hello"); // "Hello" - * ``` - * @since 2.0.0 - */ -export function identity(a: A): A { - return a; -} - -/** - * A thunk over the identity function. It allows one - * to constrain an identity to a specific type. - * - * @example - * ```ts - * import { id } from "./fn.ts"; - * - * const idString = id(); // (s: string) => string - * const idNumber = id(); // (n: number) => number - * - * const result1 = idString("Hello"); // "Hello" - * const result2 = idNumber(1); // 1 - * ``` - * - * @since 2.0.0 - */ -export function id(): Fn { - return identity; -} - -/** - * Compose two functions by taking the output of - * one and passing it to another. This is equivalent - * to the map function. - * - * @example - * ```ts - * import { compose, pipe } from "./fn.ts"; - * - * const length = (s: string) => s.length; - * const dup = (n: number) => n + n; - * - * const composed = pipe( - * length, - * compose(dup), - * ); - * - * const result1 = composed("Hello"); // 10 - * const result2 = composed(""); // 0 - * ``` - * - * @since 2.0.0 - */ -export function compose( - second: Fn, -): (first: Fn) => Fn { - return (first) => flow(first, second); -} - -/** - * The canonical implementation of Profunctor for Fn. It contains - * the method dimap. - * - * @since 2.0.0 - */ -export const ProfunctorFn: Profunctor = { dimap }; - -/** - * The canonical implementation of Functor for Fn. It contains - * the method map. - * - * @since 2.0.0 - */ -export const FunctorFn: Functor = { map }; - -/** - * The canonical implementation of Apply for Fn. It contains - * the methods ap and map. - * - * @since 2.0.0 - */ -export const ApplyFn: Apply = { map, ap }; - -/** - * The canonical implementation of Applicative for Fn. It contains - * the methods of, ap, and map. - * - * @since 2.0.0 - */ -export const ApplicativeFn: Applicative = { of, ap, map }; - -/** - * The canonical implementation of Chain for Fn. It contains - * the methods ap, map, and chain. - * - * @since 2.0.0 - */ -export const ChainFn: Chain = { ap, map, chain }; - -/** - * The canonical implementation of Monad for Fn. It contains - * the methods of, ap, map, join, and chain. - * - * @since 2.0.0 - */ -export const MonadFn: Monad = { of, ap, map, join, chain }; - -/** - * The canonical implementation of Contravariant for Fn. It contains - * the method contramap. - * - * @since 2.0.0 - */ -export const ContravariantFn: Contravariant = { contramap }; - -/** - * The canonical implementation of Category for Fn. It contains - * the methods id and compose. - * - * @since 2.0.0 - */ -export const CategoryFn: Category = { id, compose }; diff --git a/vendor/deno.land/x/fun@v2.0.0-alpha.10/functor.ts b/vendor/deno.land/x/fun@v2.0.0-alpha.10/functor.ts deleted file mode 100644 index 472ab23..0000000 --- a/vendor/deno.land/x/fun@v2.0.0-alpha.10/functor.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { $, Kind, TypeClass } from "./kind.ts"; - -/** - * Functor - * https://github.com/fantasyland/static-land/blob/master/docs/spec.md#functor - */ -export interface Functor extends TypeClass { - readonly map: ( - fai: (value: A) => I, - ) => ( - ta: $, - ) => $; -} diff --git a/vendor/deno.land/x/fun@v2.0.0-alpha.10/kind.ts b/vendor/deno.land/x/fun@v2.0.0-alpha.10/kind.ts deleted file mode 100644 index be096c4..0000000 --- a/vendor/deno.land/x/fun@v2.0.0-alpha.10/kind.ts +++ /dev/null @@ -1,100 +0,0 @@ -/** - * Splits the different type level substitutions into tuples - * based on variance. - */ -export type Substitutions = { - // Covariant Substitutions - readonly ["covariant"]: unknown[]; - // Contravariant Substitutions - readonly ["contravariant"]: unknown[]; - // Invariant Substitutions - readonly ["invariant"]: unknown[]; -}; - -/** - * Kind is an interface that can be extended - * to retrieve inner types using "this". - */ -export interface Kind extends Substitutions { - readonly kind?: unknown; -} - -/** - * Substitute is a substitution type, taking a Kind implementation T and - * substituting it with types passed in S. - */ -export type Substitute = T extends - { readonly kind: unknown } ? (T & S)["kind"] - : { - readonly T: T; - readonly ["covariant"]: () => S["covariant"]; - readonly ["contravariant"]: (_: S["contravariant"]) => void; - readonly ["invariant"]: (_: S["invariant"]) => S["invariant"]; - }; - -/** - * $ is an alias of Substitute, lifting out, in, and inout - * substitutions to positional type parameters. - */ -export type $< - T extends Kind, - Out extends unknown[], - In extends unknown[] = [never], - InOut extends unknown[] = [never], -> = Substitute; - -// deno-lint-ignore no-explicit-any -export type AnySub = $; - -// deno-lint-ignore no-explicit-any -export type Intersect = (U extends any ? (k: U) => void : never) extends - ((k: infer I) => void) ? I : never; - -/** - * Access the Covariant substitution type at index N - */ -export type Out = - T["covariant"][N]; - -/** - * Access the Contravariant substitution type at index N - */ -export type In = - T["contravariant"][N]; - -/** - * Access the Invariant substitution type at index N - */ -export type InOut = - T["invariant"][N]; - -/** - * This declared symbol is used to create - * phantom concrete types that do not exist - * but are useful for carrying type data around - * for inferrence. - */ -declare const PhantomType: unique symbol; - -/** - * Holds a type level value in a concrete position - * in order to keep a type around for better inference. - */ -export interface Hold { - readonly [PhantomType]?: A; -} - -/** - * Extract the inner type from a Hold - */ -export type ToHold = T extends Hold ? A : never; - -/** - * Typeclass is a type constrained Hold type, specifically constrained - * to a "Kind" (ie. type level type) - */ -export type TypeClass = Hold; diff --git a/vendor/deno.land/x/fun@v2.0.0-alpha.10/monad.ts b/vendor/deno.land/x/fun@v2.0.0-alpha.10/monad.ts deleted file mode 100644 index e115b66..0000000 --- a/vendor/deno.land/x/fun@v2.0.0-alpha.10/monad.ts +++ /dev/null @@ -1,86 +0,0 @@ -import type { $, Kind, TypeClass } from "./kind.ts"; -import type { Applicative } from "./applicative.ts"; -import type { Chain } from "./chain.ts"; - -import { pipe } from "./fn.ts"; - -/** - * A Monad is an algebra with a notion of join(aka flatten or flat) for - * a given algebraic data type T. A Monad must also extend Functor, - * Apply, Applicative, and Chain. This means a Monad has - * the following methods: of, ap, map, join, and chain. An intuition for - * Monad can be found by thinking about how Promise.then handles functions - * that return a new Promise. - * - * An instance of a Monad must obey the following laws: - * - * 1. Left identity: chain(f)(of(a)) === f(a) - * 2. Right identity: chain(of)(ua) === ua - * - * The original type came from [static-land](https://github.com/fantasyland/static-land/blob/master/docs/spec.md#monad) - * - * @since 2.0.0 - */ -export interface Monad - extends Applicative, Chain, TypeClass { - readonly join: < - A, - B = never, - C = never, - D = unknown, - E = unknown, - J = never, - K = never, - >( - tta: $, J, K], [D], [E]>, - ) => $; -} - -/** - * Derive a Monad instance from of, chain, and a Kind URI. This is - * the simplest way to get a Monad instance when one has a - * creation function (of) and a chain function (aka flatMap or - * bind). - * - * @example - * ```ts - * import type { Kind, Out } from "./kind.ts"; - * import { createMonad } from "./monad.ts"; - * import { pipe } from "./fn.ts"; - * - * // Create a URI for Promise - * interface URI extends Kind { - * readonly kind: Promise>; - * }; - * - * // Create an of and chain function for Promise - * const of = (a: A): Promise => Promise.resolve(a); - * const chain = (faui: (a: A) => Promise) => - * (ua: Promise): Promise => ua.then(faui); - * - * // Derive a Monad for Promise - * const M = createMonad({ of, chain }); - * - * const result = await pipe( - * M.of((n: number) => (m: number) => n + m), - * M.ap(M.of(1)), - * M.ap(M.of(1)), - * ); // 2 - * ``` - * - * @experimental - * - * @since 2.0.0 - */ -export function createMonad( - { of, chain }: Pick, "of" | "chain">, -): Monad { - const Monad: Monad = { - of, - ap: (ua) => (ufai) => pipe(ufai, chain((fab) => pipe(ua, Monad.map(fab)))), - map: (fai) => (ta) => pipe(ta, chain((a) => of(fai(a)))), - chain, - join: (uua) => pipe(uua, chain((ua) => ua)), - }; - return Monad; -} diff --git a/vendor/deno.land/x/fun@v2.0.0-alpha.10/profunctor.ts b/vendor/deno.land/x/fun@v2.0.0-alpha.10/profunctor.ts deleted file mode 100644 index caf7f48..0000000 --- a/vendor/deno.land/x/fun@v2.0.0-alpha.10/profunctor.ts +++ /dev/null @@ -1,34 +0,0 @@ -import type { $, Kind, TypeClass } from "./kind.ts"; - -/** - * Profunctor - * https://github.com/fantasyland/static-land/blob/master/docs/spec.md#profunctor - * - * TODO: Strong, Choice, Star, Join, and Split - */ -export interface Profunctor extends TypeClass { - readonly dimap: ( - fld: (l: L) => D, - fai: (a: A) => I, - ) => (ta: $) => $; -} - -// // TODO: fanout and splitStrong -// export interface Strong extends TypeClass, Profunctor { -// readonly first: ( -// ua: $, -// ) => $, B, C], [Pair], [E]>; -// readonly second: ( -// ua: $, -// ) => $, B, C], [Pair], [E]>; -// } - -// // TODO: fanin and splitChoice -// export interface Choice extends TypeClass, Profunctor { -// readonly left: ( -// ua: $, -// ) => $, B, C], [Either], [E]>; -// readonly right: ( -// ua: $, -// ) => $, B, C], [Either], [E]>; -// } diff --git a/vendor/deno.land/x/fun@v2.0.0-alpha.10/semigroupoid.ts b/vendor/deno.land/x/fun@v2.0.0-alpha.10/semigroupoid.ts deleted file mode 100644 index fa9e3e0..0000000 --- a/vendor/deno.land/x/fun@v2.0.0-alpha.10/semigroupoid.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { $, Kind, TypeClass } from "./kind.ts"; - -/** - * Semigroupoid - * https://github.com/fantasyland/static-land/blob/master/docs/spec.md#semigroupoid - */ -export interface Semigroupoid extends TypeClass { - readonly compose: ( - second: $, - ) => ( - first: $, - ) => $; -} diff --git a/vendor/deno.land/x/fun@v2.0.0-alpha.15/applicable.ts b/vendor/deno.land/x/fun@v2.0.0-alpha.15/applicable.ts deleted file mode 100644 index 6dc5678..0000000 --- a/vendor/deno.land/x/fun@v2.0.0-alpha.15/applicable.ts +++ /dev/null @@ -1,45 +0,0 @@ -/** - * Applicable is a structure that allows a function to be applied inside of the - * associated concrete structure. For example, `Option` may hold a value of - * `(a: A) => B` inside of it. An Applicable for Option would allow one to - * apply the `A` in an `Option` to the function `(a: A) => B` in an - * `Option<(a: A) => B>`, resulting in an `Option`. - * - * @module Applicable - * @since 2.0.0 - */ - -import type { $, Hold, Kind } from "./kind.ts"; -import type { Combinable } from "./combinable.ts"; -import type { Mappable } from "./mappable.ts"; -import type { Wrappable } from "./wrappable.ts"; - -/** - * The Applicable interface. This interface includes the methods apply, map, and - * wrap. - * - * @since 2.0.0 - */ -export interface Applicable - extends Mappable, Wrappable, Hold { - readonly apply: ( - ta: $, - ) => ( - tfai: $ I, J, K], [D], [E]>, - ) => $; -} - -/** - * @since 2.0.0 - */ -export function getApplicableCombinable( - { apply, map }: Applicable, -): ( - combinable: Combinable, -) => Combinable<$> { - return ( - { combine }: Combinable, - ): Combinable<$> => ({ - combine: (second) => (first) => apply(first)(map(combine)(second)), - }); -} diff --git a/vendor/deno.land/x/fun@v2.0.0-alpha.15/array.ts b/vendor/deno.land/x/fun@v2.0.0-alpha.15/array.ts deleted file mode 100644 index 0a7e6e3..0000000 --- a/vendor/deno.land/x/fun@v2.0.0-alpha.15/array.ts +++ /dev/null @@ -1,1451 +0,0 @@ -/** - * This file contains a collection of utilities and - * algebraic structure implementations for ReadonlyArray - * in JavaScript. - * - * @module Array - * @since 2.0.0 - */ - -import type { $, AnySub, Intersect, Kind, Out } from "./kind.ts"; -import type { Applicable } from "./applicable.ts"; -import type { Comparable } from "./comparable.ts"; -import type { Either } from "./either.ts"; -import type { Filterable } from "./filterable.ts"; -import type { Flatmappable } from "./flatmappable.ts"; -import type { Initializable } from "./initializable.ts"; -import type { Mappable } from "./mappable.ts"; -import type { Option } from "./option.ts"; -import type { Pair } from "./pair.ts"; -import type { Reducible } from "./reducible.ts"; -import type { Showable } from "./showable.ts"; -import type { Sortable } from "./sortable.ts"; -import type { Traversable } from "./traversable.ts"; -import type { Wrappable } from "./wrappable.ts"; - -import { pair } from "./pair.ts"; -import { isRight } from "./either.ts"; -import { fromCompare } from "./comparable.ts"; -import { fromSort, sign } from "./sortable.ts"; -import { isSome, none, some } from "./option.ts"; -import { identity, pipe } from "./fn.ts"; - -const NameReadonlyArray = "ReadonlyArray"; -type NameReadonlyArray = typeof NameReadonlyArray; - -/** - * This type can be used as a placeholder for an array of any type. - * - * @since 2.0.0 - */ -// deno-lint-ignore no-explicit-any -export type AnyArray = ReadonlyArray; - -/** - * This type alias unwraps the inner type of a ReadonlyArray. - * - * @since 2.0.0 - */ -export type TypeOf = T extends ReadonlyArray ? A : never; - -/** - * This type alias represents a ReadonlyArray conuaining - * at least one value at the head. - * - * @since 2.0.0 - */ -export type NonEmptyArray = readonly [A, ...A[]]; - -/** - * This type can be used as a placeholder for a non-init array of any type. - * - * @since 2.0.0 - */ -// deno-lint-ignore no-explicit-any -export type AnyNonEmptyArray = NonEmptyArray; - -/** - * Specifies ReadonlyArray as a Higher Kinded Type, with covariant - * parameter A corresponding to the 0th index of any substitutions. - * - * @since 2.0.0 - */ -export interface KindArray extends Kind { - readonly name: NameReadonlyArray; - readonly kind: ReadonlyArray>; -} - -/** - * *UNSAFE* This operation creates a new array from ua with the value a inserted - * at the given index. The insertion index must be tested as in bounds before - * calling this function. This function is intended for internal use only and - * thus has no api guaruntees. - * - * @since 2.0.0 - */ -export function _unsafeInsertAt( - index: number, - a: A, - ua: ReadonlyArray, -): ReadonlyArray { - const result = ua.slice(); - result.splice(index, 0, a); - return result; -} - -/** - * *UNSAFE* This operation creates a new array from ua with the value a changed - * at the given index. The insertion index must be tested as in bounds before - * calling this function. This function is intended for internal use only and - * thus has no api guaruntees. - * - * @since 2.0.0 - */ -export function _unsafeUpdateAt( - index: number, - a: A, - ua: ReadonlyArray, -): ReadonlyArray { - if (ua[index] === a) { - return ua; - } else { - const result = ua.slice(); - result[index] = a; - return result; - } -} - -/** - * *UNSAFE* This operation creates a new array from ua with the value deleted - * at the given index. The deletiong index must be tested as in bounds before - * calling this function. This function is intended for internal use only and - * thus has no api guaruntees. - * - * @since 2.0.0 - */ -export function _unsafeDeleteAt( - index: number, - ua: ReadonlyArray, -): ReadonlyArray { - const result = ua.slice(); - result.splice(index, 1); - return result; -} - -/** - * *UNSAFE* This operation mutates a standard Array by pushing onto it. - * This function is intended for internal use only and thus has no api - * guaruntees. - * - * @since 2.0.0 - */ -export function _unsafeAppend( - last: A, -): (ua: Array) => Array { - return (ua) => { - ua.push(last); - return ua; - }; -} - -/** - * *UNSAFE* This operation mutates a standard Array by pushing onto it. - * This function is intended for internal use only and thus has no api - * guaruntees. - * - * @since 2.0.0 - */ -export function _unsafePush(ua: Array, a: A): Array { - ua.push(a); - return ua; -} - -/** - * *UNSAFE* This operation muuates a standard Array by unshifting onto it. - * This function is intended for internal use only and thus has no api - * guaruntees. - * - * @since 2.0.0 - */ -export function _unsafePrepend( - head: A, -): (ua: Array) => Array { - return (ua) => { - ua.unshift(head); - return ua; - }; -} - -/** - * *UNSAFE* This operation mutates a standard Array by adding all elements - * from a second array to it. This function is intended for internal use only - * and thus has no api guaruntees. - * - * @since 2.0.0 - */ -export function _unsafeJoin( - into: Array, - from: ReadonlyArray, -): Array { - const length = from.length; - let index = -1; - while (++index < length) { - into.push(from[index]); - } - return into; -} - -/** - * Given an index and a ReadonlyArray, return true if the index is valid - * for the given array. This tests whether index is between 0 and arr.length - * inclusive. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * - * const arr = A.wrap(1); - * - * const result1 = A.isOutOfBounds(0, arr); // false - * const result2 = A.isOutOfBounds(-1, arr); // true - * const result3 = A.isOutOfBounds(10, arr); // true - * ``` - * - * @since 2.0.0 - */ -export function isOutOfBounds(index: number, ua: ReadonlyArray): boolean { - return index < 0 || index >= ua.length; -} - -/** - * This predicate over ReadonlyArray returns true when called with an - * default array, otherwise it returns false. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * - * const arr1 = A.init(); - * const arr2 = A.wrap(1); - * - * const result1 = A.isEmpty(arr1); // true - * const result2 = A.isEmpty(arr2); // false - * ``` - * - * @since 2.0.0 - */ -export function isEmpty(ua: ReadonlyArray): boolean { - return ua.length === 0; -} - -/** - * A Refinement, NonEmptyArray>, returning true if - * called with an array that has at least one item. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * - * const arr1 = [1] - * const arr2 = A.init(); - * - * const result1 = A.isNonEmpty(arr1); - * // true and arr1 has type NonEmptyArray - * const result2 = A.isNonEmpty(arr2); - * // false - * ``` - * - * @since 2.0.0 - */ -export function isNonEmpty(a: ReadonlyArray): a is NonEmptyArray { - return a.length > 0; -} - -/** - * Create a NonEmptyArray from a variadic number of arguments. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * - * const result = A.array(1, 2, 3, 4); // [1, 2, 3, 4] - * ``` - * - * @since 2.0.0 - */ -export function array(...a: NonEmptyArray): NonEmptyArray { - return a; -} - -/** - * Create a range of numbers with count values, starting at start (default 0) - * and stepping by step (default 1). - * - * @example - * ```ts - * import * as A from "./array.ts"; - * - * const result1 = A.range(3); // [0, 1, 2] - * const result2 = A.range(3, 1); // [1, 2, 3] - * const result3 = A.range(3, -1, 0.1); // [-1, -0.9, -0.8] - * const result4 = A.range(2.5); // [0, 1] - * const result5 = A.range(-1); // [] - * ``` - * - * @since 2.0.0 - */ -export function range( - count: number, - start = 0, - step = 1, -): ReadonlyArray { - const length = Math.max(0, Math.floor(count)); - const result = new Array(length); - let index = -1; - let value = start; - while (++index < length) { - result[index] = value; - value += step; - } - return result; -} - -/** - * Create an init array of type A (defaulting to never). - * - * @example - * ```ts - * import * as A from "./array.ts"; - * - * const result = A.init(); // ReadonlyArray - * ``` - * - * @since 2.0.0 - */ -export function init(): ReadonlyArray { - return []; -} - -/** - * Create a NonEmptyArray conuaining the value A. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * - * const result = A.wrap(1); // [1] of type NonEmptyArray - * ``` - * - * @since 2.0.0 - */ -export function wrap(a: A): NonEmptyArray { - return [a]; -} - -/** - * Given two arrays first and second, if first is default the return second, - * otherwise return first. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const result1 = pipe( - * A.init(), - * A.alt(A.wrap(1)), - * ); // [1] - * const result2 = pipe( - * A.array(1, 2, 3), - * A.alt(A.array(3, 2, 1)), - * ); // [1, 2, 3] - * ``` - * - * @since 2.0.0 - */ -export function alt( - second: ReadonlyArray, -): (first: ReadonlyArray) => ReadonlyArray { - return (first) => isEmpty(first) ? second : first; -} - -/** - * Applicable the function fai: (A, index) => I to every element in the array ua. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * A.array("Hello", "World"), - * A.map(s => s.length), - * ); // [5, 5] - * ``` - * - * @since 2.0.0 - */ -export function map( - fai: (a: A, i: number) => I, -): (ua: ReadonlyArray) => ReadonlyArray { - return (ua) => { - let index = -1; - const length = ua.length; - const result = new Array(length); - - while (++index < length) { - result[index] = fai(ua[index], index); - } - - return result; - }; -} - -/** - * Reduce an array from left to right, accumulating into a type O via the - * function foao: (O, A, index) => O and an initial value O. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * A.range(5, 1), - * A.reduce((sum, value, index) => sum + value + index, 0), - * ); - * // 0 + 0 + 0 = 0 - * // 0 + 1 + 1 = 2 - * // 2 + 2 + 2 = 6 - * // 6 + 3 + 3 = 12 - * // 12 + 4 + 4 = 20 - * // 20 - * ``` - * - * @since 2.0.0 - */ -export function reduce( - foao: (o: O, a: A, i: number) => O, - o: O, -): (ua: ReadonlyArray) => O { - return (ua) => { - let result = o; - let index = -1; - const length = ua.length; - - while (++index < length) { - result = foao(result, ua[index], index); - } - - return result; - }; -} - -/** - * Given two arrays first and second, join them into a new array effectively - * doing [...first, ...second]. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * A.range(3, 1), - * A.combine(A.range(3, 3, -1)) - * ); // [1, 2, 3, 3, 2, 1] - * ``` - * - * @since 2.0.0 - */ -export function combine( - second: ReadonlyArray, -): (first: ReadonlyArray) => ReadonlyArray { - return (first) => { - if (isEmpty(second)) { - return first; - } else if (isEmpty(first)) { - return second; - } - - const firstLength = first.length; - const length = firstLength + second.length; - const result = Array(length); - let index = -1; - - while (++index < firstLength) { - result[index] = first[index]; - } - - index--; - - while (++index < length) { - result[index] = second[index - firstLength]; - } - - return result; - }; -} - -/** - * Given an array of arrays, flatten all inner arrays into a single - * external array. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * - * const result = A.join(A.array( - * A.range(3), - * A.range(2), - * A.range(1), - * )); // [0, 1, 2, 0, 1, 0] - * ``` - * - * @since 2.0.0 - */ -export function join( - uaa: ReadonlyArray>, -): ReadonlyArray { - let index = -1; - const length = uaa.length; - const result = new Array(); - - while (++index < length) { - const ua = uaa[index]; - let _index = -1; - const _length = ua.length; - while (++_index < _length) { - result.push(ua[_index]); - } - } - - return result; -} - -/** - * Given a function A -> ReadonlyArray and a ReadonlyArray apply the - * function to every value in the array and combine all results, returning a - * ReadonlyArray. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * A.range(3, 1, 3), // [1, 4, 7] - * A.flatmap(n => [n, n + 1, n + 2]), // ie. 1 -> [1, 2, 3] - * ); // [1, 2, 3, 4, 5, 6, 7, 8, 9] - * ``` - * - * @since 2.0.0 - */ -export function flatmap( - fati: (a: A, index: number) => ReadonlyArray, -): (ua: ReadonlyArray) => ReadonlyArray { - return (ua) => { - const length = ua.length; - const result = new Array(); - let index = -1; - - while (++index < length) { - const chained = fati(ua[index], index); - // Mutates result - // This is okay because result is a local mutable variable - // in a tight loop - _unsafeJoin(result, chained); - } - - return result; - }; -} - -/** - * Given an array of functions ReadonlyArray I> and a ReadonlyArray - * apply every function in the function array to every value in the - * ReadonlyArray. This implementation loops first over the functions, and then - * over the values, so the order of results will be [fn1(val1), fn2(val1), - * fn3(val1), ..., fn1(val2), fn2(val2), ... fn1(valN), ... fnN(valN)]. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * A.wrap((n: number) => n + 1), - * A.apply(A.array(1, 2, 3)), - * ); // [2, 3, 4] - * ``` - * - * @since 2.0.0 - */ -export function apply( - ua: ReadonlyArray, -): (ufai: ReadonlyArray<(a: A, index: number) => I>) => ReadonlyArray { - return ( - ufai: ReadonlyArray<(a: A, index: number) => I>, - ): ReadonlyArray => { - const fnlength = ufai.length; - const vallength = ua.length; - const result = new Array(fnlength * vallength); - let fnindex = -1; - while (++fnindex < fnlength) { - let valindex = -1; - while (++valindex < vallength) { - const index = (vallength * fnindex) + valindex; - const value = ua[valindex]; - const fn = ufai[fnindex]; - result[index] = fn(value, valindex); - } - } - return result; - }; -} - -/** - * Given a Predicate or Refinement, apply the predicate or refinement to - * every value in an array, removing (and refining) the elements that - * the predicate or refinement return false for. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * A.array(1, 2, 3, 4, 5, 6), - * A.filter(n => n % 2 === 0), - * ); // [2, 4, 6] - * ``` - * - * @since 2.0.0 - */ -export function filter( - refinement: (a: A, index: number) => a is B, -): (ua: ReadonlyArray) => ReadonlyArray; -export function filter( - predicate: (a: A, index: number) => boolean, -): (ua: ReadonlyArray) => ReadonlyArray; -export function filter( - predicate: (a: A, index: number) => boolean, -): (ua: ReadonlyArray) => ReadonlyArray { - return (ua) => { - let index = -1; - let resultIndex = 0; - const length = ua.length; - const result = []; - - while (++index < length) { - const value = ua[index]; - if (predicate(value, index)) { - result[resultIndex++] = value; - } - } - return result; - }; -} - -/** - * Filter and map over an ReadonlyArray in the same step. This function - * applies the predicate to each value in an array. If the predicate - * returns Some, then the inner I is added to the output array. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import * as O from "./option.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * A.array("Hello", "Big", "World"), - * A.filterMap(s => s.includes("o") ? O.some(s.toUpperCase()) : O.none), - * ); // ["HELLO", "WORLD"] - * ``` - * - * @since 2.0.0 - */ -export function filterMap( - predicate: (a: A, index: number) => Option, -): (ua: ReadonlyArray) => ReadonlyArray { - return (ua) => { - let index = -1; - let resultIndex = 0; - const length = ua.length; - const result = []; - - while (++index < length) { - const value = ua[index]; - const filtered = predicate(value, index); - if (isSome(filtered)) { - result[resultIndex++] = filtered.value; - } - } - return result; - }; -} - -/** - * Partition a ReadonlyArray into two ReadonlyArrays using a predicate or - * refinement to do the sorting. If the predicate or refinement returns true for - * a value, the value is pushed into the first array in a Pair, otherwise it is - * pushed into the second array in a pair. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * A.range(10, 1), // [1, 2, 3, ..., 10] - * A.partition(n => n % 2 === 0), - * ); // Pair<[2, 4, 6, 8, 10], [1, 3, 5, 7, 9]> - * ``` - * - * @since 2.0.0 - */ -export function partition( - refinement: (a: A, index: number) => a is B, -): (ua: ReadonlyArray) => Pair, ReadonlyArray>; -export function partition( - predicate: (a: A, index: number) => boolean, -): (ua: ReadonlyArray) => Pair, ReadonlyArray>; -export function partition( - refinement: (a: A, index: number) => boolean, -): (ua: ReadonlyArray) => Pair, ReadonlyArray> { - return (ua) => { - const first: Array = []; - const second: Array = []; - const length = ua.length; - let index = -1; - - while (++index < length) { - const value = ua[index]; - if (refinement(value, index)) { - first.push(value); - } else { - second.push(value); - } - } - return pair(first, second); - }; -} - -/** - * Partition and map over a ReadonlyArray in the same loop. Given a predicate - * A => Either, this function passes each element in an array into the - * predicate. If the predicate returns Right then the inner I is pushed into - * the first array in a pair. If the predicate returns Left then the inner J - * is pushed into the second array in a pair. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import * as E from "./either.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * A.range(10, 1), // [1, 2, 3, ..., 10] - * A.partitionMap(n => n % 2 === 0 ? E.right(n * 100) : E.left(n / 10)), - * ); // Pair<[200, 400, 600, 800, 1000], [0.1, 0.3, 0.5, 0.7, 0.9]> - * ``` - * - * @since 2.0.0 - */ -export function partitionMap( - predicate: (a: A, index: number) => Either, -): (ua: ReadonlyArray) => Pair, ReadonlyArray> { - return (ua) => { - const first: Array = []; - const second: Array = []; - const length = ua.length; - let index = -1; - - while (++index < length) { - const value = ua[index]; - const filtered = predicate(value, index); - if (isRight(filtered)) { - first.push(filtered.right); - } else { - second.push(filtered.left); - } - } - return pair(first, second); - }; -} - -/** - * Traverse a ReadonlyArray using an Applicable over V and a mapping - * function A => V. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe, identity } from "./fn.ts"; - * - * const traverse = A.traverse(A.ApplicableArray); - * - * const result = pipe( - * [[1, 2], [3, 4]], - * traverse(identity), - * ); // [[1, 3], [1, 4], [2, 3], [2, 4]] - * ``` - * - * @since 2.0.0 - */ -export function traverse( - A: Applicable, -): ( - favi: (a: A, i: number) => $, -) => (ua: ReadonlyArray) => $, J, K], [L], [M]> { - return ( - favi: (a: A, i: number) => $, - ): (ua: ReadonlyArray) => $, J, K], [L], [M]> => { - const pusher = (is: I[]) => (i: I) => [...is, i]; - return reduce( - (vis, a: A, index) => - pipe( - vis, - A.map(pusher), - A.apply(favi(a, index)), - ), - A.wrap([] as I[]), - ); - }; -} - -// deno-lint-ignore no-explicit-any -type ANY_ARR = any[]; - -/** - * The Sequence inverts a tuple of substitutions over V into V containing a - * tuple of inferred values of the substitution. - * - * ie. - * [Option, Option] - * becomes - * Option<[number, string]> - * - * or - * - * [Either Either] - * becomes - * Either - */ -// deno-fmt-ignore -type Sequence[]> = $ ? A : never; }, - { [K in keyof R]: R[K] extends $ ? B : never; }[number], - { [K in keyof R]: R[K] extends $ ? C : never; }[number], -], [ - Intersect<{ [K in keyof R]: R[K] extends $ ? D : never; }[number]>, -], [ - Intersect<{ [K in keyof R]: R[K] extends $ ? E : never; }[number]>, -] ->; - -/** - * Sequence over an array of type V, inverting the relationship between V and - * ReadonlyArray. This function also keeps the indexed types of in each V at - * covariant position 0. In other words sequence over [Option, - * Option] becomes Option<[number, string]>. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import * as O from "./option.ts"; - * - * const sequence = A.sequence(O.ApplicableOption); - * - * const result1 = sequence(O.some(1), O.some("Hello")); // Some([1, "Hello"]) - * const result2 = sequence(O.none, O.some("Uh Oh")); // None - * ``` - * - * @since 2.0.0 - */ -export function sequence( - A: Applicable, -): []>( - ...ua: VS -) => Sequence { - // deno-lint-ignore no-explicit-any - const sequence = traverse(A)(identity as any); - return []>(...vs: VS): Sequence => - sequence(vs) as Sequence; -} - -/** - * Create a new array by appending an item to the end of an existing array. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * [1, 2, 3], - * A.append(4), - * ); // [1, 2, 3, 4] - * ``` - * - * @since 2.0.0 - */ -export function append( - last: A, -): (ua: ReadonlyArray) => ReadonlyArray { - return (ma) => [...ma, last]; -} - -/** - * Create a new array by prepending an item to the head of an existing array. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * [1, 2, 3], - * A.prepend(4), - * ); // [4, 1, 2, 3] - * ``` - * - * @since 2.0.0 - */ -export function prepend( - head: A, -): (ua: ReadonlyArray) => ReadonlyArray { - return (ma) => [head, ...ma]; -} - -/** - * Create a new array by inserting a value into an array at an index. If the - * index is out of range of the existing array then no change is made. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const insert = A.insert(100); // Insert the value 100 - * const arr = [1, 2, 3]; - * - * const result1 = pipe(arr, insert(0)); // [100, 1, 2, 3] - * const result2 = pipe(arr, insert(1)); // [1, 100, 2, 3] - * const result3 = pipe(arr, insert(4)); // [1, 2, 3, 100] - * const result4 = pipe(arr, insert(4)); // [1, 2, 3] - * ``` - * - * @since 2.0.0 - */ -export function insert(value: A) { - return (index: number) => (arr: ReadonlyArray): ReadonlyArray => - index < 0 || index > arr.length ? arr : _unsafeInsertAt(index, value, arr); -} - -/** - * Create a new array by inserting a value into an array at an index. If the - * index is out of range of the existing array then no change is made. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const insertAt = A.insertAt(0); // Insert at index 0 - * const arr = [1, 2, 3]; - * - * const result1 = pipe(arr, insertAt(0)); // [0, 1, 2, 3] - * const result2 = pipe(arr, insertAt(1)); // [1, 1, 2, 3] - * const result3 = pipe( - * arr, - * A.insertAt(100)(100), - * ); // [1, 2, 3] - * ``` - * - * @since 2.0.0 - */ -export function insertAt(index: number) { - return (value: A) => (arr: ReadonlyArray): ReadonlyArray => - index < 0 || index > arr.length ? arr : _unsafeInsertAt(index, value, arr); -} - -/** - * Create a new array by replacing a value of an array at an index. If the - * index is out of range of the existing array then no change is made. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const update = A.update(100); // Update the value 100 - * const arr = [1, 2, 3]; - * - * const result1 = pipe(arr, update(0)); // [100, 2, 3] - * const result2 = pipe(arr, update(1)); // [1, 100, 3] - * const result3 = pipe(arr, update(4)); // [1, 2, 3] - * ``` - * - * @since 2.0.0 - */ -export function update(value: A) { - return (index: number) => (arr: ReadonlyArray): ReadonlyArray => - isOutOfBounds(index, arr) ? arr : _unsafeUpdateAt(index, value, arr); -} - -/** - * Create a new array by replacing a value of an array at an index. If the - * index is out of range of the existing array then no change is made. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const updateAt = A.updateAt(0); // Update at index 0 - * const arr = [1, 2, 3]; - * - * const result1 = pipe(arr, updateAt(100)); // [100, 2, 3] - * const result2 = pipe(arr, updateAt(200)); // [200, 2, 3] - * const result3 = pipe(arr, A.updateAt(100)(100)); // [1, 2, 3] - * ``` - * - * @since 2.0.0 - */ -export function updateAt(index: number) { - return (value: A) => (arr: ReadonlyArray): ReadonlyArray => - isOutOfBounds(index, arr) ? arr : _unsafeUpdateAt(index, value, arr); -} - -/** - * Create a new array by modifying a value of an array at an index. If the - * index is out of range of the existing array then no change is made. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const modify = A.modify((n: number) => n + 1); // Increment the value - * const arr = [1, 2, 3]; - * - * const result1 = pipe(arr, modify(0)); // [2, 2, 3] - * const result2 = pipe(arr, modify(1)); // [1, 3, 3] - * const result3 = pipe(arr, modify(4)); // [1, 2, 3] - * ``` - * - * @since 2.0.0 - */ -export function modify(modifyFn: (a: A) => A) { - return (index: number) => (arr: ReadonlyArray): ReadonlyArray => - isOutOfBounds(index, arr) - ? arr - : _unsafeUpdateAt(index, modifyFn(arr[index]), arr); -} - -/** - * Create a new array by modifying a value of an array at an index. If the - * index is out of range of the existing array then no change is made. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const inc = (n: number) => n + 1 - * const modifyAt = A.modifyAt(0); // Modify value at - * const arr = [1, 2, 3]; - * - * const result1 = pipe(arr, modifyAt(inc)); // [2, 2, 3] - * const result2 = pipe(arr, A.modifyAt(100)(inc)); // [1, 2, 3] - * ``` - * - * @since 2.0.0 - */ -export function modifyAt(index: number) { - return (modifyFn: (a: A) => A) => - (arr: ReadonlyArray): ReadonlyArray => - isOutOfBounds(index, arr) - ? arr - : _unsafeUpdateAt(index, modifyFn(arr[index]), arr); -} - -/** - * Lookup the value in an array at the given index. If the index is out of - * bounds this function returns none. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const result1 = pipe( - * [1, 2, 3], - * A.lookup(0), - * ); // Some(1) - * const result2 = pipe( - * [1, 2, 3], - * A.lookup(100), - * ); // None - * ``` - * - * @since 2.0.0 - */ -export function lookup(index: number) { - return (as: ReadonlyArray): Option => - isOutOfBounds(index, as) ? none : some(as[index]); -} - -/** - * Delete the value in an array at the given index. If the index is out of - * bounds then no change is made. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const result1 = pipe([1, 2, 3], A.deleteAt(0)); // [2, 3] - * const result2 = pipe([1, 2, 3], A.deleteAt(100)); // [1, 2, 3] - * ``` - * - * @since 2.0.0 - */ -export function deleteAt(index: number) { - return (arr: ReadonlyArray): ReadonlyArray => - isOutOfBounds(index, arr) ? arr : _unsafeDeleteAt(index, arr); -} - -/** - * Returns a new array conuaining elements of `as` sorted in ascending order - * according to the sort order defined by `O`. - * - * @example - * import { ordNumber } from "./sortable.ts"; - * import { sort } from './array.ts' - * - * sort(ordNumber)([3, 1, 2]) - * // [1, 2, 3] - * - * @category combinators - */ -export function sort( - O: Sortable, -): (as: ReadonlyArray) => ReadonlyArray { - return (as) => as.slice().sort(O.sort); -} - -/** - * Given an Sortable over A, create a binary search function for a sorted - * ReadonlyArray that returns the array index that the new value should - * be inserted at in order to maintain a sorted array. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { SortableNumber } from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const search = A.binarySearch(SortableNumber); - * const arr = A.range(100, 1); // [1, 2, ..., 100] - * - * const index1 = search(30.5, arr); // Index 29 - * const index2 = search(10000, arr); // Index 100 - * ``` - * - * @since 2.0.0 - */ -export function binarySearch( - { sort }: Sortable, -): (value: A, sorted: ReadonlyArray) => number { - return (value, sorted) => { - let low = 0; - let high = sorted.length; - let middle, cursor, ordering; - - while (low < high) { - middle = Math.floor((low + high) / 2); - cursor = sorted[middle]; - ordering = sort(value, cursor); - - if (ordering === 0) { - return middle; - } else if (ordering === -1) { - high = middle; - } else { - low = middle + 1; - } - } - return high; - }; -} - -/** - * Given an Sortable construct a curried insert function that inserts values into - * a new array in a sorted fashion. Internally this uses binarySearch to find - * the insertion index of any inserted items. Since the returned function will - * always insert this function will always return a new array. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import * as O from "./sortable.ts"; - * import { SortableNumber } from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * type Person = { name: string, age: number }; - * function person(name: string, age: number) { - * return { name, age }; - * } - * - * const SortablePerson = pipe( - * SortableNumber, - * O.premap((p: Person) => p.age), - * ); - * const insert = A.orderedInsert(SortablePerson); - * - * const result = pipe( - * A.init(), - * insert(person("Brandon", 37)), - * insert(person("Emily", 32)), - * insert( - * person("Rufus", 0.7), - * person("Clementine", 0.5) - * ), - * ); - * // [ - * // { name: "Clementine", age: 0.5 }, - * // { name: "Rufus", age: 0.7 }, - * // { name: "Emily", age: 32 }, - * // { name: "Brandon", age: 37 }, - * // ] - * ``` - * - * @since 2.0.0 - */ -export function orderedInsert( - ord: Sortable, -): ( - ...values: NonEmptyArray -) => (arr: ReadonlyArray) => ReadonlyArray { - const search = binarySearch(ord); - return (...values) => (arr) => { - const out = arr.slice(); - const length = values.length; - let index = -1; - while (++index < length) { - const value = values[index]; - const insertAt = search(value, out); - out.splice(insertAt, 0, value); - } - return out; - }; -} - -/** - * Collect the values of many arrays into an array of tuples. Each tuple - * contains an element from each of the input arrays at a shared index. The number of - * tuples in the returned array will match the minimum length of the input - * arrays. ie. If any input array is default, then the output array will be default. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * - * const result1 = A.zip([1, 2, 3], ["a", "b", "c"]); - * // [[1, "a"], [2, "b"], [3, "c"]] - * const result2 = A.zip([], A.range(100)); // [] - * ``` - * - * @since 2.0.0 - */ -export function zip>( - ...arrays: A -): ReadonlyArray<{ [K in keyof A]: TypeOf }> { - switch (arrays.length) { - case 0: - return []; - case 1: - return arrays[0]; - default: { - const length = Math.min(...arrays.map((a) => a.length)); - const output: Array<{ [K in keyof A]: TypeOf }> = new Array(length); - let index = -1; - while (++index < length) { - output[index] = arrays.map((a) => a[index]) as { - [K in keyof A]: TypeOf; - }; - } - return output; - } - } -} - -/** - * Given an instance Comparable create a Comparable>. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { ComparableNumber } from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const { compare } = A.getComparableArray(ComparableNumber); - * - * const result1 = pipe([1, 2, 3], compare([1, 2, 3])); // true - * const result2 = pipe(A.init(), compare([1, 2, 3])); // false - * const result3 = pipe([1, 2], compare([2, 1])); // false - * ``` - * - * @since 2.0.0 - */ -export function getComparableArray( - { compare }: Comparable, -): Comparable> { - return fromCompare((second) => (first) => { - if (first === second) { - return true; - } else if (first.length === second.length) { - return first.every((value, index) => compare(second[index])(value)); - } else { - return false; - } - }); -} - -/** - * Given an instance Sortable create a Sortable>. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { SortableNumber } from "./number.ts"; - * - * const { sort } = A.getSortableArray(SortableNumber); - * - * const result1 = sort([1, 2], [1, 2]); // 0 - * const result2 = sort([1, 2], [1]); // 1 - * const result3 = sort([1, 2, 4], [1, 2, 3]); // -1 - * ``` - * - * @since 2.0.0 - */ -export function getSortableArray( - O: Sortable, -): Sortable> { - return fromSort((first, second) => { - const length = Math.min(first.length, second.length); - let index = -1; - // Compare all elements that exist in both arrays - while (++index < length) { - const ordering = O.sort(first[index], second[index]); - if (ordering !== 0) return ordering; - } - // If all compared elements are equal, longest array is greater - return sign(first.length - second.length); - }); -} - -/** - * Create an instance of Showable for ReadonlyArray given an instance of Showable for - * A. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { ShowableNumber } from "./number.ts"; - * - * const { show } = A.getShowableArray(ShowableNumber); - * - * const result = show([1, 2, 3]); // "ReadonlyArray[1, 2, 3]" - * ``` - * - * @since 2.0.0 - */ -export function getShowableArray( - { show }: Showable, -): Showable> { - return ({ - show: (ua) => `ReadonlyArray[${ua.map(show).join(", ")}]`, - }); -} - -/** - * Create an instance of Initializable> given a type A. This instance - * uses array compose and default as the instance methods for the Initializable. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const { init, combine } = A.getInitializableArray(); - * - * const result = pipe( - * init(), // [] - * combine([1, 2, 3]), - * ); // [1, 2, 3] - * ``` - * - * @since 2.0.0 - */ -export function getInitializableArray(): Initializable< - ReadonlyArray -> { - return ({ init, combine }); -} - -/** - * @since 2.0.0 - */ -export const ApplicableArray: Applicable = { - apply, - map, - wrap, -}; - -/** - * @since 2.0.0 - */ -export const FilterableArray: Filterable = { - filter, - filterMap, - partition, - partitionMap, -}; - -/** - * @since 2.0.0 - */ -export const FlatmappableArray: Flatmappable = { - wrap, - map, - apply, - flatmap, -}; - -/** - * @since 2.0.0 - */ -export const MappableArray: Mappable = { map }; - -/** - * @since 2.0.0 - */ -export const ReducibleArray: Reducible = { reduce }; - -/** - * @since 2.0.0 - */ -export const TraversableArray: Traversable = { - map, - reduce, - traverse, -}; - -/** - * @since 2.0.0 - */ -export const WrappableArray: Wrappable = { wrap }; diff --git a/vendor/deno.land/x/fun@v2.0.0-alpha.15/bimappable.ts b/vendor/deno.land/x/fun@v2.0.0-alpha.15/bimappable.ts deleted file mode 100644 index d2e9661..0000000 --- a/vendor/deno.land/x/fun@v2.0.0-alpha.15/bimappable.ts +++ /dev/null @@ -1,38 +0,0 @@ -/** - * Bimappable is a structure that allows a function to be applied inside of the - * associated concrete structure but is specific to a second held value of that - * structure.. - * - * @module Bimappable - * @since 2.0.0 - */ - -import type { $, Hold, Kind } from "./kind.ts"; -import type { Mappable } from "./mappable.ts"; - -import { pipe } from "./fn.ts"; - -/** - * The Bimappable interface. Bimapple includes the methods map and mapSecond. - */ -export interface Bimappable extends Mappable, Hold { - readonly mapSecond: ( - fbj: (value: B) => J, - ) => ( - ta: $, - ) => $; -} - -/** - * @since 2.0.0 - */ -export function bimap( - { map, mapSecond }: Bimappable, -): ( - fai: (a: A) => I, - fbj: (b: B) => J, -) => ( - ua: $, -) => $ { - return (fai, fbj) => (ua) => pipe(ua, map(fai), mapSecond(fbj)); -} diff --git a/vendor/deno.land/x/fun@v2.0.0-alpha.15/combinable.ts b/vendor/deno.land/x/fun@v2.0.0-alpha.15/combinable.ts deleted file mode 100644 index 72368e9..0000000 --- a/vendor/deno.land/x/fun@v2.0.0-alpha.15/combinable.ts +++ /dev/null @@ -1,387 +0,0 @@ -/** - * Combinable is a structure that can be combine two fixed values. Some examples - * of Combinable are Array.combine, addition for numbers, or merging of two - * structs by combining their internal values. - * - * @module Combinable - * @since 2.0.0 - */ - -import type { Sortable } from "./sortable.ts"; -import type { ReadonlyRecord } from "./record.ts"; -import type { NonEmptyArray } from "./array.ts"; - -import * as S from "./sortable.ts"; -import { pipe, uncurry2 } from "./fn.ts"; - -/** - * The Combine function in a Combinable. - * - * @since 2.0.0 - */ -export type Combine = (second: A) => (first: A) => A; - -/** - * Combinable is a structure that allows the combination of two concrete values - * of A into a single value of A. In other functional libraries this is called a - * Semigroup. - * - * @since 2.0.0 - */ -export interface Combinable { - readonly combine: Combine; -} - -/** - * A type for Combinable over any, useful as an extension target for - * functions that take any Combinable and do not need to - * unwrap the type. - * - * @since 2.0.0 - */ -// deno-lint-ignore no-explicit-any -export type AnyCombinable = Combinable; - -/** - * A type level unwrapper, used to pull the inner type from a Combinable. - * - * @since 2.0.0 - */ -export type TypeOf = T extends Combinable ? A : never; - -/** - * Create a Combinable from a Combine and an init function. - * - * @since 2.0.0 - */ -export function fromCombine( - combine: Combine, -): Combinable { - return { combine }; -} - -/** - * Get an Combinable over A that always returns the first - * parameter supplied to combine (confusingly this is - * actually the last parameter since combine is in curried - * form). - * - * @example - * ```ts - * import { first, getCombineAll } from "./combinable.ts"; - * import { pipe } from "./fn.ts"; - * - * type Person = { name: string, age: number }; - * const FirstPerson = first(); - * const getFirstPerson = getCombineAll(FirstPerson); - * - * const octavia: Person = { name: "Octavia", age: 42 }; - * const kimbra: Person = { name: "Kimbra", age: 32 }; - * const brandon: Person = { name: "Brandon", age: 37 }; - * - * const result = getFirstPerson(octavia, kimbra, brandon); // octavia - * ``` - * - * @since 2.0.0 - */ -export function first(): Combinable { - return fromCombine(() => (first) => first); -} - -/** - * Get an Combinable over A that always returns the last - * parameter supplied to combine (confusingly this is - * actually the first parameter since combine is in curried - * form). - * - * @example - * ```ts - * import { last } from "./combinable.ts"; - * import { pipe } from "./fn.ts"; - * - * type Person = { name: string, age: number }; - * - * const CombinablePerson = last(); - * - * const octavia: Person = { name: "Octavia", age: 42 }; - * const kimbra: Person = { name: "Kimbra", age: 32 }; - * const brandon: Person = { name: "Brandon", age: 37 }; - * - * const lastPerson = pipe( - * octavia, - * CombinablePerson.combine(kimbra), - * CombinablePerson.combine(brandon), - * ); // lastPerson === brandon - * ``` - * - * @since 2.0.0 - */ -export function last(): Combinable { - return fromCombine((second) => () => second); -} - -/** - * Get the "Dual" of an existing Combinable. This effectively reverses - * the order of the input combinable's application. For example, the - * dual of the "first" combinable is the "last" combinable. The dual - * of (boolean, ||) is itself. - * - * @example - * ```ts - * import * as SG from "./combinable.ts"; - * import { pipe } from "./fn.ts"; - * - * type Person = { name: string, age: number }; - * - * const last = SG.last(); - * const dual = SG.dual(last); - * - * const octavia: Person = { name: "Octavia", age: 42 }; - * const kimbra: Person = { name: "Kimbra", age: 32 }; - * const brandon: Person = { name: "Brandon", age: 37 }; - * - * const dualPerson = pipe( - * octavia, - * dual.combine(kimbra), - * dual.combine(brandon), - * ); // dualPerson === octavia - * ``` - * - * @since 2.0.0 - */ -export function dual({ combine }: Combinable): Combinable { - return fromCombine((second) => (first) => combine(first)(second)); -} - -/** - * Get a Combinable from a tuple of combinables. The resulting - * combinable will operate over tuples applying the input - * combinables applying each based on its position, - * - * @example - * ```ts - * import * as SG from "./combinable.ts"; - * import { pipe } from "./fn.ts"; - * - * type Person = { name: string, age: number }; - * - * const first = SG.first(); - * const last = SG.last(); - * const { combine } = SG.tuple(first, last); - * - * const octavia: Person = { name: "Octavia", age: 42 }; - * const kimbra: Person = { name: "Kimbra", age: 32 }; - * const brandon: Person = { name: "Brandon", age: 37 }; - * - * const tuplePeople = pipe( - * [octavia, octavia], - * combine([kimbra, kimbra]), - * combine([brandon, brandon]), - * ); // tuplePeople === [octavia, brandon] - * ``` - * - * @since 2.0.0 - */ -export function tuple( - ...combinables: T -): Combinable<{ readonly [K in keyof T]: TypeOf }> { - type Return = { [K in keyof T]: TypeOf }; - return fromCombine((second) => (first): Return => - combinables.map(({ combine }, index) => - combine(second[index])(first[index]) - ) as Return - ); -} - -/** - * Get a Combinable from a struct of combinables. The resulting - * combinable will operate over similar shaped structs applying - * the input combinables applying each based on its position, - * - * @example - * ```ts - * import type { Combinable } from "./combinable.ts"; - * import * as SG from "./combinable.ts"; - * import * as N from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * type Person = { name: string, age: number }; - * const person = (name: string, age: number): Person => ({ name, age }); - * - * // Chooses the longest string, defaulting to left when equal - * const longestString: Combinable = { - * combine: (right) => (left) => right.length > left.length ? right : left, - * }; - * - * // This combinable will merge two people, choosing the longest - * // name and the oldest age - * const { combine } = SG.struct({ - * name: longestString, - * age: N.InitializableNumberMax, - * }) - * - * const brandon = pipe( - * person("Brandon Blaylock", 12), - * combine(person("Bdon", 17)), - * combine(person("Brandon", 30)) - * ); // brandon === { name: "Brandon Blaylock", age: 30 } - * ``` - * - * @since 2.0.0 - */ -// deno-lint-ignore no-explicit-any -export function struct>( - combinables: { [K in keyof O]: Combinable }, -): Combinable { - type Entries = [keyof O, typeof combinables[keyof O]][]; - return fromCombine((second) => (first) => { - const r = {} as Record; - for (const [key, { combine }] of Object.entries(combinables) as Entries) { - r[key] = combine(second[key])(first[key]); - } - return r as { [K in keyof O]: O[K] }; - }); -} - -/** - * Create a combinable fron an instance of Sortable that returns - * that maximum for the type being ordered. This Combinable - * functions identically to max from Sortable. - * - * @example - * ```ts - * import * as SG from "./combinable.ts"; - * import * as N from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const { combine } = SG.max(N.SortableNumber); - * - * const biggest = pipe( - * 0, - * combine(-1), - * combine(10), - * combine(1000), - * combine(5), - * combine(9001) - * ); // biggest is over 9000 - * ``` - * - * @since 2.0.0 - */ -export function max(sortable: Sortable): Combinable { - return fromCombine(S.max(sortable)); -} - -/** - * Create a combinable fron an instance of Sortable that returns - * that minimum for the type being ordered. This Combinable - * functions identically to min from Sortable. - * - * @example - * ```ts - * import * as SG from "./combinable.ts"; - * import * as N from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const { combine } = SG.min(N.SortableNumber); - * - * const smallest = pipe( - * 0, - * combine(-1), - * combine(10), - * combine(1000), - * combine(5), - * combine(9001) - * ); // smallest is -1 - * ``` - * - * @since 2.0.0 - */ -export function min(sortable: Sortable): Combinable { - return fromCombine(S.min(sortable)); -} - -/** - * Create a combinable that works like Array.join, - * inserting middle between every two values - * that are combineenated. This can have some interesting - * results. - * - * @example - * ```ts - * import * as SG from "./combinable.ts"; - * import * as S from "./string.ts"; - * import { pipe } from "./fn.ts"; - * - * const { combine: toList } = pipe( - * S.InitializableString, - * SG.intercalcate(", "), - * ); - * - * const list = pipe( - * "apples", - * toList("oranges"), - * toList("and bananas"), - * ); // list === "apples, oranges, and bananas" - * ``` - * - * @since 2.0.0 - */ -export function intercalcate(middle: A) { - return ({ combine }: Combinable): Combinable => - fromCombine((second) => (first) => - pipe(first, combine(middle), combine(second)) - ); -} - -/** - * Create a combinable that always returns the - * given value, ignoring anything that it is - * combineenated with. - * - * @example - * ```ts - * import * as SG from "./combinable.ts"; - * import { pipe } from "./fn.ts"; - * - * const { combine } = SG.constant("cake"); - * - * const whatDoWeWant = pipe( - * "apples", - * combine("oranges"), - * combine("bananas"), - * combine("pie"), - * combine("money"), - * ); // whatDoWeWant === "cake" - * ``` - * - * @since 2.0.0 - */ -export function constant(a: A): Combinable { - return fromCombine(() => () => a); -} - -/** - * Given a Combinable, create a function that will - * iterate through an array of values and combine - * them. This is not much more than Array.reduce(combine). - * - * @example - * ```ts - * import * as C from "./combinable.ts"; - * import * as N from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const sumAll = C.getCombineAll(N.InitializableNumberSum); - * - * const result = sumAll(1, 30, 80, 1000, 52, 42); // 1205 - * ``` - * - * @since 2.0.0 - */ -export function getCombineAll( - { combine }: Combinable, -): (...as: NonEmptyArray) => A { - const _combine = uncurry2(combine); - return (...as) => as.reduce(_combine); -} diff --git a/vendor/deno.land/x/fun@v2.0.0-alpha.15/comparable.ts b/vendor/deno.land/x/fun@v2.0.0-alpha.15/comparable.ts deleted file mode 100644 index e432fb6..0000000 --- a/vendor/deno.land/x/fun@v2.0.0-alpha.15/comparable.ts +++ /dev/null @@ -1,655 +0,0 @@ -/** - * Comparable is a structure that has an idea of comparability. Comparability - * means that two of the same type of object can be compared such that the - * condition of comparison can be true or false. The canonical comparison is - * equality. - * - * @module Comparable - * @since 2.0.0 - */ - -import type { Hold, In, Kind, Out, Spread } from "./kind.ts"; -import type { Premappable } from "./premappable.ts"; -import type { NonEmptyArray } from "./array.ts"; -import type { ReadonlyRecord } from "./record.ts"; -import type { Literal, Schemable } from "./schemable.ts"; - -import { handleThrow, identity, memoize, uncurry2 } from "./fn.ts"; -import { isSubrecord } from "./record.ts"; - -/** - * The compare function in a Comparable. - * - * @since 2.0.0 - */ -export type Compare = (second: A) => (first: A) => boolean; - -/** - * @since 2.0.0 - */ -export type TypeOf = U extends Comparable ? A : never; - -/** - * A Comparable is an algebra with a notion of equality. Specifically, - * a Comparable for a type T has an equal method that determines if the - * two objects are the same. Comparables can be combined, like many - * algebraic structures. The combinators for Comparable in fun can be found - * in [comparable.ts](./comparable.ts). - * - * An instance of a Comparable must obey the following laws: - * - * 1. Reflexivity: compare(a, a) === true - * 2. Symmetry: compare(a, b) === compare(b, a) - * 3. Transitivity: if compare(a, b) and compare(b, c), then compare(a, c) - * - * @since 2.0.0 - */ -export interface Comparable extends Hold { - readonly compare: Compare; -} - -/** - * Specifies Comparable as a Higher Kinded Type, with - * covariant parameter A corresponding to the 0th - * index of any Substitutions. - * - * @since 2.0.0 - */ -export interface KindComparable extends Kind { - readonly kind: Comparable>; -} - -/** - * Specifies Comparable as a Higher Kinded Type, with - * contravariant parameter D corresponding to the 0th - * index of any Substitutions. - * - * @since 2.0.0 - */ -export interface KindContraComparable extends Kind { - readonly kind: Comparable>; -} - -/** - * Create a Comparable from a Compare function. - * - * @example - * ```ts - * import { fromCompare } from "./comparable.ts"; - * import { pipe } from "./fn.ts"; - * - * const { compare } = fromCompare( - * (second) => (first) => first === second - * ); - * - * const result = compare(1)(1); // true - * ``` - * - * @since 2.0.0 - */ -export function fromCompare( - compare: Compare = (second) => (first) => first === second, -): Comparable { - return { compare }; -} - -/** - * A single instance of Camparable that uses strict equality for comparison. - */ -// deno-lint-ignore no-explicit-any -const STRICT_EQUALITY: Comparable = fromCompare(); - -/** - * Create a Comparable that casts the inner type of another Comparable to - * Readonly. - * - * @example - * ```ts - * import { readonly, fromCompare } from "./comparable.ts"; - * - * // This has type Comparable> - * const ComparableMutableArray = fromCompare>( - * (second) => (first) => first.length === second.length - * && first.every((value, index) => value === second[index]) - * ); - * - * // This has type Comparable>> - * const ComparableReadonlyArray = readonly(ComparableMutableArray); - * ``` - * - * @since 2.0.0 - */ -export function readonly( - comparable: Comparable, -): Comparable> { - return comparable; -} - -/** - * A Comparable that can compare any unknown values (and thus can - * compare any values). Underneath it uses strict equality - * for the comparison. - * - * @example - * ```ts - * import { unknown } from "./comparable.ts"; - * - * const result1 = unknown.compare(1)("Hello"); // false - * const result2 = unknown.compare(1)(1); // true - * ``` - * - * @since 2.0.0 - */ -export const unknown: Comparable = STRICT_EQUALITY; - -/** - * A Comparable that compares strings using strict equality. - * - * @example - * ```ts - * import { string } from "./comparable.ts"; - * - * const result1 = string.compare("World")("Hello"); // false - * const result2 = string.compare("")(""); // true - * ``` - * - * @since 2.0.0 - */ -export const string: Comparable = STRICT_EQUALITY; - -/** - * A Comparable that compares number using strict equality. - * - * @example - * ```ts - * import { number } from "./comparable.ts"; - * - * const result1 = number.compare(1)(2); // false - * const result2 = number.compare(1)(1); // true - * ``` - * - * @since 2.0.0 - */ -export const number: Comparable = STRICT_EQUALITY; - -/** - * A Comparable that compares booleans using strict equality. - * - * @example - * ```ts - * import { boolean } from "./comparable.ts"; - * - * const result1 = boolean.compare(true)(false); // false - * const result2 = boolean.compare(true)(true); // true - * ``` - * - * @since 2.0.0 - */ -export const boolean: Comparable = STRICT_EQUALITY; - -/** - * Creates a Comparable that compares a union of literals - * using strict equality. - * - * @example - * ```ts - * import { literal } from "./comparable.ts"; - * - * const { compare } = literal(1, 2, "Three"); - * - * const result1 = compare(1)("Three"); // false - * const result2 = compare("Three")("Three"); // true - * ``` - * - * @since 2.0.0 - */ -export function literal>( - ..._: A -): Comparable { - return STRICT_EQUALITY; -} - -/** - * Creates a derivative Comparable that can also compare null - * values in addition to the source eq. - * - * @example - * ```ts - * import { nullable, number } from "./comparable.ts"; - * - * const { compare } = nullable(number); - * - * const result1 = compare(1)(null); // false - * const result2 = compare(null)(null); // true - * ``` - * - * @since 2.0.0 - */ -export function nullable({ compare }: Comparable): Comparable { - return fromCompare((second) => (first) => - first === null || second === null - ? first === second - : compare(second)(first) - ); -} - -/** - * Creates a derivative Comparable that can also compare undefined - * values in addition to the source eq. - * - * @example - * ```ts - * import { undefinable, number } from "./comparable.ts"; - * - * const { compare } = undefinable(number); - * - * const result1 = compare(1)(undefined); // false - * const result2 = compare(undefined)(undefined); // true - * ``` - * - * @since 2.0.0 - */ -export function undefinable( - { compare }: Comparable, -): Comparable { - return fromCompare((second) => (first) => - first === undefined || second === undefined - ? first === second - : compare(second)(first) - ); -} - -/** - * Creates a Comparable that compares readonly records with items - * that have the type compared in the supplied eq. - * - * @example - * ```ts - * import { record, number } from "./comparable.ts"; - * - * const { compare } = record(number); - * - * const result1 = compare({ one: 1 })({ one: 2 }); // false - * const result2 = compare({ one: 1 })({ one: 1 }); // true - * ``` - * - * @since 2.0.0 - */ -export function record(eq: Comparable): Comparable> { - const isSub = isSubrecord(eq); - return fromCompare((second) => (first) => - isSub(second)(first) && isSub(first)(second) - ); -} - -/** - * Creates a Comparable that compares readonly array with items - * that have the type compared in the supplied eq. - * - * @example - * ```ts - * import { array, number } from "./comparable.ts"; - * - * const { compare } = array(number); - * - * const result1 = compare([1, 2])([1, 2, 3]); // false - * const result2 = compare([1, 2])([1, 2]); // true - * ``` - * - * @since 2.0.0 - */ -export function array( - { compare }: Comparable, -): Comparable> { - return fromCompare((second) => (first) => - Array.isArray(first) && Array.isArray(second) && - first.length === second.length && - first.every((value, index) => compare(second[index])(value)) - ); -} - -/** - * Creates a eq that compares, index for index, tuples according - * to the order and eqs passed into tuple. - * - * @example - * ```ts - * import { tuple, number, string } from "./comparable.ts"; - * - * const { compare } = tuple(number, string); - * - * const result1 = compare([1, "Hello"])([1, "Goodbye"]); // false - * const result2 = compare([1, ""])([1, ""]); // true - * ``` - * - * @since 2.0.0 - */ -// deno-lint-ignore no-explicit-any -export function tuple>>( - ...comparables: T -): Comparable< - { [K in keyof T]: T[K] extends Comparable ? A : never } -> { - return fromCompare((second) => (first) => - Array.isArray(first) && Array.isArray(second) && - first.length === second.length && - comparables.every(({ compare }, index) => - compare(second[index])(first[index]) - ) - ); -} - -/** - * Create a eq that compares, key for key, structs according - * to the structure of the eqs passed into struct. - * - * @example - * ```ts - * import { struct, number, string } from "./comparable.ts"; - * - * const { compare } = struct({ name: string, age: number }); - * - * const brandon = { name: "Brandon", age: 37 }; - * const emily = { name: "Emily", age: 32 }; - * - * const result1 = compare(brandon)(emily); // false - * const result2 = compare(brandon)(brandon); // true - * ``` - * - * @since 2.0.0 - */ -export function struct( - comparables: { readonly [K in keyof A]: Comparable }, -): Comparable<{ readonly [K in keyof A]: A[K] }> { - const _comparables = Object.entries(comparables) as [ - keyof A, - Comparable, - ][]; - return fromCompare((second) => (first) => - _comparables.every(([key, { compare }]) => compare(second[key])(first[key])) - ); -} - -/** - * Create a eq that compares, key for key, structs according - * to the structure of the eqs passed into struct. It allows - * the values in the struct to be optional or null. - * - * @example - * ```ts - * import { struct, number, string } from "./comparable.ts"; - * - * const { compare } = struct({ name: string, age: number }); - * - * const brandon = { name: "Brandon", age: 37 }; - * const emily = { name: "Emily", age: 32 }; - * - * const result1 = compare(brandon)(emily); // false - * const result2 = compare(brandon)(brandon); // true - * ``` - * - * @since 2.0.0 - */ -export function partial( - comparables: { readonly [K in keyof A]: Comparable }, -): Comparable<{ readonly [K in keyof A]?: A[K] }> { - const _comparables = Object.entries(comparables) as [ - keyof A, - Comparable, - ][]; - return fromCompare((second) => (first) => - _comparables.every(([key, { compare }]) => { - if (key in first && key in second) { - return compare(second[key] as A[keyof A])(first[key] as A[keyof A]); - } - return first[key] === second[key]; - }) - ); -} - -/** - * Create a eq from two other eqs. The resultant eq checks - * that any two values are equal according to both supplied eqs. - * - * @example - * ```ts - * import { intersect, struct, partial, string } from "./comparable.ts"; - * import { pipe } from "./fn.ts"; - * - * const { compare } = pipe( - * struct({ firstName: string }), - * intersect(partial({ lastName: string })) - * ); - * - * const batman = { firstName: "Batman" }; - * const grace = { firstName: "Grace", lastName: "Hopper" }; - * - * const result1 = compare(batman)(grace); // false - * const result2 = compare(grace)(grace); // true - * ``` - * - * @since 2.0.0 - */ -export function intersect( - second: Comparable, -): (first: Comparable) => Comparable> { - return (first: Comparable): Comparable> => - fromCompare((snd: A & I) => (fst: A & I) => - first.compare(snd)(fst) && second.compare(snd)(fst) - ) as Comparable>; -} - -/** - * Create a Comparable from two other Comparables. The resultant Comparable checks - * that any two values are equal according to at least one of the supplied - * eqs. - * - * It should be noted that we cannot differentiate the eq used to - * compare two disparate types like number and number[]. Thus, internally - * union must type cast to any and treat thrown errors as a false - * equivalence. - * - * @example - * ```ts - * import { union, number, string } from "./comparable.ts"; - * import { pipe } from "./fn.ts"; - * - * const { compare } = pipe(number, union(string)); - * - * const result1 = compare(1)("Hello"); // false - * const result2 = compare(1)(1); // true - * ``` - * - * @since 2.0.0 - */ -export function union( - second: Comparable, -): (first: Comparable) => Comparable { - return (first: Comparable) => { - const _first = handleThrow(uncurry2(first.compare), identity, () => false); - const _second = handleThrow( - uncurry2(second.compare), - identity, - () => false, - ); - // deno-lint-ignore no-explicit-any - return fromCompare((snd: any) => (fst: any) => - _first(fst, snd) || _second(fst, snd) - ); - }; -} - -/** - * Create a eq that evaluates lazily. This is useful for equality - * of recursive types (either mutual or otherwise). - * - * @example - * ```ts - * import { lazy, intersect, struct, partial, string, Comparable } from "./comparable.ts"; - * import { pipe } from "./fn.ts"; - * - * type Person = { name: string, child?: Person }; - * - * // Annotating the type is required for recursion - * const person: Comparable = lazy('Person', () => pipe( - * struct({ name: string }), - * intersect(partial({ child: person })) - * )); - * - * const icarus = { name: "Icarus" }; - * const daedalus = { name: "Daedalus", child: icarus }; - * - * const result1 = person.compare(icarus)(daedalus); // false - * const result2 = person.compare(daedalus)(daedalus); // true - * ``` - * - * @since 2.0.0 - */ -export function lazy(_: string, f: () => Comparable): Comparable { - const memo = memoize>(f); - return fromCompare((second) => (first) => memo().compare(second)(first)); -} - -/** - * Create a eq that tests the output of a thunk (IO). This assumes that - * the output of the thunk is always the same, which for true IO is not - * the case. This assumes that the context for the function is undefined, - * which means that it doesn't rely on "this" to execute. - * - * @example - * ```ts - * import { struct, thunk, number } from "./comparable.ts"; - * - * const { compare } = struct({ asNumber: thunk(number) }); - * - * const one = { asNumber: () => 1 }; - * const two = { asNumber: () => 2 }; - * - * const result1 = compare(one)(two); // false - * const result2 = compare(one)(one); // true - * ``` - * - * @since 2.0.0 - */ -export function thunk({ compare }: Comparable): Comparable<() => A> { - return fromCompare((second) => (first) => compare(second())(first())); -} - -/** - * Create a eq from a method on a class or prototypical object. This - * exists because many objects in javascript do now allow you to pass an - * object method around on its own without its parent object. For example, - * if you pass Date.valueOf (type () => number) into another function and - * call it, the call will fail because valueOf does not carry the reference - * of its parent object around. - * - * @example - * ```ts - * import { method, number } from "./comparable.ts"; - * - * // This eq will work for date, but also for any objects that have - * // a valueOf method that returns a number. - * const date = method("valueOf", number); - * - * const now = new Date(); - * const alsoNow = new Date(Date.now()); - * const later = new Date(Date.now() + 60 * 60 * 1000); - * - * const result1 = date.compare(now)(alsoNow); // true - * const result2 = date.compare(now)(later); // false - * ``` - * - * @since 2.0.0 - */ -export function method( - method: M, - { compare }: Comparable, -): Comparable<{ readonly [K in M]: () => A }> { - return fromCompare((second) => (first) => - compare(second[method]())(first[method]()) - ); -} - -/** - * Create a Comparable using a Comparable and a function that takes - * a type L and returns a type D. - * - * @example - * ```ts - * import { premap, number } from "./comparable.ts"; - * import { pipe } from "./fn.ts"; - * - * const dateToNumber = (d: Date): number => d.valueOf(); - * const date = pipe(number, premap(dateToNumber)); - * - * const now = new Date(); - * const alsoNow = new Date(Date.now()); - * const later = new Date(Date.now() + 60 * 60 * 1000); - * - * const result1 = date.compare(now)(alsoNow); // true - * const result2 = date.compare(now)(later); // false - * ``` - * - * Another use for premap with eq is to check for - * equality after normalizing data. In the following we - * can compare strings ignoring case by normalizing to - * lowercase strings. - * - * @example - * ```ts - * import { premap, string } from "./comparable.ts"; - * import { pipe } from "./fn.ts"; - * - * const lowercase = (s: string) => s.toLowerCase(); - * const insensitive = pipe( - * string, // exact string compare - * premap(lowercase), // makes all strings lowercase - * ); - * - * const result1 = insensitive.compare("Hello")("World"); // false - * const result2 = insensitive.compare("hello")("Hello"); // true - * ``` - * - * @since 2.0.0 - */ -export function premap( - fld: (l: L) => D, -): (eq: Comparable) => Comparable { - return ({ compare }) => - fromCompare((second) => (first) => compare(fld(second))(fld(first))); -} - -/** - * The canonical implementation of Premappable for Comparable. - * - * @since 2.0.0 - */ -export const PremappableComparable: Premappable = { - premap, -}; - -/** - * The canonical implementation of Schemable for a Comparable. It contains - * the methods unknown, string, number, boolean, literal, nullable, - * undefinable, record, array, tuple, struct, partial, intersect, - * union, and lazy. - * - * @since 2.0.0 - */ -export const SchemableComparable: Schemable = { - unknown: () => unknown, - string: () => string, - number: () => number, - boolean: () => boolean, - literal, - nullable, - undefinable, - record, - array, - tuple, - struct, - partial, - intersect, - union, - lazy, -}; diff --git a/vendor/deno.land/x/fun@v2.0.0-alpha.15/decoder.ts b/vendor/deno.land/x/fun@v2.0.0-alpha.15/decoder.ts deleted file mode 100644 index 86e2308..0000000 --- a/vendor/deno.land/x/fun@v2.0.0-alpha.15/decoder.ts +++ /dev/null @@ -1,1882 +0,0 @@ -/** - * The Decoder module contains tools for the course parsing of javascript - * objects into well typed structures. In the event that parsing fails a Decoder - * returns a DecodeError data structure which contains detailed information on - * how and where parsing failed. - * - * @todo Revisit array, tuple, record, and struct to have a concept of ...rest - * - * @module Decoder - * - * @since 2.0.0 - */ - -import type { In, Kind, Out, Spread } from "./kind.ts"; -import type { AnyArray, NonEmptyArray } from "./array.ts"; -import type { Applicable } from "./applicable.ts"; -import type { Combinable } from "./combinable.ts"; -import type { Either } from "./either.ts"; -import type { Flatmappable } from "./flatmappable.ts"; -import type { FnEither } from "./fn_either.ts"; -import type { Forest } from "./tree.ts"; -import type { Literal, Schemable } from "./schemable.ts"; -import type { Mappable } from "./mappable.ts"; -import type { Predicate } from "./predicate.ts"; -import type { ReadonlyRecord } from "./record.ts"; -import type { Refinement } from "./refinement.ts"; - -import * as FE from "./fn_either.ts"; -import * as TR from "./tree.ts"; -import * as E from "./either.ts"; -import * as A from "./array.ts"; -import * as R from "./record.ts"; -import * as O from "./option.ts"; -import * as S from "./schemable.ts"; -import * as G from "./refinement.ts"; -import { fromCombine } from "./combinable.ts"; -import { flow, memoize, pipe } from "./fn.ts"; - -/** - * The required tag denotes that a property in a struct or tuple is required. - * This means that the key or index must exist on the struct or tuple. - * - * @since 2.0.0 - */ -export const required = "required" as const; - -/** - * The optional tag denotes that a property in a struct or tuple is optional. - * This means that the key or index may not exist on the struct or tuple. - * - * @since 2.0.0 - */ -export const optional = "optional" as const; - -/** - * The Property type is a type level denotation that specifies whether a key or - * index is required or optional. - * - * @since 2.0.0 - */ -export type Property = typeof required | typeof optional; - -/** - * The Leaf type is the simplest of DecodeErrors. It indicates that some - * concrete value did not match the expected value. The reason field is used to - * indicate the expected value. - * - * @since 2.0.0 - */ -export type Leaf = { - readonly tag: "Leaf"; - readonly value: unknown; - readonly reason: string; -}; - -/** - * The Wrap type is used to give context to an existing DecodeError. This can be - * as simple as wrapping an array decode error to indicate that we first check - * for an array before we check that the array matches a tuple definition. It - * can also be used to constrain or annotate. - * - * @since 2.0.0 - */ -export type Wrap = { - readonly tag: "Wrap"; - readonly context: string; - readonly error: DecodeError; -}; - -/** - * The Key type is used to contextualize an error that occurred at a key in a - * struct. - * - * @since 2.0.0 - */ -export type Key = { - readonly tag: "Key"; - readonly key: string; - readonly property: Property; - readonly error: DecodeError; -}; - -/** - * The Index type is used to contextualize an error that occurred at an index in - * an Array or Tuple. - * - * @since 2.0.0 - */ -export type Index = { - readonly tag: "Index"; - readonly index: number; - readonly property: Property; - readonly error: DecodeError; -}; - -/** - * The Union type is used to associate two or more DecoderErrors as a union of - * errors. - * - * @since 2.0.0 - */ -export type Union = { - readonly tag: "Union"; - readonly errors: readonly [DecodeError, DecodeError, ...DecodeError[]]; -}; - -/** - * The Intersection type is used to associate two or more DecodeErrors as an - * intersection of errors. - * - * @since 2.0.0 - */ -export type Intersection = { - readonly tag: "Intersection"; - readonly errors: readonly [DecodeError, DecodeError, ...DecodeError[]]; -}; - -/** - * The Many type is used to represent zero or more DecodeErrors without - * context. It's purpose is to be used as both Empty and a target for - * combineenation of DecodeErrors that are neither Union or Intersection types. - * This allows us to build a Combinable over DecodeError. - * - * @since 2.0.0 - */ -export type Many = { - readonly tag: "Many"; - readonly errors: readonly DecodeError[]; -}; - -/** - * The DecodeError type is a discriminated union of potential contextualized - * errors that are encountered while decoding. - * - * @since 2.0.0 - */ -export type DecodeError = - | Leaf - | Wrap - | Key - | Index - | Union - | Intersection - | Many; - -/** - * A refinement that returns true when a DecodeError is a Leaf. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.isLeaf(D.leafErr(1, "expected string")); // true - * const result2 = D.isLeaf(D.manyErr()); // false - * ``` - * - * @since 2.0.0 - */ -export function isLeaf(err: DecodeError): err is Leaf { - return err.tag === "Leaf"; -} - -/** - * A refinement that returns true when a DecodeError is a Wrap. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.isWrap(D.wrapErr( - * "This is some context", - * D.leafErr(1, "expected string") - * )); // true - * const result2 = D.isWrap(D.manyErr()); // false - * ``` - * - * @since 2.0.0 - */ -export function isWrap(err: DecodeError): err is Wrap { - return err.tag === "Wrap"; -} - -/** - * A refinement that returns true when a DecodeError is a Key. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.isKey(D.keyErr( - * "one", - * D.leafErr(1, "expected string") - * )); // true - * const result2 = D.isKey(D.manyErr()); // false - * ``` - * - * @since 2.0.0 - */ -export function isKey(err: DecodeError): err is Key { - return err.tag === "Key"; -} - -/** - * A refinement that returns true when a DecodeError is an Index. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.isIndex(D.indexErr( - * 1, - * D.leafErr(1, "expected string") - * )); // true - * const result2 = D.isIndex(D.manyErr()); // false - * ``` - * - * @since 2.0.0 - */ -export function isIndex(err: DecodeError): err is Index { - return err.tag === "Index"; -} - -/** - * A refinement that returns true when a DecodeError is a Union. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.isUnion(D.unionErr( - * D.leafErr(1, "expected null"), - * D.leafErr(1, "expected string") - * )); // true - * const result2 = D.isUnion(D.manyErr()); // false - * ``` - * - * @since 2.0.0 - */ -export function isUnion(err: DecodeError): err is Union { - return err.tag === "Union"; -} - -/** - * A refinement that returns true when a DecodeError is an Intersection. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.isIntersection(D.intersectionErr( - * D.leafErr(1, "expected null"), - * D.leafErr(1, "expected string") - * )); // true - * const result2 = D.isIntersection(D.manyErr()); // false - * ``` - * - * @since 2.0.0 - */ -export function isIntersection(err: DecodeError): err is Intersection { - return err.tag === "Intersection"; -} - -/** - * A refinement that returns true when a DecodeError is a Many. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.isMany(D.intersectionErr( - * D.leafErr(1, "expected null"), - * D.leafErr(1, "expected string") - * )); // false - * const result2 = D.isMany(D.manyErr()); // true - * ``` - * - * @since 2.0.0 - */ -export function isMany(err: DecodeError): err is Many { - return err.tag === "Many"; -} - -/** - * Construct a Lead from an unknown value and a reason for the decode error. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result = D.leafErr(1, "expected string"); - * ``` - * - * @since 2.0.0 - */ -export function leafErr(value: unknown, reason: string): DecodeError { - return { tag: "Leaf", value, reason }; -} - -/** - * Construct a Wrap from context and an existing DecodeError. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result = D.wrapErr( - * "expected password", - * D.leafErr(1, "expected string") - * ); - * ``` - * - * @since 2.0.0 - */ -export function wrapErr(context: string, error: DecodeError): DecodeError { - return { tag: "Wrap", context, error }; -} - -/** - * Construct a Key from a key and an existing DecodeError. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result = D.keyErr( - * "title", - * D.leafErr(1, "expected string"), - * D.required, - * ); - * ``` - * - * @since 2.0.0 - */ -export function keyErr( - key: string, - error: DecodeError, - property: Property = optional, -): DecodeError { - return { tag: "Key", key, property, error }; -} - -/** - * Construct an Index from an index and an existing DecodeError. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result = D.indexErr( - * 1, - * D.leafErr(1, "expected string"), - * D.required, - * ); - * ``` - * - * @since 2.0.0 - */ -export function indexErr( - index: number, - error: DecodeError, - property: Property = optional, -): DecodeError { - return { tag: "Index", index, property, error }; -} - -/** - * Construct a Union from two or more DecodeErrors. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result = D.unionErr( - * D.leafErr(1, "expected string"), - * D.leafErr(1, "expected array"), - * ); - * ``` - * - * @since 2.0.0 - */ -export function unionErr( - ...errors: readonly [DecodeError, DecodeError, ...DecodeError[]] -): DecodeError { - const _errors = pipe( - errors, - A.flatmap((err) => isUnion(err) ? err.errors : [err]), - ) as unknown as typeof errors; - return { tag: "Union", errors: _errors }; -} - -/** - * Construct an Intersection from two or more DecodeErrors. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result = D.intersectionErr( - * D.leafErr(1, "expected noninit string"), - * D.leafErr(1, "expected string with no spaces"), - * ); - * ``` - * - * @since 2.0.0 - */ -export function intersectionErr( - ...errors: readonly [DecodeError, DecodeError, ...DecodeError[]] -): DecodeError { - const _errors = pipe( - errors, - A.flatmap((err) => isIntersection(err) ? err.errors : [err]), - ) as unknown as typeof errors; - return { tag: "Intersection", errors: _errors }; -} - -/** - * Construct a Many from zero or more DecodeErrors. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.manyErr( - * D.leafErr(1, "expected noninit string"), - * D.leafErr(1, "expected string with no spaces"), - * ); - * const result2 = D.manyErr(); - * ``` - * - * @since 2.0.0 - */ -export function manyErr( - ...errors: readonly DecodeError[] -): DecodeError { - const _errors = pipe( - errors, - A.flatmap((err) => isMany(err) ? err.errors : [err]), - ); - return { tag: "Many", errors: _errors }; -} - -/** - * Construct a catamorphism over DecodeError, mapping each case of a DecodeError - * into the single type O. - * - * @example - * ```ts - * import type { DecodeError } from "./decoder.ts"; - * import * as D from "./decoder.ts"; - * import * as A from "./array.ts"; - * - * const countErrors: (err: DecodeError) => number = D.match( - * () => 1, - * (_, err) => countErrors(err), - * (_, __, err) => countErrors(err), - * (_, __, err) => countErrors(err), - * A.reduce((acc, err) => acc + countErrors(err), 0), - * A.reduce((acc, err) => acc + countErrors(err), 0), - * A.reduce((acc, err) => acc + countErrors(err), 0), - * ); - * - * const result1 = countErrors(D.leafErr(1, "expected string")); // 1 - * const result2 = countErrors(D.manyErr( - * D.leafErr(1, "expected string"), - * D.leafErr(1, "expected string"), - * D.leafErr(1, "expected string"), - * )); // 3 - * ``` - * - * @since 2.0.0 - */ -export function match( - Leaf: (value: unknown, reason: string) => O, - Wrap: (context: string, error: DecodeError) => O, - Key: (key: string, property: Property, error: DecodeError) => O, - Index: (index: number, property: Property, error: DecodeError) => O, - Union: (errors: readonly [DecodeError, DecodeError, ...DecodeError[]]) => O, - Intersection: ( - errors: readonly [DecodeError, DecodeError, ...DecodeError[]], - ) => O, - Many: (errors: readonly DecodeError[]) => O, -): (e: DecodeError) => O { - return (e) => { - switch (e.tag) { - case "Leaf": - return Leaf(e.value, e.reason); - case "Wrap": - return Wrap(e.context, e.error); - case "Key": - return Key(e.key, e.property, e.error); - case "Index": - return Index(e.index, e.property, e.error); - case "Union": - return Union(e.errors); - case "Intersection": - return Intersection(e.errors); - case "Many": - return Many(e.errors); - } - }; -} - -/** - * An internal helper that wraps JSON.stringify such that it returns an - * Option and handles any thrown errors. - */ -const stringify = O.tryCatch(JSON.stringify); - -/** - * An internal helper that maps a Leaf into a Forest. This is used to - * draw a DecodeError tree. - */ -function onLeaf(value: unknown, reason: string): Forest { - return pipe( - stringify(value), - O.map((str) => `cannot decode ${str}, should be ${reason}`), - O.getOrElse(() => `cannot decode or render, should be ${reason}`), - TR.wrap, - A.wrap, - ); -} - -/** - * An internal helper that maps a Wrap into a Forest. This is used to - * draw a DecodeError tree. - */ -function onWrap(context: string, error: DecodeError): Forest { - return [TR.wrap(context, toForest(error))]; -} - -/** - * An internal helper that maps a Key into a Forest. This is used to - * draw a DecodeError tree. - */ -function onKey( - key: string, - property: Property, - error: DecodeError, -): Forest { - return [TR.wrap(`${property} property "${key}"`, toForest(error))]; -} - -/** - * An internal helper that maps an Index into a Forest. This is used to - * draw a DecodeError tree. - */ -function onIndex( - index: number, - property: Property, - error: DecodeError, -): Forest { - return [TR.wrap(`${property} index ${index}`, toForest(error))]; -} - -/** - * An internal helper that maps a Union into a Forest. This is used to - * draw a DecodeError tree. - */ -function onUnion( - errors: readonly [DecodeError, DecodeError, ...DecodeError[]], -): Forest { - return [ - TR.wrap(`cannot decode union (any of)`, pipe(errors, A.flatmap(toForest))), - ]; -} - -/** - * An internal helper that maps an Intersection into a Forest. This is - * used to draw a DecodeError tree. - */ -function onIntersection( - errors: readonly [DecodeError, DecodeError, ...DecodeError[]], -): Forest { - return [ - TR.wrap( - `cannot decode intersection (all of)`, - pipe(errors, A.flatmap(toForest)), - ), - ]; -} - -/** - * An internal helper that maps a Many into a Forest. This is - * used to draw a DecodeError tree. - */ -function onMany(errors: readonly DecodeError[]): Forest { - return pipe(errors, A.flatmap(toForest)); -} - -/** - * An internal helper that maps a DecodeError into a Forest. This is - * used to draw a DecodeError tree. - */ -function toForest(err: DecodeError): Forest { - return pipe( - err, - match(onLeaf, onWrap, onKey, onIndex, onUnion, onIntersection, onMany), - ); -} - -/** - * Given a DecodeError, this function will produce a printable tree of errors. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.draw(D.leafErr(1, "string")); - * // "cannot decode 1, should be string" - * - * const result2 = D.draw(D.wrapErr( - * "decoding password", - * D.leafErr(1, "string"), - * )); - * // decoding password - * // └─ cannot decode 1, should be string - * ``` - * - * @since 2.0.0 - */ -export function draw(err: DecodeError): string { - return pipe( - toForest(err), - A.map(TR.drawTree), - (results) => results.join("\n"), - ); -} - -/** - * Construct an init DecodeError. This is a many that contains no errors. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result = D.init(); // DecodeError - * ``` - * - * @since 2.0.0 - */ -export function init(): DecodeError { - return manyErr(); -} - -/** - * Combine two DecodeErrors into one. If both DecodeErrors are Unions then they - * are merged into a Union, if they are both Intersections then are merged into - * an Intersection, otherwise they are wrapped in a Many. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * D.leafErr(1, "string"), - * D.combine(D.leafErr("hello", "number")), - * ); // Many[Leaf, Leaf] - * ``` - * - * @since 2.0.0 - */ -export function combine( - second: DecodeError, -): (first: DecodeError) => DecodeError { - return (first) => - isIntersection(first) && isIntersection(second) - ? intersectionErr(first, second) - : isUnion(first) && isUnion(second) - ? unionErr(first, second) - : manyErr(first, second); -} - -/** - * The canonical implementation of Combinable for DecodeError. It contains - * the methods combine and init. - * - * @since 2.0.0 - */ -export const CombinableDecodeError: Combinable = fromCombine( - combine, -); - -/** - * The Decoded type is an alias of Either. This is the output - * of a Decoder when the parsing fails. - * - * @since 2.0.0 - */ -export type Decoded = Either; - -/** - * Specifies Decoded as a Higher Kinded Type, with covariant - * parameter A corresponding to the 0th index of any substitutions. - * - * @since 2.0.0 - */ -export interface KindDecoded extends Kind { - readonly kind: Decoded>; -} - -/** - * Construct a Decoded from a value A. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.success(1); // Decoder; - * const result2 = D.success("Hello"); // Decoder; - * ``` - * - * @since 2.0.0 - */ -export function success(a: A): Decoded { - return E.right(a); -} - -/** - * Construct a Decoded failure. Specifically, this constructs a Leaf - * DecodeError and wraps it in Left. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.failure(1, "string"); - * // Represents a Decoded value that failed because a 1 was supplied - * // when a string was expected. - * ``` - * - * @since 2.0.0 - */ -export function failure(actual: unknown, error: string): Decoded { - return E.left(leafErr(actual, error)); -} - -/** - * Construct a Decoded from a DecodeError. This allows one to construct a - * Decoded failure directly from DecodeErrors other than Leaf. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.fromDecodeError(D.wrapErr( - * "decoding password", - * D.leafErr(1, "string"), - * )); - * ``` - * - * @since 2.0.0 - */ -export function fromDecodeError(err: DecodeError): Decoded { - return E.left(err); -} - -/** - * A combinator over Decoded that maps a DecodeError into a printable tree. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * import { pipe } from "./fn.ts"; - * - * const result1 = pipe( - * D.failure(1, "string"), - * D.unwrap, - * ); // Left("cannot decode 1, should be string") - * const result2 = pipe( - * D.success(1), - * D.unwrap - * ); // Right(1) - * ``` - * - * @since 2.0.0 - */ -export function unwrap(ta: Decoded): Either { - return pipe(ta, E.mapSecond(draw)); -} - -/** - * The canonical instance of Flatmappable for Decoded. It contains the methods of, ap, map, - * join, and flatmap. - * - * @since 2.0.0 - */ -export const FlatmappableDecoded: Flatmappable = E - .getRightFlatmappable( - CombinableDecodeError, - ); - -/** - * A traversal over a Record of Decoded results. - */ -const traverseRecord = R.traverse(FlatmappableDecoded); - -/** - * A traversal over an Array of Decoded results. - */ -const traverseArray = A.traverse(FlatmappableDecoded); - -/** - * The Decoder type represents a function that parses some input D into a - * value A or a DecodeError. This isn't true parsing of a grammar but instead a - * combination of refinement and error tracking. - * - * @since 2.0.0 - */ -export type Decoder = FnEither; - -/** - * A type that matches any decoder type. - * - * @since 2.0.0 - */ -// deno-lint-ignore no-explicit-any -export type AnyDecoder = Decoder; - -/** - * Specifies Decoder as a Higher Kinded Type, with covariant - * parameter A corresponding to the 0th index of any substitutions and - * contravariant paramter D corresponding to the 0th index of any substitutions. - * - * @since 2.0.0 - */ -export interface KindDecoder extends Kind { - readonly kind: Decoder, Out>; -} - -/** - * Construct a Decoder from a Predicate and a reason for failure or a - * Decoder from a Refinement and a reason for failure. While - * decoding, the value A is passed to the predicate/refinement. If it returns - * true then the result is wrapped in Success, otherwise the value and reason - * are wrapped in Failure. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * import * as R from "./refinement.ts"; - * import { pipe } from "./fn.ts"; - * - * const nonEmpty = D.fromPredicate( - * (s: string) => s.length > 0, // Predicate - * "noninit string" - * ); - * const string = D.fromPredicate(R.string, "string"); - * const nonEmptyString = pipe( - * string, - * D.compose(nonEmpty), - * ); - * - * const result1 = nonEmptyString(null); // Left(DecodeError) - * const result2 = nonEmptyString(""); // Left(DecodeError) - * const result3 = nonEmptyString("Hello"); // Right("Hello") - * ``` - * - * @since 2.0.0 - */ -export function fromPredicate( - guard: Refinement, - expected: string, -): Decoder; -export function fromPredicate( - guard: Predicate, - expected: string, -): Decoder; -export function fromPredicate( - guard: Predicate, - expected: string, -): Decoder { - return (a: A) => guard(a) ? success(a) : failure(a, expected); -} - -/** - * Create a Decoder from a constant value A. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const one = D.wrap("one"); - * - * const result = one(null); // Right("one") - * ``` - * - * @since 2.0.0 - */ -export function wrap(a: A): Decoder { - return FlatmappableDecoder.wrap(a); -} - -/** - * Given a Decoder returning a function A => I and a Decoder returning a value - * A, combine them into a Decoder returning I. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * import { pipe } from "./fn.ts"; - * - * type Person = { name: string; age: number }; - * const person = (name: string) => (age: number): Person => ({ name, age }); - * - * const result = pipe( - * D.wrap(person), - * D.apply(D.wrap("Brandon")), - * D.apply(D.wrap(37)), - * ); // Decoder - * ``` - * - * @since 2.0.0 - */ -export function apply( - ua: Decoder, -): (ufai: Decoder I>) => Decoder { - return FlatmappableDecoder.apply(ua); -} - -/** - * Provide an alternative Decoder to fallback against if the first one fails. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * import { pipe } from "./fn.ts"; - * - * const numOrStr = pipe( - * D.string, - * D.alt(D.number), - * ); - * - * const result1 = numOrStr(0); // Right(0) - * const result2 = numOrStr("Hello"); // Right("Hello") - * const result3 = numOrStr(null); // Left(DecodeError) - * ``` - * - * @since 2.0.0 - */ -export function alt( - second: Decoder, -): (first: Decoder) => Decoder { - return (first) => (d) => { - const fst = first(d); - if (E.isRight(fst)) { - return fst; - } - const snd = second(d); - if (E.isRight(snd)) { - return snd; - } - return fromDecodeError(unionErr(fst.left, snd.left)); - }; -} - -/** - * Map over the output of a Decoder. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * import { pipe } from "./fn.ts"; - * - * const stringLength = pipe( - * D.string, - * D.map(s => s.length), - * ); - * - * const result1 = stringLength(null); // Left(DecodeError) - * const result2 = stringLength(""); // Right(0) - * const result3 = stringLength("Hello"); // Right(5) - * ``` - * - * @since 2.0.0 - */ -export function map( - fai: (a: A) => I, -): (ua: Decoder) => Decoder { - return FlatmappableDecoder.map(fai); -} - -/** - * Chain the result of one decoder into a new decoder. - * - * @since 2.0.0 - */ -export function flatmap( - faui: (a: A) => Decoder, -): (ua: Decoder) => Decoder { - return FlatmappableDecoder.flatmap(faui); -} - -/** - * Annotate the DecodeError output of an existing Decoder if it fails while - * parsing. Internally, this uses the DecodeError Wrap constructor. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * import { pipe } from "./fn.ts"; - * - * const decoder = pipe( - * D.literal("a", "b", "c", 1, 2, 3), - * D.annotate("like the song"), - * ); - * - * const result1 = decoder(1); // Right(1) - * const result2 = D.unwrap(decoder("d")); - * // Left(`like the song - * // └─ cannot decode "d", should be "a", "b", "c", 1, 2, 3`) - * - * ``` - * - * @since 2.0.0 - */ -export function annotate( - context: string, -): (decoder: Decoder) => Decoder { - return FE.mapSecond((error) => wrapErr(context, error)); -} - -/** - * Create a Decoder from a type D. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const num = D.id(); - * - * const result1 = num(1); // Right(1) - * ``` - * - * @since 2.0.0 - */ -export function id(): Decoder { - return E.right; -} - -/** - * Compose two Decoders where the input to second aligns with the output of - * first. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * import * as S from "./string.ts"; - * import { pipe } from "./fn.ts"; - * - * const prefixed = (prefix: T) => - * D.fromPredicate(S.startsWith(prefix), `prefixed with "${prefix}"`); - * - * const eventMethod = pipe( - * D.string, - * D.compose(prefixed("on")), - * ); - * - * const result1 = eventMethod(null); // Left(DecodeError) - * const result2 = eventMethod("hello"); // Left(DecodeError) - * const result3 = eventMethod("onClick"); // Right("onClick"); - * ``` - * - * @since 2.0.0 - */ -export function compose( - second: Decoder, -): (first: Decoder) => Decoder { - return FE.compose(second); -} - -/** - * Map over the input of a Decoder contravariantly. This allows one to use an - * existing decoder against a transformed input. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * import { pipe } from "./fn.ts"; - * - * const fromStr = pipe( - * D.tuple(D.string, D.string), - * D.premap((s) => [s, s] as const), - * ); - * - * const result1 = fromStr("hello"); // Right(["hello", "hello"]) - * const result2 = fromStr(null); // Left(DecodeError) - * ``` - * - * @since 2.0.0 - */ -export function premap( - fld: (l: L) => D, -): (ua: Decoder) => Decoder { - return FE.premap(fld); -} - -/** - * Map over the input and output of a Decoder. This is effectively a combination - * of map and premap in a single operator. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * import { pipe } from "./fn.ts"; - * - * const fromStr = pipe( - * D.tuple(D.string, D.string), - * D.dimap( - * (s) => [s, s], - * ([s]) => [s, s.length] as const, - * ), - * ); - * - * const result1 = fromStr("hello"); // Right(["hello", 5]) - * const result2 = fromStr(null); // Left(DecodeError) - * ``` - * - * @since 2.0.0 - */ -export function dimap( - fld: (l: L) => D, - fai: (a: A) => I, -): (ua: Decoder) => Decoder { - return FE.dimap(fld, fai); -} - -/** - * Apply a refinement or predicate to the output of an existing Decoder. This is - * useful for building complicated Decoders. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * import { pipe } from "./fn.ts"; - * - * const nonEmptyString = pipe( - * D.string, - * D.refine(s => s.length > 0, "noninit"), - * ); - * - * const result1 = nonEmptyString(null); // Left(DecodeError) - * const result2 = nonEmptyString(""); // Left(DecodeError) - * const result3 = nonEmptyString("Hello"); // Right("Hello") - * ``` - * - * @since 2.0.0 - */ -export function refine( - refinement: Refinement, - id: string, -): (from: Decoder) => Decoder; -export function refine( - refinement: Predicate, - id: string, -): (from: Decoder) => Decoder; -export function refine( - refinement: Predicate, - id: string, -): (from: Decoder) => Decoder { - return compose(fromPredicate(refinement, id)); -} - -/** - * An internal helper that maps a Literal to a string for use - * in DecodeErrors - */ -const literalToString = (literal: S.Literal): string => - typeof literal === "string" ? `"${literal}"` : `${literal}`; - -/** - * Create a Decoder from a list of literal values. Literal values can be - * strings, numbers, booleans, null, or undefined. This decoder will only return - * Right if the value being decoded has object equality with one of the literals - * supplied. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const firstThree = D.literal(1, 2, 3); - * - * const result1 = firstThree(0); // Left(DecodeError) - * const result2 = firstThree(1); // Right(1) - * const result3 = firstThree(2); // Right(2) - * const result4 = firstThree(3); // Right(3) - * const result5 = firstThree(null); // Left(DecodeError) - * ``` - * - * @since 2.0.0 - */ -export function literal>( - ...literals: A -): Decoder { - return fromPredicate( - G.literal(...literals), - literals.map(literalToString).join(", "), - ) as unknown as Decoder; -} - -/** - * A Decoder that always returns true and casts the result to unknown. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.unknown(null); // Right(null) - * const result2 = D.unknown("Brandon"); // Right("Brandon") - * ``` - * - * @since 2.0.0 - */ -export const unknown: Decoder = E.right; - -/** - * A Decoder that validates strings. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.string(null); // Left(DecodeError) - * const result2 = D.string("Hello"); // Right("Hello") - * ``` - * - * @since 2.0.0 - */ -export const string: Decoder = fromPredicate( - G.string, - "string", -); - -/** - * A Decoder that validates numbers. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.number(null); // Left(DecodeError) - * const result2 = D.number(1); // Right(1) - * ``` - * - * @since 2.0.0 - */ -export const number: Decoder = fromPredicate( - G.number, - "number", -); - -/** - * A Decoder that validates booleans. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.boolean(null); // Left(DecodeError) - * const result2 = D.boolean(true); // Right(true) - * ``` - * - * @since 2.0.0 - */ -export const boolean: Decoder = fromPredicate( - G.boolean, - "boolean", -); - -/** - * A Decoder that attempts to decode a Date using new Date(value). If the - * process of calling new Date throws or the getTime method on the new date - * object returns NaN, then a failure is returned. If a Date can be derived from - * the object then a Date object is returned. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.date(null); // Left(DecodeError) - * const result2 = D.date(Date.now()); // Right(Date) - * const result3 = D.date("1990"); // Right(Date) - * const result4 = D.date(new Date()); // Right(Date) - * ``` - * - * @since 2.0.0 - */ -export function date(a: unknown): Decoded { - try { - // deno-lint-ignore no-explicit-any - const _date = new Date(a as any); - return isNaN(_date.getTime()) ? failure(a, "date") : success(_date); - } catch { - return failure(a, "date"); - } -} - -/** - * A Decoder that checks that an object is both an Array and that it's length is - * N. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const two = D.arrayN(2); - * - * const result1 = two(null); // Left(DecodeError) - * const result2 = two([]); // Left(DecodeError) - * const result3 = two(["hello"]); // Left(DecodeError) - * const result4 = two(["hello", 2]); // Right(["hello", 2]) - * ``` - * - * @since 2.0.0 - */ -export function arrayN( - length: N, -): Decoder & { length: N }> { - return fromPredicate(G.isArrayN(length), `tuple of length ${length}`); -} - -/** - * A Decoder combinator that will check that a value is a string and then - * attempt to parse it as JSON. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * import { pipe } from "./fn.ts"; - * - * const person = D.struct({ - * name: D.string, - * age: D.number, - * }); - * const json = D.json(person); - * - * const result1 = json(null); // Left(DecodeError) - * const result2 = json(""); // Left(DecodeError) - * const result3 = json('{"name":"Brandon","age":37}'); - * // Right({ name: "Brandon", age: 37 }) - * ``` - * - * @since 2.0.0 - */ -export function json(decoder: Decoder): Decoder { - return pipe( - string, - compose((s) => { - try { - return success(JSON.parse(s)); - } catch { - return failure(s, "json"); - } - }), - compose(decoder), - ); -} - -/** - * A Decoder combinator that intersects two existing decoders. The resultant - * decoder ensures that an input matches both decoders. Nested intersection - * combinators will combine and flatten their error trees. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * import { pipe } from "./fn.ts"; - * - * const person = pipe( - * D.struct({ name: D.string }), - * D.intersect(D.partial({ age: D.string })), - * ); - * - * const result1 = person(null); // Left(DecodeError) - * const result2 = person({ name: "Brandon" }); // Right({ name: "Brandon" }) - * const result3 = person({ name: "Brandon", age: 37 }); - * // Right({ name: "Brandon", age: 37 }) - * const result4 = person({ age: 37 }); // Left(DecodeError) - * ``` - * - * @since 2.0.0 - */ -export function intersect( - second: Decoder, -): (first: Decoder) => Decoder> { - return (first: Decoder): Decoder> => (a) => { - const fst = first(a) as Decoded>; - const snd = second(a) as Decoded>; - - if (E.isRight(snd) && E.isRight(fst)) { - return success( - Object.assign({}, fst.right, snd.right), - ); - } - - if (E.isLeft(fst)) { - if (E.isLeft(snd)) { - return fromDecodeError( - intersectionErr(fst.left, snd.left), - ); - } - return fst; - } - return snd; - }; -} - -/** - * Provide an alternative Decoder to fallback against if the first one fails. - * This is an alias of alt. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * import { pipe } from "./fn.ts"; - * - * const numOrStr = pipe( - * D.string, - * D.union(D.number), - * ); - * - * const result1 = numOrStr(0); // Right(0) - * const result2 = numOrStr("Hello"); // Right("Hello") - * const result3 = numOrStr(null); // Left(DecodeError) - * ``` - * - * @since 2.0.0 - */ -export function union( - right: Decoder, -): (left: Decoder) => Decoder { - return alt(right); -} - -/** - * An internal literal instance over null used in the nullable combinator. - * - * @since 2.0.0 - */ -export const _null = literal(null); - -/** - * A decoder combinator that modifies an existing decoder to accept null as an - * input value and a successful return value. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const orNull = D.nullable(D.string); - * - * const result1 = orNull(null); // Right(null) - * const result2 = orNull(2); // Left(DecodeError) - * const result3 = orNull("Hello"); // Right("Hello") - * ``` - * - * @since 2.0.0 - */ -export function nullable( - second: Decoder, -): Decoder { - return pipe(_null, union(second)) as Decoder; -} - -/** - * An internal literal instance over undefined used in the undefinable combinator. - * - * @since 2.0.0 - */ -export const _undefined = literal(undefined); - -/** - * A decoder combinator that modifies an existing decoder to accept undefined - * as an input value and a successful return value. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const orUndefined = D.undefinable(D.string); - * - * const result1 = orUndefined(undefined); // Right(null) - * const result2 = orUndefined(2); // Left(DecodeError) - * const result3 = orUndefined("Hello"); // Right("Hello") - * ``` - * - * @since 2.0.0 - */ -export function undefinable( - second: Decoder, -): Decoder { - return pipe(_undefined, union(second)) as Decoder< - D | undefined, - A | undefined - >; -} - -/** - * An internal optimization decoder that checks that an input is a non-null - * object. - * - * @since 2.0.0 - */ -const _record = fromPredicate(G.isRecord, "record"); - -/** - * A decoder against a record with string keys and values that match the items - * decoder. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const strings = D.record(D.string); - * - * const result1 = strings(null); // Left(DecodeError) - * const result2 = strings({}); // Right({}) - * const result3 = strings([]); // Right({}) - * const result4 = strings({"one": 1}); // Left(DecodeError) - * const result5 = strings({ one: "one" }); // Right({ one: "one" }) - * ``` - * - * @since 2.0.0 - */ -export function record( - items: Decoder, -): Decoder> { - return flow( - _record, - E.flatmap(flow( - traverseRecord((a, index) => - pipe(items(a), E.mapSecond((e) => keyErr(index, e))) - ), - E.mapSecond((e) => wrapErr("cannot decode record", e)), - )), - ); -} - -/** - * An internal optimization decoder that checks that an input is an array. - * - * @since 2.0.0 - */ -const _array = fromPredicate(G.isArray, "array"); - -/** - * A decoder against an array with only values that adhere to the passed in - * items decoder. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const strings = D.array(D.string); - * - * const result1 = strings(null); // Left(DecodeError) - * const result2 = strings({}); // Left(DecodeError) - * const result3 = strings([]); // Right([]) - * const result4 = strings([1, 2, 3]); // Left(DecodeError) - * const result5 = strings(["one", "two"]); // Right(["one", "two"]) - * ``` - * - * @since 2.0.0 - */ -export function array( - items: Decoder, -): Decoder> { - return flow( - _array, - E.flatmap(flow( - traverseArray((a, index) => - pipe(items(a), E.mapSecond((e) => indexErr(index, e))) - ), - E.mapSecond((e) => wrapErr("cannot decode array", e)), - )), - ); -} - -/** - * A decoder over a heterogenous tuple. This tuple can have different values for - * each tuple element, but is constrained to a specific size and order. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const tuple = D.tuple(D.string, D.number); - * - * const result1 = tuple([]); // Left(DecodeError) - * const result2 = tuple([3, "Hello"]); // Left(DecodeError) - * const result3 = tuple(["Brandon", 37]); // Right(["Brandon", 37]) - * ``` - * - * @since 2.0.0 - */ -export function tuple( - ...items: { [K in keyof A]: Decoder } -): Decoder { - return flow( - arrayN(items.length), - E.flatmap( - traverseArray((a, index) => { - const decoder: AnyDecoder = items[index]; - return pipe( - decoder(a), - E.mapSecond((e) => indexErr(index, e, "required")), - ); - }), - ), - E.mapSecond((e) => wrapErr("cannot decode tuple", e)), - ) as Decoder; -} - -/** - * An internal helper function that traverses a structure, decoding each entry - * in the struct with its corresponding decoder. - * - * @since 2.0.0 - */ -const traverseStruct = - (items: Record>) => - (a: Record) => - pipe( - items, - traverseRecord((decoder, key) => - pipe( - decoder(a[key]), - E.mapSecond((e) => keyErr(key, e, "required")), - ) - ), - ); - -/** - * A decoder over a heterogenous record type. This struct can have different - * values at each key, and the resultant decoder will ensure that each key - * matches its corresponding decoder. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const person = D.struct({ name: D.string, age: D.number }); - * - * const result1 = person({}); // Left(DecodeError) - * const result2 = person(null); // Left(DecodeError) - * const result3 = person({ name: "Brandon" }); // Left(DecodeError) - * const result4 = person({ name: "Brandon", age: 37 }); - * // Right({ name: "Brandon", age: 37 }) - * ``` - * - * @since 2.0.0 - */ -export function struct( - items: { [K in keyof A]: Decoder }, -): Decoder { - return flow( - _record, - E.flatmap(traverseStruct(items)), - E.mapSecond((e) => wrapErr("cannot decode struct", e)), - ) as Decoder; -} - -/** - * An internal helper decoded value that represents a partial value that does - * not exist in the record being decoded. - * - * @since 2.0.0 - */ -const skipProperty: Decoded> = success( - E.left(undefined), -); - -/** - * An internal helper decoded value that represents a partial value that does - * exists but is undefined. - * - * @since 2.0.0 - */ -const undefinedProperty: Decoded> = success( - E.right(undefined), -); - -/** - * An internal helper function that traverses a partial, decoding each entry - * in the struct with its corresponding decoder and handling the cases where a - * property does not exist on the struct and where a property is undefined. - * - * @since 2.0.0 - */ -const traversePartial = - (items: Record>) => - (a: Record) => - pipe( - items, - traverseRecord((decoder, key) => { - if (a[key] === undefined) { - return key in a ? undefinedProperty : skipProperty; - } - return pipe( - decoder(a[key]), - E.bimap((e) => keyErr(key, e), E.right), - ); - }), - ); - -/** - * An internal helper that is used to construct a partial record where - * Left values are not added to the resultant record. - * - * @since 2.0.0 - */ -const compactRecord = ( - r: Record>, -): Record => { - const out: Record = {}; - for (const k in r) { - const rk = r[k]; - if (E.isRight(rk)) { - out[k] = rk.right; - } - } - return out; -}; - -/** - * A decoder over a heterogenous record type. This struct can have different - * values at each key or the key can not exist or the value can be undefined, - * and the resultant decoder will ensure that each key - * matches its corresponding decoder. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const person = D.partial({ name: D.string, age: D.number }); - * - * const result1 = person({}); // Right({}) - * const result2 = person(null); // Left(DecodeError) - * const result3 = person({ name: "Brandon" }); // Right({ name: "Brandon" }) - * const result4 = person({ name: "Brandon", age: 37 }); - * // Right({ name: "Brandon", age: 37 }) - * ``` - * - * @since 2.0.0 - */ -export function partial( - items: { [K in keyof A]: Decoder }, -): Decoder { - return flow( - _record, - E.flatmap(traversePartial(items)), - E.bimap((e) => wrapErr("cannot decode partial struct", e), compactRecord), - ) as Decoder; -} - -/** - * The Lazy decoder combinator allows for the creation of recursive or mutually - * recursive decoding. The passed decoder thunk is memoized to keep the vm from - * falling into an infinite loop. - * - * @example - * ```ts - * import type { Decoder } from "./decoder.ts"; - * - * import * as D from "./decoder.ts"; - * import { pipe } from "./fn.ts"; - * - * type Person = { name: string; age: number; children: ReadonlyArray }; - * const person = ( - * name: string, - * age: number, - * children: ReadonlyArray = [] - * ): Person => ({ name, age, children }); - * - * const decode: Decoder = D.lazy( - * "Person", - * () => D.struct({ name: D.string, age: D.number, children: D.array(decode) }), - * ); - * - * const rufus = person("Rufus", 1); - * const brandon = person("Brandon", 37, [rufus]); - * const jackie = person("Jackie", 57, [brandon]); - * - * const result1 = decode(null); // Left(DecodeError) - * const result2 = decode(rufus); // Right(rufus) - * const result3 = decode(brandon); // Right(brandon) - * const result4 = decode(jackie); // Right(jackie) - * ``` - * - * @since 2.0.0 - */ -export function lazy( - id: string, - decoder: () => Decoder, -): Decoder { - const get = memoize>(decoder); - return (u) => - pipe(get()(u), E.mapSecond((e) => wrapErr(`lazy type ${id}`, e))); -} - -/** - * Specifies Decoder as a Higher Kinded Type, with covariant - * parameter A corresponding to the 0th index of any substitutions. This is a - * specific Kind used to construct the Schemable Decoder. - * - * @since 2.0.0 - */ -export interface KindUnknownDecoder extends Kind { - readonly kind: Decoder>; -} - -/** - * The canonical implementation of Mappable for Decoder. It contains - * the method map. - * - * @since 2.0.0 - */ -export const MappableDecoder: Mappable = { map }; - -/** - * The canonical implementation of Applicable for Decoder. It contains - * the methods of, ap, and map. - * - * @since 2.0.0 - */ -export const ApplicableDecoder: Applicable = { wrap, apply, map }; - -/** - * The canonical implementation of Flatmappable for Decoder. It contains - * the methods of, ap, map, join, and flatmap. - * - * @since 2.0.0 - */ -export const FlatmappableDecoder: Flatmappable = FE - .getRightFlatmappable( - CombinableDecodeError, - ); - -/** - * The canonical implementation of Schemable for Decoder. It contains - * the methods unknown, string, number, boolean, literal, nullable, undefinable, - * record, array, tuple, struct, partial, intersect, union, and lazy. - * - * @since 2.0.0 - */ -export const SchemableDecoder: Schemable = { - unknown: () => unknown, - string: () => string, - number: () => number, - boolean: () => boolean, - literal, - nullable, - undefinable, - record, - array, - tuple: tuple as Schemable["tuple"], - struct, - partial, - intersect, - union, - lazy, -}; diff --git a/vendor/deno.land/x/fun@v2.0.0-alpha.15/either.ts b/vendor/deno.land/x/fun@v2.0.0-alpha.15/either.ts deleted file mode 100644 index eb7afb3..0000000 --- a/vendor/deno.land/x/fun@v2.0.0-alpha.15/either.ts +++ /dev/null @@ -1,327 +0,0 @@ -import type { $, Kind, Out } from "./kind.ts"; -import type { Applicable } from "./applicable.ts"; -import type { Initializable } from "./initializable.ts"; -import type { Bimappable } from "./bimappable.ts"; -import type { Combinable } from "./combinable.ts"; -import type { Comparable } from "./comparable.ts"; -import type { Failable } from "./failable.ts"; -import type { Flatmappable } from "./flatmappable.ts"; -import type { Mappable } from "./mappable.ts"; -import type { Predicate } from "./predicate.ts"; -import type { Reducible } from "./reducible.ts"; -import type { Refinement } from "./refinement.ts"; -import type { Showable } from "./showable.ts"; -import type { Sortable } from "./sortable.ts"; -import type { Traversable } from "./traversable.ts"; -import type { Wrappable } from "./wrappable.ts"; - -import * as O from "./option.ts"; -import { isNotNil } from "./nilable.ts"; -import { fromCompare } from "./comparable.ts"; -import { fromSort } from "./sortable.ts"; -import { flow, pipe } from "./fn.ts"; - -export type Left = { tag: "Left"; left: L }; - -export type Right = { tag: "Right"; right: R }; - -export type Either = Left | Right; - -export interface KindEither extends Kind { - readonly kind: Either, Out>; -} - -export interface KindRightEither extends Kind { - readonly kind: Either>; -} - -export function left(left: E): Either { - return ({ tag: "Left", left }); -} - -export function right(right: A): Either { - return ({ tag: "Right", right }); -} - -export function wrap(a: A): Either { - return right(a); -} - -export function fail(b: B): Either { - return left(b); -} - -export function fromNullable(fe: () => E) { - return ( - a: A, - ): Either> => (isNotNil(a) ? right(a) : left(fe())); -} - -export function tryCatch( - fa: () => A, - onError: (e: unknown) => E, -): Either { - try { - return right(fa()); - } catch (e) { - return left(onError(e)); - } -} - -export function tryCatchWrap( - fn: (...as: AS) => A, - onError: (e: unknown) => E, -): (...as: AS) => Either { - return (...as: AS) => { - try { - return right(fn(...as)); - } catch (e) { - return left(onError(e)); - } - }; -} - -export function fromPredicate( - refinement: Refinement, -): (a: A) => Either; -export function fromPredicate( - predicate: Predicate, -): (a: A) => Either; -export function fromPredicate( - predicate: Predicate, -): (a: A) => Either { - return (a: A) => predicate(a) ? right(a) : left(a); -} - -export function match( - onLeft: (left: L) => B, - onRight: (right: R) => B, -): (ta: Either) => B { - return (ta) => isLeft(ta) ? onLeft(ta.left) : onRight(ta.right); -} - -export function getOrElse(onLeft: (e: E) => A) { - return (ma: Either): A => isLeft(ma) ? onLeft(ma.left) : ma.right; -} - -export function getRight(ma: Either): O.Option { - return pipe(ma, match(O.constNone, O.some)); -} - -export function getLeft(ma: Either): O.Option { - return pipe(ma, match(O.some, O.constNone)); -} - -export function isLeft(m: Either): m is Left { - return m.tag === "Left"; -} - -export function isRight(m: Either): m is Right { - return m.tag === "Right"; -} - -export function getShowable( - SB: Showable, - SA: Showable, -): Showable> { - return ({ - show: match( - (left) => `Left(${SB.show(left)})`, - (right) => `Right(${SA.show(right)})`, - ), - }); -} - -export function getComparable( - SB: Comparable, - SA: Comparable, -): Comparable> { - return fromCompare((second) => (first) => { - if (isLeft(first)) { - if (isLeft(second)) { - return SB.compare(second.left)(first.left); - } - return false; - } - - if (isLeft(second)) { - return false; - } - return SA.compare(second.right)(first.right); - }); -} - -export function getSortable( - OB: Sortable, - OA: Sortable, -): Sortable> { - return fromSort((fst, snd) => - isLeft(fst) - ? isLeft(snd) ? OB.sort(fst.left, snd.left) : -1 - : isLeft(snd) - ? 1 - : OA.sort(fst.right, snd.right) - ); -} - -export function getLeftInitializable( - { combine, init }: Initializable, -): Initializable> { - return { - init: () => left(init()), - combine: (second) => (first) => - isRight(first) - ? first - : isRight(second) - ? second - : left(combine(second.left)(first.left)), - }; -} - -export function getRightInitializable( - { combine, init }: Initializable, -): Initializable> { - return { - init: () => right(init()), - combine: (second) => (first) => - isLeft(first) - ? first - : isLeft(second) - ? second - : right(combine(second.right)(first.right)), - }; -} - -export function getRightFlatmappable( - { combine }: Combinable, -): Flatmappable> { - return ({ - wrap, - apply: (ua) => (ufai) => - isLeft(ufai) - ? (isLeft(ua) ? left(combine(ua.left)(ufai.left)) : ufai) - : (isLeft(ua) ? ua : right(ufai.right(ua.right))), - map, - flatmap, - }); -} - -export function bimap( - fbj: (b: B) => J, - fai: (a: A) => I, -): (ta: Either) => Either { - return (ta) => isLeft(ta) ? left(fbj(ta.left)) : right(fai(ta.right)); -} - -export function swap(ma: Either): Either { - return isLeft(ma) ? right(ma.left) : left(ma.right); -} - -export function stringifyJSON( - u: unknown, - onError: (reason: unknown) => E, -): Either { - return tryCatch(() => JSON.stringify(u), onError); -} - -export function map( - fai: (a: A) => I, -): (ta: Either) => Either { - return (ta) => isLeft(ta) ? ta : right(fai(ta.right)); -} - -export function mapSecond( - fbj: (b: B) => J, -): (ta: Either) => Either { - return (ta) => isLeft(ta) ? left(fbj(ta.left)) : ta; -} - -export function apply( - ua: Either, -): (ufai: Either I>) => Either { - return (ufai) => - isLeft(ua) ? ua : isLeft(ufai) ? ufai : right(ufai.right(ua.right)); -} - -export function flatmap( - fati: (a: A) => Either, -): (ta: Either) => Either { - return (ta) => isLeft(ta) ? ta : fati(ta.right); -} - -export function flatmapFirst( - faui: (a: A) => Either, -): (ta: Either) => Either { - return (ua) => { - if (isLeft(ua)) { - return ua; - } else { - const ui = faui(ua.right); - return isLeft(ui) ? ui : ua; - } - }; -} - -export function recover( - fbui: (b: B) => Either, -): (ua: Either) => Either { - return (ua) => isRight(ua) ? ua : fbui(ua.left); -} - -export function alt( - tb: Either, -): (ta: Either) => Either { - return (ta) => isLeft(ta) ? tb : ta; -} - -export function reduce( - foao: (o: O, a: A) => O, - o: O, -): (ta: Either) => O { - return (ta) => isLeft(ta) ? o : foao(o, ta.right); -} - -export function traverse( - A: Applicable & Mappable & Wrappable, -): ( - faui: (a: A) => $, -) => (ta: Either) => $, J, K], [L], [M]> { - //deno-lint-ignore no-explicit-any - const onLeft: any = flow(left, A.wrap); - //deno-lint-ignore no-explicit-any - const mapRight: any = A.map(right); - return (faui) => match(onLeft, flow(faui, mapRight)); -} - -export const ApplicableEither: Applicable = { apply, map, wrap }; - -export const BimappableEither: Bimappable = { map, mapSecond }; - -export const FailableEither: Failable = { - alt, - apply, - fail, - flatmap, - map, - recover, - wrap, -}; - -export const FlatmappableEither: Flatmappable = { - apply, - flatmap, - map, - wrap, -}; - -export const MappableEither: Mappable = { map }; - -export const ReducibleEither: Reducible = { reduce }; - -export const TraversableEither: Traversable = { - map, - reduce, - traverse, -}; - -export const WrappableEither: Wrappable = { wrap }; diff --git a/vendor/deno.land/x/fun@v2.0.0-alpha.15/failable.ts b/vendor/deno.land/x/fun@v2.0.0-alpha.15/failable.ts deleted file mode 100644 index 6dd27f9..0000000 --- a/vendor/deno.land/x/fun@v2.0.0-alpha.15/failable.ts +++ /dev/null @@ -1,55 +0,0 @@ -/** - * Failable is a compound structure. It represents the idea of failure. As such - * it includes methods for creating a `failed` data, providing alternative - * data, and recovering from a failed state (effectively flatMapping from the - * failed value). - * - * @module Failable - * @since 2.0.0 - */ - -import type { $, Hold, Kind } from "./kind.ts"; -import type { Flatmappable } from "./flatmappable.ts"; -import type { NonEmptyArray } from "./array.ts"; - -/** - * A Failable structure is a Flatmappable that allows for alternative instances, - * failures, and recovery. - * - * @since 2.0.0 - */ -export interface Failable extends Flatmappable, Hold { - readonly alt: ( - second: $, - ) => (first: $) => $; - readonly fail: ( - value: B, - ) => $; - readonly recover: ( - fbti: (b: B) => $, - ) => ( - ua: $, - ) => $; -} - -/** - * Create a tryAll function from an instance of Failable. The tryAll function - * allows the trying any number of Failable structures in order until a - * non-failed one is found. - * - * @since 2.0.0 - */ -export function createTryAll( - { alt }: Failable, -): ( - ...uas: NonEmptyArray<$> -) => $ { - return (...uas) => { - const [head, ...tail] = uas; - let out = head; - for (const ua of tail) { - out = alt(ua)(out); - } - return out; - }; -} diff --git a/vendor/deno.land/x/fun@v2.0.0-alpha.15/filterable.ts b/vendor/deno.land/x/fun@v2.0.0-alpha.15/filterable.ts deleted file mode 100644 index f2da677..0000000 --- a/vendor/deno.land/x/fun@v2.0.0-alpha.15/filterable.ts +++ /dev/null @@ -1,217 +0,0 @@ -/** - * Filterable is a structure that allows one to remove or refine a data - * structure. - * - * @module Filterable - * @since 2.0.0 - */ - -import type { $, Hold, Kind } from "./kind.ts"; -import type { Either } from "./either.ts"; -import type { Mappable } from "./mappable.ts"; -import type { Option } from "./option.ts"; -import type { Pair } from "./pair.ts"; -import type { Predicate } from "./predicate.ts"; -import type { Refinement } from "./refinement.ts"; - -import { getLeft, getRight } from "./either.ts"; -import { flow, pipe } from "./fn.ts"; - -/** - * A Filterable structure allows one to filter over the values contained in the - * structure. This includes standard filter, filterMap, partition, and - * partitionMap. - * - * @since 2.0.0 - */ -export interface Filterable extends Hold { - readonly filter: { - ( - refinement: Refinement, - ): ( - ta: $, - ) => $; - ( - predicate: Predicate, - ): ( - ta: $, - ) => $; - }; - readonly filterMap: ( - fai: (a: A) => Option, - ) => ( - ua: $, - ) => $; - readonly partition: { - ( - refinement: Refinement, - ): ( - ta: $, - ) => Pair<$, $>; - ( - predicate: Predicate, - ): ( - ta: $, - ) => Pair<$, $>; - }; - readonly partitionMap: ( - fai: (a: A) => Either, - ) => ( - ua: $, - ) => Pair<$, $>; -} - -/** - * @since 2.0.0 - */ -export function filter( - { map }: Mappable, - { filter }: Filterable, -): ( - predicate: Predicate, -) => < - B = never, - C = never, - D = unknown, - E = unknown, - J = never, - K = never, - L = unknown, - M = unknown, ->( - ua: $, J, K], [L], [M]>, -) => $, J, K], [L], [M]> { - return (predicate) => (uva) => pipe(uva, map(filter(predicate))); -} - -/** - * @since 2.0.0 - */ -export function filterMap( - { map }: Mappable, - { filterMap }: Filterable, -): ( - predicate: (a: A) => Option, -) => < - B = never, - C = never, - D = unknown, - E = unknown, - J = never, - K = never, - L = unknown, - M = unknown, ->( - ua: $, J, K], [L], [M]>, -) => $, J, K], [L], [M]> { - return (predicate) => (uva) => pipe(uva, map(filterMap(predicate))); -} - -/** - * @since 2.0.0 - */ -export function partition( - M: Mappable, - F: Filterable, -): ( - predicate: Refinement, -) => < - B = never, - C = never, - D = unknown, - E = unknown, - J = never, - K = never, - L = unknown, - M = unknown, ->( - ua: $, J, K], [L], [M]>, -) => Pair< - $, J, K], [L], [M]>, - $, J, K], [L], [M]> ->; -export function partition( - M: Mappable, - F: Filterable, -): ( - predicate: Predicate, -) => < - B = never, - C = never, - D = unknown, - E = unknown, - J = never, - K = never, - L = unknown, - M = unknown, ->( - ua: $, J, K], [L], [M]>, -) => Pair< - $, J, K], [L], [M]>, - $, J, K], [L], [M]> ->; -export function partition( - M: Mappable, - F: Filterable, -): ( - predicate: Predicate, -) => < - B = never, - C = never, - D = unknown, - E = unknown, - J = never, - K = never, - L = unknown, - M = unknown, ->( - ua: $, J, K], [L], [M]>, -) => Pair< - $, J, K], [L], [M]>, - $, J, K], [L], [M]> -> { - const _filter = filter(M, F); - // TODO: Figure this overload out :/ - return (predicate) => { - // deno-lint-ignore no-explicit-any - const first = _filter(predicate as any); - // deno-lint-ignore no-explicit-any - const second = _filter(((a: any) => !predicate(a)) as any); - // deno-lint-ignore no-explicit-any - return (uva) => [first(uva), second(uva)] as any; - }; -} - -/** - * @since 2.0.0 - */ -export function partitionMap( - M: Mappable, - F: Filterable, -): ( - fai: (a: A) => Either, -) => < - B = never, - C = never, - D = unknown, - E = unknown, - J = never, - K = never, - L = unknown, - M = unknown, ->( - ua: $, J, K], [L], [M]>, -) => Pair< - $, J, K], [L], [M]>, - $, J, K], [L], [M]> -> { - const _filterMap = filterMap(M, F); - return (predicate) => { - const first = flow(predicate, getRight); - const second = flow(predicate, getLeft); - return (uva) => [ - pipe(uva, _filterMap(first)), - pipe(uva, _filterMap(second)), - ]; - }; -} diff --git a/vendor/deno.land/x/fun@v2.0.0-alpha.15/flatmappable.ts b/vendor/deno.land/x/fun@v2.0.0-alpha.15/flatmappable.ts deleted file mode 100644 index 3bc9c85..0000000 --- a/vendor/deno.land/x/fun@v2.0.0-alpha.15/flatmappable.ts +++ /dev/null @@ -1,127 +0,0 @@ -/** - * Flatmappable is a structure that allows a function that returns the concrete - * structure to be applied to the value inside of the same type of concrete - * structure. The resultant nested structure is then flattened. - * - * @module Flatmappable - * @since 2.0.0 - */ - -import type { $, Hold, Kind } from "./kind.ts"; -import type { Applicable } from "./applicable.ts"; - -import { pipe } from "./fn.ts"; - -/** - * A Flatmappable structure. - */ -export interface Flatmappable extends Applicable, Hold { - readonly flatmap: ( - fati: (a: A) => $, - ) => ( - ta: $, - ) => $; -} - -/** - * Create a tap function for a structure with instances of Wrappable and - * Flatmappable. A tap function allows one to break out of the functional - * codeflow. It is generally not advised to use tap for code flow but to - * consider an escape hatch to do things like tracing or logging. - * - * @since 2.0.0 - */ -export function createTap( - { wrap, flatmap }: Flatmappable, -): ( - fn: (value: A) => void, -) => ( - ua: $, -) => $ { - return (fn) => - flatmap((a) => { - fn(a); - return wrap(a); - }); -} - -/** - * Create a bind function for a structure with instances of Mappable and - * Flatmappable. A bind function allows one to flatmap into named fields in a - * struct, collecting values from the result of the flatmap in the order that - * they are completed. - * - * @since 2.0.0 - */ -export function createBind({ flatmap, map }: Flatmappable): < - N extends string, - A, - I, - J = never, - K = never, - L = unknown, - M = unknown, ->( - name: Exclude, - faui: (a: A) => $, -) => ( - ua: $, -) => $< - U, - [{ readonly [K in keyof A | N]: K extends keyof A ? A[K] : I }, B | J, C | K], - [D & L], - [M] -> { - return (name, faui) => - flatmap((a) => - // deno-lint-ignore no-explicit-any - map((i) => Object.assign({}, a, { [name]: i }) as any)(faui(a)) - ); -} - -/** - * Derive a Flatmappable instance from unwrap, flatmap, and a Kind. - * This is the simplest way to get a Flatmappable instance. - * - * @example - * ```ts - * import type { Kind, Out } from "./kind.ts"; - * import { createFlatmappable } from "./flatmappable.ts"; - * import { pipe } from "./fn.ts"; - * - * // Create a Kind for Promise - * interface KindPromise extends Kind { - * readonly kind: Promise>; - * }; - * - * // Create an of and chain function for Promise - * const wrap = (a: A): Promise => Promise.resolve(a); - * const flatmap = (faui: (a: A) => Promise) => - * (ua: Promise): Promise => ua.then(faui); - * - * // Derive a Flatmappable for Promise - * const M = createFlatmappable({ wrap, flatmap }); - * - * const result = await pipe( - * M.wrap((n: number) => (m: number) => n + m), - * M.apply(M.wrap(1)), - * M.apply(M.wrap(1)), - * ); // 2 - * ``` - * - * @experimental - * - * @since 2.0.0 - */ -export function createFlatmappable( - { wrap, flatmap }: Pick, "wrap" | "flatmap">, -): Flatmappable { - const Flatmappable: Flatmappable = { - wrap, - apply: (ua) => (ufai) => - pipe(ufai, flatmap((fab) => pipe(ua, Flatmappable.map(fab)))), - map: (fai) => (ta) => pipe(ta, flatmap((a) => wrap(fai(a)))), - flatmap, - }; - return Flatmappable; -} diff --git a/vendor/deno.land/x/fun@v2.0.0-alpha.15/fn.ts b/vendor/deno.land/x/fun@v2.0.0-alpha.15/fn.ts deleted file mode 100644 index 5d1c2b1..0000000 --- a/vendor/deno.land/x/fun@v2.0.0-alpha.15/fn.ts +++ /dev/null @@ -1,873 +0,0 @@ -import type { In, Kind, Out } from "./kind.ts"; -import type { Premappable } from "./premappable.ts"; -import type { Mappable } from "./mappable.ts"; -import type { Flatmappable } from "./flatmappable.ts"; -import type { Applicable } from "./applicable.ts"; - -/** - * A Fn, also known as Reader or Environment, is a type over a - * javascript function. ie. (a: number, b: string) => string can be - * a Fn. As an algebraic data type, the associated type class instances - * for Fn are limited to single variable inputs so they will look like - * (a: number) => string, with only one argument. The purposes of a Fn - * are many and varied, some common purposes are: computation, reading - * values from a shared environment, and sub-computations in a modified - * environment. In many ways Fn is a more powerful abstraction than - * State, and indeed the State monad in fun is exactly State = - * Fn<[S], [A, S]>. - * - * Currently, there is no implementation of Chain recursion or - * trampolining for Fn implemented, but it is likely to be a future - * feature. Once implemented Fn will gain some much needed stack safety. - * - * @since 2.0.0 - */ -export type Fn = (d: D) => A; - -/** - * A Fn type over any, useful for constraining generics that - * take or return Fns. - * - * @since 2.0.0 - */ -// deno-lint-ignore no-explicit-any -export type AnyFn = Fn; - -/** - * Specifies Fn as a Higher Kinded Type, with - * covariant parameter A corresponding to the 0th - * index of any Substitutions and a contravariant - * parameter D corresponding to the 0th index of - * any Substititions. The Fn KindFn is unique in that - * it constrains the Fn type to taking a single - * argument for the purposes of type substitution - * while the implementations of Fn combinators such - * as map, flatmap, etc are mostly variadic (multiple - * arguments). - * - * @since 2.0.0 - */ -export interface KindFn extends Kind { - readonly kind: Fn, Out>; -} - -/** - * Take a variadic Fn and make it unary, collapsing multiple arguments - * into a single tuple argument. - * - * @example - * ```ts - * import * as F from "./fn.ts"; - * - * const person = (age: number, name: string) => ({ age, name }); - * const personUnary = F.unary(person); - * - * // ({ name: "Brandon", age: 37 }) - * const result1 = personUnary([37, "Brandon"]); - * ``` - * @since 2.0.0 - */ -export function unary(fda: (...d: D) => A): Fn { - return (d) => fda(...d); -} - -/** - * @since 2.0.0 - */ -export function curry2(fn: (a: A, b: B) => C): (a: A) => (b: B) => C { - return (a) => (b) => fn(a, b); -} - -/** - * @since 2.0.0 - */ -export function uncurry2( - fn: (b: B) => (a: A) => C, -): (a: A, b: B) => C { - return (a, b) => fn(b)(a); -} - -/** - * A common pattern in optics is to apply an input value to a function at the - * beginning and the end of a computation. This can (and has) been achieved by - * the composition of Pair using flow(P.dup, P.map(fn), P.merge). But for - * performance reasons it's nice to have a straighforward function that achieves - * the same result. - * - * @since 2.0.0 - */ -export function over(faai: (a: A) => (a: A) => I): (a: A) => I { - return (a) => faai(a)(a); -} - -/** - * Wrap a thunk (a Fn that takes no arguments) in a try catch block, using - * an onThrow function (that should itself never throw) to handle a default - * case should the original function throw. This is useful for wrapping - * functions that might throw. - * - * @example - * ```ts - * import * as F from "./fn.ts"; - * - * const getZero = (): number => { - * if (Math.random() > 0.5) { - * throw new Error("Too high!"); - * } - * return 0; - * } - * - * const result = F.tryThunk(getZero, () => 0); // 0 - * ``` - * - * @since 2.0.0 - */ -export function tryThunk(ua: Fn, onThrow: Fn): A { - try { - return ua(); - } catch (err) { - return onThrow(err); - } -} - -/** - * Wrap any function in a try catch block, passing the result and - * arguments to onResult when the function does not throw as well - * as passing the error and arguments to the onThrow function when - * it does. Neither the onResult nor the onThrow functions should - * ever throw an error themselves. None of the functions in the fun - * library will throw on their own. If they do it is a bug in fun - * or the underlying runtime (or you used fun in javascript). This - * function primarily exists to wrap functions exported from other - * libraries that may use exceptions as their error mechanism. This - * makes those functions safe to use with fun. - * - * @example - * ```ts - * import * as F from "./fn.ts"; - * - * const throwOverFive = (n: number): number => { - * if (n > 5) { - * throw new Error("Larger than five"); - * } - * return n; - * } - * const caught = F.handleThrow( - * throwOverFive, - * result => result, - * err => 0, // Default to 0 - * ); - * - * const result1 = caught(0); // 0 - * const result2 = caught(5); // 5 - * const result3 = caught(6); // 0 - * ``` - * - * @since 2.0.0 - */ -export function handleThrow( - ua: (...d: D) => A, - onResult: (result: A, args: D) => I, - onThrow: (error: unknown, args: D) => I, -): (...d: D) => I { - return (...d) => { - try { - return onResult(ua(...d), d); - } catch (err) { - return onThrow(err, d); - } - }; -} - -/** - * Memoize a unary function using a Map. This - * means that this algorithm puposefully leaks memory. - * - * TODO: Extend memoize to be variadic. - * - * @example - * ```ts - * import * as F from "./fn.ts"; - * - * // Big old expensive recursive algorithm - * const fib = (n: number): number => - * n < 1 ? 0 : - * n <= 1 ? 1 : - * fib(n - 2) + fib(n - 1); - * - * const mfib = F.memoize(fib); - * - * const result1 = mfib(10); // 55 - * const result2 = mfib(10); // 55 but does not recompute - * ``` - * - * @since 2.0.0 - */ -export function memoize(ua: Fn): Fn { - const cache = new Map(); - return (d) => { - if (cache.has(d)) { - return cache.get(d) as A; - } - const a = ua(d); - cache.set(d, a); - return a; - }; -} - -/** - * A function that can be called to output any type. It's used for type - * hole based programming. This allows one to define interfaces and types - * for a function and stub them with todo() until you are ready to implement - * the actual behavior. The todo function will throw if it is ever actually - * called. - * - * @example - * ```ts - * import { todo } from "./fn.ts"; - * - * type InOut = { - * read: () => Promise, - * write: (s: string) => Promise, - * } - * - * const mockInOut: InOut = todo(); // InOut !!THROWS!! - * ``` - * - * @since 2.0.0 - */ -export function todo(): T { - throw new Error("TODO: this function has not been implemented"); -} - -/** - * Does an unsafe type coercion on any type. This is only safe when - * the types A and I have referential transparency. This is to say - * when the type A can be substituted for I and I for A at runtime - * without there being any change to the operation of the program. - * The primary use case for unsafeCoerce is in Newtype implementations. - */ -export function unsafeCoerce(a: A): I { - return a as unknown as I; -} - -/** - * The flow function is like the pipe function without the initial value. It - * composes up to 9 functions from left to right (top to bottom). The first - * function can take multiple arguments but every subsequent function must - * be unary (only take one argument). - * - * @example - * ```ts - * import { flow } from "./fn.ts"; - * - * const add = (m: number) => (n: number) => m + n; - * const multiply = (m: number) => (n: number) => m * n; - * - * const flowed = flow( - * add(1), - * multiply(2), - * add(1), - * multiply(2), - * ); - * - * const result1 = flowed(1); // 10 - * const result2 = flowed(2); // 14 - * const result3 = flowed(3); // 18 - * ``` - * - * @since 2.0.0 - */ -export function flow( - ab: (...a: A) => B, -): (...a: A) => B; -export function flow( - ab: (...a: A) => B, - bc: (b: B) => C, -): (...a: A) => C; -export function flow( - ab: (...a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, -): (...a: A) => D; -export function flow( - ab: (...a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, -): (...a: A) => E; -export function flow( - ab: (...a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, -): (...a: A) => F; -export function flow( - ab: (...a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, -): (...a: A) => G; -export function flow( - ab: (...a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, - gh: (g: G) => H, -): (...a: A) => H; -export function flow( - ab: (...a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, - gh: (g: G) => H, - hi: (h: H) => I, -): (...a: A) => I; -export function flow< - A extends unknown[], - B, - C, - D, - E, - F, - G, - H, - I, - J, ->( - ab: (...a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, - gh: (g: G) => H, - hi: (h: H) => I, - ij: (i: I) => J, -): (...a: A) => J; -export function flow< - A extends unknown[], - B, - C, - D, - E, - F, - G, - H, - I, - J, - K, ->( - ab: (...a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, - gh: (g: G) => H, - hi: (h: H) => I, - ij: (i: I) => J, - jk: (j: J) => K, -): (...a: A) => K; -export function flow< - A extends unknown[], - B, - C, - D, - E, - F, - G, - H, - I, - J, - K, - L, ->( - ab: (...a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, - gh: (g: G) => H, - hi: (h: H) => I, - ij: (i: I) => J, - jk: (j: J) => K, - kl: (k: K) => L, -): (...a: A) => L; -export function flow( - ...[ab, bc, cd, de, ef, fg, gh, hi, ij, jk, kl, ...rest]: AnyFn[] -): AnyFn { - switch (arguments.length) { - case 1: - return (...as) => ab(...as); - case 2: - return (...as) => bc(ab(...as)); - case 3: - return (...as) => cd(bc(ab(...as))); - case 4: - return (...as) => de(cd(bc(ab(...as)))); - case 5: - return (...as) => ef(de(cd(bc(ab(...as))))); - case 6: - return (...as) => fg(ef(de(cd(bc(ab(...as)))))); - case 7: - return (...as) => gh(fg(ef(de(cd(bc(ab(...as))))))); - case 8: - return (...as) => hi(gh(fg(ef(de(cd(bc(ab(...as)))))))); - case 9: - return (...as) => ij(hi(gh(fg(ef(de(cd(bc(ab(...as))))))))); - case 10: - return (...as) => jk(ij(hi(gh(fg(ef(de(cd(bc(ab(...as)))))))))); - case 11: - return (...as) => kl(jk(ij(hi(gh(fg(ef(de(cd(bc(ab(...as))))))))))); - default: - return (...as) => - rest.reduce( - (val, fn) => fn(val), - kl(jk(ij(hi(gh(fg(ef(de(cd(bc(ab(...as))))))))))), - ); - } -} - -/** - * The pipe takes a value as the first argument and composes it with subsequent - * function arguments, returning the result of the last function passed in. It - * handles and correctly types up to 10 unary functions. Beyond 10 it makes - * sense to break up pipe into multiple pipes. - * - * @example - * ```ts - * import { pipe } from "./fn.ts"; - * - * const add = (n: number) => (m: number) => m + n; - * const multiply = (n: number) => (m: number) => m * n; - * - * const result = pipe( - * 1, - * add(1), // 2 - * multiply(2), // 4 - * add(1), // 5 - * multiply(2), // 10 - * ); // 10 - * ``` - * - * @since 2.0.0 - */ -export function pipe(a: A): A; -export function pipe(a: A, ab: (a: A) => B): B; -export function pipe(a: A, ab: (a: A) => B, bc: (b: B) => C): C; -export function pipe( - a: A, - ab: (a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, -): D; -export function pipe( - a: A, - ab: (a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, -): E; -export function pipe( - a: A, - ab: (a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, -): F; -export function pipe( - a: A, - ab: (a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, -): G; -export function pipe( - a: A, - ab: (a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, - gh: (g: G) => H, -): H; -export function pipe( - a: A, - ab: (a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, - gh: (g: G) => H, - hi: (h: H) => I, -): I; -export function pipe( - a: A, - ab: (a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, - gh: (g: G) => H, - hi: (h: H) => I, - ij: (i: I) => J, -): J; -export function pipe( - a: A, - ab: (a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, - gh: (g: G) => H, - hi: (h: H) => I, - ij: (i: I) => J, - jk: (j: J) => K, -): K; -export function pipe( - a: A, - ab: (a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, - gh: (g: G) => H, - hi: (h: H) => I, - ij: (i: I) => J, - jk: (j: J) => K, - kl: (K: K) => L, -): L; -export function pipe( - a: A, - ab: (a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, - gh: (g: G) => H, - hi: (h: H) => I, - ij: (i: I) => J, - jk: (j: J) => K, - kl: (K: K) => L, - end: never, -): L; -export function pipe( - value: unknown, - ...fns: AnyFn[] -): unknown { - return fns.reduce((val, fn) => fn(val), value); -} - -/** - * Create a Fn that always returns a value. This is equivalent to - * constant. - * - * @example - * ```ts - * import { wrap } from "./fn.ts"; - * - * const alwaysA = wrap("A"); - * - * const result = alwaysA(null); // "A" - * ``` - * - * @since 2.0.0 - */ -export function wrap(a: A): Fn { - return () => a; -} - -/** - * Create a Fn that always returns a value. This is equivalent to - * of but without the ability to specify a contravariant argument. - * - * @example - * ```ts - * import { constant } from "./fn.ts"; - * - * const alwaysA = constant("A"); - * - * const result = alwaysA(); // "A" - * ``` - * - * @since 2.0.0 - */ -export function constant(a: A): () => A { - return () => a; -} - -/** - * Given L => A => I and D => A create a new Fn - * D & L => I. In order to preserve type widening for - * ap, it only handles unary functions. - * - * @example - * ```ts - * import * as F from "./fn.ts"; - * - * type Person = { name: string, age: number }; - * - * const person = (name: string) => (age: number): Person => ({ name, age }); - * - * const result = F.pipe( - * F.wrap(person), - * F.apply(F.wrap("Brandon")), - * F.apply(F.wrap(37)), - * ); // Fn<[], Person> - * ``` - * - * @since 2.0.0 - */ -export function apply( - ua: Fn, -): (ufai: Fn I>) => Fn { - return (ufai) => (d) => ufai(d)(ua(d)); -} - -/** - * Map over the output of a Fn. This is equivalent to - * function composition. - * ie. a => pipe(f, map(g))(a) === a => g(f(a)) - * - * @example - * ```ts - * import { map, wrap, pipe } from "./fn.ts"; - * - * const result = pipe(wrap(1), map(n => n + 1)); // 2 - * ``` - * - * @since 2.0.0 - */ -export function map( - fai: (a: A) => I, -): (ta: Fn) => Fn { - return (ta) => flow(ta, fai); -} - -/** - * Create a new Fn by combining A => L => I with - * D => A to produce D & L => I. This is equivalent - * to ap with the first two arguments switched. It is - * also limited to unary functions in order to properly - * handle type widening on the input type. - * - * @example - * ```ts - * import { pipe, flatmap } from "./fn.ts"; - * const add = (n: number) => (m: number) => n + m; - * - * const flatmaper = pipe( - * (n: number) => n, - * flatmap(add), - * flatmap(add), - * flatmap(add), - * flatmap(add), - * flatmap(add), - * ); - * - * const result1 = flatmaper(1); // 6 - * const result2 = flatmaper(2); // 12 - * const result3 = flatmaper(3); // 18 - * ``` - * - * @since 2.0.0 - */ -export function flatmap( - fati: (a: A) => Fn, -): (ta: Fn) => Fn { - return (ta) => (d) => fati(ta(d))(d); -} - -/** - * Map over the input of a function, turning - * D => A and L => D into L => A. - * - * @example - * ```ts - * import { premap, pipe } from "./fn.ts"; - * - * const equalsZero = (n: number): boolean => n === 0; - * const strLength = (s: string): number => s.length; - * - * const isEmpty = pipe( - * equalsZero, - * premap(strLength), - * ); - * - * const result1 = isEmpty(""); // true - * const result2 = isEmpty("Hello"); // false - * ``` - * - * @since 2.0.0 - */ -export function premap( - fld: (l: L) => D, -): (ta: Fn) => Fn { - return (ta) => (d) => ta(fld(d)); -} - -/** - * A combination of premap and map, dimap applies fld - * to the input of a function and fai to the output. - * - * @example - * ```ts - * import type { NonEmptyArray } from "./array.ts"; - * import { dimap, pipe } from "./fn.ts"; - * import { plural, split } from "./string.ts"; - * - * const are = plural("is", "are"); - * const words = plural("word", "words"); - * const describe = (n: number) => `There ${are(n)} ${n} ${words(n)}`; - * - * const toWords = split(/\s+/g); // string => string[] - * const count = (ws: NonEmptyArray) => ws.length; - * - * const fromString = pipe( - * count, - * dimap(toWords, describe), - * ); - * - * const result1 = fromString("Hello World"); // "There are 2 words" - * const result2 = fromString("Hi"); // "There is 1 word" - * const result3 = fromString("This is a test"); // "There are 4 words" - * ``` - * - * @since 2.0.0 - */ -export function dimap( - fld: (l: L) => D, - fai: (a: A) => I, -): (ta: Fn) => Fn { - return (ta) => flow(fld, ta, fai); -} - -/** - * The canonical identity function. It returns whatever value was - * passed to it. - * - * @example - * ```ts - * import { identity } from "./fn.ts"; - * - * const result1 = identity(1); // 1 - * const result2 = identity("Hello"); // "Hello" - * ``` - * @since 2.0.0 - */ -export function identity(a: A): A { - return a; -} - -/** - * A thunk over the identity function. It allows one - * to constrain an identity to a specific type. - * - * @example - * ```ts - * import { id } from "./fn.ts"; - * - * const idString = id(); // (s: string) => string - * const idNumber = id(); // (n: number) => number - * - * const result1 = idString("Hello"); // "Hello" - * const result2 = idNumber(1); // 1 - * ``` - * - * @since 2.0.0 - */ -export function id(): Fn { - return identity; -} - -/** - * Compose two functions by taking the output of - * one and passing it to another. This is equivalent - * to the map function. - * - * @example - * ```ts - * import { compose, pipe } from "./fn.ts"; - * - * const length = (s: string) => s.length; - * const dup = (n: number) => n + n; - * - * const composed = pipe( - * length, - * compose(dup), - * ); - * - * const result1 = composed("Hello"); // 10 - * const result2 = composed(""); // 0 - * ``` - * - * @since 2.0.0 - */ -export function compose( - second: Fn, -): (first: Fn) => Fn { - return (first) => flow(first, second); -} - -// /** -// * The canonical implementation of Profunctor for Fn. It contains -// * the method dimap. -// * -// * @since 2.0.0 -// */ -// export const ProfunctorFn: Profunctor = { dimap }; - -/** - * The canonical implementation of Mappable for Fn. It contains - * the method map. - * - * @since 2.0.0 - */ -export const MappableFn: Mappable = { map }; - -/** - * The canonical implementation of Applicable for Fn. It contains - * the methods of, ap, and map. - * - * @since 2.0.0 - */ -export const ApplicableFn: Applicable = { apply, map, wrap }; - -/** - * The canonical implementation of Flatmappable for Fn. It contains - * the methods of, ap, map, join, and flatmap. - * - * @since 2.0.0 - */ -export const FlatmappableFn: Flatmappable = { - apply, - flatmap, - map, - wrap, -}; - -/** - * The canonical implementation of Premappable for Fn. It contains - * the method premap. - * - * @since 2.0.0 - */ -export const PremappableFn: Premappable = { premap }; diff --git a/vendor/deno.land/x/fun@v2.0.0-alpha.15/fn_either.ts b/vendor/deno.land/x/fun@v2.0.0-alpha.15/fn_either.ts deleted file mode 100644 index 337b96b..0000000 --- a/vendor/deno.land/x/fun@v2.0.0-alpha.15/fn_either.ts +++ /dev/null @@ -1,680 +0,0 @@ -/** - * FnEither is also known as ReaderEither. In essence a FnEither is - * a function that returns an either. This pattern can be used as - * a validation, a failable computation, a computation resulting - * in a "Choice", and many other things. - * - * @module FnEither - */ - -import type { In, Kind, Out } from "./kind.ts"; -import type { Bimappable } from "./bimappable.ts"; -import type { Flatmappable } from "./flatmappable.ts"; -import type { Combinable } from "./combinable.ts"; -import type { Premappable } from "./premappable.ts"; -import type { Predicate } from "./predicate.ts"; -import type { Refinement } from "./refinement.ts"; -import type { Fn } from "./fn.ts"; -import type { Either } from "./either.ts"; - -import * as E from "./either.ts"; -import * as F from "./fn.ts"; - -/** - * A FnEither, also known as ReaderEither, is a type over a variadic - * javascript function that returns an Either. - * ie. (a: number, b: string) => Either can be - * a FnEither. As an algebraic data type, the associated type class - * instances for Fn are limited to single variable inputs so they will - * look like (a: number) => Either, with only one - * argument. The purposes of a FnEither are many and varied, some - * common purposes are: failable computation, reading values from a - * shared environment, and sub-computations in a modified - * environment. - * - * Currently, there is no implementation of Chain recursion or - * trampolining for FnEIther implemented, but it is likely to be a future - * feature. Once implemented Fn will gain some much needed stack safety. - * - * @since 2.0.0 - */ -export type FnEither = Fn>; - -/** - * A FnEither type over any, useful for constraining generics that - * take or return FnEithers. - * - * @since 2.0.0 - */ -// deno-lint-ignore no-explicit-any -export type AnyFnEither = FnEither; - -/** - * Specifies FnEither as a Higher Kinded Type, with - * covariant parameter A and B corresponding to the 0th - * and 1st indices of any Substitutions and a contravariant - * parameter D corresponding to the 0th index of - * any Substititions. The FnEither KindFnEither is unique in that - * it constrains the FnEither type to taking a single - * argument for the purposes of type substitution - * while the implementations of FnEither combinators such - * as map, flatmap, etc are mostly variadic (multiple - * arguments). - * - * @since 2.0.0 - */ -export interface KindFnEither extends Kind { - readonly kind: FnEither, Out, Out>; -} - -/** - * Specifies FnEither as a Higher Kinded Type, with - * covariant parameter A corresponding to the 0th - * index of any Substitutions and a contravariant - * parameter D corresponding to the 0th index of - * any Substititions. KindRightFnEither curries the Left parameter - * of the output Either. This is useful when one - * needs to Fix the Left output with a Combinable or - * some other collection algebraic structure. - * - * @since 2.0.0 - */ -export interface KindRightFnEither extends Kind { - readonly kind: FnEither, B, Out>; -} - -/** - * Wrap any function in a try catch block. The returned - * function will lazily call and handle any throwing of - * the wrapped function. Non-throwing calls will be - * returned in a Right, and throwing calls will have - * their error and arguments passed to the onThrow function - * before being returned in a Left. - * - * @example - * ```ts - * import { tryCatch } from "./fn_either.ts"; - * import { todo } from "./fn.ts"; - * - * const throws = tryCatch(todo, () => "Failed!"); - * const returns = tryCatch((n: number) => n, () => "Failed!"); - * - * const result1 = throws()(0); // Left("Failed!"); - * const result2 = returns(1)(0); // Right(1); - * ``` - * - * @since 2.0.0 - */ -export function tryCatch( - ua: (...d: D) => A, - onThrow: (e: unknown, d: D) => B, -): (...d: D) => FnEither { - return F.handleThrow( - ua, - right, - (e, d) => left(onThrow(e, d)), - ); -} - -/** - * Create a FnEither that always returns a Left(B). - * - * @example - * ```ts - * import { left } from "./fn_either.ts"; - * - * const leftNumber = left(1); - * - * const result = leftNumber(0); // Left(1); - * ``` - * - * @since 2.0.0 - */ -export function left( - left: B, -): FnEither { - return F.wrap(E.left(left)); -} - -/** - * Create a FnEither that always returns a Right(A). - * - * @example - * ```ts - * import { right } from "./fn_either.ts"; - * - * const rightNumber = right(1); - * - * const result = rightNumber(null); // Right(1); - * ``` - * - * @since 2.0.0 - */ -export function right( - right: A, -): FnEither { - return F.wrap(E.right(right)); -} - -/** - * Turn an Either into a FnEither. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import * as E from "./either.ts"; - * - * const left = E.left(1); - * const right = E.right(1); - * - * const fnLeft = FE.fromEither(left); - * const fnRight = FE.fromEither(right); - * - * const result1 = fnLeft(null); // Left(1); - * const result2 = fnRight(null); // Right(1); - * ``` - * - * @since 2.0.0 - */ -export function fromEither( - ua: Either, -): FnEither { - return F.wrap(ua); -} - -/** - * Lift a Fn into FnEither<[D], never, A> - * - * @example - * ```ts - * import { fromFn } from "./fn_either.ts"; - * - * const double = (first: number) => first + first; - * const lifted = fromFn(double); - * - * const result = lifted(1); // Right(2) - * ``` - * - * @since 2.0.0 - */ -export function fromFn( - fda: Fn, -): FnEither { - return F.flow(fda, E.right); -} - -/** - * Create a FnEither from a Predicate or a Refinement. - * If the Predicate or Refinement returns true then the - * FnEither returns Right, otherwise it returns Left. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import { pipe } from "./fn.ts"; - * - * const isPositive = (n: number) => n > 0; - * const computation = FE.fromPredicate(isPositive); - * - * const result1 = computation(0); // Left(0) - * const result2 = computation(1); // Right(1) - * ``` - * - * @since 2.0.0 - */ -export function fromPredicate( - refinement: Refinement, -): FnEither; -export function fromPredicate( - predicate: Predicate, -): FnEither; -export function fromPredicate( - predicate: Predicate, -): FnEither { - return (a) => predicate(a) ? E.right(a) : E.left(a); -} - -/** - * An alias for right. Creates a FnEither from a value. The created - * FnEither does not require any arguments, but can widen when used - * in a flatmap. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import { pipe } from "./fn.ts"; - * - * const computation = pipe( - * FE.id(), // Ask for a number - * FE.map(n => n + 1), // Add one - * FE.flatmap(_ => FE.wrap("Hello")), // Forget about the number - * ); - * - * const result = computation(1); // Right("Hello") - * ``` - * - * @since 2.0.0 - */ -export function wrap( - a: A, -): FnEither { - return right(a); -} - -/** - * Given a FnEither returning a function A => I and a FnEither returning - * a value A, combine them into a FnEither returning an I. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import { pipe } from "./fn.ts"; - * - * type Person = { name: string; age: number }; - * - * const person = (name: string) => (age: number): Person => ({ name, age }); - * - * const result = pipe( - * FE.wrap(person), - * FE.apply(FE.wrap("Brandon")), - * FE.apply(FE.wrap(37)), - * ); // FnEither<[], never, Person> - * ``` - * - * @since 2.0.0 - */ -export function apply( - ua: FnEither, -): (ufai: FnEither I>) => FnEither { - return (ufai) => (d) => F.pipe(ufai(d), E.apply(ua(d))); -} - -/** - * Provide an alternative FnEither in the event that an original - * FnEither returns Left. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * FE.left("Oh no I broke!"), - * FE.alt(FE.right("But I work")), - * )(null); // Right("But I work") - * ``` - * - * @since 2.0.0 - */ -export function alt( - ub: FnEither, -): (ua: FnEither) => FnEither { - return (ua) => (d) => { - const e = ua(d); - return E.isLeft(e) ? ub(d) : e; - }; -} - -/** - * Map over the left and right return values of a FnEither. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import * as E from "./either.ts"; - * import { pipe } from "./fn.ts"; - * - * const boundedValue = (n: number) => n > 10 || n < 0 ? E.left(n) : E.right(n); - * - * const log = pipe( - * boundedValue, - * FE.bimap(n => `Out of bounds: ${n}`, n => `Received a good value: ${n}`), - * ); - * - * const result1 = log(1); // Right("Received a good value: 1") - * const result2 = log(20); // Left("Out of bounds: 20") - * ``` - * - * @since 2.0.0 - */ -export function bimap( - fbj: (b: B) => J, - fai: (a: A) => I, -): ( - ua: FnEither, -) => FnEither { - return F.map(E.bimap(fbj, fai)); -} - -/** - * Map over the right return value of a FnEither. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * FE.id(), - * FE.map(n => n + 1), - * )(0); // Right(1) - * ``` - * - * @since 2.0.0 - */ -export function map( - fai: (a: A) => I, -): ( - ua: FnEither, -) => FnEither { - return F.map(E.map(fai)); -} - -/** - * Map over the left return value of a FnEither. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import { pipe } from "./fn.ts"; - * - * const result1 = pipe( - * FE.id(), - * FE.mapSecond((n: number) => n + 1), - * )(0); // Right(0) - * - * const result2 = pipe( - * FE.idLeft(), - * FE.mapSecond(n => n + 1), - * )(0); // Left(1) - * ``` - * - * @since 2.0.0 - */ -export function mapSecond( - fbj: (b: B) => J, -): ( - ua: FnEither, -) => FnEither { - return F.map(E.mapSecond(fbj)); -} - -/** - * Flatten nested FnEithers with the same input and - * left types. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * FE.right(FE.right(1)), - * FE.join, - * )(null); // Right(1) - * ``` - * - * @since 2.0.0 - */ -export function join( - tua: FnEither>, -): FnEither { - return (d) => F.pipe(tua(d), E.flatmap((fn) => fn(d))); -} - -/** - * Chain the right result of one FnEither into another - * FnEither. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * FE.id(), - * FE.flatmap(s => FE.right(s.length)), - * )("Hello"); // Right(5) - * ``` - * - * @since 2.0.0 - */ -export function flatmap( - fati: (a: A) => FnEither, -): ( - ua: FnEither, -) => FnEither { - return (ua) => (d) => { - const e = ua(d); - return E.isLeft(e) ? e : fati(e.right)(d); - }; -} - -/** - * Chain the left result of one FnEither into another - * FnEither. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * FE.id(), - * FE.flatmap(s => FE.left(s.length)), - * FE.recover(n => FE.right(String(n))), - * )("Hello"); // Right("5") - * ``` - * - * @since 2.0.0 - */ -export function recover( - fbtj: (b: B) => FnEither, -): ( - ua: FnEither, -) => FnEither { - return (ua) => (d) => { - const e = ua(d); - return E.isRight(e) ? e : fbtj(e.left)(d); - }; -} - -/** - * Map over the input value of a FnEither. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import { pipe } from "./fn.ts"; - * - * // This has type FnEither<[Date], never, number> - * const computation = pipe( - * FE.id(), - * FE.premap((d: Date) => d.valueOf()), - * ); - * - * const result = computation(new Date(0)); // Right(0) - * ``` - * - * @since 2.0.0 - */ -export function premap( - fld: (l: L) => D, -): (ua: FnEither) => FnEither { - return (ua) => F.flow(fld, ua); -} - -/** - * Map over the input of a FnEither contravariantly and the - * right result of a FnEither covariantly. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import { pipe } from "./fn.ts"; - * - * // This has type FnEither<[Date], never, string> - * const computation = pipe( - * FE.id(), - * FE.dimap( - * (d: Date) => d.valueOf(), - * String, - * ), - * ); - * - * const result = computation(new Date(0)); // Right('0') - * ``` - * - * @since 2.0.0 - */ -export function dimap( - fld: (l: L) => D, - fai: (a: A) => I, -): (ua: FnEither) => FnEither { - return F.flow(premap(fld), map(fai)); -} - -/** - * Perform the same function as Reader ask. Given a type A - * (and optionally a type B), return a FnEither<[A], B, A>. - * This is useful for starting a FnEither flatmap. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import { pipe } from "./fn.ts"; - * - * const computation = FE.id(); - * - * const result1 = computation(1); // Right(1); - * const result2 = computation(2); // Right(2); - * ``` - * - * @since 2.0.0 - */ -export function id(): FnEither { - return E.right; -} - -/** - * Perform the same function as Reader askLeft. Given a type B - * (and optionally a type A), return a FnEither<[B], B, A>. - * This is useful for starting a FnEither flatmap with a left value. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import { pipe } from "./fn.ts"; - * - * const computation = FE.idLeft(); - * - * const result1 = computation(1); // Left(1); - * const result2 = computation(2); // Left(2); - * ``` - * - * @since 2.0.0 - */ -export function idLeft(): FnEither { - return E.left; -} - -/** - * Compose two FnEithers, passing the right value of the first - * into the second. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import { pipe } from "./fn.ts"; - * - * const isPositive = (n: number) => n > 0; - * const isInteger = (n: number) => Number.isInteger(n); - * - * const isPositiveInteger = pipe( - * FE.fromPredicate(isPositive), - * FE.compose(FE.fromPredicate(isInteger)), - * ); - * - * const result1 = isPositiveInteger(0); // Left(0) - * const result2 = isPositiveInteger(1); // Right(1) - * const result3 = isPositiveInteger(1.1); // Left(1.1) - * ``` - * - * @since 2.0.0 - */ -export function compose( - second: FnEither, -): ( - first: FnEither, -) => FnEither { - return (first) => F.flow(first, E.flatmap(second)); -} - -/** - * The canonical implementation of Bimappable for FnEither. It contains - * the methods bimap and mapSecond. - * - * @since 2.0.0 - */ -export const BimappableFnEither: Bimappable = { - map, - mapSecond, -}; - -/** - * The canonical implementation of Flatmappable for FnEither. It contains - * the methods wrap, apply, map, and flatmap. - * - * @since 2.0.0 - */ -export const FlatmappableFnEither: Flatmappable = { - wrap, - apply, - map, - flatmap, -}; - -/** - * The canonical implementation of Premappable for FnEither. It contains - * the method premap. - * - * @since 2.0.0 - */ -export const PremappableFnEither: Premappable = { premap }; - -/** - * Create a Flatmappable for FnEither where left values are combined using the - * supplied Combinable. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import { InitializableNumberSum } from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const { apply } = FE.getRightFlatmappable(InitializableNumberSum); - * - * const result1 = pipe( - * FE.left(1), - * apply(FE.left(1)), - * ); // Left(2) - * ``` - * - * @since 2.0.0 - */ -export function getRightFlatmappable( - { combine }: Combinable, -): Flatmappable> { - return ({ - wrap, - apply: (ua) => (ufai) => (c) => { - const efai = ufai(c); - const ea = ua(c); - return E.isLeft(efai) - ? (E.isLeft(ea) ? E.left(combine(efai.left)(ea.left)) : efai) - : (E.isLeft(ea) ? ea : E.right(efai.right(ea.right))); - }, - map, - flatmap, - }); -} diff --git a/vendor/deno.land/x/fun@v2.0.0-alpha.15/initializable.ts b/vendor/deno.land/x/fun@v2.0.0-alpha.15/initializable.ts deleted file mode 100644 index 3f7a9c7..0000000 --- a/vendor/deno.land/x/fun@v2.0.0-alpha.15/initializable.ts +++ /dev/null @@ -1,170 +0,0 @@ -/** - * Initializable is a structure that has a init value. It is meant to fill the - * - * @module Initializable - * @since 2.0.0 - */ - -import type { Combinable } from "./combinable.ts"; -import type { AnyReadonlyRecord } from "./record.ts"; - -import * as C from "./combinable.ts"; -import { pipe, uncurry2 } from "./fn.ts"; - -/** - * A Initializable structure has the method init. - * - * @since 2.0.0 - */ -export interface Initializable extends Combinable { - readonly init: () => A; -} - -/** - * A type for Initializable over any fixed value, useful as an extension target - * for functions that take any Initializable and do not need to unwrap the - * type. - * - * @since 2.0.0 - */ -// deno-lint-ignore no-explicit-any -export type AnyInitializable = Initializable; - -/** - * A type level unwrapor, used to pull the inner type from a Combinable. - * - * @since 2.0.0 - */ -export type TypeOf = T extends Initializable ? A : never; - -/** - * Create an Initializable fixed to a concrete value A. This operates like init - * from Combinable in other functional libraries. - * - * @since 2.0.0 - */ -export function constant(value: A): Initializable { - return { init: () => value, combine: () => () => value }; -} - -/** - * Create an Initializable fixed to a struct using nested Initializables to - * create the init values within. - * - * @since 2.0.0 - */ -export function struct( - initializables: { [K in keyof O]: Initializable }, -): Initializable<{ readonly [K in keyof O]: O[K] }> { - type Entries = [keyof O, typeof initializables[keyof O]][]; - return ({ - init: () => { - const r = {} as Record; - for (const [key, { init }] of Object.entries(initializables) as Entries) { - r[key] = init(); - } - return r as { [K in keyof O]: O[K] }; - }, - ...C.struct(initializables), - }); -} - -/** - * Create an Initializable fixed to a tuple using nested Initializables to - * create the init values within. - * - * @since 2.0.0 - */ -export function tuple( - ...initializables: T -): Initializable<{ readonly [K in keyof T]: TypeOf }> { - return { - init: () => initializables.map(({ init }) => init()), - ...C.tuple(...initializables), - } as Initializable<{ readonly [K in keyof T]: TypeOf }>; -} - -/** - * Create a dual Initializable from an existing initializable. This effectively - * switches the order of application of the original Initializable. - * - * @example - * ```ts - * import { dual, getCombineAll, intercalcate } from "./initializable.ts"; - * import { InitializableString } from "./string.ts"; - * import { pipe } from "./fn.ts"; - * - * const reverse = dual(InitializableString); - * const reverseAll = pipe( - * reverse, - * intercalcate(" "), - * getCombineAll, - * ); - * - * const result = reverseAll("Hello", "World"); // "World Hello" - * ``` - * - * @since 2.0.0 - */ -export function dual(M: Initializable): Initializable { - return ({ - combine: C.dual(M).combine, - init: M.init, - }); -} - -/** - * Create a initializable that works like Array.join, - * inserting middle between every two values - * that are combineenated. This can have some interesting - * results. - * - * @example - * ```ts - * import * as M from "./initializable.ts"; - * import * as S from "./string.ts"; - * import { pipe } from "./fn.ts"; - * - * const { combine: toList } = pipe( - * S.InitializableString, - * M.intercalcate(", "), - * ); - * - * const list = pipe( - * "apples", - * toList("oranges"), - * toList("and bananas"), - * ); // list === "apples, oranges, and bananas" - * ``` - * - * @since 2.0.0 - */ -export function intercalcate(middle: A) { - return (M: Initializable): Initializable => ({ - combine: (right) => M.combine(pipe(middle, M.combine(right))), - init: M.init, - }); -} -/** - * Given an Initializable, create a function that will - * iterate through an array of values and combine - * them. This is not much more than Array.reduce(combine). - * - * @example - * ```ts - * import * as I from "./initializable.ts"; - * import * as N from "./number.ts"; - * - * const sumAll = I.getCombineAll(N.InitializableNumberSum); - * - * const result = sumAll(1, 30, 80, 1000, 52, 42); // sum === 1205 - * ``` - * - * @since 2.0.0 - */ -export function getCombineAll( - { combine, init }: Initializable, -): (...as: ReadonlyArray) => A { - const _combine = uncurry2(combine); - return (...as) => as.reduce(_combine, init()); -} diff --git a/vendor/deno.land/x/fun@v2.0.0-alpha.15/kind.ts b/vendor/deno.land/x/fun@v2.0.0-alpha.15/kind.ts deleted file mode 100644 index 1516f72..0000000 --- a/vendor/deno.land/x/fun@v2.0.0-alpha.15/kind.ts +++ /dev/null @@ -1,152 +0,0 @@ -/** - * Kind is a collection of types used for doing something called Type - * Substitution. The core idea here is that sometimes there is a function that - * is generic at two levels, at the concrete type as well as at the type leve. - * A simple example of this is a *forEach* function. In javascript the built in - * *Array* and *Set* data structures both have a built in *forEach* method. If - * we look at Array and Set we can see that the creation functions are similar. - * - * * `const arr = new Array()` returns Array; - * * `const set = new Set()` returns Set; - * - * If we look at the type signitures on forEach for `arr` and `set` we also - * notice a similar pattern. - * - * * `type A = (typeof arr)['forEach']` returns `(callbackfn: (value: number, index: number, array: number[]) => void, thisArg?: any) => void` - * * `type B = (typeof set)['forEach']` returns `(callbackfn: (value: number, value2: number, set: Set) => void, thisArg?: any) => void` - * - * Both forEach methods have the same concrete value of `number` but differ in - * that they operate over an Array or a Set. Here is a table to illustrate this - * pattern a bit more clearly. - * - * | Structure | Outer Type | Inner Type | forEach Type | - * | --- | --- | --- | --- | - * | Array | Array | A | (value: A, index: number, struct: A[]) => void | - * | Set | Set | A | (value: A, index: number, struct: Set) => void | - * | Map | Map | K (key), V (value) | (value: V, key: K, struct: Map) => void | - * - * In general we can see that the forEach function could have a more generic - * type signiture like this: - * - * ``` - * type ForEach = { - * forEach: (struct: Outer) => (value: V, key: K, struct: Outer) => void; - * } - * ``` - * - * Unfortunately, while these types of patterns are abundant within TypeScript - * (and most programming languages). The ability to pass generic types around - * and fill type holes is not built into TypeScript. However, with some type - * magic we can create our own type level substitutions using methods pionered - * by [gcanti](https://github.com/gcanti) in *fp-ts*. - * - * @module Kind - * @since 2.0.0 - */ - -/** - * The Substitutions type splits the different type level substitutions into - * tuples based on variance. - */ -export type Substitutions = { - // Covariant Substitutions: () => A - readonly ["out"]: unknown[]; - // Premappable Substitutions: (A) => void - readonly ["in"]: unknown[]; - // Invariant Substitutions: (A) => A - readonly ["inout"]: unknown[]; -}; - -/** - * Kind is an interface that can be extended - * to retrieve inner types using "this". - */ -export interface Kind extends Substitutions { - readonly kind?: unknown; -} - -/** - * Substitute is a substitution type, taking a Kind implementation T and - * substituting it with types passed in S. - */ -export type Substitute = T extends - { readonly kind: unknown } - // If the kind property on T is required (no ?) then proceed with substitution - ? (T & S)["kind"] - // Otherwise carry T and the substitutions forward, preserving variance. - : { - readonly T: T; - readonly ["out"]: () => S["out"]; - readonly ["in"]: (_: S["in"]) => void; - readonly ["inout"]: (_: S["inout"]) => S["inout"]; - }; - -/** - * $ is an alias of Substitute, lifting out, in, and inout - * substitutions to positional type parameters. - */ -export type $< - T extends Kind, - Out extends unknown[], - In extends unknown[] = [never], - InOut extends unknown[] = [never], -> = Substitute; - -/** - * Access the Covariant substitution type at index N - */ -export type Out = T["out"][N]; - -/** - * Access the Premappable substitution type at index N - */ -export type In = T["in"][N]; - -/** - * Access the Invariant substitution type at index N - */ -export type InOut = T["inout"][N]; - -/** - * Fix a concrete type as a non-substituting Kind. This allows one to define - * algebraic structures over things like number, string, etc. - */ -export interface Fix extends Kind { - readonly kind: A; -} - -/** - * Create a scoped symbol for use with Hold. - */ -const HoldSymbol = Symbol("Hold"); -type HoldSymbol = typeof HoldSymbol; - -/** - * The Hold interface allows one to trick the typescript compiler into holding - * onto type information that it would otherwise discard. This is useful when - * creating an interface that merges multiple type classes (see Flatmappable). - */ -export interface Hold { - readonly [HoldSymbol]?: A; -} - -/** - * Spread the keys of a struct union into a single struct. - */ -export type Spread = { [K in keyof A]: A[K] } extends infer B ? B : never; - -/** - * An extension type to be used to constrain in input to an outer container with - * any concrete types. - */ -// deno-lint-ignore no-explicit-any -export type AnySub = $; - -/** - * A type level utility that turns a type union into a type intersection. This - * type is dangerous and can have unexpected results so extra runtime testing is - * necessary when used. - */ -// deno-lint-ignore no-explicit-any -export type Intersect = (U extends any ? (k: U) => void : never) extends - ((k: infer I) => void) ? I : never; diff --git a/vendor/deno.land/x/fun@v2.0.0-alpha.15/mappable.ts b/vendor/deno.land/x/fun@v2.0.0-alpha.15/mappable.ts deleted file mode 100644 index 73f9e64..0000000 --- a/vendor/deno.land/x/fun@v2.0.0-alpha.15/mappable.ts +++ /dev/null @@ -1,42 +0,0 @@ -/** - * Mappable is a structure that allows a function to be applied inside of the - * associated concrete structure. - * - * @module Mappable - * @since 2.0.0 - */ - -import type { $, Hold, Kind } from "./kind.ts"; - -/** - * A Mappable structure has the method map. - * - * @since 2.0.0 - */ -export interface Mappable extends Hold { - readonly map: ( - fai: (value: A) => I, - ) => ( - ta: $, - ) => $; -} - -/** - * Create a bindTo function from a structure with an instance of Mappable. A - * bindTo function takes the inner value of the structure and maps it to the - * value of a struct with the given name. It is useful for lifting the value - * such that it can then be used with a `bind` function, effectively allowing - * for `Do`-like notation in typescript. - * - * @since 2.0.0 - */ -export function createBindTo( - { map }: Mappable, -): ( - name: N, -) => ( - ua: $, -) => $ { - // deno-lint-ignore no-explicit-any - return (name) => map((value) => ({ [name]: value }) as any); -} diff --git a/vendor/deno.land/x/fun@v2.0.0-alpha.15/nilable.ts b/vendor/deno.land/x/fun@v2.0.0-alpha.15/nilable.ts deleted file mode 100644 index f74389f..0000000 --- a/vendor/deno.land/x/fun@v2.0.0-alpha.15/nilable.ts +++ /dev/null @@ -1,104 +0,0 @@ -import type { Kind, Out } from "./kind.ts"; -import type { Predicate } from "./predicate.ts"; -import type { Showable } from "./showable.ts"; -import type { Flatmappable } from "./flatmappable.ts"; - -import { identity, pipe } from "./fn.ts"; - -export type Nil = undefined | null; - -export type Nilable = Nil | A; - -export interface KindNilable extends Kind { - readonly kind: Nilable>; -} - -export const nil: Nil = undefined; - -export function constNil(): Nilable { - return nil; -} - -export function make(a: A): Nilable { - return isNotNil(a) ? a : nil; -} - -export function fromPredicate( - predicate: Predicate, -): (ta: Nilable) => Nilable { - return (ta) => isNotNil(ta) && predicate(ta) ? ta : nil; -} - -export function tryCatch(fa: () => A): Nilable { - try { - return fa(); - } catch (_) { - return nil; - } -} - -export function match( - onNil: () => I, - onValue: (a: A) => I, -): (ta: Nilable) => I { - return (ta) => (isNil(ta) ? onNil() : onValue(ta)); -} - -export function getOrElse(onNil: () => A): (ta: Nilable) => A { - return (ta) => isNil(ta) ? onNil() : ta; -} - -export function toNull(ta: Nilable): A | null { - return isNil(ta) ? null : ta; -} - -export function toUndefined(ta: Nilable): A | undefined { - return isNil(ta) ? undefined : ta; -} - -export function isNil(ta: Nilable): ta is Nil { - return ta === undefined || ta === null; -} - -export function isNotNil(ta: Nilable): ta is NonNullable { - return !isNil(ta); -} - -export function wrap(a: A): Nilable { - return a; -} - -export function fail(): Nilable { - return nil; -} - -export function apply( - ua: Nilable, -): (ufai: Nilable<(a: A) => I>) => Nilable { - return (ufai) => isNil(ua) ? nil : isNil(ufai) ? nil : ufai(ua); -} - -export function map(fai: (a: A) => I): (ta: Nilable) => Nilable { - return (ta) => isNil(ta) ? nil : fai(ta); -} - -export function flatmap( - fati: (a: A) => Nilable, -): (ta: Nilable) => Nilable { - return (ta) => isNil(ta) ? nil : fati(ta); -} - -export function alt(tb: Nilable): (ta: Nilable) => Nilable { - return (ta) => isNil(ta) ? tb : ta; -} - -export const FlatmappableNilable: Flatmappable = { - apply, - flatmap, - map, - wrap, -}; - -export function getShowable({ show }: Showable): Showable> { - return { show: (ma) => (isNil(ma) ? "nil" : show(ma)) }; -} diff --git a/vendor/deno.land/x/fun@v2.0.0-alpha.15/option.ts b/vendor/deno.land/x/fun@v2.0.0-alpha.15/option.ts deleted file mode 100644 index e4b2ca4..0000000 --- a/vendor/deno.land/x/fun@v2.0.0-alpha.15/option.ts +++ /dev/null @@ -1,846 +0,0 @@ -/** - * The Option type is generally considered functional programming's response to - * handling null or undefined. Sometimes Option is also called Maybe. Its - * purpose is to represent the possibility that some data is not available. - * - * @module Option - * @since 2.0.0 - */ - -import type { $, Kind, Out } from "./kind.ts"; -import type { Applicable } from "./applicable.ts"; -import type { Comparable } from "./comparable.ts"; -import type { Either } from "./either.ts"; -import type { Filterable } from "./filterable.ts"; -import type { Flatmappable } from "./flatmappable.ts"; -import type { Initializable } from "./initializable.ts"; -import type { Mappable } from "./mappable.ts"; -import type { Pair } from "./pair.ts"; -import type { Predicate } from "./predicate.ts"; -import type { Reducible } from "./reducible.ts"; -import type { Refinement } from "./refinement.ts"; -import type { Showable } from "./showable.ts"; -import type { Sortable } from "./sortable.ts"; -import type { Traversable } from "./traversable.ts"; -import type { Wrappable } from "./wrappable.ts"; - -import { isNotNil } from "./nilable.ts"; -import { fromCompare } from "./comparable.ts"; -import { fromSort } from "./sortable.ts"; -import { flow, handleThrow, pipe } from "./fn.ts"; - -/** - * The None type represents the non-existence of a value. - * - * @since 2.00. - */ -export type None = { tag: "None" }; - -/** - * The Some type represents the existence of a value. - * - * @since 2.00. - */ -export type Some = { tag: "Some"; value: V }; - -/** - * The Option represents a type A that may or may not exist. It's the functional - * progamming equivalent of A | undefined | null. - * - * @since 2.0.0 - */ -export type Option = Some | None; - -/** - * Specifies Option as a Higher Kinded Type, with covariant - * parameter A corresponding to the 0th index of any substitutions. - * - * @since 2.0.0 - */ -export interface KindOption extends Kind { - readonly kind: Option>; -} - -/** - * The cannonical implementation of the None type. Since all None values are equivalent there - * is no reason to construct more than one object instance. - * - * @example - * ```ts - * import type { Option } from "./option.ts"; - * import * as O from "./option.ts"; - * - * function fromNilable(a: A | null | undefined): Option { - * return a === null || a === undefined ? O.none : O.some(a); - * } - * - * const result1 = fromNilable(null); // None - * const result2 = fromNilable(1); // Some - * ``` - * - * @since 2.0.0 - */ -export const none: Option = { tag: "None" }; - -/** - * The some constructer takes any value and wraps it in the Some type. - * - * @example - * ```ts - * import type { Option } from "./option.ts"; - * import * as O from "./option.ts"; - * - * function fromNilable(a: A | null | undefined): Option { - * return a === null || a === undefined ? O.none : O.some(a); - * } - * - * const result1 = fromNilable(null); // None - * const result2 = fromNilable(1); // Some - * ``` - * - * @since 2.0.0 - */ -export function some(value: A): Option { - return ({ tag: "Some", value }); -} - -/** - * The constNone is a thunk that returns the canonical none instance. - * - * @since 2.0.0 - */ -export function constNone(): Option { - return none; -} - -/** - * @since 2.0.0 - */ -export function init(): Option { - return none; -} - -/** - * Fail is an alias of constNone. - */ -export function fail(): Option { - return none; -} - -/** - * The fromNullable function takes a potentially null or undefined value - * and maps null or undefined to None and non-null and non-undefined - * values to Some>. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * - * const a: number | undefined = undefined; - * const b: number | undefined = 2; - * const c = [1, 2, 3]; - * - * const result1 = O.fromNullable(a); // None - * const result2 = O.fromNullable(b); // Some - * const result3 = O.fromNullable(c[3]); // None - * ``` - * - * @since 2.0.0 - */ -export function fromNullable(a: A): Option> { - return isNotNil(a) ? some(a) : none; -} - -/** - * The fromPredicate function will test the value a with the predicate. If - * the predicate evaluates to false then the function will return a None, - * otherwise it will return the value wrapped in Some. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * - * const positive = O.fromPredicate((n: number) => n > 0); - * - * const result1 = positive(-1); // None - * const result2 = positive(1); // Some - * ``` - * - * @since 2.0.0 - */ -export function fromPredicate( - refinement: Refinement, -): (a: A) => Option; -export function fromPredicate( - refinement: Predicate, -): (a: A) => Option; -export function fromPredicate(predicate: Predicate) { - return (a: A): Option => (predicate(a) ? some(a) : none); -} - -/** - * Take a function that can throw and wrap it in a try/catch block. Returns a - * new function that takes the same arguments as the original but returns the - * original value wrapped in an Option. If the function throws then the new - * function returns None, otherwise it returns Some. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * - * function thrower(n: number): number { - * if (n < 0) { - * throw new Error("This number is too small"); - * } - * return n; - * } - * - * const handler = O.tryCatch(thrower); - * - * const result1 = handler(-1); // None - * const result2 = handler(0); // Some(0); - * ``` - * - * @since 2.0.0 - */ -export function tryCatch( - fn: (...d: D) => A, -): (...d: D) => Option { - return handleThrow(fn, some, constNone); -} - -/** - * The match functionis the standard catamorphism on an Option. It operates like - * a switch case operator over the two potential cases for an Option type. One - * supplies functions for handling the Some case and the None case with matching - * return types and fold calls the correct function for the given option. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * - * const toNumber = O.match(() => 0, n => n); - * - * const result1 = toNumber(O.none); // 0 - * const result2 = toNumber(O.some(1)); // 1 - * ``` - * - * @since 2.0.0 - */ -export function match(onNone: () => B, onSome: (a: A) => B) { - return (ta: Option): B => (isNone(ta) ? onNone() : onSome(ta.value)); -} - -/** - * getOrElse operates like a simplified fold. One supplies a thunk that returns a default - * inner value of the Option for the cases where the option is None. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * - * const toNumber = O.getOrElse(() => 0); - * - * const result1 = toNumber(O.some(1)); // 1 - * const result2 = toNumber(O.none); // 0 - * ``` - * - * @since 2.0.0 - */ -export function getOrElse(onNone: () => B) { - return (ta: Option): B => isNone(ta) ? onNone() : ta.value; -} - -/** - * toNullable returns either null or the inner value of an Option. This is useful for - * interacting with code that handles null but has no concept of the Option type. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * - * const result1 = O.toNull(O.none); // null - * const result2 = O.toNull(O.some(1)); // 1 - * ``` - * - * @since 2.0.0 - */ -export function toNull(ma: Option): A | null { - return isNone(ma) ? null : ma.value; -} - -/** - * toUndefined returns either undefined or the inner value of an Option. This is useful for - * interacting with code that handles undefined but has no concept of the Option type. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * - * const result1 = O.toUndefined(O.none); // undefined - * const result2 = O.toUndefined(O.some(1)); // 1 - * ``` - * - * @since 2.0.0 - */ -export function toUndefined(ma: Option): A | undefined { - return isNone(ma) ? undefined : ma.value; -} - -/** - * Tests wether an Option is None, returning true if the passed option is None - * and false if it is Some. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * - * const result1 = O.isNone(O.none); // true - * const result2 = O.isNone(O.some(1)); // false - * ``` - * - * @since 2.0.0 - */ -export function isNone(m: Option): m is None { - return m.tag === "None"; -} - -/** - * Tests wether an Option is Some, returning true if the passed option is Some - * and false if it is None. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * - * const result1 = O.isSome(O.none); // false - * const result2 = O.isSome(O.some(1)); // true - * ``` - * - * @since 2.0.0 - */ -export function isSome(m: Option): m is Some { - return m.tag === "Some"; -} - -/** - * Create an Option by wrapping any value A in Some. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * - * const result1 = O.wrap(1); // Some(1) - * const result2 = O.wrap("Hello"); // Some("Hello") - * ``` - * - * @since 2.0.0 - */ -export function wrap(a: A): Option { - return some(a); -} - -/** - * Apply the mapping function fai to the inner value of an Option if it - * exists. If the option is None then this function does nothing. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * import { pipe } from "./fn.ts"; - * - * const result1 = pipe(O.some(1), O.map(n => n + 1)); // Some(2) - * const result2 = pipe(O.none, O.map((n: number) => n + 1)); // None - * ``` - * - * @since 2.0.0 - */ -export function map(fai: (a: A) => I): (ua: Option) => Option { - return (ua) => isNone(ua) ? none : some(fai(ua.value)); -} - -/** - * Apply a mapping function to an Option but if the mapping function returns - * null or undefined the null or undefined value is lifted into None. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * import { pipe } from "./fn.ts"; - * - * const result1 = pipe( - * O.some([1, 2, 3]), - * O.mapNullable(arr => arr[10]), - * ); // None - * const result2 = pipe( - * O.constNone>(), - * O.mapNullable(arr => arr[0]), - * ); // None - * const result3 = pipe( - * O.some([1, 2, 3]), - * O.mapNullable(arr => arr[0]), - * ); // Some(1) - * ``` - * - * @since 2.0.0 - */ -export function mapNullable( - f: (a: A) => I | null | undefined, -): (ua: Option) => Option { - return flatmap(flow(f, fromNullable)); -} - -/** - * Apply a value A wrapped in an option to a function (a: A) => I wrapped in an - * Option. If either the wrapped value or the wrapped function are None then the - * result is None, if they are both Some then the result is Some. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * import { pipe } from "./fn.ts"; - * - * const result1 = pipe( - * O.some((n: number) => n + 1), - * O.apply(O.some(1)), - * ); // Some(2) - * const result2 = pipe( - * O.some((n: number) => n + 1), - * O.apply(O.none), - * ); // None - * ``` - * - * @since 2.0.0 - */ -export function apply( - ua: Option, -): (ufai: Option<(a: A) => I>) => Option { - return (ufai) => - isNone(ufai) || isNone(ua) ? none : some(ufai.value(ua.value)); -} - -/** - * Apply a function (a: A) => Option to the wrapped value of an Option if - * the wrapped value exists, flattening the application result into an - * Option. This is the equivalent of first mapping from Option to - * Option> and then calling join to flatten the Options. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * O.some(1), - * O.flatmap(n => n > 0 ? O.some(n) : O.none), - * ); // Some(1) - * ``` - * - * @since 2.0.0 - */ -export function flatmap( - fati: (a: A) => Option, -): (ta: Option) => Option { - return (ua) => isNone(ua) ? ua : fati(ua.value); -} - -/** - * Replace an first with second if first is None. This allows one to offer a - * a replacement or default. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * import { pipe } from "./fn.ts"; - * - * const result1 = pipe(O.some(1), O.alt(O.some(2))); // Some(1); - * const result2 = pipe(O.some(1), O.alt(O.constNone())); // Some(1); - * const result3 = pipe(O.none, O.alt(O.some(2))); // Some(2); - * const result4 = pipe(O.none, O.alt(O.none)); // None - * ``` - * - * @since 2.0.0 - */ -export function alt(second: Option): (first: Option) => Option { - return (first) => isNone(first) ? second : first; -} - -/** - * Apply a predicate to the inner value of an Option, returning true if the - * option is Some and the predicate returns true, otherwise returning false. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * import { pipe } from "./fn.ts"; - * - * const positive = (n: number) => n > 0; - * - * const result1 = pipe(O.some(1), O.exists(positive)); // true - * const result2 = pipe(O.some(0), O.exists(positive)); // false - * const result3 = pipe(O.none, O.exists(positive)); // false - * ``` - * - * @since 2.0.0 - */ -export function exists(predicate: Predicate): (ua: Option) => boolean { - return (ua) => isSome(ua) && predicate(ua.value); -} - -/** - * Apply a refinement or predicate to the inner value of an Option, returning - * the original option if the value exists and the predicate/refinement return - * true, otherwise returning None. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * import { pipe } from "./fn.ts"; - * - * const positive = (n: number) => n > 0; - * - * const result1 = pipe(O.some(1), O.filter(positive)); // Some(1) - * const result2 = pipe(O.some(0), O.filter(positive)); // None - * const result3 = pipe(O.none, O.filter(positive)); // None - * ``` - * - * @since 2.0.0 - */ -export function filter( - refinement: Refinement, -): (ta: Option) => Option; -export function filter( - predicate: Predicate, -): (ta: Option) => Option; -export function filter( - predicate: Predicate, -): (ta: Option) => Option { - const _exists = exists(predicate); - return (ta) => _exists(ta) ? ta : none; -} - -/** - * Apply a filter and mapping operation at the same time against an Option. This - * is equivalent to the flatmap function for Option. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * - * const noninit = (str: string) => str.length > 0 ? O.some(str.length) : O.none; - * const filterMap = O.filterMap(noninit); - * - * const result1 = filterMap(O.some("Hello")); // Some(5); - * const result2 = filterMap(O.some("")); // None - * const result3 = filterMap(O.none); // None - * ``` - * - * @since 2.0.0 - */ -export function filterMap( - fai: (a: A) => Option, -): (ua: Option) => Option { - return flatmap(fai); -} - -/** - * Given a refinement or predicate, return a function that splits an Option into - * a Pair. Due to the nature of the option type this will always - * return Pair, Pair, or Pair. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * - * const partition = O.partition((n: number) => n > 0); - * - * const result1 = partition(O.some(1)); // [Some(1), None] - * const result2 = partition(O.some(0)); // [None, Some(0)] - * const result3 = partition(O.none); // [None, None] - * ``` - * - * @since 2.0.0 - */ -export function partition( - refinement: Refinement, -): (ua: Option) => Pair, Option>; -export function partition( - predicate: Predicate, -): (ua: Option) => Pair, Option>; -export function partition( - predicate: Predicate, -): (ua: Option) => Pair, Option> { - type Output = Pair, Option>; - const init: Output = [none, none]; - return (ua) => - isNone(ua) ? init : predicate(ua.value) ? [ua, none] : [none, ua]; -} - -/** - * Map and partition over the inner value of an Option at the same time. If - * the option passed is None then the result is [None, None], otherwise Right - * will result in [Some, None], and Left will result in [None, Some]. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * import * as E from "./either.ts"; - * - * const partitioner = (n: number) => n > 0 ? E.right(n) : E.left(n * -1); - * const partitionMap = O.partitionMap(partitioner); - * - * const result1 = partitionMap(O.some(1)); // [Some(1), None] - * const result2 = partitionMap(O.some(-1)); // [None, Some(1)] - * const result3 = partitionMap(O.none); // [None, None] - * ``` - * - * @since 2.0.0 - */ -export function partitionMap( - fai: (a: A) => Either, -): (ua: Option) => Pair, Option> { - type Output = Pair, Option>; - const init: Output = [none, none]; - return (ua) => { - if (isNone(ua)) { - return init; - } - const result = fai(ua.value); - return result.tag === "Right" - ? [some(result.right), none] - : [none, some(result.left)]; - }; -} - -/** - * Reduce over an Option. Since an Option contains at most one value this - * function operates a lot like getOrElse. If the passed option is None then it - * returns the initial value, otherwise the reducer function is called with both - * the initial value and the inner A. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * - * const reduce = O.reduce((n: number, m: number) => n + m, 0); - * - * const result1 = reduce(O.some(1)); // 1 - * const result2 = reduce(O.none); // 0 - * ``` - * - * @since 2.0.0 - */ -export function reduce( - reducer: (accumulator: O, current: A) => O, - initial: O, -): (ua: Option) => O { - return (ua) => isSome(ua) ? reducer(initial, ua.value) : initial; -} - -/** - * Traverse over an Option using the supplied Applicable. This allows one to - * turn an Option into Kind>. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const toRange = (n: number) => A.range(n); - * const traverse = pipe(toRange, O.traverse(A.ApplicableArray)); - * - * const result1 = traverse(O.some(3)); // [Some(0), Some(1), Some(2)]; - * const result2 = traverse(O.none); // [None] - * ``` - * - * @since 2.0.0 - */ -export function traverse( - A: Applicable, -): ( - favi: (a: A) => $, -) => (ta: Option) => $, J, K], [L], [M]> { - return ( - favi: (a: A) => $, - ): (ta: Option) => $, J, K], [L], [M]> => - match( - () => A.wrap(constNone()), - (a) => pipe(favi(a), A.map(some)), - ); -} - -/** - * The canonical implementation of Wrappable for Option. - * - * @since 2.0.0 - */ -export const WrappableOption: Wrappable = { wrap }; - -/** - * The canonical implementation of Mappable for Option. - * - * @since 2.0.0 - */ -export const MappableOption: Mappable = { map }; - -/** - * The canonical implementation of Filterable for Option. - * - * @since 2.0.0 - */ -export const FilterableOption: Filterable = { - filter, - filterMap, - partition, - partitionMap, -}; - -/** - * The canonical implementation of Reducible for Option. - * - * @since 2.0.0 - */ -export const ReducibleOption: Reducible = { reduce }; - -/** - * The canonical implementation of Traversable for Option. - * - * @since 2.0.0 - */ -export const TraversableOption: Traversable = { - map, - reduce, - traverse, -}; - -/** - * The canonical implementation of Applicable for Option. - * - * @since 2.0.0 - */ -export const ApplicableOption: Applicable = { wrap, map, apply }; - -/** - * The canonical implementation of Flatmappable for Option. - * - * @since 2.0.0 - */ -export const FlatmappableOption: Flatmappable = { - wrap, - map, - apply, - flatmap, -}; - -/** - * Create an instance of Showable for Option given an instance of Showable for A. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * - * const Showable = O.getShowable({ show: (n: number) => n.toString() }); // Showable> - * - * const result1 = Showable.show(O.some(1)); // "Some(1)" - * const result2 = Showable.show(O.none); // "None" - * ``` - * - * @since 2.0.0 - */ -export function getShowable( - { show }: Showable, -): Showable> { - return ({ - show: (ma) => (isNone(ma) ? "None" : `${"Some"}(${show(ma.value)})`), - }); -} - -/** - * Create an instance of Comparable> given an instance of Comparable. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * import * as N from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const { compare } = O.getComparable(N.ComparableNumber); - * - * const result1 = pipe(O.some(1), compare(O.some(2))); // false - * const result2 = pipe(O.some(1), compare(O.some(1))); // true - * const result3 = pipe(O.none, compare(O.none)); // true - * const result4 = pipe(O.some(1), compare(O.none)); // false - * ``` - * - * @since 2.0.0 - */ -export function getComparable( - { compare }: Comparable, -): Comparable> { - return fromCompare((second) => (first) => - isSome(first) && isSome(second) - ? compare(second.value)(first.value) - : isNone(first) && isNone(second) - ); -} - -/** - * Create an instance of Sortable> given an instance of Sortable. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * import * as N from "./number.ts"; - * - * const { sort } = O.getSortable(N.SortableNumber); - * - * const result1 = sort(O.some(1), O.some(2)); // 1 - * const result2 = sort(O.some(1), O.some(1)); // 0 - * const result3 = sort(O.none, O.none); // 0 - * const result4 = sort(O.none, O.some(1)); // -1 - * ``` - * - * @since 2.0.0 - */ -export function getSortable({ sort }: Sortable): Sortable> { - return fromSort((fst, snd) => - isNone(fst) - ? isNone(snd) ? 0 : -1 - : isNone(snd) - ? 1 - : sort(fst.value, snd.value) - ); -} - -/** - * Create an instance of Initializable> given an instance of Initializable. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * import * as N from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const { combine } = O.getInitializable(N.InitializableNumberSum); - * - * const result1 = pipe(O.some(1), combine(O.some(1))); // Some(2) - * const result2 = pipe(O.none, combine(O.some(1))); // Some(1) - * const result3 = pipe(O.some(1), combine(O.none)); // Some(1) - * ``` - * - * @since 2.0.0 - */ -export function getInitializable( - { combine }: Initializable, -): Initializable> { - return ({ - init: () => none, - combine: (second) => (first) => - isNone(first) - ? second - : isNone(second) - ? first - : wrap(combine(second.value)(first.value)), - }); -} diff --git a/vendor/deno.land/x/fun@v2.0.0-alpha.15/pair.ts b/vendor/deno.land/x/fun@v2.0.0-alpha.15/pair.ts deleted file mode 100644 index 90f8fd2..0000000 --- a/vendor/deno.land/x/fun@v2.0.0-alpha.15/pair.ts +++ /dev/null @@ -1,475 +0,0 @@ -/** - * Pair represents a pair of values. It can be thought of as a tuple - * of two, or first and second, or separated values. - * - * @module Pair - * @since 2.0.0 - */ - -import type { $, Kind, Out } from "./kind.ts"; -import type { Applicable } from "./applicable.ts"; -import type { Bimappable } from "./bimappable.ts"; -import type { Flatmappable } from "./flatmappable.ts"; -import type { Initializable } from "./initializable.ts"; -import type { Mappable } from "./mappable.ts"; -import type { Reducible } from "./reducible.ts"; -import type { Showable } from "./showable.ts"; -import type { Traversable } from "./traversable.ts"; - -import { createFlatmappable } from "./flatmappable.ts"; -import { dual } from "./combinable.ts"; -import { pipe } from "./fn.ts"; - -/** - * Pair represents a pair of values. This is - * equivalent to a Tuple of length two, the - * Separated type in fp-ts, and any other type - * that contains exactly two covariant other - * types. - * - * The primary use fo Pair in this library - * is the target of a partition, where some - * type A is partitioned, either into - * [A, A], or [A, B] where B extends A. - * - * Other uses will likely come when Arrows - * are implemented in fun. - */ -export type Pair = readonly [A, B]; - -/** - * Specifies Pair as a Higher Kinded Type, with covariant - * parameters A and B corresponding to the 0th and 1st - * index of any Substitutions. - * - * @since 2.0.0 - */ -export interface KindPair extends Kind { - readonly kind: Pair, Out>; -} - -/** - * Creates a Pair from two values first and second with types - * A and B respectively. Used to quickly construct a Pair. - * - * @example - * ```ts - * import * as P from "./pair.ts"; - * - * const nameAndAge = P.pair("Brandon", 37); - * - * const name = P.getFirst(nameAndAge); // "Brandon" - * const age = P.getSecond(nameAndAge); // 37 - * ``` - * - * @since 2.0.0 - */ -export function pair(first: A, second: B): Pair { - return [first, second]; -} - -/** - * Creates a pair from a single type - * - * @example - * ```ts - * import { dup } from "./pair.ts"; - * - * const result = dup(1); // [1, 1] - * ``` - * - * @since 2.0.0 - */ -export function dup(a: A): Pair { - return pair(a, a); -} - -/** - * Apply a function in the first position of a pair to a value - * in the second position of a pair. - * - * @example - * ```ts - * import * as P from "./pair.ts"; - * import { flow } from "./fn.ts"; - * - * const double = flow( - * P.dup, - * P.map(n => (m: number) => n + m), - * P.merge, - * ); - * - * const result1 = double(1); // 2 - * const result2 = double(2); // 4 - * ``` - * - * @since 2.0.0 - */ -export function merge(ua: Pair<(a: A) => I, A>): I { - return ua[0](ua[1]); -} - -/** - * Apply a function in the first position of a pair to a value - * in the second position of a pair. - * - * @example - * ```ts - * import * as P from "./pair.ts"; - * import { flow } from "./fn.ts"; - * - * const double = flow( - * P.dup, - * P.mapSecond(n => (m: number) => n + m), - * P.mergeSecond, - * ); - * - * const result1 = double(1); // 2 - * const result2 = double(2); // 4 - * ``` - * - * @since 2.0.0 - */ -export function mergeSecond(ua: Pair I>): I { - return ua[1](ua[0]); -} - -/** - * Extracts the first value from a Pair. - * - * @example - * ```ts - * import * as P from "./pair.ts"; - * import { pipe } from "./fn.ts"; - * - * const shouldBe1 = pipe( - * P.pair(1, 2), - * P.getFirst - * ); // 1 - * ``` - * - * @since 2.0.0 - */ -export function getFirst([first]: Pair): A { - return first; -} - -/** - * Extracts the second value from a Pair. - * - * @example - * ```ts - * import * as P from "./pair.ts"; - * import { pipe } from "./fn.ts"; - * - * const shouldBe2 = pipe( - * P.pair(1, 2), - * P.getSecond - * ); // 2 - * ``` - * - * @since 2.0.0 - */ -export function getSecond([_, second]: Pair): B { - return second; -} - -/** - * A curried form of the pair constructor, starting with the first - * value of a pair. - * - * @example - * ```ts - * import * as P from "./pair.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * 37, - * P.first("Brandon"), - * P.mapSecond(n => n + 1), - * ); // ["Brandon", 38] - * ``` - * - * @since 2.0.0 - */ -export function first(first: A): (second: B) => Pair { - return (second) => pair(first, second); -} - -/** - * A curried form of the pair constructor, starting with the second - * value of a pair. - * - * @example - * ```ts - * import * as P from "./pair.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * 37, - * P.second("Brandon"), - * P.map(n => n + 1), - * ); // [38, "Brandon"] - * ``` - * - * @since 2.0.0 - */ -export function second(second: B): (first: A) => Pair { - return (first) => pair(first, second); -} - -/** - * Creates a new Pair with the first and second values swapped. - * - * @example - * ```ts - * import * as P from "./pair.ts"; - * import { pipe } from "./fn.ts"; - * - * const shouldBe2 = pipe( - * P.pair(1, 2), - * P.swap, - * P.first - * ); // 2 - * ``` - * - * @since 2.0.0 - */ -export function swap([first, second]: Pair): Pair { - return pair(second, first); -} - -/** - * Creates a new Pair with the same second value and a new first - * value determined by the output of the fai function. - * - * @example - * ```ts - * import * as P from "./pair.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * P.pair(1, 2), - * P.map(String), - * ); // ['1', 2] - * ``` - * - * @since 2.0.0 - */ -export function map( - fai: (a: A) => I, -): (ta: Pair) => Pair { - return ([first, second]) => pair(fai(first), second); -} - -/** - * Creates a new Pair with the same first value and a new second - * value determined by the output of the fbj function. - * - * @example - * ```ts - * import * as P from "./pair.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * P.pair(1, 2), - * P.mapSecond(String), - * ); // [1, '2'] - * ``` - * - * @since 2.0.0 - */ -export function mapSecond( - fbj: (a: B) => J, -): (ta: Pair) => Pair { - return ([first, second]) => pair(first, fbj(second)); -} - -/** - * Creates a new pair by mapping first through the fai - * function and second through the fbj function. - * - * @example - * ```ts - * import * as P from "./pair.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * P.pair(1, 2), - * P.bimap(String, n => n + 1), - * ); // ['1', 3] - * ``` - * - * @since 2.0.0 - */ -export function bimap( - fbj: (b: B) => J, - fai: (a: A) => I, -): (ta: Pair) => Pair { - return ([first, second]) => pair(fai(first), fbj(second)); -} - -/** - * Just like the first function, unwrap returns the first - * value in a pair. - * - * @example - * ```ts - * import { pair, unwrap } from "./pair.ts"; - * - * const result = unwrap(pair(1, 2)); // 1 - * ``` - * - * @since 2.0.0 - */ -export function unwrap([first]: Pair): A { - return first; -} - -/** - * Reduces a pair with an initial value, also passing - * the second value into the reducer as well. - * - * @example - * ```ts - * import { pair, reduce } from "./pair.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * pair(10, 20), - * reduce(Math.max, Number.NEGATIVE_INFINITY), - * ); // 20 - * ``` - * - * @since 2.0.0 - */ -export function reduce( - foao: (acc: O, first: A, second: B) => O, - initial: O, -): (ua: Pair) => O { - return ([first, second]) => foao(initial, first, second); -} - -/** - * Traverse a pair using another algebraic structure's Applicable. - * - * @example - * ```ts - * import { traverse, pair } from "./pair.ts"; - * import { some, ApplicableOption, fromPredicate } from "./option.ts"; - * import { pipe } from "./fn.ts"; - * - * const traverseOption = traverse(ApplicableOption); - * const startsWithB = fromPredicate( - * (name: string) => name.startsWith("B") - * ); - * - * const result1 = pipe( - * pair("Brandon", 37), - * traverseOption(startsWithB), - * ); // { tag: "Some", value: ["Brandon", 37] } - * - * const result2 = pipe( - * pair("Alice", 37), - * traverseOption(startsWithB), - * ); // { tag: "None" } - * ``` - * - * @since 2.0.0 - */ -export function traverse(A: Applicable) { - return ( - favi: (a: A) => $, - ): (ua: Pair) => $, J, K], [L], [M]> => - ([fst, snd]) => - pipe( - favi(fst), - A.map(second(snd)), - ); -} - -/** - * The canonical Mappable instance for Pair. Contains the - * map method. - * - * @since 2.0.0 - */ -export const MappablePair: Mappable = { map }; - -/** - * The canonical Bimappable instance for Pair. Contains the - * bimap and mapSecond methods. - * - * @since 2.0.0 - */ -export const BimappablePair: Bimappable = { mapSecond, map }; - -/** - * The canonical Reducible instance for Pair. Contains the - * reduce method. - * - * @since 2.0.0 - */ -export const ReduciblePair: Reducible = { reduce }; - -/** - * @since 2.0.0 - */ -export const TraversablePair: Traversable = { map, reduce, traverse }; - -/** - * Creates a Showable instance for a pair, wrapping the Showable instances provided - * for the first and second values. - */ -export function getShowable( - SA: Showable, - SB: Showable, -): Showable> { - return { - show: ([first, second]) => `Pair(${SA.show(first)}, ${SB.show(second)})`, - }; -} - -/** - * A Kind implementation used to fix the second parameter in a Pair. - * Otherwise it operates the same as Pair does. - * - * @since 2.0.0 - */ -export interface KindRightPair extends Kind { - readonly kind: Pair, B>; -} - -/** - * Creates a Flatmappable instance for Pair where the second parameter is - * concatenated according to the Monoid instance passed in. - * - * @example - * ```ts - * import { InitializableNumberSum } from "./number.ts"; - * import { getRightFlatmappable, pair } from "./pair.ts"; - * import { pipe } from "./fn.ts"; - * - * const Flatmappable = getRightFlatmappable(InitializableNumberSum); - * - * const ageOneYear = (name: string) => pair(name, 1); - * - * const result = pipe( - * pair("Brandon", 36), // Pair(Name, Age) - * Flatmappable.flatmap(ageOneYear), - * Flatmappable.flatmap(ageOneYear) - * ); // ["Brandon", 38] - * ``` - * - * @since 2.0.0 - */ -export function getRightFlatmappable( - I: Initializable, -): Flatmappable> { - const { combine } = dual(I); - return createFlatmappable>({ - wrap: (a) => pair(a, I.init()), - flatmap: (fati) => ([first, second]) => - pipe(fati(first), mapSecond(combine(second))), - }); -} diff --git a/vendor/deno.land/x/fun@v2.0.0-alpha.15/predicate.ts b/vendor/deno.land/x/fun@v2.0.0-alpha.15/predicate.ts deleted file mode 100644 index c6a99cb..0000000 --- a/vendor/deno.land/x/fun@v2.0.0-alpha.15/predicate.ts +++ /dev/null @@ -1,235 +0,0 @@ -/** - * The Predicate type represents unary functions that return boolean values. - * Typically, these functions indicate the existence of some quality for the - * values passed as inputs. Some simple examples of Predicates are postive for - * numbers, non-null values, etc. - * - * @module Predicate - * @since 2.0.0 - */ - -import type { In, Kind } from "./kind.ts"; -import type { Premappable } from "./premappable.ts"; -import type { Initializable } from "./initializable.ts"; - -import { flow } from "./fn.ts"; - -/** - * The Predicate type is a function that takes some - * value of type A and returns boolean, indicating - * that a property is true or false for the value A. - * - * @example - * ```ts - * import type { Predicate } from "./predicate.ts"; - * import * as O from "./option.ts"; - * - * function fromPredicate(predicate: Predicate) { - * return (a: A): O.Option => predicate(a) - * ? O.some(a) : O.none; - * } - * - * function isPositive(n: number): boolean { - * return n > 0; - * } - * - * const isPos = fromPredicate(isPositive); - * - * const resultSome = isPos(1); // Some(1) - * const resultNone = isPos(-1); // None - * ``` - * - * @since 2.0.0 - */ -export type Predicate = (a: A) => boolean; - -/** - * Specifies Predicate as a Higher Kinded Type, with - * contravariant parameter A corresponding to the 0th - * index of any Substitutions. - * - * @since 2.0.0 - */ -export interface KindPredicate extends Kind { - readonly kind: Predicate>; -} - -/** - * Create a Predicate using a Predicate and a function that takes - * a type L and returns a type D. This maps over the input value of - * the predicate. - * - * @example - * ```ts - * import { premap } from "./predicate.ts"; - * import { pipe } from "./fn.ts"; - * - * const isGreaterThan3 = (n: number) => n > 3; - * const isLongerThan3 = pipe( - * isGreaterThan3, - * premap((s: string) => s.length), - * ); - * - * const result1 = isLongerThan3("Hello"); // true - * const result2 = isLongerThan3("Hi"); // false - * ``` - * - * @since 2.0.0 - */ -export function premap( - fia: (i: I) => A, -): (ua: Predicate) => Predicate { - return (ua) => flow(fia, ua); -} - -/** - * Negates the result of an existing Predicate. - * - * @example - * ```ts - * import { not } from "./predicate.ts"; - * - * const isPositive = (n: number) => n > 0; - * const isZeroOrNegative = not(isPositive); - * - * const result1 = isZeroOrNegative(1); // false - * const result2 = isZeroOrNegative(0); // true - * const result3 = isZeroOrNegative(-1); // true - * ``` - * - * @since 2.0.0 - */ -export function not(predicate: Predicate): Predicate { - return (a) => !predicate(a); -} - -/** - * Creates the union of two predicates, returning true if either - * predicate returns true. - * - * @example - * ```ts - * import { or } from "./predicate.ts"; - * import { string, number } from "./refinement.ts"; - * import { pipe } from "./fn.ts"; - * - * // A Refinement is also a Predicate - * const stringOrNumber = pipe( - * string, - * or(number), - * ); - * - * const result1 = stringOrNumber("Hello"); // true - * const result2 = stringOrNumber(1); // true - * const result3 = stringOrNumber({}); // false - * ``` - * - * @since 2.0.0 - */ -export function or(second: Predicate) { - return (first: Predicate): Predicate => (a) => first(a) || second(a); -} - -/** - * Creates the intersection of two predicates, returning true if both - * predicates return true. - * - * @example - * ```ts - * import { and } from "./predicate.ts"; - * import { pipe } from "./fn.ts"; - * - * const isPositive = (n: number) => n > 0; - * const isInteger = (n: number) => Number.isInteger(n); - * - * const isPositiveInteger = pipe( - * isPositive, - * and(isInteger), - * ); - * - * const result1 = isPositiveInteger(1); // true - * const result2 = isPositiveInteger(100); // true - * const result3 = isPositiveInteger(-1); // false - * ``` - * - * @since 2.0.0 - */ -export function and(second: Predicate) { - return (first: Predicate): Predicate => (a) => first(a) && second(a); -} - -/** - * The canonical implementation of Premappable for Predicate. It contains - * the method premap. - * - * @since 2.0.0 - */ -export const PremappablePredicate: Premappable = { - premap, -}; - -/** - * Get a Initializable> for any type A that combines using the - * Predicate or function. - * - * @example - * ```ts - * import { getInitializableAny } from "./predicate.ts"; - * import { pipe } from "./fn.ts"; - * - * const { combine } = getInitializableAny(); - * - * const lessThanZero = (n: number) => n < 0; - * const greaterThanFifty = (n: number) => n > 50; - * - * const notBetweenZeroAndFifty = pipe( - * lessThanZero, - * combine(greaterThanFifty), - * ); - * - * const result1 = notBetweenZeroAndFifty(10); // false - * const result2 = notBetweenZeroAndFifty(-10); // true - * const result3 = notBetweenZeroAndFifty(100); // true - * ``` - * - * @since 2.0.0 - */ -export function getInitializableAny(): Initializable> { - return { - combine: or, - init: () => () => false, - }; -} - -/** - * Get a Initializable> for any type A that combines using the - * Predicate and function. - * - * @example - * ```ts - * import { getInitializableAll } from "./predicate.ts"; - * import { pipe } from "./fn.ts"; - * - * const { combine } = getInitializableAll(); - * - * const greaterThanZero = (n: number) => n > 0; - * const lessThanFifty = (n: number) => n < 50; - * - * const betweenZeroAndFifty = pipe( - * greaterThanZero, - * combine(lessThanFifty) - * ); - * - * const result1 = betweenZeroAndFifty(10); // true - * const result2 = betweenZeroAndFifty(-10); // false - * const result3 = betweenZeroAndFifty(100); // false - * ``` - * - * @since 2.0.0 - */ -export function getInitializableAll(): Initializable> { - return { - combine: and, - init: () => () => true, - }; -} diff --git a/vendor/deno.land/x/fun@v2.0.0-alpha.15/premappable.ts b/vendor/deno.land/x/fun@v2.0.0-alpha.15/premappable.ts deleted file mode 100644 index 7fba683..0000000 --- a/vendor/deno.land/x/fun@v2.0.0-alpha.15/premappable.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Premappable is a structure that allows a function to be applied - * contravariantly inside of the associated concrete structure. - * - * @module Premappable - * @since 2.0.0 - */ - -import type { $, Hold, Kind } from "./kind.ts"; -import type { Mappable } from "./mappable.ts"; - -import { flow } from "./fn.ts"; - -/** - * A Premappable structure has the method premap. - * - * @since 2.0.0 - */ -export interface Premappable extends Hold { - readonly premap: ( - fia: (l: L) => D, - ) => (ua: $) => $; -} - -/** - * @since 2.0.0 - */ -export function dimap( - { map, premap }: Premappable & Mappable, -): ( - fld: (l: L) => D, - fai: (a: A) => I, -) => ( - ua: $, -) => $ { - return (fld, fai) => flow(premap(fld), map(fai)); -} diff --git a/vendor/deno.land/x/fun@v2.0.0-alpha.15/record.ts b/vendor/deno.land/x/fun@v2.0.0-alpha.15/record.ts deleted file mode 100644 index 9a9de3b..0000000 --- a/vendor/deno.land/x/fun@v2.0.0-alpha.15/record.ts +++ /dev/null @@ -1,999 +0,0 @@ -// deno-lint-ignore-file no-explicit-any -/** - * ReadonlyRecord is a readonly product structure that operates - * like a Map. Keys are always strings and Key/Value pairs - * can be added and removed arbitrarily. The ReadonlyRecord - * type in fun favors immutability. - * - * @module ReadonlyRecord - */ - -import type { $, AnySub, Intersect, Kind, Out } from "./kind.ts"; -import type { Applicable } from "./applicable.ts"; -import type { Either } from "./either.ts"; -import type { Comparable } from "./comparable.ts"; -import type { Filterable } from "./filterable.ts"; -import type { Reducible } from "./reducible.ts"; -import type { Mappable } from "./mappable.ts"; -import type { Initializable } from "./initializable.ts"; -import type { Option } from "./option.ts"; -import type { Pair } from "./pair.ts"; -import type { Showable } from "./showable.ts"; -import type { Traversable } from "./traversable.ts"; - -import { isRight } from "./either.ts"; -import { isSome, none, some } from "./option.ts"; -import { pair } from "./pair.ts"; -import { identity, pipe, uncurry2 } from "./fn.ts"; - -/** - * ReadonlyRecord is an alias of Readonly>. - * It's meant to be used wherever a Record can be used. - * - * @since 2.0.0 - */ -export type ReadonlyRecord = Readonly>; - -/** - * A type used to constrain an input to a ReadonlyRecord with any values. - * - * @since 2.0.0 - */ -export type AnyReadonlyRecord = ReadonlyRecord; - -/** - * Extract the inner type of a ReadonlyRecord - * - * @since 2.0.0 - */ -export type TypeOf = T extends ReadonlyRecord ? A : never; - -/** - * NonEmptyRecord is a bounding type that will - * return a type level never if the type value of R is - * either not a record is a record without any - * index or key values. - * - * @example - * ``` - * import type { NonEmptyRecord } from "./record.ts"; - * - * function doSomething(_: NonEmptyRecord): void { - * return undefined; - * } - * - * const result = doSomething({ one: 1 }); // This is ok - * // const result2 = doSomethign({}); // This is a type error - * ``` - * - * @since 2.0.0 - */ -export type NonEmptyRecord = keyof R extends never ? never : R; - -/** - * Specifies ReadonlyRecord as a Higher Kinded Type, with covariant - * parameter A corresponding to the 0th index of any substitutions. - * - * @since 2.0.0 - */ -export interface KindReadonlyRecord extends Kind { - readonly kind: ReadonlyRecord>; -} - -/** - * An alias of Object.entries - * - * @example - * ```ts - * import * as R from "./record.ts"; - * - * const data: R.ReadonlyRecord = { - * hello: "world", - * foo: "bar", - * }; - * - * // [["hello", "world"], ["foo", "bar"]] - * const result1 = R.entries(data); - * const result2 = R.entries({}); // [] - * ``` - * - * @since 2.0.0 - */ -export function entries(ua: ReadonlyRecord): ReadonlyArray<[string, A]> { - return Object.entries(ua); -} - -/** - * An alias of Object.keys specific to ReadonlyRecord. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * - * const data: R.ReadonlyRecord = { - * hello: "world", - * foo: "bar", - * }; - * - * const result1 = R.keys(data); // ["hello", "foo"] - * const result2 = R.keys({}); // [] - * ``` - * - * @since 2.0.0 - */ -export function keys(ua: ReadonlyRecord): ReadonlyArray { - return Object.keys(ua); -} - -/** - * Omit specified `keys` from a `record`. Value-space implementation of the - * [`Omit`](https://www.typescriptlang.org/docs/handbook/utility-types.html#omittype-keys) - * utility type. - * - * @example - * ```ts - * import { omit } from "./record.ts"; - * omit("a", "c")({ a: 1, b: 2 }) // { b: 2 } - * ``` - * - * @since 2.0.0 - */ -export function omit( - ...keys: K -): (record: T) => Omit { - return (record: T) => { - const output = { ...record }; - for (const key of keys as unknown as (keyof typeof output)[]) { - delete output[key]; - } - return output; - }; -} - -/** - * Picks specified `keys` from a `record`. Value-space implemenuation of the - * [`Pick`](https://www.typescriptlang.org/docs/handbook/utility-types.html#picktype-keys) - * utility type. - * - * @example - * ```ts - * import { pipe } from "./fn.ts"; - * import { pick } from "./record.ts"; - * - * pipe({ a: 1, b: 2, c: 3 }, pick("a", "b")) - * // { a: 1, b: 2 } - * ``` - * - * @since 2.0.0 - */ -export function pick, K extends keyof T>( - ...keys: readonly K[] -): (record: T) => Pick { - return (record) => { - const output = {} as Pick; - for (const key of keys) { - if (key in record) { - output[key] = record[key]; - } - } - return output; - }; -} - -/** - * Creates a new object with the same keys of `ua`. Values are transformed - * using `fai`. - * - * @example - * ```ts - * import { map } from "./record.ts" - * map((n: number) => n + 1)({ a: 1 }); // { a: 2 } - * ``` - * - * @since 2.0.0 - */ -export function map( - fai: (a: A, i: string) => I, -): (ua: ReadonlyRecord) => ReadonlyRecord { - return (ua) => { - const out = {} as Record; - for (const [key, entry] of Object.entries(ua) as [string, A][]) { - out[key] = fai(entry, key); - } - return out; - }; -} - -/** - * Collect all of the A values in a ReadonlyRecord into a single - * O value by the process of reduction. The order of key/value pairs - * in this reduction are stable and determined by ecmascript standard - * [here](https://262.ecma-international.org/8.0/#sec-enumerate-object-properties). - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * { one: 1, two: 2 }, - * R.reduce((sum, value) => sum + value, 0), - * ); // 3 - * ``` - * - * @since 2.0.0 - */ -export function reduce( - foao: (o: O, a: A, i: string) => O, - o: O, -) { - return (rec: ReadonlyRecord): O => { - let result = o; - for (const key in rec) { - result = foao(result, rec[key], key); - } - return result; - }; -} - -/** - * Collect all values in a ReadonlyRecord into a single - * value I by using a Combinable and a mapping function - * from A to I. This is effectively reduce using a Combinable - * for the initial value. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { InitializableNumberSum } from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const collectSum = R.collect(InitializableNumberSum); - * const collectLengths = collectSum((s: string) => s.length); - * - * const result = collectLengths({ one: "one", two: "two" }); // 6 - * ``` - * - * @since 2.0.0 - */ -export function collect( - M: Initializable, -): (fai: (a: A, index: string) => I) => (ua: ReadonlyRecord) => I { - return (fai: (a: A, index: string) => I) => { - const reducer = reduce( - (i, a: A, index) => M.combine(fai(a, index))(i), - M.init(), - ); - return (ua: ReadonlyRecord) => reducer(ua); - }; -} - -/** - * Collect all values in a ReadonlyRecord into a single - * value I by using a Combinable. This is effectively reduce - * using a Combinable for the initial value and combination. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { InitializableNumberSum } from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * { one: 1, two: 2, three: 3 }, - * R.collapse(InitializableNumberSum), - * ); // 6 - * ``` - * - * @since 2.0.0 - */ -export function collapse( - M: Initializable, -): (ua: ReadonlyRecord) => A { - return reduce(uncurry2(M.combine), M.init()); -} - -/** - * Traverse a ReadonlyRecord, mapping each A into an - * algebraic data type V (so V), then collecting each - * I in V back into a ReadonlyRecord, ultimately - * returning V>. In more concrete terms - * this can take ReadonlyRecord> and return - * Option> (or any other inner type. - * - * Traverse, in general, is much like reducing and collecting - * over the outer and inner types of an ADT at the same time. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import * as O from "./option.ts"; - * import { pipe } from "./fn.ts"; - * - * const traverseOption = R.traverse(O.ApplicableOption); - * const swapOption = traverseOption((o: O.Option) => o); - * - * const result1 = swapOption({ one: O.some(1), two: O.some(2) }); - * // Some({ one: 1, two: 2 }); - * const result2 = swapOption({ one: O.some(1), two: O.none }); // None - * ``` - * - * TODO: Revisit because mutability is bad here - * @since 2.0.0 - */ -export function traverse( - A: Applicable, -): ( - favi: (value: A, key: string) => $, -) => (ua: ReadonlyRecord) => $, J, K], [L], [M]> { - // We include a copy of the type parameters here to make the implementation - // type safe. - return ( - favi: (a: A, i: string) => $, - ): (ua: ReadonlyRecord) => $, J, K], [L], [M]> => { - // Mutably pushes an i into is at key - const pusher = (key: string) => - (is: Record) => - ( - i: I, - ): Record => ({ ...is, [key]: i }); - // Interior mutability is used to increase perf - const reducer = ( - vis: $, J, K], [L], [M]>, - a: A, - key: string, - ): $, J, K], [L], [M]> => - pipe( - vis, - A.map(pusher(key)), - A.apply(favi(a, key)), - ); - - return (ua) => pipe(ua, reduce(reducer, A.wrap({}))); - }; -} - -/** - * The Sequence inverts a tuple of substitutions over V into V containing a - * tuple of inferred values of the substitution. - * - * ie. - * [Option, Option] - * becomes - * Option<[number, string]> - * - * or - * - * [Either Either] - * becomes - * Either - */ -// deno-fmt-ignore -type Sequence>> = $ ? A : never; }, - { [K in keyof R]: R[K] extends $ ? B : never; }[keyof R], - { [K in keyof R]: R[K] extends $ ? C : never; }[keyof R], - ], [ - Intersect< { [K in keyof R]: R[K] extends $ ? D : never; }[keyof R] >, - ], [ - Intersect< { [K in keyof R]: R[K] extends $ ? E : never; }[keyof R] >, - ] ->; - -/** - * Sequence over an ReadonlyRecord of type V, inverting the relationship between V and - * ReadonlyRecord. This function also keeps the indexed types of in each V at - * covariant position 0. In other words sequence over [Option, - * Option] becomes Option<[number, string]>. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import * as O from "./option.ts"; - * - * const sequence = R.sequence(O.ApplicableOption); - * - * const result1 = sequence({ one: O.some(1), two: O.some("Hello")}); // Some({ one: 1, two: "Hello"}) - * const result2 = sequence({ one: O.none, two: O.some("Uh Oh")}); // None - * ``` - * - * @since 2.0.0 - */ -export function sequence( - A: Applicable, -): >>( - values: NonEmptyRecord, -) => Sequence { - const sequence = traverse(A)(identity as any); - return >>( - vs: NonEmptyRecord, - ): Sequence => sequence(vs) as Sequence; -} - -/** - * Insert a value A into a ReadonlyRecord at the key location. If the value - * inserted has object equality with the current value in the record then - * no change is made and the original record is returned. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { pipe } from "./fn.ts"; - * - * const insert = R.insert(1); - * - * const result1 = pipe( - * { one: 1, two: 2 }, - * insert('one'), - * ); // No Mutation, returns original object - * const result2 = pipe( - * { two: 2 }, - * insert('one'), - * ); // { one: 1, two: 2 } - * ``` - * - * @since 2.0.0 - */ -export function insert(value: A) { - return (key: string) => (rec: ReadonlyRecord): ReadonlyRecord => - rec[key] === value ? rec : { ...rec, [key]: value }; -} - -/** - * Insert a value A into a ReadonlyRecord at the key location. If the value - * inserted has object equality with the current value in the record then - * no change is made and the original record is returned. This is the same - * function as insert but with the order of parameters swapped - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { pipe } from "./fn.ts"; - * - * const atOne = R.insertAt('one'); - * - * const result1 = pipe( - * { one: 1, two: 2 }, - * atOne(1), - * ); // No Mutation, returns original object - * const result2 = pipe( - * { two: 2 }, - * atOne(1), - * ); // { one: 1, two: 2 } - * ``` - * - * @since 2.0.0 - */ -export function insertAt(key: string) { - return (value: A) => (rec: ReadonlyRecord): ReadonlyRecord => - rec[key] === value ? rec : { ...rec, [key]: value }; -} - -/** - * Modify a value A into a ReadonlyRecord at the key location. If the - * object does not hold the specified key then no change is made. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { pipe } from "./fn.ts"; - * - * const addOne = R.modify((n: number) => n + 1); - * - * const result1 = pipe( - * { one: 1, two: 2 }, - * addOne('one'), - * ); // { one: 2, two: 2 } - * const result2 = pipe( - * { two: 2 }, - * addOne('one') - * ); // { two: 2 } - * ``` - * - * @since 2.0.0 - */ -export function modify(modifyFn: (a: A) => A) { - return (key: string) => (rec: ReadonlyRecord): ReadonlyRecord => { - if (Object.hasOwn(rec, key)) { - const out = modifyFn(rec[key]); - return out === rec[key] ? rec : { ...rec, [key]: out }; - } - return rec; - }; -} - -/** - * Modify a value A into a ReadonlyRecord at the key location. If the - * object does not hold the specified key then no change is made. This - * is the same function as modify with the order of parameters flipped. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { pipe } from "./fn.ts"; - * - * const inc = (n: number) => n + 1; - * const atOne = R.modifyAt('one'); - * - * const result1 = pipe( - * { one: 1, two: 2 }, - * atOne(inc), - * ); // { one: 2, two: 2 } - * const result2 = pipe( - * { two: 2 }, - * atOne(inc), - * ); // { two: 2 } - * ``` - * - * @since 2.0.0 - */ -export function modifyAt(key: string) { - return (modifyFn: (a: A) => A) => - (rec: ReadonlyRecord): ReadonlyRecord => { - if (Object.hasOwn(rec, key)) { - const out = modifyFn(rec[key]); - return out === rec[key] ? rec : { ...rec, [key]: out }; - } - return rec; - }; -} - -/** - * Update a ReadonlyRecord at key with a value A. The record will only be - * updated if it already holds the specified key, otherwise no changes are - * made. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { pipe } from "./fn.ts"; - * - * const to2 = R.update(2); - * - * const result1 = pipe( - * { one: 1, two: 2 }, - * to2('one'), - * ); // { one: 2, two: 2 } - * const result2 = pipe( - * { two: 2 }, - * to2('one'), - * ); // No change { two: 2 } - * ``` - * - * @since 2.0.0 - */ -export function update(value: A) { - return (key: string) => (rec: ReadonlyRecord): ReadonlyRecord => - Object.hasOwn(rec, key) ? { ...rec, [key]: value } : rec; -} - -/** - * Update a ReadonlyRecord at key with a value A. The record will only be - * updated if it already holds the specified key, otherwise no changes are - * made. This function does the same as update but has the parameters - * switched in order - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { pipe } from "./fn.ts"; - * - * const atOne = R.updateAt('one'); - * - * const result1 = pipe( - * { one: 1, two: 2 }, - * atOne(2), - * ); // { one: 2, two: 2 } - * const result2 = pipe( - * { two: 2 }, - * atOne(2), - * ); // No change { two: 2 } - * ``` - * - * @since 2.0.0 - */ -export function updateAt(key: string) { - return (value: A) => (rec: ReadonlyRecord): ReadonlyRecord => - Object.hasOwn(rec, key) ? { ...rec, [key]: value } : rec; -} - -/** - * Lookup the value at key. Returns an Option, where None indicates - * that the record does not hold the key. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { pipe } from "./fn.ts"; - * - * const result1 = pipe( - * { one: 1, two: 2 }, - * R.lookupAt('one'), - * ); // Some(1) - * const result2 = pipe( - * { one: 1, two: 2 }, - * R.lookupAt('three'), - * ); // None - * ``` - * - * @since 2.0.0 - */ -export function lookupAt(key: string) { - return (rec: ReadonlyRecord): Option => - Object.hasOwn(rec, key) ? some(rec[key]) : none; -} - -/** - * Lookup the value in a record at key and return an optional - * pair with the key and the value if the record holds the key. - * Returns None if the record does not hold the key. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { pipe } from "./fn.ts"; - * - * const result1 = pipe( - * { one: 1, two: 2 }, - * R.lookupWithKey('one'), - * ); // Some(['one', 1]) - * const result2 = pipe( - * { one: 1, two: 2 }, - * R.lookupWithKey('three'), - * ); // None - * ``` - * - * @since 2.0.0 - */ -export function lookupWithKey(key: string) { - return (record: ReadonlyRecord): Option> => { - if (Object.hasOwn(record, key)) { - return some([key, record[key]]); - } - return none; - }; -} - -/** - * Remove the value and key at key from a ReadonlyRecord. If the - * record does not hold the key then no change is made and the - * original record is returned. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { pipe } from "./fn.ts"; - * - * const result1 = pipe( - * { one: 1, two: 2 }, - * R.deleteAt('one'), - * ); // { two: 2 } - * const result2 = pipe( - * { two: 2 }, - * R.deleteAt('one'), - * ); // No Change { two: 2 } - * - * ``` - * - * @since 2.0.0 - */ -export function deleteAt(key: string) { - return ( - rec: ReadonlyRecord, - ): ReadonlyRecord => { - if (Object.hasOwn(rec, key)) { - const out = { ...rec }; - delete out[key]; - return out; - } - return rec; - }; -} - -/** - * Remove the key from the ReadonlyRecord, returning a pair containing - * the new record and an Option containing the removed key value. If - * the record did not hold the specified key then this is a non-op and - * the return will be the original record and none. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { pipe } from "./fn.ts"; - * - * const result1 = pipe( - * { one: 1, two: 2 }, - * R.deleteAtWithValue('one'), - * ); // [{ two: 2 }, Some(1)] - * const result2 = pipe( - * { one: 1, two: 2 }, - * R.deleteAtWithValue('three'), - * ); // [{ one: 1, two: 2}, None] - * ``` - * - * @since 2.0.0 - */ -export function deleteAtWithValue(key: string) { - return ( - rec: ReadonlyRecord, - ): Pair, Option> => { - if (Object.hasOwn(rec, key)) { - const out = { ...rec }; - const value = rec[key]; - delete out[key]; - return [out, some(value)]; - } - return [rec, none]; - }; -} - -/** - * Given an instance of Comparable for the values in a ReadonlyRecord - * return a curried function `second => first => boolean` that returns - * true when first is a subrecord of second. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { ComparableNumber } from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const first = { one: 1, two: 2 }; - * const second = { one: 1, two: 2, three: 3 }; - * const isSub = R.isSubrecord(ComparableNumber); - * - * const result1 = pipe( - * first, - * isSub(second), - * ); // true - * const result2 = pipe( - * second, - * isSub(first), - * ); // false - * ``` - * - * @since 2.0.0 - */ -export function isSubrecord( - S: Comparable, -): (second: ReadonlyRecord) => (first: ReadonlyRecord) => boolean { - return (second) => (first) => { - for (const key in first) { - if (!Object.hasOwn(second, key) || !S.compare(second[key])(first[key])) { - return false; - } - } - return true; - }; -} - -/** - * Given a refinement or a predicate, filter a ReadonlyRecord - * by removing any values that do not match the predicate or - * refinement. ie. When the predicate/refinement return true - * a value is kept and when it returns false a value is removed. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * { one: 1, two: 2, three: 3 }, - * R.filter(n => n > 1), - * ); // { one: 1 } - * ``` - * - * @since 2.0.0 - */ -export function filter( - refinement: (a: A, key: string) => a is I, -): (ua: ReadonlyRecord) => ReadonlyRecord; -export function filter( - predicate: (a: A, key: string) => boolean, -): (ua: ReadonlyRecord) => ReadonlyRecord; -export function filter( - predicate: (a: A, key: string) => boolean, -): (ua: ReadonlyRecord) => ReadonlyRecord { - return (ua) => { - const output = {} as Record; - for (const key in ua) { - if (predicate(ua[key], key)) { - output[key] = ua[key]; - } - } - return output; - }; -} - -/** - * Given a function over the values in a ReadonlyArray returning an - * Option, return a function thatsimultaneously filters and maps over - * the values in a ReadonlyRecord. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import * as O from "./option.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * { one: 1, two: 2, three: 3 }, - * R.filterMap(n => n > 1 ? O.some(`${n} is big enough`) : O.none), - * ); // { two: "2 is big enough", three: "3 is big enough" } - * ``` - * - * @since 2.0.0 - */ -export function filterMap( - fai: (a: A, key: string) => Option, -): (ua: ReadonlyRecord) => ReadonlyRecord { - return (ua) => { - const output = {} as Record; - for (const key in ua) { - const result = fai(ua[key], key); - if (isSome(result)) { - output[key] = result.value; - } - } - return output; - }; -} - -/** - * Given a refinement or predicate, return a function that splits a - * ReadonlyRecord into a Pair of ReadonlyRecords, with the first - * record containing the values for which the predicate/refinement - * returned true and the second record containing the values for which - * the predicate/refinement returned false. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * { one: 1, two: 2, three: 3 }, - * R.partition(n => n > 1), - * ); // [{ two: 2, three: 3 }, { one: 1 }] - * ``` - * - * @since 2.0.0 - */ -export function partition( - refinement: (a: A, key: string) => a is I, -): (ua: ReadonlyRecord) => Pair, ReadonlyRecord>; -export function partition( - predicate: (a: A, key: string) => boolean, -): (ua: ReadonlyRecord) => Pair, ReadonlyRecord>; -export function partition( - predicate: (a: A, key: string) => boolean, -): (ua: ReadonlyRecord) => Pair, ReadonlyRecord> { - return (ua) => { - const first = {} as Record; - const second = {} as Record; - for (const key in ua) { - if (predicate(ua[key], key)) { - first[key] = ua[key]; - } else { - second[key] = ua[key]; - } - } - return pair(first as ReadonlyRecord, second as ReadonlyRecord); - }; -} - -/** - * Given a function that takes an A and a key and returns an Either - * return a function that simultaneously partitions and maps over the - * values in a ReadonlyRecord. This is the equivalent of first - * partitioning a ReadonlyRecord, and then using Pair's Bimap over - * both values in a Pair. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import * as E from "./either.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * { one: 1, two: 2, three: 3 }, - * R.partitionMap( - * n => n > 1 - * ? E.right(`${n} is big enough`) - * : E.left(`${n} is small enough`) - * ), - * ); - * // [ - * // { two: "2 is big enough", three: "3 is big enough" }, - * // { one: "1 is small enough" } - * // ] - * ``` - * - * @since 2.0.0 - */ -export function partitionMap( - fai: (a: A, key: string) => Either, -): (ua: ReadonlyRecord) => Pair, ReadonlyRecord> { - return (ua) => { - const first = {} as Record; - const second = {} as Record; - for (const key in ua) { - const result = fai(ua[key], key); - if (isRight(result)) { - first[key] = result.right; - } else { - second[key] = result.left; - } - } - return pair(first, second); - }; -} - -/** - * The canonical implementation of Filterable for ReadonlyRecord. It contains - * the methods filter, filterMap, partition, and partitionMap. - * - * @since 2.0.0 - */ -export const FilterableRecord: Filterable = { - filter, - filterMap, - partition, - partitionMap, -}; - -/** - * The canonical implementation of Mappable for ReadonlyRecord. It contains - * the method map. - * - * @since 2.0.0 - */ -export const MappableRecord: Mappable = { map }; - -/** - * The canonical implementation of Reducible for ReadonlyRecord. It contains - * the method reduce. - * - * @since 2.0.0 - */ -export const ReducibleRecord: Reducible = { reduce }; - -/** - * The canonical implementation of Traversable for ReadonlyRecord. It contains - * the methods map, reduce, and traverse. - * - * @since 2.0.0 - */ -export const TraversableRecord: Traversable = { - map, - reduce, - traverse, -}; - -/** - * Given a Showable for the inner values of a ReadonlyRecord, return an instance - * of Showable for ReadonlyRecord. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { ShowableNumber } from "./number.ts"; - * - * const { show } = R.getShowable(ShowableNumber); - * - * const result = show({ one: 1, two: 2, three: 3 }); - * // "{one: 1, two: 2, three: 3}" - * ``` - * - * @since 2.0.0 - */ -export function getShowable(SA: Showable): Showable> { - return ({ - show: (ua) => - `{${ - Object.entries(ua).map(([key, value]) => `${key}: ${SA.show(value)}`) - .join(", ") - }}`, - }); -} diff --git a/vendor/deno.land/x/fun@v2.0.0-alpha.15/reducible.ts b/vendor/deno.land/x/fun@v2.0.0-alpha.15/reducible.ts deleted file mode 100644 index 53df5f4..0000000 --- a/vendor/deno.land/x/fun@v2.0.0-alpha.15/reducible.ts +++ /dev/null @@ -1,38 +0,0 @@ -/** - * Reducible is a structure that allows a function to all values inside of a - * structure. The reduction is accumulative and ordered. - * - * @module Reducible - * @since 2.0.0 - */ - -import type { $, Hold, Kind } from "./kind.ts"; -import type { Initializable } from "./initializable.ts"; - -/** - * A Reducible structure has the method reduce. - * - * @since 2.0.0 - */ -export interface Reducible extends Hold { - readonly reduce: ( - reducer: (accumulator: O, value: A) => O, - accumulator: O, - ) => ( - ua: $, - ) => O; -} - -/** - * @experimental - * @since 2.0.0 - */ -export function collect( - { reduce }: Reducible, - { combine, init }: Initializable, -): ( - ua: $, -) => A { - return (ua) => - reduce((first, second) => combine(second)(first), init())(ua); -} diff --git a/vendor/deno.land/x/fun@v2.0.0-alpha.15/refinement.ts b/vendor/deno.land/x/fun@v2.0.0-alpha.15/refinement.ts deleted file mode 100644 index f34db9b..0000000 --- a/vendor/deno.land/x/fun@v2.0.0-alpha.15/refinement.ts +++ /dev/null @@ -1,670 +0,0 @@ -/** - * The Refinement type represents a function that takes a type and returns a - * boolean. It denotes a function that narrows a type at runtime. For example - * the function `(n: unknown): n is number => typeof n === "number"` is the - * refinement type `Refinement`. The primary use for Refinement - * is to align the runtime value with compile time types. - * - * @module Refinement - * @since 2.0.0 - */ -import type { In, Kind, Out } from "./kind.ts"; - -import type { NonEmptyArray } from "./array.ts"; -import type { Option } from "./option.ts"; -import type { Either } from "./either.ts"; -import type { ReadonlyRecord } from "./record.ts"; -import type { Literal, Schemable } from "./schemable.ts"; - -import { memoize } from "./fn.ts"; - -/** - * The refinement type is a function that returns a boolean indicating that a - * value satisfies a type. - * - * @since 2.0.0 - */ -export type Refinement = (a: A) => a is B; - -/** - * A type that matches any refinement type. - * - * @since 2.0.0 - */ -// deno-lint-ignore no-explicit-any -export type AnyRefinement = Refinement; - -/** - * The ToIn type takes a Refinement type and returns the type of its input. - * - * @since 2.0.0 - */ -export type ToIn = T extends Refinement ? B : never; - -/** - * The ToOut type takes a Refinement type and returns the type of its output - * refinement. - * - * @since 2.0.0 - */ -export type ToOut = T extends Refinement ? A : never; - -/** - * Specifies Refinement as a Higher Kinded Type, with covariant - * parameter B corresponding to the 0th index of any substitutions and - * contravariant parameter A corresponding to the 0th index of any - * substitutions. - * - * @since 2.0.0 - */ -export interface KindRefinement extends Kind { - readonly kind: Refinement, Out>; -} - -/** - * Specifies Refinement as a Higher Kinded Type, with covariant - * parameter B corresponding to the 0th index of any substitutions. - * - * @since 2.0.0 - */ -export interface KindUnknownRefinement extends Kind { - readonly kind: Refinement>; -} - -/** - * Construct a refinement from a function (a: A) => Option where None denotes - * that a type does not satisfy the refinement. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * import * as O from "./option.ts"; - * - * const refine = R.fromOption((u: unknown) => typeof u === "number" ? O.some(u) - * : O.none); - * const value1: unknown = "Hello"; - * const value2: unknown = 0; - * - * const result1 = refine(value1); // false, value1: unknown - * const result2 = refine(value2); // true, value2: number - * ``` - * - * @since 2.0.0 - */ -export function fromOption( - faob: (a: A) => Option, -): Refinement { - return (a: A): a is B => faob(a).tag === "Some"; -} - -/** - * Construct a refinement from a function (a: A) => Either where Left denotes - * that a type does not satisfy the refinement. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * import * as E from "./either.ts"; - * - * const refine = R.fromEither((u: unknown) => typeof u === "number" ? E.right(u) - * : E.left(u)); - * const value1: unknown = "Hello"; - * const value2: unknown = 0; - * - * const result1 = refine(value1); // false, value1: unknown - * const result2 = refine(value2); // true, value2: number - * ``` - * - * @since 2.0.0 - */ -export function fromEither( - faob: (a: A) => Either, -): Refinement { - return (a: A): a is B => faob(a).tag === "Right"; -} - -/** - * Compose two refinements into a new refinement that returns true if either of - * the two input refinements return true. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * import { pipe } from "./fn.ts"; - * - * const number = (u: unknown): u is number => typeof u === "number"; - * const string = (u: unknown): u is string => typeof u === "string"; - * const refine = pipe(number, R.or(string)); - * - * const result1 = refine("Hello"); // true - * const result2 = refine(null); // false - * ``` - * - * @since 2.0.0 - */ -export function or( - second: Refinement, -): (first: Refinement) => Refinement { - return (first: Refinement): Refinement => - (a: A): a is B | C => first(a) || second(a); -} - -/** - * Compose two refinements into a new refinement that returns true if both of - * the two input refinements return true. - * - * @example - * ```ts - * import type { Newtype } from "./newtype.ts"; - * - * import * as R from "./refinement.ts"; - * import { pipe } from "./fn.ts"; - * - * const isBig = (s: unknown): s is "Big" => s === "Big"; - * const refine = pipe(R.string, R.and(isBig)); - * - * const result1 = refine(null); // false - * const result2 = refine("Hello"); // false - * const result3 = refine("Big"); // false - * ``` - * - * @since 2.0.0 - */ -export function and( - second: Refinement, -): (first: Refinement) => Refinement { - return (first: Refinement): Refinement => - (a: A): a is B & C => first(a) && second(a); -} - -/** - * Create a identity refinement that always returns true as at the type level a - * type A is always a type A. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * - * const number = R.id(); - * - * const result = number(1); // true.. but only numbers can be passed here. - * ``` - * - * @since 2.0.0 - */ -export function id(): Refinement { - return (() => true) as unknown as Refinement; -} - -/** - * Compose two refinements, A -> B and B -> C creating a `Refinement`. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * import { pipe } from "./fn.ts"; - * - * type Person = { name: string }; - * type Rec = Record; - * - * const nonnull = (u: unknown): u is Rec => u !== null && u !== undefined; - * const hasKey = - * (key: K) => (u: Rec): u is Record => - * Object.hasOwn(u, key); - * const person = (u: Record<"name", unknown>): u is Person => - * typeof u.name === - * "string"; - * - * const isPerson = pipe(nonnull, R.compose(hasKey("name")), R.compose(person)); - * - * const value1 = null; - * const value2 = {}; - * const value3 = { name: 1 }; - * const value4 = { name: "Brandon" }; - * - * const result1 = isPerson(value1); // false - * const result2 = isPerson(value2); // false - * const result3 = isPerson(value3); // false - * const result4 = isPerson(value4); // true, value4: Person - * ``` - * - * @since 2.0.0 - */ -export function compose( - second: Refinement, -): (first: Refinement) => Refinement { - return (first: Refinement): Refinement => (a: A): a is C => - first(a) && second(a); -} - -/** - * An instance of `Refinement`. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * - * const result = R.unknown(null); // true, null is unknown! all is unknown! - * ``` - * - * @since 2.0.0 - */ -export function unknown(_: unknown): _ is unknown { - return true; -} - -/** - * An instance of `Refinement`. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * - * const result1 = R.string(null); // false - * const result2 = R.string("Hello"); // true, a variable is now typed as string - * ``` - * - * @since 2.0.0 - */ -export function string(a: unknown): a is string { - return typeof a === "string"; -} - -/** - * An instance of `Refinement`. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * - * const result1 = R.number(null); // false - * const result2 = R.number(2); // true, a variable is now typed as number - * ``` - * - * @since 2.0.0 - */ -export function number(a: unknown): a is number { - return typeof a === "number"; -} - -/** - * An instance of `Refinement`. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * - * const result1 = R.boolean(null); // false - * const result2 = R.boolean(true); // true, a variable is now typed as true - * ``` - * - * @since 2.0.0 - */ -export function boolean(a: unknown): a is boolean { - return typeof a === "boolean"; -} - -/** - * An instance of `Refinement>`. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * - * const result1 = R.isRecord(null); // false - * const result2 = R.isRecord({}); - * // true, a variable is now typed as Record - * ``` - * - * @since 2.0.0 - */ -export function isRecord(a: unknown): a is Record { - return typeof a === "object" && a !== null; -} - -/** - * An instance of `Refinement>`. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * - * const result1 = R.isArray(null); // false - * const result2 = R.isArray([]); - * // true, a variable is now typed as Array - * ``` - * - * @since 2.0.0 - */ -export function isArray(a: unknown): a is Array { - return Array.isArray(a); -} - -/** - * Creates an instance `Refinement & { length: N }>` - * where N is a number. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * - * const isTwoTuple = R.isArrayN(2); - * - * const result1 = isTwoTuple(null); // false - * const result2 = isTwoTuple([]); // false - * const result3 = isTwoTuple([1, 2]); - * // true, a variable is now typed as Array & { length: 2 } - * ``` - * - * @since 2.0.0 - */ -export function isArrayN( - n: N, -): Refinement & { length: N }> { - return (a): a is Array & { length: N } => - isArray(a) && a.length == n; -} - -/** - * Creates an instance of `Refinement` where P is a union of literal - * values. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * - * const places = R.literal(1, 2, 3); - * - * const result1 = places(null); // false - * const result2 = places(1); // true, variable now typed as 1 | 2 | 3 - * const result3 = places(2); // true, variable now typed as 1 | 2 | 3 - * const result4 = places(10); // false - * ``` - * - * @since 2.0.0 - */ -export function literal>( - ...literals: A -): Refinement { - return (a): a is A[number] => literals.some((l) => l === a); -} - -/** - * Turn a `Refinement` into `Refinement`. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * - * const nullOrNum = R.nullable(R.number); - * - * const result1 = nullOrNum(null); // true, variable is now null | number - * const result2 = nullOrNum(1); // true, variable is now null | number - * const result3 = nullOrNum("hello"); // false - * ``` - * - * @since 2.0.0 - */ -export function nullable( - or: Refinement, -): Refinement { - return (a): a is B | null => a === null || or(a); -} - -/** - * Turn a `Refinement` into `Refinement`. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * - * const test = R.undefinable(R.number); - * - * const result1 = test(null); // false - * const result2 = test(1); // true, variable is now undefined | number - * const result3 = test("hello"); // false - * const result4 = test(undefined); // true, variable is now undefined | number - * ``` - * - * @since 2.0.0 - */ -export function undefinable( - or: Refinement, -): Refinement { - return (a): a is B | undefined => a === undefined || or(a); -} - -/** - * Turn a `Refinement` into `Refinement>`. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * - * const numbers = R.record(R.number); - * - * const result1 = numbers(null); // false - * const result2 = numbers({}); // true, {} has type ReadonlyRecord - * const result3 = numbers({ hello: "world" }); // false - * const result4 = numbers({ hello: 1 }); - * // true, variable has type ReadonlyRecord - * ``` - * - * @since 2.0.0 - */ -export function record( - codomain: Refinement, -): Refinement> { - return (a): a is ReadonlyRecord => - isRecord(a) && Object.values(a).every(codomain); -} - -/** - * Turn a `Refinement` into `Refinement>`. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * - * const numbers = R.array(R.number); - * - * const result1 = numbers(null); // false - * const result2 = numbers([]); // true, [] has type ReadonlyArray - * const result3 = numbers(["Hello"]); // false - * const result4 = numbers([1]); - * // true, variable has type ReadonlyArray - * ``` - * - * @since 2.0.0 - */ -export function array( - item: Refinement, -): Refinement> { - return (a): a is Array => Array.isArray(a) && a.every(item); -} - -/** - * Create a Refinement from an array of refinements, where each index of a type - * much match the originated refinement type. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * - * const tuple = R.tuple(R.number, R.string); - * - * const result1 = tuple(null); // false - * const result2 = tuple([]); // false - * const result3 = tuple(["Hello", 1]); // false - * const result4 = tuple([1, "Hello"]); - * // true, variable has type [number, string] - * const result5 = tuple([1, "Hello", "Goodbye"]); // false - * ``` - * - * @since 2.0.0 - */ -// deno-lint-ignore no-explicit-any -export function tuple( - ...items: { [K in keyof A]: Refinement } -): Refinement { - return (a): a is { [K in keyof A]: A[K] } => - Array.isArray(a) && items.length === a.length && - a.every((value, index) => items[index](value)); -} - -/** - * Create a Refinement from a struct of refinements, where each index of a type - * much match the originated refinement type, key for key. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * - * const struct = R.struct({ - * num: R.number, - * str: R.string - * }); - * - * const result1 = struct(null); // false - * const result2 = struct({}); // false - * const result3 = struct({ num: "Hello", str: 1 }); // false - * const result4 = struct({ num: 1, str: "Hello" }); - * // true, variable has type { num: number, str: string } - * const result5 = struct([1, "Hello", "Goodbye"]); // false - * ``` - * - * @since 2.0.0 - */ -export function struct( - items: { [K in keyof A]: Refinement }, -): Refinement { - const entries: [string, Refinement][] = Object.entries( - items, - ); - return (a): a is { readonly [K in keyof A]: A[K] } => - isRecord(a) && - entries.every(([key, refine]) => key in a && refine(a[key])); -} - -/** - * Create a Refinement from a struct of refinements, where each index of a type - * much match the originated refinement type, key for key, or not have that - * property at all. This is distinct from the property being null or undefined. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * - * const struct = R.partial({ - * num: R.number, - * str: R.string - * }); - * - * const result1 = struct(null); // false - * const result2 = struct({}); // true, - * const result3 = struct({ num: "Hello", str: 1 }); // false - * const result4 = struct({ num: 1, str: "Hello" }); - * // true, variable has type { num?: number, str": string } - * const result5 = struct({ - * num: 1, - * str: "Hello", - * other: "Goodbye" - * }); // true, variable ahs type { num?: number, str?: string } - * ``` - * - * @since 2.0.0 - */ -export function partial( - items: { [K in keyof A]: Refinement }, -): Refinement { - const entries: [string, Refinement][] = Object.entries( - items, - ); - return (a): a is { [K in keyof A]?: A[K] } => - isRecord(a) && - entries.every(([key, refine]) => !(key in a) || refine(a[key])); -} - -/** - * Intersect is an alias of and. - * - * @since 2.0.0 - */ -export function intersect( - gi: Refinement, -): (ga: Refinement) => Refinement { - return (ga: Refinement) => (a): a is A & I => - ga(a) && gi(a); -} - -/** - * Union is an alias of or. - * - * @since 2.0.0 - */ -export function union( - gi: Refinement, -): (ga: Refinement) => Refinement { - return (ga: Refinement) => (a): a is A | I => - ga(a) || gi(a); -} - -/** - * Lazy is used to handle the case where a refinement is recursive. - * - * @example - * ```ts - * import type { Refinement } from "./refinement.ts"; - * import * as R from "./refinement.ts"; - * - * type Person = { name: string; age: number; children: ReadonlyArray }; - * - * const person: Refinement = R.lazy("Person", () => - * R.struct({ - * name: R.string, - * age: R.number, - * children: R.array(person), - * })); - * - * const rufus = { name: "Rufus", age: 1, children: [] }; - * const brandon = { name: "Brandon", age: 37, children: [rufus] }; - * - * const result1 = person(null); // false - * const result2 = person(rufus); // true, rufus: Person - * const result3 = person(brandon); // true, brandon: Person - * ``` - * - * @since 2.0.0 - */ -export function lazy( - _: string, - refinement: () => Refinement, -): Refinement { - const get = memoize>(refinement); - return (u: A): u is B => get()(u); -} - -/** - * The canonical implementation of Schemable for UnknownRefinement. It contains - * the methods unknown, string, number, boolean, literal, nullable, undefinable, - * record, array, tuple, struct, partial, intersect, union, and lazy. - * - * @since 2.0.0 - */ -export const SchemableRefinement: Schemable = { - unknown: () => unknown, - string: () => string, - number: () => number, - boolean: () => boolean, - literal, - nullable, - undefinable, - record, - array, - tuple: tuple as Schemable["tuple"], - struct, - partial, - intersect: intersect as Schemable["intersect"], - union, - lazy, -}; diff --git a/vendor/deno.land/x/fun@v2.0.0-alpha.15/schemable.ts b/vendor/deno.land/x/fun@v2.0.0-alpha.15/schemable.ts deleted file mode 100644 index 454e58a..0000000 --- a/vendor/deno.land/x/fun@v2.0.0-alpha.15/schemable.ts +++ /dev/null @@ -1,325 +0,0 @@ -/** - * Schemable presents a unified algebra for parsing, decoding - * guarding, or otherwise building typed js structures in - * TypeScript. - * - * @module Schemable - * @since 2.0.0 - */ - -import type { $, Hold, Kind, Spread } from "./kind.ts"; -import type { NonEmptyArray } from "./array.ts"; -import type { ReadonlyRecord } from "./record.ts"; - -import { memoize } from "./fn.ts"; - -/** - * These are the super-types that a Literal schema must extent. - * They are used to constrain the inputs for LiteralSchemable. - * - * @since 2.0.0 - */ -export type Literal = string | number | boolean | null | undefined; - -/** - * Wraps an unknown type in Schemable. This is the best escape - * hatch when a Schema isn't known ahead of time. - * - * @since 2.0.0 - */ -export interface UnknownSchemable extends Hold { - readonly unknown: () => $; -} - -/** - * Wraps a string type in Schemable. - * - * @since 2.0.0 - */ -export interface StringSchemable extends Hold { - readonly string: () => $; -} - -/** - * Wraps a number type in Schemable. - * - * @since 2.0.0 - */ -export interface NumberSchemable extends Hold { - readonly number: () => $; -} - -/** - * Wraps a boolean type in Schemable. - * - * @since 2.0.0 - */ -export interface BooleanSchemable extends Hold { - readonly boolean: () => $; -} - -/** - * Wraps a union of literals in Schemable. - * - * @since 2.0.0 - */ -export interface LiteralSchemable extends Hold { - readonly literal: , B, C, D, E>( - ...s: A - ) => $; -} - -/** - * Takes a Schemable and returns a Schemable; - * - * @since 2.0.0 - */ -export interface NullableSchemable extends Hold { - readonly nullable: ( - or: $, - ) => $; -} - -/** - * Takes a Schemable and returns a Schemable; - * - * @since 2.0.0 - */ -export interface UndefinableSchemable extends Hold { - readonly undefinable: ( - or: $, - ) => $; -} - -/** - * Takes a Schemable and returns a Schemable> - * - * @since 2.0.0 - */ -export interface RecordSchemable extends Hold { - readonly record: ( - codomain: $, - ) => $, B, C], [D], [E]>; -} - -/** - * Takes a Schemable and returns a Schemable> - * - * @since 2.0.0 - */ -export interface ArraySchemable extends Hold { - readonly array: ( - item: $, - ) => $, B, C], [D], [E]>; -} - -/** - * Takes a tuple of Schemables and returns a Schemable - * for a tuple that matches, index for index, the input - * schemables. - * - * ie. [StringSchemable, NumberSchemable] becomes - * Schemable<[string, number]> - * - * @since 2.0.0 - */ -export interface TupleSchemable extends Hold { - // deno-lint-ignore no-explicit-any - readonly tuple: ( - ...items: { readonly [K in keyof A]: $ } - ) => $; -} - -/** - * Takes a struct of Schemables and returns a Schemable - * for a struct that matches, key for key, the input - * schemables. - * - * ie. { str: StringSchemable, num: NumberSchemable } becomes - * Schemable<{ str: string, num: number }> - * - * @since 2.0.0 - */ -export interface StructSchemable extends Hold { - readonly struct: ( - items: { readonly [K in keyof A]: $ }, - ) => $; -} - -/** - * Takes a struct of Schemables and returns a Schemable - * for a struct that matches, key for key, the input - * schemables but the values can also be partial. - * - * ie. { str: StringSchemable, num: NumberSchemable } becomes - * Schemable<{ str?: string, num?: number }> - * - * @since 2.0.0 - */ -export interface PartialSchemable extends Hold { - readonly partial: ( - items: { readonly [K in keyof A]: $ }, - ) => $; -} - -/** - * Takes two schemables, left and right, and returns - * the intersection of them. This means that any value - * for must match both schemables. - * - * @since 2.0.0 - */ -export interface IntersectSchemable extends Hold { - readonly intersect: ( - right: $, - ) => ( - left: $, - ) => $, B, C], [D], [E]>; -} - -/** - * Takes two schemables, left and right, and returns - * the union of them. This means that any value - * for must match either schemable. - * - * @since 2.0.0 - */ -export interface UnionSchemable extends Hold { - readonly union: ( - right: $, - ) => (left: $) => $; -} - -/** - * Takes an id and a thunk returning a schemable and - * returns a schemable that matches the return value - * of the thunk. This schemable is necessary for - * handling recursive or corecursive schemables. - * - * @since 2.0.0 - */ -export interface LazySchemable extends Hold { - readonly lazy: ( - id: string, - f: () => $, - ) => $; -} - -/** - * A Schemable is the union of all schemable methods. - * This allows one to build an arbitrary Schema using - * the Schemable interface, then pass a concrete - * Schemable implementation to the Schema. Thus, one - * can build a single model and produce decoders, - * guards, or jsonschema from that model. - * - * @since 2.0.0 - */ -export interface Schemable - extends - UnknownSchemable, - StringSchemable, - NumberSchemable, - BooleanSchemable, - LiteralSchemable, - NullableSchemable, - UndefinableSchemable, - RecordSchemable, - ArraySchemable, - TupleSchemable, - StructSchemable, - PartialSchemable, - IntersectSchemable, - UnionSchemable, - LazySchemable, - Hold {} - -/** - * A Schema is the a function that takes a generic schemable and builds - * a specific model from it. - * - * @since 2.0.0 - */ -export type Schema = < - U extends Kind, ->(S: Schemable) => $; - -/** - * Extracts the inner type of a Schema - * - * @since 2.0.0 - */ -export type TypeOf = T extends Schema ? A : unknown; - -// Helps inference in the schema function -type InferSchema = ( - S: Schemable, -) => $; - -/** - * A helper function to build a generic Schema that can be used - * with any Schemable. - * - * @example - * ```ts - * import { schema, TypeOf } from "./schemable.ts"; - * import { SchemableDecoder } from "./decoder.ts"; - * import { SchemableRefinement } from "./refinement.ts"; - * import { SchemableJsonBuilder, print } from "./json_schema.ts"; - * import { pipe } from "./fn.ts"; - * - * const mySchema = schema(s => pipe( - * s.struct({ - * name: s.string(), - * age: s.number(), - * }), - * s.intersect(s.partial({ - * interests: s.array(s.string()), - * })) - * )); - * - * // Derive the type from the schema - * type MySchema = TypeOf; - * - * const decode = mySchema(SchemableDecoder); - * const refine = mySchema(SchemableRefinement); - * const jsonSchema = mySchema(SchemableJsonBuilder); - * - * const unknown1 = { - * name: "Batman", - * age: 45, - * interests: ["crime fighting", "cake", "bats"], - * }; - * const unknown2 = { - * name: "Cthulhu", - * interests: ["madness"], - * }; - * - * const decoded1 = decode(unknown1); // Success! - * const decoded2 = decode(unknown2); // Failure with info - * - * const refine1 = refine(unknown1); // true - * const refine2 = refine(unknown2); // false - * - * const jsonSchemaString = pipe( - * jsonSchema, - * print, - * json => JSON.stringify(json, null, 2), - * ); // Turns the jsonSchema into a prettified string - * - * ``` - * - * @since 2.0.0 - */ -export function schema< - A, - B = unknown, - C = unknown, - D = unknown, - E = unknown, - U extends Kind = Kind, ->( - s: InferSchema, -): Schema { - return memoize(s) as Schema; -} diff --git a/vendor/deno.land/x/fun@v2.0.0-alpha.15/showable.ts b/vendor/deno.land/x/fun@v2.0.0-alpha.15/showable.ts deleted file mode 100644 index 57901a3..0000000 --- a/vendor/deno.land/x/fun@v2.0.0-alpha.15/showable.ts +++ /dev/null @@ -1,46 +0,0 @@ -/** - * Showable is a structure that indicates that an instance can be converted to a - * string. - * - * @module Showable - * @since 2.0.0 - */ -import type { Hold } from "./kind.ts"; - -/** - * A Showable structure has the method show. - * - * @since 2.0.0 - */ -export interface Showable extends Hold { - readonly show: (value: U) => string; -} - -/** - * @since 2.10.0 - */ -export function struct( - shows: { [K in keyof A]: Showable }, -): Showable<{ readonly [K in keyof A]: A[K] }> { - const entries = Object.entries(shows) as [ - keyof A & string, - Showable, - ][]; - return { - show: (struct) => { - const inner = entries - .map(([key, { show }]) => `${key}: ${show(struct[key])}`) - .join(", "); - return inner.length > 0 ? `{ ${inner} }` : "{}"; - }, - }; -} - -/** - * @since 2.10.0 - */ -export const tuple = >( - ...shows: { [K in keyof A]: Showable } -): Showable> => ({ - show: (tuple) => `[${tuple.map((a, i) => shows[i].show(a)).join(", ")}]`, -}); diff --git a/vendor/deno.land/x/fun@v2.0.0-alpha.15/sortable.ts b/vendor/deno.land/x/fun@v2.0.0-alpha.15/sortable.ts deleted file mode 100644 index a63771d..0000000 --- a/vendor/deno.land/x/fun@v2.0.0-alpha.15/sortable.ts +++ /dev/null @@ -1,460 +0,0 @@ -/** - * This file contains all of the tools for creating and - * composing Sortables. Since an Sortable encapsulates partial - * equality, the tools in this file should concern - * itself with sorting according to an Ordering as well - */ - -import type { Premappable } from "./premappable.ts"; -import type { Hold, In, Kind } from "./kind.ts"; - -/** - * The ordering type is the expected output of any - * Compare function. The canonical example is the output - * of the Array.sort function. For any two values `first` - * and `second`, Ordering means the following: - * - * * -1 : first < second - * * 0 : first = second - * * 1 : first > second - * - * @since 2.0.0 - */ -export type Ordering = -1 | 0 | 1; - -/** - * The Sort function takes to values of the same - * type and returns an ordering, indicating whether - * `first` is less than, equal to, or greater than - * `second. See Ordering for the order. - * - * @since 2.0.0 - */ -export type Sort = (first: A, second: A) => Ordering; - -/** - * A Sortable structure has the method sort. - * - * @since 2.0.0 - */ -export interface Sortable extends Hold { - readonly sort: Sort; -} - -/** - * Specifies Sortable as a Higher Kinded Type, with - * contravariant parameter D corresponding to the 0th - * index of any Substitutions. - * - * @since 2.0.0 - */ -export interface KindSortable extends Kind { - readonly kind: Sortable>; -} - -/** - * Returns an Ordering from any number according - * to its relationship with 0. - * - * @example - * ```ts - * import { sign } from "./sortable.ts"; - * - * const result1 = sign(-9586); // -1 - * const result2 = sign(-0.005); // -1 - * const result3 = sign(1000); // 1 - * const result4 = sign(Number.NEGATIVE_INFINITY); // -1 - * const result5 = sign(0); // 0 - * ``` - * - * @since 2.0.0 - */ -export function sign(n: number): Ordering { - return n < 0 ? -1 : n > 0 ? 1 : 0; -} - -/** - * Construct a curried less than function over A from Sortable. - * - * @example - * ```ts - * import * as O from "./sortable.ts"; - * import { SortableNumber } from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const lt = O.lt(SortableNumber); - * - * const result1 = pipe(1, lt(2)); // true - * const result2 = pipe(2, lt(1)); // false - * const result3 = pipe(1, lt(1)); // false - * ``` - * - * @since 2.0.0 - */ -export function lt({ sort }: Sortable): (snd: A) => (fst: A) => boolean { - return (snd) => (fst): boolean => sort(fst, snd) === -1; -} - -/** - * Construct a curried less than or equal to function over A from Sortable. - * - * @example - * ```ts - * import * as O from "./sortable.ts"; - * import { SortableNumber } from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const lte = O.lte(SortableNumber); - * - * const result1 = pipe(1, lte(2)); // true - * const result2 = pipe(2, lte(1)); // false - * const result3 = pipe(1, lte(1)); // true - * ``` - * - * @since 2.0.0 - */ -export function lte({ sort }: Sortable): (snd: A) => (fst: A) => boolean { - return (snd) => (fst) => sort(fst, snd) !== 1; -} - -/** - * Construct a curried greater than or equal to function over A from Sortable. - * - * @example - * ```ts - * import * as O from "./sortable.ts"; - * import { SortableNumber } from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const gte = O.gte(SortableNumber); - * - * const result1 = pipe(1, gte(2)); // false - * const result2 = pipe(2, gte(1)); // true - * const result3 = pipe(1, gte(1)); // true - * ``` - * - * @since 2.0.0 - */ -export function gte({ sort }: Sortable): (snd: A) => (fst: A) => boolean { - return (snd) => (fst) => sort(fst, snd) !== -1; -} - -/** - * Construct a curried greater than function over A from Sortable. - * - * @example - * ```ts - * import * as O from "./sortable.ts"; - * import { SortableNumber } from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const gt = O.gt(SortableNumber); - * - * const result1 = pipe(1, gt(2)); // false - * const result2 = pipe(2, gt(1)); // true - * const result3 = pipe(1, gt(1)); // false - * ``` - * - * @since 2.0.0 - */ -export function gt({ sort }: Sortable): (snd: A) => (fst: A) => boolean { - return (snd) => (fst) => sort(fst, snd) === 1; -} - -/** - * Construct a minimum function over A from Sortable. - * - * @example - * ```ts - * import * as O from "./sortable.ts"; - * import { SortableNumber } from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const min = O.min(SortableNumber); - * - * const result1 = pipe(1, min(2)); // 1 - * const result2 = pipe(2, min(1)); // 1 - * const result3 = pipe(1, min(1)); // 1 - * ``` - * - * @since 2.0.0 - */ -export function min({ sort }: Sortable): (snd: A) => (fst: A) => A { - return (snd) => (fst) => sort(fst, snd) !== 1 ? fst : snd; -} - -/** - * Construct a maximum function over A from Sortable. - * - * @example - * ```ts - * import * as O from "./sortable.ts"; - * import { SortableNumber } from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const max = O.max(SortableNumber); - * - * const result1 = pipe(1, max(2)); // 2 - * const result2 = pipe(2, max(1)); // 2 - * const result3 = pipe(1, max(1)); // 1 - * ``` - * - * @since 2.0.0 - */ -export function max({ sort }: Sortable): (snd: A) => (fst: A) => A { - return (snd) => (fst) => sort(fst, snd) !== -1 ? fst : snd; -} - -/** - * Construct an inclusive clamp function over A from Sortable. - * - * @example - * ```ts - * import * as O from "./sortable.ts"; - * import { SortableNumber } from "./number.ts"; - * - * const clamp = O.clamp(SortableNumber); - * const clamp1 = clamp(0, 10) - * - * const result1 = clamp1(-1); // 0 - * const result2 = clamp1(1); // 1 - * const result3 = clamp1(100); // 10 - * ``` - * - * @since 2.0.0 - */ -export function clamp( - sort: Sortable, -): (low: A, high: A) => (value: A) => A { - const _min = min(sort); - const _max = max(sort); - return (low, high) => { - const __min = _min(high); - const __max = _max(low); - return (value) => __min(__max(value)); - }; -} - -/** - * Construct an exclusive between function over A from Sortable. - * - * @example - * ```ts - * import * as O from "./sortable.ts"; - * import { SortableNumber } from "./number.ts"; - * - * const between = O.between(SortableNumber); - * const between1 = between(0, 10) - * - * const result1 = between1(-1); // false - * const result2 = between1(1); // true - * const result3 = between1(100); // false - * ``` - * - * @since 2.0.0 - */ -export function between( - sort: Sortable, -): (low: A, high: A) => (value: A) => boolean { - const _gt = gt(sort); - const _lt = lt(sort); - return (low, high) => { - const __gt = _gt(low); - const __lt = _lt(high); - return (value) => __gt(value) && __lt(value); - }; -} - -/** - * Derives an Sortable from a Compare function. - * - * @example - * ```ts - * import { clamp, lte, min, fromSort, sign } from "./sortable.ts"; - * import { pipe } from "./fn.ts"; - * - * const date = fromSort( - * (fst, snd) => sign(fst.valueOf() - snd.valueOf()) - * ); - * - * const now = new Date(); - * const later = new Date(Date.now() + 60 * 60 * 1000); - * const tomorrow = new Date(Date.now() + 24 * 60 * 60 * 1000); - * - * const result1 = pipe(now, lte(date)(later)); // true - * const result2 = pipe(tomorrow, clamp(date)(now, later)); // later - * const result3 = pipe(tomorrow, min(date)(now)); // now - * ``` - * - * @since 2.0.0 - */ -export function fromSort(sort: Sort): Sortable { - return { sort }; -} - -/** - * Create a Sortable from a curried Sort. - * - * @since 2.0.0 - */ -export function fromCurriedSort( - sort: (second: A) => (first: A) => Ordering, -): Sortable { - return fromSort((first, second) => sort(second)(first)); -} - -/** - * Create a trivial Sortable, where all values of A are considered equal. - * - * @example - * ```ts - * import { lt, trivial } from "./sortable.ts"; - * import { pipe } from "./fn.ts"; - * - * const date = trivial(); - * const now = new Date(); - * const later = new Date(Date.now() + 60 * 60 * 1000); - * - * const lessThan = lt(date); - * - * const result1 = pipe(now, lessThan(later)); // false - * const result2 = pipe(later, lessThan(now)); // false - * const result3 = date.sort(now, later); // 1 - * ``` - * - * @since 2.0.0 - */ -export function trivial(): Sortable { - return fromSort(() => 0); -} - -/** - * Derive an Sortable with the reverse ordering of an existing Sortable. - * - * @example - * ```ts - * import { reverse, lt } from "./sortable.ts"; - * import { SortableNumber } from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const rev = reverse(SortableNumber); - * - * const result1 = pipe(1, lt(rev)(2)); // false - * const result2 = pipe(2, lt(rev)(1)); // true - * ``` - * - * @since 2.0.0 - */ -export function reverse({ sort }: Sortable): Sortable { - return fromSort((first, second) => sort(second, first)); -} - -/** - * Derives an Sortable from a tuple of Sortables. The derived Sortable will compare - * two tuples starting at index 0 and return the first ordering - * that is non-zero, otherwise the two tuples are equal. - * - * @example - * ```ts - * import { tuple, lt } from "./sortable.ts" - * import { SortableNumber } from "./number.ts"; - * import { SortableString } from "./string.ts"; - * import { pipe } from "./fn.ts"; - * - * const tup = tuple(SortableNumber, SortableString); - * - * const result1 = pipe([1, "a"], lt(tup)([2, "b"])); // true - * const result2 = pipe([1, "a"], lt(tup)([1, "b"])); // true - * const result3 = pipe([1, "a"], lt(tup)([1, "a"])); // false - * ``` - * - * @since 2.0.0 - */ -export function tuple>( - ...sorts: { [K in keyof T]: Sortable } -): Sortable> { - return fromSort((a, b) => { - for (let i = 0; i < sorts.length; i++) { - const ordering = sorts[i].sort(a[i], b[i]); - if (ordering !== 0) return ordering; - } - return 0; - }); -} - -/** - * Derives an Sortable from a structs of Sortables. The derived Sortable will compare - * two structs starting with the first defined key and return the first - * ordering that is non-zero, otherwise the two structs are equal. - * - * @example - * ```ts - * import { struct, lt } from "./sortable.ts" - * import { SortableNumber } from "./number.ts"; - * import { SortableString } from "./string.ts"; - * import { pipe } from "./fn.ts"; - * - * const ord = struct({ num: SortableNumber, str: SortableString }); - * const _lt = lt(ord); - * - * const result1 = pipe( - * { num: 1, str: "a" }, - * _lt({ str: "b", num: 2 }) - * ); // true - * const result2 = pipe( - * { num: 1, str: "a" }, - * _lt({ str: "b", num: 1 }) - * ); // true - * const result3 = pipe( - * { num: 1, str: "a" }, - * _lt({ str: "a", num: 1 }) - * ); // false - * - * ``` - * - * @since 2.0.0 - */ -export function struct( - sorts: { readonly [K in keyof A]: Sortable }, -): Sortable<{ readonly [K in keyof A]: A[K] }> { - return fromSort((fst, snd) => { - for (const key in sorts) { - const ordering = sorts[key].sort(fst[key], snd[key]); - if (ordering !== 0) return ordering; - } - return 0; - }); -} - -/** - * Derives an instance of Sortable by take an existing Sortable over D and - * a function that turns an L into D and returns an Sortable over L. - * - * @example - * ```ts - * import { premap } from "./sortable.ts"; - * import { SortableNumber } from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * // Use number ordering, turn date into number and premap - * const date = pipe( - * SortableNumber, - * premap((d: Date) => d.valueOf()), - * ); - * ``` - * - * @since 2.0.0 - */ -export function premap( - fld: (l: L) => D, -): ({ sort }: Sortable) => Sortable { - return ({ sort }) => fromSort((fst, snd) => sort(fld(fst), fld(snd))); -} - -/** - * The canonical implementation of Premappable for Sortable. It contains - * the method premap. - * - * @since 2.0.0 - */ -export const PremappableSortable: Premappable = { premap }; diff --git a/vendor/deno.land/x/fun@v2.0.0-alpha.15/string.ts b/vendor/deno.land/x/fun@v2.0.0-alpha.15/string.ts deleted file mode 100644 index 9a1b373..0000000 --- a/vendor/deno.land/x/fun@v2.0.0-alpha.15/string.ts +++ /dev/null @@ -1,479 +0,0 @@ -import type { Initializable } from "./initializable.ts"; -import type { NonEmptyArray } from "./array.ts"; -import type { Option } from "./option.ts"; -import type { Ordering, Sortable } from "./sortable.ts"; -import type { Comparable } from "./comparable.ts"; -import type { Showable } from "./showable.ts"; - -import { fromCompare } from "./comparable.ts"; -import { fromSort } from "./sortable.ts"; -import { fromNullable } from "./option.ts"; -import { isNonEmpty } from "./array.ts"; - -/** - * Compare two strings for equality. - * - * @example - * ```ts - * import { compare } from "./string.ts"; - * - * const hello = "Hello"; - * const hi = "hi"; - * const hi2 = "hi"; - * - * const result1 = compare(hi)(hello); // false - * const result2 = compare(hi)(hi2); // true - * ``` - * - * @since 2.0.0 - */ -export function compare(second: string): (first: string) => boolean { - return (first) => first === second; -} - -/** - * Combine two strings. - * - * @example - * ```ts - * import { combine } from "./string.ts"; - * - * const result1 = combine("Hello")("World"); // "WorldHello" - * ``` - * - * @since 2.0.0 - */ -export function combine(second: string): (first: string) => string { - return (first) => `${first}${second}`; -} - -/** - * Returns an init string. - * - * @example - * ```ts - * import { init } from "./string.ts"; - * - * const result = init(); // "" - * ``` - * - * @since 2.0.0 - */ -export function init(): string { - return ""; -} - -/** - * Compare two strings and return an Ordering (-1, 0, or 1); - * - * @example - * ```ts - * import { sort } from "./string.ts"; - * - * const result1 = sort("aa", "aa"); // 0 - * const result2 = sort("aa", "ab"); // -1 - * const result3 = sort("ba", "aa"); // 1 - * const result4 = sort("ab", "aa"); // 1 - * const result5 = sort("a", "aa"); // -1 - * ``` - * - * @since 2.0.0 - */ -export function sort(first: string, second: string): Ordering { - return first < second ? -1 : second < first ? 1 : 0; -} - -/** - * A instance of Refinement. Used as a type - * guard to verify any type is actually a string. - * - * @example - * ```ts - * import { isString } from "./string.ts"; - * - * const notString: unknown = 2; - * const string: unknown = "hello"; - * - * const result1 = isString(notString); // result1 has type unknown - * const result2 = isString(string); // result2 has type string - * ``` - * - * @since 2.0.0 - */ -export function isString(a: unknown): a is string { - return typeof a === "string"; -} - -/** - * A Predicate for string returning true if the - * string is init. - * - * @example - * ```ts - * import { isEmpty } from "./string.ts"; - * - * const result1 = isEmpty("Hello"); // false - * const result2 = isEmpty(""); // true - * ``` - * - * @since 2.0.0 - */ -export function isEmpty(a: string): boolean { - return a.length === 0; -} - -/** - * Returns the length of an input string. - * - * @example - * ```ts - * import { length } from "./string.ts"; - * - * const result1 = length("Hello"); // 5 - * const result2 = length(""); // 0 - * ``` - * @since 2.0.0 - */ -export function length(a: string): number { - return a.length; -} - -/** - * Split a string into an array of strings at - * a character or RegExp match. - * - * @example - * ```ts - * import { split } from "./string.ts"; - * import { pipe } from "./fn.ts"; - * - * const bySpace = split(" "); - * const byWhitespace = split(/\s+/); - * const str = "Hello There World"; - * - * const result1 = bySpace(str); // ["Hello", "", "There", "", "World"] - * const result2 = byWhitespace(str); // ["Hello", "There", "World"] - * ``` - * - * @since 2.0.0 - */ -export function split(separator: string | RegExp) { - return (s: string): NonEmptyArray => { - const out = s.split(separator); - return isNonEmpty(out) ? out : [s]; - }; -} - -/** - * Creates a Predicate over string that returns true when - * a string includes the searchString at or beyond the - * optional starting position. - * - * @example - * ```ts - * import { includes } from "./string.ts"; - * - * const hasSpace = includes(" "); - * - * const result1 = hasSpace("Hello World"); // true - * const result2 = hasSpace("Goodbye"); // false - * ``` - * - * @since 2.0.0 - */ -export function includes(searchString: string, position?: number) { - return (s: string): boolean => s.includes(searchString, position); -} - -/** - * Creates a Predicate over string that returns true when the string - * starts with the supplied searchString starting at position, if - * it is supplied. - * - * @example - * ```ts - * import { startsWith } from "./string.ts"; - * - * const withHello = startsWith("Hello"); - * - * const result1 = withHello("Hello World"); // true - * const result2 = withHello("Goodbye"); // false - * ``` - * - * @since 2.0.0 - */ -export function startsWith( - searchString: T, - position?: number, -) { - return (s: string): s is `${T}${string}` => - s.startsWith(searchString, position); -} - -/** - * Creates a Predicate over string that returns true when the string - * ends with the supplied searchString starting at position, if - * it is supplied. - * - * @example - * ```ts - * import { endsWith } from "./string.ts"; - * - * const withbye = endsWith("bye"); - * - * const result1 = withbye("Hello World"); // false - * const result2 = withbye("Goodbye"); // true - * ``` - * - * @since 2.0.0 - */ -export function endsWith(searchString: T, position?: number) { - return (s: string): s is `${string}${T}` => - s.endsWith(searchString, position); -} - -/** - * A pipeable form of String.toUpperCase. - * - * @example - * ```ts - * import { toUpperCase } from "./string.ts"; - * - * const result = toUpperCase("hello"); // "HELLO" - * ``` - * - * @since 2.0.0 - */ -export function toUpperCase(a: string): string { - return a.toUpperCase(); -} - -/** - * A pipeable form of String.toLowerCase. - * - * @example - * ```ts - * import { toLowerCase } from "./string.ts"; - * - * const result = toLowerCase("Hello"); // "hello" - * ``` - * - * @since 2.0.0 - */ -export function toLowerCase(a: string): string { - return a.toLowerCase(); -} - -/** - * Create a function that replaces all values in a string according - * to a RegExp and a replacement value. - * - * @example - * ```ts - * import { replace } from "./string.ts"; - * - * const cap = replace("hello", "Hello"); - * - * const result = cap("hello World"); // "Hello World" - * ``` - * - * @since 2.0.0 - */ -export function replace(searchValue: string | RegExp, replaceValue: string) { - return (s: string): string => s.replace(searchValue, replaceValue); -} - -/** - * Trims whitespace from the beginning and end of a string. - * - * @example - * ```ts - * import { trim } from "./string.ts"; - * - * const result1 = trim("Hello World"); // "Hello World" - * const result2 = trim(" Hello World"); // "Hello World" - * const result3 = trim("Hello World "); // "Hello World" - * const result4 = trim(" Hello World "); // "Hello World" - * ``` - * - * @since 2.0.0 - */ -export function trim(a: string): string { - return a.trim(); -} - -/** - * Trims whitespace from the beginning of a string. - * - * @example - * ```ts - * import { trimStart } from "./string.ts"; - * - * const result1 = trimStart("Hello World"); // "Hello World" - * const result2 = trimStart(" Hello World"); // "Hello World" - * const result3 = trimStart("Hello World "); // "Hello World" - * const result4 = trimStart(" Hello World "); // "Hello World" - * ``` - * - * @since 2.0.0 - */ -export function trimStart(a: string): string { - return a.trimStart(); -} - -/** - * Trims whitespace from the end of a string. - * - * @example - * ```ts - * import { trimEnd } from "./string.ts"; - * - * const result1 = trimEnd("Hello World"); // "Hello World" - * const result2 = trimEnd(" Hello World"); // "Hello World" - * const result3 = trimEnd("Hello World "); // "Hello World" - * const result4 = trimEnd(" Hello World "); // "Hello World" - * ``` - * - * @since 2.0.0 - */ -export function trimEnd(a: string): string { - return a.trimEnd(); -} - -/** - * A simple curried pluralizing function. Takes the singular and plural - * forms of a word and returns a function that takes a count and returns - * the correct word for the count. - * - * @example - * ```ts - * import { plural } from "./string.ts"; - * - * const are = plural("is", "are"); - * const rabbits = plural("rabbit", "rabbits"); - * const sentence = (n: number) => `There ${are(n)} ${n} ${rabbits(n)}`; - * - * const result1 = sentence(1); // "There is 1 rabbit" - * const result2 = sentence(4); // "There are 4 rabbits" - * const result3 = sentence(0); // "There are 0 rabbits" - * ``` - * - * @since 2.0.0 - */ -export function plural( - singular: string, - plural: string, -): (count: number) => string { - return (count) => count === 1 ? singular : plural; -} - -/** - * Create a substring of a string based on 0 based indices. - * - * @example - * ```ts - * import { slice } from "./string.ts"; - * - * const slc = slice(1, 5); - * - * const result1 = slc(""); // "" - * const result2 = slc("Hello"); "ello" - * const result3 = slc("e"); - * ``` - * - * @since 2.0.0 - */ -export function slice(start: number, end: number) { - return (a: string): string => a.slice(start, end); -} - -/** - * Create a function that returns an Option. This - * is a curried form of RegExp.match. - * - * @example - * ```ts - * import { match } from "./string.ts"; - * - * const words = match(/\w+/g); - * - * const result1 = words("Hello World"); // Some(["Hello", "World"]) - * const result2 = words(""); // None - * const result3 = words("1234"); // Some(["1234"]) - * - * ``` - * - * @since 2.0.0 - */ -export function match(regex: RegExp) { - return (a: string): Option => fromNullable(a.match(regex)); -} - -/** - * Create a Predicate that returns true when it matches the supplied - * RegExp. Warning, this function technically mutates RegExp, but paradoxically - * it does so to keep state the same. If the passed RegExp.test method is called - * outside of this function then mayhem will surely ensue. - * - * @example - * ```ts - * import { test } from "./string.ts"; - * - * const words = test(/\w+/); - * - * const result1 = words("Hello World"); // true - * const result2 = words(""); // false - * const result3 = words("1234"); // true - * - * ``` - * - * @since 2.0.0 - */ -export function test(r: RegExp) { - return (s: string): boolean => { - // See https://tinyurl.com/2fdh6458 - // RegExp.test keeps state from any runs, - // this function resets that state to - // avoid unexpected behavior - const initialIndex = r.lastIndex; - const result = r.test(s); - r.lastIndex = initialIndex; - return result; - }; -} - -/** - * The canonical implementation of Sortable for string. It contains - * the methods lt, lte, equals, gte, gt, min, max, clamp, between, - * and compare. - * - * @since 2.0.0 - */ -export const SortableString: Sortable = fromSort(sort); - -/** - * The canonical implementation of Comparable for string. It contains - * the method equals. - * - * @since 2.0.0 - */ -export const ComparableString: Comparable = fromCompare(compare); - -/** - * The canonical implementation of Initializable for string. It contains - * the method init and combine. - * - * @since 2.0.0 - */ -export const InitializableString: Initializable = { - combine, - init, -}; - -/** - * The canonical implementation of Showable for string. It contains - * the method show. - * - * @since 2.0.0 - */ -export const ShowableString: Showable = { show: JSON.stringify }; diff --git a/vendor/deno.land/x/fun@v2.0.0-alpha.15/traversable.ts b/vendor/deno.land/x/fun@v2.0.0-alpha.15/traversable.ts deleted file mode 100644 index de00cf9..0000000 --- a/vendor/deno.land/x/fun@v2.0.0-alpha.15/traversable.ts +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Traversable is a structure that encapsulates the idea of iterating through - * data and collecting it into another structure. This can be as simple as - * turning an Array> into Option> or as complicated - * as creating all combinations of numbers in three Array. - * - * @module Mappable - * @since 2.0.0 - */ - -import type { $, Hold, Kind } from "./kind.ts"; -import type { Applicable } from "./applicable.ts"; -import type { Mappable } from "./mappable.ts"; -import type { Reducible } from "./reducible.ts"; - -/** - * A Traversable structure extends Mappable and Reducible. It contains the - * methods map, reduce, and traverse. - * - * @since 2.0.0 - */ -export interface Traversable - extends Mappable, Reducible, Hold { - readonly traverse: ( - A: Applicable, - ) => ( - faui: (a: A) => $, - ) => ( - ta: $, - ) => $, J, K], [L], [M]>; -} diff --git a/vendor/deno.land/x/fun@v2.0.0-alpha.15/tree.ts b/vendor/deno.land/x/fun@v2.0.0-alpha.15/tree.ts deleted file mode 100644 index 5807feb..0000000 --- a/vendor/deno.land/x/fun@v2.0.0-alpha.15/tree.ts +++ /dev/null @@ -1,288 +0,0 @@ -/** - * This file contains a collection of utilities and - * algebraic structure implementations for Tree. - * - * @module Tree - * @since 2.0.0 - */ - -import type { $, Kind, Out } from "./kind.ts"; -import type { Applicable } from "./applicable.ts"; -import type { Comparable, Compare } from "./comparable.ts"; -import type { Flatmappable } from "./flatmappable.ts"; -import type { Mappable } from "./mappable.ts"; -import type { Showable } from "./showable.ts"; -import type { Traversable } from "./traversable.ts"; - -import { TraversableArray } from "./array.ts"; -import { fromCompare } from "./comparable.ts"; -import { createBind, createTap } from "./flatmappable.ts"; -import { createBindTo } from "./mappable.ts"; -import { flow, pipe } from "./fn.ts"; - -/** - * A Forest is an array of Trees. - * - * @since 2.0.0 - */ -export type Forest = ReadonlyArray>; - -/** - * A Tree is a node with a single value and a Forest of children. - * - * @since 2.0.0 - */ -export type Tree = { - readonly value: A; - readonly forest: Forest; -}; - -/** - * AnyTree is useful as an extends constraint on a generic type. - * - * @since 2.0.0 - */ -// deno-lint-ignore no-explicit-any -export type AnyTree = Tree; - -/** - * TypeOf is a type extractor that returns the inner type A of a Tree. - * - * @since 2.0.0 - */ -export type TypeOf = T extends Tree ? A : never; - -/** - * KindTree is the Kind implementation for a Tree. - * - * @since 2.0.0 - */ -export interface KindTree extends Kind { - readonly kind: Tree>; -} - -/** - * This is an internal draw function used to draw an ascii representation of a - * tree. - * - * @since 2.0.0 - */ -function drawString(indentation: string, forest: Forest): string { - let r = ""; - const len = forest.length; - let tree: Tree; - for (let i = 0; i < len; i++) { - tree = forest[i]; - const isLast = i === len - 1; - r += indentation + (isLast ? "└" : "├") + "─ " + tree.value; - r += drawString( - indentation + (len > 1 && !isLast ? "│ " : " "), - tree.forest, - ); - } - return r; -} - -/** - * This is a constructor function, taking a single value A and optionally an - * array of Tree and returning a Tree. - * - * @since 2.0.0 - */ -export function tree(value: A, forest: Forest = []): Tree { - return ({ value, forest }); -} - -/** - * The wrap function for Wrappable. - * - * @since 2.0.0 - */ -export function wrap(value: A, forest: Forest = []): Tree { - return tree(value, forest); -} - -/** - * The map function for Mappable. - * - * @since 2.0.0 - */ -export function map(fai: (a: A) => I): (ta: Tree) => Tree { - return (ta) => wrap(fai(ta.value), ta.forest.map(map(fai))); -} - -/** - * The flatmap function for Flatmappable. - * - * @since 2.0.0 - */ -export function flatmap( - fati: (a: A) => Tree, -): (ta: Tree) => Tree { - return (ta) => { - const { value, forest } = fati(ta.value); - return wrap(value, [...ta.forest.map(flatmap(fati)), ...forest]); - }; -} - -/** - * The apply function for Applicable. - * - * @since 2.0.0 - */ -export function apply(ua: Tree): (tfai: Tree<(a: A) => I>) => Tree { - return (ufai) => pipe(ufai, flatmap(flow(map, (fn) => fn(ua)))); -} - -/** - * The reduce function for Reducible. - * - * @since 2.0.0 - */ -export function reduce( - foao: (o: O, a: A) => O, - o: O, -): (ta: Tree) => O { - const reducer = (result: O, tree: Tree) => reduce(foao, result)(tree); - return (ta) => TraversableArray.reduce(reducer, foao(o, ta.value))(ta.forest); -} - -/** - * The traverse function for Traversable. - * - * @since 2.0.0 - */ -export function traverse( - V: Applicable, -): ( - favi: (a: A) => $, -) => (ta: Tree) => $, J, K], [L], [M]> { - const traverseArray = TraversableArray.traverse(V); - return ( - favi: (a: A) => $, - ): (ua: Tree) => $, J, K], [L], [M]> => { - const pusher: (i: I) => (is: Forest) => Tree = (i) => (fs) => - tree(i, fs); - const wrappedPusher = V.wrap(pusher); - const traverseTree = (ua: Tree): $, J, K], [L], [M]> => - pipe( - wrappedPusher, - V.apply(favi(ua.value)), - V.apply(traverseForest(ua.forest)), - ); - const traverseForest = traverseArray(traverseTree); - return traverseTree; - }; -} - -/** - * The unwrap function for Unwrappable - * - * @since 2.0.0 - */ -export function unwrap({ value }: Tree): A { - return value; -} - -/** - * Converts a Forest into a tree representation. - * - * @since 2.0.0 - */ -export function drawForest(forest: Forest): string { - return drawString("\n", forest); -} - -/** - * Converts a Tree into a tree representation. - * - * @since 2.0.0 - */ -export function drawTree(tree: Tree): string { - return tree.value + drawForest(tree.forest); -} - -/** - * The match function is a recursive fold that collapses a Tree into a single - * value I. It does this from the head of the Tree first. - * - * @since 2.0.0 - */ -export function match( - fai: (a: A, is: Array) => I, -): (ta: Tree) => I { - const go = (tree: Tree): I => fai(tree.value, tree.forest.map(go)); - return go; -} - -/** - * Create an instance of Comparable> from an instance of Comparable. - * - * @since 2.0.0 - */ -export function getComparableTree( - { compare }: Comparable, -): Comparable> { - const go: Compare> = (second) => (first) => { - if (first === second) { - return true; - } else if ( - compare(second.value)(first.value) && - first.forest.length === second.forest.length - ) { - return first.forest.every((tree, index) => - go(second.forest[index])(tree) - ); - } else { - return false; - } - }; - - return fromCompare(go); -} - -/** - * Get an instance of Showable> from an instance of Showable. - * - * @since 2.0.0 - */ -export function getShowable({ show }: Showable): Showable> { - return ({ show: flow(map(show), drawTree) }); -} - -/** - * @since 2.0.0 - */ -export const ApplicableTree: Applicable = { apply, map, wrap }; - -/** - * @since 2.0.0 - */ -export const FlatmappableTree: Flatmappable = { - apply, - map, - flatmap, - wrap, -}; - -export const MappableTree: Mappable = { map }; - -/** - * @since 2.0.0 - */ -export const TraversableTree: Traversable = { map, reduce, traverse }; - -/** - * @since 2.0.0 - */ -export const tap = createTap(FlatmappableTree); - -/** - * @since 2.0.0 - */ -export const bind = createBind(FlatmappableTree); - -/** - * @since 2.0.0 - */ -export const bindTo = createBindTo(MappableTree); diff --git a/vendor/deno.land/x/fun@v2.0.0-alpha.15/wrappable.ts b/vendor/deno.land/x/fun@v2.0.0-alpha.15/wrappable.ts deleted file mode 100644 index 6d0e7c2..0000000 --- a/vendor/deno.land/x/fun@v2.0.0-alpha.15/wrappable.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type { $, Hold, Kind } from "./kind.ts"; - -/** - * @since 2.0.0 - */ -export interface Wrappable extends Hold { - readonly wrap: ( - a: A, - ) => $; -} diff --git a/vendor/deno.land/x/fun@v2.0.0/applicable.ts b/vendor/deno.land/x/fun@v2.0.0/applicable.ts deleted file mode 100644 index 4dd98e2..0000000 --- a/vendor/deno.land/x/fun@v2.0.0/applicable.ts +++ /dev/null @@ -1,124 +0,0 @@ -/** - * Applicable is a structure that allows a function to be applied inside of the - * associated concrete structure. For example, `Option` may hold a value of - * `(a: A) => B` inside of it. An Applicable for Option would allow one to - * apply the `A` in an `Option` to the function `(a: A) => B` in an - * `Option<(a: A) => B>`, resulting in an `Option`. - * - * @module Applicable - * @since 2.0.0 - */ - -import type { $, Hold, Kind } from "./kind.ts"; -import type { Combinable } from "./combinable.ts"; -import type { Mappable } from "./mappable.ts"; -import type { Wrappable } from "./wrappable.ts"; - -/** - * The Applicable interface. This interface includes the methods apply, map, and - * wrap. - * - * @since 2.0.0 - */ -export interface Applicable - extends Mappable, Wrappable, Hold { - readonly apply: ( - ta: $, - ) => ( - tfai: $ I, J, K], [D], [E]>, - ) => $; -} - -/** - * @since 2.0.0 - */ -export function getApplicableCombinable( - { apply, map }: Applicable, -): ( - combinable: Combinable, -) => Combinable<$> { - return ( - { combine }: Combinable, - ): Combinable<$> => { - const _map = map(combine); - return { - combine: (second) => (first) => apply(first)(_map(second)), - }; - }; -} - -/** - * Compose two Applicables into a new apply function. - * - * @since 2.0.0 - */ -export function apply( - U: Applicable, - V: Applicable, -): < - A, - B = never, - C = never, - D = unknown, - E = unknown, - J = never, - K = never, - L = unknown, - M = unknown, ->( - uva: $, J, K], [L], [M]>, -) => ( - uvfai: $ I, B, C], [D], [E]>, J, K], [L], [M]>, -) => $, J, K], [L], [M]> { - return < - A, - B = never, - C = never, - D = unknown, - E = unknown, - J = never, - K = never, - L = unknown, - M = unknown, - >(uva: $, J, K], [L], [M]>) => - ( - uvfai: $ I, B, C], [D], [E]>, J, K], [L], [M]>, - ): $, J, K], [L], [M]> => { - return U.apply(uva)( - U.map( - (vfai: $ I, B, C], [D], [E]>) => - (va: $) => V.apply(va)(vfai), - )(uvfai), - ); - }; -} - -/** - * @since 2.0.0 - */ -export function applyFirst( - U: Applicable, -): ( - second: $, -) => (first: $) => $ { - return ( - second: $, - ) => - (first: $): $ => - U.apply(second)(U.map((a: A) => (_: I) => a)(first)); -} - -/** - * @since 2.0.0 - */ -export function applySecond( - U: Applicable, -): ( - second: $, -) => (first: $) => $ { - return ( - second: $, - ) => - (first: $): $ => - U.apply(second)(U.map(() => (i: I) => i)(first)); -} diff --git a/vendor/deno.land/x/fun@v2.0.0/array.ts b/vendor/deno.land/x/fun@v2.0.0/array.ts deleted file mode 100644 index 77b37f0..0000000 --- a/vendor/deno.land/x/fun@v2.0.0/array.ts +++ /dev/null @@ -1,1474 +0,0 @@ -/** - * This file contains a collection of utilities and - * algebraic structure implementations for ReadonlyArray - * in JavaScript. - * - * @module Array - * @since 2.0.0 - */ - -import type { $, AnySub, Intersect, Kind, Out } from "./kind.ts"; -import type { Applicable } from "./applicable.ts"; -import type { Combinable } from "./combinable.ts"; -import type { Comparable } from "./comparable.ts"; -import type { Either } from "./either.ts"; -import type { Filterable } from "./filterable.ts"; -import type { Flatmappable } from "./flatmappable.ts"; -import type { Initializable } from "./initializable.ts"; -import type { Mappable } from "./mappable.ts"; -import type { Option } from "./option.ts"; -import type { Pair } from "./pair.ts"; -import type { Foldable } from "./foldable.ts"; -import type { Showable } from "./showable.ts"; -import type { Sortable } from "./sortable.ts"; -import type { Traversable } from "./traversable.ts"; -import type { Wrappable } from "./wrappable.ts"; - -import { createBind, createTap } from "./flatmappable.ts"; -import { createBindTo } from "./mappable.ts"; -import { pair } from "./pair.ts"; -import { isRight } from "./either.ts"; -import { fromCompare } from "./comparable.ts"; -import { fromSort, sign } from "./sortable.ts"; -import { isSome, none, some } from "./option.ts"; -import { identity, pipe } from "./fn.ts"; - -/** - * This type can be used as a placeholder for an array of any type. - * - * @since 2.0.0 - */ -// deno-lint-ignore no-explicit-any -export type AnyArray = ReadonlyArray; - -/** - * This type alias unwraps the inner type of a ReadonlyArray. - * - * @since 2.0.0 - */ -export type TypeOf = T extends ReadonlyArray ? A : never; - -/** - * This type alias represents a ReadonlyArray conuaining - * at least one value at the head. - * - * @since 2.0.0 - */ -export type NonEmptyArray = readonly [A, ...A[]]; - -/** - * This type can be used as a placeholder for a non-init array of any type. - * - * @since 2.0.0 - */ -// deno-lint-ignore no-explicit-any -export type AnyNonEmptyArray = NonEmptyArray; - -/** - * Specifies ReadonlyArray as a Higher Kinded Type, with covariant - * parameter A corresponding to the 0th index of any substitutions. - * - * @since 2.0.0 - */ -export interface KindArray extends Kind { - readonly kind: ReadonlyArray>; -} - -/** - * *UNSAFE* This operation creates a new array from ua with the value a inserted - * at the given index. The insertion index must be tested as in bounds before - * calling this function. This function is intended for internal use only and - * thus has no api guaruntees. - * - * @since 2.0.0 - */ -export function _unsafeInsertAt( - index: number, - a: A, - ua: ReadonlyArray, -): ReadonlyArray { - const result = ua.slice(); - result.splice(index, 0, a); - return result; -} - -/** - * *UNSAFE* This operation creates a new array from ua with the value a changed - * at the given index. The insertion index must be tested as in bounds before - * calling this function. This function is intended for internal use only and - * thus has no api guaruntees. - * - * @since 2.0.0 - */ -export function _unsafeUpdateAt( - index: number, - a: A, - ua: ReadonlyArray, -): ReadonlyArray { - if (ua[index] === a) { - return ua; - } else { - const result = ua.slice(); - result[index] = a; - return result; - } -} - -/** - * *UNSAFE* This operation creates a new array from ua with the value deleted - * at the given index. The deletiong index must be tested as in bounds before - * calling this function. This function is intended for internal use only and - * thus has no api guaruntees. - * - * @since 2.0.0 - */ -export function _unsafeDeleteAt( - index: number, - ua: ReadonlyArray, -): ReadonlyArray { - const result = ua.slice(); - result.splice(index, 1); - return result; -} - -/** - * *UNSAFE* This operation mutates a standard Array by pushing onto it. - * This function is intended for internal use only and thus has no api - * guaruntees. - * - * @since 2.0.0 - */ -export function _unsafeAppend( - last: A, -): (ua: Array) => Array { - return (ua) => { - ua.push(last); - return ua; - }; -} - -/** - * *UNSAFE* This operation mutates a standard Array by pushing onto it. - * This function is intended for internal use only and thus has no api - * guaruntees. - * - * @since 2.0.0 - */ -export function _unsafePush(ua: Array, a: A): Array { - ua.push(a); - return ua; -} - -/** - * *UNSAFE* This operation muuates a standard Array by unshifting onto it. - * This function is intended for internal use only and thus has no api - * guaruntees. - * - * @since 2.0.0 - */ -export function _unsafePrepend( - head: A, -): (ua: Array) => Array { - return (ua) => { - ua.unshift(head); - return ua; - }; -} - -/** - * *UNSAFE* This operation mutates a standard Array by adding all elements - * from a second array to it. This function is intended for internal use only - * and thus has no api guaruntees. - * - * @since 2.0.0 - */ -export function _unsafeJoin( - into: Array, - from: ReadonlyArray, -): Array { - const length = from.length; - let index = -1; - while (++index < length) { - into.push(from[index]); - } - return into; -} - -/** - * Given an index and a ReadonlyArray, return true if the index is valid - * for the given array. This tests whether index is between 0 and arr.length - * inclusive. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * - * const arr = A.wrap(1); - * - * const result1 = A.isOutOfBounds(0, arr); // false - * const result2 = A.isOutOfBounds(-1, arr); // true - * const result3 = A.isOutOfBounds(10, arr); // true - * ``` - * - * @since 2.0.0 - */ -export function isOutOfBounds(index: number, ua: ReadonlyArray): boolean { - return index < 0 || index >= ua.length; -} - -/** - * This predicate over ReadonlyArray returns true when called with an - * default array, otherwise it returns false. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * - * const arr1 = A.init(); - * const arr2 = A.wrap(1); - * - * const result1 = A.isEmpty(arr1); // true - * const result2 = A.isEmpty(arr2); // false - * ``` - * - * @since 2.0.0 - */ -export function isEmpty(ua: ReadonlyArray): boolean { - return ua.length === 0; -} - -/** - * A Refinement, NonEmptyArray>, returning true if - * called with an array that has at least one item. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * - * const arr1 = [1] - * const arr2 = A.init(); - * - * const result1 = A.isNonEmpty(arr1); - * // true and arr1 has type NonEmptyArray - * const result2 = A.isNonEmpty(arr2); - * // false - * ``` - * - * @since 2.0.0 - */ -export function isNonEmpty(a: ReadonlyArray): a is NonEmptyArray { - return a.length > 0; -} - -/** - * Create a NonEmptyArray from a variadic number of arguments. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * - * const result = A.array(1, 2, 3, 4); // [1, 2, 3, 4] - * ``` - * - * @since 2.0.0 - */ -export function array(...a: NonEmptyArray): NonEmptyArray { - return a; -} - -/** - * Create a range of numbers with count values, starting at start (default 0) - * and stepping by step (default 1). - * - * @example - * ```ts - * import * as A from "./array.ts"; - * - * const result1 = A.range(3); // [0, 1, 2] - * const result2 = A.range(3, 1); // [1, 2, 3] - * const result3 = A.range(3, -1, 0.1); // [-1, -0.9, -0.8] - * const result4 = A.range(2.5); // [0, 1] - * const result5 = A.range(-1); // [] - * ``` - * - * @since 2.0.0 - */ -export function range( - count: number, - start = 0, - step = 1, -): ReadonlyArray { - const length = Math.max(0, Math.floor(count)); - const result = new Array(length); - let index = -1; - let value = start; - while (++index < length) { - result[index] = value; - value += step; - } - return result; -} - -/** - * Create an init array of type A (defaulting to never). - * - * @example - * ```ts - * import * as A from "./array.ts"; - * - * const result = A.init(); // ReadonlyArray - * ``` - * - * @since 2.0.0 - */ -export function init(): ReadonlyArray { - return []; -} - -/** - * Create a NonEmptyArray conuaining the value A. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * - * const result = A.wrap(1); // [1] of type NonEmptyArray - * ``` - * - * @since 2.0.0 - */ -export function wrap(a: A): NonEmptyArray { - return [a]; -} - -/** - * Given two arrays first and second, if first is default the return second, - * otherwise return first. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const result1 = pipe( - * A.init(), - * A.alt(A.wrap(1)), - * ); // [1] - * const result2 = pipe( - * A.array(1, 2, 3), - * A.alt(A.array(3, 2, 1)), - * ); // [1, 2, 3] - * ``` - * - * @since 2.0.0 - */ -export function alt( - second: ReadonlyArray, -): (first: ReadonlyArray) => ReadonlyArray { - return (first) => isEmpty(first) ? second : first; -} - -/** - * Applicable the function fai: (A, index) => I to every element in the array ua. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * A.array("Hello", "World"), - * A.map(s => s.length), - * ); // [5, 5] - * ``` - * - * @since 2.0.0 - */ -export function map( - fai: (a: A, i: number) => I, -): (ua: ReadonlyArray) => ReadonlyArray { - return (ua) => { - let index = -1; - const length = ua.length; - const result = new Array(length); - - while (++index < length) { - result[index] = fai(ua[index], index); - } - - return result; - }; -} - -/** - * Reduce an array from left to right, accumulating into a type O via the - * function foao: (O, A, index) => O and an initial value O. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * A.range(5, 1), - * A.fold((sum, value, index) => sum + value + index, 0), - * ); - * // 0 + 0 + 0 = 0 - * // 0 + 1 + 1 = 2 - * // 2 + 2 + 2 = 6 - * // 6 + 3 + 3 = 12 - * // 12 + 4 + 4 = 20 - * // 20 - * ``` - * - * @since 2.0.0 - */ -export function fold( - foao: (o: O, a: A, i: number) => O, - o: O, -): (ua: ReadonlyArray) => O { - return (ua) => { - let result = o; - let index = -1; - const length = ua.length; - - while (++index < length) { - result = foao(result, ua[index], index); - } - - return result; - }; -} - -/** - * Given two arrays first and second, join them into a new array effectively - * doing [...first, ...second]. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * A.range(3, 1), - * A.combine(A.range(3, 3, -1)) - * ); // [1, 2, 3, 3, 2, 1] - * ``` - * - * @since 2.0.0 - */ -export function combine( - second: ReadonlyArray, -): (first: ReadonlyArray) => ReadonlyArray { - return (first) => { - if (isEmpty(second)) { - return first; - } else if (isEmpty(first)) { - return second; - } - - const firstLength = first.length; - const length = firstLength + second.length; - const result = Array(length); - let index = -1; - - while (++index < firstLength) { - result[index] = first[index]; - } - - index--; - - while (++index < length) { - result[index] = second[index - firstLength]; - } - - return result; - }; -} - -/** - * Given an array of arrays, flatten all inner arrays into a single - * external array. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * - * const result = A.join(A.array( - * A.range(3), - * A.range(2), - * A.range(1), - * )); // [0, 1, 2, 0, 1, 0] - * ``` - * - * @since 2.0.0 - */ -export function join( - uaa: ReadonlyArray>, -): ReadonlyArray { - let index = -1; - const length = uaa.length; - const result = new Array(); - - while (++index < length) { - const ua = uaa[index]; - let _index = -1; - const _length = ua.length; - while (++_index < _length) { - result.push(ua[_index]); - } - } - - return result; -} - -/** - * Given a function A -> ReadonlyArray and a ReadonlyArray apply the - * function to every value in the array and combine all results, returning a - * ReadonlyArray. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * A.range(3, 1, 3), // [1, 4, 7] - * A.flatmap(n => [n, n + 1, n + 2]), // ie. 1 -> [1, 2, 3] - * ); // [1, 2, 3, 4, 5, 6, 7, 8, 9] - * ``` - * - * @since 2.0.0 - */ -export function flatmap( - fati: (a: A, index: number) => ReadonlyArray, -): (ua: ReadonlyArray) => ReadonlyArray { - return (ua) => { - const length = ua.length; - const result = new Array(); - let index = -1; - - while (++index < length) { - const chained = fati(ua[index], index); - // Mutates result - // This is okay because result is a local mutable variable - // in a tight loop - _unsafeJoin(result, chained); - } - - return result; - }; -} - -/** - * Given an array of functions ReadonlyArray I> and a ReadonlyArray - * apply every function in the function array to every value in the - * ReadonlyArray. This implementation loops first over the functions, and then - * over the values, so the order of results will be [fn1(val1), fn2(val1), - * fn3(val1), ..., fn1(val2), fn2(val2), ... fn1(valN), ... fnN(valN)]. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * A.wrap((n: number) => n + 1), - * A.apply(A.array(1, 2, 3)), - * ); // [2, 3, 4] - * ``` - * - * @since 2.0.0 - */ -export function apply( - ua: ReadonlyArray, -): (ufai: ReadonlyArray<(a: A, index: number) => I>) => ReadonlyArray { - return ( - ufai: ReadonlyArray<(a: A, index: number) => I>, - ): ReadonlyArray => { - const fnlength = ufai.length; - const vallength = ua.length; - const result = new Array(fnlength * vallength); - let fnindex = -1; - while (++fnindex < fnlength) { - let valindex = -1; - while (++valindex < vallength) { - const index = (vallength * fnindex) + valindex; - const value = ua[valindex]; - const fn = ufai[fnindex]; - result[index] = fn(value, valindex); - } - } - return result; - }; -} - -/** - * Given a Predicate or Refinement, apply the predicate or refinement to - * every value in an array, removing (and refining) the elements that - * the predicate or refinement return false for. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * A.array(1, 2, 3, 4, 5, 6), - * A.filter(n => n % 2 === 0), - * ); // [2, 4, 6] - * ``` - * - * @since 2.0.0 - */ -export function filter( - refinement: (a: A, index: number) => a is B, -): (ua: ReadonlyArray) => ReadonlyArray; -export function filter( - predicate: (a: A, index: number) => boolean, -): (ua: ReadonlyArray) => ReadonlyArray; -export function filter( - predicate: (a: A, index: number) => boolean, -): (ua: ReadonlyArray) => ReadonlyArray { - return (ua) => { - let index = -1; - let resultIndex = 0; - const length = ua.length; - const result = []; - - while (++index < length) { - const value = ua[index]; - if (predicate(value, index)) { - result[resultIndex++] = value; - } - } - return result; - }; -} - -/** - * Filter and map over an ReadonlyArray in the same step. This function - * applies the predicate to each value in an array. If the predicate - * returns Some, then the inner I is added to the output array. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import * as O from "./option.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * A.array("Hello", "Big", "World"), - * A.filterMap(s => s.includes("o") ? O.some(s.toUpperCase()) : O.none), - * ); // ["HELLO", "WORLD"] - * ``` - * - * @since 2.0.0 - */ -export function filterMap( - predicate: (a: A, index: number) => Option, -): (ua: ReadonlyArray) => ReadonlyArray { - return (ua) => { - let index = -1; - let resultIndex = 0; - const length = ua.length; - const result = []; - - while (++index < length) { - const value = ua[index]; - const filtered = predicate(value, index); - if (isSome(filtered)) { - result[resultIndex++] = filtered.value; - } - } - return result; - }; -} - -/** - * Partition a ReadonlyArray into two ReadonlyArrays using a predicate or - * refinement to do the sorting. If the predicate or refinement returns true for - * a value, the value is pushed into the first array in a Pair, otherwise it is - * pushed into the second array in a pair. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * A.range(10, 1), // [1, 2, 3, ..., 10] - * A.partition(n => n % 2 === 0), - * ); // Pair<[2, 4, 6, 8, 10], [1, 3, 5, 7, 9]> - * ``` - * - * @since 2.0.0 - */ -export function partition( - refinement: (a: A, index: number) => a is B, -): (ua: ReadonlyArray) => Pair, ReadonlyArray>; -export function partition( - predicate: (a: A, index: number) => boolean, -): (ua: ReadonlyArray) => Pair, ReadonlyArray>; -export function partition( - refinement: (a: A, index: number) => boolean, -): (ua: ReadonlyArray) => Pair, ReadonlyArray> { - return (ua) => { - const first: Array = []; - const second: Array = []; - const length = ua.length; - let index = -1; - - while (++index < length) { - const value = ua[index]; - if (refinement(value, index)) { - first.push(value); - } else { - second.push(value); - } - } - return pair(first, second); - }; -} - -/** - * Partition and map over a ReadonlyArray in the same loop. Given a predicate - * A => Either, this function passes each element in an array into the - * predicate. If the predicate returns Right then the inner I is pushed into - * the first array in a pair. If the predicate returns Left then the inner J - * is pushed into the second array in a pair. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import * as E from "./either.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * A.range(10, 1), // [1, 2, 3, ..., 10] - * A.partitionMap(n => n % 2 === 0 ? E.right(n * 100) : E.left(n / 10)), - * ); // Pair<[200, 400, 600, 800, 1000], [0.1, 0.3, 0.5, 0.7, 0.9]> - * ``` - * - * @since 2.0.0 - */ -export function partitionMap( - predicate: (a: A, index: number) => Either, -): (ua: ReadonlyArray) => Pair, ReadonlyArray> { - return (ua) => { - const first: Array = []; - const second: Array = []; - const length = ua.length; - let index = -1; - - while (++index < length) { - const value = ua[index]; - const filtered = predicate(value, index); - if (isRight(filtered)) { - first.push(filtered.right); - } else { - second.push(filtered.left); - } - } - return pair(first, second); - }; -} - -/** - * Traverse a ReadonlyArray using an Applicable over V and a mapping - * function A => V. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe, identity } from "./fn.ts"; - * - * const traverse = A.traverse(A.ApplicableArray); - * - * const result = pipe( - * [[1, 2], [3, 4]], - * traverse(identity), - * ); // [[1, 3], [1, 4], [2, 3], [2, 4]] - * ``` - * - * @since 2.0.0 - */ -export function traverse( - A: Applicable, -): ( - favi: (a: A, i: number) => $, -) => (ua: ReadonlyArray) => $, J, K], [L], [M]> { - return ( - favi: (a: A, i: number) => $, - ): (ua: ReadonlyArray) => $, J, K], [L], [M]> => { - const pusher = (is: I[]) => (i: I) => [...is, i]; - return fold( - (vis, a: A, index) => - pipe( - vis, - A.map(pusher), - A.apply(favi(a, index)), - ), - A.wrap([] as I[]), - ); - }; -} - -// deno-lint-ignore no-explicit-any -type ANY_ARR = any[]; - -/** - * The Sequence inverts a tuple of substitutions over V into V containing a - * tuple of inferred values of the substitution. - * - * ie. - * [Option, Option] - * becomes - * Option<[number, string]> - * - * or - * - * [Either Either] - * becomes - * Either - */ -// deno-fmt-ignore -type Sequence[]> = $ ? A : never; }, - { [K in keyof R]: R[K] extends $ ? B : never; }[number], - { [K in keyof R]: R[K] extends $ ? C : never; }[number], -], [ - Intersect<{ [K in keyof R]: R[K] extends $ ? D : never; }[number]>, -], [ - Intersect<{ [K in keyof R]: R[K] extends $ ? E : never; }[number]>, -] ->; - -/** - * Sequence over an array of type V, inverting the relationship between V and - * ReadonlyArray. This function also keeps the indexed types of in each V at - * covariant position 0. In other words sequence over [Option, - * Option] becomes Option<[number, string]>. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import * as O from "./option.ts"; - * - * const sequence = A.sequence(O.ApplicableOption); - * - * const result1 = sequence(O.some(1), O.some("Hello")); // Some([1, "Hello"]) - * const result2 = sequence(O.none, O.some("Uh Oh")); // None - * ``` - * - * @since 2.0.0 - */ -export function sequence( - A: Applicable, -): []>( - ...ua: VS -) => Sequence { - // deno-lint-ignore no-explicit-any - const sequence = traverse(A)(identity as any); - return []>(...vs: VS): Sequence => - sequence(vs) as Sequence; -} - -/** - * Create a new array by appending an item to the end of an existing array. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * [1, 2, 3], - * A.append(4), - * ); // [1, 2, 3, 4] - * ``` - * - * @since 2.0.0 - */ -export function append( - last: A, -): (ua: ReadonlyArray) => ReadonlyArray { - return (ma) => [...ma, last]; -} - -/** - * Create a new array by prepending an item to the head of an existing array. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * [1, 2, 3], - * A.prepend(4), - * ); // [4, 1, 2, 3] - * ``` - * - * @since 2.0.0 - */ -export function prepend( - head: A, -): (ua: ReadonlyArray) => ReadonlyArray { - return (ma) => [head, ...ma]; -} - -/** - * Create a new array by inserting a value into an array at an index. If the - * index is out of range of the existing array then no change is made. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const insert = A.insert(100); // Insert the value 100 - * const arr = [1, 2, 3]; - * - * const result1 = pipe(arr, insert(0)); // [100, 1, 2, 3] - * const result2 = pipe(arr, insert(1)); // [1, 100, 2, 3] - * const result3 = pipe(arr, insert(4)); // [1, 2, 3, 100] - * const result4 = pipe(arr, insert(4)); // [1, 2, 3] - * ``` - * - * @since 2.0.0 - */ -export function insert(value: A) { - return (index: number) => (arr: ReadonlyArray): ReadonlyArray => - index < 0 || index > arr.length ? arr : _unsafeInsertAt(index, value, arr); -} - -/** - * Create a new array by inserting a value into an array at an index. If the - * index is out of range of the existing array then no change is made. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const insertAt = A.insertAt(0); // Insert at index 0 - * const arr = [1, 2, 3]; - * - * const result1 = pipe(arr, insertAt(0)); // [0, 1, 2, 3] - * const result2 = pipe(arr, insertAt(1)); // [1, 1, 2, 3] - * const result3 = pipe( - * arr, - * A.insertAt(100)(100), - * ); // [1, 2, 3] - * ``` - * - * @since 2.0.0 - */ -export function insertAt(index: number) { - return (value: A) => (arr: ReadonlyArray): ReadonlyArray => - index < 0 || index > arr.length ? arr : _unsafeInsertAt(index, value, arr); -} - -/** - * Create a new array by replacing a value of an array at an index. If the - * index is out of range of the existing array then no change is made. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const update = A.update(100); // Update the value 100 - * const arr = [1, 2, 3]; - * - * const result1 = pipe(arr, update(0)); // [100, 2, 3] - * const result2 = pipe(arr, update(1)); // [1, 100, 3] - * const result3 = pipe(arr, update(4)); // [1, 2, 3] - * ``` - * - * @since 2.0.0 - */ -export function update(value: A) { - return (index: number) => (arr: ReadonlyArray): ReadonlyArray => - isOutOfBounds(index, arr) ? arr : _unsafeUpdateAt(index, value, arr); -} - -/** - * Create a new array by replacing a value of an array at an index. If the - * index is out of range of the existing array then no change is made. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const updateAt = A.updateAt(0); // Update at index 0 - * const arr = [1, 2, 3]; - * - * const result1 = pipe(arr, updateAt(100)); // [100, 2, 3] - * const result2 = pipe(arr, updateAt(200)); // [200, 2, 3] - * const result3 = pipe(arr, A.updateAt(100)(100)); // [1, 2, 3] - * ``` - * - * @since 2.0.0 - */ -export function updateAt(index: number) { - return (value: A) => (arr: ReadonlyArray): ReadonlyArray => - isOutOfBounds(index, arr) ? arr : _unsafeUpdateAt(index, value, arr); -} - -/** - * Create a new array by modifying a value of an array at an index. If the - * index is out of range of the existing array then no change is made. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const modify = A.modify((n: number) => n + 1); // Increment the value - * const arr = [1, 2, 3]; - * - * const result1 = pipe(arr, modify(0)); // [2, 2, 3] - * const result2 = pipe(arr, modify(1)); // [1, 3, 3] - * const result3 = pipe(arr, modify(4)); // [1, 2, 3] - * ``` - * - * @since 2.0.0 - */ -export function modify(modifyFn: (a: A) => A) { - return (index: number) => (arr: ReadonlyArray): ReadonlyArray => - isOutOfBounds(index, arr) - ? arr - : _unsafeUpdateAt(index, modifyFn(arr[index]), arr); -} - -/** - * Create a new array by modifying a value of an array at an index. If the - * index is out of range of the existing array then no change is made. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const inc = (n: number) => n + 1 - * const modifyAt = A.modifyAt(0); // Modify value at - * const arr = [1, 2, 3]; - * - * const result1 = pipe(arr, modifyAt(inc)); // [2, 2, 3] - * const result2 = pipe(arr, A.modifyAt(100)(inc)); // [1, 2, 3] - * ``` - * - * @since 2.0.0 - */ -export function modifyAt(index: number) { - return (modifyFn: (a: A) => A) => - (arr: ReadonlyArray): ReadonlyArray => - isOutOfBounds(index, arr) - ? arr - : _unsafeUpdateAt(index, modifyFn(arr[index]), arr); -} - -/** - * Lookup the value in an array at the given index. If the index is out of - * bounds this function returns none. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const result1 = pipe( - * [1, 2, 3], - * A.lookup(0), - * ); // Some(1) - * const result2 = pipe( - * [1, 2, 3], - * A.lookup(100), - * ); // None - * ``` - * - * @since 2.0.0 - */ -export function lookup(index: number) { - return (as: ReadonlyArray): Option => - isOutOfBounds(index, as) ? none : some(as[index]); -} - -/** - * Delete the value in an array at the given index. If the index is out of - * bounds then no change is made. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const result1 = pipe([1, 2, 3], A.deleteAt(0)); // [2, 3] - * const result2 = pipe([1, 2, 3], A.deleteAt(100)); // [1, 2, 3] - * ``` - * - * @since 2.0.0 - */ -export function deleteAt(index: number) { - return (arr: ReadonlyArray): ReadonlyArray => - isOutOfBounds(index, arr) ? arr : _unsafeDeleteAt(index, arr); -} - -/** - * Returns a new array conuaining elements of `as` sorted in ascending order - * according to the sort order defined by `O`. - * - * @example - * import { ordNumber } from "./sortable.ts"; - * import { sort } from './array.ts' - * - * sort(ordNumber)([3, 1, 2]) - * // [1, 2, 3] - * - * @since 2.0.0 - */ -export function sort( - O: Sortable, -): (as: ReadonlyArray) => ReadonlyArray { - return (as) => as.slice().sort(O.sort); -} - -/** - * Given an Sortable over A, create a binary search function for a sorted - * ReadonlyArray that returns the array index that the new value should - * be inserted at in order to maintain a sorted array. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { SortableNumber } from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const search = A.binarySearch(SortableNumber); - * const arr = A.range(100, 1); // [1, 2, ..., 100] - * - * const index1 = search(30.5, arr); // Index 29 - * const index2 = search(10000, arr); // Index 100 - * ``` - * - * @since 2.0.0 - */ -export function binarySearch( - { sort }: Sortable, -): (value: A, sorted: ReadonlyArray) => number { - return (value, sorted) => { - let low = 0; - let high = sorted.length; - let middle, cursor, ordering; - - while (low < high) { - middle = Math.floor((low + high) / 2); - cursor = sorted[middle]; - ordering = sort(value, cursor); - - if (ordering === 0) { - return middle; - } else if (ordering === -1) { - high = middle; - } else { - low = middle + 1; - } - } - return high; - }; -} - -/** - * Given an Sortable construct a curried insert function that inserts values into - * a new array in a sorted fashion. Internally this uses binarySearch to find - * the insertion index of any inserted items. Since the returned function will - * always insert this function will always return a new array. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import * as O from "./sortable.ts"; - * import { SortableNumber } from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * type Person = { name: string, age: number }; - * function person(name: string, age: number) { - * return { name, age }; - * } - * - * const SortablePerson = pipe( - * SortableNumber, - * O.premap((p: Person) => p.age), - * ); - * const insert = A.orderedInsert(SortablePerson); - * - * const result = pipe( - * A.init(), - * insert(person("Brandon", 37)), - * insert(person("Emily", 32)), - * insert( - * person("Rufus", 0.7), - * person("Clementine", 0.5) - * ), - * ); - * // [ - * // { name: "Clementine", age: 0.5 }, - * // { name: "Rufus", age: 0.7 }, - * // { name: "Emily", age: 32 }, - * // { name: "Brandon", age: 37 }, - * // ] - * ``` - * - * @since 2.0.0 - */ -export function orderedInsert( - ord: Sortable, -): ( - ...values: NonEmptyArray -) => (arr: ReadonlyArray) => ReadonlyArray { - const search = binarySearch(ord); - return (...values) => (arr) => { - const out = arr.slice(); - const length = values.length; - let index = -1; - while (++index < length) { - const value = values[index]; - const insertAt = search(value, out); - out.splice(insertAt, 0, value); - } - return out; - }; -} - -/** - * Collect the values of many arrays into an array of tuples. Each tuple - * contains an element from each of the input arrays at a shared index. The number of - * tuples in the returned array will match the minimum length of the input - * arrays. ie. If any input array is default, then the output array will be default. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * - * const result1 = A.zip([1, 2, 3], ["a", "b", "c"]); - * // [[1, "a"], [2, "b"], [3, "c"]] - * const result2 = A.zip([], A.range(100)); // [] - * ``` - * - * @since 2.0.0 - */ -export function zip>( - ...arrays: A -): ReadonlyArray<{ [K in keyof A]: TypeOf }> { - switch (arrays.length) { - case 0: - return []; - case 1: - return arrays[0]; - default: { - const length = Math.min(...arrays.map((a) => a.length)); - const output: Array<{ [K in keyof A]: TypeOf }> = new Array(length); - let index = -1; - while (++index < length) { - output[index] = arrays.map((a) => a[index]) as { - [K in keyof A]: TypeOf; - }; - } - return output; - } - } -} - -/** - * @since 2.0.0 - */ -export function getCombinableArray(): Combinable> { - return { - combine, - }; -} - -/** - * Given an instance Comparable create a Comparable>. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { ComparableNumber } from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const { compare } = A.getComparableArray(ComparableNumber); - * - * const result1 = pipe([1, 2, 3], compare([1, 2, 3])); // true - * const result2 = pipe(A.init(), compare([1, 2, 3])); // false - * const result3 = pipe([1, 2], compare([2, 1])); // false - * ``` - * - * @since 2.0.0 - */ -export function getComparableArray( - { compare }: Comparable, -): Comparable> { - return fromCompare((second) => (first) => { - if (first === second) { - return true; - } else if (first.length === second.length) { - return first.every((value, index) => compare(second[index])(value)); - } else { - return false; - } - }); -} - -/** - * Given an instance Sortable create a Sortable>. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { SortableNumber } from "./number.ts"; - * - * const { sort } = A.getSortableArray(SortableNumber); - * - * const result1 = sort([1, 2], [1, 2]); // 0 - * const result2 = sort([1, 2], [1]); // 1 - * const result3 = sort([1, 2, 4], [1, 2, 3]); // -1 - * ``` - * - * @since 2.0.0 - */ -export function getSortableArray( - O: Sortable, -): Sortable> { - return fromSort((first, second) => { - const length = Math.min(first.length, second.length); - let index = -1; - // Compare all elements that exist in both arrays - while (++index < length) { - const ordering = O.sort(first[index], second[index]); - if (ordering !== 0) return ordering; - } - // If all compared elements are equal, longest array is greater - return sign(first.length - second.length); - }); -} - -/** - * Create an instance of Showable for ReadonlyArray given an instance of Showable for - * A. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { ShowableNumber } from "./number.ts"; - * - * const { show } = A.getShowableArray(ShowableNumber); - * - * const result = show([1, 2, 3]); // "ReadonlyArray[1, 2, 3]" - * ``` - * - * @since 2.0.0 - */ -export function getShowableArray( - { show }: Showable, -): Showable> { - return ({ - show: (ua) => `ReadonlyArray[${ua.map(show).join(", ")}]`, - }); -} - -/** - * Create an instance of Initializable> given a type A. This instance - * uses array compose and default as the instance methods for the Initializable. - * - * @example - * ```ts - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const { init, combine } = A.getInitializableArray(); - * - * const result = pipe( - * init(), // [] - * combine([1, 2, 3]), - * ); // [1, 2, 3] - * ``` - * - * @since 2.0.0 - */ -export function getInitializableArray(): Initializable< - ReadonlyArray -> { - return ({ init, combine }); -} - -/** - * @since 2.0.0 - */ -export const ApplicableArray: Applicable = { - apply, - map, - wrap, -}; - -/** - * @since 2.0.0 - */ -export const FilterableArray: Filterable = { - filter, - filterMap, - partition, - partitionMap, -}; - -/** - * @since 2.0.0 - */ -export const FlatmappableArray: Flatmappable = { - wrap, - map, - apply, - flatmap, -}; - -/** - * @since 2.0.0 - */ -export const MappableArray: Mappable = { map }; - -/** - * @since 2.0.0 - */ -export const FoldableArray: Foldable = { fold }; - -/** - * @since 2.0.0 - */ -export const TraversableArray: Traversable = { - map, - fold, - traverse, -}; - -/** - * @since 2.0.0 - */ -export const WrappableArray: Wrappable = { wrap }; - -/** - * @since 2.0.0 - */ -export const tap = createTap(FlatmappableArray); - -/** - * @since 2.0.0 - */ -export const bind = createBind(FlatmappableArray); - -/** - * @since 2.0.0 - */ -export const bindTo = createBindTo(MappableArray); diff --git a/vendor/deno.land/x/fun@v2.0.0/bimappable.ts b/vendor/deno.land/x/fun@v2.0.0/bimappable.ts deleted file mode 100644 index d2e9661..0000000 --- a/vendor/deno.land/x/fun@v2.0.0/bimappable.ts +++ /dev/null @@ -1,38 +0,0 @@ -/** - * Bimappable is a structure that allows a function to be applied inside of the - * associated concrete structure but is specific to a second held value of that - * structure.. - * - * @module Bimappable - * @since 2.0.0 - */ - -import type { $, Hold, Kind } from "./kind.ts"; -import type { Mappable } from "./mappable.ts"; - -import { pipe } from "./fn.ts"; - -/** - * The Bimappable interface. Bimapple includes the methods map and mapSecond. - */ -export interface Bimappable extends Mappable, Hold { - readonly mapSecond: ( - fbj: (value: B) => J, - ) => ( - ta: $, - ) => $; -} - -/** - * @since 2.0.0 - */ -export function bimap( - { map, mapSecond }: Bimappable, -): ( - fai: (a: A) => I, - fbj: (b: B) => J, -) => ( - ua: $, -) => $ { - return (fai, fbj) => (ua) => pipe(ua, map(fai), mapSecond(fbj)); -} diff --git a/vendor/deno.land/x/fun@v2.0.0/combinable.ts b/vendor/deno.land/x/fun@v2.0.0/combinable.ts deleted file mode 100644 index 7d134f5..0000000 --- a/vendor/deno.land/x/fun@v2.0.0/combinable.ts +++ /dev/null @@ -1,385 +0,0 @@ -/** - * Combinable is a structure that can be combine two fixed values. Some examples - * of Combinable are Array.combine, addition for numbers, or merging of two - * structs by combining their internal values. - * - * @module Combinable - * @since 2.0.0 - */ - -import type { Sortable } from "./sortable.ts"; - -import * as S from "./sortable.ts"; - -type ReadonlyRecord = Readonly>; -type NonEmptyArray = readonly [A, ...A[]]; - -/** - * The Combine function in a Combinable. - * - * @since 2.0.0 - */ -export type Combine = (second: A) => (first: A) => A; - -/** - * Combinable is a structure that allows the combination of two concrete values - * of A into a single value of A. In other functional libraries this is called a - * Semigroup. - * - * @since 2.0.0 - */ -export interface Combinable { - readonly combine: Combine; -} - -/** - * A type for Combinable over any, useful as an extension target for - * functions that take any Combinable and do not need to - * unwrap the type. - * - * @since 2.0.0 - */ -// deno-lint-ignore no-explicit-any -export type AnyCombinable = Combinable; - -/** - * A type level unwrapper, used to pull the inner type from a Combinable. - * - * @since 2.0.0 - */ -export type TypeOf = T extends Combinable ? A : never; - -/** - * Create a Combinable from a Combine and an init function. - * - * @since 2.0.0 - */ -export function fromCombine( - combine: Combine, -): Combinable { - return { combine }; -} - -/** - * Get an Combinable over A that always returns the first - * parameter supplied to combine (confusingly this is - * actually the last parameter since combine is in curried - * form). - * - * @example - * ```ts - * import { first, getCombineAll } from "./combinable.ts"; - * import { pipe } from "./fn.ts"; - * - * type Person = { name: string, age: number }; - * const FirstPerson = first(); - * const getFirstPerson = getCombineAll(FirstPerson); - * - * const octavia: Person = { name: "Octavia", age: 42 }; - * const kimbra: Person = { name: "Kimbra", age: 32 }; - * const brandon: Person = { name: "Brandon", age: 37 }; - * - * const result = getFirstPerson(octavia, kimbra, brandon); // octavia - * ``` - * - * @since 2.0.0 - */ -export function first(): Combinable { - return fromCombine(() => (first) => first); -} - -/** - * Get an Combinable over A that always returns the last - * parameter supplied to combine (confusingly this is - * actually the first parameter since combine is in curried - * form). - * - * @example - * ```ts - * import { last } from "./combinable.ts"; - * import { pipe } from "./fn.ts"; - * - * type Person = { name: string, age: number }; - * - * const CombinablePerson = last(); - * - * const octavia: Person = { name: "Octavia", age: 42 }; - * const kimbra: Person = { name: "Kimbra", age: 32 }; - * const brandon: Person = { name: "Brandon", age: 37 }; - * - * const lastPerson = pipe( - * octavia, - * CombinablePerson.combine(kimbra), - * CombinablePerson.combine(brandon), - * ); // lastPerson === brandon - * ``` - * - * @since 2.0.0 - */ -export function last(): Combinable { - return fromCombine((second) => () => second); -} - -/** - * Get the "Dual" of an existing Combinable. This effectively reverses - * the order of the input combinable's application. For example, the - * dual of the "first" combinable is the "last" combinable. The dual - * of (boolean, ||) is itself. - * - * @example - * ```ts - * import * as SG from "./combinable.ts"; - * import { pipe } from "./fn.ts"; - * - * type Person = { name: string, age: number }; - * - * const last = SG.last(); - * const dual = SG.dual(last); - * - * const octavia: Person = { name: "Octavia", age: 42 }; - * const kimbra: Person = { name: "Kimbra", age: 32 }; - * const brandon: Person = { name: "Brandon", age: 37 }; - * - * const dualPerson = pipe( - * octavia, - * dual.combine(kimbra), - * dual.combine(brandon), - * ); // dualPerson === octavia - * ``` - * - * @since 2.0.0 - */ -export function dual({ combine }: Combinable): Combinable { - return fromCombine((second) => (first) => combine(first)(second)); -} - -/** - * Get a Combinable from a tuple of combinables. The resulting - * combinable will operate over tuples applying the input - * combinables applying each based on its position, - * - * @example - * ```ts - * import * as SG from "./combinable.ts"; - * import { pipe } from "./fn.ts"; - * - * type Person = { name: string, age: number }; - * - * const first = SG.first(); - * const last = SG.last(); - * const { combine } = SG.tuple(first, last); - * - * const octavia: Person = { name: "Octavia", age: 42 }; - * const kimbra: Person = { name: "Kimbra", age: 32 }; - * const brandon: Person = { name: "Brandon", age: 37 }; - * - * const tuplePeople = pipe( - * [octavia, octavia], - * combine([kimbra, kimbra]), - * combine([brandon, brandon]), - * ); // tuplePeople === [octavia, brandon] - * ``` - * - * @since 2.0.0 - */ -export function tuple( - ...combinables: T -): Combinable<{ readonly [K in keyof T]: TypeOf }> { - type Return = { [K in keyof T]: TypeOf }; - return fromCombine((second) => (first): Return => - combinables.map(({ combine }, index) => - combine(second[index])(first[index]) - ) as Return - ); -} - -/** - * Get a Combinable from a struct of combinables. The resulting - * combinable will operate over similar shaped structs applying - * the input combinables applying each based on its position, - * - * @example - * ```ts - * import type { Combinable } from "./combinable.ts"; - * import * as SG from "./combinable.ts"; - * import * as N from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * type Person = { name: string, age: number }; - * const person = (name: string, age: number): Person => ({ name, age }); - * - * // Chooses the longest string, defaulting to left when equal - * const longestString: Combinable = { - * combine: (right) => (left) => right.length > left.length ? right : left, - * }; - * - * // This combinable will merge two people, choosing the longest - * // name and the oldest age - * const { combine } = SG.struct({ - * name: longestString, - * age: N.InitializableNumberMax, - * }) - * - * const brandon = pipe( - * person("Brandon Blaylock", 12), - * combine(person("Bdon", 17)), - * combine(person("Brandon", 30)) - * ); // brandon === { name: "Brandon Blaylock", age: 30 } - * ``` - * - * @since 2.0.0 - */ -// deno-lint-ignore no-explicit-any -export function struct>( - combinables: { [K in keyof O]: Combinable }, -): Combinable { - type Entries = [keyof O, typeof combinables[keyof O]][]; - return fromCombine((second) => (first) => { - const r = {} as Record; - for (const [key, { combine }] of Object.entries(combinables) as Entries) { - r[key] = combine(second[key])(first[key]); - } - return r as { [K in keyof O]: O[K] }; - }); -} - -/** - * Create a combinable fron an instance of Sortable that returns - * that maximum for the type being ordered. This Combinable - * functions identically to max from Sortable. - * - * @example - * ```ts - * import * as SG from "./combinable.ts"; - * import * as N from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const { combine } = SG.max(N.SortableNumber); - * - * const biggest = pipe( - * 0, - * combine(-1), - * combine(10), - * combine(1000), - * combine(5), - * combine(9001) - * ); // biggest is over 9000 - * ``` - * - * @since 2.0.0 - */ -export function max(sortable: Sortable): Combinable { - return fromCombine(S.max(sortable)); -} - -/** - * Create a combinable fron an instance of Sortable that returns - * that minimum for the type being ordered. This Combinable - * functions identically to min from Sortable. - * - * @example - * ```ts - * import * as SG from "./combinable.ts"; - * import * as N from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const { combine } = SG.min(N.SortableNumber); - * - * const smallest = pipe( - * 0, - * combine(-1), - * combine(10), - * combine(1000), - * combine(5), - * combine(9001) - * ); // smallest is -1 - * ``` - * - * @since 2.0.0 - */ -export function min(sortable: Sortable): Combinable { - return fromCombine(S.min(sortable)); -} - -/** - * Create a combinable that works like Array.join, - * inserting middle between every two values - * that are combineenated. This can have some interesting - * results. - * - * @example - * ```ts - * import * as SG from "./combinable.ts"; - * import * as S from "./string.ts"; - * import { pipe } from "./fn.ts"; - * - * const { combine: toList } = pipe( - * S.InitializableString, - * SG.intercalcate(", "), - * ); - * - * const list = pipe( - * "apples", - * toList("oranges"), - * toList("and bananas"), - * ); // list === "apples, oranges, and bananas" - * ``` - * - * @since 2.0.0 - */ -export function intercalcate(middle: A) { - return ({ combine }: Combinable): Combinable => - fromCombine((second) => (first) => combine(second)(combine(middle)(first))); -} - -/** - * Create a combinable that always returns the - * given value, ignoring anything that it is - * combineenated with. - * - * @example - * ```ts - * import * as SG from "./combinable.ts"; - * import { pipe } from "./fn.ts"; - * - * const { combine } = SG.constant("cake"); - * - * const whatDoWeWant = pipe( - * "apples", - * combine("oranges"), - * combine("bananas"), - * combine("pie"), - * combine("money"), - * ); // whatDoWeWant === "cake" - * ``` - * - * @since 2.0.0 - */ -export function constant(a: A): Combinable { - return fromCombine(() => () => a); -} - -/** - * Given a Combinable, create a function that will - * iterate through an array of values and combine - * them. This is not much more than Array.fold(combine). - * - * @example - * ```ts - * import * as C from "./combinable.ts"; - * import * as N from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const sumAll = C.getCombineAll(N.InitializableNumberSum); - * - * const result = sumAll(1, 30, 80, 1000, 52, 42); // 1205 - * ``` - * - * @since 2.0.0 - */ -export function getCombineAll( - { combine }: Combinable, -): (...as: NonEmptyArray) => A { - const _combine = (first: A, second: A) => combine(second)(first); - return (...as) => as.reduce(_combine); -} diff --git a/vendor/deno.land/x/fun@v2.0.0/comparable.ts b/vendor/deno.land/x/fun@v2.0.0/comparable.ts deleted file mode 100644 index 8381def..0000000 --- a/vendor/deno.land/x/fun@v2.0.0/comparable.ts +++ /dev/null @@ -1,649 +0,0 @@ -/** - * Comparable is a structure that has an idea of comparability. Comparability - * means that two of the same type of object can be compared such that the - * condition of comparison can be true or false. The canonical comparison is - * equality. - * - * @module Comparable - * @since 2.0.0 - */ - -import type { Hold, In, Kind, Out, Spread } from "./kind.ts"; -import type { NonEmptyArray } from "./array.ts"; -import type { ReadonlyRecord } from "./record.ts"; -import type { Literal, Schemable } from "./schemable.ts"; - -import { handleThrow, identity, memoize, uncurry2 } from "./fn.ts"; -import { isSubrecord } from "./record.ts"; - -/** - * The compare function in a Comparable. - * - * @since 2.0.0 - */ -export type Compare = (second: A) => (first: A) => boolean; - -/** - * @since 2.0.0 - */ -export type TypeOf = U extends Comparable ? A : never; - -/** - * A Comparable is an algebra with a notion of equality. Specifically, - * a Comparable for a type T has an equal method that determines if the - * two objects are the same. Comparables can be combined, like many - * algebraic structures. The combinators for Comparable in fun can be found - * in [comparable.ts](./comparable.ts). - * - * An instance of a Comparable must obey the following laws: - * - * 1. Reflexivity: compare(a, a) === true - * 2. Symmetry: compare(a, b) === compare(b, a) - * 3. Transitivity: if compare(a, b) and compare(b, c), then compare(a, c) - * - * @since 2.0.0 - */ -export interface Comparable extends Hold { - readonly compare: Compare; -} - -/** - * Specifies Comparable as a Higher Kinded Type, with - * covariant parameter A corresponding to the 0th - * index of any Substitutions. - * - * @since 2.0.0 - */ -export interface KindComparable extends Kind { - readonly kind: Comparable>; -} - -/** - * Specifies Comparable as a Higher Kinded Type, with - * contravariant parameter D corresponding to the 0th - * index of any Substitutions. - * - * @since 2.0.0 - */ -export interface KindContraComparable extends Kind { - readonly kind: Comparable>; -} - -/** - * Create a Comparable from a Compare function. - * - * @example - * ```ts - * import { fromCompare } from "./comparable.ts"; - * import { pipe } from "./fn.ts"; - * - * const { compare } = fromCompare( - * (second) => (first) => first === second - * ); - * - * const result = compare(1)(1); // true - * ``` - * - * @since 2.0.0 - */ -export function fromCompare( - compare: Compare = (second) => (first) => first === second, -): Comparable { - return { compare }; -} - -/** - * A single instance of Camparable that uses strict equality for comparison. - */ -// deno-lint-ignore no-explicit-any -const STRICT_EQUALITY: Comparable = fromCompare(); - -/** - * Create a Comparable that casts the inner type of another Comparable to - * Readonly. - * - * @example - * ```ts - * import { readonly, fromCompare } from "./comparable.ts"; - * - * // This has type Comparable> - * const ComparableMutableArray = fromCompare>( - * (second) => (first) => first.length === second.length - * && first.every((value, index) => value === second[index]) - * ); - * - * // This has type Comparable>> - * const ComparableReadonlyArray = readonly(ComparableMutableArray); - * ``` - * - * @since 2.0.0 - */ -export function readonly( - comparable: Comparable, -): Comparable> { - return comparable; -} - -/** - * A Comparable that can compare any unknown values (and thus can - * compare any values). Underneath it uses strict equality - * for the comparison. - * - * @example - * ```ts - * import { unknown } from "./comparable.ts"; - * - * const result1 = unknown.compare(1)("Hello"); // false - * const result2 = unknown.compare(1)(1); // true - * ``` - * - * @since 2.0.0 - */ -export const unknown: Comparable = STRICT_EQUALITY; - -/** - * A Comparable that compares strings using strict equality. - * - * @example - * ```ts - * import { string } from "./comparable.ts"; - * - * const result1 = string.compare("World")("Hello"); // false - * const result2 = string.compare("")(""); // true - * ``` - * - * @since 2.0.0 - */ -export const string: Comparable = STRICT_EQUALITY; - -/** - * A Comparable that compares number using strict equality. - * - * @example - * ```ts - * import { number } from "./comparable.ts"; - * - * const result1 = number.compare(1)(2); // false - * const result2 = number.compare(1)(1); // true - * ``` - * - * @since 2.0.0 - */ -export const number: Comparable = STRICT_EQUALITY; - -/** - * A Comparable that compares booleans using strict equality. - * - * @example - * ```ts - * import { boolean } from "./comparable.ts"; - * - * const result1 = boolean.compare(true)(false); // false - * const result2 = boolean.compare(true)(true); // true - * ``` - * - * @since 2.0.0 - */ -export const boolean: Comparable = STRICT_EQUALITY; - -/** - * Creates a Comparable that compares a union of literals - * using strict equality. - * - * @example - * ```ts - * import { literal } from "./comparable.ts"; - * - * const { compare } = literal(1, 2, "Three"); - * - * const result1 = compare(1)("Three"); // false - * const result2 = compare("Three")("Three"); // true - * ``` - * - * @since 2.0.0 - */ -export function literal>( - ..._: A -): Comparable { - return STRICT_EQUALITY; -} - -/** - * Creates a derivative Comparable that can also compare null - * values in addition to the source eq. - * - * @example - * ```ts - * import { nullable, number } from "./comparable.ts"; - * - * const { compare } = nullable(number); - * - * const result1 = compare(1)(null); // false - * const result2 = compare(null)(null); // true - * ``` - * - * @since 2.0.0 - */ -export function nullable({ compare }: Comparable): Comparable { - return fromCompare((second) => (first) => - first === null || second === null - ? first === second - : compare(second)(first) - ); -} - -/** - * Creates a derivative Comparable that can also compare undefined - * values in addition to the source eq. - * - * @example - * ```ts - * import { undefinable, number } from "./comparable.ts"; - * - * const { compare } = undefinable(number); - * - * const result1 = compare(1)(undefined); // false - * const result2 = compare(undefined)(undefined); // true - * ``` - * - * @since 2.0.0 - */ -export function undefinable( - { compare }: Comparable, -): Comparable { - return fromCompare((second) => (first) => - first === undefined || second === undefined - ? first === second - : compare(second)(first) - ); -} - -/** - * Creates a Comparable that compares readonly records with items - * that have the type compared in the supplied eq. - * - * @example - * ```ts - * import { record, number } from "./comparable.ts"; - * - * const { compare } = record(number); - * - * const result1 = compare({ one: 1 })({ one: 2 }); // false - * const result2 = compare({ one: 1 })({ one: 1 }); // true - * ``` - * - * @since 2.0.0 - */ -export function record(eq: Comparable): Comparable> { - const isSub = isSubrecord(eq); - return fromCompare((second) => (first) => - isSub(second)(first) && isSub(first)(second) - ); -} - -/** - * Creates a Comparable that compares readonly array with items - * that have the type compared in the supplied eq. - * - * @example - * ```ts - * import { array, number } from "./comparable.ts"; - * - * const { compare } = array(number); - * - * const result1 = compare([1, 2])([1, 2, 3]); // false - * const result2 = compare([1, 2])([1, 2]); // true - * ``` - * - * @since 2.0.0 - */ -export function array( - { compare }: Comparable, -): Comparable> { - return fromCompare((second) => (first) => - Array.isArray(first) && Array.isArray(second) && - first.length === second.length && - first.every((value, index) => compare(second[index])(value)) - ); -} - -/** - * Creates a eq that compares, index for index, tuples according - * to the order and eqs passed into tuple. - * - * @example - * ```ts - * import { tuple, number, string } from "./comparable.ts"; - * - * const { compare } = tuple(number, string); - * - * const result1 = compare([1, "Hello"])([1, "Goodbye"]); // false - * const result2 = compare([1, ""])([1, ""]); // true - * ``` - * - * @since 2.0.0 - */ -// deno-lint-ignore no-explicit-any -export function tuple>>( - ...comparables: T -): Comparable< - { [K in keyof T]: T[K] extends Comparable ? A : never } -> { - return fromCompare((second) => (first) => - Array.isArray(first) && Array.isArray(second) && - first.length === second.length && - comparables.every(({ compare }, index) => - compare(second[index])(first[index]) - ) - ); -} - -/** - * Create a eq that compares, key for key, structs according - * to the structure of the eqs passed into struct. - * - * @example - * ```ts - * import { struct, number, string } from "./comparable.ts"; - * - * const { compare } = struct({ name: string, age: number }); - * - * const brandon = { name: "Brandon", age: 37 }; - * const emily = { name: "Emily", age: 32 }; - * - * const result1 = compare(brandon)(emily); // false - * const result2 = compare(brandon)(brandon); // true - * ``` - * - * @since 2.0.0 - */ -export function struct( - comparables: { readonly [K in keyof A]: Comparable }, -): Comparable<{ readonly [K in keyof A]: A[K] }> { - const _comparables = Object.entries(comparables) as [ - keyof A, - Comparable, - ][]; - return fromCompare((second) => (first) => - _comparables.every(([key, { compare }]) => compare(second[key])(first[key])) - ); -} - -/** - * Create a eq that compares, key for key, structs according - * to the structure of the eqs passed into struct. It allows - * the values in the struct to be optional or null. - * - * @example - * ```ts - * import { struct, number, string } from "./comparable.ts"; - * - * const { compare } = struct({ name: string, age: number }); - * - * const brandon = { name: "Brandon", age: 37 }; - * const emily = { name: "Emily", age: 32 }; - * - * const result1 = compare(brandon)(emily); // false - * const result2 = compare(brandon)(brandon); // true - * ``` - * - * @since 2.0.0 - */ -export function partial( - comparables: { readonly [K in keyof A]: Comparable }, -): Comparable<{ readonly [K in keyof A]?: A[K] }> { - const _comparables = Object.entries(comparables) as [ - keyof A, - Comparable, - ][]; - return fromCompare((second) => (first) => - _comparables.every(([key, { compare }]) => { - if (key in first && key in second) { - return compare(second[key] as A[keyof A])(first[key] as A[keyof A]); - } - return first[key] === second[key]; - }) - ); -} - -/** - * Create a eq from two other eqs. The resultant eq checks - * that any two values are equal according to both supplied eqs. - * - * @example - * ```ts - * import { intersect, struct, partial, string } from "./comparable.ts"; - * import { pipe } from "./fn.ts"; - * - * const { compare } = pipe( - * struct({ firstName: string }), - * intersect(partial({ lastName: string })) - * ); - * - * const batman = { firstName: "Batman" }; - * const grace = { firstName: "Grace", lastName: "Hopper" }; - * - * const result1 = compare(batman)(grace); // false - * const result2 = compare(grace)(grace); // true - * ``` - * - * @since 2.0.0 - */ -export function intersect( - second: Comparable, -): (first: Comparable) => Comparable> { - return (first: Comparable): Comparable> => - fromCompare((snd: A & I) => (fst: A & I) => - first.compare(snd)(fst) && second.compare(snd)(fst) - ) as Comparable>; -} - -/** - * Create a Comparable from two other Comparables. The resultant Comparable checks - * that any two values are equal according to at least one of the supplied - * eqs. - * - * It should be noted that we cannot differentiate the eq used to - * compare two disparate types like number and number[]. Thus, internally - * union must type cast to any and treat thrown errors as a false - * equivalence. - * - * @example - * ```ts - * import { union, number, string } from "./comparable.ts"; - * import { pipe } from "./fn.ts"; - * - * const { compare } = pipe(number, union(string)); - * - * const result1 = compare(1)("Hello"); // false - * const result2 = compare(1)(1); // true - * ``` - * - * @since 2.0.0 - */ -export function union( - second: Comparable, -): (first: Comparable) => Comparable { - return (first: Comparable) => { - const _first = handleThrow( - uncurry2(first.compare), - identity, - () => false, - ); - const _second = handleThrow( - uncurry2(second.compare), - identity, - () => false, - ); - // deno-lint-ignore no-explicit-any - return fromCompare((snd: any) => (fst: any) => - _first(fst, snd) || _second(fst, snd) - ); - }; -} - -/** - * Create a eq that evaluates lazily. This is useful for equality - * of recursive types (either mutual or otherwise). - * - * @example - * ```ts - * import { lazy, intersect, struct, partial, string, Comparable } from "./comparable.ts"; - * import { pipe } from "./fn.ts"; - * - * type Person = { name: string, child?: Person }; - * - * // Annotating the type is required for recursion - * const person: Comparable = lazy('Person', () => pipe( - * struct({ name: string }), - * intersect(partial({ child: person })) - * )); - * - * const icarus = { name: "Icarus" }; - * const daedalus = { name: "Daedalus", child: icarus }; - * - * const result1 = person.compare(icarus)(daedalus); // false - * const result2 = person.compare(daedalus)(daedalus); // true - * ``` - * - * @since 2.0.0 - */ -export function lazy(_: string, f: () => Comparable): Comparable { - const memo = memoize>(f); - return fromCompare((second) => (first) => memo().compare(second)(first)); -} - -/** - * Create a eq that tests the output of a thunk (IO). This assumes that - * the output of the thunk is always the same, which for true IO is not - * the case. This assumes that the context for the function is undefined, - * which means that it doesn't rely on "this" to execute. - * - * @example - * ```ts - * import { struct, thunk, number } from "./comparable.ts"; - * - * const { compare } = struct({ asNumber: thunk(number) }); - * - * const one = { asNumber: () => 1 }; - * const two = { asNumber: () => 2 }; - * - * const result1 = compare(one)(two); // false - * const result2 = compare(one)(one); // true - * ``` - * - * @since 2.0.0 - */ -export function thunk({ compare }: Comparable): Comparable<() => A> { - return fromCompare((second) => (first) => compare(second())(first())); -} - -/** - * Create a eq from a method on a class or prototypical object. This - * exists because many objects in javascript do now allow you to pass an - * object method around on its own without its parent object. For example, - * if you pass Date.valueOf (type () => number) into another function and - * call it, the call will fail because valueOf does not carry the reference - * of its parent object around. - * - * @example - * ```ts - * import { method, number } from "./comparable.ts"; - * - * // This eq will work for date, but also for any objects that have - * // a valueOf method that returns a number. - * const date = method("valueOf", number); - * - * const now = new Date(); - * const alsoNow = new Date(Date.now()); - * const later = new Date(Date.now() + 60 * 60 * 1000); - * - * const result1 = date.compare(now)(alsoNow); // true - * const result2 = date.compare(now)(later); // false - * ``` - * - * @since 2.0.0 - */ -export function method( - method: M, - { compare }: Comparable, -): Comparable<{ readonly [K in M]: () => A }> { - return fromCompare((second) => (first) => - compare(second[method]())(first[method]()) - ); -} - -/** - * Create a Comparable using a Comparable and a function that takes - * a type L and returns a type D. - * - * @example - * ```ts - * import { premap, number } from "./comparable.ts"; - * import { pipe } from "./fn.ts"; - * - * const dateToNumber = (d: Date): number => d.valueOf(); - * const date = pipe(number, premap(dateToNumber)); - * - * const now = new Date(); - * const alsoNow = new Date(Date.now()); - * const later = new Date(Date.now() + 60 * 60 * 1000); - * - * const result1 = date.compare(now)(alsoNow); // true - * const result2 = date.compare(now)(later); // false - * ``` - * - * Another use for premap with eq is to check for - * equality after normalizing data. In the following we - * can compare strings ignoring case by normalizing to - * lowercase strings. - * - * @example - * ```ts - * import { premap, string } from "./comparable.ts"; - * import { pipe } from "./fn.ts"; - * - * const lowercase = (s: string) => s.toLowerCase(); - * const insensitive = pipe( - * string, // exact string compare - * premap(lowercase), // makes all strings lowercase - * ); - * - * const result1 = insensitive.compare("Hello")("World"); // false - * const result2 = insensitive.compare("hello")("Hello"); // true - * ``` - * - * @since 2.0.0 - */ -export function premap( - fld: (l: L) => D, -): (eq: Comparable) => Comparable { - return ({ compare }) => - fromCompare((second) => (first) => compare(fld(second))(fld(first))); -} - -/** - * The canonical implementation of Schemable for a Comparable. It contains - * the methods unknown, string, number, boolean, literal, nullable, - * undefinable, record, array, tuple, struct, partial, intersect, - * union, and lazy. - * - * @since 2.0.0 - */ -export const SchemableComparable: Schemable = { - unknown: () => unknown, - string: () => string, - number: () => number, - boolean: () => boolean, - literal, - nullable, - undefinable, - record, - array, - tuple, - struct, - partial, - intersect, - union, - lazy, -}; diff --git a/vendor/deno.land/x/fun@v2.0.0/composable.ts b/vendor/deno.land/x/fun@v2.0.0/composable.ts deleted file mode 100644 index e32b18d..0000000 --- a/vendor/deno.land/x/fun@v2.0.0/composable.ts +++ /dev/null @@ -1,27 +0,0 @@ -/** - * Composable is a structure that allows two algebraic structures to be composed - * one into the other. It is a supertype of Combinable but operates on a Kind - * instead of a concrete type. - * - * @module Composable - * @since 2.0.0 - */ - -import type { $, Hold, Kind } from "./kind.ts"; - -/** - * Composable is a structure that allows the composition of two algebraic - * structures that have in and out fields. It also allows for the initialization - * of algebraic structures, in effect identity. In other functional libraries - * this is called a Category. - * - * @since 2.0.0 - */ -export interface Composable extends Hold { - readonly id: () => $; - readonly compose: ( - second: $, - ) => ( - first: $, - ) => $; -} diff --git a/vendor/deno.land/x/fun@v2.0.0/decoder.ts b/vendor/deno.land/x/fun@v2.0.0/decoder.ts deleted file mode 100644 index cf88657..0000000 --- a/vendor/deno.land/x/fun@v2.0.0/decoder.ts +++ /dev/null @@ -1,1918 +0,0 @@ -/** - * The Decoder module contains tools for the course parsing of javascript - * objects into well typed structures. In the event that parsing fails a Decoder - * returns a DecodeError data structure which contains detailed information on - * how and where parsing failed. - * - * @todo Revisit array, tuple, record, and struct to have a concept of ...rest - * - * @module Decoder - * @since 2.0.0 - */ - -import type { In, Kind, Out, Spread } from "./kind.ts"; -import type { AnyArray, NonEmptyArray } from "./array.ts"; -import type { Applicable } from "./applicable.ts"; -import type { Combinable } from "./combinable.ts"; -import type { Composable } from "./composable.ts"; -import type { Either } from "./either.ts"; -import type { Flatmappable } from "./flatmappable.ts"; -import type { FnEither } from "./fn_either.ts"; -import type { Forest } from "./tree.ts"; -import type { Literal, Schemable } from "./schemable.ts"; -import type { Mappable } from "./mappable.ts"; -import type { Predicate } from "./predicate.ts"; -import type { Premappable } from "./premappable.ts"; -import type { ReadonlyRecord } from "./record.ts"; -import type { Refinement } from "./refinement.ts"; -import type { Wrappable } from "./wrappable.ts"; - -import * as FE from "./fn_either.ts"; -import * as TR from "./tree.ts"; -import * as E from "./either.ts"; -import * as A from "./array.ts"; -import * as R from "./record.ts"; -import * as O from "./option.ts"; -import * as S from "./schemable.ts"; -import * as G from "./refinement.ts"; -import { createBind, createTap } from "./flatmappable.ts"; -import { createBindTo } from "./mappable.ts"; -import { fromCombine } from "./combinable.ts"; -import { flow, memoize, pipe } from "./fn.ts"; - -/** - * The required tag denotes that a property in a struct or tuple is required. - * This means that the key or index must exist on the struct or tuple. - * - * @since 2.0.0 - */ -export const required = "required" as const; - -/** - * The optional tag denotes that a property in a struct or tuple is optional. - * This means that the key or index may not exist on the struct or tuple. - * - * @since 2.0.0 - */ -export const optional = "optional" as const; - -/** - * The Property type is a type level denotation that specifies whether a key or - * index is required or optional. - * - * @since 2.0.0 - */ -export type Property = typeof required | typeof optional; - -/** - * The Leaf type is the simplest of DecodeErrors. It indicates that some - * concrete value did not match the expected value. The reason field is used to - * indicate the expected value. - * - * @since 2.0.0 - */ -export type Leaf = { - readonly tag: "Leaf"; - readonly value: unknown; - readonly reason: string; -}; - -/** - * The Wrap type is used to give context to an existing DecodeError. This can be - * as simple as wrapping an array decode error to indicate that we first check - * for an array before we check that the array matches a tuple definition. It - * can also be used to constrain or annotate. - * - * @since 2.0.0 - */ -export type Wrap = { - readonly tag: "Wrap"; - readonly context: string; - readonly error: DecodeError; -}; - -/** - * The Key type is used to contextualize an error that occurred at a key in a - * struct. - * - * @since 2.0.0 - */ -export type Key = { - readonly tag: "Key"; - readonly key: string; - readonly property: Property; - readonly error: DecodeError; -}; - -/** - * The Index type is used to contextualize an error that occurred at an index in - * an Array or Tuple. - * - * @since 2.0.0 - */ -export type Index = { - readonly tag: "Index"; - readonly index: number; - readonly property: Property; - readonly error: DecodeError; -}; - -/** - * The Union type is used to associate two or more DecoderErrors as a union of - * errors. - * - * @since 2.0.0 - */ -export type Union = { - readonly tag: "Union"; - readonly errors: readonly [DecodeError, DecodeError, ...DecodeError[]]; -}; - -/** - * The Intersection type is used to associate two or more DecodeErrors as an - * intersection of errors. - * - * @since 2.0.0 - */ -export type Intersection = { - readonly tag: "Intersection"; - readonly errors: readonly [DecodeError, DecodeError, ...DecodeError[]]; -}; - -/** - * The Many type is used to represent zero or more DecodeErrors without - * context. It's purpose is to be used as both Empty and a target for - * combineenation of DecodeErrors that are neither Union or Intersection types. - * This allows us to build a Combinable over DecodeError. - * - * @since 2.0.0 - */ -export type Many = { - readonly tag: "Many"; - readonly errors: readonly DecodeError[]; -}; - -/** - * The DecodeError type is a discriminated union of potential contextualized - * errors that are encountered while decoding. - * - * @since 2.0.0 - */ -export type DecodeError = - | Leaf - | Wrap - | Key - | Index - | Union - | Intersection - | Many; - -/** - * A refinement that returns true when a DecodeError is a Leaf. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.isLeaf(D.leafErr(1, "expected string")); // true - * const result2 = D.isLeaf(D.manyErr()); // false - * ``` - * - * @since 2.0.0 - */ -export function isLeaf(err: DecodeError): err is Leaf { - return err.tag === "Leaf"; -} - -/** - * A refinement that returns true when a DecodeError is a Wrap. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.isWrap(D.wrapErr( - * "This is some context", - * D.leafErr(1, "expected string") - * )); // true - * const result2 = D.isWrap(D.manyErr()); // false - * ``` - * - * @since 2.0.0 - */ -export function isWrap(err: DecodeError): err is Wrap { - return err.tag === "Wrap"; -} - -/** - * A refinement that returns true when a DecodeError is a Key. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.isKey(D.keyErr( - * "one", - * D.leafErr(1, "expected string") - * )); // true - * const result2 = D.isKey(D.manyErr()); // false - * ``` - * - * @since 2.0.0 - */ -export function isKey(err: DecodeError): err is Key { - return err.tag === "Key"; -} - -/** - * A refinement that returns true when a DecodeError is an Index. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.isIndex(D.indexErr( - * 1, - * D.leafErr(1, "expected string") - * )); // true - * const result2 = D.isIndex(D.manyErr()); // false - * ``` - * - * @since 2.0.0 - */ -export function isIndex(err: DecodeError): err is Index { - return err.tag === "Index"; -} - -/** - * A refinement that returns true when a DecodeError is a Union. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.isUnion(D.unionErr( - * D.leafErr(1, "expected null"), - * D.leafErr(1, "expected string") - * )); // true - * const result2 = D.isUnion(D.manyErr()); // false - * ``` - * - * @since 2.0.0 - */ -export function isUnion(err: DecodeError): err is Union { - return err.tag === "Union"; -} - -/** - * A refinement that returns true when a DecodeError is an Intersection. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.isIntersection(D.intersectionErr( - * D.leafErr(1, "expected null"), - * D.leafErr(1, "expected string") - * )); // true - * const result2 = D.isIntersection(D.manyErr()); // false - * ``` - * - * @since 2.0.0 - */ -export function isIntersection(err: DecodeError): err is Intersection { - return err.tag === "Intersection"; -} - -/** - * A refinement that returns true when a DecodeError is a Many. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.isMany(D.intersectionErr( - * D.leafErr(1, "expected null"), - * D.leafErr(1, "expected string") - * )); // false - * const result2 = D.isMany(D.manyErr()); // true - * ``` - * - * @since 2.0.0 - */ -export function isMany(err: DecodeError): err is Many { - return err.tag === "Many"; -} - -/** - * Construct a Lead from an unknown value and a reason for the decode error. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result = D.leafErr(1, "expected string"); - * ``` - * - * @since 2.0.0 - */ -export function leafErr(value: unknown, reason: string): DecodeError { - return { tag: "Leaf", value, reason }; -} - -/** - * Construct a Wrap from context and an existing DecodeError. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result = D.wrapErr( - * "expected password", - * D.leafErr(1, "expected string") - * ); - * ``` - * - * @since 2.0.0 - */ -export function wrapErr(context: string, error: DecodeError): DecodeError { - return { tag: "Wrap", context, error }; -} - -/** - * Construct a Key from a key and an existing DecodeError. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result = D.keyErr( - * "title", - * D.leafErr(1, "expected string"), - * D.required, - * ); - * ``` - * - * @since 2.0.0 - */ -export function keyErr( - key: string, - error: DecodeError, - property: Property = optional, -): DecodeError { - return { tag: "Key", key, property, error }; -} - -/** - * Construct an Index from an index and an existing DecodeError. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result = D.indexErr( - * 1, - * D.leafErr(1, "expected string"), - * D.required, - * ); - * ``` - * - * @since 2.0.0 - */ -export function indexErr( - index: number, - error: DecodeError, - property: Property = optional, -): DecodeError { - return { tag: "Index", index, property, error }; -} - -/** - * Construct a Union from two or more DecodeErrors. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result = D.unionErr( - * D.leafErr(1, "expected string"), - * D.leafErr(1, "expected array"), - * ); - * ``` - * - * @since 2.0.0 - */ -export function unionErr( - ...errors: readonly [DecodeError, DecodeError, ...DecodeError[]] -): DecodeError { - const _errors = pipe( - errors, - A.flatmap((err) => isUnion(err) ? err.errors : [err]), - ) as unknown as typeof errors; - return { tag: "Union", errors: _errors }; -} - -/** - * Construct an Intersection from two or more DecodeErrors. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result = D.intersectionErr( - * D.leafErr(1, "expected noninit string"), - * D.leafErr(1, "expected string with no spaces"), - * ); - * ``` - * - * @since 2.0.0 - */ -export function intersectionErr( - ...errors: readonly [DecodeError, DecodeError, ...DecodeError[]] -): DecodeError { - const _errors = pipe( - errors, - A.flatmap((err) => isIntersection(err) ? err.errors : [err]), - ) as unknown as typeof errors; - return { tag: "Intersection", errors: _errors }; -} - -/** - * Construct a Many from zero or more DecodeErrors. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.manyErr( - * D.leafErr(1, "expected noninit string"), - * D.leafErr(1, "expected string with no spaces"), - * ); - * const result2 = D.manyErr(); - * ``` - * - * @since 2.0.0 - */ -export function manyErr( - ...errors: readonly DecodeError[] -): DecodeError { - const _errors = pipe( - errors, - A.flatmap((err) => isMany(err) ? err.errors : [err]), - ); - return { tag: "Many", errors: _errors }; -} - -/** - * Construct a catamorphism over DecodeError, mapping each case of a DecodeError - * into the single type O. - * - * @example - * ```ts - * import type { DecodeError } from "./decoder.ts"; - * import * as D from "./decoder.ts"; - * import * as A from "./array.ts"; - * - * const countErrors: (err: DecodeError) => number = D.match( - * () => 1, - * (_, err) => countErrors(err), - * (_, __, err) => countErrors(err), - * (_, __, err) => countErrors(err), - * A.fold((acc, err) => acc + countErrors(err), 0), - * A.fold((acc, err) => acc + countErrors(err), 0), - * A.fold((acc, err) => acc + countErrors(err), 0), - * ); - * - * const result1 = countErrors(D.leafErr(1, "expected string")); // 1 - * const result2 = countErrors(D.manyErr( - * D.leafErr(1, "expected string"), - * D.leafErr(1, "expected string"), - * D.leafErr(1, "expected string"), - * )); // 3 - * ``` - * - * @since 2.0.0 - */ -export function match( - Leaf: (value: unknown, reason: string) => O, - Wrap: (context: string, error: DecodeError) => O, - Key: (key: string, property: Property, error: DecodeError) => O, - Index: (index: number, property: Property, error: DecodeError) => O, - Union: (errors: readonly [DecodeError, DecodeError, ...DecodeError[]]) => O, - Intersection: ( - errors: readonly [DecodeError, DecodeError, ...DecodeError[]], - ) => O, - Many: (errors: readonly DecodeError[]) => O, -): (e: DecodeError) => O { - return (e) => { - switch (e.tag) { - case "Leaf": - return Leaf(e.value, e.reason); - case "Wrap": - return Wrap(e.context, e.error); - case "Key": - return Key(e.key, e.property, e.error); - case "Index": - return Index(e.index, e.property, e.error); - case "Union": - return Union(e.errors); - case "Intersection": - return Intersection(e.errors); - case "Many": - return Many(e.errors); - } - }; -} - -/** - * An internal helper that wraps JSON.stringify such that it returns an - * Option and handles any thrown errors. - */ -const stringify = O.tryCatch(JSON.stringify); - -/** - * An internal helper that maps a Leaf into a Forest. This is used to - * draw a DecodeError tree. - */ -function onLeaf(value: unknown, reason: string): Forest { - return pipe( - stringify(value), - O.map((str) => `cannot decode ${str}, should be ${reason}`), - O.getOrElse(() => `cannot decode or render, should be ${reason}`), - TR.wrap, - A.wrap, - ); -} - -/** - * An internal helper that maps a Wrap into a Forest. This is used to - * draw a DecodeError tree. - */ -function onWrap(context: string, error: DecodeError): Forest { - return [TR.wrap(context, toForest(error))]; -} - -/** - * An internal helper that maps a Key into a Forest. This is used to - * draw a DecodeError tree. - */ -function onKey( - key: string, - property: Property, - error: DecodeError, -): Forest { - return [TR.wrap(`${property} property "${key}"`, toForest(error))]; -} - -/** - * An internal helper that maps an Index into a Forest. This is used to - * draw a DecodeError tree. - */ -function onIndex( - index: number, - property: Property, - error: DecodeError, -): Forest { - return [TR.wrap(`${property} index ${index}`, toForest(error))]; -} - -/** - * An internal helper that maps a Union into a Forest. This is used to - * draw a DecodeError tree. - */ -function onUnion( - errors: readonly [DecodeError, DecodeError, ...DecodeError[]], -): Forest { - return [ - TR.wrap(`cannot decode union (any of)`, pipe(errors, A.flatmap(toForest))), - ]; -} - -/** - * An internal helper that maps an Intersection into a Forest. This is - * used to draw a DecodeError tree. - */ -function onIntersection( - errors: readonly [DecodeError, DecodeError, ...DecodeError[]], -): Forest { - return [ - TR.wrap( - `cannot decode intersection (all of)`, - pipe(errors, A.flatmap(toForest)), - ), - ]; -} - -/** - * An internal helper that maps a Many into a Forest. This is - * used to draw a DecodeError tree. - */ -function onMany(errors: readonly DecodeError[]): Forest { - return pipe(errors, A.flatmap(toForest)); -} - -/** - * An internal helper that maps a DecodeError into a Forest. This is - * used to draw a DecodeError tree. - */ -function toForest(err: DecodeError): Forest { - return pipe( - err, - match(onLeaf, onWrap, onKey, onIndex, onUnion, onIntersection, onMany), - ); -} - -/** - * Given a DecodeError, this function will produce a printable tree of errors. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.draw(D.leafErr(1, "string")); - * // "cannot decode 1, should be string" - * - * const result2 = D.draw(D.wrapErr( - * "decoding password", - * D.leafErr(1, "string"), - * )); - * // decoding password - * // └─ cannot decode 1, should be string - * ``` - * - * @since 2.0.0 - */ -export function draw(err: DecodeError): string { - return pipe( - toForest(err), - A.map(TR.drawTree), - (results) => results.join("\n"), - ); -} - -/** - * Construct an init DecodeError. This is a many that contains no errors. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result = D.init(); // DecodeError - * ``` - * - * @since 2.0.0 - */ -export function init(): DecodeError { - return manyErr(); -} - -/** - * Combine two DecodeErrors into one. If both DecodeErrors are Unions then they - * are merged into a Union, if they are both Intersections then are merged into - * an Intersection, otherwise they are wrapped in a Many. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * D.leafErr(1, "string"), - * D.combine(D.leafErr("hello", "number")), - * ); // Many[Leaf, Leaf] - * ``` - * - * @since 2.0.0 - */ -export function combine( - second: DecodeError, -): (first: DecodeError) => DecodeError { - return (first) => - isIntersection(first) && isIntersection(second) - ? intersectionErr(first, second) - : isUnion(first) && isUnion(second) - ? unionErr(first, second) - : manyErr(first, second); -} - -/** - * The canonical implementation of Combinable for DecodeError. It contains - * the methods combine and init. - * - * @since 2.0.0 - */ -export const CombinableDecodeError: Combinable = fromCombine( - combine, -); - -/** - * The Decoded type is an alias of Either. This is the output - * of a Decoder when the parsing fails. - * - * @since 2.0.0 - */ -export type Decoded = Either; - -/** - * Specifies Decoded as a Higher Kinded Type, with covariant - * parameter A corresponding to the 0th index of any substitutions. - * - * @since 2.0.0 - */ -export interface KindDecoded extends Kind { - readonly kind: Decoded>; -} - -/** - * Construct a Decoded from a value A. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.success(1); // Decoder; - * const result2 = D.success("Hello"); // Decoder; - * ``` - * - * @since 2.0.0 - */ -export function success(a: A): Decoded { - return E.right(a); -} - -/** - * Construct a Decoded failure. Specifically, this constructs a Leaf - * DecodeError and wraps it in Left. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.failure(1, "string"); - * // Represents a Decoded value that failed because a 1 was supplied - * // when a string was expected. - * ``` - * - * @since 2.0.0 - */ -export function failure(actual: unknown, error: string): Decoded { - return E.left(leafErr(actual, error)); -} - -/** - * Construct a Decoded from a DecodeError. This allows one to construct a - * Decoded failure directly from DecodeErrors other than Leaf. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.fromDecodeError(D.wrapErr( - * "decoding password", - * D.leafErr(1, "string"), - * )); - * ``` - * - * @since 2.0.0 - */ -export function fromDecodeError(err: DecodeError): Decoded { - return E.left(err); -} - -/** - * A combinator over Decoded that maps a DecodeError into a printable tree. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * import { pipe } from "./fn.ts"; - * - * const result1 = pipe( - * D.failure(1, "string"), - * D.unwrap, - * ); // Left("cannot decode 1, should be string") - * const result2 = pipe( - * D.success(1), - * D.unwrap - * ); // Right(1) - * ``` - * - * @since 2.0.0 - */ -export function unwrap(ta: Decoded): Either { - return pipe(ta, E.mapSecond(draw)); -} - -/** - * The canonical instance of Flatmappable for Decoded. It contains the methods of, ap, map, - * join, and flatmap. - * - * @since 2.0.0 - */ -export const FlatmappableDecoded: Flatmappable = E - .getFlatmappableRight(CombinableDecodeError); - -/** - * A traversal over a Record of Decoded results. - */ -const traverseRecord = R.traverse(FlatmappableDecoded); - -/** - * A traversal over an Array of Decoded results. - */ -const traverseArray = A.traverse(FlatmappableDecoded); - -/** - * The Decoder type represents a function that parses some input D into a - * value A or a DecodeError. This isn't true parsing of a grammar but instead a - * combination of refinement and error tracking. - * - * @since 2.0.0 - */ -export type Decoder = FnEither; - -/** - * A type that matches any decoder type. - * - * @since 2.0.0 - */ -// deno-lint-ignore no-explicit-any -export type AnyDecoder = Decoder; - -/** - * Specifies Decoder as a Higher Kinded Type, with covariant - * parameter A corresponding to the 0th index of any substitutions and - * contravariant paramter D corresponding to the 0th index of any substitutions. - * - * @since 2.0.0 - */ -export interface KindDecoder extends Kind { - readonly kind: Decoder, Out>; -} - -/** - * Construct a Decoder from a Predicate and a reason for failure or a - * Decoder from a Refinement and a reason for failure. While - * decoding, the value A is passed to the predicate/refinement. If it returns - * true then the result is wrapped in Success, otherwise the value and reason - * are wrapped in Failure. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * import * as R from "./refinement.ts"; - * import { pipe } from "./fn.ts"; - * - * const nonEmpty = D.fromPredicate( - * (s: string) => s.length > 0, // Predicate - * "noninit string" - * ); - * const string = D.fromPredicate(R.string, "string"); - * const nonEmptyString = pipe( - * string, - * D.compose(nonEmpty), - * ); - * - * const result1 = nonEmptyString(null); // Left(DecodeError) - * const result2 = nonEmptyString(""); // Left(DecodeError) - * const result3 = nonEmptyString("Hello"); // Right("Hello") - * ``` - * - * @since 2.0.0 - */ -export function fromPredicate( - guard: Refinement, - expected: string, -): Decoder; -export function fromPredicate( - guard: Predicate, - expected: string, -): Decoder; -export function fromPredicate( - guard: Predicate, - expected: string, -): Decoder { - return (a: A) => guard(a) ? success(a) : failure(a, expected); -} - -/** - * Create a Decoder from a constant value A. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const one = D.wrap("one"); - * - * const result = one(null); // Right("one") - * ``` - * - * @since 2.0.0 - */ -export function wrap(a: A): Decoder { - return FlatmappableDecoder.wrap(a); -} - -/** - * Given a Decoder returning a function A => I and a Decoder returning a value - * A, combine them into a Decoder returning I. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * import { pipe } from "./fn.ts"; - * - * type Person = { name: string; age: number }; - * const person = (name: string) => (age: number): Person => ({ name, age }); - * - * const result = pipe( - * D.wrap(person), - * D.apply(D.wrap("Brandon")), - * D.apply(D.wrap(37)), - * ); // Decoder - * ``` - * - * @since 2.0.0 - */ -export function apply( - ua: Decoder, -): (ufai: Decoder I>) => Decoder { - return FlatmappableDecoder.apply(ua); -} - -/** - * Provide an alternative Decoder to fallback against if the first one fails. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * import { pipe } from "./fn.ts"; - * - * const numOrStr = pipe( - * D.string, - * D.alt(D.number), - * ); - * - * const result1 = numOrStr(0); // Right(0) - * const result2 = numOrStr("Hello"); // Right("Hello") - * const result3 = numOrStr(null); // Left(DecodeError) - * ``` - * - * @since 2.0.0 - */ -export function alt( - second: Decoder, -): (first: Decoder) => Decoder { - return (first) => (d) => { - const fst = first(d); - if (E.isRight(fst)) { - return fst; - } - const snd = second(d); - if (E.isRight(snd)) { - return snd; - } - return fromDecodeError(unionErr(fst.left, snd.left)); - }; -} - -/** - * Map over the output of a Decoder. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * import { pipe } from "./fn.ts"; - * - * const stringLength = pipe( - * D.string, - * D.map(s => s.length), - * ); - * - * const result1 = stringLength(null); // Left(DecodeError) - * const result2 = stringLength(""); // Right(0) - * const result3 = stringLength("Hello"); // Right(5) - * ``` - * - * @since 2.0.0 - */ -export function map( - fai: (a: A) => I, -): (ua: Decoder) => Decoder { - return FlatmappableDecoder.map(fai); -} - -/** - * Chain the result of one decoder into a new decoder. - * - * @since 2.0.0 - */ -export function flatmap( - faui: (a: A) => Decoder, -): (ua: Decoder) => Decoder { - return FlatmappableDecoder.flatmap(faui); -} - -/** - * Annotate the DecodeError output of an existing Decoder if it fails while - * parsing. Internally, this uses the DecodeError Wrap constructor. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * import { pipe } from "./fn.ts"; - * - * const decoder = pipe( - * D.literal("a", "b", "c", 1, 2, 3), - * D.annotate("like the song"), - * ); - * - * const result1 = decoder(1); // Right(1) - * const result2 = D.unwrap(decoder("d")); - * // Left(`like the song - * // └─ cannot decode "d", should be "a", "b", "c", 1, 2, 3`) - * - * ``` - * - * @since 2.0.0 - */ -export function annotate( - context: string, -): (decoder: Decoder) => Decoder { - return FE.mapSecond((error) => wrapErr(context, error)); -} - -/** - * Create a Decoder from a type D. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const num = D.id(); - * - * const result1 = num(1); // Right(1) - * ``` - * - * @since 2.0.0 - */ -export function id(): Decoder { - return E.right; -} - -/** - * Compose two Decoders where the input to second aligns with the output of - * first. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * import * as S from "./string.ts"; - * import { pipe } from "./fn.ts"; - * - * const prefixed = (prefix: T) => - * D.fromPredicate(S.startsWith(prefix), `prefixed with "${prefix}"`); - * - * const eventMethod = pipe( - * D.string, - * D.compose(prefixed("on")), - * ); - * - * const result1 = eventMethod(null); // Left(DecodeError) - * const result2 = eventMethod("hello"); // Left(DecodeError) - * const result3 = eventMethod("onClick"); // Right("onClick"); - * ``` - * - * @since 2.0.0 - */ -export function compose( - second: Decoder, -): (first: Decoder) => Decoder { - return FE.compose(second); -} - -/** - * Map over the input of a Decoder contravariantly. This allows one to use an - * existing decoder against a transformed input. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * import { pipe } from "./fn.ts"; - * - * const fromStr = pipe( - * D.tuple(D.string, D.string), - * D.premap((s) => [s, s] as const), - * ); - * - * const result1 = fromStr("hello"); // Right(["hello", "hello"]) - * const result2 = fromStr(null); // Left(DecodeError) - * ``` - * - * @since 2.0.0 - */ -export function premap( - fld: (l: L) => D, -): (ua: Decoder) => Decoder { - return FE.premap(fld); -} - -/** - * Map over the input and output of a Decoder. This is effectively a combination - * of map and premap in a single operator. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * import { pipe } from "./fn.ts"; - * - * const fromStr = pipe( - * D.tuple(D.string, D.string), - * D.dimap( - * (s) => [s, s], - * ([s]) => [s, s.length] as const, - * ), - * ); - * - * const result1 = fromStr("hello"); // Right(["hello", 5]) - * const result2 = fromStr(null); // Left(DecodeError) - * ``` - * - * @since 2.0.0 - */ -export function dimap( - fld: (l: L) => D, - fai: (a: A) => I, -): (ua: Decoder) => Decoder { - return FE.dimap(fld, fai); -} - -/** - * Apply a refinement or predicate to the output of an existing Decoder. This is - * useful for building complicated Decoders. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * import { pipe } from "./fn.ts"; - * - * const nonEmptyString = pipe( - * D.string, - * D.refine(s => s.length > 0, "noninit"), - * ); - * - * const result1 = nonEmptyString(null); // Left(DecodeError) - * const result2 = nonEmptyString(""); // Left(DecodeError) - * const result3 = nonEmptyString("Hello"); // Right("Hello") - * ``` - * - * @since 2.0.0 - */ -export function refine( - refinement: Refinement, - id: string, -): (from: Decoder) => Decoder; -export function refine( - refinement: Predicate, - id: string, -): (from: Decoder) => Decoder; -export function refine( - refinement: Predicate, - id: string, -): (from: Decoder) => Decoder { - return compose(fromPredicate(refinement, id)); -} - -/** - * An internal helper that maps a Literal to a string for use - * in DecodeErrors - */ -const literalToString = (literal: S.Literal): string => - typeof literal === "string" ? `"${literal}"` : `${literal}`; - -/** - * Create a Decoder from a list of literal values. Literal values can be - * strings, numbers, booleans, null, or undefined. This decoder will only return - * Right if the value being decoded has object equality with one of the literals - * supplied. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const firstThree = D.literal(1, 2, 3); - * - * const result1 = firstThree(0); // Left(DecodeError) - * const result2 = firstThree(1); // Right(1) - * const result3 = firstThree(2); // Right(2) - * const result4 = firstThree(3); // Right(3) - * const result5 = firstThree(null); // Left(DecodeError) - * ``` - * - * @since 2.0.0 - */ -export function literal>( - ...literals: A -): Decoder { - return fromPredicate( - G.literal(...literals), - literals.map(literalToString).join(", "), - ) as unknown as Decoder; -} - -/** - * A Decoder that always returns true and casts the result to unknown. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.unknown(null); // Right(null) - * const result2 = D.unknown("Brandon"); // Right("Brandon") - * ``` - * - * @since 2.0.0 - */ -export const unknown: Decoder = E.right; - -/** - * A Decoder that validates strings. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.string(null); // Left(DecodeError) - * const result2 = D.string("Hello"); // Right("Hello") - * ``` - * - * @since 2.0.0 - */ -export const string: Decoder = fromPredicate( - G.string, - "string", -); - -/** - * A Decoder that validates numbers. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.number(null); // Left(DecodeError) - * const result2 = D.number(1); // Right(1) - * ``` - * - * @since 2.0.0 - */ -export const number: Decoder = fromPredicate( - G.number, - "number", -); - -/** - * A Decoder that validates booleans. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.boolean(null); // Left(DecodeError) - * const result2 = D.boolean(true); // Right(true) - * ``` - * - * @since 2.0.0 - */ -export const boolean: Decoder = fromPredicate( - G.boolean, - "boolean", -); - -/** - * A Decoder that attempts to decode a Date using new Date(value). If the - * process of calling new Date throws or the getTime method on the new date - * object returns NaN, then a failure is returned. If a Date can be derived from - * the object then a Date object is returned. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const result1 = D.date(null); // Left(DecodeError) - * const result2 = D.date(Date.now()); // Right(Date) - * const result3 = D.date("1990"); // Right(Date) - * const result4 = D.date(new Date()); // Right(Date) - * ``` - * - * @since 2.0.0 - */ -export function date(a: unknown): Decoded { - try { - // deno-lint-ignore no-explicit-any - const _date = new Date(a as any); - return isNaN(_date.getTime()) ? failure(a, "date") : success(_date); - } catch { - return failure(a, "date"); - } -} - -/** - * A Decoder that checks that an object is both an Array and that it's length is - * N. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const two = D.arrayN(2); - * - * const result1 = two(null); // Left(DecodeError) - * const result2 = two([]); // Left(DecodeError) - * const result3 = two(["hello"]); // Left(DecodeError) - * const result4 = two(["hello", 2]); // Right(["hello", 2]) - * ``` - * - * @since 2.0.0 - */ -export function arrayN( - length: N, -): Decoder & { length: N }> { - return fromPredicate(G.isArrayN(length), `tuple of length ${length}`); -} - -/** - * A Decoder combinator that will check that a value is a string and then - * attempt to parse it as JSON. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * import { pipe } from "./fn.ts"; - * - * const person = D.struct({ - * name: D.string, - * age: D.number, - * }); - * const json = D.json(person); - * - * const result1 = json(null); // Left(DecodeError) - * const result2 = json(""); // Left(DecodeError) - * const result3 = json('{"name":"Brandon","age":37}'); - * // Right({ name: "Brandon", age: 37 }) - * ``` - * - * @since 2.0.0 - */ -export function json(decoder: Decoder): Decoder { - return pipe( - string, - compose((s) => { - try { - return success(JSON.parse(s)); - } catch { - return failure(s, "json"); - } - }), - compose(decoder), - ); -} - -/** - * A Decoder combinator that intersects two existing decoders. The resultant - * decoder ensures that an input matches both decoders. Nested intersection - * combinators will combine and flatten their error trees. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * import { pipe } from "./fn.ts"; - * - * const person = pipe( - * D.struct({ name: D.string }), - * D.intersect(D.partial({ age: D.string })), - * ); - * - * const result1 = person(null); // Left(DecodeError) - * const result2 = person({ name: "Brandon" }); // Right({ name: "Brandon" }) - * const result3 = person({ name: "Brandon", age: 37 }); - * // Right({ name: "Brandon", age: 37 }) - * const result4 = person({ age: 37 }); // Left(DecodeError) - * ``` - * - * @since 2.0.0 - */ -export function intersect( - second: Decoder, -): (first: Decoder) => Decoder> { - return (first: Decoder): Decoder> => (a) => { - const fst = first(a) as Decoded>; - const snd = second(a) as Decoded>; - - if (E.isRight(snd) && E.isRight(fst)) { - return success( - Object.assign({}, fst.right, snd.right), - ); - } - - if (E.isLeft(fst)) { - if (E.isLeft(snd)) { - return fromDecodeError( - intersectionErr(fst.left, snd.left), - ); - } - return fst; - } - return snd; - }; -} - -/** - * Provide an alternative Decoder to fallback against if the first one fails. - * This is an alias of alt. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * import { pipe } from "./fn.ts"; - * - * const numOrStr = pipe( - * D.string, - * D.union(D.number), - * ); - * - * const result1 = numOrStr(0); // Right(0) - * const result2 = numOrStr("Hello"); // Right("Hello") - * const result3 = numOrStr(null); // Left(DecodeError) - * ``` - * - * @since 2.0.0 - */ -export function union( - right: Decoder, -): (left: Decoder) => Decoder { - return alt(right); -} - -/** - * An internal literal instance over null used in the nullable combinator. - * - * @since 2.0.0 - */ -export const _null = literal(null); - -/** - * A decoder combinator that modifies an existing decoder to accept null as an - * input value and a successful return value. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const orNull = D.nullable(D.string); - * - * const result1 = orNull(null); // Right(null) - * const result2 = orNull(2); // Left(DecodeError) - * const result3 = orNull("Hello"); // Right("Hello") - * ``` - * - * @since 2.0.0 - */ -export function nullable( - second: Decoder, -): Decoder { - return pipe(_null, union(second)) as Decoder; -} - -/** - * An internal literal instance over undefined used in the undefinable combinator. - * - * @since 2.0.0 - */ -export const _undefined = literal(undefined); - -/** - * A decoder combinator that modifies an existing decoder to accept undefined - * as an input value and a successful return value. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const orUndefined = D.undefinable(D.string); - * - * const result1 = orUndefined(undefined); // Right(null) - * const result2 = orUndefined(2); // Left(DecodeError) - * const result3 = orUndefined("Hello"); // Right("Hello") - * ``` - * - * @since 2.0.0 - */ -export function undefinable( - second: Decoder, -): Decoder { - return pipe(_undefined, union(second)) as Decoder< - D | undefined, - A | undefined - >; -} - -/** - * An internal optimization decoder that checks that an input is a non-null - * object. - * - * @since 2.0.0 - */ -const _record = fromPredicate(G.isRecord, "record"); - -/** - * A decoder against a record with string keys and values that match the items - * decoder. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const strings = D.record(D.string); - * - * const result1 = strings(null); // Left(DecodeError) - * const result2 = strings({}); // Right({}) - * const result3 = strings([]); // Right({}) - * const result4 = strings({"one": 1}); // Left(DecodeError) - * const result5 = strings({ one: "one" }); // Right({ one: "one" }) - * ``` - * - * @since 2.0.0 - */ -export function record( - items: Decoder, -): Decoder> { - return flow( - _record, - E.flatmap(flow( - traverseRecord((a, index) => - pipe(items(a), E.mapSecond((e) => keyErr(index, e))) - ), - E.mapSecond((e) => wrapErr("cannot decode record", e)), - )), - ); -} - -/** - * An internal optimization decoder that checks that an input is an array. - * - * @since 2.0.0 - */ -const _array = fromPredicate(G.isArray, "array"); - -/** - * A decoder against an array with only values that adhere to the passed in - * items decoder. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const strings = D.array(D.string); - * - * const result1 = strings(null); // Left(DecodeError) - * const result2 = strings({}); // Left(DecodeError) - * const result3 = strings([]); // Right([]) - * const result4 = strings([1, 2, 3]); // Left(DecodeError) - * const result5 = strings(["one", "two"]); // Right(["one", "two"]) - * ``` - * - * @since 2.0.0 - */ -export function array( - items: Decoder, -): Decoder> { - return flow( - _array, - E.flatmap(flow( - traverseArray((a, index) => - pipe(items(a), E.mapSecond((e) => indexErr(index, e))) - ), - E.mapSecond((e) => wrapErr("cannot decode array", e)), - )), - ); -} - -/** - * A decoder over a heterogenous tuple. This tuple can have different values for - * each tuple element, but is constrained to a specific size and order. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const tuple = D.tuple(D.string, D.number); - * - * const result1 = tuple([]); // Left(DecodeError) - * const result2 = tuple([3, "Hello"]); // Left(DecodeError) - * const result3 = tuple(["Brandon", 37]); // Right(["Brandon", 37]) - * ``` - * - * @since 2.0.0 - */ -export function tuple( - ...items: { [K in keyof A]: Decoder } -): Decoder { - return flow( - arrayN(items.length), - E.flatmap( - traverseArray((a, index) => { - const decoder: AnyDecoder = items[index]; - return pipe( - decoder(a), - E.mapSecond((e) => indexErr(index, e, "required")), - ); - }), - ), - E.mapSecond((e) => wrapErr("cannot decode tuple", e)), - ) as Decoder; -} - -/** - * An internal helper function that traverses a structure, decoding each entry - * in the struct with its corresponding decoder. - * - * @since 2.0.0 - */ -const traverseStruct = - (items: Record>) => - (a: Record) => - pipe( - items, - traverseRecord((decoder, key) => - pipe( - decoder(a[key]), - E.mapSecond((e) => keyErr(key, e, "required")), - ) - ), - ); - -/** - * A decoder over a heterogenous record type. This struct can have different - * values at each key, and the resultant decoder will ensure that each key - * matches its corresponding decoder. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const person = D.struct({ name: D.string, age: D.number }); - * - * const result1 = person({}); // Left(DecodeError) - * const result2 = person(null); // Left(DecodeError) - * const result3 = person({ name: "Brandon" }); // Left(DecodeError) - * const result4 = person({ name: "Brandon", age: 37 }); - * // Right({ name: "Brandon", age: 37 }) - * ``` - * - * @since 2.0.0 - */ -export function struct( - items: { [K in keyof A]: Decoder }, -): Decoder { - return flow( - _record, - E.flatmap(traverseStruct(items)), - E.mapSecond((e) => wrapErr("cannot decode struct", e)), - ) as Decoder; -} - -/** - * An internal helper decoded value that represents a partial value that does - * not exist in the record being decoded. - * - * @since 2.0.0 - */ -const skipProperty: Decoded> = success( - E.left(undefined), -); - -/** - * An internal helper decoded value that represents a partial value that does - * exists but is undefined. - * - * @since 2.0.0 - */ -const undefinedProperty: Decoded> = success( - E.right(undefined), -); - -/** - * An internal helper function that traverses a partial, decoding each entry - * in the struct with its corresponding decoder and handling the cases where a - * property does not exist on the struct and where a property is undefined. - * - * @since 2.0.0 - */ -const traversePartial = - (items: Record>) => - (a: Record) => - pipe( - items, - traverseRecord((decoder, key) => { - if (a[key] === undefined) { - return key in a ? undefinedProperty : skipProperty; - } - return pipe( - decoder(a[key]), - E.bimap((e) => keyErr(key, e), E.right), - ); - }), - ); - -/** - * An internal helper that is used to construct a partial record where - * Left values are not added to the resultant record. - * - * @since 2.0.0 - */ -const compactRecord = ( - r: Record>, -): Record => { - const out: Record = {}; - for (const k in r) { - const rk = r[k]; - if (E.isRight(rk)) { - out[k] = rk.right; - } - } - return out; -}; - -/** - * A decoder over a heterogenous record type. This struct can have different - * values at each key or the key can not exist or the value can be undefined, - * and the resultant decoder will ensure that each key - * matches its corresponding decoder. - * - * @example - * ```ts - * import * as D from "./decoder.ts"; - * - * const person = D.partial({ name: D.string, age: D.number }); - * - * const result1 = person({}); // Right({}) - * const result2 = person(null); // Left(DecodeError) - * const result3 = person({ name: "Brandon" }); // Right({ name: "Brandon" }) - * const result4 = person({ name: "Brandon", age: 37 }); - * // Right({ name: "Brandon", age: 37 }) - * ``` - * - * @since 2.0.0 - */ -export function partial( - items: { [K in keyof A]: Decoder }, -): Decoder { - return flow( - _record, - E.flatmap(traversePartial(items)), - E.bimap((e) => wrapErr("cannot decode partial struct", e), compactRecord), - ) as Decoder; -} - -/** - * The Lazy decoder combinator allows for the creation of recursive or mutually - * recursive decoding. The passed decoder thunk is memoized to keep the vm from - * falling into an infinite loop. - * - * @example - * ```ts - * import type { Decoder } from "./decoder.ts"; - * - * import * as D from "./decoder.ts"; - * import { pipe } from "./fn.ts"; - * - * type Person = { name: string; age: number; children: ReadonlyArray }; - * const person = ( - * name: string, - * age: number, - * children: ReadonlyArray = [] - * ): Person => ({ name, age, children }); - * - * const decode: Decoder = D.lazy( - * "Person", - * () => D.struct({ name: D.string, age: D.number, children: D.array(decode) }), - * ); - * - * const rufus = person("Rufus", 1); - * const brandon = person("Brandon", 37, [rufus]); - * const jackie = person("Jackie", 57, [brandon]); - * - * const result1 = decode(null); // Left(DecodeError) - * const result2 = decode(rufus); // Right(rufus) - * const result3 = decode(brandon); // Right(brandon) - * const result4 = decode(jackie); // Right(jackie) - * ``` - * - * @since 2.0.0 - */ -export function lazy( - id: string, - decoder: () => Decoder, -): Decoder { - const get = memoize>(decoder); - return (u) => - pipe(get()(u), E.mapSecond((e) => wrapErr(`lazy type ${id}`, e))); -} - -/** - * Specifies Decoder as a Higher Kinded Type, with covariant - * parameter A corresponding to the 0th index of any substitutions. This is a - * specific Kind used to construct the Schemable Decoder. - * - * @since 2.0.0 - */ -export interface KindUnknownDecoder extends Kind { - readonly kind: Decoder>; -} - -/** - * The canonical implementation of Applicable for Decoder. It contains - * the methods of, ap, and map. - * - * @since 2.0.0 - */ -export const ApplicableDecoder: Applicable = { wrap, apply, map }; - -/** - * @since 2.0.0 - */ -export const ComposableDecoder: Composable = { compose, id }; - -/** - * The canonical implementation of Mappable for Decoder. It contains - * the method map. - * - * @since 2.0.0 - */ -export const MappableDecoder: Mappable = { map }; - -/** - * The canonical implementation of Flatmappable for Decoder. It contains - * the methods of, ap, map, join, and flatmap. - * - * @since 2.0.0 - */ -export const FlatmappableDecoder: Flatmappable = FE - .getRightFlatmappable( - CombinableDecodeError, - ); - -/** - * @since 2.0.0 - */ -export const PremappableDecoder: Premappable = { - premap, - map, - dimap, -}; - -/** - * The canonical implementation of Schemable for Decoder. It contains - * the methods unknown, string, number, boolean, literal, nullable, undefinable, - * record, array, tuple, struct, partial, intersect, union, and lazy. - * - * @since 2.0.0 - */ -export const SchemableDecoder: Schemable = { - unknown: () => unknown, - string: () => string, - number: () => number, - boolean: () => boolean, - literal, - nullable, - undefinable, - record, - array, - tuple: tuple as Schemable["tuple"], - struct, - partial, - intersect, - union, - lazy, -}; - -/** - * @since 2.0.0 - */ -export const WrappableDecoder: Wrappable = { wrap }; - -/** - * @since 2.0.0 - */ -export const tap = createTap(FlatmappableDecoder); - -/** - * @since 2.0.0 - */ -export const bind = createBind(FlatmappableDecoder); - -/** - * @since 2.0.0 - */ -export const bindTo = createBindTo(MappableDecoder); diff --git a/vendor/deno.land/x/fun@v2.0.0/either.ts b/vendor/deno.land/x/fun@v2.0.0/either.ts deleted file mode 100644 index 18bff08..0000000 --- a/vendor/deno.land/x/fun@v2.0.0/either.ts +++ /dev/null @@ -1,519 +0,0 @@ -/** - * This file contains the Either algebraic data type. Either is used to - * represent two exclusive types. Generally, Either is used to represent either - * a successful computation or a failed computation, with the result of the - * failed computation being kept in Left. - * - * @module Either - * @since 2.0.0 - */ - -import type { $, Kind, Out } from "./kind.ts"; -import type { Applicable } from "./applicable.ts"; -import type { Bimappable } from "./bimappable.ts"; -import type { Combinable } from "./combinable.ts"; -import type { Comparable } from "./comparable.ts"; -import type { Failable } from "./failable.ts"; -import type { Filterable } from "./filterable.ts"; -import type { Flatmappable } from "./flatmappable.ts"; -import type { Foldable } from "./foldable.ts"; -import type { Initializable } from "./initializable.ts"; -import type { Mappable } from "./mappable.ts"; -import type { Pair } from "./pair.ts"; -import type { Predicate } from "./predicate.ts"; -import type { Refinement } from "./refinement.ts"; -import type { Showable } from "./showable.ts"; -import type { Sortable } from "./sortable.ts"; -import type { Traversable } from "./traversable.ts"; -import type { Wrappable } from "./wrappable.ts"; - -import * as O from "./option.ts"; -import { createBind, createTap } from "./flatmappable.ts"; -import { createBindTo } from "./mappable.ts"; -import { isNotNil } from "./nil.ts"; -import { fromCompare } from "./comparable.ts"; -import { fromSort } from "./sortable.ts"; -import { flow, pipe } from "./fn.ts"; - -/** - * @since 2.0.0 - */ -export type Left = { tag: "Left"; left: L }; - -/** - * @since 2.0.0 - */ -export type Right = { tag: "Right"; right: R }; - -/** - * @since 2.0.0 - */ -export type Either = Left | Right; - -/** - * @since 2.0.0 - */ -export interface KindEither extends Kind { - readonly kind: Either, Out>; -} - -/** - * @since 2.0.0 - */ -export interface KindRightEither extends Kind { - readonly kind: Either>; -} - -/** - * @since 2.0.0 - */ -export function left(left: E): Either { - return ({ tag: "Left", left }); -} - -/** - * @since 2.0.0 - */ -export function right(right: A): Either { - return ({ tag: "Right", right }); -} - -/** - * @since 2.0.0 - */ -export function wrap(a: A): Either { - return right(a); -} - -/** - * @since 2.0.0 - */ -export function fail(b: B): Either { - return left(b); -} - -/** - * @since 2.0.0 - */ -export function fromNullable(fe: () => E) { - return ( - a: A, - ): Either> => (isNotNil(a) ? right(a) : left(fe())); -} - -/** - * @since 2.0.0 - */ -export function tryCatch( - fn: (...as: AS) => A, - onError: (e: unknown) => E, -): (...as: AS) => Either { - return (...as: AS) => { - try { - return right(fn(...as)); - } catch (e) { - return left(onError(e)); - } - }; -} - -/** - * @since 2.0.0 - */ -export function fromPredicate( - refinement: Refinement, -): (a: A) => Either; -export function fromPredicate( - predicate: Predicate, -): (a: A) => Either; -export function fromPredicate( - predicate: Predicate, -): (a: A) => Either { - return (a: A) => predicate(a) ? right(a) : left(a); -} - -/** - * @since 2.0.0 - */ -export function match( - onLeft: (left: L) => B, - onRight: (right: R) => B, -): (ta: Either) => B { - return (ta) => isLeft(ta) ? onLeft(ta.left) : onRight(ta.right); -} - -/** - * @since 2.0.0 - */ -export function getOrElse(onLeft: (e: E) => A) { - return (ma: Either): A => isLeft(ma) ? onLeft(ma.left) : ma.right; -} - -/** - * @since 2.0.0 - */ -export function getRight(ma: Either): O.Option { - return pipe(ma, match(O.constNone, O.some)); -} - -/** - * @since 2.0.0 - */ -export function getLeft(ma: Either): O.Option { - return pipe(ma, match(O.some, O.constNone)); -} - -/** - * @since 2.0.0 - */ -export function isLeft(m: Either): m is Left { - return m.tag === "Left"; -} - -/** - * @since 2.0.0 - */ -export function isRight(m: Either): m is Right { - return m.tag === "Right"; -} - -/** - * @since 2.0.0 - */ -export function bimap( - fbj: (b: B) => J, - fai: (a: A) => I, -): (ta: Either) => Either { - return (ta) => isLeft(ta) ? left(fbj(ta.left)) : right(fai(ta.right)); -} - -/** - * @since 2.0.0 - */ -export function swap(ma: Either): Either { - return isLeft(ma) ? right(ma.left) : left(ma.right); -} - -/** - * @since 2.0.0 - */ -export function map( - fai: (a: A) => I, -): (ta: Either) => Either { - return (ta) => isLeft(ta) ? ta : right(fai(ta.right)); -} - -/** - * @since 2.0.0 - */ -export function mapSecond( - fbj: (b: B) => J, -): (ta: Either) => Either { - return (ta) => isLeft(ta) ? left(fbj(ta.left)) : ta; -} - -/** - * @since 2.0.0 - */ -export function apply( - ua: Either, -): (ufai: Either I>) => Either { - return (ufai) => - isLeft(ua) ? ua : isLeft(ufai) ? ufai : right(ufai.right(ua.right)); -} - -/** - * @since 2.0.0 - */ -export function flatmap( - fati: (a: A) => Either, -): (ta: Either) => Either { - return (ta) => isLeft(ta) ? ta : fati(ta.right); -} - -/** - * @since 2.0.0 - */ -export function flatmapFirst( - faui: (a: A) => Either, -): (ta: Either) => Either { - return (ua) => { - if (isLeft(ua)) { - return ua; - } else { - const ui = faui(ua.right); - return isLeft(ui) ? ui : ua; - } - }; -} - -/** - * @since 2.0.0 - */ -export function recover( - fbui: (b: B) => Either, -): (ua: Either) => Either { - return (ua) => isRight(ua) ? ua : fbui(ua.left); -} - -/** - * @since 2.0.0 - */ -export function alt( - tb: Either, -): (ta: Either) => Either { - return (ta) => isLeft(ta) ? tb : ta; -} - -/** - * @since 2.0.0 - */ -export function fold( - foao: (o: O, a: A) => O, - o: O, -): (ta: Either) => O { - return (ta) => isLeft(ta) ? o : foao(o, ta.right); -} - -/** - * @since 2.0.0 - */ -export function traverse( - A: Applicable & Mappable & Wrappable, -): ( - faui: (a: A) => $, -) => (ta: Either) => $, J, K], [L], [M]> { - //deno-lint-ignore no-explicit-any - const onLeft: any = flow(left, A.wrap); - //deno-lint-ignore no-explicit-any - const mapRight: any = A.map(right); - return (faui) => match(onLeft, flow(faui, mapRight)); -} - -/** - * @since 2.0.0 - */ -export function getShowableEither( - SB: Showable, - SA: Showable, -): Showable> { - return ({ - show: match( - (left) => `Left(${SB.show(left)})`, - (right) => `Right(${SA.show(right)})`, - ), - }); -} - -/** - * @since 2.0.0 - */ -export function getComparableEither( - SB: Comparable, - SA: Comparable, -): Comparable> { - return fromCompare((second) => (first) => { - if (isLeft(first)) { - if (isLeft(second)) { - return SB.compare(second.left)(first.left); - } - return false; - } - - if (isLeft(second)) { - return false; - } - return SA.compare(second.right)(first.right); - }); -} - -/** - * @since 2.0.0 - */ -export function getSortableEither( - OB: Sortable, - OA: Sortable, -): Sortable> { - return fromSort((fst, snd) => - isLeft(fst) - ? isLeft(snd) ? OB.sort(fst.left, snd.left) : -1 - : isLeft(snd) - ? 1 - : OA.sort(fst.right, snd.right) - ); -} - -/** - * @since 2.0.0 - */ -export function getCombinableEither( - CA: Combinable, - CB: Combinable, -): Combinable> { - return { - combine: (second) => (first) => { - if (isLeft(first)) { - if (isLeft(second)) { - return left(CB.combine(second.left)(first.left)); - } - return first; - } else if (isLeft(second)) { - return second; - } - return right(CA.combine(second.right)(first.right)); - }, - }; -} - -/** - * @since 2.0.0 - */ -export function getInitializableEither( - CA: Initializable, - CB: Initializable, -): Initializable> { - return { - init: () => right(CA.init()), - ...getCombinableEither(CA, CB), - }; -} - -/** - * @since 2.0.0 - */ -export function getFlatmappableRight( - { combine }: Combinable, -): Flatmappable> { - return ({ - wrap, - apply: (ua) => (ufai) => - isLeft(ufai) - ? (isLeft(ua) ? left(combine(ua.left)(ufai.left)) : ufai) - : (isLeft(ua) ? ua : right(ufai.right(ua.right))), - map, - flatmap, - }); -} - -/** - * @since 2.0.0 - */ -export function getFilterableEither( - I: Initializable, -): Filterable> { - type Result = Filterable>; - const init = left(I.init()); - return { - filter: ( - (refinement: Refinement) => - (ua: Either): Either => { - if (isLeft(ua)) { - return ua; - } else if (refinement(ua.right)) { - return ua as Right; - } else { - return init; - } - } - ) as Result["filter"], - filterMap: (fai) => (ua) => { - if (isLeft(ua)) { - return ua; - } else { - const oi = fai(ua.right); - return O.isNone(oi) ? init : right(oi.value); - } - }, - partition: ( - (refinement: Refinement) => - (ua: Either): Pair, Either> => { - if (isLeft(ua)) { - return [ua, ua]; - } else if (refinement(ua.right)) { - return [ua as Either, init]; - } else { - return [init, ua]; - } - } - ) as Result["partition"], - partitionMap: (fai) => (ua) => { - if (isLeft(ua)) { - return [ua, ua]; - } - const ei = fai(ua.right); - return isLeft(ei) ? [init, right(ei.left)] : [ei, init]; - }, - }; -} - -/** - * @since 2.0.0 - */ -export const ApplicableEither: Applicable = { apply, map, wrap }; - -/** - * @since 2.0.0 - */ -export const BimappableEither: Bimappable = { map, mapSecond }; - -/** - * @since 2.0.0 - */ -export const FailableEither: Failable = { - alt, - apply, - fail, - flatmap, - map, - recover, - wrap, -}; - -/** - * @since 2.0.0 - */ -export const FlatmappableEither: Flatmappable = { - apply, - flatmap, - map, - wrap, -}; - -/** - * @since 2.0.0 - */ -export const MappableEither: Mappable = { map }; - -/** - * @since 2.0.0 - */ -export const FoldableEither: Foldable = { fold }; - -/** - * @since 2.0.0 - */ -export const TraversableEither: Traversable = { - map, - fold, - traverse, -}; - -/** - * @since 2.0.0 - */ -export const WrappableEither: Wrappable = { wrap }; - -/** - * @since 2.0.0 - */ -export const tap = createTap(FlatmappableEither); - -/** - * @since 2.0.0 - */ -export const bind = createBind(FlatmappableEither); - -/** - * @since 2.0.0 - */ -export const bindTo = createBindTo(MappableEither); diff --git a/vendor/deno.land/x/fun@v2.0.0/failable.ts b/vendor/deno.land/x/fun@v2.0.0/failable.ts deleted file mode 100644 index 2c2251d..0000000 --- a/vendor/deno.land/x/fun@v2.0.0/failable.ts +++ /dev/null @@ -1,55 +0,0 @@ -/** - * Failable is a compound structure. It represents the idea of failure. As such - * it includes methods for creating a `failed` data, providing alternative - * data, and recovering from a failed state (effectively flatMapping from the - * failed value). - * - * @module Failable - * @since 2.0.0 - */ - -import type { $, Hold, Kind } from "./kind.ts"; -import type { Flatmappable } from "./flatmappable.ts"; -import type { NonEmptyArray } from "./array.ts"; - -/** - * A Failable structure is a Flatmappable that allows for alternative instances, - * failures, and recovery. - * - * @since 2.0.0 - */ -export interface Failable extends Flatmappable, Hold { - readonly alt: ( - second: $, - ) => (first: $) => $; - readonly fail: ( - value: B, - ) => $; - readonly recover: ( - fbti: (b: B) => $, - ) => ( - ua: $, - ) => $; -} - -/** - * Create a tryAll function from an instance of Failable. The tryAll function - * allows the trying any number of Failable structures in order until a - * non-failed one is found. - * - * @since 2.0.0 - */ -export function createTryAll( - { alt }: Failable, -): ( - ...uas: NonEmptyArray<$> -) => $ { - return (...uas) => { - const [head, ...tail] = uas; - let out = head; - for (const ua of tail) { - out = alt(ua)(out); - } - return out; - }; -} diff --git a/vendor/deno.land/x/fun@v2.0.0/filterable.ts b/vendor/deno.land/x/fun@v2.0.0/filterable.ts deleted file mode 100644 index f2da677..0000000 --- a/vendor/deno.land/x/fun@v2.0.0/filterable.ts +++ /dev/null @@ -1,217 +0,0 @@ -/** - * Filterable is a structure that allows one to remove or refine a data - * structure. - * - * @module Filterable - * @since 2.0.0 - */ - -import type { $, Hold, Kind } from "./kind.ts"; -import type { Either } from "./either.ts"; -import type { Mappable } from "./mappable.ts"; -import type { Option } from "./option.ts"; -import type { Pair } from "./pair.ts"; -import type { Predicate } from "./predicate.ts"; -import type { Refinement } from "./refinement.ts"; - -import { getLeft, getRight } from "./either.ts"; -import { flow, pipe } from "./fn.ts"; - -/** - * A Filterable structure allows one to filter over the values contained in the - * structure. This includes standard filter, filterMap, partition, and - * partitionMap. - * - * @since 2.0.0 - */ -export interface Filterable extends Hold { - readonly filter: { - ( - refinement: Refinement, - ): ( - ta: $, - ) => $; - ( - predicate: Predicate, - ): ( - ta: $, - ) => $; - }; - readonly filterMap: ( - fai: (a: A) => Option, - ) => ( - ua: $, - ) => $; - readonly partition: { - ( - refinement: Refinement, - ): ( - ta: $, - ) => Pair<$, $>; - ( - predicate: Predicate, - ): ( - ta: $, - ) => Pair<$, $>; - }; - readonly partitionMap: ( - fai: (a: A) => Either, - ) => ( - ua: $, - ) => Pair<$, $>; -} - -/** - * @since 2.0.0 - */ -export function filter( - { map }: Mappable, - { filter }: Filterable, -): ( - predicate: Predicate, -) => < - B = never, - C = never, - D = unknown, - E = unknown, - J = never, - K = never, - L = unknown, - M = unknown, ->( - ua: $, J, K], [L], [M]>, -) => $, J, K], [L], [M]> { - return (predicate) => (uva) => pipe(uva, map(filter(predicate))); -} - -/** - * @since 2.0.0 - */ -export function filterMap( - { map }: Mappable, - { filterMap }: Filterable, -): ( - predicate: (a: A) => Option, -) => < - B = never, - C = never, - D = unknown, - E = unknown, - J = never, - K = never, - L = unknown, - M = unknown, ->( - ua: $, J, K], [L], [M]>, -) => $, J, K], [L], [M]> { - return (predicate) => (uva) => pipe(uva, map(filterMap(predicate))); -} - -/** - * @since 2.0.0 - */ -export function partition( - M: Mappable, - F: Filterable, -): ( - predicate: Refinement, -) => < - B = never, - C = never, - D = unknown, - E = unknown, - J = never, - K = never, - L = unknown, - M = unknown, ->( - ua: $, J, K], [L], [M]>, -) => Pair< - $, J, K], [L], [M]>, - $, J, K], [L], [M]> ->; -export function partition( - M: Mappable, - F: Filterable, -): ( - predicate: Predicate, -) => < - B = never, - C = never, - D = unknown, - E = unknown, - J = never, - K = never, - L = unknown, - M = unknown, ->( - ua: $, J, K], [L], [M]>, -) => Pair< - $, J, K], [L], [M]>, - $, J, K], [L], [M]> ->; -export function partition( - M: Mappable, - F: Filterable, -): ( - predicate: Predicate, -) => < - B = never, - C = never, - D = unknown, - E = unknown, - J = never, - K = never, - L = unknown, - M = unknown, ->( - ua: $, J, K], [L], [M]>, -) => Pair< - $, J, K], [L], [M]>, - $, J, K], [L], [M]> -> { - const _filter = filter(M, F); - // TODO: Figure this overload out :/ - return (predicate) => { - // deno-lint-ignore no-explicit-any - const first = _filter(predicate as any); - // deno-lint-ignore no-explicit-any - const second = _filter(((a: any) => !predicate(a)) as any); - // deno-lint-ignore no-explicit-any - return (uva) => [first(uva), second(uva)] as any; - }; -} - -/** - * @since 2.0.0 - */ -export function partitionMap( - M: Mappable, - F: Filterable, -): ( - fai: (a: A) => Either, -) => < - B = never, - C = never, - D = unknown, - E = unknown, - J = never, - K = never, - L = unknown, - M = unknown, ->( - ua: $, J, K], [L], [M]>, -) => Pair< - $, J, K], [L], [M]>, - $, J, K], [L], [M]> -> { - const _filterMap = filterMap(M, F); - return (predicate) => { - const first = flow(predicate, getRight); - const second = flow(predicate, getLeft); - return (uva) => [ - pipe(uva, _filterMap(first)), - pipe(uva, _filterMap(second)), - ]; - }; -} diff --git a/vendor/deno.land/x/fun@v2.0.0/flatmappable.ts b/vendor/deno.land/x/fun@v2.0.0/flatmappable.ts deleted file mode 100644 index 616ead4..0000000 --- a/vendor/deno.land/x/fun@v2.0.0/flatmappable.ts +++ /dev/null @@ -1,126 +0,0 @@ -/** - * Flatmappable is a structure that allows a function that returns the concrete - * structure to be applied to the value inside of the same type of concrete - * structure. The resultant nested structure is then flattened. - * - * @module Flatmappable - * @since 2.0.0 - */ - -import type { $, Hold, Kind } from "./kind.ts"; -import type { Applicable } from "./applicable.ts"; - -/** - * A Flatmappable structure. - */ -export interface Flatmappable extends Applicable, Hold { - readonly flatmap: ( - fati: (a: A) => $, - ) => ( - ta: $, - ) => $; -} - -/** - * Create a tap function for a structure with instances of Wrappable and - * Flatmappable. A tap function allows one to break out of the functional - * codeflow. It is generally not advised to use tap for code flow but to - * consider an escape hatch to do things like tracing or logging. - * - * @since 2.0.0 - */ -export function createTap( - { wrap, flatmap }: Flatmappable, -): ( - fn: (value: A) => void, -) => ( - ua: $, -) => $ { - return (fn) => - flatmap((a) => { - fn(a); - return wrap(a); - }); -} - -/** - * Create a bind function for a structure with instances of Mappable and - * Flatmappable. A bind function allows one to flatmap into named fields in a - * struct, collecting values from the result of the flatmap in the order that - * they are completed. - * - * @since 2.0.0 - */ -export function createBind({ flatmap, map }: Flatmappable): < - N extends string, - A, - I, - J = never, - K = never, - L = unknown, - M = unknown, ->( - name: Exclude, - faui: (a: A) => $, -) => ( - ua: $, -) => $< - U, - [{ readonly [K in keyof A | N]: K extends keyof A ? A[K] : I }, B | J, C | K], - [D & L], - [M] -> { - return (name, faui) => - flatmap((a) => - // deno-lint-ignore no-explicit-any - map((i) => Object.assign({}, a, { [name]: i }) as any)(faui(a)) - ); -} - -/** - * Derive a Flatmappable instance from unwrap, flatmap, and a Kind. - * This is the simplest way to get a Flatmappable instance. - * - * @example - * ```ts - * import type { Kind, Out } from "./kind.ts"; - * import { createFlatmappable } from "./flatmappable.ts"; - * import { pipe } from "./fn.ts"; - * - * // Create a Kind for Promise - * interface KindPromise extends Kind { - * readonly kind: Promise>; - * }; - * - * // Create an of and chain function for Promise - * const wrap = (a: A): Promise => Promise.resolve(a); - * const flatmap = (faui: (a: A) => Promise) => - * (ua: Promise): Promise => ua.then(faui); - * - * // Derive a Flatmappable for Promise - * const M = createFlatmappable({ wrap, flatmap }); - * - * const result = await pipe( - * M.wrap((n: number) => (m: number) => n + m), - * M.apply(M.wrap(1)), - * M.apply(M.wrap(1)), - * ); // 2 - * ``` - * - * @experimental - * - * @since 2.0.0 - */ -export function createFlatmappable( - { wrap, flatmap }: Pick, "wrap" | "flatmap">, -): Flatmappable { - const result: Flatmappable = { - wrap, - apply: ((ua) => flatmap((fai) => result.map(fai)(ua))) as Flatmappable< - U - >["apply"], - map: ((fai) => flatmap((a) => wrap(fai(a)))) as Flatmappable["map"], - flatmap, - }; - return result; -} diff --git a/vendor/deno.land/x/fun@v2.0.0/fn.ts b/vendor/deno.land/x/fun@v2.0.0/fn.ts deleted file mode 100644 index fd2d97e..0000000 --- a/vendor/deno.land/x/fun@v2.0.0/fn.ts +++ /dev/null @@ -1,916 +0,0 @@ -/** - * This file contains the Fn algebraic data type. Fn is short for a unary - * function, which is to say a function that only takes one input variable. - * Most computation can be encoded in Fn, but the standard ADT in most - * functional languages is called Reader. - * - * @module Fn - * @since 2.0.0 - */ -import type { In, Kind, Out } from "./kind.ts"; -import type { Applicable } from "./applicable.ts"; -import type { Composable } from "./composable.ts"; -import type { Flatmappable } from "./flatmappable.ts"; -import type { Mappable } from "./mappable.ts"; -import type { Premappable } from "./premappable.ts"; -import type { Wrappable } from "./wrappable.ts"; - -import { createBind, createTap } from "./flatmappable.ts"; -import { createBindTo } from "./mappable.ts"; - -/** - * A Fn, also known as Reader or Environment, is a type over a unary - * javascript function. ie. (a: number) => string can be - * a Fn. As an algebraic data type, the associated type class instances - * for Fn are limited to single variable inputs so they will look like - * (a: number) => string, with only one argument. The purposes of a Fn - * are many and varied, some common purposes are: computation, reading - * values from a shared environment, and sub-computations in a modified - * environment. In many ways Fn is a more powerful abstraction than - * State, and indeed the State monad in fun is exactly State = - * Fn<[S], [A, S]>. - * - * Currently, there is no implementation of Chain recursion or - * trampolining for Fn implemented, but it is likely to be a future - * feature. Once implemented Fn will gain some much needed stack safety. - * - * @since 2.0.0 - */ -export type Fn = (d: D) => A; - -/** - * A Fn type over any, useful for constraining generics that - * take or return Fns. - * - * @since 2.0.0 - */ -// deno-lint-ignore no-explicit-any -export type AnyFn = Fn; - -/** - * Specifies Fn as a Higher Kinded Type, with - * covariant parameter A corresponding to the 0th - * index of any Substitutions and a contravariant - * parameter D corresponding to the 0th index of - * any Substititions. The Fn KindFn is unique in that - * it constrains the Fn type to taking a single - * argument for the purposes of type substitution - * while the implementations of Fn combinators such - * as map, flatmap, etc are mostly variadic (multiple - * arguments). - * - * @since 2.0.0 - */ -export interface KindFn extends Kind { - readonly kind: Fn, Out>; -} - -/** - * Take a variadic Fn and make it unary, collapsing multiple arguments - * into a single tuple argument. - * - * @example - * ```ts - * import * as F from "./fn.ts"; - * - * const person = (age: number, name: string) => ({ age, name }); - * const personUnary = F.unary(person); - * - * // ({ name: "Brandon", age: 37 }) - * const result1 = personUnary([37, "Brandon"]); - * ``` - * @since 2.0.0 - */ -export function unary(fda: (...d: D) => A): Fn { - return (d) => fda(...d); -} - -/** - * @since 2.0.0 - */ -export function curry2(fn: (a: A, b: B) => C): (a: A) => (b: B) => C { - return (a) => (b) => fn(a, b); -} - -/** - * @since 2.0.0 - */ -export function uncurry2( - fn: (b: B) => (a: A) => C, -): (a: A, b: B) => C { - return (a, b) => fn(b)(a); -} - -/** - * A common pattern in optics is to apply an input value to a function at the - * beginning and the end of a computation. This can (and has) been achieved by - * the composition of Pair using flow(P.dup, P.map(fn), P.merge). But for - * performance reasons it's nice to have a straighforward function that achieves - * the same result. - * - * @since 2.0.0 - */ -export function over(faai: (a: A) => (a: A) => I): (a: A) => I { - return (a) => faai(a)(a); -} - -/** - * Wrap a thunk (a Fn that takes no arguments) in a try catch block, using - * an onThrow function (that should itself never throw) to handle a default - * case should the original function throw. This is useful for wrapping - * functions that might throw. - * - * @example - * ```ts - * import * as F from "./fn.ts"; - * - * const getZero = (): number => { - * if (Math.random() > 0.5) { - * throw new Error("Too high!"); - * } - * return 0; - * } - * - * const result = F.tryThunk(getZero, () => 0); // 0 - * ``` - * - * @since 2.0.0 - */ -export function tryThunk(ua: Fn, onThrow: Fn): A { - try { - return ua(); - } catch (err) { - return onThrow(err); - } -} - -/** - * Wrap any function in a try catch block, passing the result and - * arguments to onResult when the function does not throw as well - * as passing the error and arguments to the onThrow function when - * it does. Neither the onResult nor the onThrow functions should - * ever throw an error themselves. None of the functions in the fun - * library will throw on their own. If they do it is a bug in fun - * or the underlying runtime (or you used fun in javascript). This - * function primarily exists to wrap functions exported from other - * libraries that may use exceptions as their error mechanism. This - * makes those functions safe to use with fun. - * - * @example - * ```ts - * import * as F from "./fn.ts"; - * - * const throwOverFive = (n: number): number => { - * if (n > 5) { - * throw new Error("Larger than five"); - * } - * return n; - * } - * const caught = F.handleThrow( - * throwOverFive, - * result => result, - * err => 0, // Default to 0 - * ); - * - * const result1 = caught(0); // 0 - * const result2 = caught(5); // 5 - * const result3 = caught(6); // 0 - * ``` - * - * @since 2.0.0 - */ -export function handleThrow( - ua: (...d: D) => A, - onResult: (result: A, args: D) => I, - onThrow: (error: unknown, args: D) => I, -): (...d: D) => I { - return (...d) => { - try { - return onResult(ua(...d), d); - } catch (err) { - return onThrow(err, d); - } - }; -} - -/** - * @since 2.0.0 - */ -export function tryCatch( - fda: (...d: D) => A, - onThrow: (e: unknown, d: D) => A, -): (...d: D) => A { - return handleThrow(fda, identity, onThrow); -} - -/** - * Memoize a unary function using a Map. This - * means that this algorithm puposefully leaks memory. - * - * TODO: Extend memoize to be variadic. - * - * @example - * ```ts - * import * as F from "./fn.ts"; - * - * // Big old expensive recursive algorithm - * const fib = (n: number): number => - * n < 1 ? 0 : - * n <= 1 ? 1 : - * fib(n - 2) + fib(n - 1); - * - * const mfib = F.memoize(fib); - * - * const result1 = mfib(10); // 55 - * const result2 = mfib(10); // 55 but does not recompute - * ``` - * - * @since 2.0.0 - */ -export function memoize(ua: Fn): Fn { - const cache = new Map(); - return (d) => { - if (cache.has(d)) { - return cache.get(d) as A; - } - const a = ua(d); - cache.set(d, a); - return a; - }; -} - -/** - * A function that can be called to output any type. It's used for type - * hole based programming. This allows one to define interfaces and types - * for a function and stub them with todo() until you are ready to implement - * the actual behavior. The todo function will throw if it is ever actually - * called. - * - * @example - * ```ts - * import { todo } from "./fn.ts"; - * - * type InOut = { - * read: () => Promise, - * write: (s: string) => Promise, - * } - * - * const mockInOut: InOut = todo(); // InOut !!THROWS!! - * ``` - * - * @since 2.0.0 - */ -export function todo(): T { - throw new Error("TODO: this function has not been implemented"); -} - -/** - * Does an unsafe type coercion on any type. This is only safe when - * the types A and I have referential transparency. This is to say - * when the type A can be substituted for I and I for A at runtime - * without there being any change to the operation of the program. - * The primary use case for unsafeCoerce is in Newtype implementations. - * - * @since 2.0.0 - */ -export function unsafeCoerce(a: A): I { - return a as unknown as I; -} - -/** - * The flow function is like the pipe function without the initial value. It - * composes up to 9 functions from left to right (top to bottom). The first - * function can take multiple arguments but every subsequent function must - * be unary (only take one argument). - * - * @example - * ```ts - * import { flow } from "./fn.ts"; - * - * const add = (m: number) => (n: number) => m + n; - * const multiply = (m: number) => (n: number) => m * n; - * - * const flowed = flow( - * add(1), - * multiply(2), - * add(1), - * multiply(2), - * ); - * - * const result1 = flowed(1); // 10 - * const result2 = flowed(2); // 14 - * const result3 = flowed(3); // 18 - * ``` - * - * @since 2.0.0 - */ -export function flow( - ab: (...a: A) => B, -): (...a: A) => B; -export function flow( - ab: (...a: A) => B, - bc: (b: B) => C, -): (...a: A) => C; -export function flow( - ab: (...a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, -): (...a: A) => D; -export function flow( - ab: (...a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, -): (...a: A) => E; -export function flow( - ab: (...a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, -): (...a: A) => F; -export function flow( - ab: (...a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, -): (...a: A) => G; -export function flow( - ab: (...a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, - gh: (g: G) => H, -): (...a: A) => H; -export function flow( - ab: (...a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, - gh: (g: G) => H, - hi: (h: H) => I, -): (...a: A) => I; -export function flow< - A extends unknown[], - B, - C, - D, - E, - F, - G, - H, - I, - J, ->( - ab: (...a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, - gh: (g: G) => H, - hi: (h: H) => I, - ij: (i: I) => J, -): (...a: A) => J; -export function flow< - A extends unknown[], - B, - C, - D, - E, - F, - G, - H, - I, - J, - K, ->( - ab: (...a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, - gh: (g: G) => H, - hi: (h: H) => I, - ij: (i: I) => J, - jk: (j: J) => K, -): (...a: A) => K; -export function flow< - A extends unknown[], - B, - C, - D, - E, - F, - G, - H, - I, - J, - K, - L, ->( - ab: (...a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, - gh: (g: G) => H, - hi: (h: H) => I, - ij: (i: I) => J, - jk: (j: J) => K, - kl: (k: K) => L, -): (...a: A) => L; -export function flow( - ...[ab, bc, cd, de, ef, fg, gh, hi, ij, jk, kl, ...rest]: AnyFn[] -): AnyFn { - switch (arguments.length) { - case 1: - return (...as) => ab(...as); - case 2: - return (...as) => bc(ab(...as)); - case 3: - return (...as) => cd(bc(ab(...as))); - case 4: - return (...as) => de(cd(bc(ab(...as)))); - case 5: - return (...as) => ef(de(cd(bc(ab(...as))))); - case 6: - return (...as) => fg(ef(de(cd(bc(ab(...as)))))); - case 7: - return (...as) => gh(fg(ef(de(cd(bc(ab(...as))))))); - case 8: - return (...as) => hi(gh(fg(ef(de(cd(bc(ab(...as)))))))); - case 9: - return (...as) => ij(hi(gh(fg(ef(de(cd(bc(ab(...as))))))))); - case 10: - return (...as) => jk(ij(hi(gh(fg(ef(de(cd(bc(ab(...as)))))))))); - case 11: - return (...as) => kl(jk(ij(hi(gh(fg(ef(de(cd(bc(ab(...as))))))))))); - default: - return (...as) => - rest.reduce( - (val, fn) => fn(val), - kl(jk(ij(hi(gh(fg(ef(de(cd(bc(ab(...as))))))))))), - ); - } -} - -/** - * The pipe takes a value as the first argument and composes it with subsequent - * function arguments, returning the result of the last function passed in. It - * handles and correctly types up to 10 unary functions. Beyond 10 it makes - * sense to break up pipe into multiple pipes. - * - * @example - * ```ts - * import { pipe } from "./fn.ts"; - * - * const add = (n: number) => (m: number) => m + n; - * const multiply = (n: number) => (m: number) => m * n; - * - * const result = pipe( - * 1, - * add(1), // 2 - * multiply(2), // 4 - * add(1), // 5 - * multiply(2), // 10 - * ); // 10 - * ``` - * - * @since 2.0.0 - */ -export function pipe(a: A): A; -export function pipe(a: A, ab: (a: A) => B): B; -export function pipe(a: A, ab: (a: A) => B, bc: (b: B) => C): C; -export function pipe( - a: A, - ab: (a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, -): D; -export function pipe( - a: A, - ab: (a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, -): E; -export function pipe( - a: A, - ab: (a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, -): F; -export function pipe( - a: A, - ab: (a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, -): G; -export function pipe( - a: A, - ab: (a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, - gh: (g: G) => H, -): H; -export function pipe( - a: A, - ab: (a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, - gh: (g: G) => H, - hi: (h: H) => I, -): I; -export function pipe( - a: A, - ab: (a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, - gh: (g: G) => H, - hi: (h: H) => I, - ij: (i: I) => J, -): J; -export function pipe( - a: A, - ab: (a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, - gh: (g: G) => H, - hi: (h: H) => I, - ij: (i: I) => J, - jk: (j: J) => K, -): K; -export function pipe( - a: A, - ab: (a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, - gh: (g: G) => H, - hi: (h: H) => I, - ij: (i: I) => J, - jk: (j: J) => K, - kl: (K: K) => L, -): L; -export function pipe( - a: A, - ab: (a: A) => B, - bc: (b: B) => C, - cd: (c: C) => D, - de: (d: D) => E, - ef: (e: E) => F, - fg: (f: F) => G, - gh: (g: G) => H, - hi: (h: H) => I, - ij: (i: I) => J, - jk: (j: J) => K, - kl: (K: K) => L, - end: never, -): L; -export function pipe( - value: unknown, - ...fns: AnyFn[] -): unknown { - return fns.reduce((val, fn) => fn(val), value); -} - -/** - * Create a Fn that always returns a value. This is equivalent to - * constant. - * - * @example - * ```ts - * import { wrap } from "./fn.ts"; - * - * const alwaysA = wrap("A"); - * - * const result = alwaysA(null); // "A" - * ``` - * - * @since 2.0.0 - */ -export function wrap(a: A): Fn { - return () => a; -} - -/** - * Create a Fn that always returns a value. This is equivalent to - * of but without the ability to specify a contravariant argument. - * - * @example - * ```ts - * import { constant } from "./fn.ts"; - * - * const alwaysA = constant("A"); - * - * const result = alwaysA(); // "A" - * ``` - * - * @since 2.0.0 - */ -export function constant(a: A): () => A { - return () => a; -} - -/** - * Given L => A => I and D => A create a new Fn - * D & L => I. In order to preserve type widening for - * ap, it only handles unary functions. - * - * @example - * ```ts - * import * as F from "./fn.ts"; - * - * type Person = { name: string, age: number }; - * - * const person = (name: string) => (age: number): Person => ({ name, age }); - * - * const result = F.pipe( - * F.wrap(person), - * F.apply(F.wrap("Brandon")), - * F.apply(F.wrap(37)), - * ); // Fn<[], Person> - * ``` - * - * @since 2.0.0 - */ -export function apply( - ua: Fn, -): (ufai: Fn I>) => Fn { - return (ufai) => (d) => ufai(d)(ua(d)); -} - -/** - * Map over the output of a Fn. This is equivalent to - * function composition. - * ie. a => pipe(f, map(g))(a) === a => g(f(a)) - * - * @example - * ```ts - * import { map, wrap, pipe } from "./fn.ts"; - * - * const result = pipe(wrap(1), map(n => n + 1)); // 2 - * ``` - * - * @since 2.0.0 - */ -export function map( - fai: (a: A) => I, -): (ta: Fn) => Fn { - return (ta) => flow(ta, fai); -} - -/** - * Create a new Fn by combining A => L => I with - * D => A to produce D & L => I. This is equivalent - * to ap with the first two arguments switched. It is - * also limited to unary functions in order to properly - * handle type widening on the input type. - * - * @example - * ```ts - * import { pipe, flatmap } from "./fn.ts"; - * const add = (n: number) => (m: number) => n + m; - * - * const flatmaper = pipe( - * (n: number) => n, - * flatmap(add), - * flatmap(add), - * flatmap(add), - * flatmap(add), - * flatmap(add), - * ); - * - * const result1 = flatmaper(1); // 6 - * const result2 = flatmaper(2); // 12 - * const result3 = flatmaper(3); // 18 - * ``` - * - * @since 2.0.0 - */ -export function flatmap( - fati: (a: A) => Fn, -): (ta: Fn) => Fn { - return (ta) => (d) => fati(ta(d))(d); -} - -/** - * Map over the input of a function, turning - * D => A and L => D into L => A. - * - * @example - * ```ts - * import { premap, pipe } from "./fn.ts"; - * - * const equalsZero = (n: number): boolean => n === 0; - * const strLength = (s: string): number => s.length; - * - * const isEmpty = pipe( - * equalsZero, - * premap(strLength), - * ); - * - * const result1 = isEmpty(""); // true - * const result2 = isEmpty("Hello"); // false - * ``` - * - * @since 2.0.0 - */ -export function premap( - fld: (l: L) => D, -): (ta: Fn) => Fn { - return (ta) => (d) => ta(fld(d)); -} - -/** - * A combination of premap and map, dimap applies fld - * to the input of a function and fai to the output. - * - * @example - * ```ts - * import type { NonEmptyArray } from "./array.ts"; - * import { dimap, pipe } from "./fn.ts"; - * import { plural, split } from "./string.ts"; - * - * const are = plural("is", "are"); - * const words = plural("word", "words"); - * const describe = (n: number) => `There ${are(n)} ${n} ${words(n)}`; - * - * const toWords = split(/\s+/g); // string => string[] - * const count = (ws: NonEmptyArray) => ws.length; - * - * const fromString = pipe( - * count, - * dimap(toWords, describe), - * ); - * - * const result1 = fromString("Hello World"); // "There are 2 words" - * const result2 = fromString("Hi"); // "There is 1 word" - * const result3 = fromString("This is a test"); // "There are 4 words" - * ``` - * - * @since 2.0.0 - */ -export function dimap( - fld: (l: L) => D, - fai: (a: A) => I, -): (ta: Fn) => Fn { - return (ta) => flow(fld, ta, fai); -} - -/** - * The canonical identity function. It returns whatever value was - * passed to it. - * - * @example - * ```ts - * import { identity } from "./fn.ts"; - * - * const result1 = identity(1); // 1 - * const result2 = identity("Hello"); // "Hello" - * ``` - * @since 2.0.0 - */ -export function identity(a: A): A { - return a; -} - -/** - * A thunk over the identity function. It allows one - * to constrain an identity to a specific type. - * - * @example - * ```ts - * import { id } from "./fn.ts"; - * - * const idString = id(); // (s: string) => string - * const idNumber = id(); // (n: number) => number - * - * const result1 = idString("Hello"); // "Hello" - * const result2 = idNumber(1); // 1 - * ``` - * - * @since 2.0.0 - */ -export function id(): Fn { - return identity; -} - -/** - * Compose two functions by taking the output of - * one and passing it to another. This is equivalent - * to the map function. - * - * @example - * ```ts - * import { compose, pipe } from "./fn.ts"; - * - * const length = (s: string) => s.length; - * const dup = (n: number) => n + n; - * - * const composed = pipe( - * length, - * compose(dup), - * ); - * - * const result1 = composed("Hello"); // 10 - * const result2 = composed(""); // 0 - * ``` - * - * @since 2.0.0 - */ -export function compose( - second: Fn, -): (first: Fn) => Fn { - return (first) => flow(first, second); -} - -/** - * The canonical implementation of Applicable for Fn. It contains - * the methods of, ap, and map. - * - * @since 2.0.0 - */ -export const ApplicableFn: Applicable = { apply, map, wrap }; - -/** - * @since 2.0.0 - */ -export const ComposableFn: Composable = { compose, id }; - -/** - * The canonical implementation of Flatmappable for Fn. It contains - * the methods of, ap, map, join, and flatmap. - * - * @since 2.0.0 - */ -export const FlatmappableFn: Flatmappable = { - apply, - flatmap, - map, - wrap, -}; - -/** - * The canonical implementation of Mappable for Fn. It contains - * the method map. - * - * @since 2.0.0 - */ -export const MappableFn: Mappable = { map }; - -/** - * The canonical implementation of Premappable for Fn. It contains - * the method premap. - * - * @since 2.0.0 - */ -export const PremappableFn: Premappable = { premap, map, dimap }; - -/** - * @since 2.0.0 - */ -export const WrappableFn: Wrappable = { wrap }; - -/** - * @since 2.0.0 - */ -export const tap = createTap(FlatmappableFn); - -/** - * @since 2.0.0 - */ -export const bind = createBind(FlatmappableFn); - -/** - * @since 2.0.0 - */ -export const bindTo = createBindTo(MappableFn); diff --git a/vendor/deno.land/x/fun@v2.0.0/fn_either.ts b/vendor/deno.land/x/fun@v2.0.0/fn_either.ts deleted file mode 100644 index 64511b2..0000000 --- a/vendor/deno.land/x/fun@v2.0.0/fn_either.ts +++ /dev/null @@ -1,752 +0,0 @@ -/** - * FnEither is also known as ReaderEither. In essence a FnEither is - * a function that returns an either. This pattern can be used as - * a validation, a failable computation, a computation resulting - * in a "Choice", and many other things. - * - * @module FnEither - */ - -import type { In, Kind, Out } from "./kind.ts"; -import type { Applicable } from "./applicable.ts"; -import type { Bimappable } from "./bimappable.ts"; -import type { Combinable } from "./combinable.ts"; -import type { Composable } from "./composable.ts"; -import type { Either } from "./either.ts"; -import type { Failable } from "./failable.ts"; -import type { Flatmappable } from "./flatmappable.ts"; -import type { Fn } from "./fn.ts"; -import type { Mappable } from "./mappable.ts"; -import type { Predicate } from "./predicate.ts"; -import type { Premappable } from "./premappable.ts"; -import type { Refinement } from "./refinement.ts"; -import type { Wrappable } from "./wrappable.ts"; - -import * as E from "./either.ts"; -import * as F from "./fn.ts"; -import { createBind, createTap } from "./flatmappable.ts"; -import { createBindTo } from "./mappable.ts"; - -/** - * A FnEither, also known as ReaderEither, is a type over a variadic - * javascript function that returns an Either. - * ie. (a: number, b: string) => Either can be - * a FnEither. As an algebraic data type, the associated type class - * instances for Fn are limited to single variable inputs so they will - * look like (a: number) => Either, with only one - * argument. The purposes of a FnEither are many and varied, some - * common purposes are: failable computation, reading values from a - * shared environment, and sub-computations in a modified - * environment. - * - * Currently, there is no implementation of Chain recursion or - * trampolining for FnEIther implemented, but it is likely to be a future - * feature. Once implemented Fn will gain some much needed stack safety. - * - * @since 2.0.0 - */ -export type FnEither = Fn>; - -/** - * A FnEither type over any, useful for constraining generics that - * take or return FnEithers. - * - * @since 2.0.0 - */ -// deno-lint-ignore no-explicit-any -export type AnyFnEither = FnEither; - -/** - * Specifies FnEither as a Higher Kinded Type, with - * covariant parameter A and B corresponding to the 0th - * and 1st indices of any Substitutions and a contravariant - * parameter D corresponding to the 0th index of - * any Substititions. The FnEither KindFnEither is unique in that - * it constrains the FnEither type to taking a single - * argument for the purposes of type substitution - * while the implementations of FnEither combinators such - * as map, flatmap, etc are mostly variadic (multiple - * arguments). - * - * @since 2.0.0 - */ -export interface KindFnEither extends Kind { - readonly kind: FnEither, Out, Out>; -} - -/** - * Specifies FnEither as a Higher Kinded Type, with - * covariant parameter A corresponding to the 0th - * index of any Substitutions and a contravariant - * parameter D corresponding to the 0th index of - * any Substititions. KindRightFnEither curries the Left parameter - * of the output Either. This is useful when one - * needs to Fix the Left output with a Combinable or - * some other collection algebraic structure. - * - * @since 2.0.0 - */ -export interface KindRightFnEither extends Kind { - readonly kind: FnEither, B, Out>; -} - -/** - * Wrap any function in a try catch block. The returned - * function will lazily call and handle any throwing of - * the wrapped function. Non-throwing calls will be - * returned in a Right, and throwing calls will have - * their error and arguments passed to the onThrow function - * before being returned in a Left. - * - * @example - * ```ts - * import { tryCatch } from "./fn_either.ts"; - * import { todo } from "./fn.ts"; - * - * const throws = tryCatch(todo, () => "Failed!"); - * const returns = tryCatch((n: number) => n, () => "Failed!"); - * - * const result1 = throws()(0); // Left("Failed!"); - * const result2 = returns(1)(0); // Right(1); - * ``` - * - * @since 2.0.0 - */ -export function tryCatch( - ua: (...d: D) => A, - onThrow: (e: unknown, d: D) => B, -): (...d: D) => FnEither { - return F.handleThrow( - ua, - right, - (e, d) => left(onThrow(e, d)), - ); -} - -/** - * Create a FnEither that always returns a Left(B). - * - * @example - * ```ts - * import { left } from "./fn_either.ts"; - * - * const leftNumber = left(1); - * - * const result = leftNumber(0); // Left(1); - * ``` - * - * @since 2.0.0 - */ -export function left( - left: B, -): FnEither { - return F.wrap(E.left(left)); -} - -/** - * Create a FnEither that always returns a Right(A). - * - * @example - * ```ts - * import { right } from "./fn_either.ts"; - * - * const rightNumber = right(1); - * - * const result = rightNumber(null); // Right(1); - * ``` - * - * @since 2.0.0 - */ -export function right( - right: A, -): FnEither { - return F.wrap(E.right(right)); -} - -/** - * Turn an Either into a FnEither. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import * as E from "./either.ts"; - * - * const left = E.left(1); - * const right = E.right(1); - * - * const fnLeft = FE.fromEither(left); - * const fnRight = FE.fromEither(right); - * - * const result1 = fnLeft(null); // Left(1); - * const result2 = fnRight(null); // Right(1); - * ``` - * - * @since 2.0.0 - */ -export function fromEither( - ua: Either, -): FnEither { - return F.wrap(ua); -} - -/** - * Lift a Fn into FnEither<[D], never, A> - * - * @example - * ```ts - * import { fromFn } from "./fn_either.ts"; - * - * const double = (first: number) => first + first; - * const lifted = fromFn(double); - * - * const result = lifted(1); // Right(2) - * ``` - * - * @since 2.0.0 - */ -export function fromFn( - fda: Fn, -): FnEither { - return F.flow(fda, E.right); -} - -/** - * Create a FnEither from a Predicate or a Refinement. - * If the Predicate or Refinement returns true then the - * FnEither returns Right, otherwise it returns Left. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import { pipe } from "./fn.ts"; - * - * const isPositive = (n: number) => n > 0; - * const computation = FE.fromPredicate(isPositive); - * - * const result1 = computation(0); // Left(0) - * const result2 = computation(1); // Right(1) - * ``` - * - * @since 2.0.0 - */ -export function fromPredicate( - refinement: Refinement, -): FnEither; -export function fromPredicate( - predicate: Predicate, -): FnEither; -export function fromPredicate( - predicate: Predicate, -): FnEither { - return (a) => predicate(a) ? E.right(a) : E.left(a); -} - -/** - * An alias for right. Creates a FnEither from a value. The created - * FnEither does not require any arguments, but can widen when used - * in a flatmap. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import { pipe } from "./fn.ts"; - * - * const computation = pipe( - * FE.id(), // Ask for a number - * FE.map(n => n + 1), // Add one - * FE.flatmap(_ => FE.wrap("Hello")), // Forget about the number - * ); - * - * const result = computation(1); // Right("Hello") - * ``` - * - * @since 2.0.0 - */ -export function wrap( - a: A, -): FnEither { - return right(a); -} - -/** - * @since 2.0.0 - */ -export function fail( - b: B, -): FnEither { - return left(b); -} - -/** - * Given a FnEither returning a function A => I and a FnEither returning - * a value A, combine them into a FnEither returning an I. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import { pipe } from "./fn.ts"; - * - * type Person = { name: string; age: number }; - * - * const person = (name: string) => (age: number): Person => ({ name, age }); - * - * const result = pipe( - * FE.wrap(person), - * FE.apply(FE.wrap("Brandon")), - * FE.apply(FE.wrap(37)), - * ); // FnEither<[], never, Person> - * ``` - * - * @since 2.0.0 - */ -export function apply( - ua: FnEither, -): (ufai: FnEither I>) => FnEither { - return (ufai) => (d) => F.pipe(ufai(d), E.apply(ua(d))); -} - -/** - * Provide an alternative FnEither in the event that an original - * FnEither returns Left. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * FE.left("Oh no I broke!"), - * FE.alt(FE.right("But I work")), - * )(null); // Right("But I work") - * ``` - * - * @since 2.0.0 - */ -export function alt( - ub: FnEither, -): (ua: FnEither) => FnEither { - return (ua) => (d) => { - const e = ua(d); - return E.isLeft(e) ? ub(d) : e; - }; -} - -/** - * Map over the left and right return values of a FnEither. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import * as E from "./either.ts"; - * import { pipe } from "./fn.ts"; - * - * const boundedValue = (n: number) => n > 10 || n < 0 ? E.left(n) : E.right(n); - * - * const log = pipe( - * boundedValue, - * FE.bimap(n => `Out of bounds: ${n}`, n => `Received a good value: ${n}`), - * ); - * - * const result1 = log(1); // Right("Received a good value: 1") - * const result2 = log(20); // Left("Out of bounds: 20") - * ``` - * - * @since 2.0.0 - */ -export function bimap( - fbj: (b: B) => J, - fai: (a: A) => I, -): ( - ua: FnEither, -) => FnEither { - return F.map(E.bimap(fbj, fai)); -} - -/** - * Map over the right return value of a FnEither. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * FE.id(), - * FE.map(n => n + 1), - * )(0); // Right(1) - * ``` - * - * @since 2.0.0 - */ -export function map( - fai: (a: A) => I, -): ( - ua: FnEither, -) => FnEither { - return F.map(E.map(fai)); -} - -/** - * Map over the left return value of a FnEither. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import { pipe } from "./fn.ts"; - * - * const result1 = pipe( - * FE.id(), - * FE.mapSecond((n: number) => n + 1), - * )(0); // Right(0) - * - * const result2 = pipe( - * FE.idLeft(), - * FE.mapSecond(n => n + 1), - * )(0); // Left(1) - * ``` - * - * @since 2.0.0 - */ -export function mapSecond( - fbj: (b: B) => J, -): ( - ua: FnEither, -) => FnEither { - return F.map(E.mapSecond(fbj)); -} - -/** - * Flatten nested FnEithers with the same input and - * left types. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * FE.right(FE.right(1)), - * FE.join, - * )(null); // Right(1) - * ``` - * - * @since 2.0.0 - */ -export function join( - tua: FnEither>, -): FnEither { - return (d) => F.pipe(tua(d), E.flatmap((fn) => fn(d))); -} - -/** - * Chain the right result of one FnEither into another - * FnEither. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * FE.id(), - * FE.flatmap(s => FE.right(s.length)), - * )("Hello"); // Right(5) - * ``` - * - * @since 2.0.0 - */ -export function flatmap( - fati: (a: A) => FnEither, -): ( - ua: FnEither, -) => FnEither { - return (ua) => (d) => { - const e = ua(d); - return E.isLeft(e) ? e : fati(e.right)(d); - }; -} - -/** - * Chain the left result of one FnEither into another - * FnEither. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * FE.id(), - * FE.flatmap(s => FE.left(s.length)), - * FE.recover(n => FE.right(String(n))), - * )("Hello"); // Right("5") - * ``` - * - * @since 2.0.0 - */ -export function recover( - fbtj: (b: B) => FnEither, -): ( - ua: FnEither, -) => FnEither { - return (ua) => (d) => { - const e = ua(d); - return E.isRight(e) ? e : fbtj(e.left)(d); - }; -} - -/** - * Map over the input value of a FnEither. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import { pipe } from "./fn.ts"; - * - * // This has type FnEither<[Date], never, number> - * const computation = pipe( - * FE.id(), - * FE.premap((d: Date) => d.valueOf()), - * ); - * - * const result = computation(new Date(0)); // Right(0) - * ``` - * - * @since 2.0.0 - */ -export function premap( - fld: (l: L) => D, -): (ua: FnEither) => FnEither { - return (ua) => F.flow(fld, ua); -} - -/** - * Map over the input of a FnEither contravariantly and the - * right result of a FnEither covariantly. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import { pipe } from "./fn.ts"; - * - * // This has type FnEither<[Date], never, string> - * const computation = pipe( - * FE.id(), - * FE.dimap( - * (d: Date) => d.valueOf(), - * String, - * ), - * ); - * - * const result = computation(new Date(0)); // Right('0') - * ``` - * - * @since 2.0.0 - */ -export function dimap( - fld: (l: L) => D, - fai: (a: A) => I, -): (ua: FnEither) => FnEither { - return F.flow(premap(fld), map(fai)); -} - -/** - * Perform the same function as Reader ask. Given a type A - * (and optionally a type B), return a FnEither<[A], B, A>. - * This is useful for starting a FnEither flatmap. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import { pipe } from "./fn.ts"; - * - * const computation = FE.id(); - * - * const result1 = computation(1); // Right(1); - * const result2 = computation(2); // Right(2); - * ``` - * - * @since 2.0.0 - */ -export function id(): FnEither { - return E.right; -} - -/** - * Perform the same function as Reader askLeft. Given a type B - * (and optionally a type A), return a FnEither<[B], B, A>. - * This is useful for starting a FnEither flatmap with a left value. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import { pipe } from "./fn.ts"; - * - * const computation = FE.idLeft(); - * - * const result1 = computation(1); // Left(1); - * const result2 = computation(2); // Left(2); - * ``` - * - * @since 2.0.0 - */ -export function idLeft(): FnEither { - return E.left; -} - -/** - * Compose two FnEithers, passing the right value of the first - * into the second. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import { pipe } from "./fn.ts"; - * - * const isPositive = (n: number) => n > 0; - * const isInteger = (n: number) => Number.isInteger(n); - * - * const isPositiveInteger = pipe( - * FE.fromPredicate(isPositive), - * FE.compose(FE.fromPredicate(isInteger)), - * ); - * - * const result1 = isPositiveInteger(0); // Left(0) - * const result2 = isPositiveInteger(1); // Right(1) - * const result3 = isPositiveInteger(1.1); // Left(1.1) - * ``` - * - * @since 2.0.0 - */ -export function compose( - second: FnEither, -): ( - first: FnEither, -) => FnEither { - return (first) => F.flow(first, E.flatmap(second)); -} - -/** - * Create a Flatmappable for FnEither where left values are combined using the - * supplied Combinable. - * - * @example - * ```ts - * import * as FE from "./fn_either.ts"; - * import { InitializableNumberSum } from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const { apply } = FE.getRightFlatmappable(InitializableNumberSum); - * - * const result1 = pipe( - * FE.left(1), - * apply(FE.left(1)), - * ); // Left(2) - * ``` - * - * @since 2.0.0 - */ -export function getRightFlatmappable( - { combine }: Combinable, -): Flatmappable> { - return ({ - wrap, - apply: (ua) => (ufai) => (c) => { - const efai = ufai(c); - const ea = ua(c); - return E.isLeft(efai) - ? (E.isLeft(ea) ? E.left(combine(efai.left)(ea.left)) : efai) - : (E.isLeft(ea) ? ea : E.right(efai.right(ea.right))); - }, - map, - flatmap, - }); -} - -/** - * @since 2.0.0 - */ -export const ApplicableFnEither: Applicable = { - apply, - map, - wrap, -}; - -/** - * The canonical implementation of Bimappable for FnEither. It contains - * the methods bimap and mapSecond. - * - * @since 2.0.0 - */ -export const BimappableFnEither: Bimappable = { - map, - mapSecond, -}; - -/** - * @since 2.0.0 - */ -export const ComposableFnEither: Composable = { compose, id }; - -/** - * The canonical implementation of Flatmappable for FnEither. It contains - * the methods wrap, apply, map, and flatmap. - * - * @since 2.0.0 - */ -export const FlatmappableFnEither: Flatmappable = { - wrap, - apply, - map, - flatmap, -}; - -/** - * @since 2.0.0 - */ -export const FailableFnEither: Failable = { - apply, - flatmap, - map, - wrap, - fail, - alt, - recover, -}; - -/** - * @since 2.0.0 - */ -export const MappableFnEither: Mappable = { map }; - -/** - * The canonical implementation of Premappable for FnEither. It contains - * the method premap. - * - * @since 2.0.0 - */ -export const PremappableFnEither: Premappable = { - premap, - map, - dimap, -}; - -/** - * @since 2.0.0 - */ -export const WrappableFnEither: Wrappable = { wrap }; - -/** - * @since 2.0.0 - */ -export const tap = createTap(FlatmappableFnEither); - -/** - * @since 2.0.0 - */ -export const bind = createBind(FlatmappableFnEither); - -/** - * @since 2.0.0 - */ -export const bindTo = createBindTo(MappableFnEither); diff --git a/vendor/deno.land/x/fun@v2.0.0/foldable.ts b/vendor/deno.land/x/fun@v2.0.0/foldable.ts deleted file mode 100644 index b4d73a8..0000000 --- a/vendor/deno.land/x/fun@v2.0.0/foldable.ts +++ /dev/null @@ -1,38 +0,0 @@ -/** - * Foldable is a structure that allows a function to all values inside of a - * structure. The reduction is accumulative and ordered. - * - * @module Foldable - * @since 2.0.0 - */ - -import type { $, Hold, Kind } from "./kind.ts"; -import type { Initializable } from "./initializable.ts"; - -/** - * A Foldable structure has the method fold. - * - * @since 2.0.0 - */ -export interface Foldable extends Hold { - readonly fold: ( - reducer: (accumulator: O, value: A) => O, - accumulator: O, - ) => ( - ua: $, - ) => O; -} - -/** - * @experimental - * @since 2.0.0 - */ -export function collect( - { fold }: Foldable, - { combine, init }: Initializable, -): ( - ua: $, -) => A { - return (ua) => - fold((first, second) => combine(second)(first), init())(ua); -} diff --git a/vendor/deno.land/x/fun@v2.0.0/initializable.ts b/vendor/deno.land/x/fun@v2.0.0/initializable.ts deleted file mode 100644 index 5bbbb8a..0000000 --- a/vendor/deno.land/x/fun@v2.0.0/initializable.ts +++ /dev/null @@ -1,173 +0,0 @@ -/** - * This file contains the type and utilities for the Initializable algebraic - * data structure. A type that implements Initializable has a concept of "empty" - * represented by the init method and a concept to combine represented by the - * combine method. In other functional libraries and languages Initializable is - * called Monoid. - * - * @module Initializable - * @since 2.0.0 - */ - -import type { Combinable } from "./combinable.ts"; -import type { AnyReadonlyRecord } from "./record.ts"; - -import * as C from "./combinable.ts"; - -/** - * A Initializable structure has the method init. - * - * @since 2.0.0 - */ -export interface Initializable extends Combinable { - readonly init: () => A; -} - -/** - * A type for Initializable over any fixed value, useful as an extension target - * for functions that take any Initializable and do not need to unwrap the - * type. - * - * @since 2.0.0 - */ -// deno-lint-ignore no-explicit-any -export type AnyInitializable = Initializable; - -/** - * A type level unwrapor, used to pull the inner type from a Combinable. - * - * @since 2.0.0 - */ -export type TypeOf = T extends Initializable ? A : never; - -/** - * Create an Initializable fixed to a concrete value A. This operates like init - * from Combinable in other functional libraries. - * - * @since 2.0.0 - */ -export function constant(value: A): Initializable { - return { init: () => value, combine: () => () => value }; -} - -/** - * Create an Initializable fixed to a struct using nested Initializables to - * create the init values within. - * - * @since 2.0.0 - */ -export function struct( - initializables: { [K in keyof O]: Initializable }, -): Initializable<{ readonly [K in keyof O]: O[K] }> { - type Entries = [keyof O, typeof initializables[keyof O]][]; - return ({ - init: () => { - const r = {} as Record; - for (const [key, { init }] of Object.entries(initializables) as Entries) { - r[key] = init(); - } - return r as { [K in keyof O]: O[K] }; - }, - ...C.struct(initializables), - }); -} - -/** - * Create an Initializable fixed to a tuple using nested Initializables to - * create the init values within. - * - * @since 2.0.0 - */ -export function tuple( - ...initializables: T -): Initializable<{ readonly [K in keyof T]: TypeOf }> { - return { - init: () => initializables.map(({ init }) => init()), - ...C.tuple(...initializables), - } as Initializable<{ readonly [K in keyof T]: TypeOf }>; -} - -/** - * Create a dual Initializable from an existing initializable. This effectively - * switches the order of application of the original Initializable. - * - * @example - * ```ts - * import { dual, getCombineAll, intercalcate } from "./initializable.ts"; - * import { InitializableString } from "./string.ts"; - * import { pipe } from "./fn.ts"; - * - * const reverse = dual(InitializableString); - * const reverseAll = pipe( - * reverse, - * intercalcate(" "), - * getCombineAll, - * ); - * - * const result = reverseAll("Hello", "World"); // "World Hello" - * ``` - * - * @since 2.0.0 - */ -export function dual(M: Initializable): Initializable { - return ({ - combine: C.dual(M).combine, - init: M.init, - }); -} - -/** - * Create a initializable that works like Array.join, - * inserting middle between every two values - * that are combineenated. This can have some interesting - * results. - * - * @example - * ```ts - * import * as M from "./initializable.ts"; - * import * as S from "./string.ts"; - * import { pipe } from "./fn.ts"; - * - * const { combine: toList } = pipe( - * S.InitializableString, - * M.intercalcate(", "), - * ); - * - * const list = pipe( - * "apples", - * toList("oranges"), - * toList("and bananas"), - * ); // list === "apples, oranges, and bananas" - * ``` - * - * @since 2.0.0 - */ -export function intercalcate(middle: A) { - return ({ combine, init }: Initializable): Initializable => ({ - combine: (second) => combine(combine(second)(middle)), - init, - }); -} -/** - * Given an Initializable, create a function that will - * iterate through an array of values and combine - * them. This is not much more than Array.fold(combine). - * - * @example - * ```ts - * import * as I from "./initializable.ts"; - * import * as N from "./number.ts"; - * - * const sumAll = I.getCombineAll(N.InitializableNumberSum); - * - * const result = sumAll(1, 30, 80, 1000, 52, 42); // sum === 1205 - * ``` - * - * @since 2.0.0 - */ -export function getCombineAll( - { combine, init }: Initializable, -): (...as: ReadonlyArray) => A { - const _combine = (first: A, second: A) => combine(second)(first); - return (...as) => as.reduce(_combine, init()); -} diff --git a/vendor/deno.land/x/fun@v2.0.0/kind.ts b/vendor/deno.land/x/fun@v2.0.0/kind.ts deleted file mode 100644 index fa7273e..0000000 --- a/vendor/deno.land/x/fun@v2.0.0/kind.ts +++ /dev/null @@ -1,152 +0,0 @@ -/** - * Kind is a collection of types used for doing something called Type - * Substitution. The core idea here is that sometimes there is a function that - * is generic at two levels, at the concrete type as well as at the type leve. - * A simple example of this is a *forEach* function. In javascript the built in - * *Array* and *Set* data structures both have a built in *forEach* method. If - * we look at Array and Set we can see that the creation functions are similar. - * - * * `const arr = new Array()` returns Array; - * * `const set = new Set()` returns Set; - * - * If we look at the type signitures on forEach for `arr` and `set` we also - * notice a similar pattern. - * - * * `type A = (typeof arr)['forEach']` returns `(callbackfn: (value: number, index: number, array: number[]) => void, thisArg?: any) => void` - * * `type B = (typeof set)['forEach']` returns `(callbackfn: (value: number, value2: number, set: Set) => void, thisArg?: any) => void` - * - * Both forEach methods have the same concrete value of `number` but differ in - * that they operate over an Array or a Set. Here is a table to illustrate this - * pattern a bit more clearly. - * - * | Structure | Outer Type | Inner Type | forEach Type | - * | --------- | ---------- | ------------------ | ------------------------------------------------- | - * | Array | Array | A | (value: A, index: number, struct: A[]) => void | - * | Set | Set | A | (value: A, index: number, struct: Set) => void | - * | Map | Map | K (key), V (value) | (value: V, key: K, struct: Map) => void | - * - * In general we can see that the forEach function could have a more generic - * type signiture like this: - * - * ``` - * type ForEach = { - * forEach: (struct: Outer) => (value: V, key: K, struct: Outer) => void; - * } - * ``` - * - * Unfortunately, while these types of patterns are abundant within TypeScript - * (and most programming languages). The ability to pass generic types around - * and fill type holes is not built into TypeScript. However, with some type - * magic we can create our own type level substitutions using methods pionered - * by [gcanti](https://github.com/gcanti) in *fp-ts*. - * - * @module Kind - * @since 2.0.0 - */ - -/** - * The Substitutions type splits the different type level substitutions into - * tuples based on variance. - */ -export type Substitutions = { - // Covariant Substitutions: () => A - readonly ["out"]: unknown[]; - // Premappable Substitutions: (A) => void - readonly ["in"]: unknown[]; - // Invariant Substitutions: (A) => A - readonly ["inout"]: unknown[]; -}; - -/** - * Kind is an interface that can be extended - * to retrieve inner types using "this". - */ -export interface Kind extends Substitutions { - readonly kind?: unknown; -} - -/** - * Substitute is a substitution type, taking a Kind implementation T and - * substituting it with types passed in S. - */ -export type Substitute = T extends - { readonly kind: unknown } - // If the kind property on T is required (no ?) then proceed with substitution - ? (T & S)["kind"] - // Otherwise carry T and the substitutions forward, preserving variance. - : { - readonly T: T; - readonly ["out"]: () => S["out"]; - readonly ["in"]: (_: S["in"]) => void; - readonly ["inout"]: (_: S["inout"]) => S["inout"]; - }; - -/** - * $ is an alias of Substitute, lifting out, in, and inout - * substitutions to positional type parameters. - */ -export type $< - T extends Kind, - Out extends unknown[], - In extends unknown[] = [never], - InOut extends unknown[] = [never], -> = Substitute; - -/** - * Access the Covariant substitution type at index N - */ -export type Out = T["out"][N]; - -/** - * Access the Premappable substitution type at index N - */ -export type In = T["in"][N]; - -/** - * Access the Invariant substitution type at index N - */ -export type InOut = T["inout"][N]; - -/** - * Fix a concrete type as a non-substituting Kind. This allows one to define - * algebraic structures over things like number, string, etc. - */ -export interface Fix extends Kind { - readonly kind: A; -} - -/** - * Create a scoped symbol for use with Hold. - */ -const HoldSymbol = Symbol("Hold"); -type HoldSymbol = typeof HoldSymbol; - -/** - * The Hold interface allows one to trick the typescript compiler into holding - * onto type information that it would otherwise discard. This is useful when - * creating an interface that merges multiple type classes (see Flatmappable). - */ -export interface Hold { - readonly [HoldSymbol]?: A; -} - -/** - * Spread the keys of a struct union into a single struct. - */ -export type Spread = { [K in keyof A]: A[K] } extends infer B ? B : never; - -/** - * An extension type to be used to constrain in input to an outer container with - * any concrete types. - */ -// deno-lint-ignore no-explicit-any -export type AnySub = $; - -/** - * A type level utility that turns a type union into a type intersection. This - * type is dangerous and can have unexpected results so extra runtime testing is - * necessary when used. - */ -// deno-lint-ignore no-explicit-any -export type Intersect = (U extends any ? (k: U) => void : never) extends - ((k: infer I) => void) ? I : never; diff --git a/vendor/deno.land/x/fun@v2.0.0/mappable.ts b/vendor/deno.land/x/fun@v2.0.0/mappable.ts deleted file mode 100644 index 73f9e64..0000000 --- a/vendor/deno.land/x/fun@v2.0.0/mappable.ts +++ /dev/null @@ -1,42 +0,0 @@ -/** - * Mappable is a structure that allows a function to be applied inside of the - * associated concrete structure. - * - * @module Mappable - * @since 2.0.0 - */ - -import type { $, Hold, Kind } from "./kind.ts"; - -/** - * A Mappable structure has the method map. - * - * @since 2.0.0 - */ -export interface Mappable extends Hold { - readonly map: ( - fai: (value: A) => I, - ) => ( - ta: $, - ) => $; -} - -/** - * Create a bindTo function from a structure with an instance of Mappable. A - * bindTo function takes the inner value of the structure and maps it to the - * value of a struct with the given name. It is useful for lifting the value - * such that it can then be used with a `bind` function, effectively allowing - * for `Do`-like notation in typescript. - * - * @since 2.0.0 - */ -export function createBindTo( - { map }: Mappable, -): ( - name: N, -) => ( - ua: $, -) => $ { - // deno-lint-ignore no-explicit-any - return (name) => map((value) => ({ [name]: value }) as any); -} diff --git a/vendor/deno.land/x/fun@v2.0.0/nil.ts b/vendor/deno.land/x/fun@v2.0.0/nil.ts deleted file mode 100644 index eb3bbc4..0000000 --- a/vendor/deno.land/x/fun@v2.0.0/nil.ts +++ /dev/null @@ -1,406 +0,0 @@ -/** - * This file contains the Nil algebraic data type. Nil is a native form of the - * Option algebraic data type. Instead of encapsulating a value in a tagged - * union it uses the native `undefined` and `null` types built in to javascript. - * Unfortunately, this makes its algebraic structure implementations unsound in - * some cases, specifically when one wants to use undefined or null as - * significant values (meaning they have some meaning beyond empty). - * - * @module Nil - * @since 2.0.0 - */ - -import type { $, Kind, Out } from "./kind.ts"; -import type { Applicable } from "./applicable.ts"; -import type { Combinable } from "./combinable.ts"; -import type { Comparable } from "./comparable.ts"; -import type { Either } from "./either.ts"; -import type { Filterable } from "./filterable.ts"; -import type { Flatmappable } from "./flatmappable.ts"; -import type { Foldable } from "./foldable.ts"; -import type { Initializable } from "./initializable.ts"; -import type { Mappable } from "./mappable.ts"; -import type { Option } from "./option.ts"; -import type { Pair } from "./pair.ts"; -import type { Predicate } from "./predicate.ts"; -import type { Refinement } from "./refinement.ts"; -import type { Showable } from "./showable.ts"; -import type { Sortable } from "./sortable.ts"; -import type { Traversable } from "./traversable.ts"; -import type { Wrappable } from "./wrappable.ts"; - -import { handleThrow } from "./fn.ts"; -import { fromCompare } from "./comparable.ts"; -import { fromSort } from "./sortable.ts"; -import { createBind, createTap } from "./flatmappable.ts"; -import { createBindTo } from "./mappable.ts"; - -/** - * @since 2.0.0 - */ -export type Nil = A | undefined | null; - -/** - * @since 2.0.0 - */ -export interface KindNil extends Kind { - readonly kind: Nil>; -} - -/** - * @since 2.0.0 - */ -export function nil(a: A): Nil { - return isNotNil(a) ? a : null; -} - -/** - * @since 2.0.0 - */ -export function init(): Nil { - return null; -} - -/** - * @since 2.0.0 - */ -export function fail(): Nil { - return null; -} - -/** - * @since 2.0.0 - */ -export function fromPredicate( - refinement: Refinement, -): (a: A) => Nil; -export function fromPredicate( - predicate: Predicate, -): (ta: Nil) => Nil; -export function fromPredicate( - predicate: Predicate, -): (ta: Nil) => Nil { - return (ta) => isNotNil(ta) && predicate(ta) ? ta : null; -} - -/** - * @since 2.0.0 - */ -export function fromOption(ua: Option): Nil { - return ua.tag === "None" ? null : ua.value; -} - -/** - * @since 2.0.0 - */ -export function tryCatch( - fda: (...d: D) => A, -): (...d: D) => Nil { - return handleThrow(fda, nil, fail); -} - -/** - * @since 2.0.0 - */ -export function match( - onNil: () => I, - onValue: (a: A) => I, -): (ta: Nil) => I { - return (ta) => (isNil(ta) ? onNil() : onValue(ta)); -} - -/** - * @since 2.0.0 - */ -export function getOrElse(onNil: () => A): (ta: Nil) => A { - return (ta) => isNil(ta) ? onNil() : ta; -} - -/** - * @since 2.0.0 - */ -export function toNull(ta: Nil): A | null { - return isNil(ta) ? null : ta; -} - -/** - * @since 2.0.0 - */ -export function toUndefined(ta: Nil): A | undefined { - return isNil(ta) ? undefined : ta; -} - -/** - * @since 2.0.0 - */ -export function isNil(ta: Nil): ta is undefined | null { - return ta === undefined || ta === null; -} - -/** - * @since 2.0.0 - */ -export function isNotNil(ta: Nil): ta is NonNullable { - return !isNil(ta); -} - -/** - * @since 2.0.0 - */ -export function wrap(a: A): Nil { - return a; -} - -/** - * @since 2.0.0 - */ -export function apply( - ua: Nil, -): (ufai: Nil<(a: A) => I>) => Nil { - return (ufai) => isNil(ua) ? null : isNil(ufai) ? null : ufai(ua); -} - -/** - * @since 2.0.0 - */ -export function map(fai: (a: A) => I): (ta: Nil) => Nil { - return (ta) => isNil(ta) ? null : fai(ta); -} - -/** - * @since 2.0.0 - */ -export function flatmap( - fati: (a: A) => Nil, -): (ta: Nil) => Nil { - return (ta) => isNil(ta) ? null : fati(ta); -} - -/** - * @since 2.0.0 - */ -export function alt(tb: Nil): (ta: Nil) => Nil { - return (ta) => isNil(ta) ? tb : ta; -} - -/** - * @since 2.0.0 - */ -export function exists(predicate: Predicate): (ua: Nil) => boolean { - return (ua) => isNotNil(ua) && predicate(ua); -} - -/** - * @since 2.0.0 - */ -export function filter( - refinement: Refinement, -): (ta: Nil) => Nil; -export function filter( - predicate: Predicate, -): (ta: Nil) => Nil; -export function filter( - predicate: Predicate, -): (ta: Nil) => Nil { - const _exists = exists(predicate); - return (ta) => _exists(ta) ? ta : null; -} - -/** - * @since 2.0.0 - */ -export function filterMap( - fai: (a: A) => Option, -): (ua: Nil) => Nil { - return flatmap((a) => fromOption(fai(a))); -} - -/** - * @since 2.0.0 - */ -export function partition( - refinement: Refinement, -): (ua: Nil) => Pair, Nil>; -export function partition( - predicate: Predicate, -): (ua: Nil) => Pair, Nil>; -export function partition( - predicate: Predicate, -): (ua: Nil) => Pair, Nil> { - type Output = Pair, Nil>; - const init: Output = [null, null]; - return (ua) => isNil(ua) ? init : predicate(ua) ? [ua, null] : [null, ua]; -} - -/** - * @since 2.0.0 - */ -export function partitionMap( - fai: (a: A) => Either, -): (ua: Nil) => Pair, Nil> { - type Output = Pair, Nil>; - const init: Output = [null, null]; - return (ua) => { - if (isNil(ua)) { - return init; - } - const result = fai(ua); - return result.tag === "Right" - ? [nil(result.right), null] - : [null, nil(result.left)]; - }; -} - -/** - * @since 2.0.0 - */ -export function traverse( - A: Applicable, -): ( - favi: (a: A) => $, -) => (ta: Nil) => $, J, K], [L], [M]> { - return ( - favi: (a: A) => $, - ): (ta: Nil) => $, J, K], [L], [M]> => - match( - () => A.wrap(fail()), - (a) => A.map((i: I) => nil(i))(favi(a)), - ); -} - -/** - * @since 2.0.0 - */ -export function fold( - reducer: (accumulator: O, current: A) => O, - initial: O, -): (ua: Nil) => O { - return (ua) => isNil(ua) ? initial : reducer(initial, ua); -} - -/** - * @since 2.0.0 - */ -export function getShowableNil({ show }: Showable): Showable> { - return { show: (ma) => (isNil(ma) ? "nil" : show(ma)) }; -} - -/** - * @since 2.0.0 - */ -export function getComparableNil( - { compare }: Comparable, -): Comparable> { - return fromCompare((second) => (first) => - isNotNil(first) && isNotNil(second) - ? compare(second)(first) - : isNil(first) && isNil(second) - ); -} - -/** - * @since 2.0.0 - */ -export function getSortableNil({ sort }: Sortable): Sortable> { - return fromSort((fst, snd) => - isNil(fst) ? isNil(snd) ? 0 : -1 : isNil(snd) ? 1 : sort(fst, snd) - ); -} - -/** - * @since 2.0.0 - */ -export function getCombinableNil( - { combine }: Combinable, -): Combinable> { - return ({ - combine: (second) => (first) => { - if (isNil(first)) { - return isNil(second) ? null : second; - } else if (isNil(second)) { - return first; - } else { - return combine(second)(first); - } - }, - }); -} - -/** - * @since 2.0.0 - */ -export function getInitializableNil( - I: Initializable, -): Initializable> { - return ({ init: () => nil(I.init()), ...getCombinableNil(I) }); -} - -/** - * @since 2.0.0 - */ -export const ApplicableNil: Applicable = { - apply, - map, - wrap, -}; - -/** - * @since 2.0.0 - */ -export const MappableNil: Mappable = { map }; - -/** - * @since 2.0.0 - */ -export const FilterableNil: Filterable = { - filter, - filterMap, - partition, - partitionMap, -}; - -/** - * @since 2.0.0 - */ -export const FlatmappableNil: Flatmappable = { - apply, - flatmap, - map, - wrap, -}; - -/** - * @since 2.0.0 - */ -export const FoldableNil: Foldable = { fold }; - -/** - * @since 2.0.0 - */ -export const TraversableNil: Traversable = { - fold, - map, - traverse, -}; - -/** - * @since 2.0.0 - */ -export const WrappableNil: Wrappable = { - wrap, -}; - -/** - * @since 2.0.0 - */ -export const tap = createTap(FlatmappableNil); - -/** - * @since 2.0.0 - */ -export const bind = createBind(FlatmappableNil); - -/** - * @since 2.0.0 - */ -export const bindTo = createBindTo(MappableNil); diff --git a/vendor/deno.land/x/fun@v2.0.0/option.ts b/vendor/deno.land/x/fun@v2.0.0/option.ts deleted file mode 100644 index cc50966..0000000 --- a/vendor/deno.land/x/fun@v2.0.0/option.ts +++ /dev/null @@ -1,877 +0,0 @@ -/** - * The Option type is generally considered functional programming's response to - * handling null or undefined. Sometimes Option is also called Maybe. Its - * purpose is to represent the possibility that some data is not available. - * - * @module Option - * @since 2.0.0 - */ - -import type { $, Kind, Out } from "./kind.ts"; -import type { Applicable } from "./applicable.ts"; -import type { Combinable } from "./combinable.ts"; -import type { Comparable } from "./comparable.ts"; -import type { Either } from "./either.ts"; -import type { Filterable } from "./filterable.ts"; -import type { Flatmappable } from "./flatmappable.ts"; -import type { Initializable } from "./initializable.ts"; -import type { Mappable } from "./mappable.ts"; -import type { Pair } from "./pair.ts"; -import type { Predicate } from "./predicate.ts"; -import type { Foldable } from "./foldable.ts"; -import type { Refinement } from "./refinement.ts"; -import type { Showable } from "./showable.ts"; -import type { Sortable } from "./sortable.ts"; -import type { Traversable } from "./traversable.ts"; -import type { Wrappable } from "./wrappable.ts"; - -import { isNotNil } from "./nil.ts"; -import { fromCompare } from "./comparable.ts"; -import { fromSort } from "./sortable.ts"; -import { flow, handleThrow, pipe } from "./fn.ts"; -import { createBind, createTap } from "./flatmappable.ts"; -import { createBindTo } from "./mappable.ts"; - -/** - * The None type represents the non-existence of a value. - * - * @since 2.00. - */ -export type None = { tag: "None" }; - -/** - * The Some type represents the existence of a value. - * - * @since 2.00. - */ -export type Some = { tag: "Some"; value: V }; - -/** - * The Option represents a type A that may or may not exist. It's the functional - * progamming equivalent of A | undefined | null. - * - * @since 2.0.0 - */ -export type Option = Some | None; - -/** - * Specifies Option as a Higher Kinded Type, with covariant - * parameter A corresponding to the 0th index of any substitutions. - * - * @since 2.0.0 - */ -export interface KindOption extends Kind { - readonly kind: Option>; -} - -/** - * The cannonical implementation of the None type. Since all None values are equivalent there - * is no reason to construct more than one object instance. - * - * @example - * ```ts - * import type { Option } from "./option.ts"; - * import * as O from "./option.ts"; - * - * function fromNilable(a: A | null | undefined): Option { - * return a === null || a === undefined ? O.none : O.some(a); - * } - * - * const result1 = fromNilable(null); // None - * const result2 = fromNilable(1); // Some - * ``` - * - * @since 2.0.0 - */ -export const none: Option = { tag: "None" }; - -/** - * The some constructer takes any value and wraps it in the Some type. - * - * @example - * ```ts - * import type { Option } from "./option.ts"; - * import * as O from "./option.ts"; - * - * function fromNilable(a: A | null | undefined): Option { - * return a === null || a === undefined ? O.none : O.some(a); - * } - * - * const result1 = fromNilable(null); // None - * const result2 = fromNilable(1); // Some - * ``` - * - * @since 2.0.0 - */ -export function some(value: A): Option { - return ({ tag: "Some", value }); -} - -/** - * The constNone is a thunk that returns the canonical none instance. - * - * @since 2.0.0 - */ -export function constNone(): Option { - return none; -} - -/** - * @since 2.0.0 - */ -export function init(): Option { - return none; -} - -/** - * Fail is an alias of constNone. - */ -export function fail(): Option { - return none; -} - -/** - * The fromNullable function takes a potentially null or undefined value - * and maps null or undefined to None and non-null and non-undefined - * values to Some>. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * - * const a: number | undefined = undefined; - * const b: number | undefined = 2; - * const c = [1, 2, 3]; - * - * const result1 = O.fromNullable(a); // None - * const result2 = O.fromNullable(b); // Some - * const result3 = O.fromNullable(c[3]); // None - * ``` - * - * @since 2.0.0 - */ -export function fromNullable(a: A): Option> { - return isNotNil(a) ? some(a) : none; -} - -/** - * The fromPredicate function will test the value a with the predicate. If - * the predicate evaluates to false then the function will return a None, - * otherwise it will return the value wrapped in Some. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * - * const positive = O.fromPredicate((n: number) => n > 0); - * - * const result1 = positive(-1); // None - * const result2 = positive(1); // Some - * ``` - * - * @since 2.0.0 - */ -export function fromPredicate( - refinement: Refinement, -): (a: A) => Option; -export function fromPredicate( - refinement: Predicate, -): (a: A) => Option; -export function fromPredicate(predicate: Predicate) { - return (a: A): Option => (predicate(a) ? some(a) : none); -} - -/** - * Take a function that can throw and wrap it in a try/catch block. Returns a - * new function that takes the same arguments as the original but returns the - * original value wrapped in an Option. If the function throws then the new - * function returns None, otherwise it returns Some. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * - * function thrower(n: number): number { - * if (n < 0) { - * throw new Error("This number is too small"); - * } - * return n; - * } - * - * const handler = O.tryCatch(thrower); - * - * const result1 = handler(-1); // None - * const result2 = handler(0); // Some(0); - * ``` - * - * @since 2.0.0 - */ -export function tryCatch( - fn: (...d: D) => A, -): (...d: D) => Option { - return handleThrow(fn, some, constNone); -} - -/** - * The match functionis the standard catamorphism on an Option. It operates like - * a switch case operator over the two potential cases for an Option type. One - * supplies functions for handling the Some case and the None case with matching - * return types and fold calls the correct function for the given option. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * - * const toNumber = O.match(() => 0, n => n); - * - * const result1 = toNumber(O.none); // 0 - * const result2 = toNumber(O.some(1)); // 1 - * ``` - * - * @since 2.0.0 - */ -export function match(onNone: () => B, onSome: (a: A) => B) { - return (ta: Option): B => (isNone(ta) ? onNone() : onSome(ta.value)); -} - -/** - * getOrElse operates like a simplified fold. One supplies a thunk that returns a default - * inner value of the Option for the cases where the option is None. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * - * const toNumber = O.getOrElse(() => 0); - * - * const result1 = toNumber(O.some(1)); // 1 - * const result2 = toNumber(O.none); // 0 - * ``` - * - * @since 2.0.0 - */ -export function getOrElse(onNone: () => B) { - return (ta: Option): B => isNone(ta) ? onNone() : ta.value; -} - -/** - * toNullable returns either null or the inner value of an Option. This is useful for - * interacting with code that handles null but has no concept of the Option type. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * - * const result1 = O.toNull(O.none); // null - * const result2 = O.toNull(O.some(1)); // 1 - * ``` - * - * @since 2.0.0 - */ -export function toNull(ma: Option): A | null { - return isNone(ma) ? null : ma.value; -} - -/** - * toUndefined returns either undefined or the inner value of an Option. This is useful for - * interacting with code that handles undefined but has no concept of the Option type. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * - * const result1 = O.toUndefined(O.none); // undefined - * const result2 = O.toUndefined(O.some(1)); // 1 - * ``` - * - * @since 2.0.0 - */ -export function toUndefined(ma: Option): A | undefined { - return isNone(ma) ? undefined : ma.value; -} - -/** - * Tests wether an Option is None, returning true if the passed option is None - * and false if it is Some. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * - * const result1 = O.isNone(O.none); // true - * const result2 = O.isNone(O.some(1)); // false - * ``` - * - * @since 2.0.0 - */ -export function isNone(m: Option): m is None { - return m.tag === "None"; -} - -/** - * Tests wether an Option is Some, returning true if the passed option is Some - * and false if it is None. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * - * const result1 = O.isSome(O.none); // false - * const result2 = O.isSome(O.some(1)); // true - * ``` - * - * @since 2.0.0 - */ -export function isSome(m: Option): m is Some { - return m.tag === "Some"; -} - -/** - * Create an Option by wrapping any value A in Some. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * - * const result1 = O.wrap(1); // Some(1) - * const result2 = O.wrap("Hello"); // Some("Hello") - * ``` - * - * @since 2.0.0 - */ -export function wrap(a: A): Option { - return some(a); -} - -/** - * Apply the mapping function fai to the inner value of an Option if it - * exists. If the option is None then this function does nothing. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * import { pipe } from "./fn.ts"; - * - * const result1 = pipe(O.some(1), O.map(n => n + 1)); // Some(2) - * const result2 = pipe(O.none, O.map((n: number) => n + 1)); // None - * ``` - * - * @since 2.0.0 - */ -export function map(fai: (a: A) => I): (ua: Option) => Option { - return (ua) => isNone(ua) ? none : some(fai(ua.value)); -} - -/** - * Apply a mapping function to an Option but if the mapping function returns - * null or undefined the null or undefined value is lifted into None. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * import { pipe } from "./fn.ts"; - * - * const result1 = pipe( - * O.some([1, 2, 3]), - * O.mapNullable(arr => arr[10]), - * ); // None - * const result2 = pipe( - * O.constNone>(), - * O.mapNullable(arr => arr[0]), - * ); // None - * const result3 = pipe( - * O.some([1, 2, 3]), - * O.mapNullable(arr => arr[0]), - * ); // Some(1) - * ``` - * - * @since 2.0.0 - */ -export function mapNullable( - f: (a: A) => I | null | undefined, -): (ua: Option) => Option { - return flatmap(flow(f, fromNullable)); -} - -/** - * Apply a value A wrapped in an option to a function (a: A) => I wrapped in an - * Option. If either the wrapped value or the wrapped function are None then the - * result is None, if they are both Some then the result is Some. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * import { pipe } from "./fn.ts"; - * - * const result1 = pipe( - * O.some((n: number) => n + 1), - * O.apply(O.some(1)), - * ); // Some(2) - * const result2 = pipe( - * O.some((n: number) => n + 1), - * O.apply(O.none), - * ); // None - * ``` - * - * @since 2.0.0 - */ -export function apply( - ua: Option, -): (ufai: Option<(a: A) => I>) => Option { - return (ufai) => - isNone(ufai) || isNone(ua) ? none : some(ufai.value(ua.value)); -} - -/** - * Apply a function (a: A) => Option to the wrapped value of an Option if - * the wrapped value exists, flattening the application result into an - * Option. This is the equivalent of first mapping from Option to - * Option> and then calling join to flatten the Options. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * O.some(1), - * O.flatmap(n => n > 0 ? O.some(n) : O.none), - * ); // Some(1) - * ``` - * - * @since 2.0.0 - */ -export function flatmap( - fati: (a: A) => Option, -): (ta: Option) => Option { - return (ua) => isNone(ua) ? ua : fati(ua.value); -} - -/** - * Replace an first with second if first is None. This allows one to offer a - * a replacement or default. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * import { pipe } from "./fn.ts"; - * - * const result1 = pipe(O.some(1), O.alt(O.some(2))); // Some(1); - * const result2 = pipe(O.some(1), O.alt(O.constNone())); // Some(1); - * const result3 = pipe(O.none, O.alt(O.some(2))); // Some(2); - * const result4 = pipe(O.none, O.alt(O.none)); // None - * ``` - * - * @since 2.0.0 - */ -export function alt(second: Option): (first: Option) => Option { - return (first) => isNone(first) ? second : first; -} - -/** - * Apply a predicate to the inner value of an Option, returning true if the - * option is Some and the predicate returns true, otherwise returning false. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * import { pipe } from "./fn.ts"; - * - * const positive = (n: number) => n > 0; - * - * const result1 = pipe(O.some(1), O.exists(positive)); // true - * const result2 = pipe(O.some(0), O.exists(positive)); // false - * const result3 = pipe(O.none, O.exists(positive)); // false - * ``` - * - * @since 2.0.0 - */ -export function exists(predicate: Predicate): (ua: Option) => boolean { - return (ua) => isSome(ua) && predicate(ua.value); -} - -/** - * Apply a refinement or predicate to the inner value of an Option, returning - * the original option if the value exists and the predicate/refinement return - * true, otherwise returning None. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * import { pipe } from "./fn.ts"; - * - * const positive = (n: number) => n > 0; - * - * const result1 = pipe(O.some(1), O.filter(positive)); // Some(1) - * const result2 = pipe(O.some(0), O.filter(positive)); // None - * const result3 = pipe(O.none, O.filter(positive)); // None - * ``` - * - * @since 2.0.0 - */ -export function filter( - refinement: Refinement, -): (ta: Option) => Option; -export function filter( - predicate: Predicate, -): (ta: Option) => Option; -export function filter( - predicate: Predicate, -): (ta: Option) => Option { - const _exists = exists(predicate); - return (ta) => _exists(ta) ? ta : none; -} - -/** - * Apply a filter and mapping operation at the same time against an Option. This - * is equivalent to the flatmap function for Option. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * - * const noninit = (str: string) => str.length > 0 ? O.some(str.length) : O.none; - * const filterMap = O.filterMap(noninit); - * - * const result1 = filterMap(O.some("Hello")); // Some(5); - * const result2 = filterMap(O.some("")); // None - * const result3 = filterMap(O.none); // None - * ``` - * - * @since 2.0.0 - */ -export function filterMap( - fai: (a: A) => Option, -): (ua: Option) => Option { - return flatmap(fai); -} - -/** - * Given a refinement or predicate, return a function that splits an Option into - * a Pair. Due to the nature of the option type this will always - * return Pair, Pair, or Pair. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * - * const partition = O.partition((n: number) => n > 0); - * - * const result1 = partition(O.some(1)); // [Some(1), None] - * const result2 = partition(O.some(0)); // [None, Some(0)] - * const result3 = partition(O.none); // [None, None] - * ``` - * - * @since 2.0.0 - */ -export function partition( - refinement: Refinement, -): (ua: Option) => Pair, Option>; -export function partition( - predicate: Predicate, -): (ua: Option) => Pair, Option>; -export function partition( - predicate: Predicate, -): (ua: Option) => Pair, Option> { - type Output = Pair, Option>; - const init: Output = [none, none]; - return (ua) => - isNone(ua) ? init : predicate(ua.value) ? [ua, none] : [none, ua]; -} - -/** - * Map and partition over the inner value of an Option at the same time. If - * the option passed is None then the result is [None, None], otherwise Right - * will result in [Some, None], and Left will result in [None, Some]. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * import * as E from "./either.ts"; - * - * const partitioner = (n: number) => n > 0 ? E.right(n) : E.left(n * -1); - * const partitionMap = O.partitionMap(partitioner); - * - * const result1 = partitionMap(O.some(1)); // [Some(1), None] - * const result2 = partitionMap(O.some(-1)); // [None, Some(1)] - * const result3 = partitionMap(O.none); // [None, None] - * ``` - * - * @since 2.0.0 - */ -export function partitionMap( - fai: (a: A) => Either, -): (ua: Option) => Pair, Option> { - type Output = Pair, Option>; - const init: Output = [none, none]; - return (ua) => { - if (isNone(ua)) { - return init; - } - const result = fai(ua.value); - return result.tag === "Right" - ? [some(result.right), none] - : [none, some(result.left)]; - }; -} - -/** - * Reduce over an Option. Since an Option contains at most one value this - * function operates a lot like getOrElse. If the passed option is None then it - * returns the initial value, otherwise the foldr function is called with both - * the initial value and the inner A. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * - * const fold = O.fold((n: number, m: number) => n + m, 0); - * - * const result1 = fold(O.some(1)); // 1 - * const result2 = fold(O.none); // 0 - * ``` - * - * @since 2.0.0 - */ -export function fold( - foldr: (accumulator: O, current: A) => O, - initial: O, -): (ua: Option) => O { - return (ua) => isSome(ua) ? foldr(initial, ua.value) : initial; -} - -/** - * Traverse over an Option using the supplied Applicable. This allows one to - * turn an Option into Kind>. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * import * as A from "./array.ts"; - * import { pipe } from "./fn.ts"; - * - * const toRange = (n: number) => A.range(n); - * const traverse = pipe(toRange, O.traverse(A.ApplicableArray)); - * - * const result1 = traverse(O.some(3)); // [Some(0), Some(1), Some(2)]; - * const result2 = traverse(O.none); // [None] - * ``` - * - * @since 2.0.0 - */ -export function traverse( - A: Applicable, -): ( - favi: (a: A) => $, -) => (ta: Option) => $, J, K], [L], [M]> { - return ( - favi: (a: A) => $, - ): (ta: Option) => $, J, K], [L], [M]> => - match( - () => A.wrap(constNone()), - (a) => pipe(favi(a), A.map(some)), - ); -} - -/** - * Create an instance of Showable for Option given an instance of Showable for A. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * - * const Showable = O.getShowableOption({ show: (n: number) => n.toString() }); // Showable> - * - * const result1 = Showable.show(O.some(1)); // "Some(1)" - * const result2 = Showable.show(O.none); // "None" - * ``` - * - * @since 2.0.0 - */ -export function getShowableOption( - { show }: Showable, -): Showable> { - return ({ - show: (ma) => (isNone(ma) ? "None" : `${"Some"}(${show(ma.value)})`), - }); -} - -/** - * Create an instance of Comparable> given an instance of Comparable. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * import * as N from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const { compare } = O.getComparableOption(N.ComparableNumber); - * - * const result1 = pipe(O.some(1), compare(O.some(2))); // false - * const result2 = pipe(O.some(1), compare(O.some(1))); // true - * const result3 = pipe(O.none, compare(O.none)); // true - * const result4 = pipe(O.some(1), compare(O.none)); // false - * ``` - * - * @since 2.0.0 - */ -export function getComparableOption( - { compare }: Comparable, -): Comparable> { - return fromCompare((second) => (first) => - isSome(first) && isSome(second) - ? compare(second.value)(first.value) - : isNone(first) && isNone(second) - ); -} - -/** - * Create an instance of Sortable> given an instance of Sortable. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * import * as N from "./number.ts"; - * - * const { sort } = O.getSortableOption(N.SortableNumber); - * - * const result1 = sort(O.some(1), O.some(2)); // 1 - * const result2 = sort(O.some(1), O.some(1)); // 0 - * const result3 = sort(O.none, O.none); // 0 - * const result4 = sort(O.none, O.some(1)); // -1 - * ``` - * - * @since 2.0.0 - */ -export function getSortableOption( - { sort }: Sortable, -): Sortable> { - return fromSort((fst, snd) => - isNone(fst) - ? isNone(snd) ? 0 : -1 - : isNone(snd) - ? 1 - : sort(fst.value, snd.value) - ); -} - -/** - * @since 2.0.0 - */ -export function getCombinableOption( - { combine }: Combinable, -): Combinable> { - return { - combine: (second) => (first) => - isNone(first) - ? second - : isNone(second) - ? first - : wrap(combine(second.value)(first.value)), - }; -} - -/** - * Create an instance of Initializable> given an instance of Initializable. - * - * @example - * ```ts - * import * as O from "./option.ts"; - * import * as N from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const { combine } = O.getInitializableOption(N.InitializableNumberSum); - * - * const result1 = pipe(O.some(1), combine(O.some(1))); // Some(2) - * const result2 = pipe(O.none, combine(O.some(1))); // Some(1) - * const result3 = pipe(O.some(1), combine(O.none)); // Some(1) - * ``` - * - * @since 2.0.0 - */ -export function getInitializableOption( - I: Initializable, -): Initializable> { - return ({ - init: () => some(I.init()), - ...getCombinableOption(I), - }); -} - -/** - * The canonical implementation of Applicable for Option. - * - * @since 2.0.0 - */ -export const ApplicableOption: Applicable = { wrap, map, apply }; - -/** - * The canonical implementation of Filterable for Option. - * - * @since 2.0.0 - */ -export const FilterableOption: Filterable = { - filter, - filterMap, - partition, - partitionMap, -}; - -/** - * The canonical implementation of Foldable for Option. - * - * @since 2.0.0 - */ -export const FoldableOption: Foldable = { fold }; - -/** - * The canonical implementation of Flatmappable for Option. - * - * @since 2.0.0 - */ -export const FlatmappableOption: Flatmappable = { - wrap, - map, - apply, - flatmap, -}; - -/** - * The canonical implementation of Mappable for Option. - * - * @since 2.0.0 - */ -export const MappableOption: Mappable = { map }; - -/** - * The canonical implementation of Traversable for Option. - * - * @since 2.0.0 - */ -export const TraversableOption: Traversable = { - map, - fold, - traverse, -}; - -/** - * The canonical implementation of Wrappable for Option. - * - * @since 2.0.0 - */ -export const WrappableOption: Wrappable = { wrap }; - -/** - * @since 2.0.0 - */ -export const tap = createTap(FlatmappableOption); - -/** - * @since 2.0.0 - */ -export const bind = createBind(FlatmappableOption); - -/** - * @since 2.0.0 - */ -export const bindTo = createBindTo(MappableOption); diff --git a/vendor/deno.land/x/fun@v2.0.0/pair.ts b/vendor/deno.land/x/fun@v2.0.0/pair.ts deleted file mode 100644 index 3dbdd2d..0000000 --- a/vendor/deno.land/x/fun@v2.0.0/pair.ts +++ /dev/null @@ -1,538 +0,0 @@ -/** - * Pair represents a pair of values. It can be thought of as a tuple - * of two, or first and second, or separated values. - * - * @module Pair - * @since 2.0.0 - */ - -import type { $, Kind, Out } from "./kind.ts"; -import type { Applicable } from "./applicable.ts"; -import type { Bimappable } from "./bimappable.ts"; -import type { Combinable } from "./combinable.ts"; -import type { Comparable } from "./comparable.ts"; -import type { Flatmappable } from "./flatmappable.ts"; -import type { Foldable } from "./foldable.ts"; -import type { Initializable } from "./initializable.ts"; -import type { Mappable } from "./mappable.ts"; -import type { Showable } from "./showable.ts"; -import type { Sortable } from "./sortable.ts"; -import type { Traversable } from "./traversable.ts"; - -import { createFlatmappable } from "./flatmappable.ts"; -import { dual } from "./combinable.ts"; -import { pipe } from "./fn.ts"; - -/** - * Pair represents a pair of values. This is - * equivalent to a Tuple of length two, the - * Separated type in fp-ts, and any other type - * that contains exactly two covariant other - * types. - * - * The primary use fo Pair in this library - * is the target of a partition, where some - * type A is partitioned, either into - * [A, A], or [A, B] where B extends A. - * - * Other uses will likely come when Arrows - * are implemented in fun. - * - * @since 2.0.0 - */ -export type Pair = readonly [A, B]; - -/** - * Specifies Pair as a Higher Kinded Type, with covariant - * parameters A and B corresponding to the 0th and 1st - * index of any Substitutions. - * - * @since 2.0.0 - */ -export interface KindPair extends Kind { - readonly kind: Pair, Out>; -} - -/** - * Creates a Pair from two values first and second with types - * A and B respectively. Used to quickly construct a Pair. - * - * @example - * ```ts - * import * as P from "./pair.ts"; - * - * const nameAndAge = P.pair("Brandon", 37); - * - * const name = P.getFirst(nameAndAge); // "Brandon" - * const age = P.getSecond(nameAndAge); // 37 - * ``` - * - * @since 2.0.0 - */ -export function pair(first: A, second: B): Pair { - return [first, second]; -} - -/** - * Creates a pair from a single type - * - * @example - * ```ts - * import { dup } from "./pair.ts"; - * - * const result = dup(1); // [1, 1] - * ``` - * - * @since 2.0.0 - */ -export function dup(a: A): Pair { - return pair(a, a); -} - -/** - * Apply a function in the first position of a pair to a value - * in the second position of a pair. - * - * @example - * ```ts - * import * as P from "./pair.ts"; - * import { flow } from "./fn.ts"; - * - * const double = flow( - * P.dup, - * P.map(n => (m: number) => n + m), - * P.merge, - * ); - * - * const result1 = double(1); // 2 - * const result2 = double(2); // 4 - * ``` - * - * @since 2.0.0 - */ -export function merge(ua: Pair<(a: A) => I, A>): I { - return ua[0](ua[1]); -} - -/** - * Apply a function in the first position of a pair to a value - * in the second position of a pair. - * - * @example - * ```ts - * import * as P from "./pair.ts"; - * import { flow } from "./fn.ts"; - * - * const double = flow( - * P.dup, - * P.mapSecond(n => (m: number) => n + m), - * P.mergeSecond, - * ); - * - * const result1 = double(1); // 2 - * const result2 = double(2); // 4 - * ``` - * - * @since 2.0.0 - */ -export function mergeSecond(ua: Pair I>): I { - return ua[1](ua[0]); -} - -/** - * Extracts the first value from a Pair. - * - * @example - * ```ts - * import * as P from "./pair.ts"; - * import { pipe } from "./fn.ts"; - * - * const shouldBe1 = pipe( - * P.pair(1, 2), - * P.getFirst - * ); // 1 - * ``` - * - * @since 2.0.0 - */ -export function getFirst([first]: Pair): A { - return first; -} - -/** - * Extracts the second value from a Pair. - * - * @example - * ```ts - * import * as P from "./pair.ts"; - * import { pipe } from "./fn.ts"; - * - * const shouldBe2 = pipe( - * P.pair(1, 2), - * P.getSecond - * ); // 2 - * ``` - * - * @since 2.0.0 - */ -export function getSecond([_, second]: Pair): B { - return second; -} - -/** - * A curried form of the pair constructor, starting with the first - * value of a pair. - * - * @example - * ```ts - * import * as P from "./pair.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * 37, - * P.first("Brandon"), - * P.mapSecond(n => n + 1), - * ); // ["Brandon", 38] - * ``` - * - * @since 2.0.0 - */ -export function first(first: A): (second: B) => Pair { - return (second) => pair(first, second); -} - -/** - * A curried form of the pair constructor, starting with the second - * value of a pair. - * - * @example - * ```ts - * import * as P from "./pair.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * 37, - * P.second("Brandon"), - * P.map(n => n + 1), - * ); // [38, "Brandon"] - * ``` - * - * @since 2.0.0 - */ -export function second(second: B): (first: A) => Pair { - return (first) => pair(first, second); -} - -/** - * Creates a new Pair with the first and second values swapped. - * - * @example - * ```ts - * import * as P from "./pair.ts"; - * import { pipe } from "./fn.ts"; - * - * const shouldBe2 = pipe( - * P.pair(1, 2), - * P.swap, - * P.first - * ); // 2 - * ``` - * - * @since 2.0.0 - */ -export function swap([first, second]: Pair): Pair { - return pair(second, first); -} - -/** - * Creates a new Pair with the same second value and a new first - * value determined by the output of the fai function. - * - * @example - * ```ts - * import * as P from "./pair.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * P.pair(1, 2), - * P.map(String), - * ); // ['1', 2] - * ``` - * - * @since 2.0.0 - */ -export function map( - fai: (a: A) => I, -): (ta: Pair) => Pair { - return ([first, second]) => pair(fai(first), second); -} - -/** - * Creates a new Pair with the same first value and a new second - * value determined by the output of the fbj function. - * - * @example - * ```ts - * import * as P from "./pair.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * P.pair(1, 2), - * P.mapSecond(String), - * ); // [1, '2'] - * ``` - * - * @since 2.0.0 - */ -export function mapSecond( - fbj: (a: B) => J, -): (ta: Pair) => Pair { - return ([first, second]) => pair(first, fbj(second)); -} - -/** - * Creates a new pair by mapping first through the fai - * function and second through the fbj function. - * - * @example - * ```ts - * import * as P from "./pair.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * P.pair(1, 2), - * P.bimap(String, n => n + 1), - * ); // ['1', 3] - * ``` - * - * @since 2.0.0 - */ -export function bimap( - fbj: (b: B) => J, - fai: (a: A) => I, -): (ta: Pair) => Pair { - return ([first, second]) => pair(fai(first), fbj(second)); -} - -/** - * Just like the first function, unwrap returns the first - * value in a pair. - * - * @example - * ```ts - * import { pair, unwrap } from "./pair.ts"; - * - * const result = unwrap(pair(1, 2)); // 1 - * ``` - * - * @since 2.0.0 - */ -export function unwrap([first]: Pair): A { - return first; -} - -/** - * Reduces a pair with an initial value, also passing - * the second value into the foldr as well. - * - * @example - * ```ts - * import { pair, fold } from "./pair.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * pair(10, 20), - * fold(Math.max, Number.NEGATIVE_INFINITY), - * ); // 20 - * ``` - * - * @since 2.0.0 - */ -export function fold( - foao: (acc: O, first: A, second: B) => O, - initial: O, -): (ua: Pair) => O { - return ([first, second]) => foao(initial, first, second); -} - -/** - * Traverse a pair using another algebraic structure's Applicable. - * - * @example - * ```ts - * import { traverse, pair } from "./pair.ts"; - * import { some, ApplicableOption, fromPredicate } from "./option.ts"; - * import { pipe } from "./fn.ts"; - * - * const traverseOption = traverse(ApplicableOption); - * const startsWithB = fromPredicate( - * (name: string) => name.startsWith("B") - * ); - * - * const result1 = pipe( - * pair("Brandon", 37), - * traverseOption(startsWithB), - * ); // { tag: "Some", value: ["Brandon", 37] } - * - * const result2 = pipe( - * pair("Alice", 37), - * traverseOption(startsWithB), - * ); // { tag: "None" } - * ``` - * - * @since 2.0.0 - */ -export function traverse(A: Applicable) { - return ( - favi: (a: A) => $, - ): (ua: Pair) => $, J, K], [L], [M]> => - ([fst, snd]) => - pipe( - favi(fst), - A.map(second(snd)), - ); -} - -/** - * Creates a Showable instance for a pair, wrapping the Showable instances provided - * for the first and second values. - * - * @since 2.0.0 - */ -export function getShowablePair( - SA: Showable, - SB: Showable, -): Showable> { - return { - show: ([first, second]) => `Pair(${SA.show(first)}, ${SB.show(second)})`, - }; -} - -/** - * @since 2.0.0 - */ -export function getCombinablePair( - CA: Combinable, - CB: Combinable, -): Combinable> { - return { - combine: (second) => (first) => [ - CA.combine(second[0])(first[0]), - CB.combine(second[1])(first[1]), - ], - }; -} - -/** - * @since 2.0.0 - */ -export function getInitializablePair( - IA: Initializable, - IB: Initializable, -): Initializable> { - return { - init: () => [IA.init(), IB.init()], - ...getCombinablePair(IA, IB), - }; -} - -/** - * @since 2.0.0 - */ -export function getComparablePair( - CA: Comparable, - CB: Comparable, -): Comparable> { - return { - compare: (second) => (first) => - CA.compare(second[0])(first[0]) && CB.compare(second[1])(first[1]), - }; -} - -/** - * @since 2.0.0 - */ -export function getSortablePair( - SA: Sortable, - SB: Sortable, -): Sortable> { - return ({ - sort: (first, second) => { - const oa = SA.sort(first[0], second[0]); - return oa === 0 ? SB.sort(first[1], second[1]) : oa; - }, - }); -} - -/** - * A Kind implementation used to fix the second parameter in a Pair. - * Otherwise it operates the same as Pair does. - * - * @since 2.0.0 - */ -export interface KindRightPair extends Kind { - readonly kind: Pair, B>; -} - -/** - * Creates a Flatmappable instance for Pair where the second parameter is - * concatenated according to the Monoid instance passed in. - * - * @example - * ```ts - * import { InitializableNumberSum } from "./number.ts"; - * import { getRightFlatmappable, pair } from "./pair.ts"; - * import { pipe } from "./fn.ts"; - * - * const Flatmappable = getRightFlatmappable(InitializableNumberSum); - * - * const ageOneYear = (name: string) => pair(name, 1); - * - * const result = pipe( - * pair("Brandon", 36), // Pair(Name, Age) - * Flatmappable.flatmap(ageOneYear), - * Flatmappable.flatmap(ageOneYear) - * ); // ["Brandon", 38] - * ``` - * - * @since 2.0.0 - */ -export function getRightFlatmappable( - I: Initializable, -): Flatmappable> { - const { combine } = dual(I); - return createFlatmappable>({ - wrap: (a) => pair(a, I.init()), - flatmap: (fati) => ([first, second]) => - pipe(fati(first), mapSecond(combine(second))), - }); -} - -/** - * The canonical Mappable instance for Pair. Contains the - * map method. - * - * @since 2.0.0 - */ -export const MappablePair: Mappable = { map }; - -/** - * The canonical Bimappable instance for Pair. Contains the - * bimap and mapSecond methods. - * - * @since 2.0.0 - */ -export const BimappablePair: Bimappable = { mapSecond, map }; - -/** - * The canonical Foldable instance for Pair. Contains the - * fold method. - * - * @since 2.0.0 - */ -export const FoldablePair: Foldable = { fold }; - -/** - * @since 2.0.0 - */ -export const TraversablePair: Traversable = { map, fold, traverse }; diff --git a/vendor/deno.land/x/fun@v2.0.0/predicate.ts b/vendor/deno.land/x/fun@v2.0.0/predicate.ts deleted file mode 100644 index 618d50e..0000000 --- a/vendor/deno.land/x/fun@v2.0.0/predicate.ts +++ /dev/null @@ -1,239 +0,0 @@ -/** - * The Predicate type represents unary functions that return boolean values. - * Typically, these functions indicate the existence of some quality for the - * values passed as inputs. Some simple examples of Predicates are postive for - * numbers, non-null values, etc. - * - * @module Predicate - * @since 2.0.0 - */ - -import type { In, Kind } from "./kind.ts"; -import type { Combinable } from "./combinable.ts"; -import type { Initializable } from "./initializable.ts"; - -import { flow } from "./fn.ts"; - -/** - * The Predicate type is a function that takes some - * value of type A and returns boolean, indicating - * that a property is true or false for the value A. - * - * @example - * ```ts - * import type { Predicate } from "./predicate.ts"; - * import * as O from "./option.ts"; - * - * function fromPredicate(predicate: Predicate) { - * return (a: A): O.Option => predicate(a) - * ? O.some(a) : O.none; - * } - * - * function isPositive(n: number): boolean { - * return n > 0; - * } - * - * const isPos = fromPredicate(isPositive); - * - * const resultSome = isPos(1); // Some(1) - * const resultNone = isPos(-1); // None - * ``` - * - * @since 2.0.0 - */ -export type Predicate = (a: A) => boolean; - -/** - * Specifies Predicate as a Higher Kinded Type, with - * contravariant parameter A corresponding to the 0th - * index of any Substitutions. - * - * @since 2.0.0 - */ -export interface KindPredicate extends Kind { - readonly kind: Predicate>; -} - -/** - * Create a Predicate using a Predicate and a function that takes - * a type L and returns a type D. This maps over the input value of - * the predicate. - * - * @example - * ```ts - * import { premap } from "./predicate.ts"; - * import { pipe } from "./fn.ts"; - * - * const isGreaterThan3 = (n: number) => n > 3; - * const isLongerThan3 = pipe( - * isGreaterThan3, - * premap((s: string) => s.length), - * ); - * - * const result1 = isLongerThan3("Hello"); // true - * const result2 = isLongerThan3("Hi"); // false - * ``` - * - * @since 2.0.0 - */ -export function premap( - fia: (i: I) => A, -): (ua: Predicate) => Predicate { - return (ua) => flow(fia, ua); -} - -/** - * Negates the result of an existing Predicate. - * - * @example - * ```ts - * import { not } from "./predicate.ts"; - * - * const isPositive = (n: number) => n > 0; - * const isZeroOrNegative = not(isPositive); - * - * const result1 = isZeroOrNegative(1); // false - * const result2 = isZeroOrNegative(0); // true - * const result3 = isZeroOrNegative(-1); // true - * ``` - * - * @since 2.0.0 - */ -export function not(predicate: Predicate): Predicate { - return (a) => !predicate(a); -} - -/** - * Creates the union of two predicates, returning true if either - * predicate returns true. - * - * @example - * ```ts - * import { or } from "./predicate.ts"; - * import { string, number } from "./refinement.ts"; - * import { pipe } from "./fn.ts"; - * - * // A Refinement is also a Predicate - * const stringOrNumber = pipe( - * string, - * or(number), - * ); - * - * const result1 = stringOrNumber("Hello"); // true - * const result2 = stringOrNumber(1); // true - * const result3 = stringOrNumber({}); // false - * ``` - * - * @since 2.0.0 - */ -export function or(second: Predicate) { - return (first: Predicate): Predicate => (a) => first(a) || second(a); -} - -/** - * Creates the intersection of two predicates, returning true if both - * predicates return true. - * - * @example - * ```ts - * import { and } from "./predicate.ts"; - * import { pipe } from "./fn.ts"; - * - * const isPositive = (n: number) => n > 0; - * const isInteger = (n: number) => Number.isInteger(n); - * - * const isPositiveInteger = pipe( - * isPositive, - * and(isInteger), - * ); - * - * const result1 = isPositiveInteger(1); // true - * const result2 = isPositiveInteger(100); // true - * const result3 = isPositiveInteger(-1); // false - * ``` - * - * @since 2.0.0 - */ -export function and(second: Predicate) { - return (first: Predicate): Predicate => (a) => first(a) && second(a); -} - -/** - * @since 2.0.0 - */ -export function getCombinableAny(): Combinable> { - return { combine: or }; -} - -/** - * @since 2.0.0 - */ -export function getCombinableAll(): Combinable> { - return { combine: and }; -} - -/** - * Get a Initializable> for any type A that combines using the - * Predicate or function. - * - * @example - * ```ts - * import { getInitializableAny } from "./predicate.ts"; - * import { pipe } from "./fn.ts"; - * - * const { combine } = getInitializableAny(); - * - * const lessThanZero = (n: number) => n < 0; - * const greaterThanFifty = (n: number) => n > 50; - * - * const notBetweenZeroAndFifty = pipe( - * lessThanZero, - * combine(greaterThanFifty), - * ); - * - * const result1 = notBetweenZeroAndFifty(10); // false - * const result2 = notBetweenZeroAndFifty(-10); // true - * const result3 = notBetweenZeroAndFifty(100); // true - * ``` - * - * @since 2.0.0 - */ -export function getInitializableAny(): Initializable> { - return { - combine: or, - init: () => () => false, - }; -} - -/** - * Get a Initializable> for any type A that combines using the - * Predicate and function. - * - * @example - * ```ts - * import { getInitializableAll } from "./predicate.ts"; - * import { pipe } from "./fn.ts"; - * - * const { combine } = getInitializableAll(); - * - * const greaterThanZero = (n: number) => n > 0; - * const lessThanFifty = (n: number) => n < 50; - * - * const betweenZeroAndFifty = pipe( - * greaterThanZero, - * combine(lessThanFifty) - * ); - * - * const result1 = betweenZeroAndFifty(10); // true - * const result2 = betweenZeroAndFifty(-10); // false - * const result3 = betweenZeroAndFifty(100); // false - * ``` - * - * @since 2.0.0 - */ -export function getInitializableAll(): Initializable> { - return { - combine: and, - init: () => () => true, - }; -} diff --git a/vendor/deno.land/x/fun@v2.0.0/premappable.ts b/vendor/deno.land/x/fun@v2.0.0/premappable.ts deleted file mode 100644 index 2c18d40..0000000 --- a/vendor/deno.land/x/fun@v2.0.0/premappable.ts +++ /dev/null @@ -1,27 +0,0 @@ -/** - * Premappable is a structure that allows a function to be applied - * contravariantly inside of the associated concrete structure. - * - * @module Premappable - * @since 2.0.0 - */ - -import type { $, Hold, Kind } from "./kind.ts"; -import type { Mappable } from "./mappable.ts"; - -/** - * A Premappable structure has the method premap. - * - * @since 2.0.0 - */ -export interface Premappable extends Mappable, Hold { - readonly premap: ( - fia: (l: L) => D, - ) => (ua: $) => $; - readonly dimap: ( - fld: (l: L) => D, - fai: (a: A) => I, - ) => ( - ua: $, - ) => $; -} diff --git a/vendor/deno.land/x/fun@v2.0.0/record.ts b/vendor/deno.land/x/fun@v2.0.0/record.ts deleted file mode 100644 index 37108d0..0000000 --- a/vendor/deno.land/x/fun@v2.0.0/record.ts +++ /dev/null @@ -1,1050 +0,0 @@ -/** - * ReadonlyRecord is a readonly product structure that operates - * like a Map. Keys are always strings and Key/Value pairs - * can be added and removed arbitrarily. The ReadonlyRecord - * type in fun favors immutability. - * - * @module ReadonlyRecord - * @since 2.0.0 - */ - -// deno-lint-ignore-file no-explicit-any - -import type { $, AnySub, Intersect, Kind, Out } from "./kind.ts"; -import type { Applicable } from "./applicable.ts"; -import type { Combinable } from "./combinable.ts"; -import type { Comparable } from "./comparable.ts"; -import type { Either } from "./either.ts"; -import type { Filterable } from "./filterable.ts"; -import type { Foldable } from "./foldable.ts"; -import type { Initializable } from "./initializable.ts"; -import type { Mappable } from "./mappable.ts"; -import type { Option } from "./option.ts"; -import type { Pair } from "./pair.ts"; -import type { Showable } from "./showable.ts"; -import type { Traversable } from "./traversable.ts"; - -import { isRight } from "./either.ts"; -import { isSome, none, some } from "./option.ts"; -import { pair } from "./pair.ts"; -import { identity, pipe, uncurry2 } from "./fn.ts"; - -/** - * ReadonlyRecord is an alias of Readonly>. - * It's meant to be used wherever a Record can be used. - * - * @since 2.0.0 - */ -export type ReadonlyRecord = Readonly>; - -/** - * A type used to constrain an input to a ReadonlyRecord with any values. - * - * @since 2.0.0 - */ -export type AnyReadonlyRecord = ReadonlyRecord; - -/** - * Extract the inner type of a ReadonlyRecord - * - * @since 2.0.0 - */ -export type TypeOf = T extends ReadonlyRecord ? A : never; - -/** - * NonEmptyRecord is a bounding type that will - * return a type level never if the type value of R is - * either not a record is a record without any - * index or key values. - * - * @example - * ``` - * import type { NonEmptyRecord } from "./record.ts"; - * - * function doSomething(_: NonEmptyRecord): void { - * return undefined; - * } - * - * const result = doSomething({ one: 1 }); // This is ok - * // const result2 = doSomethign({}); // This is a type error - * ``` - * - * @since 2.0.0 - */ -export type NonEmptyRecord = keyof R extends never ? never : R; - -/** - * Specifies ReadonlyRecord as a Higher Kinded Type, with covariant - * parameter A corresponding to the 0th index of any substitutions. - * - * @since 2.0.0 - */ -export interface KindReadonlyRecord extends Kind { - readonly kind: ReadonlyRecord>; -} - -/** - * An alias of Object.entries - * - * @example - * ```ts - * import * as R from "./record.ts"; - * - * const data: R.ReadonlyRecord = { - * hello: "world", - * foo: "bar", - * }; - * - * // [["hello", "world"], ["foo", "bar"]] - * const result1 = R.entries(data); - * const result2 = R.entries({}); // [] - * ``` - * - * @since 2.0.0 - */ -export function entries(ua: ReadonlyRecord): ReadonlyArray<[string, A]> { - return Object.entries(ua); -} - -/** - * An alias of Object.keys specific to ReadonlyRecord. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * - * const data: R.ReadonlyRecord = { - * hello: "world", - * foo: "bar", - * }; - * - * const result1 = R.keys(data); // ["hello", "foo"] - * const result2 = R.keys({}); // [] - * ``` - * - * @since 2.0.0 - */ -export function keys(ua: ReadonlyRecord): ReadonlyArray { - return Object.keys(ua); -} - -/** - * Omit specified `keys` from a `record`. Value-space implementation of the - * [`Omit`](https://www.typescriptlang.org/docs/handbook/utility-types.html#omittype-keys) - * utility type. - * - * @example - * ```ts - * import { omit } from "./record.ts"; - * omit("a", "c")({ a: 1, b: 2 }) // { b: 2 } - * ``` - * - * @since 2.0.0 - */ -export function omit( - ...keys: K -): (record: T) => Omit { - return (record: T) => { - const output = { ...record }; - for (const key of keys as unknown as (keyof typeof output)[]) { - delete output[key]; - } - return output; - }; -} - -/** - * Picks specified `keys` from a `record`. Value-space implemenuation of the - * [`Pick`](https://www.typescriptlang.org/docs/handbook/utility-types.html#picktype-keys) - * utility type. - * - * @example - * ```ts - * import { pipe } from "./fn.ts"; - * import { pick } from "./record.ts"; - * - * pipe({ a: 1, b: 2, c: 3 }, pick("a", "b")) - * // { a: 1, b: 2 } - * ``` - * - * @since 2.0.0 - */ -export function pick, K extends keyof T>( - ...keys: readonly K[] -): (record: T) => Pick { - return (record) => { - const output = {} as Pick; - for (const key of keys) { - if (key in record) { - output[key] = record[key]; - } - } - return output; - }; -} - -/** - * Creates a new object with the same keys of `ua`. Values are transformed - * using `fai`. - * - * @example - * ```ts - * import { map } from "./record.ts" - * map((n: number) => n + 1)({ a: 1 }); // { a: 2 } - * ``` - * - * @since 2.0.0 - */ -export function map( - fai: (a: A, i: string) => I, -): (ua: ReadonlyRecord) => ReadonlyRecord { - return (ua) => { - const out = {} as Record; - for (const [key, entry] of Object.entries(ua) as [string, A][]) { - out[key] = fai(entry, key); - } - return out; - }; -} - -/** - * Collect all of the A values in a ReadonlyRecord into a single - * O value by the process of reduction. The order of key/value pairs - * in this reduction are stable and determined by ecmascript standard - * [here](https://262.ecma-international.org/8.0/#sec-enumerate-object-properties). - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * { one: 1, two: 2 }, - * R.fold((sum, value) => sum + value, 0), - * ); // 3 - * ``` - * - * @since 2.0.0 - */ -export function fold( - foao: (o: O, a: A, i: string) => O, - o: O, -) { - return (rec: ReadonlyRecord): O => { - let result = o; - for (const key in rec) { - result = foao(result, rec[key], key); - } - return result; - }; -} - -/** - * Collect all values in a ReadonlyRecord into a single - * value I by using a Combinable and a mapping function - * from A to I. This is effectively fold using a Combinable - * for the initial value. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { InitializableNumberSum } from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const collectSum = R.collect(InitializableNumberSum); - * const collectLengths = collectSum((s: string) => s.length); - * - * const result = collectLengths({ one: "one", two: "two" }); // 6 - * ``` - * - * @since 2.0.0 - */ -export function collect( - M: Initializable, -): (fai: (a: A, index: string) => I) => (ua: ReadonlyRecord) => I { - return (fai: (a: A, index: string) => I) => { - const foldr = fold( - (i, a: A, index) => M.combine(fai(a, index))(i), - M.init(), - ); - return (ua: ReadonlyRecord) => foldr(ua); - }; -} - -/** - * Collect all values in a ReadonlyRecord into a single - * value I by using a Combinable. This is effectively fold - * using a Combinable for the initial value and combination. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { InitializableNumberSum } from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * { one: 1, two: 2, three: 3 }, - * R.collapse(InitializableNumberSum), - * ); // 6 - * ``` - * - * @since 2.0.0 - */ -export function collapse( - M: Initializable, -): (ua: ReadonlyRecord) => A { - return fold(uncurry2(M.combine), M.init()); -} - -/** - * Traverse a ReadonlyRecord, mapping each A into an - * algebraic data type V (so V), then collecting each - * I in V back into a ReadonlyRecord, ultimately - * returning V>. In more concrete terms - * this can take ReadonlyRecord> and return - * Option> (or any other inner type. - * - * Traverse, in general, is much like reducing and collecting - * over the outer and inner types of an ADT at the same time. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import * as O from "./option.ts"; - * import { pipe } from "./fn.ts"; - * - * const traverseOption = R.traverse(O.ApplicableOption); - * const swapOption = traverseOption((o: O.Option) => o); - * - * const result1 = swapOption({ one: O.some(1), two: O.some(2) }); - * // Some({ one: 1, two: 2 }); - * const result2 = swapOption({ one: O.some(1), two: O.none }); // None - * ``` - * - * TODO: Revisit because mutability is bad here - * @since 2.0.0 - */ -export function traverse( - A: Applicable, -): ( - favi: (value: A, key: string) => $, -) => (ua: ReadonlyRecord) => $, J, K], [L], [M]> { - // We include a copy of the type parameters here to make the implementation - // type safe. - return ( - favi: (a: A, i: string) => $, - ): (ua: ReadonlyRecord) => $, J, K], [L], [M]> => { - // Mutably pushes an i into is at key - const pusher = (key: string) => - (is: Record) => - ( - i: I, - ): Record => ({ ...is, [key]: i }); - // Interior mutability is used to increase perf - const foldr = ( - vis: $, J, K], [L], [M]>, - a: A, - key: string, - ): $, J, K], [L], [M]> => - pipe( - vis, - A.map(pusher(key)), - A.apply(favi(a, key)), - ); - - return (ua) => pipe(ua, fold(foldr, A.wrap({}))); - }; -} - -/** - * The Sequence inverts a tuple of substitutions over V into V containing a - * tuple of inferred values of the substitution. - * - * ie. - * [Option, Option] - * becomes - * Option<[number, string]> - * - * or - * - * [Either Either] - * becomes - * Either - */ -// deno-fmt-ignore -type Sequence>> = $ ? A : never; }, - { [K in keyof R]: R[K] extends $ ? B : never; }[keyof R], - { [K in keyof R]: R[K] extends $ ? C : never; }[keyof R], - ], [ - Intersect< { [K in keyof R]: R[K] extends $ ? D : never; }[keyof R] >, - ], [ - Intersect< { [K in keyof R]: R[K] extends $ ? E : never; }[keyof R] >, - ] ->; - -/** - * Sequence over an ReadonlyRecord of type V, inverting the relationship between V and - * ReadonlyRecord. This function also keeps the indexed types of in each V at - * covariant position 0. In other words sequence over [Option, - * Option] becomes Option<[number, string]>. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import * as O from "./option.ts"; - * - * const sequence = R.sequence(O.ApplicableOption); - * - * const result1 = sequence({ one: O.some(1), two: O.some("Hello")}); // Some({ one: 1, two: "Hello"}) - * const result2 = sequence({ one: O.none, two: O.some("Uh Oh")}); // None - * ``` - * - * @since 2.0.0 - */ -export function sequence( - A: Applicable, -): >>( - values: NonEmptyRecord, -) => Sequence { - const sequence = traverse(A)(identity as any); - return >>( - vs: NonEmptyRecord, - ): Sequence => sequence(vs) as Sequence; -} - -/** - * Insert a value A into a ReadonlyRecord at the key location. If the value - * inserted has object equality with the current value in the record then - * no change is made and the original record is returned. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { pipe } from "./fn.ts"; - * - * const insert = R.insert(1); - * - * const result1 = pipe( - * { one: 1, two: 2 }, - * insert('one'), - * ); // No Mutation, returns original object - * const result2 = pipe( - * { two: 2 }, - * insert('one'), - * ); // { one: 1, two: 2 } - * ``` - * - * @since 2.0.0 - */ -export function insert(value: A) { - return (key: string) => (rec: ReadonlyRecord): ReadonlyRecord => - rec[key] === value ? rec : { ...rec, [key]: value }; -} - -/** - * Insert a value A into a ReadonlyRecord at the key location. If the value - * inserted has object equality with the current value in the record then - * no change is made and the original record is returned. This is the same - * function as insert but with the order of parameters swapped - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { pipe } from "./fn.ts"; - * - * const atOne = R.insertAt('one'); - * - * const result1 = pipe( - * { one: 1, two: 2 }, - * atOne(1), - * ); // No Mutation, returns original object - * const result2 = pipe( - * { two: 2 }, - * atOne(1), - * ); // { one: 1, two: 2 } - * ``` - * - * @since 2.0.0 - */ -export function insertAt(key: string) { - return (value: A) => (rec: ReadonlyRecord): ReadonlyRecord => - rec[key] === value ? rec : { ...rec, [key]: value }; -} - -/** - * Modify a value A into a ReadonlyRecord at the key location. If the - * object does not hold the specified key then no change is made. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { pipe } from "./fn.ts"; - * - * const addOne = R.modify((n: number) => n + 1); - * - * const result1 = pipe( - * { one: 1, two: 2 }, - * addOne('one'), - * ); // { one: 2, two: 2 } - * const result2 = pipe( - * { two: 2 }, - * addOne('one') - * ); // { two: 2 } - * ``` - * - * @since 2.0.0 - */ -export function modify(modifyFn: (a: A) => A) { - return (key: string) => (rec: ReadonlyRecord): ReadonlyRecord => { - if (Object.hasOwn(rec, key)) { - const out = modifyFn(rec[key]); - return out === rec[key] ? rec : { ...rec, [key]: out }; - } - return rec; - }; -} - -/** - * Modify a value A into a ReadonlyRecord at the key location. If the - * object does not hold the specified key then no change is made. This - * is the same function as modify with the order of parameters flipped. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { pipe } from "./fn.ts"; - * - * const inc = (n: number) => n + 1; - * const atOne = R.modifyAt('one'); - * - * const result1 = pipe( - * { one: 1, two: 2 }, - * atOne(inc), - * ); // { one: 2, two: 2 } - * const result2 = pipe( - * { two: 2 }, - * atOne(inc), - * ); // { two: 2 } - * ``` - * - * @since 2.0.0 - */ -export function modifyAt(key: string) { - return (modifyFn: (a: A) => A) => - (rec: ReadonlyRecord): ReadonlyRecord => { - if (Object.hasOwn(rec, key)) { - const out = modifyFn(rec[key]); - return out === rec[key] ? rec : { ...rec, [key]: out }; - } - return rec; - }; -} - -/** - * Update a ReadonlyRecord at key with a value A. The record will only be - * updated if it already holds the specified key, otherwise no changes are - * made. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { pipe } from "./fn.ts"; - * - * const to2 = R.update(2); - * - * const result1 = pipe( - * { one: 1, two: 2 }, - * to2('one'), - * ); // { one: 2, two: 2 } - * const result2 = pipe( - * { two: 2 }, - * to2('one'), - * ); // No change { two: 2 } - * ``` - * - * @since 2.0.0 - */ -export function update(value: A) { - return (key: string) => (rec: ReadonlyRecord): ReadonlyRecord => - Object.hasOwn(rec, key) ? { ...rec, [key]: value } : rec; -} - -/** - * Update a ReadonlyRecord at key with a value A. The record will only be - * updated if it already holds the specified key, otherwise no changes are - * made. This function does the same as update but has the parameters - * switched in order - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { pipe } from "./fn.ts"; - * - * const atOne = R.updateAt('one'); - * - * const result1 = pipe( - * { one: 1, two: 2 }, - * atOne(2), - * ); // { one: 2, two: 2 } - * const result2 = pipe( - * { two: 2 }, - * atOne(2), - * ); // No change { two: 2 } - * ``` - * - * @since 2.0.0 - */ -export function updateAt(key: string) { - return (value: A) => (rec: ReadonlyRecord): ReadonlyRecord => - Object.hasOwn(rec, key) ? { ...rec, [key]: value } : rec; -} - -/** - * Lookup the value at key. Returns an Option, where None indicates - * that the record does not hold the key. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { pipe } from "./fn.ts"; - * - * const result1 = pipe( - * { one: 1, two: 2 }, - * R.lookupAt('one'), - * ); // Some(1) - * const result2 = pipe( - * { one: 1, two: 2 }, - * R.lookupAt('three'), - * ); // None - * ``` - * - * @since 2.0.0 - */ -export function lookupAt(key: string) { - return (rec: ReadonlyRecord): Option => - Object.hasOwn(rec, key) ? some(rec[key]) : none; -} - -/** - * Lookup the value in a record at key and return an optional - * pair with the key and the value if the record holds the key. - * Returns None if the record does not hold the key. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { pipe } from "./fn.ts"; - * - * const result1 = pipe( - * { one: 1, two: 2 }, - * R.lookupWithKey('one'), - * ); // Some(['one', 1]) - * const result2 = pipe( - * { one: 1, two: 2 }, - * R.lookupWithKey('three'), - * ); // None - * ``` - * - * @since 2.0.0 - */ -export function lookupWithKey(key: string) { - return (record: ReadonlyRecord): Option> => { - if (Object.hasOwn(record, key)) { - return some([key, record[key]]); - } - return none; - }; -} - -/** - * Remove the value and key at key from a ReadonlyRecord. If the - * record does not hold the key then no change is made and the - * original record is returned. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { pipe } from "./fn.ts"; - * - * const result1 = pipe( - * { one: 1, two: 2 }, - * R.deleteAt('one'), - * ); // { two: 2 } - * const result2 = pipe( - * { two: 2 }, - * R.deleteAt('one'), - * ); // No Change { two: 2 } - * - * ``` - * - * @since 2.0.0 - */ -export function deleteAt(key: string) { - return ( - rec: ReadonlyRecord, - ): ReadonlyRecord => { - if (Object.hasOwn(rec, key)) { - const out = { ...rec }; - delete out[key]; - return out; - } - return rec; - }; -} - -/** - * Remove the key from the ReadonlyRecord, returning a pair containing - * the new record and an Option containing the removed key value. If - * the record did not hold the specified key then this is a non-op and - * the return will be the original record and none. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { pipe } from "./fn.ts"; - * - * const result1 = pipe( - * { one: 1, two: 2 }, - * R.deleteAtWithValue('one'), - * ); // [{ two: 2 }, Some(1)] - * const result2 = pipe( - * { one: 1, two: 2 }, - * R.deleteAtWithValue('three'), - * ); // [{ one: 1, two: 2}, None] - * ``` - * - * @since 2.0.0 - */ -export function deleteAtWithValue(key: string) { - return ( - rec: ReadonlyRecord, - ): Pair, Option> => { - if (Object.hasOwn(rec, key)) { - const out = { ...rec }; - const value = rec[key]; - delete out[key]; - return [out, some(value)]; - } - return [rec, none]; - }; -} - -/** - * Given an instance of Comparable for the values in a ReadonlyRecord - * return a curried function `second => first => boolean` that returns - * true when first is a subrecord of second. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { ComparableNumber } from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const first = { one: 1, two: 2 }; - * const second = { one: 1, two: 2, three: 3 }; - * const isSub = R.isSubrecord(ComparableNumber); - * - * const result1 = pipe( - * first, - * isSub(second), - * ); // true - * const result2 = pipe( - * second, - * isSub(first), - * ); // false - * ``` - * - * @since 2.0.0 - */ -export function isSubrecord( - S: Comparable, -): (second: ReadonlyRecord) => (first: ReadonlyRecord) => boolean { - return (second) => (first) => { - for (const key in first) { - if (!Object.hasOwn(second, key) || !S.compare(second[key])(first[key])) { - return false; - } - } - return true; - }; -} - -/** - * Given a refinement or a predicate, filter a ReadonlyRecord - * by removing any values that do not match the predicate or - * refinement. ie. When the predicate/refinement return true - * a value is kept and when it returns false a value is removed. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * { one: 1, two: 2, three: 3 }, - * R.filter(n => n > 1), - * ); // { one: 1 } - * ``` - * - * @since 2.0.0 - */ -export function filter( - refinement: (a: A, key: string) => a is I, -): (ua: ReadonlyRecord) => ReadonlyRecord; -export function filter( - predicate: (a: A, key: string) => boolean, -): (ua: ReadonlyRecord) => ReadonlyRecord; -export function filter( - predicate: (a: A, key: string) => boolean, -): (ua: ReadonlyRecord) => ReadonlyRecord { - return (ua) => { - const output = {} as Record; - for (const key in ua) { - if (predicate(ua[key], key)) { - output[key] = ua[key]; - } - } - return output; - }; -} - -/** - * Given a function over the values in a ReadonlyArray returning an - * Option, return a function thatsimultaneously filters and maps over - * the values in a ReadonlyRecord. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import * as O from "./option.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * { one: 1, two: 2, three: 3 }, - * R.filterMap(n => n > 1 ? O.some(`${n} is big enough`) : O.none), - * ); // { two: "2 is big enough", three: "3 is big enough" } - * ``` - * - * @since 2.0.0 - */ -export function filterMap( - fai: (a: A, key: string) => Option, -): (ua: ReadonlyRecord) => ReadonlyRecord { - return (ua) => { - const output = {} as Record; - for (const key in ua) { - const result = fai(ua[key], key); - if (isSome(result)) { - output[key] = result.value; - } - } - return output; - }; -} - -/** - * Given a refinement or predicate, return a function that splits a - * ReadonlyRecord into a Pair of ReadonlyRecords, with the first - * record containing the values for which the predicate/refinement - * returned true and the second record containing the values for which - * the predicate/refinement returned false. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * { one: 1, two: 2, three: 3 }, - * R.partition(n => n > 1), - * ); // [{ two: 2, three: 3 }, { one: 1 }] - * ``` - * - * @since 2.0.0 - */ -export function partition( - refinement: (a: A, key: string) => a is I, -): (ua: ReadonlyRecord) => Pair, ReadonlyRecord>; -export function partition( - predicate: (a: A, key: string) => boolean, -): (ua: ReadonlyRecord) => Pair, ReadonlyRecord>; -export function partition( - predicate: (a: A, key: string) => boolean, -): (ua: ReadonlyRecord) => Pair, ReadonlyRecord> { - return (ua) => { - const first = {} as Record; - const second = {} as Record; - for (const key in ua) { - if (predicate(ua[key], key)) { - first[key] = ua[key]; - } else { - second[key] = ua[key]; - } - } - return pair(first as ReadonlyRecord, second as ReadonlyRecord); - }; -} - -/** - * Given a function that takes an A and a key and returns an Either - * return a function that simultaneously partitions and maps over the - * values in a ReadonlyRecord. This is the equivalent of first - * partitioning a ReadonlyRecord, and then using Pair's Bimap over - * both values in a Pair. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import * as E from "./either.ts"; - * import { pipe } from "./fn.ts"; - * - * const result = pipe( - * { one: 1, two: 2, three: 3 }, - * R.partitionMap( - * n => n > 1 - * ? E.right(`${n} is big enough`) - * : E.left(`${n} is small enough`) - * ), - * ); - * // [ - * // { two: "2 is big enough", three: "3 is big enough" }, - * // { one: "1 is small enough" } - * // ] - * ``` - * - * @since 2.0.0 - */ -export function partitionMap( - fai: (a: A, key: string) => Either, -): (ua: ReadonlyRecord) => Pair, ReadonlyRecord> { - return (ua) => { - const first = {} as Record; - const second = {} as Record; - for (const key in ua) { - const result = fai(ua[key], key); - if (isRight(result)) { - first[key] = result.right; - } else { - second[key] = result.left; - } - } - return pair(first, second); - }; -} - -/** - * @since 2.0.0 - */ -export function getCombinableRecord( - { combine }: Combinable, -): Combinable> { - return { - combine: (second) => (first) => { - const result: Record = { ...first }; - for (const [key, value] of entries(second)) { - if (key in result) { - result[key] = combine(value)(result[key]); - } else { - result[key] = value; - } - } - return result; - }, - }; -} - -/** - * @since 2.0.0 - */ -export function getInitializableRecord( - I: Initializable, -): Initializable> { - return { - init: () => ({}), - ...getCombinableRecord(I), - }; -} - -/** - * @since 2.0.0 - */ -export function getComparableRecord( - C: Comparable, -): Comparable> { - const _isSubrecord = isSubrecord(C); - return { - compare: (second) => (first) => - _isSubrecord(second)(first) && _isSubrecord(first)(second), - }; -} - -/** - * Given a Showable for the inner values of a ReadonlyRecord, return an instance - * of Showable for ReadonlyRecord. - * - * @example - * ```ts - * import * as R from "./record.ts"; - * import { ShowableNumber } from "./number.ts"; - * - * const { show } = R.getShowableRecord(ShowableNumber); - * - * const result = show({ one: 1, two: 2, three: 3 }); - * // "{one: 1, two: 2, three: 3}" - * ``` - * - * @since 2.0.0 - */ -export function getShowableRecord( - SA: Showable, -): Showable> { - return ({ - show: (ua) => - `{${ - Object.entries(ua).map(([key, value]) => `${key}: ${SA.show(value)}`) - .join(", ") - }}`, - }); -} - -/** - * The canonical implementation of Filterable for ReadonlyRecord. It contains - * the methods filter, filterMap, partition, and partitionMap. - * - * @since 2.0.0 - */ -export const FilterableRecord: Filterable = { - filter, - filterMap, - partition, - partitionMap, -}; - -/** - * The canonical implementation of Mappable for ReadonlyRecord. It contains - * the method map. - * - * @since 2.0.0 - */ -export const MappableRecord: Mappable = { map }; - -/** - * The canonical implementation of Foldable for ReadonlyRecord. It contains - * the method fold. - * - * @since 2.0.0 - */ -export const FoldableRecord: Foldable = { fold }; - -/** - * The canonical implementation of Traversable for ReadonlyRecord. It contains - * the methods map, fold, and traverse. - * - * @since 2.0.0 - */ -export const TraversableRecord: Traversable = { - map, - fold, - traverse, -}; diff --git a/vendor/deno.land/x/fun@v2.0.0/refinement.ts b/vendor/deno.land/x/fun@v2.0.0/refinement.ts deleted file mode 100644 index b8d1cc7..0000000 --- a/vendor/deno.land/x/fun@v2.0.0/refinement.ts +++ /dev/null @@ -1,671 +0,0 @@ -/** - * The Refinement type represents a function that takes a type and returns a - * boolean. It denotes a function that narrows a type at runtime. For example - * the function `(n: unknown): n is number => typeof n === "number"` is the - * refinement type `Refinement`. The primary use for Refinement - * is to align the runtime value with compile time types. - * - * @module Refinement - * @since 2.0.0 - */ - -import type { In, Kind, Out } from "./kind.ts"; - -import type { NonEmptyArray } from "./array.ts"; -import type { Option } from "./option.ts"; -import type { Either } from "./either.ts"; -import type { ReadonlyRecord } from "./record.ts"; -import type { Literal, Schemable } from "./schemable.ts"; - -import { memoize } from "./fn.ts"; - -/** - * The refinement type is a function that returns a boolean indicating that a - * value satisfies a type. - * - * @since 2.0.0 - */ -export type Refinement = (a: A) => a is B; - -/** - * A type that matches any refinement type. - * - * @since 2.0.0 - */ -// deno-lint-ignore no-explicit-any -export type AnyRefinement = Refinement; - -/** - * The ToIn type takes a Refinement type and returns the type of its input. - * - * @since 2.0.0 - */ -export type ToIn = T extends Refinement ? B : never; - -/** - * The ToOut type takes a Refinement type and returns the type of its output - * refinement. - * - * @since 2.0.0 - */ -export type ToOut = T extends Refinement ? A : never; - -/** - * Specifies Refinement as a Higher Kinded Type, with covariant - * parameter B corresponding to the 0th index of any substitutions and - * contravariant parameter A corresponding to the 0th index of any - * substitutions. - * - * @since 2.0.0 - */ -export interface KindRefinement extends Kind { - readonly kind: Refinement, Out>; -} - -/** - * Specifies Refinement as a Higher Kinded Type, with covariant - * parameter B corresponding to the 0th index of any substitutions. - * - * @since 2.0.0 - */ -export interface KindUnknownRefinement extends Kind { - readonly kind: Refinement>; -} - -/** - * Construct a refinement from a function (a: A) => Option where None denotes - * that a type does not satisfy the refinement. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * import * as O from "./option.ts"; - * - * const refine = R.fromOption((u: unknown) => typeof u === "number" ? O.some(u) - * : O.none); - * const value1: unknown = "Hello"; - * const value2: unknown = 0; - * - * const result1 = refine(value1); // false, value1: unknown - * const result2 = refine(value2); // true, value2: number - * ``` - * - * @since 2.0.0 - */ -export function fromOption( - faob: (a: A) => Option, -): Refinement { - return (a: A): a is B => faob(a).tag === "Some"; -} - -/** - * Construct a refinement from a function (a: A) => Either where Left denotes - * that a type does not satisfy the refinement. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * import * as E from "./either.ts"; - * - * const refine = R.fromEither((u: unknown) => typeof u === "number" ? E.right(u) - * : E.left(u)); - * const value1: unknown = "Hello"; - * const value2: unknown = 0; - * - * const result1 = refine(value1); // false, value1: unknown - * const result2 = refine(value2); // true, value2: number - * ``` - * - * @since 2.0.0 - */ -export function fromEither( - faob: (a: A) => Either, -): Refinement { - return (a: A): a is B => faob(a).tag === "Right"; -} - -/** - * Compose two refinements into a new refinement that returns true if either of - * the two input refinements return true. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * import { pipe } from "./fn.ts"; - * - * const number = (u: unknown): u is number => typeof u === "number"; - * const string = (u: unknown): u is string => typeof u === "string"; - * const refine = pipe(number, R.or(string)); - * - * const result1 = refine("Hello"); // true - * const result2 = refine(null); // false - * ``` - * - * @since 2.0.0 - */ -export function or( - second: Refinement, -): (first: Refinement) => Refinement { - return (first: Refinement): Refinement => - (a: A): a is B | C => first(a) || second(a); -} - -/** - * Compose two refinements into a new refinement that returns true if both of - * the two input refinements return true. - * - * @example - * ```ts - * import type { Newtype } from "./newtype.ts"; - * - * import * as R from "./refinement.ts"; - * import { pipe } from "./fn.ts"; - * - * const isBig = (s: unknown): s is "Big" => s === "Big"; - * const refine = pipe(R.string, R.and(isBig)); - * - * const result1 = refine(null); // false - * const result2 = refine("Hello"); // false - * const result3 = refine("Big"); // false - * ``` - * - * @since 2.0.0 - */ -export function and( - second: Refinement, -): (first: Refinement) => Refinement { - return (first: Refinement): Refinement => - (a: A): a is B & C => first(a) && second(a); -} - -/** - * Create a identity refinement that always returns true as at the type level a - * type A is always a type A. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * - * const number = R.id(); - * - * const result = number(1); // true.. but only numbers can be passed here. - * ``` - * - * @since 2.0.0 - */ -export function id(): Refinement { - return (() => true) as unknown as Refinement; -} - -/** - * Compose two refinements, A -> B and B -> C creating a `Refinement`. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * import { pipe } from "./fn.ts"; - * - * type Person = { name: string }; - * type Rec = Record; - * - * const nonnull = (u: unknown): u is Rec => u !== null && u !== undefined; - * const hasKey = - * (key: K) => (u: Rec): u is Record => - * Object.hasOwn(u, key); - * const person = (u: Record<"name", unknown>): u is Person => - * typeof u.name === - * "string"; - * - * const isPerson = pipe(nonnull, R.compose(hasKey("name")), R.compose(person)); - * - * const value1 = null; - * const value2 = {}; - * const value3 = { name: 1 }; - * const value4 = { name: "Brandon" }; - * - * const result1 = isPerson(value1); // false - * const result2 = isPerson(value2); // false - * const result3 = isPerson(value3); // false - * const result4 = isPerson(value4); // true, value4: Person - * ``` - * - * @since 2.0.0 - */ -export function compose( - second: Refinement, -): (first: Refinement) => Refinement { - return (first: Refinement): Refinement => (a: A): a is C => - first(a) && second(a); -} - -/** - * An instance of `Refinement`. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * - * const result = R.unknown(null); // true, null is unknown! all is unknown! - * ``` - * - * @since 2.0.0 - */ -export function unknown(_: unknown): _ is unknown { - return true; -} - -/** - * An instance of `Refinement`. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * - * const result1 = R.string(null); // false - * const result2 = R.string("Hello"); // true, a variable is now typed as string - * ``` - * - * @since 2.0.0 - */ -export function string(a: unknown): a is string { - return typeof a === "string"; -} - -/** - * An instance of `Refinement`. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * - * const result1 = R.number(null); // false - * const result2 = R.number(2); // true, a variable is now typed as number - * ``` - * - * @since 2.0.0 - */ -export function number(a: unknown): a is number { - return typeof a === "number"; -} - -/** - * An instance of `Refinement`. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * - * const result1 = R.boolean(null); // false - * const result2 = R.boolean(true); // true, a variable is now typed as true - * ``` - * - * @since 2.0.0 - */ -export function boolean(a: unknown): a is boolean { - return typeof a === "boolean"; -} - -/** - * An instance of `Refinement>`. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * - * const result1 = R.isRecord(null); // false - * const result2 = R.isRecord({}); - * // true, a variable is now typed as Record - * ``` - * - * @since 2.0.0 - */ -export function isRecord(a: unknown): a is Record { - return typeof a === "object" && a !== null; -} - -/** - * An instance of `Refinement>`. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * - * const result1 = R.isArray(null); // false - * const result2 = R.isArray([]); - * // true, a variable is now typed as Array - * ``` - * - * @since 2.0.0 - */ -export function isArray(a: unknown): a is Array { - return Array.isArray(a); -} - -/** - * Creates an instance `Refinement & { length: N }>` - * where N is a number. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * - * const isTwoTuple = R.isArrayN(2); - * - * const result1 = isTwoTuple(null); // false - * const result2 = isTwoTuple([]); // false - * const result3 = isTwoTuple([1, 2]); - * // true, a variable is now typed as Array & { length: 2 } - * ``` - * - * @since 2.0.0 - */ -export function isArrayN( - n: N, -): Refinement & { length: N }> { - return (a): a is Array & { length: N } => - isArray(a) && a.length == n; -} - -/** - * Creates an instance of `Refinement` where P is a union of literal - * values. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * - * const places = R.literal(1, 2, 3); - * - * const result1 = places(null); // false - * const result2 = places(1); // true, variable now typed as 1 | 2 | 3 - * const result3 = places(2); // true, variable now typed as 1 | 2 | 3 - * const result4 = places(10); // false - * ``` - * - * @since 2.0.0 - */ -export function literal>( - ...literals: A -): Refinement { - return (a): a is A[number] => literals.some((l) => l === a); -} - -/** - * Turn a `Refinement` into `Refinement`. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * - * const nullOrNum = R.nullable(R.number); - * - * const result1 = nullOrNum(null); // true, variable is now null | number - * const result2 = nullOrNum(1); // true, variable is now null | number - * const result3 = nullOrNum("hello"); // false - * ``` - * - * @since 2.0.0 - */ -export function nullable( - or: Refinement, -): Refinement { - return (a): a is B | null => a === null || or(a); -} - -/** - * Turn a `Refinement` into `Refinement`. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * - * const test = R.undefinable(R.number); - * - * const result1 = test(null); // false - * const result2 = test(1); // true, variable is now undefined | number - * const result3 = test("hello"); // false - * const result4 = test(undefined); // true, variable is now undefined | number - * ``` - * - * @since 2.0.0 - */ -export function undefinable( - or: Refinement, -): Refinement { - return (a): a is B | undefined => a === undefined || or(a); -} - -/** - * Turn a `Refinement` into `Refinement>`. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * - * const numbers = R.record(R.number); - * - * const result1 = numbers(null); // false - * const result2 = numbers({}); // true, {} has type ReadonlyRecord - * const result3 = numbers({ hello: "world" }); // false - * const result4 = numbers({ hello: 1 }); - * // true, variable has type ReadonlyRecord - * ``` - * - * @since 2.0.0 - */ -export function record( - codomain: Refinement, -): Refinement> { - return (a): a is ReadonlyRecord => - isRecord(a) && Object.values(a).every(codomain); -} - -/** - * Turn a `Refinement` into `Refinement>`. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * - * const numbers = R.array(R.number); - * - * const result1 = numbers(null); // false - * const result2 = numbers([]); // true, [] has type ReadonlyArray - * const result3 = numbers(["Hello"]); // false - * const result4 = numbers([1]); - * // true, variable has type ReadonlyArray - * ``` - * - * @since 2.0.0 - */ -export function array( - item: Refinement, -): Refinement> { - return (a): a is Array => Array.isArray(a) && a.every(item); -} - -/** - * Create a Refinement from an array of refinements, where each index of a type - * much match the originated refinement type. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * - * const tuple = R.tuple(R.number, R.string); - * - * const result1 = tuple(null); // false - * const result2 = tuple([]); // false - * const result3 = tuple(["Hello", 1]); // false - * const result4 = tuple([1, "Hello"]); - * // true, variable has type [number, string] - * const result5 = tuple([1, "Hello", "Goodbye"]); // false - * ``` - * - * @since 2.0.0 - */ -// deno-lint-ignore no-explicit-any -export function tuple( - ...items: { [K in keyof A]: Refinement } -): Refinement { - return (a): a is { [K in keyof A]: A[K] } => - Array.isArray(a) && items.length === a.length && - a.every((value, index) => items[index](value)); -} - -/** - * Create a Refinement from a struct of refinements, where each index of a type - * much match the originated refinement type, key for key. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * - * const struct = R.struct({ - * num: R.number, - * str: R.string - * }); - * - * const result1 = struct(null); // false - * const result2 = struct({}); // false - * const result3 = struct({ num: "Hello", str: 1 }); // false - * const result4 = struct({ num: 1, str: "Hello" }); - * // true, variable has type { num: number, str: string } - * const result5 = struct([1, "Hello", "Goodbye"]); // false - * ``` - * - * @since 2.0.0 - */ -export function struct( - items: { [K in keyof A]: Refinement }, -): Refinement { - const entries: [string, Refinement][] = Object.entries( - items, - ); - return (a): a is { readonly [K in keyof A]: A[K] } => - isRecord(a) && - entries.every(([key, refine]) => key in a && refine(a[key])); -} - -/** - * Create a Refinement from a struct of refinements, where each index of a type - * much match the originated refinement type, key for key, or not have that - * property at all. This is distinct from the property being null or undefined. - * - * @example - * ```ts - * import * as R from "./refinement.ts"; - * - * const struct = R.partial({ - * num: R.number, - * str: R.string - * }); - * - * const result1 = struct(null); // false - * const result2 = struct({}); // true, - * const result3 = struct({ num: "Hello", str: 1 }); // false - * const result4 = struct({ num: 1, str: "Hello" }); - * // true, variable has type { num?: number, str": string } - * const result5 = struct({ - * num: 1, - * str: "Hello", - * other: "Goodbye" - * }); // true, variable ahs type { num?: number, str?: string } - * ``` - * - * @since 2.0.0 - */ -export function partial( - items: { [K in keyof A]: Refinement }, -): Refinement { - const entries: [string, Refinement][] = Object.entries( - items, - ); - return (a): a is { [K in keyof A]?: A[K] } => - isRecord(a) && - entries.every(([key, refine]) => !(key in a) || refine(a[key])); -} - -/** - * Intersect is an alias of and. - * - * @since 2.0.0 - */ -export function intersect( - gi: Refinement, -): (ga: Refinement) => Refinement { - return (ga: Refinement) => (a): a is A & I => - ga(a) && gi(a); -} - -/** - * Union is an alias of or. - * - * @since 2.0.0 - */ -export function union( - gi: Refinement, -): (ga: Refinement) => Refinement { - return (ga: Refinement) => (a): a is A | I => - ga(a) || gi(a); -} - -/** - * Lazy is used to handle the case where a refinement is recursive. - * - * @example - * ```ts - * import type { Refinement } from "./refinement.ts"; - * import * as R from "./refinement.ts"; - * - * type Person = { name: string; age: number; children: ReadonlyArray }; - * - * const person: Refinement = R.lazy("Person", () => - * R.struct({ - * name: R.string, - * age: R.number, - * children: R.array(person), - * })); - * - * const rufus = { name: "Rufus", age: 1, children: [] }; - * const brandon = { name: "Brandon", age: 37, children: [rufus] }; - * - * const result1 = person(null); // false - * const result2 = person(rufus); // true, rufus: Person - * const result3 = person(brandon); // true, brandon: Person - * ``` - * - * @since 2.0.0 - */ -export function lazy( - _: string, - refinement: () => Refinement, -): Refinement { - const get = memoize>(refinement); - return (u: A): u is B => get()(u); -} - -/** - * The canonical implementation of Schemable for UnknownRefinement. It contains - * the methods unknown, string, number, boolean, literal, nullable, undefinable, - * record, array, tuple, struct, partial, intersect, union, and lazy. - * - * @since 2.0.0 - */ -export const SchemableRefinement: Schemable = { - unknown: () => unknown, - string: () => string, - number: () => number, - boolean: () => boolean, - literal, - nullable, - undefinable, - record, - array, - tuple: tuple as Schemable["tuple"], - struct, - partial, - intersect: intersect as Schemable["intersect"], - union, - lazy, -}; diff --git a/vendor/deno.land/x/fun@v2.0.0/schemable.ts b/vendor/deno.land/x/fun@v2.0.0/schemable.ts deleted file mode 100644 index 454e58a..0000000 --- a/vendor/deno.land/x/fun@v2.0.0/schemable.ts +++ /dev/null @@ -1,325 +0,0 @@ -/** - * Schemable presents a unified algebra for parsing, decoding - * guarding, or otherwise building typed js structures in - * TypeScript. - * - * @module Schemable - * @since 2.0.0 - */ - -import type { $, Hold, Kind, Spread } from "./kind.ts"; -import type { NonEmptyArray } from "./array.ts"; -import type { ReadonlyRecord } from "./record.ts"; - -import { memoize } from "./fn.ts"; - -/** - * These are the super-types that a Literal schema must extent. - * They are used to constrain the inputs for LiteralSchemable. - * - * @since 2.0.0 - */ -export type Literal = string | number | boolean | null | undefined; - -/** - * Wraps an unknown type in Schemable. This is the best escape - * hatch when a Schema isn't known ahead of time. - * - * @since 2.0.0 - */ -export interface UnknownSchemable extends Hold { - readonly unknown: () => $; -} - -/** - * Wraps a string type in Schemable. - * - * @since 2.0.0 - */ -export interface StringSchemable extends Hold { - readonly string: () => $; -} - -/** - * Wraps a number type in Schemable. - * - * @since 2.0.0 - */ -export interface NumberSchemable extends Hold { - readonly number: () => $; -} - -/** - * Wraps a boolean type in Schemable. - * - * @since 2.0.0 - */ -export interface BooleanSchemable extends Hold { - readonly boolean: () => $; -} - -/** - * Wraps a union of literals in Schemable. - * - * @since 2.0.0 - */ -export interface LiteralSchemable extends Hold { - readonly literal: , B, C, D, E>( - ...s: A - ) => $; -} - -/** - * Takes a Schemable and returns a Schemable; - * - * @since 2.0.0 - */ -export interface NullableSchemable extends Hold { - readonly nullable: ( - or: $, - ) => $; -} - -/** - * Takes a Schemable and returns a Schemable; - * - * @since 2.0.0 - */ -export interface UndefinableSchemable extends Hold { - readonly undefinable: ( - or: $, - ) => $; -} - -/** - * Takes a Schemable and returns a Schemable> - * - * @since 2.0.0 - */ -export interface RecordSchemable extends Hold { - readonly record: ( - codomain: $, - ) => $, B, C], [D], [E]>; -} - -/** - * Takes a Schemable and returns a Schemable> - * - * @since 2.0.0 - */ -export interface ArraySchemable extends Hold { - readonly array: ( - item: $, - ) => $, B, C], [D], [E]>; -} - -/** - * Takes a tuple of Schemables and returns a Schemable - * for a tuple that matches, index for index, the input - * schemables. - * - * ie. [StringSchemable, NumberSchemable] becomes - * Schemable<[string, number]> - * - * @since 2.0.0 - */ -export interface TupleSchemable extends Hold { - // deno-lint-ignore no-explicit-any - readonly tuple: ( - ...items: { readonly [K in keyof A]: $ } - ) => $; -} - -/** - * Takes a struct of Schemables and returns a Schemable - * for a struct that matches, key for key, the input - * schemables. - * - * ie. { str: StringSchemable, num: NumberSchemable } becomes - * Schemable<{ str: string, num: number }> - * - * @since 2.0.0 - */ -export interface StructSchemable extends Hold { - readonly struct: ( - items: { readonly [K in keyof A]: $ }, - ) => $; -} - -/** - * Takes a struct of Schemables and returns a Schemable - * for a struct that matches, key for key, the input - * schemables but the values can also be partial. - * - * ie. { str: StringSchemable, num: NumberSchemable } becomes - * Schemable<{ str?: string, num?: number }> - * - * @since 2.0.0 - */ -export interface PartialSchemable extends Hold { - readonly partial: ( - items: { readonly [K in keyof A]: $ }, - ) => $; -} - -/** - * Takes two schemables, left and right, and returns - * the intersection of them. This means that any value - * for must match both schemables. - * - * @since 2.0.0 - */ -export interface IntersectSchemable extends Hold { - readonly intersect: ( - right: $, - ) => ( - left: $, - ) => $, B, C], [D], [E]>; -} - -/** - * Takes two schemables, left and right, and returns - * the union of them. This means that any value - * for must match either schemable. - * - * @since 2.0.0 - */ -export interface UnionSchemable extends Hold { - readonly union: ( - right: $, - ) => (left: $) => $; -} - -/** - * Takes an id and a thunk returning a schemable and - * returns a schemable that matches the return value - * of the thunk. This schemable is necessary for - * handling recursive or corecursive schemables. - * - * @since 2.0.0 - */ -export interface LazySchemable extends Hold { - readonly lazy: ( - id: string, - f: () => $, - ) => $; -} - -/** - * A Schemable is the union of all schemable methods. - * This allows one to build an arbitrary Schema using - * the Schemable interface, then pass a concrete - * Schemable implementation to the Schema. Thus, one - * can build a single model and produce decoders, - * guards, or jsonschema from that model. - * - * @since 2.0.0 - */ -export interface Schemable - extends - UnknownSchemable, - StringSchemable, - NumberSchemable, - BooleanSchemable, - LiteralSchemable, - NullableSchemable, - UndefinableSchemable, - RecordSchemable, - ArraySchemable, - TupleSchemable, - StructSchemable, - PartialSchemable, - IntersectSchemable, - UnionSchemable, - LazySchemable, - Hold {} - -/** - * A Schema is the a function that takes a generic schemable and builds - * a specific model from it. - * - * @since 2.0.0 - */ -export type Schema = < - U extends Kind, ->(S: Schemable) => $; - -/** - * Extracts the inner type of a Schema - * - * @since 2.0.0 - */ -export type TypeOf = T extends Schema ? A : unknown; - -// Helps inference in the schema function -type InferSchema = ( - S: Schemable, -) => $; - -/** - * A helper function to build a generic Schema that can be used - * with any Schemable. - * - * @example - * ```ts - * import { schema, TypeOf } from "./schemable.ts"; - * import { SchemableDecoder } from "./decoder.ts"; - * import { SchemableRefinement } from "./refinement.ts"; - * import { SchemableJsonBuilder, print } from "./json_schema.ts"; - * import { pipe } from "./fn.ts"; - * - * const mySchema = schema(s => pipe( - * s.struct({ - * name: s.string(), - * age: s.number(), - * }), - * s.intersect(s.partial({ - * interests: s.array(s.string()), - * })) - * )); - * - * // Derive the type from the schema - * type MySchema = TypeOf; - * - * const decode = mySchema(SchemableDecoder); - * const refine = mySchema(SchemableRefinement); - * const jsonSchema = mySchema(SchemableJsonBuilder); - * - * const unknown1 = { - * name: "Batman", - * age: 45, - * interests: ["crime fighting", "cake", "bats"], - * }; - * const unknown2 = { - * name: "Cthulhu", - * interests: ["madness"], - * }; - * - * const decoded1 = decode(unknown1); // Success! - * const decoded2 = decode(unknown2); // Failure with info - * - * const refine1 = refine(unknown1); // true - * const refine2 = refine(unknown2); // false - * - * const jsonSchemaString = pipe( - * jsonSchema, - * print, - * json => JSON.stringify(json, null, 2), - * ); // Turns the jsonSchema into a prettified string - * - * ``` - * - * @since 2.0.0 - */ -export function schema< - A, - B = unknown, - C = unknown, - D = unknown, - E = unknown, - U extends Kind = Kind, ->( - s: InferSchema, -): Schema { - return memoize(s) as Schema; -} diff --git a/vendor/deno.land/x/fun@v2.0.0/showable.ts b/vendor/deno.land/x/fun@v2.0.0/showable.ts deleted file mode 100644 index 15e3082..0000000 --- a/vendor/deno.land/x/fun@v2.0.0/showable.ts +++ /dev/null @@ -1,47 +0,0 @@ -/** - * Showable is a structure that indicates that an instance can be converted to a - * string. - * - * @module Showable - * @since 2.0.0 - */ - -import type { Hold } from "./kind.ts"; - -/** - * A Showable structure has the method show. - * - * @since 2.0.0 - */ -export interface Showable extends Hold { - readonly show: (value: U) => string; -} - -/** - * @since 2.10.0 - */ -export function struct( - shows: { [K in keyof A]: Showable }, -): Showable<{ readonly [K in keyof A]: A[K] }> { - const entries = Object.entries(shows) as [ - keyof A & string, - Showable, - ][]; - return { - show: (struct) => { - const inner = entries - .map(([key, { show }]) => `${key}: ${show(struct[key])}`) - .join(", "); - return inner.length > 0 ? `{ ${inner} }` : "{}"; - }, - }; -} - -/** - * @since 2.10.0 - */ -export const tuple = >( - ...shows: { [K in keyof A]: Showable } -): Showable> => ({ - show: (tuple) => `[${tuple.map((a, i) => shows[i].show(a)).join(", ")}]`, -}); diff --git a/vendor/deno.land/x/fun@v2.0.0/sortable.ts b/vendor/deno.land/x/fun@v2.0.0/sortable.ts deleted file mode 100644 index 3212545..0000000 --- a/vendor/deno.land/x/fun@v2.0.0/sortable.ts +++ /dev/null @@ -1,453 +0,0 @@ -/** - * This file contains all of the tools for creating and - * composing Sortables. Since an Sortable encapsulates partial - * equality, the tools in this file should concern - * itself with sorting according to an Ordering as well - * - * @since 2.0.0 - */ - -import type { Hold, In, Kind } from "./kind.ts"; - -/** - * The ordering type is the expected output of any - * Compare function. The canonical example is the output - * of the Array.sort function. For any two values `first` - * and `second`, Ordering means the following: - * - * * -1 : first < second - * * 0 : first = second - * * 1 : first > second - * - * @since 2.0.0 - */ -export type Ordering = -1 | 0 | 1; - -/** - * The Sort function takes to values of the same - * type and returns an ordering, indicating whether - * `first` is less than, equal to, or greater than - * `second. See Ordering for the order. - * - * @since 2.0.0 - */ -export type Sort = (first: A, second: A) => Ordering; - -/** - * A Sortable structure has the method sort. - * - * @since 2.0.0 - */ -export interface Sortable extends Hold { - readonly sort: Sort; -} - -/** - * Specifies Sortable as a Higher Kinded Type, with - * contravariant parameter D corresponding to the 0th - * index of any Substitutions. - * - * @since 2.0.0 - */ -export interface KindSortable extends Kind { - readonly kind: Sortable>; -} - -/** - * Returns an Ordering from any number according - * to its relationship with 0. - * - * @example - * ```ts - * import { sign } from "./sortable.ts"; - * - * const result1 = sign(-9586); // -1 - * const result2 = sign(-0.005); // -1 - * const result3 = sign(1000); // 1 - * const result4 = sign(Number.NEGATIVE_INFINITY); // -1 - * const result5 = sign(0); // 0 - * ``` - * - * @since 2.0.0 - */ -export function sign(n: number): Ordering { - return n < 0 ? -1 : n > 0 ? 1 : 0; -} - -/** - * Construct a curried less than function over A from Sortable. - * - * @example - * ```ts - * import * as O from "./sortable.ts"; - * import { SortableNumber } from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const lt = O.lt(SortableNumber); - * - * const result1 = pipe(1, lt(2)); // true - * const result2 = pipe(2, lt(1)); // false - * const result3 = pipe(1, lt(1)); // false - * ``` - * - * @since 2.0.0 - */ -export function lt({ sort }: Sortable): (snd: A) => (fst: A) => boolean { - return (snd) => (fst): boolean => sort(fst, snd) === -1; -} - -/** - * Construct a curried less than or equal to function over A from Sortable. - * - * @example - * ```ts - * import * as O from "./sortable.ts"; - * import { SortableNumber } from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const lte = O.lte(SortableNumber); - * - * const result1 = pipe(1, lte(2)); // true - * const result2 = pipe(2, lte(1)); // false - * const result3 = pipe(1, lte(1)); // true - * ``` - * - * @since 2.0.0 - */ -export function lte({ sort }: Sortable): (snd: A) => (fst: A) => boolean { - return (snd) => (fst) => sort(fst, snd) !== 1; -} - -/** - * Construct a curried greater than or equal to function over A from Sortable. - * - * @example - * ```ts - * import * as O from "./sortable.ts"; - * import { SortableNumber } from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const gte = O.gte(SortableNumber); - * - * const result1 = pipe(1, gte(2)); // false - * const result2 = pipe(2, gte(1)); // true - * const result3 = pipe(1, gte(1)); // true - * ``` - * - * @since 2.0.0 - */ -export function gte({ sort }: Sortable): (snd: A) => (fst: A) => boolean { - return (snd) => (fst) => sort(fst, snd) !== -1; -} - -/** - * Construct a curried greater than function over A from Sortable. - * - * @example - * ```ts - * import * as O from "./sortable.ts"; - * import { SortableNumber } from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const gt = O.gt(SortableNumber); - * - * const result1 = pipe(1, gt(2)); // false - * const result2 = pipe(2, gt(1)); // true - * const result3 = pipe(1, gt(1)); // false - * ``` - * - * @since 2.0.0 - */ -export function gt({ sort }: Sortable): (snd: A) => (fst: A) => boolean { - return (snd) => (fst) => sort(fst, snd) === 1; -} - -/** - * Construct a minimum function over A from Sortable. - * - * @example - * ```ts - * import * as O from "./sortable.ts"; - * import { SortableNumber } from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const min = O.min(SortableNumber); - * - * const result1 = pipe(1, min(2)); // 1 - * const result2 = pipe(2, min(1)); // 1 - * const result3 = pipe(1, min(1)); // 1 - * ``` - * - * @since 2.0.0 - */ -export function min({ sort }: Sortable): (snd: A) => (fst: A) => A { - return (snd) => (fst) => sort(fst, snd) !== 1 ? fst : snd; -} - -/** - * Construct a maximum function over A from Sortable. - * - * @example - * ```ts - * import * as O from "./sortable.ts"; - * import { SortableNumber } from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const max = O.max(SortableNumber); - * - * const result1 = pipe(1, max(2)); // 2 - * const result2 = pipe(2, max(1)); // 2 - * const result3 = pipe(1, max(1)); // 1 - * ``` - * - * @since 2.0.0 - */ -export function max({ sort }: Sortable): (snd: A) => (fst: A) => A { - return (snd) => (fst) => sort(fst, snd) !== -1 ? fst : snd; -} - -/** - * Construct an inclusive clamp function over A from Sortable. - * - * @example - * ```ts - * import * as O from "./sortable.ts"; - * import { SortableNumber } from "./number.ts"; - * - * const clamp = O.clamp(SortableNumber); - * const clamp1 = clamp(0, 10) - * - * const result1 = clamp1(-1); // 0 - * const result2 = clamp1(1); // 1 - * const result3 = clamp1(100); // 10 - * ``` - * - * @since 2.0.0 - */ -export function clamp( - sort: Sortable, -): (low: A, high: A) => (value: A) => A { - const _min = min(sort); - const _max = max(sort); - return (low, high) => { - const __min = _min(high); - const __max = _max(low); - return (value) => __min(__max(value)); - }; -} - -/** - * Construct an exclusive between function over A from Sortable. - * - * @example - * ```ts - * import * as O from "./sortable.ts"; - * import { SortableNumber } from "./number.ts"; - * - * const between = O.between(SortableNumber); - * const between1 = between(0, 10) - * - * const result1 = between1(-1); // false - * const result2 = between1(1); // true - * const result3 = between1(100); // false - * ``` - * - * @since 2.0.0 - */ -export function between( - sort: Sortable, -): (low: A, high: A) => (value: A) => boolean { - const _gt = gt(sort); - const _lt = lt(sort); - return (low, high) => { - const __gt = _gt(low); - const __lt = _lt(high); - return (value) => __gt(value) && __lt(value); - }; -} - -/** - * Derives an Sortable from a Compare function. - * - * @example - * ```ts - * import { clamp, lte, min, fromSort, sign } from "./sortable.ts"; - * import { pipe } from "./fn.ts"; - * - * const date = fromSort( - * (fst, snd) => sign(fst.valueOf() - snd.valueOf()) - * ); - * - * const now = new Date(); - * const later = new Date(Date.now() + 60 * 60 * 1000); - * const tomorrow = new Date(Date.now() + 24 * 60 * 60 * 1000); - * - * const result1 = pipe(now, lte(date)(later)); // true - * const result2 = pipe(tomorrow, clamp(date)(now, later)); // later - * const result3 = pipe(tomorrow, min(date)(now)); // now - * ``` - * - * @since 2.0.0 - */ -export function fromSort(sort: Sort): Sortable { - return { sort }; -} - -/** - * Create a Sortable from a curried Sort. - * - * @since 2.0.0 - */ -export function fromCurriedSort( - sort: (second: A) => (first: A) => Ordering, -): Sortable { - return fromSort((first, second) => sort(second)(first)); -} - -/** - * Create a trivial Sortable, where all values of A are considered equal. - * - * @example - * ```ts - * import { lt, trivial } from "./sortable.ts"; - * import { pipe } from "./fn.ts"; - * - * const date = trivial(); - * const now = new Date(); - * const later = new Date(Date.now() + 60 * 60 * 1000); - * - * const lessThan = lt(date); - * - * const result1 = pipe(now, lessThan(later)); // false - * const result2 = pipe(later, lessThan(now)); // false - * const result3 = date.sort(now, later); // 1 - * ``` - * - * @since 2.0.0 - */ -export function trivial(): Sortable { - return fromSort(() => 0); -} - -/** - * Derive an Sortable with the reverse ordering of an existing Sortable. - * - * @example - * ```ts - * import { reverse, lt } from "./sortable.ts"; - * import { SortableNumber } from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * const rev = reverse(SortableNumber); - * - * const result1 = pipe(1, lt(rev)(2)); // false - * const result2 = pipe(2, lt(rev)(1)); // true - * ``` - * - * @since 2.0.0 - */ -export function reverse({ sort }: Sortable): Sortable { - return fromSort((first, second) => sort(second, first)); -} - -/** - * Derives an Sortable from a tuple of Sortables. The derived Sortable will compare - * two tuples starting at index 0 and return the first ordering - * that is non-zero, otherwise the two tuples are equal. - * - * @example - * ```ts - * import { tuple, lt } from "./sortable.ts" - * import { SortableNumber } from "./number.ts"; - * import { SortableString } from "./string.ts"; - * import { pipe } from "./fn.ts"; - * - * const tup = tuple(SortableNumber, SortableString); - * - * const result1 = pipe([1, "a"], lt(tup)([2, "b"])); // true - * const result2 = pipe([1, "a"], lt(tup)([1, "b"])); // true - * const result3 = pipe([1, "a"], lt(tup)([1, "a"])); // false - * ``` - * - * @since 2.0.0 - */ -export function tuple>( - ...sorts: { [K in keyof T]: Sortable } -): Sortable> { - return fromSort((a, b) => { - for (let i = 0; i < sorts.length; i++) { - const ordering = sorts[i].sort(a[i], b[i]); - if (ordering !== 0) return ordering; - } - return 0; - }); -} - -/** - * Derives an Sortable from a structs of Sortables. The derived Sortable will compare - * two structs starting with the first defined key and return the first - * ordering that is non-zero, otherwise the two structs are equal. - * - * @example - * ```ts - * import { struct, lt } from "./sortable.ts" - * import { SortableNumber } from "./number.ts"; - * import { SortableString } from "./string.ts"; - * import { pipe } from "./fn.ts"; - * - * const ord = struct({ num: SortableNumber, str: SortableString }); - * const _lt = lt(ord); - * - * const result1 = pipe( - * { num: 1, str: "a" }, - * _lt({ str: "b", num: 2 }) - * ); // true - * const result2 = pipe( - * { num: 1, str: "a" }, - * _lt({ str: "b", num: 1 }) - * ); // true - * const result3 = pipe( - * { num: 1, str: "a" }, - * _lt({ str: "a", num: 1 }) - * ); // false - * - * ``` - * - * @since 2.0.0 - */ -export function struct( - sorts: { readonly [K in keyof A]: Sortable }, -): Sortable<{ readonly [K in keyof A]: A[K] }> { - return fromSort((fst, snd) => { - for (const key in sorts) { - const ordering = sorts[key].sort(fst[key], snd[key]); - if (ordering !== 0) return ordering; - } - return 0; - }); -} - -/** - * Derives an instance of Sortable by take an existing Sortable over D and - * a function that turns an L into D and returns an Sortable over L. - * - * @example - * ```ts - * import { premap } from "./sortable.ts"; - * import { SortableNumber } from "./number.ts"; - * import { pipe } from "./fn.ts"; - * - * // Use number ordering, turn date into number and premap - * const date = pipe( - * SortableNumber, - * premap((d: Date) => d.valueOf()), - * ); - * ``` - * - * @since 2.0.0 - */ -export function premap( - fld: (l: L) => D, -): ({ sort }: Sortable) => Sortable { - return ({ sort }) => fromSort((fst, snd) => sort(fld(fst), fld(snd))); -} diff --git a/vendor/deno.land/x/fun@v2.0.0/string.ts b/vendor/deno.land/x/fun@v2.0.0/string.ts deleted file mode 100644 index b0384dd..0000000 --- a/vendor/deno.land/x/fun@v2.0.0/string.ts +++ /dev/null @@ -1,497 +0,0 @@ -/** - * This file contains the String algebraic data type. String is a the built in - * javascript string structure. This file contains data last implementations of - * most of the String built in methods as well as minor "fixes" to make them - * less error prone. - * - * @module String - * @since 2.0.0 - */ - -import type { Combinable } from "./combinable.ts"; -import type { Comparable } from "./comparable.ts"; -import type { Initializable } from "./initializable.ts"; -import type { NonEmptyArray } from "./array.ts"; -import type { Option } from "./option.ts"; -import type { Ordering, Sortable } from "./sortable.ts"; -import type { Showable } from "./showable.ts"; - -import { fromCompare } from "./comparable.ts"; -import { fromSort } from "./sortable.ts"; -import { fromNullable } from "./option.ts"; -import { isNonEmpty } from "./array.ts"; - -/** - * Compare two strings for equality. - * - * @example - * ```ts - * import { compare } from "./string.ts"; - * - * const hello = "Hello"; - * const hi = "hi"; - * const hi2 = "hi"; - * - * const result1 = compare(hi)(hello); // false - * const result2 = compare(hi)(hi2); // true - * ``` - * - * @since 2.0.0 - */ -export function compare(second: string): (first: string) => boolean { - return (first) => first === second; -} - -/** - * Combine two strings. - * - * @example - * ```ts - * import { combine } from "./string.ts"; - * - * const result1 = combine("Hello")("World"); // "WorldHello" - * ``` - * - * @since 2.0.0 - */ -export function combine(second: string): (first: string) => string { - return (first) => `${first}${second}`; -} - -/** - * Returns an init string. - * - * @example - * ```ts - * import { init } from "./string.ts"; - * - * const result = init(); // "" - * ``` - * - * @since 2.0.0 - */ -export function init(): string { - return ""; -} - -/** - * Compare two strings and return an Ordering (-1, 0, or 1); - * - * @example - * ```ts - * import { sort } from "./string.ts"; - * - * const result1 = sort("aa", "aa"); // 0 - * const result2 = sort("aa", "ab"); // -1 - * const result3 = sort("ba", "aa"); // 1 - * const result4 = sort("ab", "aa"); // 1 - * const result5 = sort("a", "aa"); // -1 - * ``` - * - * @since 2.0.0 - */ -export function sort(first: string, second: string): Ordering { - return first < second ? -1 : second < first ? 1 : 0; -} - -/** - * A instance of Refinement. Used as a type - * guard to verify any type is actually a string. - * - * @example - * ```ts - * import { isString } from "./string.ts"; - * - * const notString: unknown = 2; - * const string: unknown = "hello"; - * - * const result1 = isString(notString); // result1 has type unknown - * const result2 = isString(string); // result2 has type string - * ``` - * - * @since 2.0.0 - */ -export function isString(a: unknown): a is string { - return typeof a === "string"; -} - -/** - * A Predicate for string returning true if the - * string is init. - * - * @example - * ```ts - * import { isEmpty } from "./string.ts"; - * - * const result1 = isEmpty("Hello"); // false - * const result2 = isEmpty(""); // true - * ``` - * - * @since 2.0.0 - */ -export function isEmpty(a: string): boolean { - return a.length === 0; -} - -/** - * Returns the length of an input string. - * - * @example - * ```ts - * import { length } from "./string.ts"; - * - * const result1 = length("Hello"); // 5 - * const result2 = length(""); // 0 - * ``` - * @since 2.0.0 - */ -export function length(a: string): number { - return a.length; -} - -/** - * Split a string into an array of strings at - * a character or RegExp match. - * - * @example - * ```ts - * import { split } from "./string.ts"; - * import { pipe } from "./fn.ts"; - * - * const bySpace = split(" "); - * const byWhitespace = split(/\s+/); - * const str = "Hello There World"; - * - * const result1 = bySpace(str); // ["Hello", "", "There", "", "World"] - * const result2 = byWhitespace(str); // ["Hello", "There", "World"] - * ``` - * - * @since 2.0.0 - */ -export function split(separator: string | RegExp) { - return (s: string): NonEmptyArray => { - const out = s.split(separator); - return isNonEmpty(out) ? out : [s]; - }; -} - -/** - * Creates a Predicate over string that returns true when - * a string includes the searchString at or beyond the - * optional starting position. - * - * @example - * ```ts - * import { includes } from "./string.ts"; - * - * const hasSpace = includes(" "); - * - * const result1 = hasSpace("Hello World"); // true - * const result2 = hasSpace("Goodbye"); // false - * ``` - * - * @since 2.0.0 - */ -export function includes(searchString: string, position?: number) { - return (s: string): boolean => s.includes(searchString, position); -} - -/** - * Creates a Predicate over string that returns true when the string - * starts with the supplied searchString starting at position, if - * it is supplied. - * - * @example - * ```ts - * import { startsWith } from "./string.ts"; - * - * const withHello = startsWith("Hello"); - * - * const result1 = withHello("Hello World"); // true - * const result2 = withHello("Goodbye"); // false - * ``` - * - * @since 2.0.0 - */ -export function startsWith( - searchString: T, - position?: number, -) { - return (s: string): s is `${T}${string}` => - s.startsWith(searchString, position); -} - -/** - * Creates a Predicate over string that returns true when the string - * ends with the supplied searchString starting at position, if - * it is supplied. - * - * @example - * ```ts - * import { endsWith } from "./string.ts"; - * - * const withbye = endsWith("bye"); - * - * const result1 = withbye("Hello World"); // false - * const result2 = withbye("Goodbye"); // true - * ``` - * - * @since 2.0.0 - */ -export function endsWith(searchString: T, position?: number) { - return (s: string): s is `${string}${T}` => - s.endsWith(searchString, position); -} - -/** - * A pipeable form of String.toUpperCase. - * - * @example - * ```ts - * import { toUpperCase } from "./string.ts"; - * - * const result = toUpperCase("hello"); // "HELLO" - * ``` - * - * @since 2.0.0 - */ -export function toUpperCase(a: string): string { - return a.toUpperCase(); -} - -/** - * A pipeable form of String.toLowerCase. - * - * @example - * ```ts - * import { toLowerCase } from "./string.ts"; - * - * const result = toLowerCase("Hello"); // "hello" - * ``` - * - * @since 2.0.0 - */ -export function toLowerCase(a: string): string { - return a.toLowerCase(); -} - -/** - * Create a function that replaces all values in a string according - * to a RegExp and a replacement value. - * - * @example - * ```ts - * import { replace } from "./string.ts"; - * - * const cap = replace("hello", "Hello"); - * - * const result = cap("hello World"); // "Hello World" - * ``` - * - * @since 2.0.0 - */ -export function replace(searchValue: string | RegExp, replaceValue: string) { - return (s: string): string => s.replace(searchValue, replaceValue); -} - -/** - * Trims whitespace from the beginning and end of a string. - * - * @example - * ```ts - * import { trim } from "./string.ts"; - * - * const result1 = trim("Hello World"); // "Hello World" - * const result2 = trim(" Hello World"); // "Hello World" - * const result3 = trim("Hello World "); // "Hello World" - * const result4 = trim(" Hello World "); // "Hello World" - * ``` - * - * @since 2.0.0 - */ -export function trim(a: string): string { - return a.trim(); -} - -/** - * Trims whitespace from the beginning of a string. - * - * @example - * ```ts - * import { trimStart } from "./string.ts"; - * - * const result1 = trimStart("Hello World"); // "Hello World" - * const result2 = trimStart(" Hello World"); // "Hello World" - * const result3 = trimStart("Hello World "); // "Hello World" - * const result4 = trimStart(" Hello World "); // "Hello World" - * ``` - * - * @since 2.0.0 - */ -export function trimStart(a: string): string { - return a.trimStart(); -} - -/** - * Trims whitespace from the end of a string. - * - * @example - * ```ts - * import { trimEnd } from "./string.ts"; - * - * const result1 = trimEnd("Hello World"); // "Hello World" - * const result2 = trimEnd(" Hello World"); // "Hello World" - * const result3 = trimEnd("Hello World "); // "Hello World" - * const result4 = trimEnd(" Hello World "); // "Hello World" - * ``` - * - * @since 2.0.0 - */ -export function trimEnd(a: string): string { - return a.trimEnd(); -} - -/** - * A simple curried pluralizing function. Takes the singular and plural - * forms of a word and returns a function that takes a count and returns - * the correct word for the count. - * - * @example - * ```ts - * import { plural } from "./string.ts"; - * - * const are = plural("is", "are"); - * const rabbits = plural("rabbit", "rabbits"); - * const sentence = (n: number) => `There ${are(n)} ${n} ${rabbits(n)}`; - * - * const result1 = sentence(1); // "There is 1 rabbit" - * const result2 = sentence(4); // "There are 4 rabbits" - * const result3 = sentence(0); // "There are 0 rabbits" - * ``` - * - * @since 2.0.0 - */ -export function plural( - singular: string, - plural: string, -): (count: number) => string { - return (count) => count === 1 ? singular : plural; -} - -/** - * Create a substring of a string based on 0 based indices. - * - * @example - * ```ts - * import { slice } from "./string.ts"; - * - * const slc = slice(1, 5); - * - * const result1 = slc(""); // "" - * const result2 = slc("Hello"); "ello" - * const result3 = slc("e"); - * ``` - * - * @since 2.0.0 - */ -export function slice(start: number, end: number) { - return (a: string): string => a.slice(start, end); -} - -/** - * Create a function that returns an Option. This - * is a curried form of RegExp.match. - * - * @example - * ```ts - * import { match } from "./string.ts"; - * - * const words = match(/\w+/g); - * - * const result1 = words("Hello World"); // Some(["Hello", "World"]) - * const result2 = words(""); // None - * const result3 = words("1234"); // Some(["1234"]) - * - * ``` - * - * @since 2.0.0 - */ -export function match(regex: RegExp) { - return (a: string): Option => fromNullable(a.match(regex)); -} - -/** - * Create a Predicate that returns true when it matches the supplied - * RegExp. Warning, this function technically mutates RegExp, but paradoxically - * it does so to keep state the same. If the passed RegExp.test method is called - * outside of this function then mayhem will surely ensue. - * - * @example - * ```ts - * import { test } from "./string.ts"; - * - * const words = test(/\w+/); - * - * const result1 = words("Hello World"); // true - * const result2 = words(""); // false - * const result3 = words("1234"); // true - * - * ``` - * - * @since 2.0.0 - */ -export function test(r: RegExp) { - return (s: string): boolean => { - // See https://tinyurl.com/2fdh6458 - // RegExp.test keeps state from any runs, - // this function resets that state to - // avoid unexpected behavior - const initialIndex = r.lastIndex; - const result = r.test(s); - r.lastIndex = initialIndex; - return result; - }; -} - -/** - * The canonical implementation of Sortable for string. It contains - * the methods lt, lte, equals, gte, gt, min, max, clamp, between, - * and compare. - * - * @since 2.0.0 - */ -export const SortableString: Sortable = fromSort(sort); - -/** - * @since 2.0.0 - */ -export const CombinableString: Combinable = { - combine, -}; - -/** - * The canonical implementation of Comparable for string. It contains - * the method equals. - * - * @since 2.0.0 - */ -export const ComparableString: Comparable = fromCompare(compare); - -/** - * The canonical implementation of Initializable for string. It contains - * the method init and combine. - * - * @since 2.0.0 - */ -export const InitializableString: Initializable = { - combine, - init, -}; - -/** - * The canonical implementation of Showable for string. It contains - * the method show. - * - * @since 2.0.0 - */ -export const ShowableString: Showable = { show: JSON.stringify }; diff --git a/vendor/deno.land/x/fun@v2.0.0/traversable.ts b/vendor/deno.land/x/fun@v2.0.0/traversable.ts deleted file mode 100644 index 5e8752a..0000000 --- a/vendor/deno.land/x/fun@v2.0.0/traversable.ts +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Traversable is a structure that encapsulates the idea of iterating through - * data and collecting it into another structure. This can be as simple as - * turning an Array> into Option> or as complicated - * as creating all combinations of numbers in three Array. - * - * @module Traversable - * @since 2.0.0 - */ - -import type { $, Hold, Kind } from "./kind.ts"; -import type { Applicable } from "./applicable.ts"; -import type { Mappable } from "./mappable.ts"; -import type { Foldable } from "./foldable.ts"; - -/** - * A Traversable structure extends Mappable and Foldable. It contains the - * methods map, fold, and traverse. - * - * @since 2.0.0 - */ -export interface Traversable - extends Mappable, Foldable, Hold { - readonly traverse: ( - A: Applicable, - ) => ( - faui: (a: A) => $, - ) => ( - ta: $, - ) => $, J, K], [L], [M]>; -} diff --git a/vendor/deno.land/x/fun@v2.0.0/tree.ts b/vendor/deno.land/x/fun@v2.0.0/tree.ts deleted file mode 100644 index 80c71c2..0000000 --- a/vendor/deno.land/x/fun@v2.0.0/tree.ts +++ /dev/null @@ -1,303 +0,0 @@ -/** - * This file contains a collection of utilities and algebraic structure - * implementations for Tree. - * - * @module Tree - * @since 2.0.0 - */ - -import type { $, Kind, Out } from "./kind.ts"; -import type { Applicable } from "./applicable.ts"; -import type { Comparable, Compare } from "./comparable.ts"; -import type { Flatmappable } from "./flatmappable.ts"; -import type { Foldable } from "./foldable.ts"; -import type { Mappable } from "./mappable.ts"; -import type { Showable } from "./showable.ts"; -import type { Traversable } from "./traversable.ts"; -import type { Wrappable } from "./wrappable.ts"; - -import { TraversableArray } from "./array.ts"; -import { fromCompare } from "./comparable.ts"; -import { createBind, createTap } from "./flatmappable.ts"; -import { createBindTo } from "./mappable.ts"; -import { flow, pipe } from "./fn.ts"; - -/** - * A Forest is an array of Trees. - * - * @since 2.0.0 - */ -export type Forest = ReadonlyArray>; - -/** - * A Tree is a node with a single value and a Forest of children. - * - * @since 2.0.0 - */ -export type Tree = { - readonly value: A; - readonly forest: Forest; -}; - -/** - * AnyTree is useful as an extends constraint on a generic type. - * - * @since 2.0.0 - */ -// deno-lint-ignore no-explicit-any -export type AnyTree = Tree; - -/** - * TypeOf is a type extractor that returns the inner type A of a Tree. - * - * @since 2.0.0 - */ -export type TypeOf = T extends Tree ? A : never; - -/** - * KindTree is the Kind implementation for a Tree. - * - * @since 2.0.0 - */ -export interface KindTree extends Kind { - readonly kind: Tree>; -} - -/** - * This is an internal draw function used to draw an ascii representation of a - * tree. - * - * @since 2.0.0 - */ -function drawString(indentation: string, forest: Forest): string { - let r = ""; - const len = forest.length; - let tree: Tree; - for (let i = 0; i < len; i++) { - tree = forest[i]; - const isLast = i === len - 1; - r += indentation + (isLast ? "└" : "├") + "─ " + tree.value; - r += drawString( - indentation + (len > 1 && !isLast ? "│ " : " "), - tree.forest, - ); - } - return r; -} - -/** - * This is a constructor function, taking a single value A and optionally an - * array of Tree and returning a Tree. - * - * @since 2.0.0 - */ -export function tree(value: A, forest: Forest = []): Tree { - return ({ value, forest }); -} - -/** - * The wrap function for Wrappable. - * - * @since 2.0.0 - */ -export function wrap(value: A, forest: Forest = []): Tree { - return tree(value, forest); -} - -/** - * The map function for Mappable. - * - * @since 2.0.0 - */ -export function map(fai: (a: A) => I): (ta: Tree) => Tree { - return (ta) => wrap(fai(ta.value), ta.forest.map(map(fai))); -} - -/** - * The flatmap function for Flatmappable. - * - * @since 2.0.0 - */ -export function flatmap( - fati: (a: A) => Tree, -): (ta: Tree) => Tree { - return (ta) => { - const { value, forest } = fati(ta.value); - return wrap(value, [...ta.forest.map(flatmap(fati)), ...forest]); - }; -} - -/** - * The apply function for Applicable. - * - * @since 2.0.0 - */ -export function apply(ua: Tree): (tfai: Tree<(a: A) => I>) => Tree { - return (ufai) => pipe(ufai, flatmap(flow(map, (fn) => fn(ua)))); -} - -/** - * The fold function for Foldable. - * - * @since 2.0.0 - */ -export function fold( - foao: (o: O, a: A) => O, - o: O, -): (ta: Tree) => O { - const foldr = (result: O, tree: Tree) => fold(foao, result)(tree); - return (ta) => TraversableArray.fold(foldr, foao(o, ta.value))(ta.forest); -} - -/** - * The traverse function for Traversable. - * - * @since 2.0.0 - */ -export function traverse( - V: Applicable, -): ( - favi: (a: A) => $, -) => (ta: Tree) => $, J, K], [L], [M]> { - const traverseArray = TraversableArray.traverse(V); - return ( - favi: (a: A) => $, - ): (ua: Tree) => $, J, K], [L], [M]> => { - const pusher: (i: I) => (is: Forest) => Tree = (i) => (fs) => - tree(i, fs); - const wrappedPusher = V.wrap(pusher); - const traverseTree = (ua: Tree): $, J, K], [L], [M]> => - pipe( - wrappedPusher, - V.apply(favi(ua.value)), - V.apply(traverseForest(ua.forest)), - ); - const traverseForest = traverseArray(traverseTree); - return traverseTree; - }; -} - -/** - * The unwrap function for Unwrappable - * - * @since 2.0.0 - */ -export function unwrap({ value }: Tree): A { - return value; -} - -/** - * Converts a Forest into a tree representation. - * - * @since 2.0.0 - */ -export function drawForest(forest: Forest): string { - return drawString("\n", forest); -} - -/** - * Converts a Tree into a tree representation. - * - * @since 2.0.0 - */ -export function drawTree(tree: Tree): string { - return tree.value + drawForest(tree.forest); -} - -/** - * The match function is a recursive fold that collapses a Tree into a single - * value I. It does this from the head of the Tree first. - * - * @since 2.0.0 - */ -export function match( - fai: (a: A, is: Array) => I, -): (ta: Tree) => I { - const go = (tree: Tree): I => fai(tree.value, tree.forest.map(go)); - return go; -} - -/** - * Create an instance of Comparable> from an instance of Comparable. - * - * @since 2.0.0 - */ -export function getComparableTree( - { compare }: Comparable, -): Comparable> { - const go: Compare> = (second) => (first) => { - if (first === second) { - return true; - } else if ( - compare(second.value)(first.value) && - first.forest.length === second.forest.length - ) { - return first.forest.every((tree, index) => - go(second.forest[index])(tree) - ); - } else { - return false; - } - }; - - return fromCompare(go); -} - -/** - * Get an instance of Showable> from an instance of Showable. - * - * @since 2.0.0 - */ -export function getShowable({ show }: Showable): Showable> { - return ({ show: flow(map(show), drawTree) }); -} - -/** - * @since 2.0.0 - */ -export const ApplicableTree: Applicable = { apply, map, wrap }; - -/** - * @since 2.0.0 - */ -export const FlatmappableTree: Flatmappable = { - apply, - map, - flatmap, - wrap, -}; - -/** - * @since 2.0.0 - */ -export const FoldableTree: Foldable = { fold }; - -/** - * @since 2.0.0 - */ -export const MappableTree: Mappable = { map }; - -/** - * @since 2.0.0 - */ -export const TraversableTree: Traversable = { map, fold, traverse }; - -/** - * @since 2.0.0 - */ -export const WrappableTree: Wrappable = { wrap }; - -/** - * @since 2.0.0 - */ -export const tap = createTap(FlatmappableTree); - -/** - * @since 2.0.0 - */ -export const bind = createBind(FlatmappableTree); - -/** - * @since 2.0.0 - */ -export const bindTo = createBindTo(MappableTree); diff --git a/vendor/deno.land/x/fun@v2.0.0/wrappable.ts b/vendor/deno.land/x/fun@v2.0.0/wrappable.ts deleted file mode 100644 index 6d0e7c2..0000000 --- a/vendor/deno.land/x/fun@v2.0.0/wrappable.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type { $, Hold, Kind } from "./kind.ts"; - -/** - * @since 2.0.0 - */ -export interface Wrappable extends Hold { - readonly wrap: ( - a: A, - ) => $; -} diff --git a/vendor/deno.land/x/konfig@v0.1.2/konfig.ts b/vendor/deno.land/x/konfig@v0.1.2/konfig.ts deleted file mode 100644 index a322a0e..0000000 --- a/vendor/deno.land/x/konfig@v0.1.2/konfig.ts +++ /dev/null @@ -1,290 +0,0 @@ -import { - array, - compose, - DecodeError, - Decoder, - keyErr, - leafErr, - manyErr, - string, - success, -} from "https://deno.land/x/fun@v.2.0.0-alpha.11/decoder.ts"; -import { flow, Fn, pipe } from "https://deno.land/x/fun@v.2.0.0-alpha.11/fn.ts"; -import { parse as parseFlags } from "std/flags/mod.ts"; -import { - alt, - chain, - Either, - left, - mapLeft, - MonadEither, - right, - tryCatch, -} from "https://deno.land/x/fun@v.2.0.0-alpha.11/either.ts"; -import { - lookupAt, - map, - sequence, -} from "https://deno.land/x/fun@v.2.0.0-alpha.11/record.ts"; -import { match } from "https://deno.land/x/fun@v.2.0.0-alpha.11/option.ts"; -import { - lookup, - reduce, -} from "https://deno.land/x/fun@v.2.0.0-alpha.11/array.ts"; -import { FnEither } from "https://deno.land/x/fun@v.2.0.0-alpha.11/fn_either.ts"; - -const sequenceStruct = sequence(MonadEither); - -/** - * Represents an ENV variable - */ -export interface Env> { - _tag: "Env"; - read: FnEither; -} - -/** - * Represents a `--flag` argument - */ -export interface Flag { - _tag: "Flag"; - read: FnEither; -} - -/** - * Represents an `` argument - */ -export interface Positional { - _tag: "Positional"; - read: FnEither; -} - -/** - * Represents a default value if the parser fails - */ -export interface Fallback { - _tag: "Fallback"; - read: FnEither; -} - -/** - * Try multiple parsers until one succeeds - */ -export interface Pipeline { - _tag: "Pipeline"; - read: FnEither; -} - -/** - * Use a function, which has access to already parased values. - */ -export interface Interpolation { - _tag: "Interpolation"; - read: FnEither; -} - -export type Schema = { - _tag: "Schema"; - read: () => Either; - // | ((d: D) => Either); - props: { [K in keyof A]: Parser }; -}; -export type Parser = - | Env - | Flag - | Pipeline - | Interpolation - | Fallback - | Schema; - -export type Konfig = A extends Parser ? B : never; - -// Error -export const missingKey = flow(leafErr, left); - -// Read from Deno.env -export function env( - variable: string, - decoder = > string, -): Env { - const missingEnv = missingKey(variable, "Missing environment variable"); - - const read = flow( - lookupAt(variable), - match( - () => missingEnv, - (a) => right(a), - ), - chain(decoder), - ); - return { - _tag: "Env", - read, - }; -} - -// Read from Deno.args -export function flag( - name: string, - decoder = > string, -): Flag { - const missingArg = missingKey(name, "Missing argument"); - const read = flow( - (args: string[]) => parseFlags(args, { "--": true }), - lookupAt(name), - match( - () => missingArg, - (a: A) => right(a), - ), - chain(decoder), - ); - return { - _tag: "Flag", - read, - }; -} - -// Parser for nth argument e.g. `deno run x.ts ` (independent of flags) -export const nth = ( - pos: number, - decoder = > string, -): Positional => { - const idx = pos - 1; - const missingPos = missingKey( - pos, - `Missing positional argument: pos: ${pos} / idx ${idx}`, - ); - const read = pipe( - array(string), - compose( - flow( - lookup(pos - 1), - match( - () => missingPos, - (a) => right(a), - ), - chain(decoder), - ), - ), - (decoder) => flag("_", decoder), - (parser) => parser.read, - ); - return { - _tag: "Positional", - read, - }; -}; - -// Fallback in case there's no value -export function fallback(value: A): Fallback { - return { - _tag: "Fallback", - read: () => success(value), - }; -} - -export function schema( - props: Readonly<{ [K in keyof A]: Parser }>, -): Schema { - const decodeErrors: DecodeError[] = []; - const read = () => - pipe( - props, - map((parser: Parser, prop) => - pipe( - parser, - run, - mapLeft((e) => { - const err = keyErr(prop, e, "required"); - decodeErrors.push(err); - return err; - }), - ) - ), - (props) => - sequenceStruct(props) as Either, - mapLeft(() => - manyErr( - ...(decodeErrors as [DecodeError, DecodeError, ...DecodeError[]]), - ) - ), - ); - return { - _tag: "Schema", - props, - read, - }; -} - -// compose -export function pipeline(...parsers: Parser[]): Pipeline { - const read = () => - pipe( - parsers, - reduce( - (acc, parser) => pipe(parser, run, alt, (or) => or(acc)), - left(leafErr("compose", "No parsers matched")), - ), - ); - return { - _tag: "Pipeline", - read, - }; -} - -// interpolate over a schema -export function interpolation, A>( - fn: Fn, A>, - decoder = > string, -): Fn> { - const evaluateFn = (a: any): Either => - tryCatch( - () => fn(a), - (e) => leafErr("interpolation", `Failed to interpolate: ${String(e)}`), - ); - return (schema) => ({ - _tag: "Interpolation", - read: () => pipe(schema, run, chain(evaluateFn), chain(decoder)), - }); -} - -export function run({ _tag, read }: Parser): Either { - switch (_tag) { - case "Env": - return pipe(Deno.env.toObject(), read); - case "Flag": - return pipe(Deno.args, read); - default: - return read({}); - } -} - -export function prop

(prop: P, parser: Parser) { - return ({ - props, - }: Schema): Schema< - { - [K in keyof B | P]: K extends keyof B ? B[K] : A; - } - > => { - props = { ...props, [prop]: parser }; - return schema(props) as Schema< - { - [K in keyof B | P]: K extends keyof B ? B[K] : A; - } - >; - }; -} - -export function bind

(property: P, fn: (b: B) => A) { - return ( - s: Schema, - ): Schema<{ [K in keyof B | P]: K extends keyof B ? B[K] : A }> => { - const parser = interpolation(fn)(s); - return prop(property, parser)(s) as Schema< - { - [K in keyof B | P]: K extends keyof B ? B[K] : A; - } - >; - }; -} diff --git a/vendor/deno.land/x/konfig@v0.1.2/mod.ts b/vendor/deno.land/x/konfig@v0.1.2/mod.ts deleted file mode 100644 index a61261f..0000000 --- a/vendor/deno.land/x/konfig@v0.1.2/mod.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./konfig.ts"; diff --git a/vendor/deno.land/x/semver@v1.4.1/mod.ts b/vendor/deno.land/x/semver@v1.4.1/mod.ts deleted file mode 100644 index 00a1aed..0000000 --- a/vendor/deno.land/x/semver@v1.4.1/mod.ts +++ /dev/null @@ -1,1800 +0,0 @@ -export type ReleaseType = - | "pre" - | "major" - | "premajor" - | "minor" - | "preminor" - | "patch" - | "prepatch" - | "prerelease"; - -export type Operator = - | "===" - | "!==" - | "" - | "=" - | "==" - | "!=" - | ">" - | ">=" - | "<" - | "<="; - -export interface Options { - loose?: boolean; - includePrerelease?: boolean; -} - -// Note: this is the semver.org version of the spec that it implements -// Not necessarily the package version of this code. -export const SEMVER_SPEC_VERSION = "2.0.0"; - -const MAX_LENGTH: number = 256; - -// Max safe segment length for coercion. -const MAX_SAFE_COMPONENT_LENGTH: number = 16; - -// The actual regexps -const re: RegExp[] = []; -const src: string[] = []; -let R: number = 0; - -// The following Regular Expressions can be used for tokenizing, -// validating, and parsing SemVer version strings. - -// ## Numeric Identifier -// A single `0`, or a non-zero digit followed by zero or more digits. - -const NUMERICIDENTIFIER: number = R++; -src[NUMERICIDENTIFIER] = "0|[1-9]\\d*"; -const NUMERICIDENTIFIERLOOSE: number = R++; -src[NUMERICIDENTIFIERLOOSE] = "[0-9]+"; - -// ## Non-numeric Identifier -// Zero or more digits, followed by a letter or hyphen, and then zero or -// more letters, digits, or hyphens. - -const NONNUMERICIDENTIFIER: number = R++; -src[NONNUMERICIDENTIFIER] = "\\d*[a-zA-Z-][a-zA-Z0-9-]*"; - -// ## Main Version -// Three dot-separated numeric identifiers. - -const MAINVERSION: number = R++; -const nid = src[NUMERICIDENTIFIER]; -src[MAINVERSION] = `(${nid})\\.(${nid})\\.(${nid})`; - -const MAINVERSIONLOOSE: number = R++; -const nidl = src[NUMERICIDENTIFIERLOOSE]; -src[MAINVERSIONLOOSE] = `(${nidl})\\.(${nidl})\\.(${nidl})`; - -// ## Pre-release Version Identifier -// A numeric identifier, or a non-numeric identifier. - -const PRERELEASEIDENTIFIER: number = R++; -src[PRERELEASEIDENTIFIER] = "(?:" + src[NUMERICIDENTIFIER] + "|" + - src[NONNUMERICIDENTIFIER] + ")"; - -const PRERELEASEIDENTIFIERLOOSE: number = R++; -src[PRERELEASEIDENTIFIERLOOSE] = "(?:" + src[NUMERICIDENTIFIERLOOSE] + "|" + - src[NONNUMERICIDENTIFIER] + ")"; - -// ## Pre-release Version -// Hyphen, followed by one or more dot-separated pre-release version -// identifiers. - -const PRERELEASE: number = R++; -src[PRERELEASE] = "(?:-(" + - src[PRERELEASEIDENTIFIER] + - "(?:\\." + - src[PRERELEASEIDENTIFIER] + - ")*))"; - -const PRERELEASELOOSE: number = R++; -src[PRERELEASELOOSE] = "(?:-?(" + - src[PRERELEASEIDENTIFIERLOOSE] + - "(?:\\." + - src[PRERELEASEIDENTIFIERLOOSE] + - ")*))"; - -// ## Build Metadata Identifier -// Any combination of digits, letters, or hyphens. - -const BUILDIDENTIFIER: number = R++; -src[BUILDIDENTIFIER] = "[0-9A-Za-z-]+"; - -// ## Build Metadata -// Plus sign, followed by one or more period-separated build metadata -// identifiers. - -const BUILD: number = R++; -src[BUILD] = "(?:\\+(" + src[BUILDIDENTIFIER] + "(?:\\." + - src[BUILDIDENTIFIER] + ")*))"; - -// ## Full Version String -// A main version, followed optionally by a pre-release version and -// build metadata. - -// Note that the only major, minor, patch, and pre-release sections of -// the version string are capturing groups. The build metadata is not a -// capturing group, because it should not ever be used in version -// comparison. - -const FULL: number = R++; -const FULLPLAIN = "v?" + src[MAINVERSION] + src[PRERELEASE] + "?" + src[BUILD] + - "?"; - -src[FULL] = "^" + FULLPLAIN + "$"; - -// like full, but allows v1.2.3 and =1.2.3, which people do sometimes. -// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty -// common in the npm registry. -const LOOSEPLAIN: string = "[v=\\s]*" + - src[MAINVERSIONLOOSE] + - src[PRERELEASELOOSE] + - "?" + - src[BUILD] + - "?"; - -const LOOSE: number = R++; -src[LOOSE] = "^" + LOOSEPLAIN + "$"; - -const GTLT: number = R++; -src[GTLT] = "((?:<|>)?=?)"; - -// Something like "2.*" or "1.2.x". -// Note that "x.x" is a valid xRange identifer, meaning "any version" -// Only the first item is strictly required. -const XRANGEIDENTIFIERLOOSE: number = R++; -src[XRANGEIDENTIFIERLOOSE] = src[NUMERICIDENTIFIERLOOSE] + "|x|X|\\*"; -const XRANGEIDENTIFIER: number = R++; -src[XRANGEIDENTIFIER] = src[NUMERICIDENTIFIER] + "|x|X|\\*"; - -const XRANGEPLAIN: number = R++; -src[XRANGEPLAIN] = "[v=\\s]*(" + - src[XRANGEIDENTIFIER] + - ")" + - "(?:\\.(" + - src[XRANGEIDENTIFIER] + - ")" + - "(?:\\.(" + - src[XRANGEIDENTIFIER] + - ")" + - "(?:" + - src[PRERELEASE] + - ")?" + - src[BUILD] + - "?" + - ")?)?"; - -const XRANGEPLAINLOOSE: number = R++; -src[XRANGEPLAINLOOSE] = "[v=\\s]*(" + - src[XRANGEIDENTIFIERLOOSE] + - ")" + - "(?:\\.(" + - src[XRANGEIDENTIFIERLOOSE] + - ")" + - "(?:\\.(" + - src[XRANGEIDENTIFIERLOOSE] + - ")" + - "(?:" + - src[PRERELEASELOOSE] + - ")?" + - src[BUILD] + - "?" + - ")?)?"; - -const XRANGE: number = R++; -src[XRANGE] = "^" + src[GTLT] + "\\s*" + src[XRANGEPLAIN] + "$"; -const XRANGELOOSE = R++; -src[XRANGELOOSE] = "^" + src[GTLT] + "\\s*" + src[XRANGEPLAINLOOSE] + "$"; - -// Coercion. -// Extract anything that could conceivably be a part of a valid semver -const COERCE: number = R++; -src[COERCE] = "(?:^|[^\\d])" + - "(\\d{1," + - MAX_SAFE_COMPONENT_LENGTH + - "})" + - "(?:\\.(\\d{1," + - MAX_SAFE_COMPONENT_LENGTH + - "}))?" + - "(?:\\.(\\d{1," + - MAX_SAFE_COMPONENT_LENGTH + - "}))?" + - "(?:$|[^\\d])"; - -// Tilde ranges. -// Meaning is "reasonably at or greater than" -const LONETILDE: number = R++; -src[LONETILDE] = "(?:~>?)"; - -const TILDETRIM: number = R++; -src[TILDETRIM] = "(\\s*)" + src[LONETILDE] + "\\s+"; -re[TILDETRIM] = new RegExp(src[TILDETRIM], "g"); -const tildeTrimReplace: string = "$1~"; - -const TILDE: number = R++; -src[TILDE] = "^" + src[LONETILDE] + src[XRANGEPLAIN] + "$"; -const TILDELOOSE: number = R++; -src[TILDELOOSE] = "^" + src[LONETILDE] + src[XRANGEPLAINLOOSE] + "$"; - -// Caret ranges. -// Meaning is "at least and backwards compatible with" -const LONECARET: number = R++; -src[LONECARET] = "(?:\\^)"; - -const CARETTRIM: number = R++; -src[CARETTRIM] = "(\\s*)" + src[LONECARET] + "\\s+"; -re[CARETTRIM] = new RegExp(src[CARETTRIM], "g"); -const caretTrimReplace: string = "$1^"; - -const CARET: number = R++; -src[CARET] = "^" + src[LONECARET] + src[XRANGEPLAIN] + "$"; -const CARETLOOSE: number = R++; -src[CARETLOOSE] = "^" + src[LONECARET] + src[XRANGEPLAINLOOSE] + "$"; - -// A simple gt/lt/eq thing, or just "" to indicate "any version" -const COMPARATORLOOSE: number = R++; -src[COMPARATORLOOSE] = "^" + src[GTLT] + "\\s*(" + LOOSEPLAIN + ")$|^$"; -const COMPARATOR: number = R++; -src[COMPARATOR] = "^" + src[GTLT] + "\\s*(" + FULLPLAIN + ")$|^$"; - -// An expression to strip any whitespace between the gtlt and the thing -// it modifies, so that `> 1.2.3` ==> `>1.2.3` -const COMPARATORTRIM: number = R++; -src[COMPARATORTRIM] = "(\\s*)" + src[GTLT] + "\\s*(" + LOOSEPLAIN + "|" + - src[XRANGEPLAIN] + ")"; - -// this one has to use the /g flag -re[COMPARATORTRIM] = new RegExp(src[COMPARATORTRIM], "g"); -const comparatorTrimReplace: string = "$1$2$3"; - -// Something like `1.2.3 - 1.2.4` -// Note that these all use the loose form, because they'll be -// checked against either the strict or loose comparator form -// later. -const HYPHENRANGE: number = R++; -src[HYPHENRANGE] = "^\\s*(" + - src[XRANGEPLAIN] + - ")" + - "\\s+-\\s+" + - "(" + - src[XRANGEPLAIN] + - ")" + - "\\s*$"; - -const HYPHENRANGELOOSE: number = R++; -src[HYPHENRANGELOOSE] = "^\\s*(" + - src[XRANGEPLAINLOOSE] + - ")" + - "\\s+-\\s+" + - "(" + - src[XRANGEPLAINLOOSE] + - ")" + - "\\s*$"; - -// Star ranges basically just allow anything at all. -const STAR: number = R++; -src[STAR] = "(<|>)?=?\\s*\\*"; - -// Compile to actual regexp objects. -// All are flag-free, unless they were created above with a flag. -for (let i: number = 0; i < R; i++) { - if (!re[i]) { - re[i] = new RegExp(src[i]); - } -} - -export function parse( - version: string | SemVer | null, - optionsOrLoose?: boolean | Options, -): SemVer | null { - if (!optionsOrLoose || typeof optionsOrLoose !== "object") { - optionsOrLoose = { - loose: !!optionsOrLoose, - includePrerelease: false, - }; - } - - if (version instanceof SemVer) { - return version; - } - - if (typeof version !== "string") { - return null; - } - - if (version.length > MAX_LENGTH) { - return null; - } - - const r: RegExp = optionsOrLoose.loose ? re[LOOSE] : re[FULL]; - if (!r.test(version)) { - return null; - } - - try { - return new SemVer(version, optionsOrLoose); - } catch (er) { - return null; - } -} - -export function valid( - version: string | SemVer | null, - optionsOrLoose?: boolean | Options, -): string | null { - if (version === null) return null; - const v: SemVer | null = parse(version, optionsOrLoose); - return v ? v.version : null; -} - -export function clean( - version: string, - optionsOrLoose?: boolean | Options, -): string | null { - const s: SemVer | null = parse( - version.trim().replace(/^[=v]+/, ""), - optionsOrLoose, - ); - return s ? s.version : null; -} - -export class SemVer { - raw!: string; - loose!: boolean; - options!: Options; - - major!: number; - minor!: number; - patch!: number; - version!: string; - build!: ReadonlyArray; - prerelease!: Array; - - constructor(version: string | SemVer, optionsOrLoose?: boolean | Options) { - if (!optionsOrLoose || typeof optionsOrLoose !== "object") { - optionsOrLoose = { - loose: !!optionsOrLoose, - includePrerelease: false, - }; - } - if (version instanceof SemVer) { - if (version.loose === optionsOrLoose.loose) { - return version; - } else { - version = version.version; - } - } else if (typeof version !== "string") { - throw new TypeError("Invalid Version: " + version); - } - - if (version.length > MAX_LENGTH) { - throw new TypeError( - "version is longer than " + MAX_LENGTH + " characters", - ); - } - - if (!(this instanceof SemVer)) { - return new SemVer(version, optionsOrLoose); - } - - this.options = optionsOrLoose; - this.loose = !!optionsOrLoose.loose; - - const m = version.trim().match(optionsOrLoose.loose ? re[LOOSE] : re[FULL]); - - if (!m) { - throw new TypeError("Invalid Version: " + version); - } - - this.raw = version; - - // these are actually numbers - this.major = +m[1]; - this.minor = +m[2]; - this.patch = +m[3]; - - if (this.major > Number.MAX_SAFE_INTEGER || this.major < 0) { - throw new TypeError("Invalid major version"); - } - - if (this.minor > Number.MAX_SAFE_INTEGER || this.minor < 0) { - throw new TypeError("Invalid minor version"); - } - - if (this.patch > Number.MAX_SAFE_INTEGER || this.patch < 0) { - throw new TypeError("Invalid patch version"); - } - - // numberify any prerelease numeric ids - if (!m[4]) { - this.prerelease = []; - } else { - this.prerelease = m[4].split(".").map((id: string) => { - if (/^[0-9]+$/.test(id)) { - const num: number = +id; - if (num >= 0 && num < Number.MAX_SAFE_INTEGER) { - return num; - } - } - return id; - }); - } - - this.build = m[5] ? m[5].split(".") : []; - this.format(); - } - - format(): string { - this.version = this.major + "." + this.minor + "." + this.patch; - if (this.prerelease.length) { - this.version += "-" + this.prerelease.join("."); - } - return this.version; - } - - compare(other: string | SemVer): 1 | 0 | -1 { - if (!(other instanceof SemVer)) { - other = new SemVer(other, this.options); - } - - return this.compareMain(other) || this.comparePre(other); - } - - compareMain(other: string | SemVer): 1 | 0 | -1 { - if (!(other instanceof SemVer)) { - other = new SemVer(other, this.options); - } - - return ( - compareIdentifiers(this.major, other.major) || - compareIdentifiers(this.minor, other.minor) || - compareIdentifiers(this.patch, other.patch) - ); - } - - comparePre(other: string | SemVer): 1 | 0 | -1 { - if (!(other instanceof SemVer)) { - other = new SemVer(other, this.options); - } - - // NOT having a prerelease is > having one - if (this.prerelease.length && !other.prerelease.length) { - return -1; - } else if (!this.prerelease.length && other.prerelease.length) { - return 1; - } else if (!this.prerelease.length && !other.prerelease.length) { - return 0; - } - - let i: number = 0; - do { - const a: string | number = this.prerelease[i]; - const b: string | number = other.prerelease[i]; - if (a === undefined && b === undefined) { - return 0; - } else if (b === undefined) { - return 1; - } else if (a === undefined) { - return -1; - } else if (a === b) { - continue; - } else { - return compareIdentifiers(a, b); - } - } while (++i); - return 1; - } - - compareBuild(other: string | SemVer): 1 | 0 | -1 { - if (!(other instanceof SemVer)) { - other = new SemVer(other, this.options); - } - - let i: number = 0; - do { - const a: string = this.build[i]; - const b: string = other.build[i]; - if (a === undefined && b === undefined) { - return 0; - } else if (b === undefined) { - return 1; - } else if (a === undefined) { - return -1; - } else if (a === b) { - continue; - } else { - return compareIdentifiers(a, b); - } - } while (++i); - return 1; - } - - inc(release: ReleaseType, identifier?: string): SemVer { - switch (release) { - case "premajor": - this.prerelease.length = 0; - this.patch = 0; - this.minor = 0; - this.major++; - this.inc("pre", identifier); - break; - case "preminor": - this.prerelease.length = 0; - this.patch = 0; - this.minor++; - this.inc("pre", identifier); - break; - case "prepatch": - // If this is already a prerelease, it will bump to the next version - // drop any prereleases that might already exist, since they are not - // relevant at this point. - this.prerelease.length = 0; - this.inc("patch", identifier); - this.inc("pre", identifier); - break; - // If the input is a non-prerelease version, this acts the same as - // prepatch. - case "prerelease": - if (this.prerelease.length === 0) { - this.inc("patch", identifier); - } - this.inc("pre", identifier); - break; - - case "major": - // If this is a pre-major version, bump up to the same major version. - // Otherwise increment major. - // 1.0.0-5 bumps to 1.0.0 - // 1.1.0 bumps to 2.0.0 - if ( - this.minor !== 0 || - this.patch !== 0 || - this.prerelease.length === 0 - ) { - this.major++; - } - this.minor = 0; - this.patch = 0; - this.prerelease = []; - break; - case "minor": - // If this is a pre-minor version, bump up to the same minor version. - // Otherwise increment minor. - // 1.2.0-5 bumps to 1.2.0 - // 1.2.1 bumps to 1.3.0 - if (this.patch !== 0 || this.prerelease.length === 0) { - this.minor++; - } - this.patch = 0; - this.prerelease = []; - break; - case "patch": - // If this is not a pre-release version, it will increment the patch. - // If it is a pre-release it will bump up to the same patch version. - // 1.2.0-5 patches to 1.2.0 - // 1.2.0 patches to 1.2.1 - if (this.prerelease.length === 0) { - this.patch++; - } - this.prerelease = []; - break; - // This probably shouldn't be used publicly. - // 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction. - case "pre": - if (this.prerelease.length === 0) { - this.prerelease = [0]; - } else { - let i: number = this.prerelease.length; - while (--i >= 0) { - if (typeof this.prerelease[i] === "number") { - // deno-fmt-ignore - (this.prerelease[i] as number)++; - i = -2; - } - } - if (i === -1) { - // didn't increment anything - this.prerelease.push(0); - } - } - if (identifier) { - // 1.2.0-beta.1 bumps to 1.2.0-beta.2, - // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0 - if (this.prerelease[0] === identifier) { - if (isNaN(this.prerelease[1] as number)) { - this.prerelease = [identifier, 0]; - } - } else { - this.prerelease = [identifier, 0]; - } - } - break; - - default: - throw new Error("invalid increment argument: " + release); - } - this.format(); - this.raw = this.version; - return this; - } - - toString(): string { - return this.version; - } -} - -/** - * Return the version incremented by the release type (major, minor, patch, or prerelease), or null if it's not valid. - */ -export function inc( - version: string | SemVer, - release: ReleaseType, - optionsOrLoose?: boolean | Options, - identifier?: string, -): string | null { - if (typeof optionsOrLoose === "string") { - identifier = optionsOrLoose; - optionsOrLoose = undefined; - } - try { - return new SemVer(version, optionsOrLoose).inc(release, identifier).version; - } catch (er) { - return null; - } -} - -export function diff( - version1: string | SemVer, - version2: string | SemVer, - optionsOrLoose?: boolean | Options, -): ReleaseType | null { - if (eq(version1, version2, optionsOrLoose)) { - return null; - } else { - const v1: SemVer | null = parse(version1); - const v2: SemVer | null = parse(version2); - let prefix: string = ""; - let defaultResult: ReleaseType | null = null; - - if (v1 && v2) { - if (v1.prerelease.length || v2.prerelease.length) { - prefix = "pre"; - defaultResult = "prerelease"; - } - - for (const key in v1) { - if (key === "major" || key === "minor" || key === "patch") { - if (v1[key] !== v2[key]) { - return (prefix + key) as ReleaseType; - } - } - } - } - return defaultResult; // may be undefined - } -} - -const numeric: RegExp = /^[0-9]+$/; - -export function compareIdentifiers( - a: string | number | null, - b: string | number | null, -): 1 | 0 | -1 { - const anum: boolean = numeric.test(a as string); - const bnum: boolean = numeric.test(b as string); - - if (a === null || b === null) throw "Comparison against null invalid"; - - if (anum && bnum) { - a = +a; - b = +b; - } - - return a === b ? 0 : anum && !bnum ? -1 : bnum && !anum ? 1 : a < b ? -1 : 1; -} - -export function rcompareIdentifiers( - a: string | null, - b: string | null, -): 1 | 0 | -1 { - return compareIdentifiers(b, a); -} - -/** - * Return the major version number. - */ -export function major( - v: string | SemVer, - optionsOrLoose?: boolean | Options, -): number { - return new SemVer(v, optionsOrLoose).major; -} - -/** - * Return the minor version number. - */ -export function minor( - v: string | SemVer, - optionsOrLoose?: boolean | Options, -): number { - return new SemVer(v, optionsOrLoose).minor; -} - -/** - * Return the patch version number. - */ -export function patch( - v: string | SemVer, - optionsOrLoose?: boolean | Options, -): number { - return new SemVer(v, optionsOrLoose).patch; -} - -export function compare( - v1: string | SemVer, - v2: string | SemVer, - optionsOrLoose?: boolean | Options, -): 1 | 0 | -1 { - return new SemVer(v1, optionsOrLoose).compare(new SemVer(v2, optionsOrLoose)); -} - -export function compareLoose( - a: string | SemVer, - b: string | SemVer, -): 1 | 0 | -1 { - return compare(a, b, true); -} - -export function compareBuild( - a: string | SemVer, - b: string | SemVer, - loose?: boolean | Options, -): 1 | 0 | -1 { - var versionA = new SemVer(a, loose); - var versionB = new SemVer(b, loose); - return versionA.compare(versionB) || versionA.compareBuild(versionB); -} - -export function rcompare( - v1: string | SemVer, - v2: string | SemVer, - optionsOrLoose?: boolean | Options, -): 1 | 0 | -1 { - return compare(v2, v1, optionsOrLoose); -} - -export function sort( - list: T[], - optionsOrLoose?: boolean | Options, -): T[] { - return list.sort((a, b) => { - return compareBuild(a, b, optionsOrLoose); - }); -} - -export function rsort( - list: T[], - optionsOrLoose?: boolean | Options, -): T[] { - return list.sort((a, b) => { - return compareBuild(b, a, optionsOrLoose); - }); -} - -export function gt( - v1: string | SemVer, - v2: string | SemVer, - optionsOrLoose?: boolean | Options, -): boolean { - return compare(v1, v2, optionsOrLoose) > 0; -} - -export function lt( - v1: string | SemVer, - v2: string | SemVer, - optionsOrLoose?: boolean | Options, -): boolean { - return compare(v1, v2, optionsOrLoose) < 0; -} - -export function eq( - v1: string | SemVer, - v2: string | SemVer, - optionsOrLoose?: boolean | Options, -): boolean { - return compare(v1, v2, optionsOrLoose) === 0; -} - -export function neq( - v1: string | SemVer, - v2: string | SemVer, - optionsOrLoose?: boolean | Options, -): boolean { - return compare(v1, v2, optionsOrLoose) !== 0; -} - -export function gte( - v1: string | SemVer, - v2: string | SemVer, - optionsOrLoose?: boolean | Options, -): boolean { - return compare(v1, v2, optionsOrLoose) >= 0; -} - -export function lte( - v1: string | SemVer, - v2: string | SemVer, - optionsOrLoose?: boolean | Options, -): boolean { - return compare(v1, v2, optionsOrLoose) <= 0; -} - -export function cmp( - v1: string | SemVer, - operator: Operator, - v2: string | SemVer, - optionsOrLoose?: boolean | Options, -): boolean { - switch (operator) { - case "===": - if (typeof v1 === "object") v1 = v1.version; - if (typeof v2 === "object") v2 = v2.version; - return v1 === v2; - - case "!==": - if (typeof v1 === "object") v1 = v1.version; - if (typeof v2 === "object") v2 = v2.version; - return v1 !== v2; - - case "": - case "=": - case "==": - return eq(v1, v2, optionsOrLoose); - - case "!=": - return neq(v1, v2, optionsOrLoose); - - case ">": - return gt(v1, v2, optionsOrLoose); - - case ">=": - return gte(v1, v2, optionsOrLoose); - - case "<": - return lt(v1, v2, optionsOrLoose); - - case "<=": - return lte(v1, v2, optionsOrLoose); - - default: - throw new TypeError("Invalid operator: " + operator); - } -} - -const ANY: SemVer = {} as SemVer; - -export class Comparator { - semver!: SemVer; - operator!: "" | "=" | "<" | ">" | "<=" | ">="; - value!: string; - loose!: boolean; - options!: Options; - - constructor(comp: string | Comparator, optionsOrLoose?: boolean | Options) { - if (!optionsOrLoose || typeof optionsOrLoose !== "object") { - optionsOrLoose = { - loose: !!optionsOrLoose, - includePrerelease: false, - }; - } - - if (comp instanceof Comparator) { - if (comp.loose === !!optionsOrLoose.loose) { - return comp; - } else { - comp = comp.value; - } - } - - if (!(this instanceof Comparator)) { - return new Comparator(comp, optionsOrLoose); - } - - this.options = optionsOrLoose; - this.loose = !!optionsOrLoose.loose; - this.parse(comp); - - if (this.semver === ANY) { - this.value = ""; - } else { - this.value = this.operator + this.semver.version; - } - } - - parse(comp: string): void { - const r = this.options.loose ? re[COMPARATORLOOSE] : re[COMPARATOR]; - const m = comp.match(r); - - if (!m) { - throw new TypeError("Invalid comparator: " + comp); - } - - const m1 = m[1] as "" | "=" | "<" | ">" | "<=" | ">="; - this.operator = m1 !== undefined ? m1 : ""; - - if (this.operator === "=") { - this.operator = ""; - } - - // if it literally is just '>' or '' then allow anything. - if (!m[2]) { - this.semver = ANY; - } else { - this.semver = new SemVer(m[2], this.options.loose); - } - } - - test(version: string | SemVer): boolean { - if (this.semver === ANY || version === ANY) { - return true; - } - - if (typeof version === "string") { - version = new SemVer(version, this.options); - } - - return cmp(version, this.operator, this.semver, this.options); - } - - intersects(comp: Comparator, optionsOrLoose?: boolean | Options): boolean { - if (!(comp instanceof Comparator)) { - throw new TypeError("a Comparator is required"); - } - - if (!optionsOrLoose || typeof optionsOrLoose !== "object") { - optionsOrLoose = { - loose: !!optionsOrLoose, - includePrerelease: false, - }; - } - - let rangeTmp: Range; - - if (this.operator === "") { - if (this.value === "") { - return true; - } - rangeTmp = new Range(comp.value, optionsOrLoose); - return satisfies(this.value, rangeTmp, optionsOrLoose); - } else if (comp.operator === "") { - if (comp.value === "") { - return true; - } - rangeTmp = new Range(this.value, optionsOrLoose); - return satisfies(comp.semver, rangeTmp, optionsOrLoose); - } - - const sameDirectionIncreasing: boolean = - (this.operator === ">=" || this.operator === ">") && - (comp.operator === ">=" || comp.operator === ">"); - const sameDirectionDecreasing: boolean = - (this.operator === "<=" || this.operator === "<") && - (comp.operator === "<=" || comp.operator === "<"); - const sameSemVer: boolean = this.semver.version === comp.semver.version; - const differentDirectionsInclusive: boolean = - (this.operator === ">=" || this.operator === "<=") && - (comp.operator === ">=" || comp.operator === "<="); - const oppositeDirectionsLessThan: boolean = - cmp(this.semver, "<", comp.semver, optionsOrLoose) && - (this.operator === ">=" || this.operator === ">") && - (comp.operator === "<=" || comp.operator === "<"); - const oppositeDirectionsGreaterThan: boolean = - cmp(this.semver, ">", comp.semver, optionsOrLoose) && - (this.operator === "<=" || this.operator === "<") && - (comp.operator === ">=" || comp.operator === ">"); - - return ( - sameDirectionIncreasing || - sameDirectionDecreasing || - (sameSemVer && differentDirectionsInclusive) || - oppositeDirectionsLessThan || - oppositeDirectionsGreaterThan - ); - } - - toString(): string { - return this.value; - } -} - -export class Range { - range!: string; - raw!: string; - loose!: boolean; - options!: Options; - includePrerelease!: boolean; - set!: ReadonlyArray>; - - constructor( - range: string | Range | Comparator, - optionsOrLoose?: boolean | Options, - ) { - if (!optionsOrLoose || typeof optionsOrLoose !== "object") { - optionsOrLoose = { - loose: !!optionsOrLoose, - includePrerelease: false, - }; - } - - if (range instanceof Range) { - if ( - range.loose === !!optionsOrLoose.loose && - range.includePrerelease === !!optionsOrLoose.includePrerelease - ) { - return range; - } else { - return new Range(range.raw, optionsOrLoose); - } - } - - if (range instanceof Comparator) { - return new Range(range.value, optionsOrLoose); - } - - if (!(this instanceof Range)) { - return new Range(range, optionsOrLoose); - } - - this.options = optionsOrLoose; - this.loose = !!optionsOrLoose.loose; - this.includePrerelease = !!optionsOrLoose.includePrerelease; - - // First, split based on boolean or || - this.raw = range; - this.set = range - .split(/\s*\|\|\s*/) - .map((range) => this.parseRange(range.trim())) - .filter((c) => { - // throw out any that are not relevant for whatever reason - return c.length; - }); - - if (!this.set.length) { - throw new TypeError("Invalid SemVer Range: " + range); - } - - this.format(); - } - - format(): string { - this.range = this.set - .map((comps) => comps.join(" ").trim()) - .join("||") - .trim(); - return this.range; - } - - parseRange(range: string): ReadonlyArray { - const loose = this.options.loose; - range = range.trim(); - // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` - const hr: RegExp = loose ? re[HYPHENRANGELOOSE] : re[HYPHENRANGE]; - range = range.replace(hr, hyphenReplace); - - // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5` - range = range.replace(re[COMPARATORTRIM], comparatorTrimReplace); - - // `~ 1.2.3` => `~1.2.3` - range = range.replace(re[TILDETRIM], tildeTrimReplace); - - // `^ 1.2.3` => `^1.2.3` - range = range.replace(re[CARETTRIM], caretTrimReplace); - - // normalize spaces - range = range.split(/\s+/).join(" "); - - // At this point, the range is completely trimmed and - // ready to be split into comparators. - - const compRe: RegExp = loose ? re[COMPARATORLOOSE] : re[COMPARATOR]; - let set: string[] = range - .split(" ") - .map((comp) => parseComparator(comp, this.options)) - .join(" ") - .split(/\s+/); - if (this.options.loose) { - // in loose mode, throw out any that are not valid comparators - set = set.filter((comp) => { - return !!comp.match(compRe); - }); - } - - return set.map((comp) => new Comparator(comp, this.options)); - } - - test(version: string | SemVer): boolean { - if (typeof version === "string") { - version = new SemVer(version, this.options); - } - - for (var i = 0; i < this.set.length; i++) { - if (testSet(this.set[i], version, this.options)) { - return true; - } - } - return false; - } - - intersects(range?: Range, optionsOrLoose?: boolean | Options): boolean { - if (!(range instanceof Range)) { - throw new TypeError("a Range is required"); - } - - return this.set.some((thisComparators) => { - return ( - isSatisfiable(thisComparators, optionsOrLoose) && - range.set.some((rangeComparators) => { - return ( - isSatisfiable(rangeComparators, optionsOrLoose) && - thisComparators.every((thisComparator) => { - return rangeComparators.every((rangeComparator) => { - return thisComparator.intersects( - rangeComparator, - optionsOrLoose, - ); - }); - }) - ); - }) - ); - }); - } - - toString(): string { - return this.range; - } -} - -function testSet( - set: ReadonlyArray, - version: SemVer, - options: Options, -): boolean { - for (let i: number = 0; i < set.length; i++) { - if (!set[i].test(version)) { - return false; - } - } - - if (version.prerelease.length && !options.includePrerelease) { - // Find the set of versions that are allowed to have prereleases - // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0 - // That should allow `1.2.3-pr.2` to pass. - // However, `1.2.4-alpha.notready` should NOT be allowed, - // even though it's within the range set by the comparators. - for (let i: number = 0; i < set.length; i++) { - if (set[i].semver === ANY) { - continue; - } - - if (set[i].semver.prerelease.length > 0) { - const allowed: SemVer = set[i].semver; - if ( - allowed.major === version.major && - allowed.minor === version.minor && - allowed.patch === version.patch - ) { - return true; - } - } - } - - // Version has a -pre, but it's not one of the ones we like. - return false; - } - - return true; -} - -// take a set of comparators and determine whether there -// exists a version which can satisfy it -function isSatisfiable( - comparators: readonly Comparator[], - options?: boolean | Options, -): boolean { - let result: boolean = true; - const remainingComparators: Comparator[] = comparators.slice(); - let testComparator = remainingComparators.pop(); - - while (result && remainingComparators.length) { - result = remainingComparators.every((otherComparator) => { - return testComparator?.intersects(otherComparator, options); - }); - - testComparator = remainingComparators.pop(); - } - - return result; -} - -// Mostly just for testing and legacy API reasons -export function toComparators( - range: string | Range, - optionsOrLoose?: boolean | Options, -): string[][] { - return new Range(range, optionsOrLoose).set.map((comp) => { - return comp - .map((c) => c.value) - .join(" ") - .trim() - .split(" "); - }); -} - -// comprised of xranges, tildes, stars, and gtlt's at this point. -// already replaced the hyphen ranges -// turn into a set of JUST comparators. -function parseComparator(comp: string, options: Options): string { - comp = replaceCarets(comp, options); - comp = replaceTildes(comp, options); - comp = replaceXRanges(comp, options); - comp = replaceStars(comp, options); - return comp; -} - -function isX(id: string): boolean { - return !id || id.toLowerCase() === "x" || id === "*"; -} - -// ~, ~> --> * (any, kinda silly) -// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0 -// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0 -// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0 -// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0 -// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0 -function replaceTildes(comp: string, options: Options): string { - return comp - .trim() - .split(/\s+/) - .map((comp) => replaceTilde(comp, options)) - .join(" "); -} - -function replaceTilde(comp: string, options: Options): string { - const r: RegExp = options.loose ? re[TILDELOOSE] : re[TILDE]; - return comp.replace( - r, - (_: string, M: string, m: string, p: string, pr: string) => { - let ret: string; - - if (isX(M)) { - ret = ""; - } else if (isX(m)) { - ret = ">=" + M + ".0.0 <" + (+M + 1) + ".0.0"; - } else if (isX(p)) { - // ~1.2 == >=1.2.0 <1.3.0 - ret = ">=" + M + "." + m + ".0 <" + M + "." + (+m + 1) + ".0"; - } else if (pr) { - ret = ">=" + - M + - "." + - m + - "." + - p + - "-" + - pr + - " <" + - M + - "." + - (+m + 1) + - ".0"; - } else { - // ~1.2.3 == >=1.2.3 <1.3.0 - ret = ">=" + M + "." + m + "." + p + " <" + M + "." + (+m + 1) + ".0"; - } - - return ret; - }, - ); -} - -// ^ --> * (any, kinda silly) -// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0 -// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0 -// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0 -// ^1.2.3 --> >=1.2.3 <2.0.0 -// ^1.2.0 --> >=1.2.0 <2.0.0 -function replaceCarets(comp: string, options: Options): string { - return comp - .trim() - .split(/\s+/) - .map((comp) => replaceCaret(comp, options)) - .join(" "); -} - -function replaceCaret(comp: string, options: Options): string { - const r: RegExp = options.loose ? re[CARETLOOSE] : re[CARET]; - return comp.replace(r, (_: string, M, m, p, pr) => { - let ret: string; - - if (isX(M)) { - ret = ""; - } else if (isX(m)) { - ret = ">=" + M + ".0.0 <" + (+M + 1) + ".0.0"; - } else if (isX(p)) { - if (M === "0") { - ret = ">=" + M + "." + m + ".0 <" + M + "." + (+m + 1) + ".0"; - } else { - ret = ">=" + M + "." + m + ".0 <" + (+M + 1) + ".0.0"; - } - } else if (pr) { - if (M === "0") { - if (m === "0") { - ret = ">=" + - M + - "." + - m + - "." + - p + - "-" + - pr + - " <" + - M + - "." + - m + - "." + - (+p + 1); - } else { - ret = ">=" + - M + - "." + - m + - "." + - p + - "-" + - pr + - " <" + - M + - "." + - (+m + 1) + - ".0"; - } - } else { - ret = ">=" + M + "." + m + "." + p + "-" + pr + " <" + (+M + 1) + - ".0.0"; - } - } else { - if (M === "0") { - if (m === "0") { - ret = ">=" + M + "." + m + "." + p + " <" + M + "." + m + "." + - (+p + 1); - } else { - ret = ">=" + M + "." + m + "." + p + " <" + M + "." + (+m + 1) + ".0"; - } - } else { - ret = ">=" + M + "." + m + "." + p + " <" + (+M + 1) + ".0.0"; - } - } - - return ret; - }); -} - -function replaceXRanges(comp: string, options: Options): string { - return comp - .split(/\s+/) - .map((comp) => replaceXRange(comp, options)) - .join(" "); -} - -function replaceXRange(comp: string, options: Options): string { - comp = comp.trim(); - const r: RegExp = options.loose ? re[XRANGELOOSE] : re[XRANGE]; - return comp.replace(r, (ret: string, gtlt, M, m, p, pr) => { - const xM: boolean = isX(M); - const xm: boolean = xM || isX(m); - const xp: boolean = xm || isX(p); - const anyX: boolean = xp; - - if (gtlt === "=" && anyX) { - gtlt = ""; - } - - if (xM) { - if (gtlt === ">" || gtlt === "<") { - // nothing is allowed - ret = "<0.0.0"; - } else { - // nothing is forbidden - ret = "*"; - } - } else if (gtlt && anyX) { - // we know patch is an x, because we have any x at all. - // replace X with 0 - if (xm) { - m = 0; - } - p = 0; - - if (gtlt === ">") { - // >1 => >=2.0.0 - // >1.2 => >=1.3.0 - // >1.2.3 => >= 1.2.4 - gtlt = ">="; - if (xm) { - M = +M + 1; - m = 0; - p = 0; - } else { - m = +m + 1; - p = 0; - } - } else if (gtlt === "<=") { - // <=0.7.x is actually <0.8.0, since any 0.7.x should - // pass. Similarly, <=7.x is actually <8.0.0, etc. - gtlt = "<"; - if (xm) { - M = +M + 1; - } else { - m = +m + 1; - } - } - - ret = gtlt + M + "." + m + "." + p; - } else if (xm) { - ret = ">=" + M + ".0.0 <" + (+M + 1) + ".0.0"; - } else if (xp) { - ret = ">=" + M + "." + m + ".0 <" + M + "." + (+m + 1) + ".0"; - } - - return ret; - }); -} - -// Because * is AND-ed with everything else in the comparator, -// and '' means "any version", just remove the *s entirely. -function replaceStars(comp: string, options: Options): string { - // Looseness is ignored here. star is always as loose as it gets! - return comp.trim().replace(re[STAR], ""); -} - -// This function is passed to string.replace(re[HYPHENRANGE]) -// M, m, patch, prerelease, build -// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5 -// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do -// 1.2 - 3.4 => >=1.2.0 <3.5.0 -function hyphenReplace( - $0: any, - from: any, - fM: any, - fm: any, - fp: any, - fpr: any, - fb: any, - to: any, - tM: any, - tm: any, - tp: any, - tpr: any, - tb: any, -) { - if (isX(fM)) { - from = ""; - } else if (isX(fm)) { - from = ">=" + fM + ".0.0"; - } else if (isX(fp)) { - from = ">=" + fM + "." + fm + ".0"; - } else { - from = ">=" + from; - } - - if (isX(tM)) { - to = ""; - } else if (isX(tm)) { - to = "<" + (+tM + 1) + ".0.0"; - } else if (isX(tp)) { - to = "<" + tM + "." + (+tm + 1) + ".0"; - } else if (tpr) { - to = "<=" + tM + "." + tm + "." + tp + "-" + tpr; - } else { - to = "<=" + to; - } - - return (from + " " + to).trim(); -} - -export function satisfies( - version: string | SemVer, - range: string | Range, - optionsOrLoose?: boolean | Options, -): boolean { - try { - range = new Range(range, optionsOrLoose); - } catch (er) { - return false; - } - return range.test(version); -} - -export function maxSatisfying( - versions: ReadonlyArray, - range: string | Range, - optionsOrLoose?: boolean | Options, -): T | null { - //todo - var max: T | SemVer | null = null; - var maxSV: SemVer | null = null; - try { - var rangeObj = new Range(range, optionsOrLoose); - } catch (er) { - return null; - } - versions.forEach((v) => { - if (rangeObj.test(v)) { - // satisfies(v, range, options) - if (!max || (maxSV && maxSV.compare(v) === -1)) { - // compare(max, v, true) - max = v; - maxSV = new SemVer(max, optionsOrLoose); - } - } - }); - return max; -} - -export function minSatisfying( - versions: ReadonlyArray, - range: string | Range, - optionsOrLoose?: boolean | Options, -): T | null { - //todo - var min: any = null; - var minSV: any = null; - try { - var rangeObj = new Range(range, optionsOrLoose); - } catch (er) { - return null; - } - versions.forEach((v) => { - if (rangeObj.test(v)) { - // satisfies(v, range, options) - if (!min || minSV.compare(v) === 1) { - // compare(min, v, true) - min = v; - minSV = new SemVer(min, optionsOrLoose); - } - } - }); - return min; -} - -export function minVersion( - range: string | Range, - optionsOrLoose?: boolean | Options, -): SemVer | null { - range = new Range(range, optionsOrLoose); - - var minver: SemVer | null = new SemVer("0.0.0"); - if (range.test(minver)) { - return minver; - } - - minver = new SemVer("0.0.0-0"); - if (range.test(minver)) { - return minver; - } - - minver = null; - for (var i = 0; i < range.set.length; ++i) { - var comparators = range.set[i]; - - comparators.forEach((comparator) => { - // Clone to avoid manipulating the comparator's semver object. - var compver = new SemVer(comparator.semver.version); - switch (comparator.operator) { - case ">": - if (compver.prerelease.length === 0) { - compver.patch++; - } else { - compver.prerelease.push(0); - } - compver.raw = compver.format(); - /* fallthrough */ - case "": - case ">=": - if (!minver || gt(minver, compver)) { - minver = compver; - } - break; - case "<": - case "<=": - /* Ignore maximum versions */ - break; - /* istanbul ignore next */ - default: - throw new Error("Unexpected operation: " + comparator.operator); - } - }); - } - - if (minver && range.test(minver)) { - return minver; - } - - return null; -} - -export function validRange( - range: string | Range | null, - optionsOrLoose?: boolean | Options, -): string | null { - try { - if (range === null) return null; - // Return '*' instead of '' so that truthiness works. - // This will throw if it's invalid anyway - return new Range(range, optionsOrLoose).range || "*"; - } catch (er) { - return null; - } -} - -/** - * Return true if version is less than all the versions possible in the range. - */ -export function ltr( - version: string | SemVer, - range: string | Range, - optionsOrLoose?: boolean | Options, -): boolean { - return outside(version, range, "<", optionsOrLoose); -} - -/** - * Return true if version is greater than all the versions possible in the range. - */ -export function gtr( - version: string | SemVer, - range: string | Range, - optionsOrLoose?: boolean | Options, -): boolean { - return outside(version, range, ">", optionsOrLoose); -} - -/** - * Return true if the version is outside the bounds of the range in either the high or low direction. - * The hilo argument must be either the string '>' or '<'. (This is the function called by gtr and ltr.) - */ -export function outside( - version: string | SemVer, - range: string | Range, - hilo: ">" | "<", - optionsOrLoose?: boolean | Options, -): boolean { - version = new SemVer(version, optionsOrLoose); - range = new Range(range, optionsOrLoose); - - let gtfn: typeof gt; - let ltefn: typeof lte; - let ltfn: typeof lt; - let comp: string; - let ecomp: string; - switch (hilo) { - case ">": - gtfn = gt; - ltefn = lte; - ltfn = lt; - comp = ">"; - ecomp = ">="; - break; - case "<": - gtfn = lt; - ltefn = gte; - ltfn = gt; - comp = "<"; - ecomp = "<="; - break; - default: - throw new TypeError('Must provide a hilo val of "<" or ">"'); - } - - // If it satisifes the range it is not outside - if (satisfies(version, range, optionsOrLoose)) { - return false; - } - - // From now on, variable terms are as if we're in "gtr" mode. - // but note that everything is flipped for the "ltr" function. - - for (let i: number = 0; i < range.set.length; ++i) { - const comparators: readonly Comparator[] = range.set[i]; - - let high: Comparator | null = null; - let low: Comparator | null = null; - - for (let comparator of comparators) { - if (comparator.semver === ANY) { - comparator = new Comparator(">=0.0.0"); - } - high = high || comparator; - low = low || comparator; - if (gtfn(comparator.semver, high.semver, optionsOrLoose)) { - high = comparator; - } else if (ltfn(comparator.semver, low.semver, optionsOrLoose)) { - low = comparator; - } - } - - if (high === null || low === null) return true; - - // If the edge version comparator has a operator then our version - // isn't outside it - if (high!.operator === comp || high!.operator === ecomp) { - return false; - } - - // If the lowest version comparator has an operator and our version - // is less than it then it isn't higher than the range - if ( - (!low!.operator || low!.operator === comp) && - ltefn(version, low!.semver) - ) { - return false; - } else if (low!.operator === ecomp && ltfn(version, low!.semver)) { - return false; - } - } - return true; -} - -export function prerelease( - version: string | SemVer, - optionsOrLoose?: boolean | Options, -): ReadonlyArray | null { - var parsed = parse(version, optionsOrLoose); - return parsed && parsed.prerelease.length ? parsed.prerelease : null; -} - -/** - * Return true if any of the ranges comparators intersect - */ -export function intersects( - range1: string | Range | Comparator, - range2: string | Range | Comparator, - optionsOrLoose?: boolean | Options, -): boolean { - range1 = new Range(range1, optionsOrLoose); - range2 = new Range(range2, optionsOrLoose); - return range1.intersects(range2); -} - -/** - * Coerces a string to semver if possible - */ -export function coerce( - version: string | SemVer, - optionsOrLoose?: boolean | Options, -): SemVer | null { - if (version instanceof SemVer) { - return version; - } - - if (typeof version !== "string") { - return null; - } - - const match = version.match(re[COERCE]); - - if (match == null) { - return null; - } - - return parse( - match[1] + "." + (match[2] || "0") + "." + (match[3] || "0"), - optionsOrLoose, - ); -} - -export default SemVer; diff --git a/vendor/deno.land/x/ts_morph@18.0.0/bootstrap/mod.ts b/vendor/deno.land/x/ts_morph@18.0.0/bootstrap/mod.ts deleted file mode 100644 index 5ac00f0..0000000 --- a/vendor/deno.land/x/ts_morph@18.0.0/bootstrap/mod.ts +++ /dev/null @@ -1,2 +0,0 @@ -// @deno-types="./ts_morph_bootstrap.d.ts" -export * from "./ts_morph_bootstrap.js"; diff --git a/vendor/deno.land/x/ts_morph@18.0.0/bootstrap/ts_morph_bootstrap.d.ts b/vendor/deno.land/x/ts_morph@18.0.0/bootstrap/ts_morph_bootstrap.d.ts deleted file mode 100644 index 9f1b6e3..0000000 --- a/vendor/deno.land/x/ts_morph@18.0.0/bootstrap/ts_morph_bootstrap.d.ts +++ /dev/null @@ -1,394 +0,0 @@ -import { RuntimeDirEntry, ts } from "../common/mod.ts"; - -/** - * Holds the compiler options. - */ -export declare class CompilerOptionsContainer extends SettingsContainer { - constructor(); - /** - * Sets one or all of the compiler options. - * - * WARNING: Setting the compiler options will cause a complete reparse of all the source files. - * @param settings - Compiler options to set. - */ - set(settings: Partial): void; - /** - * Gets the encoding from the compiler options or returns utf-8. - */ - getEncoding(): string; -} - -/** - * Represents a file system that can be interacted with. - */ -export interface FileSystemHost { - /** Gets if this file system is case sensitive. */ - isCaseSensitive(): boolean; - /** Asynchronously deletes the specified file or directory. */ - delete(path: string): Promise; - /** Synchronously deletes the specified file or directory */ - deleteSync(path: string): void; - /** - * Reads all the child directories and files. - * @remarks Implementers should have this return the full file path. - */ - readDirSync(dirPath: string): RuntimeDirEntry[]; - /** Asynchronously reads a file at the specified path. */ - readFile(filePath: string, encoding?: string): Promise; - /** Synchronously reads a file at the specified path. */ - readFileSync(filePath: string, encoding?: string): string; - /** Asynchronously writes a file to the file system. */ - writeFile(filePath: string, fileText: string): Promise; - /** Synchronously writes a file to the file system. */ - writeFileSync(filePath: string, fileText: string): void; - /** Asynchronously creates a directory at the specified path. */ - mkdir(dirPath: string): Promise; - /** Synchronously creates a directory at the specified path. */ - mkdirSync(dirPath: string): void; - /** Asynchronously moves a file or directory. */ - move(srcPath: string, destPath: string): Promise; - /** Synchronously moves a file or directory. */ - moveSync(srcPath: string, destPath: string): void; - /** Asynchronously copies a file or directory. */ - copy(srcPath: string, destPath: string): Promise; - /** Synchronously copies a file or directory. */ - copySync(srcPath: string, destPath: string): void; - /** Asynchronously checks if a file exists. - * @remarks Implementers should throw an `errors.FileNotFoundError` when it does not exist. - */ - fileExists(filePath: string): Promise; - /** Synchronously checks if a file exists. - * @remarks Implementers should throw an `errors.FileNotFoundError` when it does not exist. - */ - fileExistsSync(filePath: string): boolean; - /** Asynchronously checks if a directory exists. */ - directoryExists(dirPath: string): Promise; - /** Synchronously checks if a directory exists. */ - directoryExistsSync(dirPath: string): boolean; - /** See https://nodejs.org/api/fs.html#fs_fs_realpathsync_path_options */ - realpathSync(path: string): string; - /** Gets the current directory of the environment. */ - getCurrentDirectory(): string; - /** Uses pattern matching to find files or directories. */ - glob(patterns: ReadonlyArray): Promise; - /** Synchronously uses pattern matching to find files or directories. */ - globSync(patterns: ReadonlyArray): string[]; -} - -/** An implementation of a file system that exists in memory only. */ -export declare class InMemoryFileSystemHost implements FileSystemHost { - /** - * Constructor. - */ - constructor(); - /** @inheritdoc */ - isCaseSensitive(): boolean; - /** @inheritdoc */ - delete(path: string): Promise; - /** @inheritdoc */ - deleteSync(path: string): void; - /** @inheritdoc */ - readDirSync(dirPath: string): RuntimeDirEntry[]; - /** @inheritdoc */ - readFile(filePath: string, encoding?: string): Promise; - /** @inheritdoc */ - readFileSync(filePath: string, encoding?: string): string; - /** @inheritdoc */ - writeFile(filePath: string, fileText: string): Promise; - /** @inheritdoc */ - writeFileSync(filePath: string, fileText: string): void; - /** @inheritdoc */ - mkdir(dirPath: string): Promise; - /** @inheritdoc */ - mkdirSync(dirPath: string): void; - /** @inheritdoc */ - move(srcPath: string, destPath: string): Promise; - /** @inheritdoc */ - moveSync(srcPath: string, destPath: string): void; - /** @inheritdoc */ - copy(srcPath: string, destPath: string): Promise; - /** @inheritdoc */ - copySync(srcPath: string, destPath: string): void; - /** @inheritdoc */ - fileExists(filePath: string): Promise; - /** @inheritdoc */ - fileExistsSync(filePath: string): boolean; - /** @inheritdoc */ - directoryExists(dirPath: string): Promise; - /** @inheritdoc */ - directoryExistsSync(dirPath: string): boolean; - /** @inheritdoc */ - realpathSync(path: string): string; - /** @inheritdoc */ - getCurrentDirectory(): string; - /** @inheritdoc */ - glob(patterns: ReadonlyArray): Promise; - /** @inheritdoc */ - globSync(patterns: ReadonlyArray): string[]; -} - -/** Host for implementing custom module and/or type reference directive resolution. */ -export interface ResolutionHost { - resolveModuleNames?: ts.LanguageServiceHost["resolveModuleNames"]; - getResolvedModuleWithFailedLookupLocationsFromCache?: ts.LanguageServiceHost["getResolvedModuleWithFailedLookupLocationsFromCache"]; - resolveTypeReferenceDirectives?: ts.LanguageServiceHost["resolveTypeReferenceDirectives"]; -} - -/** - * Factory used to create a resolution host. - * @remarks The compiler options are retrieved via a function in order to get the project's current compiler options. - */ -export type ResolutionHostFactory = (moduleResolutionHost: ts.ModuleResolutionHost, getCompilerOptions: () => ts.CompilerOptions) => ResolutionHost; - -/** Collection of reusable resolution hosts. */ -export declare const ResolutionHosts: { - deno: ResolutionHostFactory; -}; - -export declare abstract class SettingsContainer { - protected _settings: T; - /** - * Constructor. - * @param defaultSettings - The settings to use by default. - */ - constructor(defaultSettings: T); - /** - * Resets the settings to the default. - */ - reset(): void; - /** - * Gets a copy of the settings as an object. - */ - get(): T; - /** - * Sets one or all of the settings. - * @param settings - Settings to set. - */ - set(settings: Partial): void; - /** - * Subscribe to modifications in the settings container. - * @param action - Action to execute when the settings change. - */ - onModified(action: () => void): void; -} - -/** - * Asynchronously creates a new collection of source files to analyze. - * @param options Options for creating the project. - */ -export declare function createProject(options?: ProjectOptions): Promise; - -/** - * Synchronously creates a new collection of source files to analyze. - * @param options Options for creating the project. - */ -export declare function createProjectSync(options?: ProjectOptions): Project; - -/** Options for creating a project. */ -export interface ProjectOptions { - /** Compiler options */ - compilerOptions?: ts.CompilerOptions; - /** File path to the tsconfig.json file. */ - tsConfigFilePath?: string; - /** Whether to skip adding source files from the specified tsconfig.json. @default false */ - skipAddingFilesFromTsConfig?: boolean; - /** Skip resolving file dependencies when providing a ts config file path and adding the files from tsconfig. @default false */ - skipFileDependencyResolution?: boolean; - /** - * Skip loading the lib files. Unlike the compiler API, ts-morph does not load these - * from the node_modules folder, but instead loads them from some other JS code - * and uses a fake path for their existence. If you want to use a custom lib files - * folder path, then provide one using the libFolderPath options. - * @default false - */ - skipLoadingLibFiles?: boolean; - /** The folder to use for loading lib files. */ - libFolderPath?: string; - /** Whether to use an in-memory file system. */ - useInMemoryFileSystem?: boolean; - /** - * Optional file system host. Useful for mocking access to the file system. - * @remarks Consider using `useInMemoryFileSystem` instead. - */ - fileSystem?: FileSystemHost; - /** Creates a resolution host for specifying custom module and/or type reference directive resolution. */ - resolutionHost?: ResolutionHostFactory; - /** - * Unstable and will probably be removed in the future. - * I believe this option should be internal to the library and if you know how to achieve - * that then please consider submitting a PR. - */ - isKnownTypesPackageName?: ts.LanguageServiceHost["isKnownTypesPackageName"]; -} - -/** Project that holds source files. */ -export declare class Project { - private constructor(); - /** Gets the compiler options for modification. */ - readonly compilerOptions: CompilerOptionsContainer; - /** Gets the file system host used for this project. */ - readonly fileSystem: FileSystemHost; - /** - * Asynchronously adds an existing source file from a file path or throws if it doesn't exist. - * - * Will return the source file if it was already added. - * @param filePath - File path to get the file from. - * @param options - Options for adding the file. - * @throws FileNotFoundError when the file is not found. - */ - addSourceFileAtPath(filePath: string, options?: { - scriptKind?: ts.ScriptKind; - }): Promise; - /** - * Synchronously adds an existing source file from a file path or throws if it doesn't exist. - * - * Will return the source file if it was already added. - * @param filePath - File path to get the file from. - * @param options - Options for adding the file. - * @throws FileNotFoundError when the file is not found. - */ - addSourceFileAtPathSync(filePath: string, options?: { - scriptKind?: ts.ScriptKind; - }): ts.SourceFile; - /** - * Asynchronously adds a source file from a file path if it exists or returns undefined. - * - * Will return the source file if it was already added. - * @param filePath - File path to get the file from. - * @param options - Options for adding the file. - * @skipOrThrowCheck - */ - addSourceFileAtPathIfExists(filePath: string, options?: { - scriptKind?: ts.ScriptKind; - }): Promise; - /** - * Synchronously adds a source file from a file path if it exists or returns undefined. - * - * Will return the source file if it was already added. - * @param filePath - File path to get the file from. - * @param options - Options for adding the file. - * @skipOrThrowCheck - */ - addSourceFileAtPathIfExistsSync(filePath: string, options?: { - scriptKind?: ts.ScriptKind; - }): ts.SourceFile | undefined; - /** - * Asynchronously adds source files based on file globs. - * @param fileGlobs - File glob or globs to add files based on. - * @returns The matched source files. - */ - addSourceFilesByPaths(fileGlobs: string | ReadonlyArray): Promise; - /** - * Synchronously adds source files based on file globs. - * @param fileGlobs - File glob or globs to add files based on. - * @returns The matched source files. - * @remarks This is much slower than the asynchronous version. - */ - addSourceFilesByPathsSync(fileGlobs: string | ReadonlyArray): ts.SourceFile[]; - /** - * Asynchronously adds all the source files from the specified tsconfig.json. - * - * Note that this is done by default when specifying a tsconfig file in the constructor and not explicitly setting the - * `skipAddingSourceFilesFromTsConfig` option to `true`. - * @param tsConfigFilePath - File path to the tsconfig.json file. - */ - addSourceFilesFromTsConfig(tsConfigFilePath: string): Promise; - /** - * Synchronously adds all the source files from the specified tsconfig.json. - * - * Note that this is done by default when specifying a tsconfig file in the constructor and not explicitly setting the - * `skipAddingSourceFilesFromTsConfig` option to `true`. - * @param tsConfigFilePath - File path to the tsconfig.json file. - */ - addSourceFilesFromTsConfigSync(tsConfigFilePath: string): ts.SourceFile[]; - /** - * Creates a source file at the specified file path with the specified text. - * - * Note: The file will not be created and saved to the file system until .save() is called on the source file. - * @param filePath - File path of the source file. - * @param sourceFileText - Text to use for the source file. - * @param options - Options. - * @throws - InvalidOperationError if a source file already exists at the provided file path. - */ - createSourceFile(filePath: string, sourceFileText?: string, options?: { - scriptKind?: ts.ScriptKind; - }): ts.SourceFile; - /** - * Updates the source file stored in the project at the specified path. - * @param filePath - File path of the source file. - * @param sourceFileText - Text of the source file. - * @param options - Options for updating the source file. - */ - updateSourceFile(filePath: string, sourceFileText: string, options?: { - scriptKind?: ts.ScriptKind; - }): ts.SourceFile; - /** - * Updates the source file stored in the project. The `fileName` of the source file object is used to tell which file to update. - * @param newSourceFile - The new source file. - */ - updateSourceFile(newSourceFile: ts.SourceFile): ts.SourceFile; - /** - * Removes the source file at the provided file path. - * @param filePath - File path of the source file. - */ - removeSourceFile(filePath: string): void; - /** - * Removes the provided source file based on its `fileName`. - * @param sourceFile - Source file to remove. - */ - removeSourceFile(sourceFile: ts.SourceFile): void; - /** - * Adds the source files the project's source files depend on to the project. - * @remarks - * * This should be done after source files are added to the project, preferably once to - * avoid doing more work than necessary. - * * This is done by default when creating a Project and providing a tsconfig.json and - * not specifying to not add the source files. - */ - resolveSourceFileDependencies(): void; - /** - * Creates a new program. - * Note: You should get a new program any time source files are added, removed, or changed. - */ - createProgram(options?: ts.CreateProgramOptions): ts.Program; - /** - * Gets the language service. - */ - getLanguageService(): ts.LanguageService; - /** - * Gets a source file by a file name or file path. Throws an error if it doesn't exist. - * @param fileNameOrPath - File name or path that the path could end with or equal. - */ - getSourceFileOrThrow(fileNameOrPath: string): ts.SourceFile; - /** - * Gets a source file by a search function. Throws an error if it doesn't exist. - * @param searchFunction - Search function. - */ - getSourceFileOrThrow(searchFunction: (file: ts.SourceFile) => boolean): ts.SourceFile; - /** - * Gets a source file by a file name or file path. Returns undefined if none exists. - * @param fileNameOrPath - File name or path that the path could end with or equal. - */ - getSourceFile(fileNameOrPath: string): ts.SourceFile | undefined; - /** - * Gets a source file by a search function. Returns undefined if none exists. - * @param searchFunction - Search function. - */ - getSourceFile(searchFunction: (file: ts.SourceFile) => boolean): ts.SourceFile | undefined; - /** Gets the source files in the project. */ - getSourceFiles(): ts.SourceFile[]; - /** - * Formats an array of diagnostics with their color and context into a string. - * @param diagnostics - Diagnostics to get a string of. - * @param options - Collection of options. For example, the new line character to use (defaults to the OS' new line character). - */ - formatDiagnosticsWithColorAndContext(diagnostics: ReadonlyArray, opts?: { - newLineChar?: "\n" | "\r\n"; - }): string; - /** - * Gets a ts.ModuleResolutionHost for the project. - */ - getModuleResolutionHost(): ts.ModuleResolutionHost; -} - -export { ts }; diff --git a/vendor/deno.land/x/ts_morph@18.0.0/bootstrap/ts_morph_bootstrap.js b/vendor/deno.land/x/ts_morph@18.0.0/bootstrap/ts_morph_bootstrap.js deleted file mode 100644 index 2981f8e..0000000 --- a/vendor/deno.land/x/ts_morph@18.0.0/bootstrap/ts_morph_bootstrap.js +++ /dev/null @@ -1,383 +0,0 @@ -import { DocumentRegistry, StringUtils, ts, FileUtils, TransactionalFileSystem, TsConfigResolver, errors, InMemoryFileSystemHost, RealFileSystemHost, CompilerOptionsContainer, createHosts, runtime, createModuleResolutionHost, Memoize } from '../common/mod.ts'; -export { CompilerOptionsContainer, InMemoryFileSystemHost, ResolutionHosts, SettingsContainer, ts } from '../common/mod.ts'; - -/****************************************************************************** -Copyright (c) Microsoft Corporation. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */ - -function __decorate(decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -} - -class SourceFileCache { - constructor(fileSystemWrapper, compilerOptions) { - this.fileSystemWrapper = fileSystemWrapper; - this.compilerOptions = compilerOptions; - this.sourceFilesByFilePath = new Map(); - this.projectVersion = 0; - this.documentRegistry = new DocumentRegistry(fileSystemWrapper); - } - containsSourceFileAtPath(filePath) { - return this.sourceFilesByFilePath.has(filePath); - } - getSourceFilePaths() { - return this.sourceFilesByFilePath.keys(); - } - getSourceFiles() { - return this.sourceFilesByFilePath.values(); - } - getProjectVersion() { - return this.projectVersion; - } - getSourceFileVersion(sourceFile) { - return this.documentRegistry.getSourceFileVersion(sourceFile); - } - getSourceFileFromCacheFromFilePath(filePath) { - return this.sourceFilesByFilePath.get(filePath); - } - async addOrGetSourceFileFromFilePath(filePath, options) { - let sourceFile = this.sourceFilesByFilePath.get(filePath); - if (sourceFile == null) { - const fileText = await this.fileSystemWrapper.readFileIfExists(filePath, this.compilerOptions.getEncoding()); - if (fileText != null) { - sourceFile = this.createSourceFileFromText(filePath, fileText, options); - } - } - return sourceFile; - } - addOrGetSourceFileFromFilePathSync(filePath, options) { - let sourceFile = this.sourceFilesByFilePath.get(filePath); - if (sourceFile == null) { - const fileText = this.fileSystemWrapper.readFileIfExistsSync(filePath, this.compilerOptions.getEncoding()); - if (fileText != null) { - sourceFile = this.createSourceFileFromText(filePath, fileText, options); - } - } - return sourceFile; - } - createSourceFileFromText(filePath, text, options) { - filePath = this.fileSystemWrapper.getStandardizedAbsolutePath(filePath); - const hasBom = StringUtils.hasBom(text); - if (hasBom) - text = StringUtils.stripBom(text); - const sourceFile = this.documentRegistry.createOrUpdateSourceFile(filePath, this.compilerOptions.get(), ts.ScriptSnapshot.fromString(text), options.scriptKind); - this.setSourceFile(sourceFile); - return sourceFile; - } - setSourceFile(sourceFile) { - const standardizedFilePath = this.fileSystemWrapper.getStandardizedAbsolutePath(sourceFile.fileName); - sourceFile.fileName = standardizedFilePath; - this.documentRegistry.updateDocument(standardizedFilePath, this.compilerOptions.get(), ts.ScriptSnapshot.fromString(sourceFile.text), this.getSourceFileVersion(sourceFile), sourceFile["scriptKind"]); - const dirPath = FileUtils.getDirPath(standardizedFilePath); - if (!this.fileSystemWrapper.directoryExistsSync(dirPath)) - this.fileSystemWrapper.queueMkdir(dirPath); - this.sourceFilesByFilePath.set(standardizedFilePath, sourceFile); - this.projectVersion++; - } - removeSourceFile(filePath) { - this.sourceFilesByFilePath.delete(filePath); - } - containsDirectoryAtPath(dirPath) { - return this.fileSystemWrapper.directoryExistsSync(dirPath); - } - getChildDirectoriesOfDirectory(dirPath) { - return this.fileSystemWrapper.getDirectories(dirPath); - } -} - -async function createProject(options = {}) { - const { project, tsConfigResolver } = createProjectCommon(options); - if (tsConfigResolver != null && options.skipAddingFilesFromTsConfig !== true) { - await project._addSourceFilesForTsConfigResolver(tsConfigResolver, project.compilerOptions.get()); - if (!options.skipFileDependencyResolution) - project.resolveSourceFileDependencies(); - } - return project; -} -function createProjectSync(options = {}) { - const { project, tsConfigResolver } = createProjectCommon(options); - if (tsConfigResolver != null && options.skipAddingFilesFromTsConfig !== true) { - project._addSourceFilesForTsConfigResolverSync(tsConfigResolver, project.compilerOptions.get()); - if (!options.skipFileDependencyResolution) - project.resolveSourceFileDependencies(); - } - return project; -} -function createProjectCommon(options) { - verifyOptions(); - const fileSystem = getFileSystem(); - const fileSystemWrapper = new TransactionalFileSystem({ - fileSystem, - libFolderPath: options.libFolderPath, - skipLoadingLibFiles: options.skipLoadingLibFiles, - }); - const tsConfigResolver = options.tsConfigFilePath == null - ? undefined - : new TsConfigResolver(fileSystemWrapper, fileSystemWrapper.getStandardizedAbsolutePath(options.tsConfigFilePath), getEncodingFromProvidedOptions()); - const project = new Project({ - fileSystem, - fileSystemWrapper, - tsConfigResolver, - }, options); - return { project, tsConfigResolver }; - function verifyOptions() { - if (options.fileSystem != null && options.useInMemoryFileSystem) - throw new errors.InvalidOperationError("Cannot provide a file system when specifying to use an in-memory file system."); - } - function getFileSystem() { - var _a; - if (options.useInMemoryFileSystem) - return new InMemoryFileSystemHost(); - return (_a = options.fileSystem) !== null && _a !== void 0 ? _a : new RealFileSystemHost(); - } - function getEncodingFromProvidedOptions() { - const defaultEncoding = "utf-8"; - if (options.compilerOptions != null) - return options.compilerOptions.charset || defaultEncoding; - return defaultEncoding; - } -} -class Project { - constructor(objs, options) { - var _a; - const { tsConfigResolver } = objs; - this.fileSystem = objs.fileSystem; - this._fileSystemWrapper = objs.fileSystemWrapper; - const tsCompilerOptions = getCompilerOptions(); - this.compilerOptions = new CompilerOptionsContainer(); - this.compilerOptions.set(tsCompilerOptions); - this._sourceFileCache = new SourceFileCache(this._fileSystemWrapper, this.compilerOptions); - const resolutionHost = !options.resolutionHost - ? undefined - : options.resolutionHost(this.getModuleResolutionHost(), () => this.compilerOptions.get()); - const newLineKind = "\n"; - const { languageServiceHost, compilerHost } = createHosts({ - transactionalFileSystem: this._fileSystemWrapper, - sourceFileContainer: this._sourceFileCache, - compilerOptions: this.compilerOptions, - getNewLine: () => newLineKind, - resolutionHost: resolutionHost || {}, - getProjectVersion: () => this._sourceFileCache.getProjectVersion().toString(), - isKnownTypesPackageName: options.isKnownTypesPackageName, - libFolderPath: options.libFolderPath, - skipLoadingLibFiles: options.skipLoadingLibFiles, - }); - this.languageServiceHost = languageServiceHost; - this.compilerHost = compilerHost; - this.configFileParsingDiagnostics = (_a = tsConfigResolver === null || tsConfigResolver === void 0 ? void 0 : tsConfigResolver.getErrors()) !== null && _a !== void 0 ? _a : []; - function getCompilerOptions() { - return { - ...getTsConfigCompilerOptions(), - ...(options.compilerOptions || {}), - }; - } - function getTsConfigCompilerOptions() { - if (tsConfigResolver == null) - return {}; - return tsConfigResolver.getCompilerOptions(); - } - } - async addSourceFileAtPath(filePath, options) { - const sourceFile = await this.addSourceFileAtPathIfExists(filePath, options); - if (sourceFile == null) - throw new errors.FileNotFoundError(this._fileSystemWrapper.getStandardizedAbsolutePath(filePath)); - return sourceFile; - } - addSourceFileAtPathSync(filePath, options) { - const sourceFile = this.addSourceFileAtPathIfExistsSync(filePath, options); - if (sourceFile == null) - throw new errors.FileNotFoundError(this._fileSystemWrapper.getStandardizedAbsolutePath(filePath)); - return sourceFile; - } - addSourceFileAtPathIfExists(filePath, options) { - return this._sourceFileCache.addOrGetSourceFileFromFilePath(this._fileSystemWrapper.getStandardizedAbsolutePath(filePath), { - scriptKind: options && options.scriptKind, - }); - } - addSourceFileAtPathIfExistsSync(filePath, options) { - return this._sourceFileCache.addOrGetSourceFileFromFilePathSync(this._fileSystemWrapper.getStandardizedAbsolutePath(filePath), { - scriptKind: options && options.scriptKind, - }); - } - async addSourceFilesByPaths(fileGlobs) { - if (typeof fileGlobs === "string") - fileGlobs = [fileGlobs]; - const sourceFilePromises = []; - const sourceFiles = []; - for (const filePath of await this._fileSystemWrapper.glob(fileGlobs)) { - sourceFilePromises.push(this.addSourceFileAtPathIfExists(filePath).then(sourceFile => { - if (sourceFile != null) - sourceFiles.push(sourceFile); - })); - } - await Promise.all(sourceFilePromises); - return sourceFiles; - } - addSourceFilesByPathsSync(fileGlobs) { - if (typeof fileGlobs === "string") - fileGlobs = [fileGlobs]; - const sourceFiles = []; - for (const filePath of this._fileSystemWrapper.globSync(fileGlobs)) { - const sourceFile = this.addSourceFileAtPathIfExistsSync(filePath); - if (sourceFile != null) - sourceFiles.push(sourceFile); - } - return sourceFiles; - } - addSourceFilesFromTsConfig(tsConfigFilePath) { - const resolver = this._getTsConfigResolver(tsConfigFilePath); - return this._addSourceFilesForTsConfigResolver(resolver, resolver.getCompilerOptions()); - } - addSourceFilesFromTsConfigSync(tsConfigFilePath) { - const resolver = this._getTsConfigResolver(tsConfigFilePath); - return this._addSourceFilesForTsConfigResolverSync(resolver, resolver.getCompilerOptions()); - } - _getTsConfigResolver(tsConfigFilePath) { - const standardizedFilePath = this._fileSystemWrapper.getStandardizedAbsolutePath(tsConfigFilePath); - return new TsConfigResolver(this._fileSystemWrapper, standardizedFilePath, this.compilerOptions.getEncoding()); - } - createSourceFile(filePath, sourceFileText, options) { - return this._sourceFileCache.createSourceFileFromText(this._fileSystemWrapper.getStandardizedAbsolutePath(filePath), sourceFileText || "", { scriptKind: options && options.scriptKind }); - } - updateSourceFile(filePathOrSourceFile, sourceFileText, options) { - if (typeof filePathOrSourceFile === "string") - return this.createSourceFile(filePathOrSourceFile, sourceFileText, options); - incrementVersion(filePathOrSourceFile); - ensureScriptSnapshot(filePathOrSourceFile); - return this._sourceFileCache.setSourceFile(filePathOrSourceFile); - function incrementVersion(sourceFile) { - let version = sourceFile.version || "-1"; - const parsedVersion = parseInt(version, 10); - if (isNaN(parsedVersion)) - version = "0"; - else - version = (parsedVersion + 1).toString(); - sourceFile.version = version; - } - function ensureScriptSnapshot(sourceFile) { - if (sourceFile.scriptSnapshot == null) - sourceFile.scriptSnapshot = ts.ScriptSnapshot.fromString(sourceFile.text); - } - } - removeSourceFile(filePathOrSourceFile) { - this._sourceFileCache.removeSourceFile(this._fileSystemWrapper.getStandardizedAbsolutePath(typeof filePathOrSourceFile === "string" ? filePathOrSourceFile : filePathOrSourceFile.fileName)); - } - resolveSourceFileDependencies() { - this.createProgram(); - } - async _addSourceFilesForTsConfigResolver(tsConfigResolver, compilerOptions) { - const sourceFiles = []; - await Promise.all(tsConfigResolver.getPaths(compilerOptions).filePaths - .map(p => this.addSourceFileAtPath(p).then(s => sourceFiles.push(s)))); - return sourceFiles; - } - _addSourceFilesForTsConfigResolverSync(tsConfigResolver, compilerOptions) { - return tsConfigResolver.getPaths(compilerOptions).filePaths.map(p => this.addSourceFileAtPathSync(p)); - } - createProgram(options) { - const oldProgram = this._oldProgram; - const program = ts.createProgram({ - rootNames: Array.from(this._sourceFileCache.getSourceFilePaths()), - options: this.compilerOptions.get(), - host: this.compilerHost, - oldProgram, - configFileParsingDiagnostics: this.configFileParsingDiagnostics, - ...options, - }); - this._oldProgram = program; - return program; - } - getLanguageService() { - return ts.createLanguageService(this.languageServiceHost, this._sourceFileCache.documentRegistry); - } - getSourceFileOrThrow(fileNameOrSearchFunction) { - const sourceFile = this.getSourceFile(fileNameOrSearchFunction); - if (sourceFile != null) - return sourceFile; - if (typeof fileNameOrSearchFunction === "string") { - const fileNameOrPath = FileUtils.standardizeSlashes(fileNameOrSearchFunction); - if (FileUtils.pathIsAbsolute(fileNameOrPath) || fileNameOrPath.indexOf("/") >= 0) { - const errorFileNameOrPath = this._fileSystemWrapper.getStandardizedAbsolutePath(fileNameOrPath); - throw new errors.InvalidOperationError(`Could not find source file in project at the provided path: ${errorFileNameOrPath}`); - } - else { - throw new errors.InvalidOperationError(`Could not find source file in project with the provided file name: ${fileNameOrSearchFunction}`); - } - } - else { - throw new errors.InvalidOperationError(`Could not find source file in project based on the provided condition.`); - } - } - getSourceFile(fileNameOrSearchFunction) { - const filePathOrSearchFunction = getFilePathOrSearchFunction(this._fileSystemWrapper); - if (isStandardizedFilePath(filePathOrSearchFunction)) { - return this._sourceFileCache.getSourceFileFromCacheFromFilePath(filePathOrSearchFunction); - } - const allSourceFilesIterable = this.getSourceFiles(); - return selectSmallestDirPathResult(function* () { - for (const sourceFile of allSourceFilesIterable) { - if (filePathOrSearchFunction(sourceFile)) - yield sourceFile; - } - }()); - function getFilePathOrSearchFunction(fileSystemWrapper) { - if (fileNameOrSearchFunction instanceof Function) - return fileNameOrSearchFunction; - const fileNameOrPath = FileUtils.standardizeSlashes(fileNameOrSearchFunction); - if (FileUtils.pathIsAbsolute(fileNameOrPath) || fileNameOrPath.indexOf("/") >= 0) - return fileSystemWrapper.getStandardizedAbsolutePath(fileNameOrPath); - else - return def => FileUtils.pathEndsWith(def.fileName, fileNameOrPath); - } - function selectSmallestDirPathResult(results) { - let result; - for (const sourceFile of results) { - if (result == null || FileUtils.getDirPath(sourceFile.fileName).length < FileUtils.getDirPath(result.fileName).length) - result = sourceFile; - } - return result; - } - function isStandardizedFilePath(obj) { - return typeof obj === "string"; - } - } - getSourceFiles() { - return Array.from(this._sourceFileCache.getSourceFiles()); - } - formatDiagnosticsWithColorAndContext(diagnostics, opts = {}) { - return ts.formatDiagnosticsWithColorAndContext(diagnostics, { - getCurrentDirectory: () => this._fileSystemWrapper.getCurrentDirectory(), - getCanonicalFileName: fileName => fileName, - getNewLine: () => opts.newLineChar || runtime.getEndOfLine(), - }); - } - getModuleResolutionHost() { - return createModuleResolutionHost({ - transactionalFileSystem: this._fileSystemWrapper, - getEncoding: () => this.compilerOptions.getEncoding(), - sourceFileContainer: this._sourceFileCache, - }); - } -} -__decorate([ - Memoize -], Project.prototype, "getLanguageService", null); -__decorate([ - Memoize -], Project.prototype, "getModuleResolutionHost", null); - -export { Project, createProject, createProjectSync }; diff --git a/vendor/deno.land/x/ts_morph@18.0.0/common/#denoruntime_552f5.ts b/vendor/deno.land/x/ts_morph@18.0.0/common/#denoruntime_552f5.ts deleted file mode 100644 index b45bca4..0000000 --- a/vendor/deno.land/x/ts_morph@18.0.0/common/#denoruntime_552f5.ts +++ /dev/null @@ -1,183 +0,0 @@ -import { ensureDir, ensureDirSync } from "https://deno.land/std@0.181.0/fs/ensure_dir.ts"; -import { expandGlob, expandGlobSync } from "https://deno.land/std@0.181.0/fs/expand_glob.ts"; -import * as stdPath from "https://deno.land/std@0.181.0/path/mod.ts"; - -// deno-lint-ignore no-explicit-any - -export class DenoRuntime { - fs = new DenoRuntimeFileSystem(); - path = new DenoRuntimePath(); - - getEnvVar(name: string) { - return Deno.env.get(name); - } - - getEndOfLine() { - return Deno.build.os === "windows" ? "\r\n" : "\n"; - } - - getPathMatchesPattern(path: string, pattern: string) { - return stdPath.globToRegExp(pattern, { - extended: true, - globstar: true, - os: "linux", // use the same behaviour across all operating systems - }).test(path); - } -} - -class DenoRuntimePath { - join(...paths: string[]) { - return stdPath.join(...paths); - } - - normalize(path: string) { - return stdPath.normalize(path); - } - - relative(from: string, to: string) { - return stdPath.relative(from, to); - } -} - -class DenoRuntimeFileSystem { - delete(path: string) { - return Deno.remove(path, { recursive: true }); - } - - deleteSync(path: string) { - Deno.removeSync(path, { recursive: true }); - } - - readDirSync(dirPath: string) { - return Array.from(Deno.readDirSync(dirPath)); - } - - readFile(filePath: string, _encoding = "utf-8") { - return Deno.readTextFile(filePath); - } - - readFileSync(filePath: string, _encoding = "utf-8") { - return Deno.readTextFileSync(filePath); - } - - writeFile(filePath: string, fileText: string) { - return Deno.writeTextFile(filePath, fileText); - } - - writeFileSync(filePath: string, fileText: string) { - return Deno.writeTextFileSync(filePath, fileText); - } - - async mkdir(dirPath: string) { - await ensureDir(dirPath); - } - - mkdirSync(dirPath: string) { - ensureDirSync(dirPath); - } - - move(srcPath: string, destPath: string) { - return Deno.rename(srcPath, destPath); - } - - moveSync(srcPath: string, destPath: string) { - Deno.renameSync(srcPath, destPath); - } - - copy(srcPath: string, destPath: string) { - return Deno.copyFile(srcPath, destPath); - } - - copySync(srcPath: string, destPath: string) { - return Deno.copyFileSync(srcPath, destPath); - } - - async stat(filePath: string) { - const stat = await Deno.stat(filePath); - return this._toStat(stat); - } - - statSync(path: string) { - const stat = Deno.statSync(path); - return this._toStat(stat); - } - - // deno-lint-ignore no-explicit-any - private _toStat(stat: any) { - return { - isFile() { - return stat.isFile; - }, - isDirectory() { - return stat.isDirectory; - }, - }; - } - - realpathSync(path: string) { - return Deno.realPathSync(path); - } - - getCurrentDirectory(): string { - return Deno.cwd(); - } - - async glob(patterns: ReadonlyArray) { - const { excludePatterns, pattern } = globPatternsToPattern(patterns); - const result: string[] = []; - const globEntries = expandGlob(pattern, { - root: this.getCurrentDirectory(), - extended: true, - globstar: true, - exclude: excludePatterns, - }); - for await (const globEntry of globEntries) { - if (globEntry.isFile) - result.push(globEntry.path); - } - return result; - } - - globSync(patterns: ReadonlyArray) { - const { excludePatterns, pattern } = globPatternsToPattern(patterns); - const result: string[] = []; - const globEntries = expandGlobSync(pattern, { - root: this.getCurrentDirectory(), - extended: true, - globstar: true, - exclude: excludePatterns, - }); - for (const globEntry of globEntries) { - if (globEntry.isFile) - result.push(globEntry.path); - } - return result; - } - - isCaseSensitive() { - const platform = Deno.build.os; - return platform !== "windows" && platform !== "darwin"; - } -} - -function globPatternsToPattern(patterns: ReadonlyArray) { - const excludePatterns = []; - const includePatterns = []; - - for (const pattern of patterns) { - if (isNegatedGlob(pattern)) - excludePatterns.push(pattern); - else - includePatterns.push(pattern); - } - - return { - excludePatterns, - pattern: includePatterns.length === 0 ? "." : includePatterns.length === 1 ? includePatterns[0] : `{${includePatterns.join(",")}}`, - }; - - function isNegatedGlob(glob: string) { - // https://github.com/micromatch/is-negated-glob/blob/master/index.js - return glob[0] === "!" && glob[1] !== "("; - } -} diff --git a/vendor/deno.land/x/ts_morph@18.0.0/common/mod.ts b/vendor/deno.land/x/ts_morph@18.0.0/common/mod.ts deleted file mode 100644 index a89d867..0000000 --- a/vendor/deno.land/x/ts_morph@18.0.0/common/mod.ts +++ /dev/null @@ -1,2 +0,0 @@ -// @deno-types="./ts_morph_common.d.ts" -export * from "./ts_morph_common.js"; diff --git a/vendor/deno.land/x/ts_morph@18.0.0/common/ts_morph_common.d.ts b/vendor/deno.land/x/ts_morph@18.0.0/common/ts_morph_common.d.ts deleted file mode 100644 index 432661c..0000000 --- a/vendor/deno.land/x/ts_morph@18.0.0/common/ts_morph_common.d.ts +++ /dev/null @@ -1,1110 +0,0 @@ -// @deno-types="./typescript.d.ts" -import * as ts from "./typescript.js"; - -export interface CompilerOptionsFromTsConfigOptions { - encoding?: string; - fileSystem?: FileSystemHost; -} - -export interface CompilerOptionsFromTsConfigResult { - options: CompilerOptions; - errors: ts.Diagnostic[]; -} - -/** - * Gets the compiler options from a specified tsconfig.json - * @param filePath - File path to the tsconfig.json. - * @param options - Options. - */ -export declare function getCompilerOptionsFromTsConfig(filePath: string, options?: CompilerOptionsFromTsConfigOptions): CompilerOptionsFromTsConfigResult; - -export declare class TsConfigResolver { - private readonly fileSystem; - private readonly encoding; - private readonly host; - private readonly tsConfigFilePath; - private readonly tsConfigDirPath; - constructor(fileSystem: TransactionalFileSystem, tsConfigFilePath: StandardizedFilePath, encoding: string); - getCompilerOptions(): CompilerOptions; - getErrors(): ts.Diagnostic[]; - getPaths(compilerOptions?: CompilerOptions): { - filePaths: StandardizedFilePath[]; - directoryPaths: StandardizedFilePath[]; - }; - private parseJsonConfigFileContent; - private getTsConfigFileJson; -} - -/** - * Helper around a Map. - * @remarks The use of this class is historical as it served as an abstraction around an ES5 based map and ES6, if available. Eventually - * this class should be removed in favour of helper functions around a Map. - */ -export declare class KeyValueCache { - private readonly cacheItems; - getSize(): number; - getValues(): IterableIterator; - getValuesAsArray(): U[]; - getKeys(): IterableIterator; - getEntries(): IterableIterator<[T, U]>; - getOrCreate(key: T, createFunc: () => TCreate): TCreate; - has(key: T): boolean; - get(key: T): U | undefined; - set(key: T, value: U): void; - replaceKey(key: T, newKey: T): void; - removeByKey(key: T): void; - clear(): void; -} - -/** - * An array where the values are sorted by a key of one of the values. - */ -export declare class SortedKeyValueArray { - private readonly getKey; - private readonly comparer; - private readonly array; - constructor(getKey: (value: TValue) => TKey, comparer: Comparer); - set(value: TValue): void; - removeByValue(value: TValue): void; - removeByKey(key: TKey): void; - getArrayCopy(): TValue[]; - hasItems(): boolean; - entries(): Generator; -} - -/** - * A wrapper around WeakMap. - * @remarks The use of this class is historical as it served as an abstraction around an ES5 based weak map and ES6, if available. Eventually - * this class should be removed in favour of helper functions around a WeakMap. - */ -export declare class WeakCache { - private readonly cacheItems; - getOrCreate(key: T, createFunc: () => TCreate): TCreate; - has(key: T): boolean; - get(key: T): U | undefined; - set(key: T, value: U): void; - removeByKey(key: T): void; -} - -/** - * Compares two values specifying the sort order. - */ -export interface Comparer { - /** - * Checks the two items returning -1 if `a` preceeds, 0 if equal, and 1 if `a` follows. - * @param a - Item to use. - * @param b - Item to compare with. - */ - compareTo(a: T, b: T): number; -} - -/** - * Converts a comparer to a stored comparer. - */ -export declare class ComparerToStoredComparer implements StoredComparer { - private readonly comparer; - private readonly storedValue; - /** - * Constructor. - * @param comparer - Comparer to use. - * @param storedValue - Stored value to use as the value to always compare the input of `compareTo` to. - */ - constructor(comparer: Comparer, storedValue: T); - /** @inheritdoc */ - compareTo(value: T): number; -} - -/** - * Compares two strings by en-us-u-kf-upper locale. - */ -export declare class LocaleStringComparer implements Comparer { - /** Static instance for reuse. */ - static readonly instance: LocaleStringComparer; - /** @inheritdoc */ - compareTo(a: string, b: string): 0 | 1 | -1; -} - -/** - * Compares two values based on one of their properties. - */ -export declare class PropertyComparer implements Comparer { - private readonly getProperty; - private readonly comparer; - /** - * Constructor. - * @param getProperty - Gets the property from the value to use for comparisons. - * @param comparer - Comparer to compare the properties with. - */ - constructor(getProperty: (value: TValue) => TProperty, comparer: Comparer); - /** @inheritdoc */ - compareTo(a: TValue, b: TValue): number; -} - -/** - * A stored comparer that compares a property to a stored value. - */ -export declare class PropertyStoredComparer implements StoredComparer { - private readonly getProperty; - private readonly comparer; - /** - * Constructor. - * @param getProperty - Gets the property from the value. - * @param comparer - Comparer to compare the property with. - */ - constructor(getProperty: (value: TValue) => TProperty, comparer: StoredComparer); - /** @inheritdoc */ - compareTo(value: TValue): number; -} - -/** - * Compares a value against a stored value. - */ -export interface StoredComparer { - /** - * Checks the value against a stored value returning -1 if the stored value preceeds, 0 if the value is equal, and 1 if follows. - * @param value - Value to compare. - */ - compareTo(value: T): number; -} - -/** - * Creates a language service host and compiler host. - * @param options - Options for creating the hosts. - */ -export declare function createHosts(options: CreateHostsOptions): { - languageServiceHost: ts.LanguageServiceHost; - compilerHost: ts.CompilerHost; -}; - -/** - * Options for creating the hosts. - */ -export interface CreateHostsOptions { - /** The transactional file system to use. */ - transactionalFileSystem: TransactionalFileSystem; - /** Container of source files to use. */ - sourceFileContainer: TsSourceFileContainer; - /** Compiler options container to use. */ - compilerOptions: CompilerOptionsContainer; - /** Newline kind to use. */ - getNewLine: () => "\r\n" | "\n"; - /** The resolution host used for resolving modules and type reference directives. */ - resolutionHost: ResolutionHost; - /** Provides the current project version to be used to tell if source files have - * changed. Provide this for a performance improvement. */ - getProjectVersion?: () => string; - isKnownTypesPackageName?: ts.LanguageServiceHost["isKnownTypesPackageName"]; - /** - * Set this to true to not load the typescript lib files. - * @default false - */ - skipLoadingLibFiles?: boolean; - /** - * Specify this to use a custom folder to load the lib files from. - * @remarks skipLoadingLibFiles cannot be explicitly false if this is set. - */ - libFolderPath?: string; -} - -/** - * Creates a module resolution host based on the provided options. - * @param options - Options for creating the module resolution host. - */ -export declare function createModuleResolutionHost(options: CreateModuleResolutionHostOptions): ts.ModuleResolutionHost; - -/** - * Options for creating a module resolution host. - */ -export interface CreateModuleResolutionHostOptions { - /** The transactional file system to use. */ - transactionalFileSystem: TransactionalFileSystem; - /** The source file container to use. */ - sourceFileContainer: TsSourceFileContainer; - /** Gets the encoding to use. */ - getEncoding(): string; -} - -/** - * An implementation of a ts.DocumentRegistry that uses a transactional file system. - */ -export declare class DocumentRegistry implements ts.DocumentRegistry { - private readonly transactionalFileSystem; - private readonly sourceFileCacheByFilePath; - private static readonly initialVersion; - /** - * Constructor. - * @param transactionalFileSystem - The transaction file system to use. - */ - constructor(transactionalFileSystem: TransactionalFileSystem); - /** - * Creates or updates a source file in the document registry. - * @param fileName - File name to create or update. - * @param compilationSettings - Compiler options to use. - * @param scriptSnapshot - Script snapshot (text) of the file. - * @param scriptKind - Script kind of the file. - */ - createOrUpdateSourceFile(fileName: StandardizedFilePath, compilationSettings: CompilerOptions, scriptSnapshot: ts.IScriptSnapshot, scriptKind: ScriptKind | undefined): ts.SourceFile; - /** - * Removes the source file from the document registry. - * @param fileName - File name to remove. - */ - removeSourceFile(fileName: StandardizedFilePath): void; - /** @inheritdoc */ - acquireDocument(fileName: string, compilationSettings: CompilerOptions, scriptSnapshot: ts.IScriptSnapshot, version: string, scriptKind: ScriptKind | undefined): ts.SourceFile; - /** @inheritdoc */ - acquireDocumentWithKey(fileName: string, path: ts.Path, compilationSettings: CompilerOptions, key: ts.DocumentRegistryBucketKey, scriptSnapshot: ts.IScriptSnapshot, version: string, scriptKind: ScriptKind | undefined): ts.SourceFile; - /** @inheritdoc */ - updateDocument(fileName: string, compilationSettings: CompilerOptions, scriptSnapshot: ts.IScriptSnapshot, version: string, scriptKind: ScriptKind | undefined): ts.SourceFile; - /** @inheritdoc */ - updateDocumentWithKey(fileName: string, path: ts.Path, compilationSettings: CompilerOptions, key: ts.DocumentRegistryBucketKey, scriptSnapshot: ts.IScriptSnapshot, version: string, scriptKind: ScriptKind | undefined): ts.SourceFile; - /** @inheritdoc */ - getKeyForCompilationSettings(settings: CompilerOptions): ts.DocumentRegistryBucketKey; - /** @inheritdoc */ - releaseDocument(fileName: string, compilationSettings: CompilerOptions): void; - /** @inheritdoc */ - releaseDocumentWithKey(path: ts.Path, key: ts.DocumentRegistryBucketKey): void; - /** @inheritdoc */ - reportStats(): string; - /** @inheritdoc */ - getSourceFileVersion(sourceFile: ts.SourceFile): string; - private getNextSourceFileVersion; - private updateSourceFile; -} - -/** Host for implementing custom module and/or type reference directive resolution. */ -export interface ResolutionHost { - resolveModuleNames?: ts.LanguageServiceHost["resolveModuleNames"]; - getResolvedModuleWithFailedLookupLocationsFromCache?: ts.LanguageServiceHost["getResolvedModuleWithFailedLookupLocationsFromCache"]; - resolveTypeReferenceDirectives?: ts.LanguageServiceHost["resolveTypeReferenceDirectives"]; -} - -/** - * Factory used to create a resolution host. - * @remarks The compiler options are retrieved via a function in order to get the project's current compiler options. - */ -export type ResolutionHostFactory = (moduleResolutionHost: ts.ModuleResolutionHost, getCompilerOptions: () => ts.CompilerOptions) => ResolutionHost; - -/** Collection of reusable resolution hosts. */ -export declare const ResolutionHosts: { - deno: ResolutionHostFactory; -}; - -/** - * A container of source files. - */ -export interface TsSourceFileContainer { - /** - * Gets if a source file exists at the specified file path. - * @param filePath - File path to check. - */ - containsSourceFileAtPath(filePath: StandardizedFilePath): boolean; - /** - * Gets the source file paths of all the source files in the container. - */ - getSourceFilePaths(): Iterable; - /** - * Gets a source file from a file path, but only if it exists in the container's cache. - * @param filePath - File path to get the source file from. - */ - getSourceFileFromCacheFromFilePath(filePath: StandardizedFilePath): ts.SourceFile | undefined; - /** - * Asynchronously adds or gets a source file from a file path. - * @param filePath - File path to get. - * @param opts - Options for adding or getting the file. - */ - addOrGetSourceFileFromFilePath(filePath: StandardizedFilePath, opts: { - markInProject: boolean; - scriptKind: ScriptKind | undefined; - }): Promise; - /** - * Synchronously adds or gets a source file from a file path. - * @param filePath - File path to get. - * @param opts - Options for adding or getting the file. - */ - addOrGetSourceFileFromFilePathSync(filePath: StandardizedFilePath, opts: { - markInProject: boolean; - scriptKind: ScriptKind | undefined; - }): ts.SourceFile | undefined; - /** - * Gets the source file version of the specified source file. - * @param sourceFile - Source file to inspect. - */ - getSourceFileVersion(sourceFile: ts.SourceFile): string; - /** - * Gets if the container contains the specified directory. - * @param dirPath - Path of the directory to check. - */ - containsDirectoryAtPath(dirPath: StandardizedFilePath): boolean; - /** - * Gets the child directories of the specified directory. - * @param dirPath - Path of the directory to check. - */ - getChildDirectoriesOfDirectory(dirPath: StandardizedFilePath): StandardizedFilePath[]; -} - -/** Decorator for memoizing the result of a method or get accessor. */ -export declare function Memoize(target: any, propertyName: string, descriptor: TypedPropertyDescriptor): void; - -/** Collection of helper functions that can be used to throw errors. */ -export declare namespace errors { - /** - * Minimal attributes to show a error message with the node source. - */ - interface Node { - getSourceFile(): { - getFilePath(): StandardizedFilePath; - getFullText(): string; - }; - getStart(): number; - } - /** Base error class. */ - abstract class BaseError extends Error { - protected constructor(); - } - /** Thrown when there is a problem with a provided argument. */ - class ArgumentError extends BaseError { - constructor(argName: string, message: string, node?: Node); - } - /** Thrown when an argument is null or whitespace. */ - class ArgumentNullOrWhitespaceError extends ArgumentError { - constructor(argName: string, node?: Node); - } - /** Thrown when an argument is out of range. */ - class ArgumentOutOfRangeError extends ArgumentError { - constructor(argName: string, value: number, range: [number, number], node?: Node); - } - /** Thrown when an argument does not match an expected type. */ - class ArgumentTypeError extends ArgumentError { - constructor(argName: string, expectedType: string, actualType: string, node?: Node); - } - /** Thrown when a file or directory path was not found. */ - class PathNotFoundError extends BaseError { - readonly path: StandardizedFilePath; - constructor(path: StandardizedFilePath, prefix?: string); - readonly code: "ENOENT"; - } - /** Thrown when a directory was not found. */ - class DirectoryNotFoundError extends PathNotFoundError { - constructor(dirPath: StandardizedFilePath); - } - /** Thrown when a file was not found. */ - class FileNotFoundError extends PathNotFoundError { - constructor(filePath: StandardizedFilePath); - } - /** Thrown when an action was taken that is not allowed. */ - class InvalidOperationError extends BaseError { - constructor(message: string, node?: Node); - } - /** Thrown when a certain behaviour or feature has not been implemented. */ - class NotImplementedError extends BaseError { - constructor(message?: string, node?: Node); - } - /** Thrown when an operation is not supported. */ - class NotSupportedError extends BaseError { - constructor(message: string); - } - /** - * Thows if not a type. - * @param value - Value to check the type of. - * @param expectedType - Expected type. - * @param argName - Argument name. - */ - function throwIfNotType(value: any, expectedType: string, argName: string): void; - /** - * Throws if the value is not a string. - * @param value - Value to check. - * @param argName - Arg name. - */ - function throwIfNotString(value: string, argName: string): void; - /** - * Throws if the value is not a string or is whitespace. - * @param value - Value to check. - * @param argName - Arg name. - */ - function throwIfWhitespaceOrNotString(value: string, argName: string): void; - /** - * Throws an ArgumentOutOfRangeError if an argument's value is out of an inclusive range. - * @param value - Value. - * @param range - Range. - * @param argName - Argument name. - */ - function throwIfOutOfRange(value: number, range: [number, number], argName: string): void; - /** - * Throws an ArgumentOutOfRangeError if an argument's range value is out of an inclusive range. - * - * Also throws when the start of the range is greater than the end. - * @param actualRange - Range to check. - * @param range - Range to check against. - * @param argName - Argument name. - */ - function throwIfRangeOutOfRange(actualRange: [number, number], range: [number, number], argName: string): void; - /** - * Gets an error saying that a feature is not implemented for a certain syntax kind. - * @param kind - Syntax kind that isn't implemented. - */ - function throwNotImplementedForSyntaxKindError(kind: ts.SyntaxKind, node?: Node): never; - /** - * Throws an Argument - * @param value - * @param argName - */ - function throwIfNegative(value: number, argName: string): void; - /** - * Throws when the value is null or undefined. - * @param value - Value to check. - * @param errorMessage - Error message to throw when not defined. - */ - function throwIfNullOrUndefined(value: T | undefined, errorMessage: string | (() => string), node?: Node): T; - /** - * Throw if the value should have been the never type. - * @param value - Value to check. - */ - function throwNotImplementedForNeverValueError(value: never, sourceNode?: Node): never; - /** - * Throws an error if the actual value does not equal the expected value. - * @param actual - Actual value. - * @param expected - Expected value. - * @param description - Message to show in the error. Should be a full sentence that doesn't include the actual and expected values. - */ - function throwIfNotEqual(actual: T, expected: T, description: string): void; - /** - * Throws if true. - * @param value - Value to check. - * @param errorMessage - Error message to throw when true. - */ - function throwIfTrue(value: boolean | undefined, errorMessage: string): void; -} - -/** - * Represents a file system that can be interacted with. - */ -export interface FileSystemHost { - /** Gets if this file system is case sensitive. */ - isCaseSensitive(): boolean; - /** Asynchronously deletes the specified file or directory. */ - delete(path: string): Promise; - /** Synchronously deletes the specified file or directory */ - deleteSync(path: string): void; - /** - * Reads all the child directories and files. - * @remarks Implementers should have this return the full file path. - */ - readDirSync(dirPath: string): RuntimeDirEntry[]; - /** Asynchronously reads a file at the specified path. */ - readFile(filePath: string, encoding?: string): Promise; - /** Synchronously reads a file at the specified path. */ - readFileSync(filePath: string, encoding?: string): string; - /** Asynchronously writes a file to the file system. */ - writeFile(filePath: string, fileText: string): Promise; - /** Synchronously writes a file to the file system. */ - writeFileSync(filePath: string, fileText: string): void; - /** Asynchronously creates a directory at the specified path. */ - mkdir(dirPath: string): Promise; - /** Synchronously creates a directory at the specified path. */ - mkdirSync(dirPath: string): void; - /** Asynchronously moves a file or directory. */ - move(srcPath: string, destPath: string): Promise; - /** Synchronously moves a file or directory. */ - moveSync(srcPath: string, destPath: string): void; - /** Asynchronously copies a file or directory. */ - copy(srcPath: string, destPath: string): Promise; - /** Synchronously copies a file or directory. */ - copySync(srcPath: string, destPath: string): void; - /** Asynchronously checks if a file exists. - * @remarks Implementers should throw an `errors.FileNotFoundError` when it does not exist. - */ - fileExists(filePath: string): Promise; - /** Synchronously checks if a file exists. - * @remarks Implementers should throw an `errors.FileNotFoundError` when it does not exist. - */ - fileExistsSync(filePath: string): boolean; - /** Asynchronously checks if a directory exists. */ - directoryExists(dirPath: string): Promise; - /** Synchronously checks if a directory exists. */ - directoryExistsSync(dirPath: string): boolean; - /** See https://nodejs.org/api/fs.html#fs_fs_realpathsync_path_options */ - realpathSync(path: string): string; - /** Gets the current directory of the environment. */ - getCurrentDirectory(): string; - /** Uses pattern matching to find files or directories. */ - glob(patterns: ReadonlyArray): Promise; - /** Synchronously uses pattern matching to find files or directories. */ - globSync(patterns: ReadonlyArray): string[]; -} - -/** Utilities for working with files. */ -export declare class FileUtils { - static readonly ENOENT = "ENOENT"; - private constructor(); - /** - * Gets if the error is a file not found or directory not found error. - * @param err - Error to check. - */ - static isNotExistsError(err: any): boolean; - /** - * Joins the paths. - * @param paths - Paths to join. - */ - static pathJoin(basePath: T, ...paths: string[]): T; - /** - * Gets if the path is absolute. - * @param fileOrDirPath - File or directory path. - */ - static pathIsAbsolute(fileOrDirPath: string): boolean; - /** - * Gets the standardized absolute path. - * @param fileSystem - File system. - * @param fileOrDirPath - Path to standardize. - * @param relativeBase - Base path to be relative from. - */ - static getStandardizedAbsolutePath(fileSystem: FileSystemHost, fileOrDirPath: string, relativeBase?: string): StandardizedFilePath; - /** - * Gets the directory path. - * @param fileOrDirPath - Path to get the directory name from. - */ - static getDirPath(fileOrDirPath: T): T; - /** - * Gets the last portion of the path. - * @param fileOrDirPath - Path to get the base name from. - */ - static getBaseName(fileOrDirPath: StandardizedFilePath): string; - /** - * Gets the extension of the file name. - * @param fileOrDirPath - Path to get the extension from. - */ - static getExtension(fileOrDirPath: StandardizedFilePath): string; - /** - * Changes all back slashes to forward slashes. - * @param fileOrDirPath - Path. - */ - static standardizeSlashes(fileOrDirPath: T): T; - /** - * Checks if a path ends with a specified search path. - * @param fileOrDirPath - Path. - * @param endsWithPath - Ends with path. - */ - static pathEndsWith(fileOrDirPath: string | undefined, endsWithPath: string | undefined): boolean; - /** - * Checks if a path starts with a specified search path. - * @param fileOrDirPath - Path. - * @param startsWithPath - Starts with path. - */ - static pathStartsWith(fileOrDirPath: string | undefined, startsWithPath: string | undefined): boolean; - private static splitPathBySlashes; - /** - * Gets the parent most paths out of the list of paths. - * @param paths - File or directory paths. - */ - static getParentMostPaths(paths: StandardizedFilePath[]): StandardizedFilePath[]; - /** - * Reads a file or returns false if the file doesn't exist. - * @param fileSystem - File System. - * @param filePath - Path to file. - * @param encoding - File encoding. - */ - static readFileOrNotExists(fileSystem: FileSystemHost, filePath: StandardizedFilePath, encoding: string): Promise; - /** - * Reads a file synchronously or returns false if the file doesn't exist. - * @param fileSystem - File System. - * @param filePath - Path to file. - * @param encoding - File encoding. - */ - static readFileOrNotExistsSync(fileSystem: FileSystemHost, filePath: StandardizedFilePath, encoding: string): string | false; - /** - * Gets the text with a byte order mark. - * @param text - Text. - */ - static getTextWithByteOrderMark(text: string): string; - /** - * Gets the relative path from one absolute path to another. - * @param absoluteDirPathFrom - Absolute directory path from. - * @param absolutePathTo - Absolute path to. - */ - static getRelativePathTo(absoluteDirPathFrom: StandardizedFilePath, absolutePathTo: StandardizedFilePath): StandardizedFilePath; - /** - * Gets if the path is for the root directory. - * @param path - Path. - */ - static isRootDirPath(dirOrFilePath: string): boolean; - /** - * Gets the descendant directories of the specified directory. - * @param dirPath - Directory path. - */ - static getDescendantDirectories(fileSystemWrapper: TransactionalFileSystem, dirPath: StandardizedFilePath): IterableIterator; - /** - * Gets the glob as absolute. - * @param glob - Glob. - * @param cwd - Current working directory. - */ - static toAbsoluteGlob(glob: string, cwd: string): string; - /** - * Gets if the glob is a negated glob. - * @param glob - Glob. - */ - static isNegatedGlob(glob: string): boolean; -} - -/** An implementation of a file system that exists in memory only. */ -export declare class InMemoryFileSystemHost implements FileSystemHost { - /** - * Constructor. - */ - constructor(); - /** @inheritdoc */ - isCaseSensitive(): boolean; - /** @inheritdoc */ - delete(path: string): Promise; - /** @inheritdoc */ - deleteSync(path: string): void; - /** @inheritdoc */ - readDirSync(dirPath: string): RuntimeDirEntry[]; - /** @inheritdoc */ - readFile(filePath: string, encoding?: string): Promise; - /** @inheritdoc */ - readFileSync(filePath: string, encoding?: string): string; - /** @inheritdoc */ - writeFile(filePath: string, fileText: string): Promise; - /** @inheritdoc */ - writeFileSync(filePath: string, fileText: string): void; - /** @inheritdoc */ - mkdir(dirPath: string): Promise; - /** @inheritdoc */ - mkdirSync(dirPath: string): void; - /** @inheritdoc */ - move(srcPath: string, destPath: string): Promise; - /** @inheritdoc */ - moveSync(srcPath: string, destPath: string): void; - /** @inheritdoc */ - copy(srcPath: string, destPath: string): Promise; - /** @inheritdoc */ - copySync(srcPath: string, destPath: string): void; - /** @inheritdoc */ - fileExists(filePath: string): Promise; - /** @inheritdoc */ - fileExistsSync(filePath: string): boolean; - /** @inheritdoc */ - directoryExists(dirPath: string): Promise; - /** @inheritdoc */ - directoryExistsSync(dirPath: string): boolean; - /** @inheritdoc */ - realpathSync(path: string): string; - /** @inheritdoc */ - getCurrentDirectory(): string; - /** @inheritdoc */ - glob(patterns: ReadonlyArray): Promise; - /** @inheritdoc */ - globSync(patterns: ReadonlyArray): string[]; -} - -/** Checks the specified file paths to see if the match any of the specified patterns. */ -export declare function matchGlobs(paths: ReadonlyArray, patterns: string | ReadonlyArray, cwd: string): string[]; - -/** An implementation of a file host that interacts with the actual file system. */ -export declare class RealFileSystemHost implements FileSystemHost { - /** @inheritdoc */ - delete(path: string): Promise; - /** @inheritdoc */ - deleteSync(path: string): void; - /** @inheritdoc */ - readDirSync(dirPath: string): RuntimeDirEntry[]; - /** @inheritdoc */ - readFile(filePath: string, encoding?: string): Promise; - /** @inheritdoc */ - readFileSync(filePath: string, encoding?: string): string; - /** @inheritdoc */ - writeFile(filePath: string, fileText: string): Promise; - /** @inheritdoc */ - writeFileSync(filePath: string, fileText: string): void; - /** @inheritdoc */ - mkdir(dirPath: string): Promise; - /** @inheritdoc */ - mkdirSync(dirPath: string): void; - /** @inheritdoc */ - move(srcPath: string, destPath: string): Promise; - /** @inheritdoc */ - moveSync(srcPath: string, destPath: string): void; - /** @inheritdoc */ - copy(srcPath: string, destPath: string): Promise; - /** @inheritdoc */ - copySync(srcPath: string, destPath: string): void; - /** @inheritdoc */ - fileExists(filePath: string): Promise; - /** @inheritdoc */ - fileExistsSync(filePath: string): boolean; - /** @inheritdoc */ - directoryExists(dirPath: string): Promise; - /** @inheritdoc */ - directoryExistsSync(dirPath: string): boolean; - /** @inheritdoc */ - realpathSync(path: string): string; - /** @inheritdoc */ - getCurrentDirectory(): string; - /** @inheritdoc */ - glob(patterns: ReadonlyArray): Promise; - /** @inheritdoc */ - globSync(patterns: ReadonlyArray): string[]; - /** @inheritdoc */ - isCaseSensitive(): boolean; - private getDirectoryNotFoundErrorIfNecessary; - private getFileNotFoundErrorIfNecessary; -} - -/** Nominal type to denote a file path that has been standardized. */ -export type StandardizedFilePath = string & { - _standardizedFilePathBrand: undefined; -}; - -export interface DirEntry { - path: StandardizedFilePath; - isFile: boolean; - isDirectory: boolean; - isSymlink: boolean; -} - -export interface TransactionalFileSystemOptions { - fileSystem: FileSystemHost; - skipLoadingLibFiles: boolean | undefined; - libFolderPath: string | undefined; -} - -/** - * FileSystemHost wrapper that allows transactionally queuing operations to the file system. - */ -export declare class TransactionalFileSystem { - private readonly directories; - private readonly pathCasingMaintainer; - private readonly fileSystem; - private readonly libFileMap; - /** - * Constructor. - * @param fileSystem - File system host to commit the operations to. - */ - constructor(options: TransactionalFileSystemOptions); - queueFileDelete(filePath: StandardizedFilePath): void; - removeFileDelete(filePath: StandardizedFilePath): void; - queueMkdir(dirPath: StandardizedFilePath): void; - queueDirectoryDelete(dirPath: StandardizedFilePath): void; - queueMoveDirectory(srcPath: StandardizedFilePath, destPath: StandardizedFilePath): void; - queueCopyDirectory(srcPath: StandardizedFilePath, destPath: StandardizedFilePath): void; - flush(): Promise; - flushSync(): void; - saveForDirectory(dirPath: StandardizedFilePath): Promise; - saveForDirectorySync(dirPath: StandardizedFilePath): void; - private getAndClearOperationsForDir; - private executeOperation; - private executeOperationSync; - private getAndClearOperations; - moveFileImmediately(oldFilePath: StandardizedFilePath, newFilePath: StandardizedFilePath, fileText: string): Promise; - moveFileImmediatelySync(oldFilePath: StandardizedFilePath, newFilePath: StandardizedFilePath, fileText: string): void; - deleteFileImmediately(filePath: StandardizedFilePath): Promise; - deleteFileImmediatelySync(filePath: StandardizedFilePath): void; - copyDirectoryImmediately(srcDirPath: StandardizedFilePath, destDirPath: StandardizedFilePath): Promise; - copyDirectoryImmediatelySync(srcDirPath: StandardizedFilePath, destDirPath: StandardizedFilePath): void; - moveDirectoryImmediately(srcDirPath: StandardizedFilePath, destDirPath: StandardizedFilePath): Promise; - moveDirectoryImmediatelySync(srcDirPath: StandardizedFilePath, destDirPath: StandardizedFilePath): void; - deleteDirectoryImmediately(dirPath: StandardizedFilePath): Promise; - /** Recreates a directory on the underlying file system asynchronously. */ - clearDirectoryImmediately(dirPath: StandardizedFilePath): Promise; - /** Recreates a directory on the underlying file system synchronously. */ - clearDirectoryImmediatelySync(dirPath: StandardizedFilePath): void; - deleteDirectoryImmediatelySync(dirPath: StandardizedFilePath): void; - private deleteSuppressNotFound; - private deleteSuppressNotFoundSync; - fileExists(filePath: StandardizedFilePath): boolean | Promise; - fileExistsSync(filePath: StandardizedFilePath): boolean; - private _fileDeletedInMemory; - directoryExistsSync(dirPath: StandardizedFilePath): boolean; - readFileIfExistsSync(filePath: StandardizedFilePath, encoding: string | undefined): string | undefined; - readFileSync(filePath: StandardizedFilePath, encoding: string | undefined): string; - readFileIfExists(filePath: StandardizedFilePath, encoding: string | undefined): Promise; - readFile(filePath: StandardizedFilePath, encoding: string | undefined): Promise; - private _verifyCanReadFile; - readDirSync(dirPath: StandardizedFilePath): DirEntry[]; - glob(patterns: ReadonlyArray): Promise; - globSync(patterns: ReadonlyArray): Generator; - getFileSystem(): FileSystemHost; - getCurrentDirectory(): StandardizedFilePath; - getDirectories(dirPath: StandardizedFilePath): StandardizedFilePath[]; - realpathSync(path: StandardizedFilePath): StandardizedFilePath; - getStandardizedAbsolutePath(fileOrDirPath: string, relativeBase?: string): StandardizedFilePath; - readFileOrNotExists(filePath: StandardizedFilePath, encoding: string): false | Promise; - readFileOrNotExistsSync(filePath: StandardizedFilePath, encoding: string): string | false; - writeFile(filePath: StandardizedFilePath, fileText: string): Promise; - writeFileSync(filePath: StandardizedFilePath, fileText: string): void; - private isPathDirectoryInQueueThatExists; - private isPathQueuedForDeletion; - private removeDirAndSubDirs; - private addBackDirAndSubDirs; - private operationIndex; - private getNextOperationIndex; - private getParentDirectoryIfExists; - private getOrCreateParentDirectory; - private getDirectoryIfExists; - private getOrCreateDirectory; - private throwIfHasExternalOperations; - private ensureDirectoryExists; - private ensureDirectoryExistsSync; - private removeMkDirOperationsForDir; - private libFileExists; - private readLibFile; - private throwIfLibFile; -} - -/** Gets the TypeScript lib files (.d.ts files). */ -export declare function getLibFiles(): { - fileName: string; - text: string; -}[]; - -export declare function getLibFolderPath(options: { - libFolderPath?: string; - skipLoadingLibFiles?: boolean; -}): string; - -/** The folder to use to "store" the in memory lib files. */ -export declare const libFolderInMemoryPath: StandardizedFilePath; - -/** - * Gets the enum name for the specified syntax kind. - * @param kind - Syntax kind. - */ -export declare function getSyntaxKindName(kind: ts.SyntaxKind): string; - -/** - * Holds the compiler options. - */ -export declare class CompilerOptionsContainer extends SettingsContainer { - constructor(); - /** - * Sets one or all of the compiler options. - * - * WARNING: Setting the compiler options will cause a complete reparse of all the source files. - * @param settings - Compiler options to set. - */ - set(settings: Partial): void; - /** - * Gets the encoding from the compiler options or returns utf-8. - */ - getEncoding(): string; -} - -export declare abstract class SettingsContainer { - protected _settings: T; - /** - * Constructor. - * @param defaultSettings - The settings to use by default. - */ - constructor(defaultSettings: T); - /** - * Resets the settings to the default. - */ - reset(): void; - /** - * Gets a copy of the settings as an object. - */ - get(): T; - /** - * Sets one or all of the settings. - * @param settings - Settings to set. - */ - set(settings: Partial): void; - /** - * Subscribe to modifications in the settings container. - * @param action - Action to execute when the settings change. - */ - onModified(action: () => void): void; -} - -export declare const runtime: Runtime; - -export interface Runtime { - fs: RuntimeFileSystem; - path: RuntimePath; - getEnvVar(name: string): string | undefined; - getEndOfLine(): string; - getPathMatchesPattern(path: string, pattern: string): boolean; -} - -export interface RuntimeDirEntry { - name: string; - isFile: boolean; - isDirectory: boolean; - isSymlink: boolean; -} - -export interface RuntimeFileInfo { - isFile(): boolean; - isDirectory(): boolean; -} - -export interface RuntimeFileSystem { - /** Gets if this file system is case sensitive. */ - isCaseSensitive(): boolean; - /** Asynchronously deletes the specified file or directory. */ - delete(path: string): Promise; - /** Synchronously deletes the specified file or directory */ - deleteSync(path: string): void; - /** Reads all the child directories and files. */ - readDirSync(dirPath: string): RuntimeDirEntry[]; - /** Asynchronously reads a file at the specified path. */ - readFile(filePath: string, encoding?: string): Promise; - /** Synchronously reads a file at the specified path. */ - readFileSync(filePath: string, encoding?: string): string; - /** Asynchronously writes a file to the file system. */ - writeFile(filePath: string, fileText: string): Promise; - /** Synchronously writes a file to the file system. */ - writeFileSync(filePath: string, fileText: string): void; - /** Asynchronously creates a directory at the specified path. */ - mkdir(dirPath: string): Promise; - /** Synchronously creates a directory at the specified path. */ - mkdirSync(dirPath: string): void; - /** Asynchronously moves a file or directory. */ - move(srcPath: string, destPath: string): Promise; - /** Synchronously moves a file or directory. */ - moveSync(srcPath: string, destPath: string): void; - /** Asynchronously copies a file or directory. */ - copy(srcPath: string, destPath: string): Promise; - /** Synchronously copies a file or directory. */ - copySync(srcPath: string, destPath: string): void; - /** Asynchronously gets the path's stat information. */ - stat(path: string): Promise; - /** Synchronously gets the path's stat information. */ - statSync(path: string): RuntimeFileInfo; - /** See https://nodejs.org/api/fs.html#fs_fs_realpathsync_path_options */ - realpathSync(path: string): string; - /** Gets the current directory of the environment. */ - getCurrentDirectory(): string; - /** Uses pattern matching to find files or directories. */ - glob(patterns: ReadonlyArray): Promise; - /** Synchronously uses pattern matching to find files or directories. */ - globSync(patterns: ReadonlyArray): string[]; -} - -export interface RuntimePath { - /** Joins the paths. */ - join(...paths: string[]): string; - /** Normalizes the provided path. */ - normalize(path: string): string; - /** Returns the relative path from `from` to `to`. */ - relative(from: string, to: string): string; -} - -export declare function matchFiles(this: any, path: string, extensions: ReadonlyArray, excludes: ReadonlyArray, includes: ReadonlyArray, useCaseSensitiveFileNames: boolean, currentDirectory: string, depth: number | undefined, getEntries: (path: string) => FileSystemEntries, realpath: (path: string) => string, directoryExists: (path: string) => boolean): string[]; - -export declare function getFileMatcherPatterns(this: any, path: string, excludes: ReadonlyArray, includes: ReadonlyArray, useCaseSensitiveFileNames: boolean, currentDirectory: string): FileMatcherPatterns; - -export declare function getEmitModuleResolutionKind(this: any, compilerOptions: ts.CompilerOptions): any; - -export interface FileMatcherPatterns { - /** One pattern for each "include" spec. */ - includeFilePatterns: ReadonlyArray; - /** One pattern matching one of any of the "include" specs. */ - includeFilePattern: string; - includeDirectoryPattern: string; - excludePattern: string; - basePaths: ReadonlyArray; -} - -export interface FileSystemEntries { - readonly files: ReadonlyArray; - readonly directories: ReadonlyArray; -} - -export declare class ArrayUtils { - private constructor(); - static isReadonlyArray(a: unknown): a is ReadonlyArray; - static isNullOrEmpty(a: ReadonlyArray | undefined): a is undefined; - static getUniqueItems(a: ReadonlyArray): T[]; - static removeFirst(a: T[], item: T): boolean; - static removeAll(a: T[], isMatch: (item: T) => boolean): T[]; - static toIterator(items: ReadonlyArray): Generator; - static sortByProperty(items: T[], getProp: (item: T) => string | number): T[]; - static groupBy(items: ReadonlyArray, getGroup: (item: T) => string | number): T[][]; - static binaryInsertWithOverwrite(items: T[], newItem: T, comparer: Comparer): void; - static binarySearch(items: ReadonlyArray, storedComparer: StoredComparer): number; - static containsSubArray(items: ReadonlyArray, subArray: ReadonlyArray): boolean; -} - -/** - * Deep clones an object not maintaining references. - * @remarks If this has a circular reference it will go forever so be careful. - */ -export declare function deepClone(objToClone: T): T; - -/** - * Event container subscription type - */ -export type EventContainerSubscription = (arg: EventArgType) => void; - -/** - * Event container for event subscriptions. - */ -export declare class EventContainer { - private readonly subscriptions; - /** - * Subscribe to an event being fired. - * @param subscription - Subscription. - */ - subscribe(subscription: EventContainerSubscription): void; - /** - * Unsubscribe to an event being fired. - * @param subscription - Subscription. - */ - unsubscribe(subscription: EventContainerSubscription): void; - /** - * Fire an event. - */ - fire(arg: EventArgType): void; - private getIndex; -} - -export declare class IterableUtils { - static find(items: IterableIterator, condition: (item: T) => boolean): T | undefined; -} - -export declare function nameof(obj: TObject, key: keyof TObject): string; - -export declare function nameof(key: keyof TObject): string; - -export declare class ObjectUtils { - private constructor(); - static clone(obj: T): T; -} - -export declare class StringUtils { - private constructor(); - static isWhitespaceCharCode(charCode: number | undefined): boolean; - static isSpaces(text: string): boolean; - static hasBom(text: string): boolean; - static stripBom(text: string): string; - static stripQuotes(text: string): string; - static isQuoted(text: string): boolean; - static isNullOrWhitespace(str: string | undefined): str is undefined; - static isNullOrEmpty(str: string | undefined): str is undefined; - static isWhitespace(text: string | undefined): boolean; - static startsWithNewLine(str: string | undefined): boolean; - static endsWithNewLine(str: string | undefined): boolean; - static insertAtLastNonWhitespace(str: string, insertText: string): string; - static getLineNumberAtPos(str: string, pos: number): number; - static getLengthFromLineStartAtPos(str: string, pos: number): number; - static getLineStartFromPos(str: string, pos: number): number; - static getLineEndFromPos(str: string, pos: number): number; - static escapeForWithinString(str: string, quoteKind: "\"" | "'"): string; - /** - * Escapes all the occurrences of the char in the string. - */ - static escapeChar(str: string, char: string): string; - static removeIndentation(str: string, opts: { - isInStringAtPos: (pos: number) => boolean; - indentSizeInSpaces: number; - }): string; - static indent(str: string, times: number, options: { - indentText: string; - indentSizeInSpaces: number; - isInStringAtPos: (pos: number) => boolean; - }): string; -} -// @deno-types="./typescript.d.ts" - -import { CompilerOptions, DiagnosticCategory, EditorSettings, EmitHint, LanguageVariant, ModuleKind, ModuleResolutionKind, NewLineKind, NodeFlags, ObjectFlags, ScriptKind, ScriptTarget, SymbolFlags, SyntaxKind, TypeFlags, TypeFormatFlags } from "./typescript.js"; -export { ts, CompilerOptions, DiagnosticCategory, EditorSettings, EmitHint, LanguageVariant, ModuleKind, ModuleResolutionKind, NewLineKind, NodeFlags, ObjectFlags, ScriptKind, ScriptTarget, SymbolFlags, SyntaxKind, TypeFlags, TypeFormatFlags }; diff --git a/vendor/deno.land/x/ts_morph@18.0.0/common/ts_morph_common.js b/vendor/deno.land/x/ts_morph@18.0.0/common/ts_morph_common.js deleted file mode 100644 index ac713f5..0000000 --- a/vendor/deno.land/x/ts_morph@18.0.0/common/ts_morph_common.js +++ /dev/null @@ -1,2817 +0,0 @@ -import { DenoRuntime } from "./DenoRuntime.ts"; - -// @deno-types="./typescript.d.ts" -import { ts } from "./typescript.js"; -const ScriptTarget = ts.ScriptTarget; -export { ts }; -const DiagnosticCategory = ts.DiagnosticCategory; -const EmitHint = ts.EmitHint; -const LanguageVariant = ts.LanguageVariant; -const ModuleKind = ts.ModuleKind; -const ModuleResolutionKind = ts.ModuleResolutionKind; -const NewLineKind = ts.NewLineKind; -const NodeFlags = ts.NodeFlags; -const ObjectFlags = ts.ObjectFlags; -const ScriptKind = ts.ScriptKind; -const SymbolFlags = ts.SymbolFlags; -const SyntaxKind = ts.SyntaxKind; -const TypeFlags = ts.TypeFlags; -const TypeFormatFlags = ts.TypeFormatFlags; - -export { DiagnosticCategory, EmitHint, LanguageVariant, ModuleKind, ModuleResolutionKind, NewLineKind, NodeFlags, ObjectFlags, ScriptKind, ScriptTarget, SymbolFlags, SyntaxKind, TypeFlags, TypeFormatFlags }; - -class KeyValueCache { - constructor() { - this.cacheItems = new Map(); - } - getSize() { - return this.cacheItems.size; - } - getValues() { - return this.cacheItems.values(); - } - getValuesAsArray() { - return Array.from(this.getValues()); - } - getKeys() { - return this.cacheItems.keys(); - } - getEntries() { - return this.cacheItems.entries(); - } - getOrCreate(key, createFunc) { - let item = this.get(key); - if (item == null) { - item = createFunc(); - this.set(key, item); - } - return item; - } - has(key) { - return this.cacheItems.has(key); - } - get(key) { - return this.cacheItems.get(key); - } - set(key, value) { - this.cacheItems.set(key, value); - } - replaceKey(key, newKey) { - if (!this.cacheItems.has(key)) - throw new Error("Key not found."); - const value = this.cacheItems.get(key); - this.cacheItems.delete(key); - this.cacheItems.set(newKey, value); - } - removeByKey(key) { - this.cacheItems.delete(key); - } - clear() { - this.cacheItems.clear(); - } -} - -class ComparerToStoredComparer { - constructor(comparer, storedValue) { - this.comparer = comparer; - this.storedValue = storedValue; - } - compareTo(value) { - return this.comparer.compareTo(this.storedValue, value); - } -} - -class LocaleStringComparer { - compareTo(a, b) { - const comparisonResult = a.localeCompare(b, "en-us-u-kf-upper"); - if (comparisonResult < 0) - return -1; - else if (comparisonResult === 0) - return 0; - return 1; - } -} -LocaleStringComparer.instance = new LocaleStringComparer(); - -class PropertyComparer { - constructor(getProperty, comparer) { - this.getProperty = getProperty; - this.comparer = comparer; - } - compareTo(a, b) { - return this.comparer.compareTo(this.getProperty(a), this.getProperty(b)); - } -} - -class PropertyStoredComparer { - constructor(getProperty, comparer) { - this.getProperty = getProperty; - this.comparer = comparer; - } - compareTo(value) { - return this.comparer.compareTo(this.getProperty(value)); - } -} - -class ArrayUtils { - constructor() { - } - static isReadonlyArray(a) { - return a instanceof Array; - } - static isNullOrEmpty(a) { - return !(a instanceof Array) || a.length === 0; - } - static getUniqueItems(a) { - return a.filter((item, index) => a.indexOf(item) === index); - } - static removeFirst(a, item) { - const index = a.indexOf(item); - if (index === -1) - return false; - a.splice(index, 1); - return true; - } - static removeAll(a, isMatch) { - const removedItems = []; - for (let i = a.length - 1; i >= 0; i--) { - if (isMatch(a[i])) { - removedItems.push(a[i]); - a.splice(i, 1); - } - } - return removedItems; - } - static *toIterator(items) { - for (const item of items) - yield item; - } - static sortByProperty(items, getProp) { - items.sort((a, b) => getProp(a) <= getProp(b) ? -1 : 1); - return items; - } - static groupBy(items, getGroup) { - const result = []; - const groups = {}; - for (const item of items) { - const group = getGroup(item).toString(); - if (groups[group] == null) { - groups[group] = []; - result.push(groups[group]); - } - groups[group].push(item); - } - return result; - } - static binaryInsertWithOverwrite(items, newItem, comparer) { - let top = items.length - 1; - let bottom = 0; - while (bottom <= top) { - const mid = Math.floor((top + bottom) / 2); - if (comparer.compareTo(newItem, items[mid]) < 0) - top = mid - 1; - else - bottom = mid + 1; - } - if (items[top] != null && comparer.compareTo(newItem, items[top]) === 0) - items[top] = newItem; - else - items.splice(top + 1, 0, newItem); - } - static binarySearch(items, storedComparer) { - let top = items.length - 1; - let bottom = 0; - while (bottom <= top) { - const mid = Math.floor((top + bottom) / 2); - const comparisonResult = storedComparer.compareTo(items[mid]); - if (comparisonResult === 0) - return mid; - else if (comparisonResult < 0) - top = mid - 1; - else - bottom = mid + 1; - } - return -1; - } - static containsSubArray(items, subArray) { - let findIndex = 0; - for (const item of items) { - if (subArray[findIndex] === item) { - findIndex++; - if (findIndex === subArray.length) - return true; - } - else { - findIndex = 0; - } - } - return false; - } -} - -function deepClone(objToClone) { - return clone(objToClone); - function clone(obj) { - const newObj = Object.create(obj.constructor.prototype); - for (const propName of Object.keys(obj)) - newObj[propName] = cloneItem(obj[propName]); - return newObj; - } - function cloneArray(array) { - return array.map(cloneItem); - } - function cloneItem(item) { - if (item instanceof Array) - return cloneArray(item); - else if (typeof item === "object") - return item === null ? item : clone(item); - return item; - } -} - -class EventContainer { - constructor() { - this.subscriptions = []; - } - subscribe(subscription) { - const index = this.getIndex(subscription); - if (index === -1) - this.subscriptions.push(subscription); - } - unsubscribe(subscription) { - const index = this.getIndex(subscription); - if (index >= 0) - this.subscriptions.splice(index, 1); - } - fire(arg) { - for (const subscription of this.subscriptions) - subscription(arg); - } - getIndex(subscription) { - return this.subscriptions.indexOf(subscription); - } -} - -class IterableUtils { - static find(items, condition) { - for (const item of items) { - if (condition(item)) - return item; - } - return undefined; - } -} - -function nameof(key1, key2) { - return key2 !== null && key2 !== void 0 ? key2 : key1; -} - -class ObjectUtils { - constructor() { - } - static clone(obj) { - if (obj == null) - return undefined; - if (obj instanceof Array) - return cloneArray(obj); - return Object.assign({}, obj); - function cloneArray(a) { - return a.map(item => ObjectUtils.clone(item)); - } - } -} - -function matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getEntries, realpath, directoryExists) { - return ts.matchFiles.apply(this, arguments); -} -function getFileMatcherPatterns(path, excludes, includes, useCaseSensitiveFileNames, currentDirectory) { - return ts.getFileMatcherPatterns.apply(this, arguments); -} -function getEmitModuleResolutionKind(compilerOptions) { - return ts.getEmitModuleResolutionKind.apply(this, arguments); -} - -function getSyntaxKindName(kind) { - return getKindCache()[kind]; -} -let kindCache = undefined; -function getKindCache() { - if (kindCache != null) - return kindCache; - kindCache = {}; - for (const name of Object.keys(ts.SyntaxKind).filter(k => isNaN(parseInt(k, 10)))) { - const value = ts.SyntaxKind[name]; - if (kindCache[value] == null) - kindCache[value] = name; - } - return kindCache; -} - -var errors; -(function (errors) { - class BaseError extends Error { - constructor(message, node) { - const nodeLocation = node && getPrettyNodeLocation(node); - const messageWithLocation = nodeLocation ? `${message}\n\n${nodeLocation}` : message; - super(messageWithLocation); - this.message = messageWithLocation; - } - } - errors.BaseError = BaseError; - class ArgumentError extends BaseError { - constructor(argName, message, node) { - super(`Argument Error (${argName}): ${message}`, node); - } - } - errors.ArgumentError = ArgumentError; - class ArgumentNullOrWhitespaceError extends ArgumentError { - constructor(argName, node) { - super(argName, "Cannot be null or whitespace.", node); - } - } - errors.ArgumentNullOrWhitespaceError = ArgumentNullOrWhitespaceError; - class ArgumentOutOfRangeError extends ArgumentError { - constructor(argName, value, range, node) { - super(argName, `Range is ${range[0]} to ${range[1]}, but ${value} was provided.`, node); - } - } - errors.ArgumentOutOfRangeError = ArgumentOutOfRangeError; - class ArgumentTypeError extends ArgumentError { - constructor(argName, expectedType, actualType, node) { - super(argName, `Expected type '${expectedType}', but was '${actualType}'.`, node); - } - } - errors.ArgumentTypeError = ArgumentTypeError; - class PathNotFoundError extends BaseError { - constructor(path, prefix = "Path") { - super(`${prefix} not found: ${path}`); - this.path = path; - this.code = "ENOENT"; - } - } - errors.PathNotFoundError = PathNotFoundError; - class DirectoryNotFoundError extends PathNotFoundError { - constructor(dirPath) { - super(dirPath, "Directory"); - } - } - errors.DirectoryNotFoundError = DirectoryNotFoundError; - class FileNotFoundError extends PathNotFoundError { - constructor(filePath) { - super(filePath, "File"); - } - } - errors.FileNotFoundError = FileNotFoundError; - class InvalidOperationError extends BaseError { - constructor(message, node) { - super(message, node); - } - } - errors.InvalidOperationError = InvalidOperationError; - class NotImplementedError extends BaseError { - constructor(message = "Not implemented.", node) { - super(message, node); - } - } - errors.NotImplementedError = NotImplementedError; - class NotSupportedError extends BaseError { - constructor(message) { - super(message); - } - } - errors.NotSupportedError = NotSupportedError; - function throwIfNotType(value, expectedType, argName) { - if (typeof value !== expectedType) - throw new ArgumentTypeError(argName, expectedType, typeof value); - } - errors.throwIfNotType = throwIfNotType; - function throwIfNotString(value, argName) { - if (typeof value !== "string") - throw new ArgumentTypeError(argName, "string", typeof value); - } - errors.throwIfNotString = throwIfNotString; - function throwIfWhitespaceOrNotString(value, argName) { - throwIfNotString(value, argName); - if (value.trim().length === 0) - throw new ArgumentNullOrWhitespaceError(argName); - } - errors.throwIfWhitespaceOrNotString = throwIfWhitespaceOrNotString; - function throwIfOutOfRange(value, range, argName) { - if (value < range[0] || value > range[1]) - throw new ArgumentOutOfRangeError(argName, value, range); - } - errors.throwIfOutOfRange = throwIfOutOfRange; - function throwIfRangeOutOfRange(actualRange, range, argName) { - if (actualRange[0] > actualRange[1]) - throw new ArgumentError(argName, `The start of a range must not be greater than the end: [${actualRange[0]}, ${actualRange[1]}]`); - throwIfOutOfRange(actualRange[0], range, argName); - throwIfOutOfRange(actualRange[1], range, argName); - } - errors.throwIfRangeOutOfRange = throwIfRangeOutOfRange; - function throwNotImplementedForSyntaxKindError(kind, node) { - throw new NotImplementedError(`Not implemented feature for syntax kind '${getSyntaxKindName(kind)}'.`, node); - } - errors.throwNotImplementedForSyntaxKindError = throwNotImplementedForSyntaxKindError; - function throwIfNegative(value, argName) { - if (value < 0) - throw new ArgumentError(argName, "Expected a non-negative value."); - } - errors.throwIfNegative = throwIfNegative; - function throwIfNullOrUndefined(value, errorMessage, node) { - if (value == null) - throw new InvalidOperationError(typeof errorMessage === "string" ? errorMessage : errorMessage(), node); - return value; - } - errors.throwIfNullOrUndefined = throwIfNullOrUndefined; - function throwNotImplementedForNeverValueError(value, sourceNode) { - const node = value; - if (node != null && typeof node.kind === "number") - return throwNotImplementedForSyntaxKindError(node.kind, sourceNode); - throw new NotImplementedError(`Not implemented value: ${JSON.stringify(value)}`, sourceNode); - } - errors.throwNotImplementedForNeverValueError = throwNotImplementedForNeverValueError; - function throwIfNotEqual(actual, expected, description) { - if (actual !== expected) - throw new InvalidOperationError(`Expected ${actual} to equal ${expected}. ${description}`); - } - errors.throwIfNotEqual = throwIfNotEqual; - function throwIfTrue(value, errorMessage) { - if (value === true) - throw new InvalidOperationError(errorMessage); - } - errors.throwIfTrue = throwIfTrue; -})(errors || (errors = {})); -function getPrettyNodeLocation(node) { - const source = getSourceLocation(node); - if (!source) - return undefined; - return `${source.filePath}:${source.loc.line}:${source.loc.character}\n` - + `> ${source.loc.line} | ${source.lineText}`; -} -function getSourceLocation(node) { - if (!isNode(node)) - return; - const sourceFile = node.getSourceFile(); - const sourceCode = sourceFile.getFullText(); - const start = node.getStart(); - const lineStart = sourceCode.lastIndexOf("\n", start) + 1; - const nextNewLinePos = sourceCode.indexOf("\n", start); - const lineEnd = nextNewLinePos === -1 ? sourceCode.length : nextNewLinePos; - const textStart = (start - lineStart > 40) ? start - 37 : lineStart; - const textEnd = (lineEnd - textStart > 80) ? textStart + 77 : lineEnd; - let lineText = ""; - if (textStart !== lineStart) - lineText += "..."; - lineText += sourceCode.substring(textStart, textEnd); - if (textEnd !== lineEnd) - lineText += "..."; - return { - filePath: sourceFile.getFilePath(), - loc: { - line: StringUtils.getLineNumberAtPos(sourceCode, start), - character: start - lineStart + 1, - }, - lineText, - }; -} -function isNode(node) { - return typeof node === "object" && node !== null && ("getSourceFile" in node) && ("getStart" in node); -} - -const CharCodes = { - ASTERISK: "*".charCodeAt(0), - NEWLINE: "\n".charCodeAt(0), - CARRIAGE_RETURN: "\r".charCodeAt(0), - SPACE: " ".charCodeAt(0), - TAB: "\t".charCodeAt(0), - CLOSE_BRACE: "}".charCodeAt(0), -}; - -const regExWhitespaceSet = new Set([" ", "\f", "\n", "\r", "\t", "\v", "\u00A0", "\u2028", "\u2029"].map(c => c.charCodeAt(0))); -class StringUtils { - constructor() { - } - static isWhitespaceCharCode(charCode) { - return regExWhitespaceSet.has(charCode); - } - static isSpaces(text) { - if (text == null || text.length === 0) - return false; - for (let i = 0; i < text.length; i++) { - if (text.charCodeAt(i) !== CharCodes.SPACE) - return false; - } - return true; - } - static hasBom(text) { - return text.charCodeAt(0) === 0xFEFF; - } - static stripBom(text) { - if (StringUtils.hasBom(text)) - return text.slice(1); - return text; - } - static stripQuotes(text) { - if (StringUtils.isQuoted(text)) - return text.substring(1, text.length - 1); - return text; - } - static isQuoted(text) { - return text.startsWith("'") && text.endsWith("'") || text.startsWith("\"") && text.endsWith("\""); - } - static isNullOrWhitespace(str) { - return typeof str !== "string" || StringUtils.isWhitespace(str); - } - static isNullOrEmpty(str) { - return typeof str !== "string" || str.length === 0; - } - static isWhitespace(text) { - if (text == null) - return true; - for (let i = 0; i < text.length; i++) { - if (!StringUtils.isWhitespaceCharCode(text.charCodeAt(i))) - return false; - } - return true; - } - static startsWithNewLine(str) { - if (str == null) - return false; - return str.charCodeAt(0) === CharCodes.NEWLINE || str.charCodeAt(0) === CharCodes.CARRIAGE_RETURN && str.charCodeAt(1) === CharCodes.NEWLINE; - } - static endsWithNewLine(str) { - if (str == null) - return false; - return str.charCodeAt(str.length - 1) === CharCodes.NEWLINE; - } - static insertAtLastNonWhitespace(str, insertText) { - let i = str.length; - while (i > 0 && StringUtils.isWhitespaceCharCode(str.charCodeAt(i - 1))) - i--; - return str.substring(0, i) + insertText + str.substring(i); - } - static getLineNumberAtPos(str, pos) { - errors.throwIfOutOfRange(pos, [0, str.length], "pos"); - let count = 0; - for (let i = 0; i < pos; i++) { - if (str.charCodeAt(i) === CharCodes.NEWLINE) - count++; - } - return count + 1; - } - static getLengthFromLineStartAtPos(str, pos) { - errors.throwIfOutOfRange(pos, [0, str.length], "pos"); - return pos - StringUtils.getLineStartFromPos(str, pos); - } - static getLineStartFromPos(str, pos) { - errors.throwIfOutOfRange(pos, [0, str.length], "pos"); - while (pos > 0) { - const previousCharCode = str.charCodeAt(pos - 1); - if (previousCharCode === CharCodes.NEWLINE || previousCharCode === CharCodes.CARRIAGE_RETURN) - break; - pos--; - } - return pos; - } - static getLineEndFromPos(str, pos) { - errors.throwIfOutOfRange(pos, [0, str.length], "pos"); - while (pos < str.length) { - const currentChar = str.charCodeAt(pos); - if (currentChar === CharCodes.NEWLINE || currentChar === CharCodes.CARRIAGE_RETURN) - break; - pos++; - } - return pos; - } - static escapeForWithinString(str, quoteKind) { - return StringUtils.escapeChar(str, quoteKind).replace(/(\r?\n)/g, "\\$1"); - } - static escapeChar(str, char) { - if (char.length !== 1) - throw new errors.InvalidOperationError(`Specified char must be one character long.`); - let result = ""; - for (const currentChar of str) { - if (currentChar === char) - result += "\\"; - result += currentChar; - } - return result; - } - static removeIndentation(str, opts) { - const { isInStringAtPos, indentSizeInSpaces } = opts; - const startPositions = []; - const endPositions = []; - let minIndentWidth; - analyze(); - return buildString(); - function analyze() { - let isAtStartOfLine = str.charCodeAt(0) === CharCodes.SPACE || str.charCodeAt(0) === CharCodes.TAB; - for (let i = 0; i < str.length; i++) { - if (!isAtStartOfLine) { - if (str.charCodeAt(i) === CharCodes.NEWLINE && !isInStringAtPos(i + 1)) - isAtStartOfLine = true; - continue; - } - startPositions.push(i); - let spacesCount = 0; - let tabsCount = 0; - while (true) { - if (str.charCodeAt(i) === CharCodes.SPACE) - spacesCount++; - else if (str.charCodeAt(i) === CharCodes.TAB) - tabsCount++; - else - break; - i++; - } - const indentWidth = Math.ceil(spacesCount / indentSizeInSpaces) * indentSizeInSpaces + tabsCount * indentSizeInSpaces; - if (minIndentWidth == null || indentWidth < minIndentWidth) - minIndentWidth = indentWidth; - endPositions.push(i); - isAtStartOfLine = false; - } - } - function buildString() { - if (startPositions.length === 0) - return str; - if (minIndentWidth == null || minIndentWidth === 0) - return str; - const deindentWidth = minIndentWidth; - let result = ""; - result += str.substring(0, startPositions[0]); - let lastEndPos = startPositions[0]; - for (let i = 0; i < startPositions.length; i++) { - const startPosition = startPositions[i]; - const endPosition = endPositions[i]; - let indentCount = 0; - let pos; - for (pos = startPosition; pos < endPosition; pos++) { - if (indentCount >= deindentWidth) - break; - if (str.charCodeAt(pos) === CharCodes.SPACE) - indentCount++; - else if (str.charCodeAt(pos) === CharCodes.TAB) - indentCount += indentSizeInSpaces; - } - lastEndPos = startPositions[i + 1] == null ? str.length : startPositions[i + 1]; - result += str.substring(pos, lastEndPos); - } - result += str.substring(lastEndPos); - return result; - } - } - static indent(str, times, options) { - if (times === 0) - return str; - const { indentText, indentSizeInSpaces, isInStringAtPos } = options; - const fullIndentationText = times > 0 ? indentText.repeat(times) : undefined; - const totalIndentSpaces = Math.abs(times * indentSizeInSpaces); - let result = ""; - let lineStart = 0; - let lineEnd = 0; - for (let i = 0; i < str.length; i++) { - lineStart = i; - while (i < str.length && str.charCodeAt(i) !== CharCodes.NEWLINE) - i++; - lineEnd = i === str.length ? i : i + 1; - appendLine(); - } - return result; - function appendLine() { - if (isInStringAtPos(lineStart)) - result += str.substring(lineStart, lineEnd); - else if (times > 0) - result += fullIndentationText + str.substring(lineStart, lineEnd); - else { - let start = lineStart; - let indentSpaces = 0; - for (start = lineStart; start < str.length; start++) { - if (indentSpaces >= totalIndentSpaces) - break; - if (str.charCodeAt(start) === CharCodes.SPACE) - indentSpaces++; - else if (str.charCodeAt(start) === CharCodes.TAB) - indentSpaces += indentSizeInSpaces; - else - break; - } - result += str.substring(start, lineEnd); - } - } - } -} - -class SortedKeyValueArray { - constructor(getKey, comparer) { - this.getKey = getKey; - this.comparer = comparer; - this.array = []; - } - set(value) { - ArrayUtils.binaryInsertWithOverwrite(this.array, value, new PropertyComparer(this.getKey, this.comparer)); - } - removeByValue(value) { - this.removeByKey(this.getKey(value)); - } - removeByKey(key) { - const storedComparer = new ComparerToStoredComparer(this.comparer, key); - const index = ArrayUtils.binarySearch(this.array, new PropertyStoredComparer(this.getKey, storedComparer)); - if (index >= 0) - this.array.splice(index, 1); - } - getArrayCopy() { - return [...this.array]; - } - hasItems() { - return this.array.length > 0; - } - *entries() { - yield* this.array; - } -} - -class WeakCache { - constructor() { - this.cacheItems = new WeakMap(); - } - getOrCreate(key, createFunc) { - let item = this.get(key); - if (item == null) { - item = createFunc(); - this.set(key, item); - } - return item; - } - has(key) { - return this.cacheItems.has(key); - } - get(key) { - return this.cacheItems.get(key); - } - set(key, value) { - this.cacheItems.set(key, value); - } - removeByKey(key) { - this.cacheItems.delete(key); - } -} - -function createCompilerSourceFile(filePath, scriptSnapshot, scriptTarget, version, setParentNodes, scriptKind) { - return ts.createLanguageServiceSourceFile(filePath, scriptSnapshot, scriptTarget !== null && scriptTarget !== void 0 ? scriptTarget : ScriptTarget.Latest, version, setParentNodes, scriptKind); -} - -function createDocumentCache(files) { - const cache = new InternalDocumentCache(); - cache._addFiles(files); - return cache; -} -class FileSystemDocumentCache { - constructor(fileSystem, documentCache) { - this.documentCache = documentCache; - this.absoluteToOriginalPath = new Map(); - for (const filePath of documentCache._getFilePaths()) - this.absoluteToOriginalPath.set(fileSystem.getStandardizedAbsolutePath(filePath), filePath); - } - getDocumentIfMatch(filePath, scriptSnapshot, scriptTarget, scriptKind) { - const originalFilePath = this.absoluteToOriginalPath.get(filePath); - if (originalFilePath == null) - return; - return this.documentCache._getDocumentIfMatch(originalFilePath, filePath, scriptSnapshot, scriptTarget, scriptKind); - } -} -class InternalDocumentCache { - constructor() { - this._fileTexts = new Map(); - this._documents = new Map(); - } - _addFiles(files) { - for (const file of files) - this._fileTexts.set(file.fileName, file.text); - } - _getFilePaths() { - return this._fileTexts.keys(); - } - _getCacheForFileSystem(fileSystem) { - return new FileSystemDocumentCache(fileSystem, this); - } - _getDocumentIfMatch(filePath, absoluteFilePath, scriptSnapshot, scriptTarget, scriptKind) { - const fileText = this._fileTexts.get(filePath); - if (fileText == null) - return undefined; - if (fileText !== scriptSnapshot.getText(0, scriptSnapshot.getLength())) - return undefined; - return this._getDocument(filePath, absoluteFilePath, scriptSnapshot, scriptTarget, scriptKind); - } - _getDocument(filePath, absoluteFilePath, scriptSnapshot, scriptTarget, scriptKind) { - const documentKey = this._getKey(filePath, scriptTarget, scriptKind); - let document = this._documents.get(documentKey); - if (document == null) { - document = createCompilerSourceFile(absoluteFilePath, scriptSnapshot, scriptTarget, "-1", false, scriptKind); - this._documents.set(documentKey, document); - } - document = deepClone(document); - document.fileName = absoluteFilePath; - return document; - } - _getKey(filePath, scriptTarget, scriptKind) { - var _a, _b; - return (filePath + ((_a = scriptTarget === null || scriptTarget === void 0 ? void 0 : scriptTarget.toString()) !== null && _a !== void 0 ? _a : "-1") + ((_b = scriptKind === null || scriptKind === void 0 ? void 0 : scriptKind.toString()) !== null && _b !== void 0 ? _b : "-1")); - } -} - -const libFiles = [{ - fileName: "lib.d.ts", - text: "/// \n/// \n/// \n/// \n/// \n" - }, { - fileName: "lib.decorators.d.ts", - text: "/// \ntype ClassMemberDecoratorContext=|ClassMethodDecoratorContext|ClassGetterDecoratorContext|ClassSetterDecoratorContext|ClassFieldDecoratorContext|ClassAccessorDecoratorContext;type DecoratorContext=|ClassDecoratorContext|ClassMemberDecoratorContext;interface ClassDecoratorContext<\nClass extends abstract new(...args:any)=>any=abstract new(...args:any)=>any,>{readonly kind:\"class\";readonly name:string|undefined;addInitializer(initializer:(this:Class)=>void):void;}interface ClassMethodDecoratorContext<\nThis=unknown,Value extends(this:This,...args:any)=>any=(this:This,...args:any)=>any,>{readonly kind:\"method\";readonly name:string|symbol;readonly static:boolean;readonly private:boolean;readonly access:{has(object:This):boolean;get(object:This):Value;};addInitializer(initializer:(this:This)=>void):void;}interface ClassGetterDecoratorContext<\nThis=unknown,Value=unknown,>{readonly kind:\"getter\";readonly name:string|symbol;readonly static:boolean;readonly private:boolean;readonly access:{has(object:This):boolean;get(object:This):Value;};addInitializer(initializer:(this:This)=>void):void;}interface ClassSetterDecoratorContext<\nThis=unknown,Value=unknown,>{readonly kind:\"setter\";readonly name:string|symbol;readonly static:boolean;readonly private:boolean;readonly access:{has(object:This):boolean;set(object:This,value:Value):void;};addInitializer(initializer:(this:This)=>void):void;}interface ClassAccessorDecoratorContext<\nThis=unknown,Value=unknown,>{readonly kind:\"accessor\";readonly name:string|symbol;readonly static:boolean;readonly private:boolean;readonly access:{has(object:This):boolean;get(object:This):Value;set(object:This,value:Value):void;};addInitializer(initializer:(this:This)=>void):void;}interface ClassAccessorDecoratorTarget{get(this:This):Value;set(this:This,value:Value):void;}interface ClassAccessorDecoratorResult{get?(this:This):Value;set?(this:This,value:Value):void;init?(this:This,value:Value):Value;}interface ClassFieldDecoratorContext<\nThis=unknown,Value=unknown,>{readonly kind:\"field\";readonly name:string|symbol;readonly static:boolean;readonly private:boolean;readonly access:{has(object:This):boolean;get(object:This):Value;set(object:This,value:Value):void;};addInitializer(initializer:(this:This)=>void):void;}" - }, { - fileName: "lib.decorators.legacy.d.ts", - text: "/// \ndeclare type ClassDecorator=(target:TFunction)=>TFunction|void;declare type PropertyDecorator=(target:Object,propertyKey:string|symbol)=>void;declare type MethodDecorator=(target:Object,propertyKey:string|symbol,descriptor:TypedPropertyDescriptor)=>TypedPropertyDescriptor|void;declare type ParameterDecorator=(target:Object,propertyKey:string|symbol,parameterIndex:number)=>void;" - }, { - fileName: "lib.dom.d.ts", - text: "/// \ninterface AddEventListenerOptions extends EventListenerOptions{once?:boolean;passive?:boolean;signal?:AbortSignal;}interface AesCbcParams extends Algorithm{iv:BufferSource;}interface AesCtrParams extends Algorithm{counter:BufferSource;length:number;}interface AesDerivedKeyParams extends Algorithm{length:number;}interface AesGcmParams extends Algorithm{additionalData?:BufferSource;iv:BufferSource;tagLength?:number;}interface AesKeyAlgorithm extends KeyAlgorithm{length:number;}interface AesKeyGenParams extends Algorithm{length:number;}interface Algorithm{name:string;}interface AnalyserOptions extends AudioNodeOptions{fftSize?:number;maxDecibels?:number;minDecibels?:number;smoothingTimeConstant?:number;}interface AnimationEventInit extends EventInit{animationName?:string;elapsedTime?:number;pseudoElement?:string;}interface AnimationPlaybackEventInit extends EventInit{currentTime?:CSSNumberish|null;timelineTime?:CSSNumberish|null;}interface AssignedNodesOptions{flatten?:boolean;}interface AudioBufferOptions{length:number;numberOfChannels?:number;sampleRate:number;}interface AudioBufferSourceOptions{buffer?:AudioBuffer|null;detune?:number;loop?:boolean;loopEnd?:number;loopStart?:number;playbackRate?:number;}interface AudioConfiguration{bitrate?:number;channels?:string;contentType:string;samplerate?:number;spatialRendering?:boolean;}interface AudioContextOptions{latencyHint?:AudioContextLatencyCategory|number;sampleRate?:number;}interface AudioNodeOptions{channelCount?:number;channelCountMode?:ChannelCountMode;channelInterpretation?:ChannelInterpretation;}interface AudioProcessingEventInit extends EventInit{inputBuffer:AudioBuffer;outputBuffer:AudioBuffer;playbackTime:number;}interface AudioTimestamp{contextTime?:number;performanceTime?:DOMHighResTimeStamp;}interface AudioWorkletNodeOptions extends AudioNodeOptions{numberOfInputs?:number;numberOfOutputs?:number;outputChannelCount?:number[];parameterData?:Record;processorOptions?:any;}interface AuthenticationExtensionsClientInputs{appid?:string;credProps?:boolean;hmacCreateSecret?:boolean;}interface AuthenticationExtensionsClientOutputs{appid?:boolean;credProps?:CredentialPropertiesOutput;hmacCreateSecret?:boolean;}interface AuthenticatorSelectionCriteria{authenticatorAttachment?:AuthenticatorAttachment;requireResidentKey?:boolean;residentKey?:ResidentKeyRequirement;userVerification?:UserVerificationRequirement;}interface BiquadFilterOptions extends AudioNodeOptions{Q?:number;detune?:number;frequency?:number;gain?:number;type?:BiquadFilterType;}interface BlobEventInit{data:Blob;timecode?:DOMHighResTimeStamp;}interface BlobPropertyBag{endings?:EndingType;type?:string;}interface CSSStyleSheetInit{baseURL?:string;disabled?:boolean;media?:MediaList|string;}interface CacheQueryOptions{ignoreMethod?:boolean;ignoreSearch?:boolean;ignoreVary?:boolean;}interface CanvasRenderingContext2DSettings{alpha?:boolean;colorSpace?:PredefinedColorSpace;desynchronized?:boolean;willReadFrequently?:boolean;}interface ChannelMergerOptions extends AudioNodeOptions{numberOfInputs?:number;}interface ChannelSplitterOptions extends AudioNodeOptions{numberOfOutputs?:number;}interface CheckVisibilityOptions{checkOpacity?:boolean;checkVisibilityCSS?:boolean;}interface ClientQueryOptions{includeUncontrolled?:boolean;type?:ClientTypes;}interface ClipboardEventInit extends EventInit{clipboardData?:DataTransfer|null;}interface ClipboardItemOptions{presentationStyle?:PresentationStyle;}interface CloseEventInit extends EventInit{code?:number;reason?:string;wasClean?:boolean;}interface CompositionEventInit extends UIEventInit{data?:string;}interface ComputedEffectTiming extends EffectTiming{activeDuration?:CSSNumberish;currentIteration?:number|null;endTime?:CSSNumberish;localTime?:CSSNumberish|null;progress?:number|null;startTime?:CSSNumberish;}interface ComputedKeyframe{composite:CompositeOperationOrAuto;computedOffset:number;easing:string;offset:number|null;[property:string]:string|number|null|undefined;}interface ConstantSourceOptions{offset?:number;}interface ConstrainBooleanParameters{exact?:boolean;ideal?:boolean;}interface ConstrainDOMStringParameters{exact?:string|string[];ideal?:string|string[];}interface ConstrainDoubleRange extends DoubleRange{exact?:number;ideal?:number;}interface ConstrainULongRange extends ULongRange{exact?:number;ideal?:number;}interface ConvolverOptions extends AudioNodeOptions{buffer?:AudioBuffer|null;disableNormalization?:boolean;}interface CredentialCreationOptions{publicKey?:PublicKeyCredentialCreationOptions;signal?:AbortSignal;}interface CredentialPropertiesOutput{rk?:boolean;}interface CredentialRequestOptions{mediation?:CredentialMediationRequirement;publicKey?:PublicKeyCredentialRequestOptions;signal?:AbortSignal;}interface CryptoKeyPair{privateKey:CryptoKey;publicKey:CryptoKey;}interface CustomEventInitextends EventInit{detail?:T;}interface DOMMatrix2DInit{a?:number;b?:number;c?:number;d?:number;e?:number;f?:number;m11?:number;m12?:number;m21?:number;m22?:number;m41?:number;m42?:number;}interface DOMMatrixInit extends DOMMatrix2DInit{is2D?:boolean;m13?:number;m14?:number;m23?:number;m24?:number;m31?:number;m32?:number;m33?:number;m34?:number;m43?:number;m44?:number;}interface DOMPointInit{w?:number;x?:number;y?:number;z?:number;}interface DOMQuadInit{p1?:DOMPointInit;p2?:DOMPointInit;p3?:DOMPointInit;p4?:DOMPointInit;}interface DOMRectInit{height?:number;width?:number;x?:number;y?:number;}interface DelayOptions extends AudioNodeOptions{delayTime?:number;maxDelayTime?:number;}interface DeviceMotionEventAccelerationInit{x?:number|null;y?:number|null;z?:number|null;}interface DeviceMotionEventInit extends EventInit{acceleration?:DeviceMotionEventAccelerationInit;accelerationIncludingGravity?:DeviceMotionEventAccelerationInit;interval?:number;rotationRate?:DeviceMotionEventRotationRateInit;}interface DeviceMotionEventRotationRateInit{alpha?:number|null;beta?:number|null;gamma?:number|null;}interface DeviceOrientationEventInit extends EventInit{absolute?:boolean;alpha?:number|null;beta?:number|null;gamma?:number|null;}interface DisplayMediaStreamOptions{audio?:boolean|MediaTrackConstraints;video?:boolean|MediaTrackConstraints;}interface DocumentTimelineOptions{originTime?:DOMHighResTimeStamp;}interface DoubleRange{max?:number;min?:number;}interface DragEventInit extends MouseEventInit{dataTransfer?:DataTransfer|null;}interface DynamicsCompressorOptions extends AudioNodeOptions{attack?:number;knee?:number;ratio?:number;release?:number;threshold?:number;}interface EcKeyAlgorithm extends KeyAlgorithm{namedCurve:NamedCurve;}interface EcKeyGenParams extends Algorithm{namedCurve:NamedCurve;}interface EcKeyImportParams extends Algorithm{namedCurve:NamedCurve;}interface EcdhKeyDeriveParams extends Algorithm{public:CryptoKey;}interface EcdsaParams extends Algorithm{hash:HashAlgorithmIdentifier;}interface EffectTiming{delay?:number;direction?:PlaybackDirection;duration?:number|string;easing?:string;endDelay?:number;fill?:FillMode;iterationStart?:number;iterations?:number;playbackRate?:number;}interface ElementCreationOptions{is?:string;}interface ElementDefinitionOptions{extends?:string;}interface ErrorEventInit extends EventInit{colno?:number;error?:any;filename?:string;lineno?:number;message?:string;}interface EventInit{bubbles?:boolean;cancelable?:boolean;composed?:boolean;}interface EventListenerOptions{capture?:boolean;}interface EventModifierInit extends UIEventInit{altKey?:boolean;ctrlKey?:boolean;metaKey?:boolean;modifierAltGraph?:boolean;modifierCapsLock?:boolean;modifierFn?:boolean;modifierFnLock?:boolean;modifierHyper?:boolean;modifierNumLock?:boolean;modifierScrollLock?:boolean;modifierSuper?:boolean;modifierSymbol?:boolean;modifierSymbolLock?:boolean;shiftKey?:boolean;}interface EventSourceInit{withCredentials?:boolean;}interface FilePropertyBag extends BlobPropertyBag{lastModified?:number;}interface FileSystemFlags{create?:boolean;exclusive?:boolean;}interface FileSystemGetDirectoryOptions{create?:boolean;}interface FileSystemGetFileOptions{create?:boolean;}interface FileSystemRemoveOptions{recursive?:boolean;}interface FocusEventInit extends UIEventInit{relatedTarget?:EventTarget|null;}interface FocusOptions{preventScroll?:boolean;}interface FontFaceDescriptors{ascentOverride?:string;descentOverride?:string;display?:FontDisplay;featureSettings?:string;lineGapOverride?:string;stretch?:string;style?:string;unicodeRange?:string;variant?:string;weight?:string;}interface FontFaceSetLoadEventInit extends EventInit{fontfaces?:FontFace[];}interface FormDataEventInit extends EventInit{formData:FormData;}interface FullscreenOptions{navigationUI?:FullscreenNavigationUI;}interface GainOptions extends AudioNodeOptions{gain?:number;}interface GamepadEventInit extends EventInit{gamepad:Gamepad;}interface GetAnimationsOptions{subtree?:boolean;}interface GetNotificationOptions{tag?:string;}interface GetRootNodeOptions{composed?:boolean;}interface HashChangeEventInit extends EventInit{newURL?:string;oldURL?:string;}interface HkdfParams extends Algorithm{hash:HashAlgorithmIdentifier;info:BufferSource;salt:BufferSource;}interface HmacImportParams extends Algorithm{hash:HashAlgorithmIdentifier;length?:number;}interface HmacKeyAlgorithm extends KeyAlgorithm{hash:KeyAlgorithm;length:number;}interface HmacKeyGenParams extends Algorithm{hash:HashAlgorithmIdentifier;length?:number;}interface IDBDatabaseInfo{name?:string;version?:number;}interface IDBIndexParameters{multiEntry?:boolean;unique?:boolean;}interface IDBObjectStoreParameters{autoIncrement?:boolean;keyPath?:string|string[]|null;}interface IDBTransactionOptions{durability?:IDBTransactionDurability;}interface IDBVersionChangeEventInit extends EventInit{newVersion?:number|null;oldVersion?:number;}interface IIRFilterOptions extends AudioNodeOptions{feedback:number[];feedforward:number[];}interface IdleRequestOptions{timeout?:number;}interface ImageBitmapOptions{colorSpaceConversion?:ColorSpaceConversion;imageOrientation?:ImageOrientation;premultiplyAlpha?:PremultiplyAlpha;resizeHeight?:number;resizeQuality?:ResizeQuality;resizeWidth?:number;}interface ImageBitmapRenderingContextSettings{alpha?:boolean;}interface ImageDataSettings{colorSpace?:PredefinedColorSpace;}interface ImageEncodeOptions{quality?:number;type?:string;}interface ImportMeta{url:string;}interface InputEventInit extends UIEventInit{data?:string|null;dataTransfer?:DataTransfer|null;inputType?:string;isComposing?:boolean;targetRanges?:StaticRange[];}interface IntersectionObserverEntryInit{boundingClientRect:DOMRectInit;intersectionRatio:number;intersectionRect:DOMRectInit;isIntersecting:boolean;rootBounds:DOMRectInit|null;target:Element;time:DOMHighResTimeStamp;}interface IntersectionObserverInit{root?:Element|Document|null;rootMargin?:string;threshold?:number|number[];}interface JsonWebKey{alg?:string;crv?:string;d?:string;dp?:string;dq?:string;e?:string;ext?:boolean;k?:string;key_ops?:string[];kty?:string;n?:string;oth?:RsaOtherPrimesInfo[];p?:string;q?:string;qi?:string;use?:string;x?:string;y?:string;}interface KeyAlgorithm{name:string;}interface KeyboardEventInit extends EventModifierInit{charCode?:number;code?:string;isComposing?:boolean;key?:string;keyCode?:number;location?:number;repeat?:boolean;}interface Keyframe{composite?:CompositeOperationOrAuto;easing?:string;offset?:number|null;[property:string]:string|number|null|undefined;}interface KeyframeAnimationOptions extends KeyframeEffectOptions{id?:string;}interface KeyframeEffectOptions extends EffectTiming{composite?:CompositeOperation;iterationComposite?:IterationCompositeOperation;pseudoElement?:string|null;}interface LockInfo{clientId?:string;mode?:LockMode;name?:string;}interface LockManagerSnapshot{held?:LockInfo[];pending?:LockInfo[];}interface LockOptions{ifAvailable?:boolean;mode?:LockMode;signal?:AbortSignal;steal?:boolean;}interface MIDIConnectionEventInit extends EventInit{port?:MIDIPort;}interface MIDIMessageEventInit extends EventInit{data?:Uint8Array;}interface MIDIOptions{software?:boolean;sysex?:boolean;}interface MediaCapabilitiesDecodingInfo extends MediaCapabilitiesInfo{configuration?:MediaDecodingConfiguration;}interface MediaCapabilitiesEncodingInfo extends MediaCapabilitiesInfo{configuration?:MediaEncodingConfiguration;}interface MediaCapabilitiesInfo{powerEfficient:boolean;smooth:boolean;supported:boolean;}interface MediaConfiguration{audio?:AudioConfiguration;video?:VideoConfiguration;}interface MediaDecodingConfiguration extends MediaConfiguration{type:MediaDecodingType;}interface MediaElementAudioSourceOptions{mediaElement:HTMLMediaElement;}interface MediaEncodingConfiguration extends MediaConfiguration{type:MediaEncodingType;}interface MediaEncryptedEventInit extends EventInit{initData?:ArrayBuffer|null;initDataType?:string;}interface MediaImage{sizes?:string;src:string;type?:string;}interface MediaKeyMessageEventInit extends EventInit{message:ArrayBuffer;messageType:MediaKeyMessageType;}interface MediaKeySystemConfiguration{audioCapabilities?:MediaKeySystemMediaCapability[];distinctiveIdentifier?:MediaKeysRequirement;initDataTypes?:string[];label?:string;persistentState?:MediaKeysRequirement;sessionTypes?:string[];videoCapabilities?:MediaKeySystemMediaCapability[];}interface MediaKeySystemMediaCapability{contentType?:string;encryptionScheme?:string|null;robustness?:string;}interface MediaMetadataInit{album?:string;artist?:string;artwork?:MediaImage[];title?:string;}interface MediaPositionState{duration?:number;playbackRate?:number;position?:number;}interface MediaQueryListEventInit extends EventInit{matches?:boolean;media?:string;}interface MediaRecorderOptions{audioBitsPerSecond?:number;bitsPerSecond?:number;mimeType?:string;videoBitsPerSecond?:number;}interface MediaSessionActionDetails{action:MediaSessionAction;fastSeek?:boolean;seekOffset?:number;seekTime?:number;}interface MediaStreamAudioSourceOptions{mediaStream:MediaStream;}interface MediaStreamConstraints{audio?:boolean|MediaTrackConstraints;peerIdentity?:string;preferCurrentTab?:boolean;video?:boolean|MediaTrackConstraints;}interface MediaStreamTrackEventInit extends EventInit{track:MediaStreamTrack;}interface MediaTrackCapabilities{aspectRatio?:DoubleRange;autoGainControl?:boolean[];channelCount?:ULongRange;deviceId?:string;displaySurface?:string;echoCancellation?:boolean[];facingMode?:string[];frameRate?:DoubleRange;groupId?:string;height?:ULongRange;noiseSuppression?:boolean[];sampleRate?:ULongRange;sampleSize?:ULongRange;width?:ULongRange;}interface MediaTrackConstraintSet{aspectRatio?:ConstrainDouble;autoGainControl?:ConstrainBoolean;channelCount?:ConstrainULong;deviceId?:ConstrainDOMString;displaySurface?:ConstrainDOMString;echoCancellation?:ConstrainBoolean;facingMode?:ConstrainDOMString;frameRate?:ConstrainDouble;groupId?:ConstrainDOMString;height?:ConstrainULong;noiseSuppression?:ConstrainBoolean;sampleRate?:ConstrainULong;sampleSize?:ConstrainULong;width?:ConstrainULong;}interface MediaTrackConstraints extends MediaTrackConstraintSet{advanced?:MediaTrackConstraintSet[];}interface MediaTrackSettings{aspectRatio?:number;autoGainControl?:boolean;channelCount?:number;deviceId?:string;displaySurface?:string;echoCancellation?:boolean;facingMode?:string;frameRate?:number;groupId?:string;height?:number;noiseSuppression?:boolean;sampleRate?:number;sampleSize?:number;width?:number;}interface MediaTrackSupportedConstraints{aspectRatio?:boolean;autoGainControl?:boolean;channelCount?:boolean;deviceId?:boolean;displaySurface?:boolean;echoCancellation?:boolean;facingMode?:boolean;frameRate?:boolean;groupId?:boolean;height?:boolean;noiseSuppression?:boolean;sampleRate?:boolean;sampleSize?:boolean;width?:boolean;}interface MessageEventInitextends EventInit{data?:T;lastEventId?:string;origin?:string;ports?:MessagePort[];source?:MessageEventSource|null;}interface MouseEventInit extends EventModifierInit{button?:number;buttons?:number;clientX?:number;clientY?:number;movementX?:number;movementY?:number;relatedTarget?:EventTarget|null;screenX?:number;screenY?:number;}interface MultiCacheQueryOptions extends CacheQueryOptions{cacheName?:string;}interface MutationObserverInit{attributeFilter?:string[];attributeOldValue?:boolean;attributes?:boolean;characterData?:boolean;characterDataOldValue?:boolean;childList?:boolean;subtree?:boolean;}interface NavigationPreloadState{enabled?:boolean;headerValue?:string;}interface NotificationAction{action:string;icon?:string;title:string;}interface NotificationOptions{actions?:NotificationAction[];badge?:string;body?:string;data?:any;dir?:NotificationDirection;icon?:string;image?:string;lang?:string;renotify?:boolean;requireInteraction?:boolean;silent?:boolean;tag?:string;timestamp?:EpochTimeStamp;vibrate?:VibratePattern;}interface OfflineAudioCompletionEventInit extends EventInit{renderedBuffer:AudioBuffer;}interface OfflineAudioContextOptions{length:number;numberOfChannels?:number;sampleRate:number;}interface OptionalEffectTiming{delay?:number;direction?:PlaybackDirection;duration?:number|string;easing?:string;endDelay?:number;fill?:FillMode;iterationStart?:number;iterations?:number;playbackRate?:number;}interface OscillatorOptions extends AudioNodeOptions{detune?:number;frequency?:number;periodicWave?:PeriodicWave;type?:OscillatorType;}interface PageTransitionEventInit extends EventInit{persisted?:boolean;}interface PannerOptions extends AudioNodeOptions{coneInnerAngle?:number;coneOuterAngle?:number;coneOuterGain?:number;distanceModel?:DistanceModelType;maxDistance?:number;orientationX?:number;orientationY?:number;orientationZ?:number;panningModel?:PanningModelType;positionX?:number;positionY?:number;positionZ?:number;refDistance?:number;rolloffFactor?:number;}interface PaymentCurrencyAmount{currency:string;value:string;}interface PaymentDetailsBase{displayItems?:PaymentItem[];modifiers?:PaymentDetailsModifier[];}interface PaymentDetailsInit extends PaymentDetailsBase{id?:string;total:PaymentItem;}interface PaymentDetailsModifier{additionalDisplayItems?:PaymentItem[];data?:any;supportedMethods:string;total?:PaymentItem;}interface PaymentDetailsUpdate extends PaymentDetailsBase{paymentMethodErrors?:any;total?:PaymentItem;}interface PaymentItem{amount:PaymentCurrencyAmount;label:string;pending?:boolean;}interface PaymentMethodChangeEventInit extends PaymentRequestUpdateEventInit{methodDetails?:any;methodName?:string;}interface PaymentMethodData{data?:any;supportedMethods:string;}interface PaymentRequestUpdateEventInit extends EventInit{}interface PaymentValidationErrors{error?:string;paymentMethod?:any;}interface Pbkdf2Params extends Algorithm{hash:HashAlgorithmIdentifier;iterations:number;salt:BufferSource;}interface PerformanceMarkOptions{detail?:any;startTime?:DOMHighResTimeStamp;}interface PerformanceMeasureOptions{detail?:any;duration?:DOMHighResTimeStamp;end?:string|DOMHighResTimeStamp;start?:string|DOMHighResTimeStamp;}interface PerformanceObserverInit{buffered?:boolean;entryTypes?:string[];type?:string;}interface PeriodicWaveConstraints{disableNormalization?:boolean;}interface PeriodicWaveOptions extends PeriodicWaveConstraints{imag?:number[]|Float32Array;real?:number[]|Float32Array;}interface PermissionDescriptor{name:PermissionName;}interface PictureInPictureEventInit extends EventInit{pictureInPictureWindow:PictureInPictureWindow;}interface PointerEventInit extends MouseEventInit{coalescedEvents?:PointerEvent[];height?:number;isPrimary?:boolean;pointerId?:number;pointerType?:string;predictedEvents?:PointerEvent[];pressure?:number;tangentialPressure?:number;tiltX?:number;tiltY?:number;twist?:number;width?:number;}interface PopStateEventInit extends EventInit{state?:any;}interface PositionOptions{enableHighAccuracy?:boolean;maximumAge?:number;timeout?:number;}interface ProgressEventInit extends EventInit{lengthComputable?:boolean;loaded?:number;total?:number;}interface PromiseRejectionEventInit extends EventInit{promise:Promise;reason?:any;}interface PropertyIndexedKeyframes{composite?:CompositeOperationOrAuto|CompositeOperationOrAuto[];easing?:string|string[];offset?:number|(number|null)[];[property:string]:string|string[]|number|null|(number|null)[]|undefined;}interface PublicKeyCredentialCreationOptions{attestation?:AttestationConveyancePreference;authenticatorSelection?:AuthenticatorSelectionCriteria;challenge:BufferSource;excludeCredentials?:PublicKeyCredentialDescriptor[];extensions?:AuthenticationExtensionsClientInputs;pubKeyCredParams:PublicKeyCredentialParameters[];rp:PublicKeyCredentialRpEntity;timeout?:number;user:PublicKeyCredentialUserEntity;}interface PublicKeyCredentialDescriptor{id:BufferSource;transports?:AuthenticatorTransport[];type:PublicKeyCredentialType;}interface PublicKeyCredentialEntity{name:string;}interface PublicKeyCredentialParameters{alg:COSEAlgorithmIdentifier;type:PublicKeyCredentialType;}interface PublicKeyCredentialRequestOptions{allowCredentials?:PublicKeyCredentialDescriptor[];challenge:BufferSource;extensions?:AuthenticationExtensionsClientInputs;rpId?:string;timeout?:number;userVerification?:UserVerificationRequirement;}interface PublicKeyCredentialRpEntity extends PublicKeyCredentialEntity{id?:string;}interface PublicKeyCredentialUserEntity extends PublicKeyCredentialEntity{displayName:string;id:BufferSource;}interface PushSubscriptionJSON{endpoint?:string;expirationTime?:EpochTimeStamp|null;keys?:Record;}interface PushSubscriptionOptionsInit{applicationServerKey?:BufferSource|string|null;userVisibleOnly?:boolean;}interface QueuingStrategy{highWaterMark?:number;size?:QueuingStrategySize;}interface QueuingStrategyInit{highWaterMark:number;}interface RTCAnswerOptions extends RTCOfferAnswerOptions{}interface RTCCertificateExpiration{expires?:number;}interface RTCConfiguration{bundlePolicy?:RTCBundlePolicy;certificates?:RTCCertificate[];iceCandidatePoolSize?:number;iceServers?:RTCIceServer[];iceTransportPolicy?:RTCIceTransportPolicy;rtcpMuxPolicy?:RTCRtcpMuxPolicy;}interface RTCDTMFToneChangeEventInit extends EventInit{tone?:string;}interface RTCDataChannelEventInit extends EventInit{channel:RTCDataChannel;}interface RTCDataChannelInit{id?:number;maxPacketLifeTime?:number;maxRetransmits?:number;negotiated?:boolean;ordered?:boolean;protocol?:string;}interface RTCDtlsFingerprint{algorithm?:string;value?:string;}interface RTCEncodedAudioFrameMetadata{contributingSources?:number[];synchronizationSource?:number;}interface RTCEncodedVideoFrameMetadata{contributingSources?:number[];dependencies?:number[];frameId?:number;height?:number;spatialIndex?:number;synchronizationSource?:number;temporalIndex?:number;width?:number;}interface RTCErrorEventInit extends EventInit{error:RTCError;}interface RTCErrorInit{errorDetail:RTCErrorDetailType;httpRequestStatusCode?:number;receivedAlert?:number;sctpCauseCode?:number;sdpLineNumber?:number;sentAlert?:number;}interface RTCIceCandidateInit{candidate?:string;sdpMLineIndex?:number|null;sdpMid?:string|null;usernameFragment?:string|null;}interface RTCIceCandidatePairStats extends RTCStats{availableIncomingBitrate?:number;availableOutgoingBitrate?:number;bytesReceived?:number;bytesSent?:number;currentRoundTripTime?:number;lastPacketReceivedTimestamp?:DOMHighResTimeStamp;lastPacketSentTimestamp?:DOMHighResTimeStamp;localCandidateId:string;nominated?:boolean;remoteCandidateId:string;requestsReceived?:number;requestsSent?:number;responsesReceived?:number;responsesSent?:number;state:RTCStatsIceCandidatePairState;totalRoundTripTime?:number;transportId:string;}interface RTCIceServer{credential?:string;urls:string|string[];username?:string;}interface RTCInboundRtpStreamStats extends RTCReceivedRtpStreamStats{audioLevel?:number;bytesReceived?:number;concealedSamples?:number;concealmentEvents?:number;decoderImplementation?:string;estimatedPlayoutTimestamp?:DOMHighResTimeStamp;fecPacketsDiscarded?:number;fecPacketsReceived?:number;firCount?:number;frameHeight?:number;frameWidth?:number;framesDecoded?:number;framesDropped?:number;framesPerSecond?:number;framesReceived?:number;headerBytesReceived?:number;insertedSamplesForDeceleration?:number;jitterBufferDelay?:number;jitterBufferEmittedCount?:number;keyFramesDecoded?:number;kind:string;lastPacketReceivedTimestamp?:DOMHighResTimeStamp;nackCount?:number;packetsDiscarded?:number;pliCount?:number;qpSum?:number;remoteId?:string;removedSamplesForAcceleration?:number;silentConcealedSamples?:number;totalAudioEnergy?:number;totalDecodeTime?:number;totalInterFrameDelay?:number;totalProcessingDelay?:number;totalSamplesDuration?:number;totalSamplesReceived?:number;totalSquaredInterFrameDelay?:number;}interface RTCLocalSessionDescriptionInit{sdp?:string;type?:RTCSdpType;}interface RTCOfferAnswerOptions{}interface RTCOfferOptions extends RTCOfferAnswerOptions{iceRestart?:boolean;offerToReceiveAudio?:boolean;offerToReceiveVideo?:boolean;}interface RTCOutboundRtpStreamStats extends RTCSentRtpStreamStats{firCount?:number;frameHeight?:number;frameWidth?:number;framesEncoded?:number;framesPerSecond?:number;framesSent?:number;headerBytesSent?:number;hugeFramesSent?:number;keyFramesEncoded?:number;mediaSourceId?:string;nackCount?:number;pliCount?:number;qpSum?:number;qualityLimitationResolutionChanges?:number;remoteId?:string;retransmittedBytesSent?:number;retransmittedPacketsSent?:number;rid?:string;targetBitrate?:number;totalEncodeTime?:number;totalEncodedBytesTarget?:number;totalPacketSendDelay?:number;}interface RTCPeerConnectionIceErrorEventInit extends EventInit{address?:string|null;errorCode:number;errorText?:string;port?:number|null;url?:string;}interface RTCPeerConnectionIceEventInit extends EventInit{candidate?:RTCIceCandidate|null;url?:string|null;}interface RTCReceivedRtpStreamStats extends RTCRtpStreamStats{jitter?:number;packetsLost?:number;packetsReceived?:number;}interface RTCRtcpParameters{cname?:string;reducedSize?:boolean;}interface RTCRtpCapabilities{codecs:RTCRtpCodecCapability[];headerExtensions:RTCRtpHeaderExtensionCapability[];}interface RTCRtpCodecCapability{channels?:number;clockRate:number;mimeType:string;sdpFmtpLine?:string;}interface RTCRtpCodecParameters{channels?:number;clockRate:number;mimeType:string;payloadType:number;sdpFmtpLine?:string;}interface RTCRtpCodingParameters{rid?:string;}interface RTCRtpContributingSource{audioLevel?:number;rtpTimestamp:number;source:number;timestamp:DOMHighResTimeStamp;}interface RTCRtpEncodingParameters extends RTCRtpCodingParameters{active?:boolean;maxBitrate?:number;maxFramerate?:number;networkPriority?:RTCPriorityType;priority?:RTCPriorityType;scaleResolutionDownBy?:number;}interface RTCRtpHeaderExtensionCapability{uri?:string;}interface RTCRtpHeaderExtensionParameters{encrypted?:boolean;id:number;uri:string;}interface RTCRtpParameters{codecs:RTCRtpCodecParameters[];headerExtensions:RTCRtpHeaderExtensionParameters[];rtcp:RTCRtcpParameters;}interface RTCRtpReceiveParameters extends RTCRtpParameters{}interface RTCRtpSendParameters extends RTCRtpParameters{degradationPreference?:RTCDegradationPreference;encodings:RTCRtpEncodingParameters[];transactionId:string;}interface RTCRtpStreamStats extends RTCStats{codecId?:string;kind:string;ssrc:number;transportId?:string;}interface RTCRtpSynchronizationSource extends RTCRtpContributingSource{}interface RTCRtpTransceiverInit{direction?:RTCRtpTransceiverDirection;sendEncodings?:RTCRtpEncodingParameters[];streams?:MediaStream[];}interface RTCSentRtpStreamStats extends RTCRtpStreamStats{bytesSent?:number;packetsSent?:number;}interface RTCSessionDescriptionInit{sdp?:string;type:RTCSdpType;}interface RTCStats{id:string;timestamp:DOMHighResTimeStamp;type:RTCStatsType;}interface RTCTrackEventInit extends EventInit{receiver:RTCRtpReceiver;streams?:MediaStream[];track:MediaStreamTrack;transceiver:RTCRtpTransceiver;}interface RTCTransportStats extends RTCStats{bytesReceived?:number;bytesSent?:number;dtlsCipher?:string;dtlsState:RTCDtlsTransportState;localCertificateId?:string;remoteCertificateId?:string;selectedCandidatePairId?:string;srtpCipher?:string;tlsVersion?:string;}interface ReadableStreamGetReaderOptions{mode?:ReadableStreamReaderMode;}interface ReadableStreamReadDoneResult{done:true;value?:T;}interface ReadableStreamReadValueResult{done:false;value:T;}interface ReadableWritablePair{readable:ReadableStream;writable:WritableStream;}interface RegistrationOptions{scope?:string;type?:WorkerType;updateViaCache?:ServiceWorkerUpdateViaCache;}interface RequestInit{body?:BodyInit|null;cache?:RequestCache;credentials?:RequestCredentials;headers?:HeadersInit;integrity?:string;keepalive?:boolean;method?:string;mode?:RequestMode;redirect?:RequestRedirect;referrer?:string;referrerPolicy?:ReferrerPolicy;signal?:AbortSignal|null;window?:null;}interface ResizeObserverOptions{box?:ResizeObserverBoxOptions;}interface ResponseInit{headers?:HeadersInit;status?:number;statusText?:string;}interface RsaHashedImportParams extends Algorithm{hash:HashAlgorithmIdentifier;}interface RsaHashedKeyAlgorithm extends RsaKeyAlgorithm{hash:KeyAlgorithm;}interface RsaHashedKeyGenParams extends RsaKeyGenParams{hash:HashAlgorithmIdentifier;}interface RsaKeyAlgorithm extends KeyAlgorithm{modulusLength:number;publicExponent:BigInteger;}interface RsaKeyGenParams extends Algorithm{modulusLength:number;publicExponent:BigInteger;}interface RsaOaepParams extends Algorithm{label?:BufferSource;}interface RsaOtherPrimesInfo{d?:string;r?:string;t?:string;}interface RsaPssParams extends Algorithm{saltLength:number;}interface SVGBoundingBoxOptions{clipped?:boolean;fill?:boolean;markers?:boolean;stroke?:boolean;}interface ScrollIntoViewOptions extends ScrollOptions{block?:ScrollLogicalPosition;inline?:ScrollLogicalPosition;}interface ScrollOptions{behavior?:ScrollBehavior;}interface ScrollToOptions extends ScrollOptions{left?:number;top?:number;}interface SecurityPolicyViolationEventInit extends EventInit{blockedURI?:string;columnNumber?:number;disposition:SecurityPolicyViolationEventDisposition;documentURI:string;effectiveDirective:string;lineNumber?:number;originalPolicy:string;referrer?:string;sample?:string;sourceFile?:string;statusCode:number;violatedDirective:string;}interface ShadowRootInit{delegatesFocus?:boolean;mode:ShadowRootMode;slotAssignment?:SlotAssignmentMode;}interface ShareData{files?:File[];text?:string;title?:string;url?:string;}interface SpeechSynthesisErrorEventInit extends SpeechSynthesisEventInit{error:SpeechSynthesisErrorCode;}interface SpeechSynthesisEventInit extends EventInit{charIndex?:number;charLength?:number;elapsedTime?:number;name?:string;utterance:SpeechSynthesisUtterance;}interface StaticRangeInit{endContainer:Node;endOffset:number;startContainer:Node;startOffset:number;}interface StereoPannerOptions extends AudioNodeOptions{pan?:number;}interface StorageEstimate{quota?:number;usage?:number;}interface StorageEventInit extends EventInit{key?:string|null;newValue?:string|null;oldValue?:string|null;storageArea?:Storage|null;url?:string;}interface StreamPipeOptions{preventAbort?:boolean;preventCancel?:boolean;preventClose?:boolean;signal?:AbortSignal;}interface StructuredSerializeOptions{transfer?:Transferable[];}interface SubmitEventInit extends EventInit{submitter?:HTMLElement|null;}interface TextDecodeOptions{stream?:boolean;}interface TextDecoderOptions{fatal?:boolean;ignoreBOM?:boolean;}interface TextEncoderEncodeIntoResult{read?:number;written?:number;}interface TouchEventInit extends EventModifierInit{changedTouches?:Touch[];targetTouches?:Touch[];touches?:Touch[];}interface TouchInit{altitudeAngle?:number;azimuthAngle?:number;clientX?:number;clientY?:number;force?:number;identifier:number;pageX?:number;pageY?:number;radiusX?:number;radiusY?:number;rotationAngle?:number;screenX?:number;screenY?:number;target:EventTarget;touchType?:TouchType;}interface TrackEventInit extends EventInit{track?:TextTrack|null;}interface Transformer{flush?:TransformerFlushCallback;readableType?:undefined;start?:TransformerStartCallback;transform?:TransformerTransformCallback;writableType?:undefined;}interface TransitionEventInit extends EventInit{elapsedTime?:number;propertyName?:string;pseudoElement?:string;}interface UIEventInit extends EventInit{detail?:number;view?:Window|null;which?:number;}interface ULongRange{max?:number;min?:number;}interface UnderlyingByteSource{autoAllocateChunkSize?:number;cancel?:UnderlyingSourceCancelCallback;pull?:(controller:ReadableByteStreamController)=>void|PromiseLike;start?:(controller:ReadableByteStreamController)=>any;type:\"bytes\";}interface UnderlyingDefaultSource{cancel?:UnderlyingSourceCancelCallback;pull?:(controller:ReadableStreamDefaultController)=>void|PromiseLike;start?:(controller:ReadableStreamDefaultController)=>any;type?:undefined;}interface UnderlyingSink{abort?:UnderlyingSinkAbortCallback;close?:UnderlyingSinkCloseCallback;start?:UnderlyingSinkStartCallback;type?:undefined;write?:UnderlyingSinkWriteCallback;}interface UnderlyingSource{autoAllocateChunkSize?:number;cancel?:UnderlyingSourceCancelCallback;pull?:UnderlyingSourcePullCallback;start?:UnderlyingSourceStartCallback;type?:ReadableStreamType;}interface ValidityStateFlags{badInput?:boolean;customError?:boolean;patternMismatch?:boolean;rangeOverflow?:boolean;rangeUnderflow?:boolean;stepMismatch?:boolean;tooLong?:boolean;tooShort?:boolean;typeMismatch?:boolean;valueMissing?:boolean;}interface VideoColorSpaceInit{fullRange?:boolean|null;matrix?:VideoMatrixCoefficients|null;primaries?:VideoColorPrimaries|null;transfer?:VideoTransferCharacteristics|null;}interface VideoConfiguration{bitrate:number;colorGamut?:ColorGamut;contentType:string;framerate:number;hdrMetadataType?:HdrMetadataType;height:number;scalabilityMode?:string;transferFunction?:TransferFunction;width:number;}interface VideoFrameCallbackMetadata{captureTime?:DOMHighResTimeStamp;expectedDisplayTime:DOMHighResTimeStamp;height:number;mediaTime:number;presentationTime:DOMHighResTimeStamp;presentedFrames:number;processingDuration?:number;receiveTime?:DOMHighResTimeStamp;rtpTimestamp?:number;width:number;}interface WaveShaperOptions extends AudioNodeOptions{curve?:number[]|Float32Array;oversample?:OverSampleType;}interface WebGLContextAttributes{alpha?:boolean;antialias?:boolean;depth?:boolean;desynchronized?:boolean;failIfMajorPerformanceCaveat?:boolean;powerPreference?:WebGLPowerPreference;premultipliedAlpha?:boolean;preserveDrawingBuffer?:boolean;stencil?:boolean;}interface WebGLContextEventInit extends EventInit{statusMessage?:string;}interface WheelEventInit extends MouseEventInit{deltaMode?:number;deltaX?:number;deltaY?:number;deltaZ?:number;}interface WindowPostMessageOptions extends StructuredSerializeOptions{targetOrigin?:string;}interface WorkerOptions{credentials?:RequestCredentials;name?:string;type?:WorkerType;}interface WorkletOptions{credentials?:RequestCredentials;}type NodeFilter=((node:Node)=>number)|{acceptNode(node:Node):number;};declare var NodeFilter:{readonly FILTER_ACCEPT:1;readonly FILTER_REJECT:2;readonly FILTER_SKIP:3;readonly SHOW_ALL:0xFFFFFFFF;readonly SHOW_ELEMENT:0x1;readonly SHOW_ATTRIBUTE:0x2;readonly SHOW_TEXT:0x4;readonly SHOW_CDATA_SECTION:0x8;readonly SHOW_ENTITY_REFERENCE:0x10;readonly SHOW_ENTITY:0x20;readonly SHOW_PROCESSING_INSTRUCTION:0x40;readonly SHOW_COMMENT:0x80;readonly SHOW_DOCUMENT:0x100;readonly SHOW_DOCUMENT_TYPE:0x200;readonly SHOW_DOCUMENT_FRAGMENT:0x400;readonly SHOW_NOTATION:0x800;};type XPathNSResolver=((prefix:string|null)=>string|null)|{lookupNamespaceURI(prefix:string|null):string|null;};interface ANGLE_instanced_arrays{drawArraysInstancedANGLE(mode:GLenum,first:GLint,count:GLsizei,primcount:GLsizei):void;drawElementsInstancedANGLE(mode:GLenum,count:GLsizei,type:GLenum,offset:GLintptr,primcount:GLsizei):void;vertexAttribDivisorANGLE(index:GLuint,divisor:GLuint):void;readonly VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE:0x88FE;}interface ARIAMixin{ariaAtomic:string|null;ariaAutoComplete:string|null;ariaBusy:string|null;ariaChecked:string|null;ariaColCount:string|null;ariaColIndex:string|null;ariaColSpan:string|null;ariaCurrent:string|null;ariaDisabled:string|null;ariaExpanded:string|null;ariaHasPopup:string|null;ariaHidden:string|null;ariaInvalid:string|null;ariaKeyShortcuts:string|null;ariaLabel:string|null;ariaLevel:string|null;ariaLive:string|null;ariaModal:string|null;ariaMultiLine:string|null;ariaMultiSelectable:string|null;ariaOrientation:string|null;ariaPlaceholder:string|null;ariaPosInSet:string|null;ariaPressed:string|null;ariaReadOnly:string|null;ariaRequired:string|null;ariaRoleDescription:string|null;ariaRowCount:string|null;ariaRowIndex:string|null;ariaRowSpan:string|null;ariaSelected:string|null;ariaSetSize:string|null;ariaSort:string|null;ariaValueMax:string|null;ariaValueMin:string|null;ariaValueNow:string|null;ariaValueText:string|null;role:string|null;}interface AbortController{readonly signal:AbortSignal;abort(reason?:any):void;}declare var AbortController:{prototype:AbortController;new():AbortController;};interface AbortSignalEventMap{\"abort\":Event;}interface AbortSignal extends EventTarget{readonly aborted:boolean;onabort:((this:AbortSignal,ev:Event)=>any)|null;readonly reason:any;throwIfAborted():void;addEventListener(type:K,listener:(this:AbortSignal,ev:AbortSignalEventMap[K])=>any,options?:boolean|AddEventListenerOptions):void;addEventListener(type:string,listener:EventListenerOrEventListenerObject,options?:boolean|AddEventListenerOptions):void;removeEventListener(type:K,listener:(this:AbortSignal,ev:AbortSignalEventMap[K])=>any,options?:boolean|EventListenerOptions):void;removeEventListener(type:string,listener:EventListenerOrEventListenerObject,options?:boolean|EventListenerOptions):void;}declare var AbortSignal:{prototype:AbortSignal;new():AbortSignal;abort(reason?:any):AbortSignal;timeout(milliseconds:number):AbortSignal;};interface AbstractRange{readonly collapsed:boolean;readonly endContainer:Node;readonly endOffset:number;readonly startContainer:Node;readonly startOffset:number;}declare var AbstractRange:{prototype:AbstractRange;new():AbstractRange;};interface AbstractWorkerEventMap{\"error\":ErrorEvent;}interface AbstractWorker{onerror:((this:AbstractWorker,ev:ErrorEvent)=>any)|null;addEventListener(type:K,listener:(this:AbstractWorker,ev:AbstractWorkerEventMap[K])=>any,options?:boolean|AddEventListenerOptions):void;addEventListener(type:string,listener:EventListenerOrEventListenerObject,options?:boolean|AddEventListenerOptions):void;removeEventListener(type:K,listener:(this:AbstractWorker,ev:AbstractWorkerEventMap[K])=>any,options?:boolean|EventListenerOptions):void;removeEventListener(type:string,listener:EventListenerOrEventListenerObject,options?:boolean|EventListenerOptions):void;}interface AnalyserNode extends AudioNode{fftSize:number;readonly frequencyBinCount:number;maxDecibels:number;minDecibels:number;smoothingTimeConstant:number;getByteFrequencyData(array:Uint8Array):void;getByteTimeDomainData(array:Uint8Array):void;getFloatFrequencyData(array:Float32Array):void;getFloatTimeDomainData(array:Float32Array):void;}declare var AnalyserNode:{prototype:AnalyserNode;new(context:BaseAudioContext,options?:AnalyserOptions):AnalyserNode;};interface Animatable{animate(keyframes:Keyframe[]|PropertyIndexedKeyframes|null,options?:number|KeyframeAnimationOptions):Animation;getAnimations(options?:GetAnimationsOptions):Animation[];}interface AnimationEventMap{\"cancel\":AnimationPlaybackEvent;\"finish\":AnimationPlaybackEvent;\"remove\":Event;}interface Animation extends EventTarget{currentTime:CSSNumberish|null;effect:AnimationEffect|null;readonly finished:Promise;id:string;oncancel:((this:Animation,ev:AnimationPlaybackEvent)=>any)|null;onfinish:((this:Animation,ev:AnimationPlaybackEvent)=>any)|null;onremove:((this:Animation,ev:Event)=>any)|null;readonly pending:boolean;readonly playState:AnimationPlayState;playbackRate:number;readonly ready:Promise;readonly replaceState:AnimationReplaceState;startTime:CSSNumberish|null;timeline:AnimationTimeline|null;cancel():void;commitStyles():void;finish():void;pause():void;persist():void;play():void;reverse():void;updatePlaybackRate(playbackRate:number):void;addEventListener(type:K,listener:(this:Animation,ev:AnimationEventMap[K])=>any,options?:boolean|AddEventListenerOptions):void;addEventListener(type:string,listener:EventListenerOrEventListenerObject,options?:boolean|AddEventListenerOptions):void;removeEventListener(type:K,listener:(this:Animation,ev:AnimationEventMap[K])=>any,options?:boolean|EventListenerOptions):void;removeEventListener(type:string,listener:EventListenerOrEventListenerObject,options?:boolean|EventListenerOptions):void;}declare var Animation:{prototype:Animation;new(effect?:AnimationEffect|null,timeline?:AnimationTimeline|null):Animation;};interface AnimationEffect{getComputedTiming():ComputedEffectTiming;getTiming():EffectTiming;updateTiming(timing?:OptionalEffectTiming):void;}declare var AnimationEffect:{prototype:AnimationEffect;new():AnimationEffect;};interface AnimationEvent extends Event{readonly animationName:string;readonly elapsedTime:number;readonly pseudoElement:string;}declare var AnimationEvent:{prototype:AnimationEvent;new(type:string,animationEventInitDict?:AnimationEventInit):AnimationEvent;};interface AnimationFrameProvider{cancelAnimationFrame(handle:number):void;requestAnimationFrame(callback:FrameRequestCallback):number;}interface AnimationPlaybackEvent extends Event{readonly currentTime:CSSNumberish|null;readonly timelineTime:CSSNumberish|null;}declare var AnimationPlaybackEvent:{prototype:AnimationPlaybackEvent;new(type:string,eventInitDict?:AnimationPlaybackEventInit):AnimationPlaybackEvent;};interface AnimationTimeline{readonly currentTime:number|null;}declare var AnimationTimeline:{prototype:AnimationTimeline;new():AnimationTimeline;};interface Attr extends Node{readonly localName:string;readonly name:string;readonly namespaceURI:string|null;readonly ownerDocument:Document;readonly ownerElement:Element|null;readonly prefix:string|null;readonly specified:boolean;value:string;}declare var Attr:{prototype:Attr;new():Attr;};interface AudioBuffer{readonly duration:number;readonly length:number;readonly numberOfChannels:number;readonly sampleRate:number;copyFromChannel(destination:Float32Array,channelNumber:number,bufferOffset?:number):void;copyToChannel(source:Float32Array,channelNumber:number,bufferOffset?:number):void;getChannelData(channel:number):Float32Array;}declare var AudioBuffer:{prototype:AudioBuffer;new(options:AudioBufferOptions):AudioBuffer;};interface AudioBufferSourceNode extends AudioScheduledSourceNode{buffer:AudioBuffer|null;readonly detune:AudioParam;loop:boolean;loopEnd:number;loopStart:number;readonly playbackRate:AudioParam;start(when?:number,offset?:number,duration?:number):void;addEventListener(type:K,listener:(this:AudioBufferSourceNode,ev:AudioScheduledSourceNodeEventMap[K])=>any,options?:boolean|AddEventListenerOptions):void;addEventListener(type:string,listener:EventListenerOrEventListenerObject,options?:boolean|AddEventListenerOptions):void;removeEventListener(type:K,listener:(this:AudioBufferSourceNode,ev:AudioScheduledSourceNodeEventMap[K])=>any,options?:boolean|EventListenerOptions):void;removeEventListener(type:string,listener:EventListenerOrEventListenerObject,options?:boolean|EventListenerOptions):void;}declare var AudioBufferSourceNode:{prototype:AudioBufferSourceNode;new(context:BaseAudioContext,options?:AudioBufferSourceOptions):AudioBufferSourceNode;};interface AudioContext extends BaseAudioContext{readonly baseLatency:number;readonly outputLatency:number;close():Promise;createMediaElementSource(mediaElement:HTMLMediaElement):MediaElementAudioSourceNode;createMediaStreamDestination():MediaStreamAudioDestinationNode;createMediaStreamSource(mediaStream:MediaStream):MediaStreamAudioSourceNode;getOutputTimestamp():AudioTimestamp;resume():Promise;suspend():Promise;addEventListener(type:K,listener:(this:AudioContext,ev:BaseAudioContextEventMap[K])=>any,options?:boolean|AddEventListenerOptions):void;addEventListener(type:string,listener:EventListenerOrEventListenerObject,options?:boolean|AddEventListenerOptions):void;removeEventListener(type:K,listener:(this:AudioContext,ev:BaseAudioContextEventMap[K])=>any,options?:boolean|EventListenerOptions):void;removeEventListener(type:string,listener:EventListenerOrEventListenerObject,options?:boolean|EventListenerOptions):void;}declare var AudioContext:{prototype:AudioContext;new(contextOptions?:AudioContextOptions):AudioContext;};interface AudioDestinationNode extends AudioNode{readonly maxChannelCount:number;}declare var AudioDestinationNode:{prototype:AudioDestinationNode;new():AudioDestinationNode;};interface AudioListener{readonly forwardX:AudioParam;readonly forwardY:AudioParam;readonly forwardZ:AudioParam;readonly positionX:AudioParam;readonly positionY:AudioParam;readonly positionZ:AudioParam;readonly upX:AudioParam;readonly upY:AudioParam;readonly upZ:AudioParam;setOrientation(x:number,y:number,z:number,xUp:number,yUp:number,zUp:number):void;setPosition(x:number,y:number,z:number):void;}declare var AudioListener:{prototype:AudioListener;new():AudioListener;};interface AudioNode extends EventTarget{channelCount:number;channelCountMode:ChannelCountMode;channelInterpretation:ChannelInterpretation;readonly context:BaseAudioContext;readonly numberOfInputs:number;readonly numberOfOutputs:number;connect(destinationNode:AudioNode,output?:number,input?:number):AudioNode;connect(destinationParam:AudioParam,output?:number):void;disconnect():void;disconnect(output:number):void;disconnect(destinationNode:AudioNode):void;disconnect(destinationNode:AudioNode,output:number):void;disconnect(destinationNode:AudioNode,output:number,input:number):void;disconnect(destinationParam:AudioParam):void;disconnect(destinationParam:AudioParam,output:number):void;}declare var AudioNode:{prototype:AudioNode;new():AudioNode;};interface AudioParam{automationRate:AutomationRate;readonly defaultValue:number;readonly maxValue:number;readonly minValue:number;value:number;cancelAndHoldAtTime(cancelTime:number):AudioParam;cancelScheduledValues(cancelTime:number):AudioParam;exponentialRampToValueAtTime(value:number,endTime:number):AudioParam;linearRampToValueAtTime(value:number,endTime:number):AudioParam;setTargetAtTime(target:number,startTime:number,timeConstant:number):AudioParam;setValueAtTime(value:number,startTime:number):AudioParam;setValueCurveAtTime(values:number[]|Float32Array,startTime:number,duration:number):AudioParam;}declare var AudioParam:{prototype:AudioParam;new():AudioParam;};interface AudioParamMap{forEach(callbackfn:(value:AudioParam,key:string,parent:AudioParamMap)=>void,thisArg?:any):void;}declare var AudioParamMap:{prototype:AudioParamMap;new():AudioParamMap;};interface AudioProcessingEvent extends Event{readonly inputBuffer:AudioBuffer;readonly outputBuffer:AudioBuffer;readonly playbackTime:number;}declare var AudioProcessingEvent:{prototype:AudioProcessingEvent;new(type:string,eventInitDict:AudioProcessingEventInit):AudioProcessingEvent;};interface AudioScheduledSourceNodeEventMap{\"ended\":Event;}interface AudioScheduledSourceNode extends AudioNode{onended:((this:AudioScheduledSourceNode,ev:Event)=>any)|null;start(when?:number):void;stop(when?:number):void;addEventListener(type:K,listener:(this:AudioScheduledSourceNode,ev:AudioScheduledSourceNodeEventMap[K])=>any,options?:boolean|AddEventListenerOptions):void;addEventListener(type:string,listener:EventListenerOrEventListenerObject,options?:boolean|AddEventListenerOptions):void;removeEventListener(type:K,listener:(this:AudioScheduledSourceNode,ev:AudioScheduledSourceNodeEventMap[K])=>any,options?:boolean|EventListenerOptions):void;removeEventListener(type:string,listener:EventListenerOrEventListenerObject,options?:boolean|EventListenerOptions):void;}declare var AudioScheduledSourceNode:{prototype:AudioScheduledSourceNode;new():AudioScheduledSourceNode;};interface AudioWorklet extends Worklet{}declare var AudioWorklet:{prototype:AudioWorklet;new():AudioWorklet;};interface AudioWorkletNodeEventMap{\"processorerror\":Event;}interface AudioWorkletNode extends AudioNode{onprocessorerror:((this:AudioWorkletNode,ev:Event)=>any)|null;readonly parameters:AudioParamMap;readonly port:MessagePort;addEventListener(type:K,listener:(this:AudioWorkletNode,ev:AudioWorkletNodeEventMap[K])=>any,options?:boolean|AddEventListenerOptions):void;addEventListener(type:string,listener:EventListenerOrEventListenerObject,options?:boolean|AddEventListenerOptions):void;removeEventListener(type:K,listener:(this:AudioWorkletNode,ev:AudioWorkletNodeEventMap[K])=>any,options?:boolean|EventListenerOptions):void;removeEventListener(type:string,listener:EventListenerOrEventListenerObject,options?:boolean|EventListenerOptions):void;}declare var AudioWorkletNode:{prototype:AudioWorkletNode;new(context:BaseAudioContext,name:string,options?:AudioWorkletNodeOptions):AudioWorkletNode;};interface AuthenticatorAssertionResponse extends AuthenticatorResponse{readonly authenticatorData:ArrayBuffer;readonly signature:ArrayBuffer;readonly userHandle:ArrayBuffer|null;}declare var AuthenticatorAssertionResponse:{prototype:AuthenticatorAssertionResponse;new():AuthenticatorAssertionResponse;};interface AuthenticatorAttestationResponse extends AuthenticatorResponse{readonly attestationObject:ArrayBuffer;getAuthenticatorData():ArrayBuffer;getPublicKey():ArrayBuffer|null;getPublicKeyAlgorithm():COSEAlgorithmIdentifier;getTransports():string[];}declare var AuthenticatorAttestationResponse:{prototype:AuthenticatorAttestationResponse;new():AuthenticatorAttestationResponse;};interface AuthenticatorResponse{readonly clientDataJSON:ArrayBuffer;}declare var AuthenticatorResponse:{prototype:AuthenticatorResponse;new():AuthenticatorResponse;};interface BarProp{readonly visible:boolean;}declare var BarProp:{prototype:BarProp;new():BarProp;};interface BaseAudioContextEventMap{\"statechange\":Event;}interface BaseAudioContext extends EventTarget{readonly audioWorklet:AudioWorklet;readonly currentTime:number;readonly destination:AudioDestinationNode;readonly listener:AudioListener;onstatechange:((this:BaseAudioContext,ev:Event)=>any)|null;readonly sampleRate:number;readonly state:AudioContextState;createAnalyser():AnalyserNode;createBiquadFilter():BiquadFilterNode;createBuffer(numberOfChannels:number,length:number,sampleRate:number):AudioBuffer;createBufferSource():AudioBufferSourceNode;createChannelMerger(numberOfInputs?:number):ChannelMergerNode;createChannelSplitter(numberOfOutputs?:number):ChannelSplitterNode;createConstantSource():ConstantSourceNode;createConvolver():ConvolverNode;createDelay(maxDelayTime?:number):DelayNode;createDynamicsCompressor():DynamicsCompressorNode;createGain():GainNode;createIIRFilter(feedforward:number[],feedback:number[]):IIRFilterNode;createOscillator():OscillatorNode;createPanner():PannerNode;createPeriodicWave(real:number[]|Float32Array,imag:number[]|Float32Array,constraints?:PeriodicWaveConstraints):PeriodicWave;createScriptProcessor(bufferSize?:number,numberOfInputChannels?:number,numberOfOutputChannels?:number):ScriptProcessorNode;createStereoPanner():StereoPannerNode;createWaveShaper():WaveShaperNode;decodeAudioData(audioData:ArrayBuffer,successCallback?:DecodeSuccessCallback|null,errorCallback?:DecodeErrorCallback|null):Promise;addEventListener(type:K,listener:(this:BaseAudioContext,ev:BaseAudioContextEventMap[K])=>any,options?:boolean|AddEventListenerOptions):void;addEventListener(type:string,listener:EventListenerOrEventListenerObject,options?:boolean|AddEventListenerOptions):void;removeEventListener(type:K,listener:(this:BaseAudioContext,ev:BaseAudioContextEventMap[K])=>any,options?:boolean|EventListenerOptions):void;removeEventListener(type:string,listener:EventListenerOrEventListenerObject,options?:boolean|EventListenerOptions):void;}declare var BaseAudioContext:{prototype:BaseAudioContext;new():BaseAudioContext;};interface BeforeUnloadEvent extends Event{returnValue:any;}declare var BeforeUnloadEvent:{prototype:BeforeUnloadEvent;new():BeforeUnloadEvent;};interface BiquadFilterNode extends AudioNode{readonly Q:AudioParam;readonly detune:AudioParam;readonly frequency:AudioParam;readonly gain:AudioParam;type:BiquadFilterType;getFrequencyResponse(frequencyHz:Float32Array,magResponse:Float32Array,phaseResponse:Float32Array):void;}declare var BiquadFilterNode:{prototype:BiquadFilterNode;new(context:BaseAudioContext,options?:BiquadFilterOptions):BiquadFilterNode;};interface Blob{readonly size:number;readonly type:string;arrayBuffer():Promise;slice(start?:number,end?:number,contentType?:string):Blob;stream():ReadableStream;text():Promise;}declare var Blob:{prototype:Blob;new(blobParts?:BlobPart[],options?:BlobPropertyBag):Blob;};interface BlobEvent extends Event{readonly data:Blob;readonly timecode:DOMHighResTimeStamp;}declare var BlobEvent:{prototype:BlobEvent;new(type:string,eventInitDict:BlobEventInit):BlobEvent;};interface Body{readonly body:ReadableStream|null;readonly bodyUsed:boolean;arrayBuffer():Promise;blob():Promise;formData():Promise;json():Promise;text():Promise;}interface BroadcastChannelEventMap{\"message\":MessageEvent;\"messageerror\":MessageEvent;}interface BroadcastChannel extends EventTarget{readonly name:string;onmessage:((this:BroadcastChannel,ev:MessageEvent)=>any)|null;onmessageerror:((this:BroadcastChannel,ev:MessageEvent)=>any)|null;close():void;postMessage(message:any):void;addEventListener(type:K,listener:(this:BroadcastChannel,ev:BroadcastChannelEventMap[K])=>any,options?:boolean|AddEventListenerOptions):void;addEventListener(type:string,listener:EventListenerOrEventListenerObject,options?:boolean|AddEventListenerOptions):void;removeEventListener(type:K,listener:(this:BroadcastChannel,ev:BroadcastChannelEventMap[K])=>any,options?:boolean|EventListenerOptions):void;removeEventListener(type:string,listener:EventListenerOrEventListenerObject,options?:boolean|EventListenerOptions):void;}declare var BroadcastChannel:{prototype:BroadcastChannel;new(name:string):BroadcastChannel;};interface ByteLengthQueuingStrategy extends QueuingStrategy{readonly highWaterMark:number;readonly size:QueuingStrategySize;}declare var ByteLengthQueuingStrategy:{prototype:ByteLengthQueuingStrategy;new(init:QueuingStrategyInit):ByteLengthQueuingStrategy;};interface CDATASection extends Text{}declare var CDATASection:{prototype:CDATASection;new():CDATASection;};interface CSSAnimation extends Animation{readonly animationName:string;addEventListener(type:K,listener:(this:CSSAnimation,ev:AnimationEventMap[K])=>any,options?:boolean|AddEventListenerOptions):void;addEventListener(type:string,listener:EventListenerOrEventListenerObject,options?:boolean|AddEventListenerOptions):void;removeEventListener(type:K,listener:(this:CSSAnimation,ev:AnimationEventMap[K])=>any,options?:boolean|EventListenerOptions):void;removeEventListener(type:string,listener:EventListenerOrEventListenerObject,options?:boolean|EventListenerOptions):void;}declare var CSSAnimation:{prototype:CSSAnimation;new():CSSAnimation;};interface CSSConditionRule extends CSSGroupingRule{readonly conditionText:string;}declare var CSSConditionRule:{prototype:CSSConditionRule;new():CSSConditionRule;};interface CSSContainerRule extends CSSConditionRule{}declare var CSSContainerRule:{prototype:CSSContainerRule;new():CSSContainerRule;};interface CSSCounterStyleRule extends CSSRule{additiveSymbols:string;fallback:string;name:string;negative:string;pad:string;prefix:string;range:string;speakAs:string;suffix:string;symbols:string;system:string;}declare var CSSCounterStyleRule:{prototype:CSSCounterStyleRule;new():CSSCounterStyleRule;};interface CSSFontFaceRule extends CSSRule{readonly style:CSSStyleDeclaration;}declare var CSSFontFaceRule:{prototype:CSSFontFaceRule;new():CSSFontFaceRule;};interface CSSFontFeatureValuesRule extends CSSRule{fontFamily:string;}declare var CSSFontFeatureValuesRule:{prototype:CSSFontFeatureValuesRule;new():CSSFontFeatureValuesRule;};interface CSSFontPaletteValuesRule extends CSSRule{readonly basePalette:string;readonly fontFamily:string;readonly name:string;readonly overrideColors:string;}declare var CSSFontPaletteValuesRule:{prototype:CSSFontPaletteValuesRule;new():CSSFontPaletteValuesRule;};interface CSSGroupingRule extends CSSRule{readonly cssRules:CSSRuleList;deleteRule(index:number):void;insertRule(rule:string,index?:number):number;}declare var CSSGroupingRule:{prototype:CSSGroupingRule;new():CSSGroupingRule;};interface CSSImportRule extends CSSRule{readonly href:string;readonly layerName:string|null;readonly media:MediaList;readonly styleSheet:CSSStyleSheet;}declare var CSSImportRule:{prototype:CSSImportRule;new():CSSImportRule;};interface CSSKeyframeRule extends CSSRule{keyText:string;readonly style:CSSStyleDeclaration;}declare var CSSKeyframeRule:{prototype:CSSKeyframeRule;new():CSSKeyframeRule;};interface CSSKeyframesRule extends CSSRule{readonly cssRules:CSSRuleList;name:string;appendRule(rule:string):void;deleteRule(select:string):void;findRule(select:string):CSSKeyframeRule|null;[index:number]:CSSKeyframeRule;}declare var CSSKeyframesRule:{prototype:CSSKeyframesRule;new():CSSKeyframesRule;};interface CSSLayerBlockRule extends CSSGroupingRule{readonly name:string;}declare var CSSLayerBlockRule:{prototype:CSSLayerBlockRule;new():CSSLayerBlockRule;};interface CSSLayerStatementRule extends CSSRule{readonly nameList:ReadonlyArray;}declare var CSSLayerStatementRule:{prototype:CSSLayerStatementRule;new():CSSLayerStatementRule;};interface CSSMediaRule extends CSSConditionRule{readonly media:MediaList;}declare var CSSMediaRule:{prototype:CSSMediaRule;new():CSSMediaRule;};interface CSSNamespaceRule extends CSSRule{readonly namespaceURI:string;readonly prefix:string;}declare var CSSNamespaceRule:{prototype:CSSNamespaceRule;new():CSSNamespaceRule;};interface CSSPageRule extends CSSGroupingRule{selectorText:string;readonly style:CSSStyleDeclaration;}declare var CSSPageRule:{prototype:CSSPageRule;new():CSSPageRule;};interface CSSRule{cssText:string;readonly parentRule:CSSRule|null;readonly parentStyleSheet:CSSStyleSheet|null;readonly type:number;readonly STYLE_RULE:1;readonly CHARSET_RULE:2;readonly IMPORT_RULE:3;readonly MEDIA_RULE:4;readonly FONT_FACE_RULE:5;readonly PAGE_RULE:6;readonly NAMESPACE_RULE:10;readonly KEYFRAMES_RULE:7;readonly KEYFRAME_RULE:8;readonly SUPPORTS_RULE:12;}declare var CSSRule:{prototype:CSSRule;new():CSSRule;readonly STYLE_RULE:1;readonly CHARSET_RULE:2;readonly IMPORT_RULE:3;readonly MEDIA_RULE:4;readonly FONT_FACE_RULE:5;readonly PAGE_RULE:6;readonly NAMESPACE_RULE:10;readonly KEYFRAMES_RULE:7;readonly KEYFRAME_RULE:8;readonly SUPPORTS_RULE:12;};interface CSSRuleList{readonly length:number;item(index:number):CSSRule|null;[index:number]:CSSRule;}declare var CSSRuleList:{prototype:CSSRuleList;new():CSSRuleList;};interface CSSStyleDeclaration{accentColor:string;alignContent:string;alignItems:string;alignSelf:string;alignmentBaseline:string;all:string;animation:string;animationDelay:string;animationDirection:string;animationDuration:string;animationFillMode:string;animationIterationCount:string;animationName:string;animationPlayState:string;animationTimingFunction:string;appearance:string;aspectRatio:string;backdropFilter:string;backfaceVisibility:string;background:string;backgroundAttachment:string;backgroundBlendMode:string;backgroundClip:string;backgroundColor:string;backgroundImage:string;backgroundOrigin:string;backgroundPosition:string;backgroundPositionX:string;backgroundPositionY:string;backgroundRepeat:string;backgroundSize:string;baselineShift:string;blockSize:string;border:string;borderBlock:string;borderBlockColor:string;borderBlockEnd:string;borderBlockEndColor:string;borderBlockEndStyle:string;borderBlockEndWidth:string;borderBlockStart:string;borderBlockStartColor:string;borderBlockStartStyle:string;borderBlockStartWidth:string;borderBlockStyle:string;borderBlockWidth:string;borderBottom:string;borderBottomColor:string;borderBottomLeftRadius:string;borderBottomRightRadius:string;borderBottomStyle:string;borderBottomWidth:string;borderCollapse:string;borderColor:string;borderEndEndRadius:string;borderEndStartRadius:string;borderImage:string;borderImageOutset:string;borderImageRepeat:string;borderImageSlice:string;borderImageSource:string;borderImageWidth:string;borderInline:string;borderInlineColor:string;borderInlineEnd:string;borderInlineEndColor:string;borderInlineEndStyle:string;borderInlineEndWidth:string;borderInlineStart:string;borderInlineStartColor:string;borderInlineStartStyle:string;borderInlineStartWidth:string;borderInlineStyle:string;borderInlineWidth:string;borderLeft:string;borderLeftColor:string;borderLeftStyle:string;borderLeftWidth:string;borderRadius:string;borderRight:string;borderRightColor:string;borderRightStyle:string;borderRightWidth:string;borderSpacing:string;borderStartEndRadius:string;borderStartStartRadius:string;borderStyle:string;borderTop:string;borderTopColor:string;borderTopLeftRadius:string;borderTopRightRadius:string;borderTopStyle:string;borderTopWidth:string;borderWidth:string;bottom:string;boxShadow:string;boxSizing:string;breakAfter:string;breakBefore:string;breakInside:string;captionSide:string;caretColor:string;clear:string;clip:string;clipPath:string;clipRule:string;color:string;colorInterpolation:string;colorInterpolationFilters:string;colorScheme:string;columnCount:string;columnFill:string;columnGap:string;columnRule:string;columnRuleColor:string;columnRuleStyle:string;columnRuleWidth:string;columnSpan:string;columnWidth:string;columns:string;contain:string;containIntrinsicBlockSize:string;containIntrinsicHeight:string;containIntrinsicInlineSize:string;containIntrinsicSize:string;containIntrinsicWidth:string;container:string;containerName:string;containerType:string;content:string;contentVisibility:string;counterIncrement:string;counterReset:string;counterSet:string;cssFloat:string;cssText:string;cursor:string;direction:string;display:string;dominantBaseline:string;emptyCells:string;fill:string;fillOpacity:string;fillRule:string;filter:string;flex:string;flexBasis:string;flexDirection:string;flexFlow:string;flexGrow:string;flexShrink:string;flexWrap:string;float:string;floodColor:string;floodOpacity:string;font:string;fontFamily:string;fontFeatureSettings:string;fontKerning:string;fontOpticalSizing:string;fontPalette:string;fontSize:string;fontSizeAdjust:string;fontStretch:string;fontStyle:string;fontSynthesis:string;fontVariant:string;fontVariantAlternates:string;fontVariantCaps:string;fontVariantEastAsian:string;fontVariantLigatures:string;fontVariantNumeric:string;fontVariantPosition:string;fontVariationSettings:string;fontWeight:string;gap:string;grid:string;gridArea:string;gridAutoColumns:string;gridAutoFlow:string;gridAutoRows:string;gridColumn:string;gridColumnEnd:string;gridColumnGap:string;gridColumnStart:string;gridGap:string;gridRow:string;gridRowEnd:string;gridRowGap:string;gridRowStart:string;gridTemplate:string;gridTemplateAreas:string;gridTemplateColumns:string;gridTemplateRows:string;height:string;hyphenateCharacter:string;hyphens:string;imageOrientation:string;imageRendering:string;inlineSize:string;inset:string;insetBlock:string;insetBlockEnd:string;insetBlockStart:string;insetInline:string;insetInlineEnd:string;insetInlineStart:string;isolation:string;justifyContent:string;justifyItems:string;justifySelf:string;left:string;readonly length:number;letterSpacing:string;lightingColor:string;lineBreak:string;lineHeight:string;listStyle:string;listStyleImage:string;listStylePosition:string;listStyleType:string;margin:string;marginBlock:string;marginBlockEnd:string;marginBlockStart:string;marginBottom:string;marginInline:string;marginInlineEnd:string;marginInlineStart:string;marginLeft:string;marginRight:string;marginTop:string;marker:string;markerEnd:string;markerMid:string;markerStart:string;mask:string;maskClip:string;maskComposite:string;maskImage:string;maskMode:string;maskOrigin:string;maskPosition:string;maskRepeat:string;maskSize:string;maskType:string;mathStyle:string;maxBlockSize:string;maxHeight:string;maxInlineSize:string;maxWidth:string;minBlockSize:string;minHeight:string;minInlineSize:string;minWidth:string;mixBlendMode:string;objectFit:string;objectPosition:string;offset:string;offsetDistance:string;offsetPath:string;offsetRotate:string;opacity:string;order:string;orphans:string;outline:string;outlineColor:string;outlineOffset:string;outlineStyle:string;outlineWidth:string;overflow:string;overflowAnchor:string;overflowClipMargin:string;overflowWrap:string;overflowX:string;overflowY:string;overscrollBehavior:string;overscrollBehaviorBlock:string;overscrollBehaviorInline:string;overscrollBehaviorX:string;overscrollBehaviorY:string;padding:string;paddingBlock:string;paddingBlockEnd:string;paddingBlockStart:string;paddingBottom:string;paddingInline:string;paddingInlineEnd:string;paddingInlineStart:string;paddingLeft:string;paddingRight:string;paddingTop:string;pageBreakAfter:string;pageBreakBefore:string;pageBreakInside:string;paintOrder:string;readonly parentRule:CSSRule|null;perspective:string;perspectiveOrigin:string;placeContent:string;placeItems:string;placeSelf:string;pointerEvents:string;position:string;printColorAdjust:string;quotes:string;resize:string;right:string;rotate:string;rowGap:string;rubyPosition:string;scale:string;scrollBehavior:string;scrollMargin:string;scrollMarginBlock:string;scrollMarginBlockEnd:string;scrollMarginBlockStart:string;scrollMarginBottom:string;scrollMarginInline:string;scrollMarginInlineEnd:string;scrollMarginInlineStart:string;scrollMarginLeft:string;scrollMarginRight:string;scrollMarginTop:string;scrollPadding:string;scrollPaddingBlock:string;scrollPaddingBlockEnd:string;scrollPaddingBlockStart:string;scrollPaddingBottom:string;scrollPaddingInline:string;scrollPaddingInlineEnd:string;scrollPaddingInlineStart:string;scrollPaddingLeft:string;scrollPaddingRight:string;scrollPaddingTop:string;scrollSnapAlign:string;scrollSnapStop:string;scrollSnapType:string;scrollbarGutter:string;shapeImageThreshold:string;shapeMargin:string;shapeOutside:string;shapeRendering:string;stopColor:string;stopOpacity:string;stroke:string;strokeDasharray:string;strokeDashoffset:string;strokeLinecap:string;strokeLinejoin:string;strokeMiterlimit:string;strokeOpacity:string;strokeWidth:string;tabSize:string;tableLayout:string;textAlign:string;textAlignLast:string;textAnchor:string;textCombineUpright:string;textDecoration:string;textDecorationColor:string;textDecorationLine:string;textDecorationSkipInk:string;textDecorationStyle:string;textDecorationThickness:string;textEmphasis:string;textEmphasisColor:string;textEmphasisPosition:string;textEmphasisStyle:string;textIndent:string;textOrientation:string;textOverflow:string;textRendering:string;textShadow:string;textTransform:string;textUnderlineOffset:string;textUnderlinePosition:string;top:string;touchAction:string;transform:string;transformBox:string;transformOrigin:string;transformStyle:string;transition:string;transitionDelay:string;transitionDuration:string;transitionProperty:string;transitionTimingFunction:string;translate:string;unicodeBidi:string;userSelect:string;verticalAlign:string;visibility:string;webkitAlignContent:string;webkitAlignItems:string;webkitAlignSelf:string;webkitAnimation:string;webkitAnimationDelay:string;webkitAnimationDirection:string;webkitAnimationDuration:string;webkitAnimationFillMode:string;webkitAnimationIterationCount:string;webkitAnimationName:string;webkitAnimationPlayState:string;webkitAnimationTimingFunction:string;webkitAppearance:string;webkitBackfaceVisibility:string;webkitBackgroundClip:string;webkitBackgroundOrigin:string;webkitBackgroundSize:string;webkitBorderBottomLeftRadius:string;webkitBorderBottomRightRadius:string;webkitBorderRadius:string;webkitBorderTopLeftRadius:string;webkitBorderTopRightRadius:string;webkitBoxAlign:string;webkitBoxFlex:string;webkitBoxOrdinalGroup:string;webkitBoxOrient:string;webkitBoxPack:string;webkitBoxShadow:string;webkitBoxSizing:string;webkitFilter:string;webkitFlex:string;webkitFlexBasis:string;webkitFlexDirection:string;webkitFlexFlow:string;webkitFlexGrow:string;webkitFlexShrink:string;webkitFlexWrap:string;webkitJustifyContent:string;webkitLineClamp:string;webkitMask:string;webkitMaskBoxImage:string;webkitMaskBoxImageOutset:string;webkitMaskBoxImageRepeat:string;webkitMaskBoxImageSlice:string;webkitMaskBoxImageSource:string;webkitMaskBoxImageWidth:string;webkitMaskClip:string;webkitMaskComposite:string;webkitMaskImage:string;webkitMaskOrigin:string;webkitMaskPosition:string;webkitMaskRepeat:string;webkitMaskSize:string;webkitOrder:string;webkitPerspective:string;webkitPerspectiveOrigin:string;webkitTextFillColor:string;webkitTextSizeAdjust:string;webkitTextStroke:string;webkitTextStrokeColor:string;webkitTextStrokeWidth:string;webkitTransform:string;webkitTransformOrigin:string;webkitTransformStyle:string;webkitTransition:string;webkitTransitionDelay:string;webkitTransitionDuration:string;webkitTransitionProperty:string;webkitTransitionTimingFunction:string;webkitUserSelect:string;whiteSpace:string;widows:string;width:string;willChange:string;wordBreak:string;wordSpacing:string;wordWrap:string;writingMode:string;zIndex:string;getPropertyPriority(property:string):string;getPropertyValue(property:string):string;item(index:number):string;removeProperty(property:string):string;setProperty(property:string,value:string|null,priority?:string):void;[index:number]:string;}declare var CSSStyleDeclaration:{prototype:CSSStyleDeclaration;new():CSSStyleDeclaration;};interface CSSStyleRule extends CSSRule{selectorText:string;readonly style:CSSStyleDeclaration;}declare var CSSStyleRule:{prototype:CSSStyleRule;new():CSSStyleRule;};interface CSSStyleSheet extends StyleSheet{readonly cssRules:CSSRuleList;readonly ownerRule:CSSRule|null;readonly rules:CSSRuleList;addRule(selector?:string,style?:string,index?:number):number;deleteRule(index:number):void;insertRule(rule:string,index?:number):number;removeRule(index?:number):void;replace(text:string):Promise;replaceSync(text:string):void;}declare var CSSStyleSheet:{prototype:CSSStyleSheet;new(options?:CSSStyleSheetInit):CSSStyleSheet;};interface CSSSupportsRule extends CSSConditionRule{}declare var CSSSupportsRule:{prototype:CSSSupportsRule;new():CSSSupportsRule;};interface CSSTransition extends Animation{readonly transitionProperty:string;addEventListener(type:K,listener:(this:CSSTransition,ev:AnimationEventMap[K])=>any,options?:boolean|AddEventListenerOptions):void;addEventListener(type:string,listener:EventListenerOrEventListenerObject,options?:boolean|AddEventListenerOptions):void;removeEventListener(type:K,listener:(this:CSSTransition,ev:AnimationEventMap[K])=>any,options?:boolean|EventListenerOptions):void;removeEventListener(type:string,listener:EventListenerOrEventListenerObject,options?:boolean|EventListenerOptions):void;}declare var CSSTransition:{prototype:CSSTransition;new():CSSTransition;};interface Cache{add(request:RequestInfo|URL):Promise;addAll(requests:RequestInfo[]):Promise;delete(request:RequestInfo|URL,options?:CacheQueryOptions):Promise;keys(request?:RequestInfo|URL,options?:CacheQueryOptions):Promise>;match(request:RequestInfo|URL,options?:CacheQueryOptions):Promise;matchAll(request?:RequestInfo|URL,options?:CacheQueryOptions):Promise>;put(request:RequestInfo|URL,response:Response):Promise;}declare var Cache:{prototype:Cache;new():Cache;};interface CacheStorage{delete(cacheName:string):Promise;has(cacheName:string):Promise;keys():Promise;match(request:RequestInfo|URL,options?:MultiCacheQueryOptions):Promise;open(cacheName:string):Promise;}declare var CacheStorage:{prototype:CacheStorage;new():CacheStorage;};interface CanvasCaptureMediaStreamTrack extends MediaStreamTrack{readonly canvas:HTMLCanvasElement;requestFrame():void;addEventListener(type:K,listener:(this:CanvasCaptureMediaStreamTrack,ev:MediaStreamTrackEventMap[K])=>any,options?:boolean|AddEventListenerOptions):void;addEventListener(type:string,listener:EventListenerOrEventListenerObject,options?:boolean|AddEventListenerOptions):void;removeEventListener(type:K,listener:(this:CanvasCaptureMediaStreamTrack,ev:MediaStreamTrackEventMap[K])=>any,options?:boolean|EventListenerOptions):void;removeEventListener(type:string,listener:EventListenerOrEventListenerObject,options?:boolean|EventListenerOptions):void;}declare var CanvasCaptureMediaStreamTrack:{prototype:CanvasCaptureMediaStreamTrack;new():CanvasCaptureMediaStreamTrack;};interface CanvasCompositing{globalAlpha:number;globalCompositeOperation:GlobalCompositeOperation;}interface CanvasDrawImage{drawImage(image:CanvasImageSource,dx:number,dy:number):void;drawImage(image:CanvasImageSource,dx:number,dy:number,dw:number,dh:number):void;drawImage(image:CanvasImageSource,sx:number,sy:number,sw:number,sh:number,dx:number,dy:number,dw:number,dh:number):void;}interface CanvasDrawPath{beginPath():void;clip(fillRule?:CanvasFillRule):void;clip(path:Path2D,fillRule?:CanvasFillRule):void;fill(fillRule?:CanvasFillRule):void;fill(path:Path2D,fillRule?:CanvasFillRule):void;isPointInPath(x:number,y:number,fillRule?:CanvasFillRule):boolean;isPointInPath(path:Path2D,x:number,y:number,fillRule?:CanvasFillRule):boolean;isPointInStroke(x:number,y:number):boolean;isPointInStroke(path:Path2D,x:number,y:number):boolean;stroke():void;stroke(path:Path2D):void;}interface CanvasFillStrokeStyles{fillStyle:string|CanvasGradient|CanvasPattern;strokeStyle:string|CanvasGradient|CanvasPattern;createConicGradient(startAngle:number,x:number,y:number):CanvasGradient;createLinearGradient(x0:number,y0:number,x1:number,y1:number):CanvasGradient;createPattern(image:CanvasImageSource,repetition:string|null):CanvasPattern|null;createRadialGradient(x0:number,y0:number,r0:number,x1:number,y1:number,r1:number):CanvasGradient;}interface CanvasFilters{filter:string;}interface CanvasGradient{addColorStop(offset:number,color:string):void;}declare var CanvasGradient:{prototype:CanvasGradient;new():CanvasGradient;};interface CanvasImageData{createImageData(sw:number,sh:number,settings?:ImageDataSettings):ImageData;createImageData(imagedata:ImageData):ImageData;getImageData(sx:number,sy:number,sw:number,sh:number,settings?:ImageDataSettings):ImageData;putImageData(imagedata:ImageData,dx:number,dy:number):void;putImageData(imagedata:ImageData,dx:number,dy:number,dirtyX:number,dirtyY:number,dirtyWidth:number,dirtyHeight:number):void;}interface CanvasImageSmoothing{imageSmoothingEnabled:boolean;imageSmoothingQuality:ImageSmoothingQuality;}interface CanvasPath{arc(x:number,y:number,radius:number,startAngle:number,endAngle:number,counterclockwise?:boolean):void;arcTo(x1:number,y1:number,x2:number,y2:number,radius:number):void;bezierCurveTo(cp1x:number,cp1y:number,cp2x:number,cp2y:number,x:number,y:number):void;closePath():void;ellipse(x:number,y:number,radiusX:number,radiusY:number,rotation:number,startAngle:number,endAngle:number,counterclockwise?:boolean):void;lineTo(x:number,y:number):void;moveTo(x:number,y:number):void;quadraticCurveTo(cpx:number,cpy:number,x:number,y:number):void;rect(x:number,y:number,w:number,h:number):void;roundRect(x:number,y:number,w:number,h:number,radii?:number|DOMPointInit|(number|DOMPointInit)[]):void;}interface CanvasPathDrawingStyles{lineCap:CanvasLineCap;lineDashOffset:number;lineJoin:CanvasLineJoin;lineWidth:number;miterLimit:number;getLineDash():number[];setLineDash(segments:number[]):void;}interface CanvasPattern{setTransform(transform?:DOMMatrix2DInit):void;}declare var CanvasPattern:{prototype:CanvasPattern;new():CanvasPattern;};interface CanvasRect{clearRect(x:number,y:number,w:number,h:number):void;fillRect(x:number,y:number,w:number,h:number):void;strokeRect(x:number,y:number,w:number,h:number):void;}interface CanvasRenderingContext2D extends CanvasCompositing,CanvasDrawImage,CanvasDrawPath,CanvasFillStrokeStyles,CanvasFilters,CanvasImageData,CanvasImageSmoothing,CanvasPath,CanvasPathDrawingStyles,CanvasRect,CanvasShadowStyles,CanvasState,CanvasText,CanvasTextDrawingStyles,CanvasTransform,CanvasUserInterface{readonly canvas:HTMLCanvasElement;getContextAttributes():CanvasRenderingContext2DSettings;}declare var CanvasRenderingContext2D:{prototype:CanvasRenderingContext2D;new():CanvasRenderingContext2D;};interface CanvasShadowStyles{shadowBlur:number;shadowColor:string;shadowOffsetX:number;shadowOffsetY:number;}interface CanvasState{restore():void;save():void;}interface CanvasText{fillText(text:string,x:number,y:number,maxWidth?:number):void;measureText(text:string):TextMetrics;strokeText(text:string,x:number,y:number,maxWidth?:number):void;}interface CanvasTextDrawingStyles{direction:CanvasDirection;font:string;fontKerning:CanvasFontKerning;textAlign:CanvasTextAlign;textBaseline:CanvasTextBaseline;}interface CanvasTransform{getTransform():DOMMatrix;resetTransform():void;rotate(angle:number):void;scale(x:number,y:number):void;setTransform(a:number,b:number,c:number,d:number,e:number,f:number):void;setTransform(transform?:DOMMatrix2DInit):void;transform(a:number,b:number,c:number,d:number,e:number,f:number):void;translate(x:number,y:number):void;}interface CanvasUserInterface{drawFocusIfNeeded(element:Element):void;drawFocusIfNeeded(path:Path2D,element:Element):void;}interface ChannelMergerNode extends AudioNode{}declare var ChannelMergerNode:{prototype:ChannelMergerNode;new(context:BaseAudioContext,options?:ChannelMergerOptions):ChannelMergerNode;};interface ChannelSplitterNode extends AudioNode{}declare var ChannelSplitterNode:{prototype:ChannelSplitterNode;new(context:BaseAudioContext,options?:ChannelSplitterOptions):ChannelSplitterNode;};interface CharacterData extends Node,ChildNode,NonDocumentTypeChildNode{data:string;readonly length:number;readonly ownerDocument:Document;appendData(data:string):void;deleteData(offset:number,count:number):void;insertData(offset:number,data:string):void;replaceData(offset:number,count:number,data:string):void;substringData(offset:number,count:number):string;}declare var CharacterData:{prototype:CharacterData;new():CharacterData;};interface ChildNode extends Node{after(...nodes:(Node|string)[]):void;before(...nodes:(Node|string)[]):void;remove():void;replaceWith(...nodes:(Node|string)[]):void;}interface ClientRect extends DOMRect{}interface Clipboard extends EventTarget{read():Promise;readText():Promise;write(data:ClipboardItems):Promise;writeText(data:string):Promise;}declare var Clipboard:{prototype:Clipboard;new():Clipboard;};interface ClipboardEvent extends Event{readonly clipboardData:DataTransfer|null;}declare var ClipboardEvent:{prototype:ClipboardEvent;new(type:string,eventInitDict?:ClipboardEventInit):ClipboardEvent;};interface ClipboardItem{readonly presentationStyle:PresentationStyle;readonly types:ReadonlyArray;getType(type:string):Promise;}declare var ClipboardItem:{prototype:ClipboardItem;new(items:Record>,options?:ClipboardItemOptions):ClipboardItem;};interface CloseEvent extends Event{readonly code:number;readonly reason:string;readonly wasClean:boolean;}declare var CloseEvent:{prototype:CloseEvent;new(type:string,eventInitDict?:CloseEventInit):CloseEvent;};interface Comment extends CharacterData{}declare var Comment:{prototype:Comment;new(data?:string):Comment;};interface CompositionEvent extends UIEvent{readonly data:string;initCompositionEvent(typeArg:string,bubblesArg?:boolean,cancelableArg?:boolean,viewArg?:WindowProxy|null,dataArg?:string):void;}declare var CompositionEvent:{prototype:CompositionEvent;new(type:string,eventInitDict?:CompositionEventInit):CompositionEvent;};interface ConstantSourceNode extends AudioScheduledSourceNode{readonly offset:AudioParam;addEventListener(type:K,listener:(this:ConstantSourceNode,ev:AudioScheduledSourceNodeEventMap[K])=>any,options?:boolean|AddEventListenerOptions):void;addEventListener(type:string,listener:EventListenerOrEventListenerObject,options?:boolean|AddEventListenerOptions):void;removeEventListener(type:K,listener:(this:ConstantSourceNode,ev:AudioScheduledSourceNodeEventMap[K])=>any,options?:boolean|EventListenerOptions):void;removeEventListener(type:string,listener:EventListenerOrEventListenerObject,options?:boolean|EventListenerOptions):void;}declare var ConstantSourceNode:{prototype:ConstantSourceNode;new(context:BaseAudioContext,options?:ConstantSourceOptions):ConstantSourceNode;};interface ConvolverNode extends AudioNode{buffer:AudioBuffer|null;normalize:boolean;}declare var ConvolverNode:{prototype:ConvolverNode;new(context:BaseAudioContext,options?:ConvolverOptions):ConvolverNode;};interface CountQueuingStrategy extends QueuingStrategy{readonly highWaterMark:number;readonly size:QueuingStrategySize;}declare var CountQueuingStrategy:{prototype:CountQueuingStrategy;new(init:QueuingStrategyInit):CountQueuingStrategy;};interface Credential{readonly id:string;readonly type:string;}declare var Credential:{prototype:Credential;new():Credential;};interface CredentialsContainer{create(options?:CredentialCreationOptions):Promise;get(options?:CredentialRequestOptions):Promise;preventSilentAccess():Promise;store(credential:Credential):Promise;}declare var CredentialsContainer:{prototype:CredentialsContainer;new():CredentialsContainer;};interface Crypto{readonly subtle:SubtleCrypto;getRandomValues(array:T):T;randomUUID():`${string}-${string}-${string}-${string}-${string}`;\n}\n\ndeclare var Crypto: {\n prototype: Crypto;\n new(): Crypto;\n};\n\n/**\n * The CryptoKey dictionary of the Web Crypto API represents a cryptographic key.\n * Available only in secure contexts.\n */\ninterface CryptoKey {\n readonly algorithm: KeyAlgorithm;\n readonly extractable: boolean;\n readonly type: KeyType;\n readonly usages: KeyUsage[];\n}\n\ndeclare var CryptoKey: {\n prototype: CryptoKey;\n new(): CryptoKey;\n};\n\ninterface CustomElementRegistry {\n define(name: string, constructor: CustomElementConstructor, options?: ElementDefinitionOptions): void;\n get(name: string): CustomElementConstructor | undefined;\n upgrade(root: Node): void;\n whenDefined(name: string): Promise;\n}\n\ndeclare var CustomElementRegistry: {\n prototype: CustomElementRegistry;\n new(): CustomElementRegistry;\n};\n\ninterface CustomEvent extends Event {\n /** Returns any custom data event was created with. Typically used for synthetic events. */\n readonly detail: T;\n /** @deprecated */\n initCustomEvent(type: string, bubbles?: boolean, cancelable?: boolean, detail?: T): void;\n}\n\ndeclare var CustomEvent: {\n prototype: CustomEvent;\n new(type: string, eventInitDict?: CustomEventInit): CustomEvent;\n};\n\n/** An abnormal event (called an exception) which occurs as a result of calling a method or accessing a property of a web API. */\ninterface DOMException extends Error {\n /** @deprecated */\n readonly code: number;\n readonly message: string;\n readonly name: string;\n readonly INDEX_SIZE_ERR: 1;\n readonly DOMSTRING_SIZE_ERR: 2;\n readonly HIERARCHY_REQUEST_ERR: 3;\n readonly WRONG_DOCUMENT_ERR: 4;\n readonly INVALID_CHARACTER_ERR: 5;\n readonly NO_DATA_ALLOWED_ERR: 6;\n readonly NO_MODIFICATION_ALLOWED_ERR: 7;\n readonly NOT_FOUND_ERR: 8;\n readonly NOT_SUPPORTED_ERR: 9;\n readonly INUSE_ATTRIBUTE_ERR: 10;\n readonly INVALID_STATE_ERR: 11;\n readonly SYNTAX_ERR: 12;\n readonly INVALID_MODIFICATION_ERR: 13;\n readonly NAMESPACE_ERR: 14;\n readonly INVALID_ACCESS_ERR: 15;\n readonly VALIDATION_ERR: 16;\n readonly TYPE_MISMATCH_ERR: 17;\n readonly SECURITY_ERR: 18;\n readonly NETWORK_ERR: 19;\n readonly ABORT_ERR: 20;\n readonly URL_MISMATCH_ERR: 21;\n readonly QUOTA_EXCEEDED_ERR: 22;\n readonly TIMEOUT_ERR: 23;\n readonly INVALID_NODE_TYPE_ERR: 24;\n readonly DATA_CLONE_ERR: 25;\n}\n\ndeclare var DOMException: {\n prototype: DOMException;\n new(message?: string, name?: string): DOMException;\n readonly INDEX_SIZE_ERR: 1;\n readonly DOMSTRING_SIZE_ERR: 2;\n readonly HIERARCHY_REQUEST_ERR: 3;\n readonly WRONG_DOCUMENT_ERR: 4;\n readonly INVALID_CHARACTER_ERR: 5;\n readonly NO_DATA_ALLOWED_ERR: 6;\n readonly NO_MODIFICATION_ALLOWED_ERR: 7;\n readonly NOT_FOUND_ERR: 8;\n readonly NOT_SUPPORTED_ERR: 9;\n readonly INUSE_ATTRIBUTE_ERR: 10;\n readonly INVALID_STATE_ERR: 11;\n readonly SYNTAX_ERR: 12;\n readonly INVALID_MODIFICATION_ERR: 13;\n readonly NAMESPACE_ERR: 14;\n readonly INVALID_ACCESS_ERR: 15;\n readonly VALIDATION_ERR: 16;\n readonly TYPE_MISMATCH_ERR: 17;\n readonly SECURITY_ERR: 18;\n readonly NETWORK_ERR: 19;\n readonly ABORT_ERR: 20;\n readonly URL_MISMATCH_ERR: 21;\n readonly QUOTA_EXCEEDED_ERR: 22;\n readonly TIMEOUT_ERR: 23;\n readonly INVALID_NODE_TYPE_ERR: 24;\n readonly DATA_CLONE_ERR: 25;\n};\n\n/** An object providing methods which are not dependent on any particular document. Such an object is returned by the Document.implementation property. */\ninterface DOMImplementation {\n createDocument(namespace: string | null, qualifiedName: string | null, doctype?: DocumentType | null): XMLDocument;\n createDocumentType(qualifiedName: string, publicId: string, systemId: string): DocumentType;\n createHTMLDocument(title?: string): Document;\n /** @deprecated */\n hasFeature(...args: any[]): true;\n}\n\ndeclare var DOMImplementation: {\n prototype: DOMImplementation;\n new(): DOMImplementation;\n};\n\ninterface DOMMatrix extends DOMMatrixReadOnly {\n a: number;\n b: number;\n c: number;\n d: number;\n e: number;\n f: number;\n m11: number;\n m12: number;\n m13: number;\n m14: number;\n m21: number;\n m22: number;\n m23: number;\n m24: number;\n m31: number;\n m32: number;\n m33: number;\n m34: number;\n m41: number;\n m42: number;\n m43: number;\n m44: number;\n invertSelf(): DOMMatrix;\n multiplySelf(other?: DOMMatrixInit): DOMMatrix;\n preMultiplySelf(other?: DOMMatrixInit): DOMMatrix;\n rotateAxisAngleSelf(x?: number, y?: number, z?: number, angle?: number): DOMMatrix;\n rotateFromVectorSelf(x?: number, y?: number): DOMMatrix;\n rotateSelf(rotX?: number, rotY?: number, rotZ?: number): DOMMatrix;\n scale3dSelf(scale?: number, originX?: number, originY?: number, originZ?: number): DOMMatrix;\n scaleSelf(scaleX?: number, scaleY?: number, scaleZ?: number, originX?: number, originY?: number, originZ?: number): DOMMatrix;\n setMatrixValue(transformList: string): DOMMatrix;\n skewXSelf(sx?: number): DOMMatrix;\n skewYSelf(sy?: number): DOMMatrix;\n translateSelf(tx?: number, ty?: number, tz?: number): DOMMatrix;\n}\n\ndeclare var DOMMatrix: {\n prototype: DOMMatrix;\n new(init?: string | number[]): DOMMatrix;\n fromFloat32Array(array32: Float32Array): DOMMatrix;\n fromFloat64Array(array64: Float64Array): DOMMatrix;\n fromMatrix(other?: DOMMatrixInit): DOMMatrix;\n};\n\ntype SVGMatrix = DOMMatrix;\ndeclare var SVGMatrix: typeof DOMMatrix;\n\ntype WebKitCSSMatrix = DOMMatrix;\ndeclare var WebKitCSSMatrix: typeof DOMMatrix;\n\ninterface DOMMatrixReadOnly {\n readonly a: number;\n readonly b: number;\n readonly c: number;\n readonly d: number;\n readonly e: number;\n readonly f: number;\n readonly is2D: boolean;\n readonly isIdentity: boolean;\n readonly m11: number;\n readonly m12: number;\n readonly m13: number;\n readonly m14: number;\n readonly m21: number;\n readonly m22: number;\n readonly m23: number;\n readonly m24: number;\n readonly m31: number;\n readonly m32: number;\n readonly m33: number;\n readonly m34: number;\n readonly m41: number;\n readonly m42: number;\n readonly m43: number;\n readonly m44: number;\n flipX(): DOMMatrix;\n flipY(): DOMMatrix;\n inverse(): DOMMatrix;\n multiply(other?: DOMMatrixInit): DOMMatrix;\n rotate(rotX?: number, rotY?: number, rotZ?: number): DOMMatrix;\n rotateAxisAngle(x?: number, y?: number, z?: number, angle?: number): DOMMatrix;\n rotateFromVector(x?: number, y?: number): DOMMatrix;\n scale(scaleX?: number, scaleY?: number, scaleZ?: number, originX?: number, originY?: number, originZ?: number): DOMMatrix;\n scale3d(scale?: number, originX?: number, originY?: number, originZ?: number): DOMMatrix;\n /** @deprecated */\n scaleNonUniform(scaleX?: number, scaleY?: number): DOMMatrix;\n skewX(sx?: number): DOMMatrix;\n skewY(sy?: number): DOMMatrix;\n toFloat32Array(): Float32Array;\n toFloat64Array(): Float64Array;\n toJSON(): any;\n transformPoint(point?: DOMPointInit): DOMPoint;\n translate(tx?: number, ty?: number, tz?: number): DOMMatrix;\n toString(): string;\n}\n\ndeclare var DOMMatrixReadOnly: {\n prototype: DOMMatrixReadOnly;\n new(init?: string | number[]): DOMMatrixReadOnly;\n fromFloat32Array(array32: Float32Array): DOMMatrixReadOnly;\n fromFloat64Array(array64: Float64Array): DOMMatrixReadOnly;\n fromMatrix(other?: DOMMatrixInit): DOMMatrixReadOnly;\n toString(): string;\n};\n\n/** Provides the ability to parse XML or HTML source code from a string into a DOM Document. */\ninterface DOMParser {\n /**\n * Parses string using either the HTML or XML parser, according to type, and returns the resulting Document. type can be \"text/html\" (which will invoke the HTML parser), or any of \"text/xml\", \"application/xml\", \"application/xhtml+xml\", or \"image/svg+xml\" (which will invoke the XML parser).\n *\n * For the XML parser, if string cannot be parsed, then the returned Document will contain elements describing the resulting error.\n *\n * Note that script elements are not evaluated during parsing, and the resulting document's encoding will always be UTF-8.\n *\n * Values other than the above for type will cause a TypeError exception to be thrown.\n */\n parseFromString(string: string, type: DOMParserSupportedType): Document;\n}\n\ndeclare var DOMParser: {\n prototype: DOMParser;\n new(): DOMParser;\n};\n\ninterface DOMPoint extends DOMPointReadOnly {\n w: number;\n x: number;\n y: number;\n z: number;\n}\n\ndeclare var DOMPoint: {\n prototype: DOMPoint;\n new(x?: number, y?: number, z?: number, w?: number): DOMPoint;\n fromPoint(other?: DOMPointInit): DOMPoint;\n};\n\ntype SVGPoint = DOMPoint;\ndeclare var SVGPoint: typeof DOMPoint;\n\ninterface DOMPointReadOnly {\n readonly w: number;\n readonly x: number;\n readonly y: number;\n readonly z: number;\n matrixTransform(matrix?: DOMMatrixInit): DOMPoint;\n toJSON(): any;\n}\n\ndeclare var DOMPointReadOnly: {\n prototype: DOMPointReadOnly;\n new(x?: number, y?: number, z?: number, w?: number): DOMPointReadOnly;\n fromPoint(other?: DOMPointInit): DOMPointReadOnly;\n};\n\ninterface DOMQuad {\n readonly p1: DOMPoint;\n readonly p2: DOMPoint;\n readonly p3: DOMPoint;\n readonly p4: DOMPoint;\n getBounds(): DOMRect;\n toJSON(): any;\n}\n\ndeclare var DOMQuad: {\n prototype: DOMQuad;\n new(p1?: DOMPointInit, p2?: DOMPointInit, p3?: DOMPointInit, p4?: DOMPointInit): DOMQuad;\n fromQuad(other?: DOMQuadInit): DOMQuad;\n fromRect(other?: DOMRectInit): DOMQuad;\n};\n\ninterface DOMRect extends DOMRectReadOnly {\n height: number;\n width: number;\n x: number;\n y: number;\n}\n\ndeclare var DOMRect: {\n prototype: DOMRect;\n new(x?: number, y?: number, width?: number, height?: number): DOMRect;\n fromRect(other?: DOMRectInit): DOMRect;\n};\n\ntype SVGRect = DOMRect;\ndeclare var SVGRect: typeof DOMRect;\n\ninterface DOMRectList {\n readonly length: number;\n item(index: number): DOMRect | null;\n [index: number]: DOMRect;\n}\n\ndeclare var DOMRectList: {\n prototype: DOMRectList;\n new(): DOMRectList;\n};\n\ninterface DOMRectReadOnly {\n readonly bottom: number;\n readonly height: number;\n readonly left: number;\n readonly right: number;\n readonly top: number;\n readonly width: number;\n readonly x: number;\n readonly y: number;\n toJSON(): any;\n}\n\ndeclare var DOMRectReadOnly: {\n prototype: DOMRectReadOnly;\n new(x?: number, y?: number, width?: number, height?: number): DOMRectReadOnly;\n fromRect(other?: DOMRectInit): DOMRectReadOnly;\n};\n\n/** A type returned by some APIs which contains a list of DOMString (strings). */\ninterface DOMStringList {\n /** Returns the number of strings in strings. */\n readonly length: number;\n /** Returns true if strings contains string, and false otherwise. */\n contains(string: string): boolean;\n /** Returns the string with index index from strings. */\n item(index: number): string | null;\n [index: number]: string;\n}\n\ndeclare var DOMStringList: {\n prototype: DOMStringList;\n new(): DOMStringList;\n};\n\n/** Used by the dataset HTML attribute to represent data for custom attributes added to elements. */\ninterface DOMStringMap {\n [name: string]: string | undefined;\n}\n\ndeclare var DOMStringMap: {\n prototype: DOMStringMap;\n new(): DOMStringMap;\n};\n\n/** A set of space-separated tokens. Such a set is returned by Element.classList, HTMLLinkElement.relList, HTMLAnchorElement.relList, HTMLAreaElement.relList, HTMLIframeElement.sandbox, or HTMLOutputElement.htmlFor. It is indexed beginning with 0 as with JavaScript Array objects. DOMTokenList is always case-sensitive. */\ninterface DOMTokenList {\n /** Returns the number of tokens. */\n readonly length: number;\n /**\n * Returns the associated set as string.\n *\n * Can be set, to change the associated attribute.\n */\n value: string;\n toString(): string;\n /**\n * Adds all arguments passed, except those already present.\n *\n * Throws a \"SyntaxError\" DOMException if one of the arguments is the empty string.\n *\n * Throws an \"InvalidCharacterError\" DOMException if one of the arguments contains any ASCII whitespace.\n */\n add(...tokens: string[]): void;\n /** Returns true if token is present, and false otherwise. */\n contains(token: string): boolean;\n /** Returns the token with index index. */\n item(index: number): string | null;\n /**\n * Removes arguments passed, if they are present.\n *\n * Throws a \"SyntaxError\" DOMException if one of the arguments is the empty string.\n *\n * Throws an \"InvalidCharacterError\" DOMException if one of the arguments contains any ASCII whitespace.\n */\n remove(...tokens: string[]): void;\n /**\n * Replaces token with newToken.\n *\n * Returns true if token was replaced with newToken, and false otherwise.\n *\n * Throws a \"SyntaxError\" DOMException if one of the arguments is the empty string.\n *\n * Throws an \"InvalidCharacterError\" DOMException if one of the arguments contains any ASCII whitespace.\n */\n replace(token: string, newToken: string): boolean;\n /**\n * Returns true if token is in the associated attribute's supported tokens. Returns false otherwise.\n *\n * Throws a TypeError if the associated attribute has no supported tokens defined.\n */\n supports(token: string): boolean;\n /**\n * If force is not given, \"toggles\" token, removing it if it's present and adding it if it's not present. If force is true, adds token (same as add()). If force is false, removes token (same as remove()).\n *\n * Returns true if token is now present, and false otherwise.\n *\n * Throws a \"SyntaxError\" DOMException if token is empty.\n *\n * Throws an \"InvalidCharacterError\" DOMException if token contains any spaces.\n */\n toggle(token: string, force?: boolean): boolean;\n forEach(callbackfn: (value: string, key: number, parent: DOMTokenList) => void, thisArg?: any): void;\n [index: number]: string;\n}\n\ndeclare var DOMTokenList: {\n prototype: DOMTokenList;\n new(): DOMTokenList;\n};\n\n/** Used to hold the data that is being dragged during a drag and drop operation. It may hold one or more data items, each of one or more data types. For more information about drag and drop, see HTML Drag and Drop API. */\ninterface DataTransfer {\n /**\n * Returns the kind of operation that is currently selected. If the kind of operation isn't one of those that is allowed by the effectAllowed attribute, then the operation will fail.\n *\n * Can be set, to change the selected operation.\n *\n * The possible values are \"none\", \"copy\", \"link\", and \"move\".\n */\n dropEffect: \"none\" | \"copy\" | \"link\" | \"move\";\n /**\n * Returns the kinds of operations that are to be allowed.\n *\n * Can be set (during the dragstart event), to change the allowed operations.\n *\n * The possible values are \"none\", \"copy\", \"copyLink\", \"copyMove\", \"link\", \"linkMove\", \"move\", \"all\", and \"uninitialized\",\n */\n effectAllowed: \"none\" | \"copy\" | \"copyLink\" | \"copyMove\" | \"link\" | \"linkMove\" | \"move\" | \"all\" | \"uninitialized\";\n /** Returns a FileList of the files being dragged, if any. */\n readonly files: FileList;\n /** Returns a DataTransferItemList object, with the drag data. */\n readonly items: DataTransferItemList;\n /** Returns a frozen array listing the formats that were set in the dragstart event. In addition, if any files are being dragged, then one of the types will be the string \"Files\". */\n readonly types: ReadonlyArray;\n /** Removes the data of the specified formats. Removes all data if the argument is omitted. */\n clearData(format?: string): void;\n /** Returns the specified data. If there is no such data, returns the empty string. */\n getData(format: string): string;\n /** Adds the specified data. */\n setData(format: string, data: string): void;\n /** Uses the given element to update the drag feedback, replacing any previously specified feedback. */\n setDragImage(image: Element, x: number, y: number): void;\n}\n\ndeclare var DataTransfer: {\n prototype: DataTransfer;\n new(): DataTransfer;\n};\n\n/** One drag data item. During a drag operation, each drag event has a dataTransfer property which contains a list of drag data items. Each item in the list is a DataTransferItem object. */\ninterface DataTransferItem {\n /** Returns the drag data item kind, one of: \"string\", \"file\". */\n readonly kind: string;\n /** Returns the drag data item type string. */\n readonly type: string;\n /** Returns a File object, if the drag data item kind is File. */\n getAsFile(): File | null;\n /** Invokes the callback with the string data as the argument, if the drag data item kind is text. */\n getAsString(callback: FunctionStringCallback | null): void;\n webkitGetAsEntry(): FileSystemEntry | null;\n}\n\ndeclare var DataTransferItem: {\n prototype: DataTransferItem;\n new(): DataTransferItem;\n};\n\n/** A list of DataTransferItem objects representing items being dragged. During a drag operation, each DragEvent has a dataTransfer property and that property is a DataTransferItemList. */\ninterface DataTransferItemList {\n /** Returns the number of items in the drag data store. */\n readonly length: number;\n /** Adds a new entry for the given data to the drag data store. If the data is plain text then a type string has to be provided also. */\n add(data: string, type: string): DataTransferItem | null;\n add(data: File): DataTransferItem | null;\n /** Removes all the entries in the drag data store. */\n clear(): void;\n /** Removes the indexth entry in the drag data store. */\n remove(index: number): void;\n [index: number]: DataTransferItem;\n}\n\ndeclare var DataTransferItemList: {\n prototype: DataTransferItemList;\n new(): DataTransferItemList;\n};\n\n/** A delay-line; an AudioNode audio-processing module that causes a delay between the arrival of an input data and its propagation to the output. */\ninterface DelayNode extends AudioNode {\n readonly delayTime: AudioParam;\n}\n\ndeclare var DelayNode: {\n prototype: DelayNode;\n new(context: BaseAudioContext, options?: DelayOptions): DelayNode;\n};\n\n/**\n * The DeviceMotionEvent provides web developers with information about the speed of changes for the device's position and orientation.\n * Available only in secure contexts.\n */\ninterface DeviceMotionEvent extends Event {\n readonly acceleration: DeviceMotionEventAcceleration | null;\n readonly accelerationIncludingGravity: DeviceMotionEventAcceleration | null;\n readonly interval: number;\n readonly rotationRate: DeviceMotionEventRotationRate | null;\n}\n\ndeclare var DeviceMotionEvent: {\n prototype: DeviceMotionEvent;\n new(type: string, eventInitDict?: DeviceMotionEventInit): DeviceMotionEvent;\n};\n\n/** Available only in secure contexts. */\ninterface DeviceMotionEventAcceleration {\n readonly x: number | null;\n readonly y: number | null;\n readonly z: number | null;\n}\n\n/** Available only in secure contexts. */\ninterface DeviceMotionEventRotationRate {\n readonly alpha: number | null;\n readonly beta: number | null;\n readonly gamma: number | null;\n}\n\n/**\n * The DeviceOrientationEvent provides web developers with information from the physical orientation of the device running the web page.\n * Available only in secure contexts.\n */\ninterface DeviceOrientationEvent extends Event {\n readonly absolute: boolean;\n readonly alpha: number | null;\n readonly beta: number | null;\n readonly gamma: number | null;\n}\n\ndeclare var DeviceOrientationEvent: {\n prototype: DeviceOrientationEvent;\n new(type: string, eventInitDict?: DeviceOrientationEventInit): DeviceOrientationEvent;\n};\n\ninterface DocumentEventMap extends GlobalEventHandlersEventMap {\n \"DOMContentLoaded\": Event;\n \"fullscreenchange\": Event;\n \"fullscreenerror\": Event;\n \"pointerlockchange\": Event;\n \"pointerlockerror\": Event;\n \"readystatechange\": Event;\n \"visibilitychange\": Event;\n}\n\n/** Any web page loaded in the browser and serves as an entry point into the web page's content, which is the DOM tree. */\ninterface Document extends Node, DocumentOrShadowRoot, FontFaceSource, GlobalEventHandlers, NonElementParentNode, ParentNode, XPathEvaluatorBase {\n /** Sets or gets the URL for the current document. */\n readonly URL: string;\n /**\n * Sets or gets the color of all active links in the document.\n * @deprecated\n */\n alinkColor: string;\n /**\n * Returns a reference to the collection of elements contained by the object.\n * @deprecated\n */\n readonly all: HTMLAllCollection;\n /**\n * Retrieves a collection of all a objects that have a name and/or id property. Objects in this collection are in HTML source order.\n * @deprecated\n */\n readonly anchors: HTMLCollectionOf;\n /**\n * Retrieves a collection of all applet objects in the document.\n * @deprecated\n */\n readonly applets: HTMLCollection;\n /**\n * Deprecated. Sets or retrieves a value that indicates the background color behind the object.\n * @deprecated\n */\n bgColor: string;\n /** Specifies the beginning and end of the document body. */\n body: HTMLElement;\n /** Returns document's encoding. */\n readonly characterSet: string;\n /**\n * Gets or sets the character set used to encode the object.\n * @deprecated This is a legacy alias of `characterSet`.\n */\n readonly charset: string;\n /** Gets a value that indicates whether standards-compliant mode is switched on for the object. */\n readonly compatMode: string;\n /** Returns document's content type. */\n readonly contentType: string;\n /**\n * Returns the HTTP cookies that apply to the Document. If there are no cookies or cookies can't be applied to this resource, the empty string will be returned.\n *\n * Can be set, to add a new cookie to the element's set of HTTP cookies.\n *\n * If the contents are sandboxed into a unique origin (e.g. in an iframe with the sandbox attribute), a \"SecurityError\" DOMException will be thrown on getting and setting.\n */\n cookie: string;\n /**\n * Returns the script element, or the SVG script element, that is currently executing, as long as the element represents a classic script. In the case of reentrant script execution, returns the one that most recently started executing amongst those that have not yet finished executing.\n *\n * Returns null if the Document is not currently executing a script or SVG script element (e.g., because the running script is an event handler, or a timeout), or if the currently executing script or SVG script element represents a module script.\n */\n readonly currentScript: HTMLOrSVGScriptElement | null;\n /** Returns the Window object of the active document. */\n readonly defaultView: (WindowProxy & typeof globalThis) | null;\n /** Sets or gets a value that indicates whether the document can be edited. */\n designMode: string;\n /** Sets or retrieves a value that indicates the reading order of the object. */\n dir: string;\n /** Gets an object representing the document type declaration associated with the current document. */\n readonly doctype: DocumentType | null;\n /** Gets a reference to the root node of the document. */\n readonly documentElement: HTMLElement;\n /** Returns document's URL. */\n readonly documentURI: string;\n /**\n * Sets or gets the security domain of the document.\n * @deprecated\n */\n domain: string;\n /** Retrieves a collection of all embed objects in the document. */\n readonly embeds: HTMLCollectionOf;\n /**\n * Sets or gets the foreground (text) color of the document.\n * @deprecated\n */\n fgColor: string;\n /** Retrieves a collection, in source order, of all form objects in the document. */\n readonly forms: HTMLCollectionOf;\n /** @deprecated */\n readonly fullscreen: boolean;\n /** Returns true if document has the ability to display elements fullscreen and fullscreen is supported, or false otherwise. */\n readonly fullscreenEnabled: boolean;\n /** Returns the head element. */\n readonly head: HTMLHeadElement;\n readonly hidden: boolean;\n /** Retrieves a collection, in source order, of img objects in the document. */\n readonly images: HTMLCollectionOf;\n /** Gets the implementation object of the current document. */\n readonly implementation: DOMImplementation;\n /**\n * Returns the character encoding used to create the webpage that is loaded into the document object.\n * @deprecated This is a legacy alias of `characterSet`.\n */\n readonly inputEncoding: string;\n /** Gets the date that the page was last modified, if the page supplies one. */\n readonly lastModified: string;\n /**\n * Sets or gets the color of the document links.\n * @deprecated\n */\n linkColor: string;\n /** Retrieves a collection of all a objects that specify the href property and all area objects in the document. */\n readonly links: HTMLCollectionOf;\n /** Contains information about the current URL. */\n get location(): Location;\n set location(href: string | Location);\n onfullscreenchange: ((this: Document, ev: Event) => any) | null;\n onfullscreenerror: ((this: Document, ev: Event) => any) | null;\n onpointerlockchange: ((this: Document, ev: Event) => any) | null;\n onpointerlockerror: ((this: Document, ev: Event) => any) | null;\n /**\n * Fires when the state of the object has changed.\n * @param ev The event\n */\n onreadystatechange: ((this: Document, ev: Event) => any) | null;\n onvisibilitychange: ((this: Document, ev: Event) => any) | null;\n readonly ownerDocument: null;\n readonly pictureInPictureEnabled: boolean;\n /** Return an HTMLCollection of the embed elements in the Document. */\n readonly plugins: HTMLCollectionOf;\n /** Retrieves a value that indicates the current state of the object. */\n readonly readyState: DocumentReadyState;\n /** Gets the URL of the location that referred the user to the current page. */\n readonly referrer: string;\n /** @deprecated */\n readonly rootElement: SVGSVGElement | null;\n /** Retrieves a collection of all script objects in the document. */\n readonly scripts: HTMLCollectionOf;\n readonly scrollingElement: Element | null;\n readonly timeline: DocumentTimeline;\n /** Contains the title of the document. */\n title: string;\n readonly visibilityState: DocumentVisibilityState;\n /**\n * Sets or gets the color of the links that the user has visited.\n * @deprecated\n */\n vlinkColor: string;\n /**\n * Moves node from another document and returns it.\n *\n * If node is a document, throws a \"NotSupportedError\" DOMException or, if node is a shadow root, throws a \"HierarchyRequestError\" DOMException.\n */\n adoptNode(node: T): T;\n /** @deprecated */\n captureEvents(): void;\n /** @deprecated */\n caretRangeFromPoint(x: number, y: number): Range | null;\n /** @deprecated */\n clear(): void;\n /** Closes an output stream and forces the sent data to display. */\n close(): void;\n /**\n * Creates an attribute object with a specified name.\n * @param name String that sets the attribute object's name.\n */\n createAttribute(localName: string): Attr;\n createAttributeNS(namespace: string | null, qualifiedName: string): Attr;\n /** Returns a CDATASection node whose data is data. */\n createCDATASection(data: string): CDATASection;\n /**\n * Creates a comment object with the specified data.\n * @param data Sets the comment object's data.\n */\n createComment(data: string): Comment;\n /** Creates a new document. */\n createDocumentFragment(): DocumentFragment;\n /**\n * Creates an instance of the element for the specified tag.\n * @param tagName The name of an element.\n */\n createElement(tagName: K, options?: ElementCreationOptions): HTMLElementTagNameMap[K];\n /** @deprecated */\n createElement(tagName: K, options?: ElementCreationOptions): HTMLElementDeprecatedTagNameMap[K];\n createElement(tagName: string, options?: ElementCreationOptions): HTMLElement;\n /**\n * Returns an element with namespace namespace. Its namespace prefix will be everything before \":\" (U+003E) in qualifiedName or null. Its local name will be everything after \":\" (U+003E) in qualifiedName or qualifiedName.\n *\n * If localName does not match the Name production an \"InvalidCharacterError\" DOMException will be thrown.\n *\n * If one of the following conditions is true a \"NamespaceError\" DOMException will be thrown:\n *\n * localName does not match the QName production.\n * Namespace prefix is not null and namespace is the empty string.\n * Namespace prefix is \"xml\" and namespace is not the XML namespace.\n * qualifiedName or namespace prefix is \"xmlns\" and namespace is not the XMLNS namespace.\n * namespace is the XMLNS namespace and neither qualifiedName nor namespace prefix is \"xmlns\".\n *\n * When supplied, options's is can be used to create a customized built-in element.\n */\n createElementNS(namespaceURI: \"http://www.w3.org/1999/xhtml\", qualifiedName: string): HTMLElement;\n createElementNS(namespaceURI: \"http://www.w3.org/2000/svg\", qualifiedName: K): SVGElementTagNameMap[K];\n createElementNS(namespaceURI: \"http://www.w3.org/2000/svg\", qualifiedName: string): SVGElement;\n createElementNS(namespaceURI: \"http://www.w3.org/1998/Math/MathML\", qualifiedName: K): MathMLElementTagNameMap[K];\n createElementNS(namespaceURI: \"http://www.w3.org/1998/Math/MathML\", qualifiedName: string): MathMLElement;\n createElementNS(namespaceURI: string | null, qualifiedName: string, options?: ElementCreationOptions): Element;\n createElementNS(namespace: string | null, qualifiedName: string, options?: string | ElementCreationOptions): Element;\n createEvent(eventInterface: \"AnimationEvent\"): AnimationEvent;\n createEvent(eventInterface: \"AnimationPlaybackEvent\"): AnimationPlaybackEvent;\n createEvent(eventInterface: \"AudioProcessingEvent\"): AudioProcessingEvent;\n createEvent(eventInterface: \"BeforeUnloadEvent\"): BeforeUnloadEvent;\n createEvent(eventInterface: \"BlobEvent\"): BlobEvent;\n createEvent(eventInterface: \"ClipboardEvent\"): ClipboardEvent;\n createEvent(eventInterface: \"CloseEvent\"): CloseEvent;\n createEvent(eventInterface: \"CompositionEvent\"): CompositionEvent;\n createEvent(eventInterface: \"CustomEvent\"): CustomEvent;\n createEvent(eventInterface: \"DeviceMotionEvent\"): DeviceMotionEvent;\n createEvent(eventInterface: \"DeviceOrientationEvent\"): DeviceOrientationEvent;\n createEvent(eventInterface: \"DragEvent\"): DragEvent;\n createEvent(eventInterface: \"ErrorEvent\"): ErrorEvent;\n createEvent(eventInterface: \"Event\"): Event;\n createEvent(eventInterface: \"Events\"): Event;\n createEvent(eventInterface: \"FocusEvent\"): FocusEvent;\n createEvent(eventInterface: \"FontFaceSetLoadEvent\"): FontFaceSetLoadEvent;\n createEvent(eventInterface: \"FormDataEvent\"): FormDataEvent;\n createEvent(eventInterface: \"GamepadEvent\"): GamepadEvent;\n createEvent(eventInterface: \"HashChangeEvent\"): HashChangeEvent;\n createEvent(eventInterface: \"IDBVersionChangeEvent\"): IDBVersionChangeEvent;\n createEvent(eventInterface: \"InputEvent\"): InputEvent;\n createEvent(eventInterface: \"KeyboardEvent\"): KeyboardEvent;\n createEvent(eventInterface: \"MIDIConnectionEvent\"): MIDIConnectionEvent;\n createEvent(eventInterface: \"MIDIMessageEvent\"): MIDIMessageEvent;\n createEvent(eventInterface: \"MediaEncryptedEvent\"): MediaEncryptedEvent;\n createEvent(eventInterface: \"MediaKeyMessageEvent\"): MediaKeyMessageEvent;\n createEvent(eventInterface: \"MediaQueryListEvent\"): MediaQueryListEvent;\n createEvent(eventInterface: \"MediaStreamTrackEvent\"): MediaStreamTrackEvent;\n createEvent(eventInterface: \"MessageEvent\"): MessageEvent;\n createEvent(eventInterface: \"MouseEvent\"): MouseEvent;\n createEvent(eventInterface: \"MouseEvents\"): MouseEvent;\n createEvent(eventInterface: \"MutationEvent\"): MutationEvent;\n createEvent(eventInterface: \"MutationEvents\"): MutationEvent;\n createEvent(eventInterface: \"OfflineAudioCompletionEvent\"): OfflineAudioCompletionEvent;\n createEvent(eventInterface: \"PageTransitionEvent\"): PageTransitionEvent;\n createEvent(eventInterface: \"PaymentMethodChangeEvent\"): PaymentMethodChangeEvent;\n createEvent(eventInterface: \"PaymentRequestUpdateEvent\"): PaymentRequestUpdateEvent;\n createEvent(eventInterface: \"PictureInPictureEvent\"): PictureInPictureEvent;\n createEvent(eventInterface: \"PointerEvent\"): PointerEvent;\n createEvent(eventInterface: \"PopStateEvent\"): PopStateEvent;\n createEvent(eventInterface: \"ProgressEvent\"): ProgressEvent;\n createEvent(eventInterface: \"PromiseRejectionEvent\"): PromiseRejectionEvent;\n createEvent(eventInterface: \"RTCDTMFToneChangeEvent\"): RTCDTMFToneChangeEvent;\n createEvent(eventInterface: \"RTCDataChannelEvent\"): RTCDataChannelEvent;\n createEvent(eventInterface: \"RTCErrorEvent\"): RTCErrorEvent;\n createEvent(eventInterface: \"RTCPeerConnectionIceErrorEvent\"): RTCPeerConnectionIceErrorEvent;\n createEvent(eventInterface: \"RTCPeerConnectionIceEvent\"): RTCPeerConnectionIceEvent;\n createEvent(eventInterface: \"RTCTrackEvent\"): RTCTrackEvent;\n createEvent(eventInterface: \"SecurityPolicyViolationEvent\"): SecurityPolicyViolationEvent;\n createEvent(eventInterface: \"SpeechSynthesisErrorEvent\"): SpeechSynthesisErrorEvent;\n createEvent(eventInterface: \"SpeechSynthesisEvent\"): SpeechSynthesisEvent;\n createEvent(eventInterface: \"StorageEvent\"): StorageEvent;\n createEvent(eventInterface: \"SubmitEvent\"): SubmitEvent;\n createEvent(eventInterface: \"TouchEvent\"): TouchEvent;\n createEvent(eventInterface: \"TrackEvent\"): TrackEvent;\n createEvent(eventInterface: \"TransitionEvent\"): TransitionEvent;\n createEvent(eventInterface: \"UIEvent\"): UIEvent;\n createEvent(eventInterface: \"UIEvents\"): UIEvent;\n createEvent(eventInterface: \"WebGLContextEvent\"): WebGLContextEvent;\n createEvent(eventInterface: \"WheelEvent\"): WheelEvent;\n createEvent(eventInterface: string): Event;\n /**\n * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.\n * @param root The root element or node to start traversing on.\n * @param whatToShow The type of nodes or elements to appear in the node list\n * @param filter A custom NodeFilter function to use. For more information, see filter. Use null for no filter.\n */\n createNodeIterator(root: Node, whatToShow?: number, filter?: NodeFilter | null): NodeIterator;\n /** Returns a ProcessingInstruction node whose target is target and data is data. If target does not match the Name production an \"InvalidCharacterError\" DOMException will be thrown. If data contains \"?>\" an \"InvalidCharacterError\" DOMException will be thrown. */\n createProcessingInstruction(target: string, data: string): ProcessingInstruction;\n /** Returns an empty range object that has both of its boundary points positioned at the beginning of the document. */\n createRange(): Range;\n /**\n * Creates a text string from the specified value.\n * @param data String that specifies the nodeValue property of the text node.\n */\n createTextNode(data: string): Text;\n /**\n * Creates a TreeWalker object that you can use to traverse filtered lists of nodes or elements in a document.\n * @param root The root element or node to start traversing on.\n * @param whatToShow The type of nodes or elements to appear in the node list. For more information, see whatToShow.\n * @param filter A custom NodeFilter function to use.\n */\n createTreeWalker(root: Node, whatToShow?: number, filter?: NodeFilter | null): TreeWalker;\n /**\n * Executes a command on the current document, current selection, or the given range.\n * @param commandId String that specifies the command to execute. This command can be any of the command identifiers that can be executed in script.\n * @param showUI Display the user interface, defaults to false.\n * @param value Value to assign.\n * @deprecated\n */\n execCommand(commandId: string, showUI?: boolean, value?: string): boolean;\n /** Stops document's fullscreen element from being displayed fullscreen and resolves promise when done. */\n exitFullscreen(): Promise;\n exitPictureInPicture(): Promise;\n exitPointerLock(): void;\n /**\n * Returns a reference to the first object with the specified value of the ID attribute.\n * @param elementId String that specifies the ID value.\n */\n getElementById(elementId: string): HTMLElement | null;\n /** Returns a HTMLCollection of the elements in the object on which the method was invoked (a document or an element) that have all the classes given by classNames. The classNames argument is interpreted as a space-separated list of classes. */\n getElementsByClassName(classNames: string): HTMLCollectionOf;\n /**\n * Gets a collection of objects based on the value of the NAME or ID attribute.\n * @param elementName Gets a collection of objects based on the value of the NAME or ID attribute.\n */\n getElementsByName(elementName: string): NodeListOf;\n /**\n * Retrieves a collection of objects based on the specified element name.\n * @param name Specifies the name of an element.\n */\n getElementsByTagName(qualifiedName: K): HTMLCollectionOf;\n getElementsByTagName(qualifiedName: K): HTMLCollectionOf;\n getElementsByTagName(qualifiedName: K): HTMLCollectionOf;\n /** @deprecated */\n getElementsByTagName(qualifiedName: K): HTMLCollectionOf;\n getElementsByTagName(qualifiedName: string): HTMLCollectionOf;\n /**\n * If namespace and localName are \"*\" returns a HTMLCollection of all descendant elements.\n *\n * If only namespace is \"*\" returns a HTMLCollection of all descendant elements whose local name is localName.\n *\n * If only localName is \"*\" returns a HTMLCollection of all descendant elements whose namespace is namespace.\n *\n * Otherwise, returns a HTMLCollection of all descendant elements whose namespace is namespace and local name is localName.\n */\n getElementsByTagNameNS(namespaceURI: \"http://www.w3.org/1999/xhtml\", localName: string): HTMLCollectionOf;\n getElementsByTagNameNS(namespaceURI: \"http://www.w3.org/2000/svg\", localName: string): HTMLCollectionOf;\n getElementsByTagNameNS(namespaceURI: \"http://www.w3.org/1998/Math/MathML\", localName: string): HTMLCollectionOf;\n getElementsByTagNameNS(namespace: string | null, localName: string): HTMLCollectionOf;\n /** Returns an object representing the current selection of the document that is loaded into the object displaying a webpage. */\n getSelection(): Selection | null;\n /** Gets a value indicating whether the object currently has focus. */\n hasFocus(): boolean;\n hasStorageAccess(): Promise;\n /**\n * Returns a copy of node. If deep is true, the copy also includes the node's descendants.\n *\n * If node is a document or a shadow root, throws a \"NotSupportedError\" DOMException.\n */\n importNode(node: T, deep?: boolean): T;\n /**\n * Opens a new window and loads a document specified by a given URL. Also, opens a new window that uses the url parameter and the name parameter to collect the output of the write method and the writeln method.\n * @param url Specifies a MIME type for the document.\n * @param name Specifies the name of the window. This name is used as the value for the TARGET attribute on a form or an anchor element.\n * @param features Contains a list of items separated by commas. Each item consists of an option and a value, separated by an equals sign (for example, \"fullscreen=yes, toolbar=yes\"). The following values are supported.\n * @param replace Specifies whether the existing entry for the document is replaced in the history list.\n */\n open(unused1?: string, unused2?: string): Document;\n open(url: string | URL, name: string, features: string): WindowProxy | null;\n /**\n * Returns a Boolean value that indicates whether a specified command can be successfully executed using execCommand, given the current state of the document.\n * @param commandId Specifies a command identifier.\n * @deprecated\n */\n queryCommandEnabled(commandId: string): boolean;\n /**\n * Returns a Boolean value that indicates whether the specified command is in the indeterminate state.\n * @param commandId String that specifies a command identifier.\n * @deprecated\n */\n queryCommandIndeterm(commandId: string): boolean;\n /**\n * Returns a Boolean value that indicates the current state of the command.\n * @param commandId String that specifies a command identifier.\n * @deprecated\n */\n queryCommandState(commandId: string): boolean;\n /**\n * Returns a Boolean value that indicates whether the current command is supported on the current range.\n * @param commandId Specifies a command identifier.\n * @deprecated\n */\n queryCommandSupported(commandId: string): boolean;\n /**\n * Returns the current value of the document, range, or current selection for the given command.\n * @param commandId String that specifies a command identifier.\n * @deprecated\n */\n queryCommandValue(commandId: string): string;\n /** @deprecated */\n releaseEvents(): void;\n requestStorageAccess(): Promise;\n /**\n * Writes one or more HTML expressions to a document in the specified window.\n * @param content Specifies the text and HTML tags to write.\n */\n write(...text: string[]): void;\n /**\n * Writes one or more HTML expressions, followed by a carriage return, to a document in the specified window.\n * @param content The text and HTML tags to write.\n */\n writeln(...text: string[]): void;\n addEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n removeEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var Document: {\n prototype: Document;\n new(): Document;\n};\n\n/** A minimal document object that has no parent. It is used as a lightweight version of Document that stores a segment of a document structure comprised of nodes just like a standard document. The key difference is that because the document fragment isn't part of the active document tree structure, changes made to the fragment don't affect the document, cause reflow, or incur any performance impact that can occur when changes are made. */\ninterface DocumentFragment extends Node, NonElementParentNode, ParentNode {\n readonly ownerDocument: Document;\n getElementById(elementId: string): HTMLElement | null;\n}\n\ndeclare var DocumentFragment: {\n prototype: DocumentFragment;\n new(): DocumentFragment;\n};\n\ninterface DocumentOrShadowRoot {\n /**\n * Returns the deepest element in the document through which or to which key events are being routed. This is, roughly speaking, the focused element in the document.\n *\n * For the purposes of this API, when a child browsing context is focused, its container is focused in the parent browsing context. For example, if the user moves the focus to a text control in an iframe, the iframe is the element returned by the activeElement API in the iframe's node document.\n *\n * Similarly, when the focused element is in a different node tree than documentOrShadowRoot, the element returned will be the host that's located in the same node tree as documentOrShadowRoot if documentOrShadowRoot is a shadow-including inclusive ancestor of the focused element, and null if not.\n */\n readonly activeElement: Element | null;\n adoptedStyleSheets: CSSStyleSheet[];\n /** Returns document's fullscreen element. */\n readonly fullscreenElement: Element | null;\n readonly pictureInPictureElement: Element | null;\n readonly pointerLockElement: Element | null;\n /** Retrieves a collection of styleSheet objects representing the style sheets that correspond to each instance of a link or style object in the document. */\n readonly styleSheets: StyleSheetList;\n /**\n * Returns the element for the specified x coordinate and the specified y coordinate.\n * @param x The x-offset\n * @param y The y-offset\n */\n elementFromPoint(x: number, y: number): Element | null;\n elementsFromPoint(x: number, y: number): Element[];\n getAnimations(): Animation[];\n}\n\ninterface DocumentTimeline extends AnimationTimeline {\n}\n\ndeclare var DocumentTimeline: {\n prototype: DocumentTimeline;\n new(options?: DocumentTimelineOptions): DocumentTimeline;\n};\n\n/** A Node containing a doctype. */\ninterface DocumentType extends Node, ChildNode {\n readonly name: string;\n readonly ownerDocument: Document;\n readonly publicId: string;\n readonly systemId: string;\n}\n\ndeclare var DocumentType: {\n prototype: DocumentType;\n new(): DocumentType;\n};\n\n/** A DOM event that represents a drag and drop interaction. The user initiates a drag by placing a pointer device (such as a mouse) on the touch surface and then dragging the pointer to a new location (such as another DOM element). Applications are free to interpret a drag and drop interaction in an application-specific way. */\ninterface DragEvent extends MouseEvent {\n /** Returns the DataTransfer object for the event. */\n readonly dataTransfer: DataTransfer | null;\n}\n\ndeclare var DragEvent: {\n prototype: DragEvent;\n new(type: string, eventInitDict?: DragEventInit): DragEvent;\n};\n\n/** Inherits properties from its parent, AudioNode. */\ninterface DynamicsCompressorNode extends AudioNode {\n readonly attack: AudioParam;\n readonly knee: AudioParam;\n readonly ratio: AudioParam;\n readonly reduction: number;\n readonly release: AudioParam;\n readonly threshold: AudioParam;\n}\n\ndeclare var DynamicsCompressorNode: {\n prototype: DynamicsCompressorNode;\n new(context: BaseAudioContext, options?: DynamicsCompressorOptions): DynamicsCompressorNode;\n};\n\ninterface EXT_blend_minmax {\n readonly MIN_EXT: 0x8007;\n readonly MAX_EXT: 0x8008;\n}\n\ninterface EXT_color_buffer_float {\n}\n\ninterface EXT_color_buffer_half_float {\n readonly RGBA16F_EXT: 0x881A;\n readonly RGB16F_EXT: 0x881B;\n readonly FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT: 0x8211;\n readonly UNSIGNED_NORMALIZED_EXT: 0x8C17;\n}\n\ninterface EXT_float_blend {\n}\n\n/** The EXT_frag_depth extension is part of the WebGL API and enables to set a depth value of a fragment from within the fragment shader. */\ninterface EXT_frag_depth {\n}\n\ninterface EXT_sRGB {\n readonly SRGB_EXT: 0x8C40;\n readonly SRGB_ALPHA_EXT: 0x8C42;\n readonly SRGB8_ALPHA8_EXT: 0x8C43;\n readonly FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT: 0x8210;\n}\n\ninterface EXT_shader_texture_lod {\n}\n\ninterface EXT_texture_compression_bptc {\n readonly COMPRESSED_RGBA_BPTC_UNORM_EXT: 0x8E8C;\n readonly COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT: 0x8E8D;\n readonly COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT: 0x8E8E;\n readonly COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT: 0x8E8F;\n}\n\ninterface EXT_texture_compression_rgtc {\n readonly COMPRESSED_RED_RGTC1_EXT: 0x8DBB;\n readonly COMPRESSED_SIGNED_RED_RGTC1_EXT: 0x8DBC;\n readonly COMPRESSED_RED_GREEN_RGTC2_EXT: 0x8DBD;\n readonly COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT: 0x8DBE;\n}\n\n/** The EXT_texture_filter_anisotropic extension is part of the WebGL API and exposes two constants for anisotropic filtering (AF). */\ninterface EXT_texture_filter_anisotropic {\n readonly TEXTURE_MAX_ANISOTROPY_EXT: 0x84FE;\n readonly MAX_TEXTURE_MAX_ANISOTROPY_EXT: 0x84FF;\n}\n\ninterface EXT_texture_norm16 {\n readonly R16_EXT: 0x822A;\n readonly RG16_EXT: 0x822C;\n readonly RGB16_EXT: 0x8054;\n readonly RGBA16_EXT: 0x805B;\n readonly R16_SNORM_EXT: 0x8F98;\n readonly RG16_SNORM_EXT: 0x8F99;\n readonly RGB16_SNORM_EXT: 0x8F9A;\n readonly RGBA16_SNORM_EXT: 0x8F9B;\n}\n\ninterface ElementEventMap {\n \"fullscreenchange\": Event;\n \"fullscreenerror\": Event;\n}\n\n/** Element is the most general base class from which all objects in a Document inherit. It only has methods and properties common to all kinds of elements. More specific classes inherit from Element. */\ninterface Element extends Node, ARIAMixin, Animatable, ChildNode, InnerHTML, NonDocumentTypeChildNode, ParentNode, Slottable {\n readonly attributes: NamedNodeMap;\n /** Allows for manipulation of element's class content attribute as a set of whitespace-separated tokens through a DOMTokenList object. */\n readonly classList: DOMTokenList;\n /** Returns the value of element's class content attribute. Can be set to change it. */\n className: string;\n readonly clientHeight: number;\n readonly clientLeft: number;\n readonly clientTop: number;\n readonly clientWidth: number;\n /** Returns the value of element's id content attribute. Can be set to change it. */\n id: string;\n /** Returns the local name. */\n readonly localName: string;\n /** Returns the namespace. */\n readonly namespaceURI: string | null;\n onfullscreenchange: ((this: Element, ev: Event) => any) | null;\n onfullscreenerror: ((this: Element, ev: Event) => any) | null;\n outerHTML: string;\n readonly ownerDocument: Document;\n readonly part: DOMTokenList;\n /** Returns the namespace prefix. */\n readonly prefix: string | null;\n readonly scrollHeight: number;\n scrollLeft: number;\n scrollTop: number;\n readonly scrollWidth: number;\n /** Returns element's shadow root, if any, and if shadow root's mode is \"open\", and null otherwise. */\n readonly shadowRoot: ShadowRoot | null;\n /** Returns the value of element's slot content attribute. Can be set to change it. */\n slot: string;\n /** Returns the HTML-uppercased qualified name. */\n readonly tagName: string;\n /** Creates a shadow root for element and returns it. */\n attachShadow(init: ShadowRootInit): ShadowRoot;\n checkVisibility(options?: CheckVisibilityOptions): boolean;\n /** Returns the first (starting at element) inclusive ancestor that matches selectors, and null otherwise. */\n closest(selector: K): HTMLElementTagNameMap[K] | null;\n closest(selector: K): SVGElementTagNameMap[K] | null;\n closest(selector: K): MathMLElementTagNameMap[K] | null;\n closest(selectors: string): E | null;\n /** Returns element's first attribute whose qualified name is qualifiedName, and null if there is no such attribute otherwise. */\n getAttribute(qualifiedName: string): string | null;\n /** Returns element's attribute whose namespace is namespace and local name is localName, and null if there is no such attribute otherwise. */\n getAttributeNS(namespace: string | null, localName: string): string | null;\n /** Returns the qualified names of all element's attributes. Can contain duplicates. */\n getAttributeNames(): string[];\n getAttributeNode(qualifiedName: string): Attr | null;\n getAttributeNodeNS(namespace: string | null, localName: string): Attr | null;\n getBoundingClientRect(): DOMRect;\n getClientRects(): DOMRectList;\n /** Returns a HTMLCollection of the elements in the object on which the method was invoked (a document or an element) that have all the classes given by classNames. The classNames argument is interpreted as a space-separated list of classes. */\n getElementsByClassName(classNames: string): HTMLCollectionOf;\n getElementsByTagName(qualifiedName: K): HTMLCollectionOf;\n getElementsByTagName(qualifiedName: K): HTMLCollectionOf;\n getElementsByTagName(qualifiedName: K): HTMLCollectionOf;\n /** @deprecated */\n getElementsByTagName(qualifiedName: K): HTMLCollectionOf;\n getElementsByTagName(qualifiedName: string): HTMLCollectionOf;\n getElementsByTagNameNS(namespaceURI: \"http://www.w3.org/1999/xhtml\", localName: string): HTMLCollectionOf;\n getElementsByTagNameNS(namespaceURI: \"http://www.w3.org/2000/svg\", localName: string): HTMLCollectionOf;\n getElementsByTagNameNS(namespaceURI: \"http://www.w3.org/1998/Math/MathML\", localName: string): HTMLCollectionOf;\n getElementsByTagNameNS(namespace: string | null, localName: string): HTMLCollectionOf;\n /** Returns true if element has an attribute whose qualified name is qualifiedName, and false otherwise. */\n hasAttribute(qualifiedName: string): boolean;\n /** Returns true if element has an attribute whose namespace is namespace and local name is localName. */\n hasAttributeNS(namespace: string | null, localName: string): boolean;\n /** Returns true if element has attributes, and false otherwise. */\n hasAttributes(): boolean;\n hasPointerCapture(pointerId: number): boolean;\n insertAdjacentElement(where: InsertPosition, element: Element): Element | null;\n insertAdjacentHTML(position: InsertPosition, text: string): void;\n insertAdjacentText(where: InsertPosition, data: string): void;\n /** Returns true if matching selectors against element's root yields element, and false otherwise. */\n matches(selectors: string): boolean;\n releasePointerCapture(pointerId: number): void;\n /** Removes element's first attribute whose qualified name is qualifiedName. */\n removeAttribute(qualifiedName: string): void;\n /** Removes element's attribute whose namespace is namespace and local name is localName. */\n removeAttributeNS(namespace: string | null, localName: string): void;\n removeAttributeNode(attr: Attr): Attr;\n /**\n * Displays element fullscreen and resolves promise when done.\n *\n * When supplied, options's navigationUI member indicates whether showing navigation UI while in fullscreen is preferred or not. If set to \"show\", navigation simplicity is preferred over screen space, and if set to \"hide\", more screen space is preferred. User agents are always free to honor user preference over the application's. The default value \"auto\" indicates no application preference.\n */\n requestFullscreen(options?: FullscreenOptions): Promise;\n requestPointerLock(): void;\n scroll(options?: ScrollToOptions): void;\n scroll(x: number, y: number): void;\n scrollBy(options?: ScrollToOptions): void;\n scrollBy(x: number, y: number): void;\n scrollIntoView(arg?: boolean | ScrollIntoViewOptions): void;\n scrollTo(options?: ScrollToOptions): void;\n scrollTo(x: number, y: number): void;\n /** Sets the value of element's first attribute whose qualified name is qualifiedName to value. */\n setAttribute(qualifiedName: string, value: string): void;\n /** Sets the value of element's attribute whose namespace is namespace and local name is localName to value. */\n setAttributeNS(namespace: string | null, qualifiedName: string, value: string): void;\n setAttributeNode(attr: Attr): Attr | null;\n setAttributeNodeNS(attr: Attr): Attr | null;\n setPointerCapture(pointerId: number): void;\n /**\n * If force is not given, \"toggles\" qualifiedName, removing it if it is present and adding it if it is not present. If force is true, adds qualifiedName. If force is false, removes qualifiedName.\n *\n * Returns true if qualifiedName is now present, and false otherwise.\n */\n toggleAttribute(qualifiedName: string, force?: boolean): boolean;\n /** @deprecated This is a legacy alias of `matches`. */\n webkitMatchesSelector(selectors: string): boolean;\n addEventListener(type: K, listener: (this: Element, ev: ElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n removeEventListener(type: K, listener: (this: Element, ev: ElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var Element: {\n prototype: Element;\n new(): Element;\n};\n\ninterface ElementCSSInlineStyle {\n readonly style: CSSStyleDeclaration;\n}\n\ninterface ElementContentEditable {\n contentEditable: string;\n enterKeyHint: string;\n inputMode: string;\n readonly isContentEditable: boolean;\n}\n\ninterface ElementInternals extends ARIAMixin {\n /** Returns the form owner of internals's target element. */\n readonly form: HTMLFormElement | null;\n /** Returns a NodeList of all the label elements that internals's target element is associated with. */\n readonly labels: NodeList;\n /** Returns the ShadowRoot for internals's target element, if the target element is a shadow host, or null otherwise. */\n readonly shadowRoot: ShadowRoot | null;\n /** Returns the error message that would be shown to the user if internals's target element was to be checked for validity. */\n readonly validationMessage: string;\n /** Returns the ValidityState object for internals's target element. */\n readonly validity: ValidityState;\n /** Returns true if internals's target element will be validated when the form is submitted; false otherwise. */\n readonly willValidate: boolean;\n /** Returns true if internals's target element has no validity problems; false otherwise. Fires an invalid event at the element in the latter case. */\n checkValidity(): boolean;\n /** Returns true if internals's target element has no validity problems; otherwise, returns false, fires an invalid event at the element, and (if the event isn't canceled) reports the problem to the user. */\n reportValidity(): boolean;\n /**\n * Sets both the state and submission value of internals's target element to value.\n *\n * If value is null, the element won't participate in form submission.\n */\n setFormValue(value: File | string | FormData | null, state?: File | string | FormData | null): void;\n /** Marks internals's target element as suffering from the constraints indicated by the flags argument, and sets the element's validation message to message. If anchor is specified, the user agent might use it to indicate problems with the constraints of internals's target element when the form owner is validated interactively or reportValidity() is called. */\n setValidity(flags?: ValidityStateFlags, message?: string, anchor?: HTMLElement): void;\n}\n\ndeclare var ElementInternals: {\n prototype: ElementInternals;\n new(): ElementInternals;\n};\n\n/** Events providing information related to errors in scripts or in files. */\ninterface ErrorEvent extends Event {\n readonly colno: number;\n readonly error: any;\n readonly filename: string;\n readonly lineno: number;\n readonly message: string;\n}\n\ndeclare var ErrorEvent: {\n prototype: ErrorEvent;\n new(type: string, eventInitDict?: ErrorEventInit): ErrorEvent;\n};\n\n/** An event which takes place in the DOM. */\ninterface Event {\n /** Returns true or false depending on how event was initialized. True if event goes through its target's ancestors in reverse tree order, and false otherwise. */\n readonly bubbles: boolean;\n /** @deprecated */\n cancelBubble: boolean;\n /** Returns true or false depending on how event was initialized. Its return value does not always carry meaning, but true can indicate that part of the operation during which event was dispatched, can be canceled by invoking the preventDefault() method. */\n readonly cancelable: boolean;\n /** Returns true or false depending on how event was initialized. True if event invokes listeners past a ShadowRoot node that is the root of its target, and false otherwise. */\n readonly composed: boolean;\n /** Returns the object whose event listener's callback is currently being invoked. */\n readonly currentTarget: EventTarget | null;\n /** Returns true if preventDefault() was invoked successfully to indicate cancelation, and false otherwise. */\n readonly defaultPrevented: boolean;\n /** Returns the event's phase, which is one of NONE, CAPTURING_PHASE, AT_TARGET, and BUBBLING_PHASE. */\n readonly eventPhase: number;\n /** Returns true if event was dispatched by the user agent, and false otherwise. */\n readonly isTrusted: boolean;\n /** @deprecated */\n returnValue: boolean;\n /** @deprecated */\n readonly srcElement: EventTarget | null;\n /** Returns the object to which event is dispatched (its target). */\n readonly target: EventTarget | null;\n /** Returns the event's timestamp as the number of milliseconds measured relative to the time origin. */\n readonly timeStamp: DOMHighResTimeStamp;\n /** Returns the type of event, e.g. \"click\", \"hashchange\", or \"submit\". */\n readonly type: string;\n /** Returns the invocation target objects of event's path (objects on which listeners will be invoked), except for any nodes in shadow trees of which the shadow root's mode is \"closed\" that are not reachable from event's currentTarget. */\n composedPath(): EventTarget[];\n /** @deprecated */\n initEvent(type: string, bubbles?: boolean, cancelable?: boolean): void;\n /** If invoked when the cancelable attribute value is true, and while executing a listener for the event with passive set to false, signals to the operation that caused event to be dispatched that it needs to be canceled. */\n preventDefault(): void;\n /** Invoking this method prevents event from reaching any registered event listeners after the current one finishes running and, when dispatched in a tree, also prevents event from reaching any other objects. */\n stopImmediatePropagation(): void;\n /** When dispatched in a tree, invoking this method prevents event from reaching any objects other than the current object. */\n stopPropagation(): void;\n readonly NONE: 0;\n readonly CAPTURING_PHASE: 1;\n readonly AT_TARGET: 2;\n readonly BUBBLING_PHASE: 3;\n}\n\ndeclare var Event: {\n prototype: Event;\n new(type: string, eventInitDict?: EventInit): Event;\n readonly NONE: 0;\n readonly CAPTURING_PHASE: 1;\n readonly AT_TARGET: 2;\n readonly BUBBLING_PHASE: 3;\n};\n\ninterface EventCounts {\n forEach(callbackfn: (value: number, key: string, parent: EventCounts) => void, thisArg?: any): void;\n}\n\ndeclare var EventCounts: {\n prototype: EventCounts;\n new(): EventCounts;\n};\n\ninterface EventListener {\n (evt: Event): void;\n}\n\ninterface EventListenerObject {\n handleEvent(object: Event): void;\n}\n\ninterface EventSourceEventMap {\n \"error\": Event;\n \"message\": MessageEvent;\n \"open\": Event;\n}\n\ninterface EventSource extends EventTarget {\n onerror: ((this: EventSource, ev: Event) => any) | null;\n onmessage: ((this: EventSource, ev: MessageEvent) => any) | null;\n onopen: ((this: EventSource, ev: Event) => any) | null;\n /** Returns the state of this EventSource object's connection. It can have the values described below. */\n readonly readyState: number;\n /** Returns the URL providing the event stream. */\n readonly url: string;\n /** Returns true if the credentials mode for connection requests to the URL providing the event stream is set to \"include\", and false otherwise. */\n readonly withCredentials: boolean;\n /** Aborts any instances of the fetch algorithm started for this EventSource object, and sets the readyState attribute to CLOSED. */\n close(): void;\n readonly CONNECTING: 0;\n readonly OPEN: 1;\n readonly CLOSED: 2;\n addEventListener(type: K, listener: (this: EventSource, ev: EventSourceEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n addEventListener(type: string, listener: (this: EventSource, event: MessageEvent) => any, options?: boolean | AddEventListenerOptions): void;\n addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n removeEventListener(type: K, listener: (this: EventSource, ev: EventSourceEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n removeEventListener(type: string, listener: (this: EventSource, event: MessageEvent) => any, options?: boolean | EventListenerOptions): void;\n removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var EventSource: {\n prototype: EventSource;\n new(url: string | URL, eventSourceInitDict?: EventSourceInit): EventSource;\n readonly CONNECTING: 0;\n readonly OPEN: 1;\n readonly CLOSED: 2;\n};\n\n/** EventTarget is a DOM interface implemented by objects that can receive events and may have listeners for them. */\ninterface EventTarget {\n /**\n * Appends an event listener for events whose type attribute value is type. The callback argument sets the callback that will be invoked when the event is dispatched.\n *\n * The options argument sets listener-specific options. For compatibility this can be a boolean, in which case the method behaves exactly as if the value was specified as options's capture.\n *\n * When set to true, options's capture prevents callback from being invoked when the event's eventPhase attribute value is BUBBLING_PHASE. When false (or not present), callback will not be invoked when event's eventPhase attribute value is CAPTURING_PHASE. Either way, callback will be invoked if event's eventPhase attribute value is AT_TARGET.\n *\n * When set to true, options's passive indicates that the callback will not cancel the event by invoking preventDefault(). This is used to enable performance optimizations described in § 2.8 Observing event listeners.\n *\n * When set to true, options's once indicates that the callback will only be invoked once after which the event listener will be removed.\n *\n * If an AbortSignal is passed for options's signal, then the event listener will be removed when signal is aborted.\n *\n * The event listener is appended to target's event listener list and is not appended if it has the same type, callback, and capture.\n */\n addEventListener(type: string, callback: EventListenerOrEventListenerObject | null, options?: AddEventListenerOptions | boolean): void;\n /** Dispatches a synthetic event event to target and returns true if either event's cancelable attribute value is false or its preventDefault() method was not invoked, and false otherwise. */\n dispatchEvent(event: Event): boolean;\n /** Removes the event listener in target's event listener list with the same type, callback, and options. */\n removeEventListener(type: string, callback: EventListenerOrEventListenerObject | null, options?: EventListenerOptions | boolean): void;\n}\n\ndeclare var EventTarget: {\n prototype: EventTarget;\n new(): EventTarget;\n};\n\n/** @deprecated */\ninterface External {\n /** @deprecated */\n AddSearchProvider(): void;\n /** @deprecated */\n IsSearchProviderInstalled(): void;\n}\n\n/** @deprecated */\ndeclare var External: {\n prototype: External;\n new(): External;\n};\n\n/** Provides information about files and allows JavaScript in a web page to access their content. */\ninterface File extends Blob {\n readonly lastModified: number;\n readonly name: string;\n readonly webkitRelativePath: string;\n}\n\ndeclare var File: {\n prototype: File;\n new(fileBits: BlobPart[], fileName: string, options?: FilePropertyBag): File;\n};\n\n/** An object of this type is returned by the files property of the HTML element; this lets you access the list of files selected with the element. It's also used for a list of files dropped into web content when using the drag and drop API; see the DataTransfer object for details on this usage. */\ninterface FileList {\n readonly length: number;\n item(index: number): File | null;\n [index: number]: File;\n}\n\ndeclare var FileList: {\n prototype: FileList;\n new(): FileList;\n};\n\ninterface FileReaderEventMap {\n \"abort\": ProgressEvent;\n \"error\": ProgressEvent;\n \"load\": ProgressEvent;\n \"loadend\": ProgressEvent;\n \"loadstart\": ProgressEvent;\n \"progress\": ProgressEvent;\n}\n\n/** Lets web applications asynchronously read the contents of files (or raw data buffers) stored on the user's computer, using File or Blob objects to specify the file or data to read. */\ninterface FileReader extends EventTarget {\n readonly error: DOMException | null;\n onabort: ((this: FileReader, ev: ProgressEvent) => any) | null;\n onerror: ((this: FileReader, ev: ProgressEvent) => any) | null;\n onload: ((this: FileReader, ev: ProgressEvent) => any) | null;\n onloadend: ((this: FileReader, ev: ProgressEvent) => any) | null;\n onloadstart: ((this: FileReader, ev: ProgressEvent) => any) | null;\n onprogress: ((this: FileReader, ev: ProgressEvent) => any) | null;\n readonly readyState: typeof FileReader.EMPTY | typeof FileReader.LOADING | typeof FileReader.DONE;\n readonly result: string | ArrayBuffer | null;\n abort(): void;\n readAsArrayBuffer(blob: Blob): void;\n readAsBinaryString(blob: Blob): void;\n readAsDataURL(blob: Blob): void;\n readAsText(blob: Blob, encoding?: string): void;\n readonly EMPTY: 0;\n readonly LOADING: 1;\n readonly DONE: 2;\n addEventListener(type: K, listener: (this: FileReader, ev: FileReaderEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n removeEventListener(type: K, listener: (this: FileReader, ev: FileReaderEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var FileReader: {\n prototype: FileReader;\n new(): FileReader;\n readonly EMPTY: 0;\n readonly LOADING: 1;\n readonly DONE: 2;\n};\n\ninterface FileSystem {\n readonly name: string;\n readonly root: FileSystemDirectoryEntry;\n}\n\ndeclare var FileSystem: {\n prototype: FileSystem;\n new(): FileSystem;\n};\n\ninterface FileSystemDirectoryEntry extends FileSystemEntry {\n createReader(): FileSystemDirectoryReader;\n getDirectory(path?: string | null, options?: FileSystemFlags, successCallback?: FileSystemEntryCallback, errorCallback?: ErrorCallback): void;\n getFile(path?: string | null, options?: FileSystemFlags, successCallback?: FileSystemEntryCallback, errorCallback?: ErrorCallback): void;\n}\n\ndeclare var FileSystemDirectoryEntry: {\n prototype: FileSystemDirectoryEntry;\n new(): FileSystemDirectoryEntry;\n};\n\n/** Available only in secure contexts. */\ninterface FileSystemDirectoryHandle extends FileSystemHandle {\n readonly kind: \"directory\";\n getDirectoryHandle(name: string, options?: FileSystemGetDirectoryOptions): Promise;\n getFileHandle(name: string, options?: FileSystemGetFileOptions): Promise;\n removeEntry(name: string, options?: FileSystemRemoveOptions): Promise;\n resolve(possibleDescendant: FileSystemHandle): Promise;\n}\n\ndeclare var FileSystemDirectoryHandle: {\n prototype: FileSystemDirectoryHandle;\n new(): FileSystemDirectoryHandle;\n};\n\ninterface FileSystemDirectoryReader {\n readEntries(successCallback: FileSystemEntriesCallback, errorCallback?: ErrorCallback): void;\n}\n\ndeclare var FileSystemDirectoryReader: {\n prototype: FileSystemDirectoryReader;\n new(): FileSystemDirectoryReader;\n};\n\ninterface FileSystemEntry {\n readonly filesystem: FileSystem;\n readonly fullPath: string;\n readonly isDirectory: boolean;\n readonly isFile: boolean;\n readonly name: string;\n getParent(successCallback?: FileSystemEntryCallback, errorCallback?: ErrorCallback): void;\n}\n\ndeclare var FileSystemEntry: {\n prototype: FileSystemEntry;\n new(): FileSystemEntry;\n};\n\ninterface FileSystemFileEntry extends FileSystemEntry {\n file(successCallback: FileCallback, errorCallback?: ErrorCallback): void;\n}\n\ndeclare var FileSystemFileEntry: {\n prototype: FileSystemFileEntry;\n new(): FileSystemFileEntry;\n};\n\n/** Available only in secure contexts. */\ninterface FileSystemFileHandle extends FileSystemHandle {\n readonly kind: \"file\";\n getFile(): Promise;\n}\n\ndeclare var FileSystemFileHandle: {\n prototype: FileSystemFileHandle;\n new(): FileSystemFileHandle;\n};\n\n/** Available only in secure contexts. */\ninterface FileSystemHandle {\n readonly kind: FileSystemHandleKind;\n readonly name: string;\n isSameEntry(other: FileSystemHandle): Promise;\n}\n\ndeclare var FileSystemHandle: {\n prototype: FileSystemHandle;\n new(): FileSystemHandle;\n};\n\n/** Focus-related events like focus, blur, focusin, or focusout. */\ninterface FocusEvent extends UIEvent {\n readonly relatedTarget: EventTarget | null;\n}\n\ndeclare var FocusEvent: {\n prototype: FocusEvent;\n new(type: string, eventInitDict?: FocusEventInit): FocusEvent;\n};\n\ninterface FontFace {\n ascentOverride: string;\n descentOverride: string;\n display: FontDisplay;\n family: string;\n featureSettings: string;\n lineGapOverride: string;\n readonly loaded: Promise;\n readonly status: FontFaceLoadStatus;\n stretch: string;\n style: string;\n unicodeRange: string;\n variant: string;\n weight: string;\n load(): Promise;\n}\n\ndeclare var FontFace: {\n prototype: FontFace;\n new(family: string, source: string | BinaryData, descriptors?: FontFaceDescriptors): FontFace;\n};\n\ninterface FontFaceSetEventMap {\n \"loading\": Event;\n \"loadingdone\": Event;\n \"loadingerror\": Event;\n}\n\ninterface FontFaceSet extends EventTarget {\n onloading: ((this: FontFaceSet, ev: Event) => any) | null;\n onloadingdone: ((this: FontFaceSet, ev: Event) => any) | null;\n onloadingerror: ((this: FontFaceSet, ev: Event) => any) | null;\n readonly ready: Promise;\n readonly status: FontFaceSetLoadStatus;\n check(font: string, text?: string): boolean;\n load(font: string, text?: string): Promise;\n forEach(callbackfn: (value: FontFace, key: FontFace, parent: FontFaceSet) => void, thisArg?: any): void;\n addEventListener(type: K, listener: (this: FontFaceSet, ev: FontFaceSetEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n removeEventListener(type: K, listener: (this: FontFaceSet, ev: FontFaceSetEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var FontFaceSet: {\n prototype: FontFaceSet;\n new(initialFaces: FontFace[]): FontFaceSet;\n};\n\ninterface FontFaceSetLoadEvent extends Event {\n readonly fontfaces: ReadonlyArray;\n}\n\ndeclare var FontFaceSetLoadEvent: {\n prototype: FontFaceSetLoadEvent;\n new(type: string, eventInitDict?: FontFaceSetLoadEventInit): FontFaceSetLoadEvent;\n};\n\ninterface FontFaceSource {\n readonly fonts: FontFaceSet;\n}\n\n/** Provides a way to easily construct a set of key/value pairs representing form fields and their values, which can then be easily sent using the XMLHttpRequest.send() method. It uses the same format a form would use if the encoding type were set to \"multipart/form-data\". */\ninterface FormData {\n append(name: string, value: string | Blob, fileName?: string): void;\n delete(name: string): void;\n get(name: string): FormDataEntryValue | null;\n getAll(name: string): FormDataEntryValue[];\n has(name: string): boolean;\n set(name: string, value: string | Blob, fileName?: string): void;\n forEach(callbackfn: (value: FormDataEntryValue, key: string, parent: FormData) => void, thisArg?: any): void;\n}\n\ndeclare var FormData: {\n prototype: FormData;\n new(form?: HTMLFormElement): FormData;\n};\n\ninterface FormDataEvent extends Event {\n /** Returns a FormData object representing names and values of elements associated to the target form. Operations on the FormData object will affect form data to be submitted. */\n readonly formData: FormData;\n}\n\ndeclare var FormDataEvent: {\n prototype: FormDataEvent;\n new(type: string, eventInitDict: FormDataEventInit): FormDataEvent;\n};\n\n/** A change in volume. It is an AudioNode audio-processing module that causes a given gain to be applied to the input data before its propagation to the output. A GainNode always has exactly one input and one output, both with the same number of channels. */\ninterface GainNode extends AudioNode {\n readonly gain: AudioParam;\n}\n\ndeclare var GainNode: {\n prototype: GainNode;\n new(context: BaseAudioContext, options?: GainOptions): GainNode;\n};\n\n/**\n * This Gamepad API interface defines an individual gamepad or other controller, allowing access to information such as button presses, axis positions, and id.\n * Available only in secure contexts.\n */\ninterface Gamepad {\n readonly axes: ReadonlyArray;\n readonly buttons: ReadonlyArray;\n readonly connected: boolean;\n readonly hapticActuators: ReadonlyArray;\n readonly id: string;\n readonly index: number;\n readonly mapping: GamepadMappingType;\n readonly timestamp: DOMHighResTimeStamp;\n}\n\ndeclare var Gamepad: {\n prototype: Gamepad;\n new(): Gamepad;\n};\n\n/**\n * An individual button of a gamepad or other controller, allowing access to the current state of different types of buttons available on the control device.\n * Available only in secure contexts.\n */\ninterface GamepadButton {\n readonly pressed: boolean;\n readonly touched: boolean;\n readonly value: number;\n}\n\ndeclare var GamepadButton: {\n prototype: GamepadButton;\n new(): GamepadButton;\n};\n\n/**\n * This Gamepad API interface contains references to gamepads connected to the system, which is what the gamepad events Window.gamepadconnected and Window.gamepaddisconnected are fired in response to.\n * Available only in secure contexts.\n */\ninterface GamepadEvent extends Event {\n readonly gamepad: Gamepad;\n}\n\ndeclare var GamepadEvent: {\n prototype: GamepadEvent;\n new(type: string, eventInitDict: GamepadEventInit): GamepadEvent;\n};\n\n/** This Gamepad API interface represents hardware in the controller designed to provide haptic feedback to the user (if available), most commonly vibration hardware. */\ninterface GamepadHapticActuator {\n readonly type: GamepadHapticActuatorType;\n}\n\ndeclare var GamepadHapticActuator: {\n prototype: GamepadHapticActuator;\n new(): GamepadHapticActuator;\n};\n\ninterface GenericTransformStream {\n readonly readable: ReadableStream;\n readonly writable: WritableStream;\n}\n\n/** An object able to programmatically obtain the position of the device. It gives Web content access to the location of the device. This allows a Web site or app to offer customized results based on the user's location. */\ninterface Geolocation {\n clearWatch(watchId: number): void;\n getCurrentPosition(successCallback: PositionCallback, errorCallback?: PositionErrorCallback | null, options?: PositionOptions): void;\n watchPosition(successCallback: PositionCallback, errorCallback?: PositionErrorCallback | null, options?: PositionOptions): number;\n}\n\ndeclare var Geolocation: {\n prototype: Geolocation;\n new(): Geolocation;\n};\n\n/** Available only in secure contexts. */\ninterface GeolocationCoordinates {\n readonly accuracy: number;\n readonly altitude: number | null;\n readonly altitudeAccuracy: number | null;\n readonly heading: number | null;\n readonly latitude: number;\n readonly longitude: number;\n readonly speed: number | null;\n}\n\ndeclare var GeolocationCoordinates: {\n prototype: GeolocationCoordinates;\n new(): GeolocationCoordinates;\n};\n\n/** Available only in secure contexts. */\ninterface GeolocationPosition {\n readonly coords: GeolocationCoordinates;\n readonly timestamp: EpochTimeStamp;\n}\n\ndeclare var GeolocationPosition: {\n prototype: GeolocationPosition;\n new(): GeolocationPosition;\n};\n\ninterface GeolocationPositionError {\n readonly code: number;\n readonly message: string;\n readonly PERMISSION_DENIED: 1;\n readonly POSITION_UNAVAILABLE: 2;\n readonly TIMEOUT: 3;\n}\n\ndeclare var GeolocationPositionError: {\n prototype: GeolocationPositionError;\n new(): GeolocationPositionError;\n readonly PERMISSION_DENIED: 1;\n readonly POSITION_UNAVAILABLE: 2;\n readonly TIMEOUT: 3;\n};\n\ninterface GlobalEventHandlersEventMap {\n \"abort\": UIEvent;\n \"animationcancel\": AnimationEvent;\n \"animationend\": AnimationEvent;\n \"animationiteration\": AnimationEvent;\n \"animationstart\": AnimationEvent;\n \"auxclick\": MouseEvent;\n \"beforeinput\": InputEvent;\n \"blur\": FocusEvent;\n \"cancel\": Event;\n \"canplay\": Event;\n \"canplaythrough\": Event;\n \"change\": Event;\n \"click\": MouseEvent;\n \"close\": Event;\n \"compositionend\": CompositionEvent;\n \"compositionstart\": CompositionEvent;\n \"compositionupdate\": CompositionEvent;\n \"contextmenu\": MouseEvent;\n \"copy\": ClipboardEvent;\n \"cuechange\": Event;\n \"cut\": ClipboardEvent;\n \"dblclick\": MouseEvent;\n \"drag\": DragEvent;\n \"dragend\": DragEvent;\n \"dragenter\": DragEvent;\n \"dragleave\": DragEvent;\n \"dragover\": DragEvent;\n \"dragstart\": DragEvent;\n \"drop\": DragEvent;\n \"durationchange\": Event;\n \"emptied\": Event;\n \"ended\": Event;\n \"error\": ErrorEvent;\n \"focus\": FocusEvent;\n \"focusin\": FocusEvent;\n \"focusout\": FocusEvent;\n \"formdata\": FormDataEvent;\n \"gotpointercapture\": PointerEvent;\n \"input\": Event;\n \"invalid\": Event;\n \"keydown\": KeyboardEvent;\n \"keypress\": KeyboardEvent;\n \"keyup\": KeyboardEvent;\n \"load\": Event;\n \"loadeddata\": Event;\n \"loadedmetadata\": Event;\n \"loadstart\": Event;\n \"lostpointercapture\": PointerEvent;\n \"mousedown\": MouseEvent;\n \"mouseenter\": MouseEvent;\n \"mouseleave\": MouseEvent;\n \"mousemove\": MouseEvent;\n \"mouseout\": MouseEvent;\n \"mouseover\": MouseEvent;\n \"mouseup\": MouseEvent;\n \"paste\": ClipboardEvent;\n \"pause\": Event;\n \"play\": Event;\n \"playing\": Event;\n \"pointercancel\": PointerEvent;\n \"pointerdown\": PointerEvent;\n \"pointerenter\": PointerEvent;\n \"pointerleave\": PointerEvent;\n \"pointermove\": PointerEvent;\n \"pointerout\": PointerEvent;\n \"pointerover\": PointerEvent;\n \"pointerup\": PointerEvent;\n \"progress\": ProgressEvent;\n \"ratechange\": Event;\n \"reset\": Event;\n \"resize\": UIEvent;\n \"scroll\": Event;\n \"securitypolicyviolation\": SecurityPolicyViolationEvent;\n \"seeked\": Event;\n \"seeking\": Event;\n \"select\": Event;\n \"selectionchange\": Event;\n \"selectstart\": Event;\n \"slotchange\": Event;\n \"stalled\": Event;\n \"submit\": SubmitEvent;\n \"suspend\": Event;\n \"timeupdate\": Event;\n \"toggle\": Event;\n \"touchcancel\": TouchEvent;\n \"touchend\": TouchEvent;\n \"touchmove\": TouchEvent;\n \"touchstart\": TouchEvent;\n \"transitioncancel\": TransitionEvent;\n \"transitionend\": TransitionEvent;\n \"transitionrun\": TransitionEvent;\n \"transitionstart\": TransitionEvent;\n \"volumechange\": Event;\n \"waiting\": Event;\n \"webkitanimationend\": Event;\n \"webkitanimationiteration\": Event;\n \"webkitanimationstart\": Event;\n \"webkittransitionend\": Event;\n \"wheel\": WheelEvent;\n}\n\ninterface GlobalEventHandlers {\n /**\n * Fires when the user aborts the download.\n * @param ev The event.\n */\n onabort: ((this: GlobalEventHandlers, ev: UIEvent) => any) | null;\n onanimationcancel: ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null;\n onanimationend: ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null;\n onanimationiteration: ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null;\n onanimationstart: ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null;\n onauxclick: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;\n onbeforeinput: ((this: GlobalEventHandlers, ev: InputEvent) => any) | null;\n /**\n * Fires when the object loses the input focus.\n * @param ev The focus event.\n */\n onblur: ((this: GlobalEventHandlers, ev: FocusEvent) => any) | null;\n oncancel: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /**\n * Occurs when playback is possible, but would require further buffering.\n * @param ev The event.\n */\n oncanplay: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n oncanplaythrough: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /**\n * Fires when the contents of the object or selection have changed.\n * @param ev The event.\n */\n onchange: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /**\n * Fires when the user clicks the left mouse button on the object\n * @param ev The mouse event.\n */\n onclick: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;\n onclose: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /**\n * Fires when the user clicks the right mouse button in the client area, opening the context menu.\n * @param ev The mouse event.\n */\n oncontextmenu: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;\n oncopy: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null;\n oncuechange: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n oncut: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null;\n /**\n * Fires when the user double-clicks the object.\n * @param ev The mouse event.\n */\n ondblclick: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;\n /**\n * Fires on the source object continuously during a drag operation.\n * @param ev The event.\n */\n ondrag: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;\n /**\n * Fires on the source object when the user releases the mouse at the close of a drag operation.\n * @param ev The event.\n */\n ondragend: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;\n /**\n * Fires on the target element when the user drags the object to a valid drop target.\n * @param ev The drag event.\n */\n ondragenter: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;\n /**\n * Fires on the target object when the user moves the mouse out of a valid drop target during a drag operation.\n * @param ev The drag event.\n */\n ondragleave: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;\n /**\n * Fires on the target element continuously while the user drags the object over a valid drop target.\n * @param ev The event.\n */\n ondragover: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;\n /**\n * Fires on the source object when the user starts to drag a text selection or selected object.\n * @param ev The event.\n */\n ondragstart: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;\n ondrop: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;\n /**\n * Occurs when the duration attribute is updated.\n * @param ev The event.\n */\n ondurationchange: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /**\n * Occurs when the media element is reset to its initial state.\n * @param ev The event.\n */\n onemptied: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /**\n * Occurs when the end of playback is reached.\n * @param ev The event\n */\n onended: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /**\n * Fires when an error occurs during object loading.\n * @param ev The event.\n */\n onerror: OnErrorEventHandler;\n /**\n * Fires when the object receives focus.\n * @param ev The event.\n */\n onfocus: ((this: GlobalEventHandlers, ev: FocusEvent) => any) | null;\n onformdata: ((this: GlobalEventHandlers, ev: FormDataEvent) => any) | null;\n ongotpointercapture: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;\n oninput: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n oninvalid: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /**\n * Fires when the user presses a key.\n * @param ev The keyboard event\n */\n onkeydown: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null;\n /**\n * Fires when the user presses an alphanumeric key.\n * @param ev The event.\n * @deprecated\n */\n onkeypress: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null;\n /**\n * Fires when the user releases a key.\n * @param ev The keyboard event\n */\n onkeyup: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null;\n /**\n * Fires immediately after the browser loads the object.\n * @param ev The event.\n */\n onload: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /**\n * Occurs when media data is loaded at the current playback position.\n * @param ev The event.\n */\n onloadeddata: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /**\n * Occurs when the duration and dimensions of the media have been determined.\n * @param ev The event.\n */\n onloadedmetadata: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /**\n * Occurs when Internet Explorer begins looking for media data.\n * @param ev The event.\n */\n onloadstart: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n onlostpointercapture: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;\n /**\n * Fires when the user clicks the object with either mouse button.\n * @param ev The mouse event.\n */\n onmousedown: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;\n onmouseenter: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;\n onmouseleave: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;\n /**\n * Fires when the user moves the mouse over the object.\n * @param ev The mouse event.\n */\n onmousemove: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;\n /**\n * Fires when the user moves the mouse pointer outside the boundaries of the object.\n * @param ev The mouse event.\n */\n onmouseout: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;\n /**\n * Fires when the user moves the mouse pointer into the object.\n * @param ev The mouse event.\n */\n onmouseover: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;\n /**\n * Fires when the user releases a mouse button while the mouse is over the object.\n * @param ev The mouse event.\n */\n onmouseup: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;\n onpaste: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null;\n /**\n * Occurs when playback is paused.\n * @param ev The event.\n */\n onpause: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /**\n * Occurs when the play method is requested.\n * @param ev The event.\n */\n onplay: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /**\n * Occurs when the audio or video has started playing.\n * @param ev The event.\n */\n onplaying: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n onpointercancel: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;\n onpointerdown: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;\n onpointerenter: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;\n onpointerleave: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;\n onpointermove: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;\n onpointerout: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;\n onpointerover: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;\n onpointerup: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;\n /**\n * Occurs to indicate progress while downloading media data.\n * @param ev The event.\n */\n onprogress: ((this: GlobalEventHandlers, ev: ProgressEvent) => any) | null;\n /**\n * Occurs when the playback rate is increased or decreased.\n * @param ev The event.\n */\n onratechange: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /**\n * Fires when the user resets a form.\n * @param ev The event.\n */\n onreset: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n onresize: ((this: GlobalEventHandlers, ev: UIEvent) => any) | null;\n /**\n * Fires when the user repositions the scroll box in the scroll bar on the object.\n * @param ev The event.\n */\n onscroll: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n onsecuritypolicyviolation: ((this: GlobalEventHandlers, ev: SecurityPolicyViolationEvent) => any) | null;\n /**\n * Occurs when the seek operation ends.\n * @param ev The event.\n */\n onseeked: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /**\n * Occurs when the current playback position is moved.\n * @param ev The event.\n */\n onseeking: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /**\n * Fires when the current selection changes.\n * @param ev The event.\n */\n onselect: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n onselectionchange: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n onselectstart: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n onslotchange: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /**\n * Occurs when the download has stopped.\n * @param ev The event.\n */\n onstalled: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n onsubmit: ((this: GlobalEventHandlers, ev: SubmitEvent) => any) | null;\n /**\n * Occurs if the load operation has been intentionally halted.\n * @param ev The event.\n */\n onsuspend: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /**\n * Occurs to indicate the current playback position.\n * @param ev The event.\n */\n ontimeupdate: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n ontoggle: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n ontouchcancel?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null | undefined;\n ontouchend?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null | undefined;\n ontouchmove?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null | undefined;\n ontouchstart?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null | undefined;\n ontransitioncancel: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null;\n ontransitionend: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null;\n ontransitionrun: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null;\n ontransitionstart: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null;\n /**\n * Occurs when the volume is changed, or playback is muted or unmuted.\n * @param ev The event.\n */\n onvolumechange: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /**\n * Occurs when playback stops because the next frame of a video resource is not available.\n * @param ev The event.\n */\n onwaiting: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /** @deprecated This is a legacy alias of `onanimationend`. */\n onwebkitanimationend: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /** @deprecated This is a legacy alias of `onanimationiteration`. */\n onwebkitanimationiteration: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /** @deprecated This is a legacy alias of `onanimationstart`. */\n onwebkitanimationstart: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /** @deprecated This is a legacy alias of `ontransitionend`. */\n onwebkittransitionend: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n onwheel: ((this: GlobalEventHandlers, ev: WheelEvent) => any) | null;\n addEventListener(type: K, listener: (this: GlobalEventHandlers, ev: GlobalEventHandlersEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n removeEventListener(type: K, listener: (this: GlobalEventHandlers, ev: GlobalEventHandlersEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ninterface HTMLAllCollection {\n /** Returns the number of elements in the collection. */\n readonly length: number;\n /** Returns the item with index index from the collection (determined by tree order). */\n item(nameOrIndex?: string): HTMLCollection | Element | null;\n /**\n * Returns the item with ID or name name from the collection.\n *\n * If there are multiple matching items, then an HTMLCollection object containing all those elements is returned.\n *\n * Only button, form, iframe, input, map, meta, object, select, and textarea elements can have a name for the purpose of this method; their name is given by the value of their name attribute.\n */\n namedItem(name: string): HTMLCollection | Element | null;\n [index: number]: Element;\n}\n\ndeclare var HTMLAllCollection: {\n prototype: HTMLAllCollection;\n new(): HTMLAllCollection;\n};\n\n/** Hyperlink elements and provides special properties and methods (beyond those of the regular HTMLElement object interface that they inherit from) for manipulating the layout and presentation of such elements. */\ninterface HTMLAnchorElement extends HTMLElement, HTMLHyperlinkElementUtils {\n /**\n * Sets or retrieves the character set used to encode the object.\n * @deprecated\n */\n charset: string;\n /**\n * Sets or retrieves the coordinates of the object.\n * @deprecated\n */\n coords: string;\n download: string;\n /** Sets or retrieves the language code of the object. */\n hreflang: string;\n /**\n * Sets or retrieves the shape of the object.\n * @deprecated\n */\n name: string;\n ping: string;\n referrerPolicy: string;\n /** Sets or retrieves the relationship between the object and the destination of the link. */\n rel: string;\n readonly relList: DOMTokenList;\n /**\n * Sets or retrieves the relationship between the object and the destination of the link.\n * @deprecated\n */\n rev: string;\n /**\n * Sets or retrieves the shape of the object.\n * @deprecated\n */\n shape: string;\n /** Sets or retrieves the window or frame at which to target content. */\n target: string;\n /** Retrieves or sets the text of the object as a string. */\n text: string;\n type: string;\n addEventListener(type: K, listener: (this: HTMLAnchorElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n removeEventListener(type: K, listener: (this: HTMLAnchorElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLAnchorElement: {\n prototype: HTMLAnchorElement;\n new(): HTMLAnchorElement;\n};\n\n/** Provides special properties and methods (beyond those of the regular object HTMLElement interface it also has available to it by inheritance) for manipulating the layout and presentation of elements. */\ninterface HTMLAreaElement extends HTMLElement, HTMLHyperlinkElementUtils {\n /** Sets or retrieves a text alternative to the graphic. */\n alt: string;\n /** Sets or retrieves the coordinates of the object. */\n coords: string;\n download: string;\n /**\n * Sets or gets whether clicks in this region cause action.\n * @deprecated\n */\n noHref: boolean;\n ping: string;\n referrerPolicy: string;\n rel: string;\n readonly relList: DOMTokenList;\n /** Sets or retrieves the shape of the object. */\n shape: string;\n /** Sets or retrieves the window or frame at which to target content. */\n target: string;\n addEventListener(type: K, listener: (this: HTMLAreaElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n removeEventListener(type: K, listener: (this: HTMLAreaElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLAreaElement: {\n prototype: HTMLAreaElement;\n new(): HTMLAreaElement;\n};\n\n/** Provides access to the properties of