From 2932fa6d02964bac54be3b2e8df3c80ad84da71c Mon Sep 17 00:00:00 2001 From: Bart Huijgen Date: Sun, 10 Jan 2021 22:03:07 +0100 Subject: [PATCH] Add FBE editor for in-browser image rendering, ported database to postgres, updated packages --- .gitignore | 4 +- .yarnrc | 2 +- apps/blueprints/.babelrc | 14 +- apps/blueprints/.eslintrc.json | 11 +- apps/blueprints/next-env.d.ts | 1 + apps/blueprints/public/basis_transcoder.js | 1261 ++++++ apps/blueprints/public/basis_transcoder.wasm | Bin 0 -> 447033 bytes .../src/{ => components}/BookChildTree.tsx | 8 +- .../src/{ => components}/CopyButton.tsx | 0 .../src/{ => components}/FullscreenImage.tsx | 4 +- .../src/{ => components}/Header.tsx | 0 .../blueprints/src/components/ImageEditor.tsx | 72 + .../src/{ => components}/Markdown.tsx | 4 +- .../src/{ => components}/Pagination.tsx | 2 - .../blueprints/src/{ => components}/Panel.tsx | 3 +- apps/blueprints/{ => src}/pages/_app.tsx | 7 +- apps/blueprints/src/pages/api/db.ts | 15 + .../src/pages/api/fbe-proxy/[...proxy].ts | 32 + .../{ => src}/pages/api/image-to-gen.ts | 0 .../{ => src}/pages/api/string/[hash].ts | 0 .../pages/blueprint}/[blueprintId].tsx | 41 +- apps/blueprints/{ => src}/pages/index.tsx | 14 +- apps/blueprints/tsconfig.json | 4 +- .../src/app/populate-db.ts | 2 +- .../src/environments/environment.ts | 8 + apps/factorioprints-scraper/src/main.ts | 17 +- docker/factorio-blueprints/docker-compose.yml | 26 + docker/factorio-blueprints/pgadmin.env | 3 + docker/factorio-blueprints/postgres.env | 3 + libs/common-utils/src/lib/common-utils.ts | 50 +- libs/database/jest.config.js | 1 + libs/database/src/index.ts | 4 +- libs/database/src/lib/data/blueprint.ts | 85 + libs/database/src/lib/data/blueprint_book.ts | 97 + libs/database/src/lib/data/blueprint_page.ts | 63 + libs/database/src/lib/data/factorioprints.ts | 50 + libs/database/src/lib/data/index.ts | 4 + .../src/lib/datastore/gcp-datastore.ts | 438 ++ libs/database/src/lib/gcp-datastore.ts | 438 -- libs/database/src/lib/postgres/connection.ts | 16 - libs/database/src/lib/postgres/database.ts | 61 + libs/database/src/lib/postgres/entities.ts | 37 - .../src/lib/postgres/models/Blueprint.ts | 67 + .../src/lib/postgres/models/BlueprintBook.ts | 55 + .../src/lib/postgres/models/BlueprintPage.ts | 48 + .../lib/postgres/models/BlueprintString.ts | 52 + .../database/src/lib/postgres/models/index.ts | 4 + libs/database/src/lib/postgres/sequelize.ts | 16 + libs/database/src/lib/types.ts | 28 +- libs/node-utils/src/lib/node-utils.ts | 6 +- libs/web-utils/src/lib/web-utils.ts | 6 +- package.json | 107 +- yalc.lock | 9 + yarn.lock | 3748 ++++++++++------- 54 files changed, 4909 insertions(+), 2139 deletions(-) create mode 100644 apps/blueprints/public/basis_transcoder.js create mode 100644 apps/blueprints/public/basis_transcoder.wasm rename apps/blueprints/src/{ => components}/BookChildTree.tsx (86%) rename apps/blueprints/src/{ => components}/CopyButton.tsx (100%) rename apps/blueprints/src/{ => components}/FullscreenImage.tsx (91%) rename apps/blueprints/src/{ => components}/Header.tsx (100%) create mode 100644 apps/blueprints/src/components/ImageEditor.tsx rename apps/blueprints/src/{ => components}/Markdown.tsx (81%) rename apps/blueprints/src/{ => components}/Pagination.tsx (94%) rename apps/blueprints/src/{ => components}/Panel.tsx (94%) rename apps/blueprints/{ => src}/pages/_app.tsx (97%) create mode 100644 apps/blueprints/src/pages/api/db.ts create mode 100644 apps/blueprints/src/pages/api/fbe-proxy/[...proxy].ts rename apps/blueprints/{ => src}/pages/api/image-to-gen.ts (100%) rename apps/blueprints/{ => src}/pages/api/string/[hash].ts (100%) rename apps/blueprints/{pages/[blueprint] => src/pages/blueprint}/[blueprintId].tsx (90%) rename apps/blueprints/{ => src}/pages/index.tsx (73%) create mode 100644 docker/factorio-blueprints/docker-compose.yml create mode 100644 docker/factorio-blueprints/pgadmin.env create mode 100644 docker/factorio-blueprints/postgres.env create mode 100644 libs/database/src/lib/data/blueprint.ts create mode 100644 libs/database/src/lib/data/blueprint_book.ts create mode 100644 libs/database/src/lib/data/blueprint_page.ts create mode 100644 libs/database/src/lib/data/factorioprints.ts create mode 100644 libs/database/src/lib/data/index.ts create mode 100644 libs/database/src/lib/datastore/gcp-datastore.ts delete mode 100644 libs/database/src/lib/gcp-datastore.ts delete mode 100644 libs/database/src/lib/postgres/connection.ts create mode 100644 libs/database/src/lib/postgres/database.ts delete mode 100644 libs/database/src/lib/postgres/entities.ts create mode 100644 libs/database/src/lib/postgres/models/Blueprint.ts create mode 100644 libs/database/src/lib/postgres/models/BlueprintBook.ts create mode 100644 libs/database/src/lib/postgres/models/BlueprintPage.ts create mode 100644 libs/database/src/lib/postgres/models/BlueprintString.ts create mode 100644 libs/database/src/lib/postgres/models/index.ts create mode 100644 libs/database/src/lib/postgres/sequelize.ts create mode 100644 yalc.lock diff --git a/.gitignore b/.gitignore index 6399a89..662864e 100644 --- a/.gitignore +++ b/.gitignore @@ -41,4 +41,6 @@ Thumbs.db # custom /.cache /credentials -.env.local \ No newline at end of file +.env.local +.local.env +/.yalc \ No newline at end of file diff --git a/.yarnrc b/.yarnrc index 7f1b61d..0b38d98 100644 --- a/.yarnrc +++ b/.yarnrc @@ -1 +1 @@ -save-prefix= \ No newline at end of file +save-prefix "" \ No newline at end of file diff --git a/apps/blueprints/.babelrc b/apps/blueprints/.babelrc index 9fcef03..0da40e7 100644 --- a/apps/blueprints/.babelrc +++ b/apps/blueprints/.babelrc @@ -1,4 +1,14 @@ { - "presets": ["next/babel"], - "plugins": [] + "presets": [ + [ + "next/babel", + { + "preset-react": { + "runtime": "automatic", + "importSource": "@emotion/react" + } + } + ] + ], + "plugins": ["@emotion/babel-plugin"] } diff --git a/apps/blueprints/.eslintrc.json b/apps/blueprints/.eslintrc.json index 055943f..c1c049e 100644 --- a/apps/blueprints/.eslintrc.json +++ b/apps/blueprints/.eslintrc.json @@ -187,14 +187,21 @@ "react/no-direct-mutation-state": "warn", "react/no-is-mounted": "warn", "react/no-typos": "error", - "react/react-in-jsx-scope": "error", + "react/react-in-jsx-scope": "off", "react/require-render-return": "error", "react/style-prop-object": "warn", "react/jsx-no-useless-fragment": "warn", "jsx-a11y/accessible-emoji": "warn", "jsx-a11y/alt-text": "warn", "jsx-a11y/anchor-has-content": "warn", - "jsx-a11y/anchor-is-valid": ["warn", { "aspects": ["noHref", "invalidHref"] }], + "jsx-a11y/anchor-is-valid": [ + "warn", + { + "components": ["Link"], + "specialLink": ["hrefLeft", "hrefRight"], + "aspects": ["noHref", "invalidHref", "preferButton"] + } + ], "jsx-a11y/aria-activedescendant-has-tabindex": "warn", "jsx-a11y/aria-props": "warn", "jsx-a11y/aria-proptypes": "warn", diff --git a/apps/blueprints/next-env.d.ts b/apps/blueprints/next-env.d.ts index 7b7aa2c..6bd2980 100644 --- a/apps/blueprints/next-env.d.ts +++ b/apps/blueprints/next-env.d.ts @@ -1,2 +1,3 @@ /// /// +/// diff --git a/apps/blueprints/public/basis_transcoder.js b/apps/blueprints/public/basis_transcoder.js new file mode 100644 index 0000000..9b98511 --- /dev/null +++ b/apps/blueprints/public/basis_transcoder.js @@ -0,0 +1,1261 @@ +/* eslint-disable */ + +// Copyright (C) 2019 Binomial LLC. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// https://github.com/BinomialLLC/basis_universal/blob/master/webgl/transcoder/build/basis_transcoder.js + +var BASIS = (function () +{ + let _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; + + if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename; + + return ( + function (BASIS) + { + BASIS = BASIS || {}; + + const Module = typeof BASIS !== 'undefined' ? BASIS : {}; let moduleOverrides = {}; let key; + + for (key in Module) { if (Module.hasOwnProperty(key)) { moduleOverrides[key] = Module[key]; } } let arguments_ = []; let thisProgram = './this.program'; let quit_ = function (status, toThrow) { throw toThrow; }; let ENVIRONMENT_IS_WEB = false; let ENVIRONMENT_IS_WORKER = false; let ENVIRONMENT_IS_NODE = false; let ENVIRONMENT_IS_SHELL = false; + + ENVIRONMENT_IS_WEB = typeof window === 'object'; ENVIRONMENT_IS_WORKER = typeof importScripts === 'function'; ENVIRONMENT_IS_NODE = typeof process === 'object' && typeof process.versions === 'object' && typeof process.versions.node === 'string'; ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; let scriptDirectory = ''; + + function locateFile(path) + { + if (Module.locateFile) { return Module.locateFile(path, scriptDirectory); } + + return scriptDirectory + path; + } let read_; let readAsync; let readBinary; let setWindowTitle; let nodeFS; let nodePath; + + if (ENVIRONMENT_IS_NODE) + { + if (ENVIRONMENT_IS_WORKER) { scriptDirectory = `${require('path').dirname(scriptDirectory)}/`; } + else { scriptDirectory = `${__dirname}/`; }read_ = function shell_read(filename, binary) + { + if (!nodeFS)nodeFS = require('fs'); if (!nodePath)nodePath = require('path'); filename = nodePath.normalize(filename); + + return nodeFS.readFileSync(filename, binary ? null : 'utf8'); + }; readBinary = function readBinary(filename) + { + let ret = read_(filename, true); + + if (!ret.buffer) { ret = new Uint8Array(ret); }assert(ret.buffer); + + return ret; + }; if (process.argv.length > 1) { thisProgram = process.argv[1].replace(/\\/g, '/'); }arguments_ = process.argv.slice(2); process.on('uncaughtException', function (ex) { if (!(ex instanceof ExitStatus)) { throw ex; } }); process.on('unhandledRejection', abort); quit_ = function (status) { process.exit(status); }; Module.inspect = function () { return '[Emscripten Module object]'; }; + } + else if (ENVIRONMENT_IS_SHELL) + { + if (typeof read !== 'undefined') { read_ = function shell_read(f) { return read(f); }; }readBinary = function readBinary(f) + { + let data; + + if (typeof readbuffer === 'function') { return new Uint8Array(readbuffer(f)); }data = read(f, 'binary'); assert(typeof data === 'object'); + + return data; + }; if (typeof scriptArgs !== 'undefined') { arguments_ = scriptArgs; } + else if (typeof arguments !== 'undefined') { arguments_ = arguments; } if (typeof quit === 'function') { quit_ = function (status) { quit(status); }; } if (typeof print !== 'undefined') { if (typeof console === 'undefined')console = {}; console.log = print; console.warn = console.error = typeof printErr !== 'undefined' ? printErr : print; } + } + else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) + { + if (ENVIRONMENT_IS_WORKER) { scriptDirectory = self.location.href; } + else if (document.currentScript) { scriptDirectory = document.currentScript.src; } if (_scriptDir) { scriptDirectory = _scriptDir; } if (scriptDirectory.indexOf('blob:') !== 0) { scriptDirectory = scriptDirectory.substr(0, scriptDirectory.lastIndexOf('/') + 1); } + else { scriptDirectory = ''; } { read_ = function shell_read(url) + { + const xhr = new XMLHttpRequest(); + + xhr.open('GET', url, false); xhr.send(null); + + return xhr.responseText; + }; if (ENVIRONMENT_IS_WORKER) + { + readBinary = function readBinary(url) + { + const xhr = new XMLHttpRequest(); + + xhr.open('GET', url, false); xhr.responseType = 'arraybuffer'; xhr.send(null); + + return new Uint8Array(xhr.response); + }; + }readAsync = function readAsync(url, onload, onerror) + { + const xhr = new XMLHttpRequest(); + + xhr.open('GET', url, true); xhr.responseType = 'arraybuffer'; xhr.onload = function xhr_onload() + { + if (xhr.status == 200 || xhr.status == 0 && xhr.response) + { + onload(xhr.response); + + return; + }onerror(); + }; xhr.onerror = onerror; xhr.send(null); + }; }setWindowTitle = function (title) { document.title = title; }; + } + else {} const out = Module.print || console.log.bind(console); const err = Module.printErr || console.warn.bind(console); + + for (key in moduleOverrides) { if (moduleOverrides.hasOwnProperty(key)) { Module[key] = moduleOverrides[key]; } }moduleOverrides = null; if (Module.arguments)arguments_ = Module.arguments; if (Module.thisProgram)thisProgram = Module.thisProgram; if (Module.quit)quit_ = Module.quit; let tempRet0 = 0; const setTempRet0 = function (value) { tempRet0 = value; }; let wasmBinary; + + if (Module.wasmBinary)wasmBinary = Module.wasmBinary; let noExitRuntime; + + if (Module.noExitRuntime)noExitRuntime = Module.noExitRuntime; if (typeof WebAssembly !== 'object') { err('no native wasm support detected'); } let wasmMemory; const wasmTable = new WebAssembly.Table({ initial: 59, maximum: 59 + 0, element: 'anyfunc' }); let ABORT = false; let EXITSTATUS = 0; + + function assert(condition, text) { if (!condition) { abort(`Assertion failed: ${text}`); } } const UTF8Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf8') : undefined; + + function UTF8ArrayToString(u8Array, idx, maxBytesToRead) + { + const endIdx = idx + maxBytesToRead; let endPtr = idx; + + while (u8Array[endPtr] && !(endPtr >= endIdx))++endPtr; if (endPtr - idx > 16 && u8Array.subarray && UTF8Decoder) { return UTF8Decoder.decode(u8Array.subarray(idx, endPtr)); } + + let str = ''; + + while (idx < endPtr) + { + let u0 = u8Array[idx++]; + + if (!(u0 & 128)) { str += String.fromCharCode(u0); continue; } const u1 = u8Array[idx++] & 63; + + if ((u0 & 224) == 192) { str += String.fromCharCode((u0 & 31) << 6 | u1); continue; } const u2 = u8Array[idx++] & 63; + + if ((u0 & 240) == 224) { u0 = (u0 & 15) << 12 | u1 << 6 | u2; } + else { u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | u8Array[idx++] & 63; } if (u0 < 65536) { str += String.fromCharCode(u0); } + else + { + const ch = u0 - 65536; + + str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023); + } + } + + return str; + } function UTF8ToString(ptr, maxBytesToRead) { return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : ''; } function stringToUTF8Array(str, outU8Array, outIdx, maxBytesToWrite) + { + if (!(maxBytesToWrite > 0)) return 0; const startIdx = outIdx; const endIdx = outIdx + maxBytesToWrite - 1; + + for (let i = 0; i < str.length; ++i) + { + let u = str.charCodeAt(i); + + if (u >= 55296 && u <= 57343) + { + const u1 = str.charCodeAt(++i); + + u = 65536 + ((u & 1023) << 10) | u1 & 1023; + } if (u <= 127) { if (outIdx >= endIdx) break; outU8Array[outIdx++] = u; } + else if (u <= 2047) { if (outIdx + 1 >= endIdx) break; outU8Array[outIdx++] = 192 | u >> 6; outU8Array[outIdx++] = 128 | u & 63; } + else if (u <= 65535) { if (outIdx + 2 >= endIdx) break; outU8Array[outIdx++] = 224 | u >> 12; outU8Array[outIdx++] = 128 | u >> 6 & 63; outU8Array[outIdx++] = 128 | u & 63; } + else { if (outIdx + 3 >= endIdx) break; outU8Array[outIdx++] = 240 | u >> 18; outU8Array[outIdx++] = 128 | u >> 12 & 63; outU8Array[outIdx++] = 128 | u >> 6 & 63; outU8Array[outIdx++] = 128 | u & 63; } + }outU8Array[outIdx] = 0; + + return outIdx - startIdx; + } function stringToUTF8(str, outPtr, maxBytesToWrite) { return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite); } function lengthBytesUTF8(str) + { + let len = 0; + + for (let i = 0; i < str.length; ++i) + { + let u = str.charCodeAt(i); + + if (u >= 55296 && u <= 57343)u = 65536 + ((u & 1023) << 10) | str.charCodeAt(++i) & 1023; if (u <= 127)++len; else if (u <= 2047)len += 2; else if (u <= 65535)len += 3; else len += 4; + } + + return len; + } const UTF16Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-16le') : undefined; + + function UTF16ToString(ptr) + { + let endPtr = ptr; let idx = endPtr >> 1; + + while (HEAP16[idx])++idx; endPtr = idx << 1; if (endPtr - ptr > 32 && UTF16Decoder) { return UTF16Decoder.decode(HEAPU8.subarray(ptr, endPtr)); } + + let i = 0; let str = ''; + + while (1) + { + const codeUnit = HEAP16[ptr + i * 2 >> 1]; + + if (codeUnit == 0) return str; ++i; str += String.fromCharCode(codeUnit); + } + } function stringToUTF16(str, outPtr, maxBytesToWrite) + { + if (maxBytesToWrite === undefined) { maxBytesToWrite = 2147483647; } if (maxBytesToWrite < 2) return 0; maxBytesToWrite -= 2; const startPtr = outPtr; const numCharsToWrite = maxBytesToWrite < str.length * 2 ? maxBytesToWrite / 2 : str.length; + + for (let i = 0; i < numCharsToWrite; ++i) + { + const codeUnit = str.charCodeAt(i); + + HEAP16[outPtr >> 1] = codeUnit; outPtr += 2; + }HEAP16[outPtr >> 1] = 0; + + return outPtr - startPtr; + } function lengthBytesUTF16(str) { return str.length * 2; } function UTF32ToString(ptr) + { + let i = 0; let str = ''; + + while (1) + { + const utf32 = HEAP32[ptr + i * 4 >> 2]; + + if (utf32 == 0) return str; ++i; if (utf32 >= 65536) + { + const ch = utf32 - 65536; + + str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023); + } + else { str += String.fromCharCode(utf32); } + } + } function stringToUTF32(str, outPtr, maxBytesToWrite) + { + if (maxBytesToWrite === undefined) { maxBytesToWrite = 2147483647; } if (maxBytesToWrite < 4) return 0; const startPtr = outPtr; const endPtr = startPtr + maxBytesToWrite - 4; + + for (let i = 0; i < str.length; ++i) + { + let codeUnit = str.charCodeAt(i); + + if (codeUnit >= 55296 && codeUnit <= 57343) + { + const trailSurrogate = str.charCodeAt(++i); + + codeUnit = 65536 + ((codeUnit & 1023) << 10) | trailSurrogate & 1023; + }HEAP32[outPtr >> 2] = codeUnit; outPtr += 4; if (outPtr + 4 > endPtr) break; + }HEAP32[outPtr >> 2] = 0; + + return outPtr - startPtr; + } function lengthBytesUTF32(str) + { + let len = 0; + + for (let i = 0; i < str.length; ++i) + { + const codeUnit = str.charCodeAt(i); + + if (codeUnit >= 55296 && codeUnit <= 57343)++i; len += 4; + } + + return len; + } const WASM_PAGE_SIZE = 65536; + + function alignUp(x, multiple) + { + if (x % multiple > 0) { x += multiple - x % multiple; } + + return x; + } let buffer; let HEAP8; let HEAPU8; let HEAP16; let HEAPU16; let HEAP32; let HEAPU32; let HEAPF32; let HEAPF64; + + function updateGlobalBufferAndViews(buf) { buffer = buf; Module.HEAP8 = HEAP8 = new Int8Array(buf); Module.HEAP16 = HEAP16 = new Int16Array(buf); Module.HEAP32 = HEAP32 = new Int32Array(buf); Module.HEAPU8 = HEAPU8 = new Uint8Array(buf); Module.HEAPU16 = HEAPU16 = new Uint16Array(buf); Module.HEAPU32 = HEAPU32 = new Uint32Array(buf); Module.HEAPF32 = HEAPF32 = new Float32Array(buf); Module.HEAPF64 = HEAPF64 = new Float64Array(buf); } const DYNAMIC_BASE = 5561216; const DYNAMICTOP_PTR = 318176; let INITIAL_INITIAL_MEMORY = Module.INITIAL_MEMORY || 16777216; + + if (Module.wasmMemory) { wasmMemory = Module.wasmMemory; } + else { wasmMemory = new WebAssembly.Memory({ initial: INITIAL_INITIAL_MEMORY / WASM_PAGE_SIZE }); } if (wasmMemory) { buffer = wasmMemory.buffer; }INITIAL_INITIAL_MEMORY = buffer.byteLength; updateGlobalBufferAndViews(buffer); HEAP32[DYNAMICTOP_PTR >> 2] = DYNAMIC_BASE; function callRuntimeCallbacks(callbacks) + { + while (callbacks.length > 0) + { + const callback = callbacks.shift(); + + if (typeof callback === 'function') { callback(); continue; } const func = callback.func; + + if (typeof func === 'number') + { + if (callback.arg === undefined) { Module.dynCall_v(func); } + else { Module.dynCall_vi(func, callback.arg); } + } + else { func(callback.arg === undefined ? null : callback.arg); } + } + } const __ATPRERUN__ = []; const __ATINIT__ = []; const __ATMAIN__ = []; const __ATPOSTRUN__ = []; let runtimeInitialized = false; + + function preRun() { if (Module.preRun) { if (typeof Module.preRun === 'function')Module.preRun = [Module.preRun]; while (Module.preRun.length) { addOnPreRun(Module.preRun.shift()); } }callRuntimeCallbacks(__ATPRERUN__); } function initRuntime() { runtimeInitialized = true; callRuntimeCallbacks(__ATINIT__); } function preMain() { callRuntimeCallbacks(__ATMAIN__); } function postRun() { if (Module.postRun) { if (typeof Module.postRun === 'function')Module.postRun = [Module.postRun]; while (Module.postRun.length) { addOnPostRun(Module.postRun.shift()); } }callRuntimeCallbacks(__ATPOSTRUN__); } function addOnPreRun(cb) { __ATPRERUN__.unshift(cb); } function addOnPostRun(cb) { __ATPOSTRUN__.unshift(cb); } const Math_ceil = Math.ceil; const Math_floor = Math.floor; let runDependencies = 0; let runDependencyWatcher = null; let dependenciesFulfilled = null; + + function addRunDependency(id) { runDependencies++; if (Module.monitorRunDependencies) { Module.monitorRunDependencies(runDependencies); } } function removeRunDependency(id) + { + runDependencies--; if (Module.monitorRunDependencies) { Module.monitorRunDependencies(runDependencies); } if (runDependencies == 0) + { + if (runDependencyWatcher !== null) { clearInterval(runDependencyWatcher); runDependencyWatcher = null; } if (dependenciesFulfilled) + { + const callback = dependenciesFulfilled; + + dependenciesFulfilled = null; callback(); + } + } + }Module.preloadedImages = {}; Module.preloadedAudios = {}; function abort(what) { if (Module.onAbort) { Module.onAbort(what); }what = String(what); out(what); err(what); ABORT = true; EXITSTATUS = 1; what = `abort(${what}). Build with -s ASSERTIONS=1 for more info.`; throw new WebAssembly.RuntimeError(what); } const dataURIPrefix = 'data:application/octet-stream;base64,'; + + function isDataURI(filename) { return String.prototype.startsWith ? filename.startsWith(dataURIPrefix) : filename.indexOf(dataURIPrefix) === 0; } let wasmBinaryFile = 'basis_transcoder.wasm'; + + if (!isDataURI(wasmBinaryFile)) { wasmBinaryFile = locateFile(wasmBinaryFile); } function getBinary() + { + try + { + if (wasmBinary) { return new Uint8Array(wasmBinary); } if (readBinary) { return readBinary(wasmBinaryFile); } + throw 'both async and sync fetching of the wasm failed'; + } + catch (err) { abort(err); } + } function getBinaryPromise() + { + if (!wasmBinary && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) && typeof fetch === 'function') + { + return fetch(wasmBinaryFile, { credentials: 'same-origin' }).then(function (response) + { + if (!response.ok) { throw `failed to load wasm binary file at '${wasmBinaryFile}'`; } + + return response.arrayBuffer(); + }).catch(function () { return getBinary(); }); + } + + return new Promise(function (resolve, reject) { resolve(getBinary()); }); + } function createWasm() + { + const info = { a: asmLibraryArg }; + + function receiveInstance(instance, module) + { + const exports = instance.exports; + + Module.asm = exports; removeRunDependency('wasm-instantiate'); + }addRunDependency('wasm-instantiate'); function receiveInstantiatedSource(output) { receiveInstance(output.instance); } function instantiateArrayBuffer(receiver) { return getBinaryPromise().then(function (binary) { return WebAssembly.instantiate(binary, info); }).then(receiver, function (reason) { err(`failed to asynchronously prepare wasm: ${reason}`); abort(reason); }); } function instantiateAsync() + { + if (!wasmBinary && typeof WebAssembly.instantiateStreaming === 'function' && !isDataURI(wasmBinaryFile) && typeof fetch === 'function') + { + fetch(wasmBinaryFile, { credentials: 'same-origin' }).then(function (response) + { + const result = WebAssembly.instantiateStreaming(response, info); + + return result.then(receiveInstantiatedSource, function (reason) { err(`wasm streaming compile failed: ${reason}`); err('falling back to ArrayBuffer instantiation'); instantiateArrayBuffer(receiveInstantiatedSource); }); + }); + } + else { return instantiateArrayBuffer(receiveInstantiatedSource); } + } if (Module.instantiateWasm) + { + try + { + const exports = Module.instantiateWasm(info, receiveInstance); + + return exports; + } + catch (e) + { + err(`Module.instantiateWasm callback failed with error: ${e}`); + + return false; + } + }instantiateAsync(); + + return {}; + }__ATINIT__.push({ func() { ___wasm_call_ctors(); } }); function ___cxa_allocate_exception(size) { return _malloc(size); } const ___exception_infos = {}; let ___exception_last = 0; + + function __ZSt18uncaught_exceptionv() { return __ZSt18uncaught_exceptionv.uncaught_exceptions > 0; } function ___cxa_throw(ptr, type, destructor) + { + ___exception_infos[ptr] = { ptr, adjusted: [ptr], type, destructor, refcount: 0, caught: false, rethrown: false }; ___exception_last = ptr; if (!('uncaught_exception' in __ZSt18uncaught_exceptionv)) { __ZSt18uncaught_exceptionv.uncaught_exceptions = 1; } + else { __ZSt18uncaught_exceptionv.uncaught_exceptions++; } throw ptr; + } function getShiftFromSize(size) { switch (size) { case 1:return 0; case 2:return 1; case 4:return 2; case 8:return 3; default:throw new TypeError(`Unknown type size: ${size}`); } } function embind_init_charCodes() + { + const codes = new Array(256); + + for (let i = 0; i < 256; ++i) { codes[i] = String.fromCharCode(i); }embind_charCodes = codes; + } var embind_charCodes = undefined; + + function readLatin1String(ptr) + { + let ret = ''; let c = ptr; + + while (HEAPU8[c]) { ret += embind_charCodes[HEAPU8[c++]]; } + + return ret; + } const awaitingDependencies = {}; const registeredTypes = {}; const typeDependencies = {}; const char_0 = 48; const char_9 = 57; + + function makeLegalFunctionName(name) + { + if (undefined === name) { return '_unknown'; }name = name.replace(/[^a-zA-Z0-9_]/g, '$'); const f = name.charCodeAt(0); + + if (f >= char_0 && f <= char_9) { return `_${name}`; } + + return name; + } function createNamedFunction(name, body) + { + name = makeLegalFunctionName(name); + + return new Function('body', `return function ${name}() {\n` + ` "use strict";` + ` return body.apply(this, arguments);\n` + `};\n`)(body); + } function extendError(baseErrorType, errorName) + { + const errorClass = createNamedFunction(errorName, function (message) + { + this.name = errorName; this.message = message; const stack = new Error(message).stack; + + if (stack !== undefined) { this.stack = `${this.toString()}\n${stack.replace(/^Error(:[^\n]*)?\n/, '')}`; } + }); + + errorClass.prototype = Object.create(baseErrorType.prototype); errorClass.prototype.constructor = errorClass; errorClass.prototype.toString = function () + { + if (this.message === undefined) { return this.name; } + + return `${this.name}: ${this.message}`; + }; + + return errorClass; + } let BindingError; + + function throwBindingError(message) { throw new BindingError(message); } let InternalError; + + function throwInternalError(message) { throw new InternalError(message); } function whenDependentTypesAreResolved(myTypes, dependentTypes, getTypeConverters) + { + myTypes.forEach(function (type) { typeDependencies[type] = dependentTypes; }); function onComplete(typeConverters) + { + const myTypeConverters = getTypeConverters(typeConverters); + + if (myTypeConverters.length !== myTypes.length) { throwInternalError('Mismatched type converter count'); } for (let i = 0; i < myTypes.length; ++i) { registerType(myTypes[i], myTypeConverters[i]); } + } const typeConverters = new Array(dependentTypes.length); const unregisteredTypes = []; let registered = 0; + + dependentTypes.forEach(function (dt, i) + { + if (registeredTypes.hasOwnProperty(dt)) { typeConverters[i] = registeredTypes[dt]; } + else { unregisteredTypes.push(dt); if (!awaitingDependencies.hasOwnProperty(dt)) { awaitingDependencies[dt] = []; }awaitingDependencies[dt].push(function () { typeConverters[i] = registeredTypes[dt]; ++registered; if (registered === unregisteredTypes.length) { onComplete(typeConverters); } }); } + }); if (unregisteredTypes.length === 0) { onComplete(typeConverters); } + } function registerType(rawType, registeredInstance, options) + { + options = options || {}; if (!('argPackAdvance' in registeredInstance)) { throw new TypeError('registerType registeredInstance requires argPackAdvance'); } const name = registeredInstance.name; + + if (!rawType) { throwBindingError(`type "${name}" must have a positive integer typeid pointer`); } if (registeredTypes.hasOwnProperty(rawType)) + { + if (options.ignoreDuplicateRegistrations) { return; } + throwBindingError(`Cannot register type '${name}' twice`); + }registeredTypes[rawType] = registeredInstance; delete typeDependencies[rawType]; if (awaitingDependencies.hasOwnProperty(rawType)) + { + const callbacks = awaitingDependencies[rawType]; + + delete awaitingDependencies[rawType]; callbacks.forEach(function (cb) { cb(); }); + } + } function __embind_register_bool(rawType, name, size, trueValue, falseValue) + { + const shift = getShiftFromSize(size); + + name = readLatin1String(name); registerType(rawType, { name, fromWireType(wt) { return !!wt; }, toWireType(destructors, o) { return o ? trueValue : falseValue; }, argPackAdvance: 8, readValueFromPointer(pointer) + { + let heap; + + if (size === 1) { heap = HEAP8; } + else if (size === 2) { heap = HEAP16; } + else if (size === 4) { heap = HEAP32; } + else { throw new TypeError(`Unknown boolean type size: ${name}`); } + + return this.fromWireType(heap[pointer >> shift]); + }, destructorFunction: null }); + } function ClassHandle_isAliasOf(other) + { + if (!(this instanceof ClassHandle)) { return false; } if (!(other instanceof ClassHandle)) { return false; } let leftClass = this.$$.ptrType.registeredClass; let left = this.$$.ptr; let rightClass = other.$$.ptrType.registeredClass; let right = other.$$.ptr; + + while (leftClass.baseClass) { left = leftClass.upcast(left); leftClass = leftClass.baseClass; } while (rightClass.baseClass) { right = rightClass.upcast(right); rightClass = rightClass.baseClass; } + + return leftClass === rightClass && left === right; + } function shallowCopyInternalPointer(o) { return { count: o.count, deleteScheduled: o.deleteScheduled, preservePointerOnDelete: o.preservePointerOnDelete, ptr: o.ptr, ptrType: o.ptrType, smartPtr: o.smartPtr, smartPtrType: o.smartPtrType }; } function throwInstanceAlreadyDeleted(obj) { function getInstanceTypeName(handle) { return handle.$$.ptrType.registeredClass.name; }throwBindingError(`${getInstanceTypeName(obj)} instance already deleted`); } let finalizationGroup = false; + + function detachFinalizer(handle) {} function runDestructor($$) + { + if ($$.smartPtr) { $$.smartPtrType.rawDestructor($$.smartPtr); } + else { $$.ptrType.registeredClass.rawDestructor($$.ptr); } + } function releaseClassHandle($$) + { + $$.count.value -= 1; const toDelete = $$.count.value === 0; + + if (toDelete) { runDestructor($$); } + } function attachFinalizer(handle) + { + if (typeof FinalizationGroup === 'undefined') + { + attachFinalizer = function (handle) { return handle; }; + + return handle; + }finalizationGroup = new FinalizationGroup(function (iter) + { + for (let result = iter.next(); !result.done; result = iter.next()) + { + const $$ = result.value; + + if (!$$.ptr) { console.warn(`object already deleted: ${$$.ptr}`); } + else { releaseClassHandle($$); } + } + }); attachFinalizer = function (handle) + { + finalizationGroup.register(handle, handle.$$, handle.$$); + + return handle; + }; detachFinalizer = function (handle) { finalizationGroup.unregister(handle.$$); }; + + return attachFinalizer(handle); + } function ClassHandle_clone() + { + if (!this.$$.ptr) { throwInstanceAlreadyDeleted(this); } if (this.$$.preservePointerOnDelete) + { + this.$$.count.value += 1; + + return this; + } + const clone = attachFinalizer(Object.create(Object.getPrototypeOf(this), { $$: { value: shallowCopyInternalPointer(this.$$) } })); + + clone.$$.count.value += 1; clone.$$.deleteScheduled = false; + + return clone; + } function ClassHandle_delete() { if (!this.$$.ptr) { throwInstanceAlreadyDeleted(this); } if (this.$$.deleteScheduled && !this.$$.preservePointerOnDelete) { throwBindingError('Object already scheduled for deletion'); }detachFinalizer(this); releaseClassHandle(this.$$); if (!this.$$.preservePointerOnDelete) { this.$$.smartPtr = undefined; this.$$.ptr = undefined; } } function ClassHandle_isDeleted() { return !this.$$.ptr; } let delayFunction; const deletionQueue = []; + + function flushPendingDeletes() + { + while (deletionQueue.length) + { + const obj = deletionQueue.pop(); + + obj.$$.deleteScheduled = false; obj.delete(); + } + } function ClassHandle_deleteLater() + { + if (!this.$$.ptr) { throwInstanceAlreadyDeleted(this); } if (this.$$.deleteScheduled && !this.$$.preservePointerOnDelete) { throwBindingError('Object already scheduled for deletion'); }deletionQueue.push(this); if (deletionQueue.length === 1 && delayFunction) { delayFunction(flushPendingDeletes); } this.$$.deleteScheduled = true; + + return this; + } function init_ClassHandle() { ClassHandle.prototype.isAliasOf = ClassHandle_isAliasOf; ClassHandle.prototype.clone = ClassHandle_clone; ClassHandle.prototype.delete = ClassHandle_delete; ClassHandle.prototype.isDeleted = ClassHandle_isDeleted; ClassHandle.prototype.deleteLater = ClassHandle_deleteLater; } function ClassHandle() {} const registeredPointers = {}; + + function ensureOverloadTable(proto, methodName, humanName) + { + if (undefined === proto[methodName].overloadTable) + { + const prevFunc = proto[methodName]; + + proto[methodName] = function () + { + if (!proto[methodName].overloadTable.hasOwnProperty(arguments.length)) { throwBindingError(`Function '${humanName}' called with an invalid number of arguments (${arguments.length}) - expects one of (${proto[methodName].overloadTable})!`); } + + return proto[methodName].overloadTable[arguments.length].apply(this, arguments); + }; proto[methodName].overloadTable = []; proto[methodName].overloadTable[prevFunc.argCount] = prevFunc; + } + } function exposePublicSymbol(name, value, numArguments) + { + if (Module.hasOwnProperty(name)) { if (undefined === numArguments || undefined !== Module[name].overloadTable && undefined !== Module[name].overloadTable[numArguments]) { throwBindingError(`Cannot register public name '${name}' twice`); }ensureOverloadTable(Module, name, name); if (Module.hasOwnProperty(numArguments)) { throwBindingError(`Cannot register multiple overloads of a function with the same number of arguments (${numArguments})!`); }Module[name].overloadTable[numArguments] = value; } + else { Module[name] = value; if (undefined !== numArguments) { Module[name].numArguments = numArguments; } } + } function RegisteredClass(name, constructor, instancePrototype, rawDestructor, baseClass, getActualType, upcast, downcast) { this.name = name; this.constructor = constructor; this.instancePrototype = instancePrototype; this.rawDestructor = rawDestructor; this.baseClass = baseClass; this.getActualType = getActualType; this.upcast = upcast; this.downcast = downcast; this.pureVirtualFunctions = []; } function upcastPointer(ptr, ptrClass, desiredClass) + { + while (ptrClass !== desiredClass) { if (!ptrClass.upcast) { throwBindingError(`Expected null or instance of ${desiredClass.name}, got an instance of ${ptrClass.name}`); }ptr = ptrClass.upcast(ptr); ptrClass = ptrClass.baseClass; } + + return ptr; + } function constNoSmartPtrRawPointerToWireType(destructors, handle) + { + if (handle === null) + { + if (this.isReference) { throwBindingError(`null is not a valid ${this.name}`); } + + return 0; + } if (!handle.$$) { throwBindingError(`Cannot pass "${_embind_repr(handle)}" as a ${this.name}`); } if (!handle.$$.ptr) { throwBindingError(`Cannot pass deleted object as a pointer of type ${this.name}`); } const handleClass = handle.$$.ptrType.registeredClass; const ptr = upcastPointer(handle.$$.ptr, handleClass, this.registeredClass); + + return ptr; + } function genericPointerToWireType(destructors, handle) + { + let ptr; + + if (handle === null) + { + if (this.isReference) { throwBindingError(`null is not a valid ${this.name}`); } if (this.isSmartPointer) + { + ptr = this.rawConstructor(); if (destructors !== null) { destructors.push(this.rawDestructor, ptr); } + + return ptr; + } + + return 0; + } if (!handle.$$) { throwBindingError(`Cannot pass "${_embind_repr(handle)}" as a ${this.name}`); } if (!handle.$$.ptr) { throwBindingError(`Cannot pass deleted object as a pointer of type ${this.name}`); } if (!this.isConst && handle.$$.ptrType.isConst) { throwBindingError(`Cannot convert argument of type ${handle.$$.smartPtrType ? handle.$$.smartPtrType.name : handle.$$.ptrType.name} to parameter type ${this.name}`); } const handleClass = handle.$$.ptrType.registeredClass; + + ptr = upcastPointer(handle.$$.ptr, handleClass, this.registeredClass); if (this.isSmartPointer) + { + if (undefined === handle.$$.smartPtr) { throwBindingError('Passing raw pointer to smart pointer is illegal'); } switch (this.sharingPolicy) + { + case 0:if (handle.$$.smartPtrType === this) { ptr = handle.$$.smartPtr; } + else { throwBindingError(`Cannot convert argument of type ${handle.$$.smartPtrType ? handle.$$.smartPtrType.name : handle.$$.ptrType.name} to parameter type ${this.name}`); } break; case 1:ptr = handle.$$.smartPtr; break; case 2:if (handle.$$.smartPtrType === this) { ptr = handle.$$.smartPtr; } + else + { + const clonedHandle = handle.clone(); + + ptr = this.rawShare(ptr, __emval_register(function () { clonedHandle.delete(); })); if (destructors !== null) { destructors.push(this.rawDestructor, ptr); } + } break; default:throwBindingError('Unsupporting sharing policy'); + } + } + + return ptr; + } function nonConstNoSmartPtrRawPointerToWireType(destructors, handle) + { + if (handle === null) + { + if (this.isReference) { throwBindingError(`null is not a valid ${this.name}`); } + + return 0; + } if (!handle.$$) { throwBindingError(`Cannot pass "${_embind_repr(handle)}" as a ${this.name}`); } if (!handle.$$.ptr) { throwBindingError(`Cannot pass deleted object as a pointer of type ${this.name}`); } if (handle.$$.ptrType.isConst) { throwBindingError(`Cannot convert argument of type ${handle.$$.ptrType.name} to parameter type ${this.name}`); } const handleClass = handle.$$.ptrType.registeredClass; const ptr = upcastPointer(handle.$$.ptr, handleClass, this.registeredClass); + + return ptr; + } function simpleReadValueFromPointer(pointer) { return this.fromWireType(HEAPU32[pointer >> 2]); } function RegisteredPointer_getPointee(ptr) + { + if (this.rawGetPointee) { ptr = this.rawGetPointee(ptr); } + + return ptr; + } function RegisteredPointer_destructor(ptr) { if (this.rawDestructor) { this.rawDestructor(ptr); } } function RegisteredPointer_deleteObject(handle) { if (handle !== null) { handle.delete(); } } function downcastPointer(ptr, ptrClass, desiredClass) + { + if (ptrClass === desiredClass) { return ptr; } if (undefined === desiredClass.baseClass) { return null; } const rv = downcastPointer(ptr, ptrClass, desiredClass.baseClass); + + if (rv === null) { return null; } + + return desiredClass.downcast(rv); + } function getInheritedInstanceCount() { return Object.keys(registeredInstances).length; } function getLiveInheritedInstances() + { + const rv = []; + + for (const k in registeredInstances) { if (registeredInstances.hasOwnProperty(k)) { rv.push(registeredInstances[k]); } } + + return rv; + } function setDelayFunction(fn) { delayFunction = fn; if (deletionQueue.length && delayFunction) { delayFunction(flushPendingDeletes); } } function init_embind() { Module.getInheritedInstanceCount = getInheritedInstanceCount; Module.getLiveInheritedInstances = getLiveInheritedInstances; Module.flushPendingDeletes = flushPendingDeletes; Module.setDelayFunction = setDelayFunction; } var registeredInstances = {}; + + function getBasestPointer(class_, ptr) + { + if (ptr === undefined) { throwBindingError('ptr should not be undefined'); } while (class_.baseClass) { ptr = class_.upcast(ptr); class_ = class_.baseClass; } + + return ptr; + } function getInheritedInstance(class_, ptr) + { + ptr = getBasestPointer(class_, ptr); + + return registeredInstances[ptr]; + } function makeClassHandle(prototype, record) + { + if (!record.ptrType || !record.ptr) { throwInternalError('makeClassHandle requires ptr and ptrType'); } const hasSmartPtrType = !!record.smartPtrType; const hasSmartPtr = !!record.smartPtr; + + if (hasSmartPtrType !== hasSmartPtr) { throwInternalError('Both smartPtrType and smartPtr must be specified'); }record.count = { value: 1 }; + + return attachFinalizer(Object.create(prototype, { $$: { value: record } })); + } function RegisteredPointer_fromWireType(ptr) + { + const rawPointer = this.getPointee(ptr); + + if (!rawPointer) + { + this.destructor(ptr); + + return null; + } const registeredInstance = getInheritedInstance(this.registeredClass, rawPointer); + + if (undefined !== registeredInstance) + { + if (registeredInstance.$$.count.value === 0) + { + registeredInstance.$$.ptr = rawPointer; registeredInstance.$$.smartPtr = ptr; + + return registeredInstance.clone(); + } + const rv = registeredInstance.clone(); + + this.destructor(ptr); + + return rv; + } function makeDefaultHandle() + { + if (this.isSmartPointer) { return makeClassHandle(this.registeredClass.instancePrototype, { ptrType: this.pointeeType, ptr: rawPointer, smartPtrType: this, smartPtr: ptr }); } + + return makeClassHandle(this.registeredClass.instancePrototype, { ptrType: this, ptr }); + } const actualType = this.registeredClass.getActualType(rawPointer); const registeredPointerRecord = registeredPointers[actualType]; + + if (!registeredPointerRecord) { return makeDefaultHandle.call(this); } let toType; + + if (this.isConst) { toType = registeredPointerRecord.constPointerType; } + else { toType = registeredPointerRecord.pointerType; } const dp = downcastPointer(rawPointer, this.registeredClass, toType.registeredClass); + + if (dp === null) { return makeDefaultHandle.call(this); } if (this.isSmartPointer) { return makeClassHandle(toType.registeredClass.instancePrototype, { ptrType: toType, ptr: dp, smartPtrType: this, smartPtr: ptr }); } + + return makeClassHandle(toType.registeredClass.instancePrototype, { ptrType: toType, ptr: dp }); + } function init_RegisteredPointer() { RegisteredPointer.prototype.getPointee = RegisteredPointer_getPointee; RegisteredPointer.prototype.destructor = RegisteredPointer_destructor; RegisteredPointer.prototype.argPackAdvance = 8; RegisteredPointer.prototype.readValueFromPointer = simpleReadValueFromPointer; RegisteredPointer.prototype.deleteObject = RegisteredPointer_deleteObject; RegisteredPointer.prototype.fromWireType = RegisteredPointer_fromWireType; } function RegisteredPointer(name, registeredClass, isReference, isConst, isSmartPointer, pointeeType, sharingPolicy, rawGetPointee, rawConstructor, rawShare, rawDestructor) + { + this.name = name; this.registeredClass = registeredClass; this.isReference = isReference; this.isConst = isConst; this.isSmartPointer = isSmartPointer; this.pointeeType = pointeeType; this.sharingPolicy = sharingPolicy; this.rawGetPointee = rawGetPointee; this.rawConstructor = rawConstructor; this.rawShare = rawShare; this.rawDestructor = rawDestructor; if (!isSmartPointer && registeredClass.baseClass === undefined) + { + if (isConst) { this.toWireType = constNoSmartPtrRawPointerToWireType; this.destructorFunction = null; } + else { this.toWireType = nonConstNoSmartPtrRawPointerToWireType; this.destructorFunction = null; } + } + else { this.toWireType = genericPointerToWireType; } + } function replacePublicSymbol(name, value, numArguments) + { + if (!Module.hasOwnProperty(name)) { throwInternalError('Replacing nonexistant public symbol'); } if (undefined !== Module[name].overloadTable && undefined !== numArguments) { Module[name].overloadTable[numArguments] = value; } + else { Module[name] = value; Module[name].argCount = numArguments; } + } function embind__requireFunction(signature, rawFunction) + { + signature = readLatin1String(signature); function makeDynCaller(dynCall) + { + const args = []; + + for (let i = 1; i < signature.length; ++i) { args.push(`a${i}`); } const name = `dynCall_${signature}_${rawFunction}`; let body = `return function ${name}(${args.join(', ')}) {\n`; + + body += ` return dynCall(rawFunction${args.length ? ', ' : ''}${args.join(', ')});\n`; body += '};\n'; + + return new Function('dynCall', 'rawFunction', body)(dynCall, rawFunction); + } const dc = Module[`dynCall_${signature}`]; const fp = makeDynCaller(dc); + + if (typeof fp !== 'function') { throwBindingError(`unknown function pointer with signature ${signature}: ${rawFunction}`); } + + return fp; + } let UnboundTypeError; + + function getTypeName(type) + { + const ptr = ___getTypeName(type); const rv = readLatin1String(ptr); + + _free(ptr); + + return rv; + } function throwUnboundTypeError(message, types) + { + const unboundTypes = []; const seen = {}; + + function visit(type) + { + if (seen[type]) { return; } if (registeredTypes[type]) { return; } if (typeDependencies[type]) + { + typeDependencies[type].forEach(visit); + + return; + }unboundTypes.push(type); seen[type] = true; + }types.forEach(visit); throw new UnboundTypeError(`${message}: ${unboundTypes.map(getTypeName).join([', '])}`); + } function __embind_register_class(rawType, rawPointerType, rawConstPointerType, baseClassRawType, getActualTypeSignature, getActualType, upcastSignature, upcast, downcastSignature, downcast, name, destructorSignature, rawDestructor) + { + name = readLatin1String(name); getActualType = embind__requireFunction(getActualTypeSignature, getActualType); if (upcast) { upcast = embind__requireFunction(upcastSignature, upcast); } if (downcast) { downcast = embind__requireFunction(downcastSignature, downcast); }rawDestructor = embind__requireFunction(destructorSignature, rawDestructor); const legalFunctionName = makeLegalFunctionName(name); + + exposePublicSymbol(legalFunctionName, function () { throwUnboundTypeError(`Cannot construct ${name} due to unbound types`, [baseClassRawType]); }); whenDependentTypesAreResolved([rawType, rawPointerType, rawConstPointerType], baseClassRawType ? [baseClassRawType] : [], function (base) + { + base = base[0]; let baseClass; let basePrototype; + + if (baseClassRawType) { baseClass = base.registeredClass; basePrototype = baseClass.instancePrototype; } + else { basePrototype = ClassHandle.prototype; } const constructor = createNamedFunction(legalFunctionName, function () + { + if (Object.getPrototypeOf(this) !== instancePrototype) { throw new BindingError(`Use 'new' to construct ${name}`); } if (undefined === registeredClass.constructor_body) { throw new BindingError(`${name} has no accessible constructor`); } const body = registeredClass.constructor_body[arguments.length]; + + if (undefined === body) { throw new BindingError(`Tried to invoke ctor of ${name} with invalid number of parameters (${arguments.length}) - expected (${Object.keys(registeredClass.constructor_body).toString()}) parameters instead!`); } + + return body.apply(this, arguments); + }); var instancePrototype = Object.create(basePrototype, { constructor: { value: constructor } }); + + constructor.prototype = instancePrototype; var registeredClass = new RegisteredClass(name, constructor, instancePrototype, rawDestructor, baseClass, getActualType, upcast, downcast); const referenceConverter = new RegisteredPointer(name, registeredClass, true, false, false); const pointerConverter = new RegisteredPointer(`${name}*`, registeredClass, false, false, false); const constPointerConverter = new RegisteredPointer(`${name} const*`, registeredClass, false, true, false); + + registeredPointers[rawType] = { pointerType: pointerConverter, constPointerType: constPointerConverter }; replacePublicSymbol(legalFunctionName, constructor); + + return [referenceConverter, pointerConverter, constPointerConverter]; + }); + } function heap32VectorToArray(count, firstElement) + { + const array = []; + + for (let i = 0; i < count; i++) { array.push(HEAP32[(firstElement >> 2) + i]); } + + return array; + } function runDestructors(destructors) + { + while (destructors.length) + { + const ptr = destructors.pop(); const del = destructors.pop(); + + del(ptr); + } + } function __embind_register_class_constructor(rawClassType, argCount, rawArgTypesAddr, invokerSignature, invoker, rawConstructor) + { + assert(argCount > 0); const rawArgTypes = heap32VectorToArray(argCount, rawArgTypesAddr); + + invoker = embind__requireFunction(invokerSignature, invoker); const args = [rawConstructor]; const destructors = []; + + whenDependentTypesAreResolved([], [rawClassType], function (classType) + { + classType = classType[0]; const humanName = `constructor ${classType.name}`; + + if (undefined === classType.registeredClass.constructor_body) { classType.registeredClass.constructor_body = []; } if (undefined !== classType.registeredClass.constructor_body[argCount - 1]) { throw new BindingError(`Cannot register multiple constructors with identical number of parameters (${argCount - 1}) for class '${classType.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`); }classType.registeredClass.constructor_body[argCount - 1] = function unboundTypeHandler() { throwUnboundTypeError(`Cannot construct ${classType.name} due to unbound types`, rawArgTypes); }; whenDependentTypesAreResolved([], rawArgTypes, function (argTypes) + { + classType.registeredClass.constructor_body[argCount - 1] = function constructor_body() + { + if (arguments.length !== argCount - 1) { throwBindingError(`${humanName} called with ${arguments.length} arguments, expected ${argCount - 1}`); }destructors.length = 0; args.length = argCount; for (let i = 1; i < argCount; ++i) { args[i] = argTypes[i].toWireType(destructors, arguments[i - 1]); } const ptr = invoker.apply(null, args); + + runDestructors(destructors); + + return argTypes[0].fromWireType(ptr); + }; + + return []; + }); + + return []; + }); + } function new_(constructor, argumentList) + { + if (!(constructor instanceof Function)) { throw new TypeError(`new_ called with constructor type ${typeof constructor} which is not a function`); } const dummy = createNamedFunction(constructor.name || 'unknownFunctionName', function () {}); + + dummy.prototype = constructor.prototype; const obj = new dummy(); const r = constructor.apply(obj, argumentList); + + return r instanceof Object ? r : obj; + } function craftInvokerFunction(humanName, argTypes, classType, cppInvokerFunc, cppTargetFunc) + { + const argCount = argTypes.length; + + if (argCount < 2) { throwBindingError('argTypes array size mismatch! Must at least get return value and \'this\' types!'); } const isClassMethodFunc = argTypes[1] !== null && classType !== null; let needsDestructorStack = false; + + for (var i = 1; i < argTypes.length; ++i) { if (argTypes[i] !== null && argTypes[i].destructorFunction === undefined) { needsDestructorStack = true; break; } } const returns = argTypes[0].name !== 'void'; let argsList = ''; let argsListWired = ''; + + for (var i = 0; i < argCount - 2; ++i) { argsList += `${i !== 0 ? ', ' : ''}arg${i}`; argsListWired += `${i !== 0 ? ', ' : ''}arg${i}Wired`; } let invokerFnBody = `return function ${makeLegalFunctionName(humanName)}(${argsList}) {\n` + `if (arguments.length !== ${argCount - 2}) {\n` + `throwBindingError('function ${humanName} called with ' + arguments.length + ' arguments, expected ${argCount - 2} args!');\n` + `}\n`; + + if (needsDestructorStack) { invokerFnBody += 'var destructors = [];\n'; } const dtorStack = needsDestructorStack ? 'destructors' : 'null'; const args1 = ['throwBindingError', 'invoker', 'fn', 'runDestructors', 'retType', 'classParam']; const args2 = [throwBindingError, cppInvokerFunc, cppTargetFunc, runDestructors, argTypes[0], argTypes[1]]; + + if (isClassMethodFunc) { invokerFnBody += `var thisWired = classParam.toWireType(${dtorStack}, this);\n`; } for (var i = 0; i < argCount - 2; ++i) { invokerFnBody += `var arg${i}Wired = argType${i}.toWireType(${dtorStack}, arg${i}); // ${argTypes[i + 2].name}\n`; args1.push(`argType${i}`); args2.push(argTypes[i + 2]); } if (isClassMethodFunc) { argsListWired = `thisWired${argsListWired.length > 0 ? ', ' : ''}${argsListWired}`; }invokerFnBody += `${returns ? 'var rv = ' : ''}invoker(fn${argsListWired.length > 0 ? ', ' : ''}${argsListWired});\n`; if (needsDestructorStack) { invokerFnBody += 'runDestructors(destructors);\n'; } + else + { + for (var i = isClassMethodFunc ? 1 : 2; i < argTypes.length; ++i) + { + const paramName = i === 1 ? 'thisWired' : `arg${i - 2}Wired`; + + if (argTypes[i].destructorFunction !== null) { invokerFnBody += `${paramName}_dtor(${paramName}); // ${argTypes[i].name}\n`; args1.push(`${paramName}_dtor`); args2.push(argTypes[i].destructorFunction); } + } + } if (returns) { invokerFnBody += 'var ret = retType.fromWireType(rv);\n' + 'return ret;\n'; } + else {}invokerFnBody += '}\n'; args1.push(invokerFnBody); const invokerFunction = new_(Function, args1).apply(null, args2); + + return invokerFunction; + } function __embind_register_class_function(rawClassType, methodName, argCount, rawArgTypesAddr, invokerSignature, rawInvoker, context, isPureVirtual) + { + const rawArgTypes = heap32VectorToArray(argCount, rawArgTypesAddr); + + methodName = readLatin1String(methodName); rawInvoker = embind__requireFunction(invokerSignature, rawInvoker); whenDependentTypesAreResolved([], [rawClassType], function (classType) + { + classType = classType[0]; const humanName = `${classType.name}.${methodName}`; + + if (isPureVirtual) { classType.registeredClass.pureVirtualFunctions.push(methodName); } function unboundTypesHandler() { throwUnboundTypeError(`Cannot call ${humanName} due to unbound types`, rawArgTypes); } const proto = classType.registeredClass.instancePrototype; const method = proto[methodName]; + + if (undefined === method || undefined === method.overloadTable && method.className !== classType.name && method.argCount === argCount - 2) { unboundTypesHandler.argCount = argCount - 2; unboundTypesHandler.className = classType.name; proto[methodName] = unboundTypesHandler; } + else { ensureOverloadTable(proto, methodName, humanName); proto[methodName].overloadTable[argCount - 2] = unboundTypesHandler; }whenDependentTypesAreResolved([], rawArgTypes, function (argTypes) + { + const memberFunction = craftInvokerFunction(humanName, argTypes, classType, rawInvoker, context); + + if (undefined === proto[methodName].overloadTable) { memberFunction.argCount = argCount - 2; proto[methodName] = memberFunction; } + else { proto[methodName].overloadTable[argCount - 2] = memberFunction; } + + return []; + }); + + return []; + }); + } const emval_free_list = []; const emval_handle_array = [{}, { value: undefined }, { value: null }, { value: true }, { value: false }]; + + function __emval_decref(handle) { if (handle > 4 && --emval_handle_array[handle].refcount === 0) { emval_handle_array[handle] = undefined; emval_free_list.push(handle); } } function count_emval_handles() + { + let count = 0; + + for (let i = 5; i < emval_handle_array.length; ++i) { if (emval_handle_array[i] !== undefined) { ++count; } } + + return count; + } function get_first_emval() + { + for (let i = 5; i < emval_handle_array.length; ++i) { if (emval_handle_array[i] !== undefined) { return emval_handle_array[i]; } } + + return null; + } function init_emval() { Module.count_emval_handles = count_emval_handles; Module.get_first_emval = get_first_emval; } function __emval_register(value) + { + switch (value) + { + case undefined: { return 1; } case null: { return 2; } case true: { return 3; } case false: { return 4; } default: { const handle = emval_free_list.length ? emval_free_list.pop() : emval_handle_array.length; + + emval_handle_array[handle] = { refcount: 1, value }; + + return handle; } + } + } function __embind_register_emval(rawType, name) + { + name = readLatin1String(name); registerType(rawType, { name, fromWireType(handle) + { + const rv = emval_handle_array[handle].value; + + __emval_decref(handle); + + return rv; + }, toWireType(destructors, value) { return __emval_register(value); }, argPackAdvance: 8, readValueFromPointer: simpleReadValueFromPointer, destructorFunction: null }); + } function _embind_repr(v) + { + if (v === null) { return 'null'; } const t = typeof v; + + if (t === 'object' || t === 'array' || t === 'function') { return v.toString(); } + + return `${v}`; + } function floatReadValueFromPointer(name, shift) { switch (shift) { case 2:return function (pointer) { return this.fromWireType(HEAPF32[pointer >> 2]); }; case 3:return function (pointer) { return this.fromWireType(HEAPF64[pointer >> 3]); }; default:throw new TypeError(`Unknown float type: ${name}`); } } function __embind_register_float(rawType, name, size) + { + const shift = getShiftFromSize(size); + + name = readLatin1String(name); registerType(rawType, { name, fromWireType(value) { return value; }, toWireType(destructors, value) + { + if (typeof value !== 'number' && typeof value !== 'boolean') { throw new TypeError(`Cannot convert "${_embind_repr(value)}" to ${this.name}`); } + + return value; + }, argPackAdvance: 8, readValueFromPointer: floatReadValueFromPointer(name, shift), destructorFunction: null }); + } function __embind_register_function(name, argCount, rawArgTypesAddr, signature, rawInvoker, fn) + { + const argTypes = heap32VectorToArray(argCount, rawArgTypesAddr); + + name = readLatin1String(name); rawInvoker = embind__requireFunction(signature, rawInvoker); exposePublicSymbol(name, function () { throwUnboundTypeError(`Cannot call ${name} due to unbound types`, argTypes); }, argCount - 1); whenDependentTypesAreResolved([], argTypes, function (argTypes) + { + const invokerArgsArray = [argTypes[0], null].concat(argTypes.slice(1)); + + replacePublicSymbol(name, craftInvokerFunction(name, invokerArgsArray, null, rawInvoker, fn), argCount - 1); + + return []; + }); + } function integerReadValueFromPointer(name, shift, signed) { switch (shift) { case 0:return signed ? function readS8FromPointer(pointer) { return HEAP8[pointer]; } : function readU8FromPointer(pointer) { return HEAPU8[pointer]; }; case 1:return signed ? function readS16FromPointer(pointer) { return HEAP16[pointer >> 1]; } : function readU16FromPointer(pointer) { return HEAPU16[pointer >> 1]; }; case 2:return signed ? function readS32FromPointer(pointer) { return HEAP32[pointer >> 2]; } : function readU32FromPointer(pointer) { return HEAPU32[pointer >> 2]; }; default:throw new TypeError(`Unknown integer type: ${name}`); } } function __embind_register_integer(primitiveType, name, size, minRange, maxRange) + { + name = readLatin1String(name); if (maxRange === -1) { maxRange = 4294967295; } const shift = getShiftFromSize(size); let fromWireType = function (value) { return value; }; + + if (minRange === 0) + { + const bitshift = 32 - 8 * size; + + fromWireType = function (value) { return value << bitshift >>> bitshift; }; + } const isUnsignedType = name.indexOf('unsigned') != -1; + + registerType(primitiveType, { name, fromWireType, toWireType(destructors, value) + { + if (typeof value !== 'number' && typeof value !== 'boolean') { throw new TypeError(`Cannot convert "${_embind_repr(value)}" to ${this.name}`); } if (value < minRange || value > maxRange) { throw new TypeError(`Passing a number "${_embind_repr(value)}" from JS side to C/C++ side to an argument of type "${name}", which is outside the valid range [${minRange}, ${maxRange}]!`); } + + return isUnsignedType ? value >>> 0 : value | 0; + }, argPackAdvance: 8, readValueFromPointer: integerReadValueFromPointer(name, shift, minRange !== 0), destructorFunction: null }); + } function __embind_register_memory_view(rawType, dataTypeIndex, name) + { + const typeMapping = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array, Float32Array, Float64Array]; const TA = typeMapping[dataTypeIndex]; + + function decodeMemoryView(handle) + { + handle = handle >> 2; const heap = HEAPU32; const size = heap[handle]; const data = heap[handle + 1]; + + return new TA(buffer, data, size); + }name = readLatin1String(name); registerType(rawType, { name, fromWireType: decodeMemoryView, argPackAdvance: 8, readValueFromPointer: decodeMemoryView }, { ignoreDuplicateRegistrations: true }); + } function __embind_register_std_string(rawType, name) + { + name = readLatin1String(name); const stdStringIsUTF8 = name === 'std::string'; + + registerType(rawType, { name, fromWireType(value) + { + const length = HEAPU32[value >> 2]; let str; + + if (stdStringIsUTF8) + { + const endChar = HEAPU8[value + 4 + length]; let endCharSwap = 0; + + if (endChar != 0) { endCharSwap = endChar; HEAPU8[value + 4 + length] = 0; } let decodeStartPtr = value + 4; + + for (var i = 0; i <= length; ++i) + { + const currentBytePtr = value + 4 + i; + + if (HEAPU8[currentBytePtr] == 0) + { + const stringSegment = UTF8ToString(decodeStartPtr); + + if (str === undefined) { str = stringSegment; } + else { str += String.fromCharCode(0); str += stringSegment; }decodeStartPtr = currentBytePtr + 1; + } + } if (endCharSwap != 0) { HEAPU8[value + 4 + length] = endCharSwap; } + } + else + { + const a = new Array(length); + + for (var i = 0; i < length; ++i) { a[i] = String.fromCharCode(HEAPU8[value + 4 + i]); }str = a.join(''); + }_free(value); + + return str; + }, toWireType(destructors, value) + { + if (value instanceof ArrayBuffer) { value = new Uint8Array(value); } let getLength; const valueIsOfTypeString = typeof value === 'string'; + + if (!(valueIsOfTypeString || value instanceof Uint8Array || value instanceof Uint8ClampedArray || value instanceof Int8Array)) { throwBindingError('Cannot pass non-string to std::string'); } if (stdStringIsUTF8 && valueIsOfTypeString) { getLength = function () { return lengthBytesUTF8(value); }; } + else { getLength = function () { return value.length; }; } const length = getLength(); const ptr = _malloc(4 + length + 1); + + HEAPU32[ptr >> 2] = length; if (stdStringIsUTF8 && valueIsOfTypeString) { stringToUTF8(value, ptr + 4, length + 1); } + else + if (valueIsOfTypeString) + { + for (var i = 0; i < length; ++i) + { + const charCode = value.charCodeAt(i); + + if (charCode > 255) { _free(ptr); throwBindingError('String has UTF-16 code units that do not fit in 8 bits'); }HEAPU8[ptr + 4 + i] = charCode; + } + } + else { for (var i = 0; i < length; ++i) { HEAPU8[ptr + 4 + i] = value[i]; } } if (destructors !== null) { destructors.push(_free, ptr); } + + return ptr; + }, argPackAdvance: 8, readValueFromPointer: simpleReadValueFromPointer, destructorFunction(ptr) { _free(ptr); } }); + } function __embind_register_std_wstring(rawType, charSize, name) + { + name = readLatin1String(name); let decodeString; let encodeString; let getHeap; let lengthBytesUTF; let shift; + + if (charSize === 2) { decodeString = UTF16ToString; encodeString = stringToUTF16; lengthBytesUTF = lengthBytesUTF16; getHeap = function () { return HEAPU16; }; shift = 1; } + else if (charSize === 4) { decodeString = UTF32ToString; encodeString = stringToUTF32; lengthBytesUTF = lengthBytesUTF32; getHeap = function () { return HEAPU32; }; shift = 2; }registerType(rawType, { name, fromWireType(value) + { + const length = HEAPU32[value >> 2]; const HEAP = getHeap(); let str; const endChar = HEAP[value + 4 + length * charSize >> shift]; let endCharSwap = 0; + + if (endChar != 0) { endCharSwap = endChar; HEAP[value + 4 + length * charSize >> shift] = 0; } let decodeStartPtr = value + 4; + + for (let i = 0; i <= length; ++i) + { + const currentBytePtr = value + 4 + i * charSize; + + if (HEAP[currentBytePtr >> shift] == 0) + { + const stringSegment = decodeString(decodeStartPtr); + + if (str === undefined) { str = stringSegment; } + else { str += String.fromCharCode(0); str += stringSegment; }decodeStartPtr = currentBytePtr + charSize; + } + } if (endCharSwap != 0) { HEAP[value + 4 + length * charSize >> shift] = endCharSwap; }_free(value); + + return str; + }, toWireType(destructors, value) + { + if (!(typeof value === 'string')) { throwBindingError(`Cannot pass non-string to C++ string type ${name}`); } const length = lengthBytesUTF(value); const ptr = _malloc(4 + length + charSize); + + HEAPU32[ptr >> 2] = length >> shift; encodeString(value, ptr + 4, length + charSize); if (destructors !== null) { destructors.push(_free, ptr); } + + return ptr; + }, argPackAdvance: 8, readValueFromPointer: simpleReadValueFromPointer, destructorFunction(ptr) { _free(ptr); } }); + } function __embind_register_void(rawType, name) { name = readLatin1String(name); registerType(rawType, { isVoid: true, name, argPackAdvance: 0, fromWireType() { return undefined; }, toWireType(destructors, o) { return undefined; } }); } function requireHandle(handle) + { + if (!handle) { throwBindingError(`Cannot use deleted val. handle = ${handle}`); } + + return emval_handle_array[handle].value; + } function requireRegisteredType(rawType, humanName) + { + const impl = registeredTypes[rawType]; + + if (undefined === impl) { throwBindingError(`${humanName} has unknown type ${getTypeName(rawType)}`); } + + return impl; + } function __emval_as(handle, returnType, destructorsRef) + { + handle = requireHandle(handle); returnType = requireRegisteredType(returnType, 'emval::as'); const destructors = []; const rd = __emval_register(destructors); + + HEAP32[destructorsRef >> 2] = rd; + + return returnType.toWireType(destructors, handle); + } const emval_symbols = {}; + + function getStringOrSymbol(address) + { + const symbol = emval_symbols[address]; + + if (symbol === undefined) { return readLatin1String(address); } + + return symbol; + } const emval_methodCallers = []; + + function __emval_call_void_method(caller, handle, methodName, args) { caller = emval_methodCallers[caller]; handle = requireHandle(handle); methodName = getStringOrSymbol(methodName); caller(handle, methodName, null, args); } function emval_get_global() + { + if (typeof globalThis === 'object') { return globalThis; } + + return (function () { return Function; })()('return this')(); + } function __emval_get_global(name) + { + if (name === 0) { return __emval_register(emval_get_global()); } + name = getStringOrSymbol(name); + + return __emval_register(emval_get_global()[name]); + } function __emval_addMethodCaller(caller) + { + const id = emval_methodCallers.length; + + emval_methodCallers.push(caller); + + return id; + } function __emval_lookupTypes(argCount, argTypes) + { + const a = new Array(argCount); + + for (let i = 0; i < argCount; ++i) { a[i] = requireRegisteredType(HEAP32[(argTypes >> 2) + i], `parameter ${i}`); } + + return a; + } function __emval_get_method_caller(argCount, argTypes) + { + const types = __emval_lookupTypes(argCount, argTypes); const retType = types[0]; const signatureName = `${retType.name}_$${types.slice(1).map(function (t) { return t.name; }).join('_')}$`; const params = ['retType']; const args = [retType]; let argsList = ''; + + for (var i = 0; i < argCount - 1; ++i) { argsList += `${i !== 0 ? ', ' : ''}arg${i}`; params.push(`argType${i}`); args.push(types[1 + i]); } const functionName = makeLegalFunctionName(`methodCaller_${signatureName}`); let functionBody = `return function ${functionName}(handle, name, destructors, args) {\n`; let offset = 0; + + for (var i = 0; i < argCount - 1; ++i) { functionBody += ` var arg${i} = argType${i}.readValueFromPointer(args${offset ? `+${offset}` : ''});\n`; offset += types[i + 1].argPackAdvance; }functionBody += ` var rv = handle[name](${argsList});\n`; for (var i = 0; i < argCount - 1; ++i) { if (types[i + 1].deleteObject) { functionBody += ` argType${i}.deleteObject(arg${i});\n`; } } if (!retType.isVoid) { functionBody += ' return retType.toWireType(destructors, rv);\n'; }functionBody += '};\n'; params.push(functionBody); const invokerFunction = new_(Function, params).apply(null, args); + + return __emval_addMethodCaller(invokerFunction); + } function __emval_get_module_property(name) + { + name = getStringOrSymbol(name); + + return __emval_register(Module[name]); + } function __emval_get_property(handle, key) + { + handle = requireHandle(handle); key = requireHandle(key); + + return __emval_register(handle[key]); + } function __emval_incref(handle) { if (handle > 4) { emval_handle_array[handle].refcount += 1; } } function craftEmvalAllocator(argCount) + { + let argsList = ''; + + for (var i = 0; i < argCount; ++i) { argsList += `${i !== 0 ? ', ' : ''}arg${i}`; } let functionBody = `return function emval_allocator_${argCount}(constructor, argTypes, args) {\n`; + + for (var i = 0; i < argCount; ++i) { functionBody += `var argType${i} = requireRegisteredType(Module['HEAP32'][(argTypes >> 2) + ${i}], "parameter ${i}");\n` + `var arg${i} = argType${i}.readValueFromPointer(args);\n` + `args += argType${i}['argPackAdvance'];\n`; }functionBody += `var obj = new constructor(${argsList});\n` + `return __emval_register(obj);\n` + `}\n`; + + return new Function('requireRegisteredType', 'Module', '__emval_register', functionBody)(requireRegisteredType, Module, __emval_register); + } const emval_newers = {}; + + function __emval_new(handle, argCount, argTypes, args) + { + handle = requireHandle(handle); let newer = emval_newers[argCount]; + + if (!newer) { newer = craftEmvalAllocator(argCount); emval_newers[argCount] = newer; } + + return newer(handle, argTypes, args); + } function __emval_new_cstring(v) { return __emval_register(getStringOrSymbol(v)); } function __emval_run_destructors(handle) + { + const destructors = emval_handle_array[handle].value; + + runDestructors(destructors); __emval_decref(handle); + } function _abort() { abort(); } function _emscripten_get_heap_size() { return HEAPU8.length; } function _emscripten_memcpy_big(dest, src, num) { HEAPU8.copyWithin(dest, src, src + num); } function emscripten_realloc_buffer(size) + { + try + { + wasmMemory.grow(size - buffer.byteLength + 65535 >> 16); updateGlobalBufferAndViews(wasmMemory.buffer); + + return 1; + } + catch (e) {} + } function _emscripten_resize_heap(requestedSize) + { + const oldSize = _emscripten_get_heap_size(); const PAGE_MULTIPLE = 65536; const maxHeapSize = 2147483648 - PAGE_MULTIPLE; + + if (requestedSize > maxHeapSize) { return false; } const minHeapSize = 16777216; + + for (let cutDown = 1; cutDown <= 4; cutDown *= 2) + { + let overGrownHeapSize = oldSize * (1 + 0.2 / cutDown); + + overGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296); const newSize = Math.min(maxHeapSize, alignUp(Math.max(minHeapSize, requestedSize, overGrownHeapSize), PAGE_MULTIPLE)); const replacement = emscripten_realloc_buffer(newSize); + + if (replacement) { return true; } + } + + return false; + } var PATH = { splitPath(filename) + { + const splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; + + return splitPathRe.exec(filename).slice(1); + }, normalizeArray(parts, allowAboveRoot) + { + let up = 0; + + for (let i = parts.length - 1; i >= 0; i--) + { + const last = parts[i]; + + if (last === '.') { parts.splice(i, 1); } + else if (last === '..') { parts.splice(i, 1); up++; } + else if (up) { parts.splice(i, 1); up--; } + } if (allowAboveRoot) { for (;up; up--) { parts.unshift('..'); } } + + return parts; + }, normalize(path) + { + const isAbsolute = path.charAt(0) === '/'; const trailingSlash = path.substr(-1) === '/'; + + path = PATH.normalizeArray(path.split('/').filter(function (p) { return !!p; }), !isAbsolute).join('/'); if (!path && !isAbsolute) { path = '.'; } if (path && trailingSlash) { path += '/'; } + + return (isAbsolute ? '/' : '') + path; + }, dirname(path) + { + const result = PATH.splitPath(path); const root = result[0]; let dir = result[1]; + + if (!root && !dir) { return '.'; } if (dir) { dir = dir.substr(0, dir.length - 1); } + + return root + dir; + }, basename(path) + { + if (path === '/') return '/'; const lastSlash = path.lastIndexOf('/'); + + if (lastSlash === -1) return path; + + return path.substr(lastSlash + 1); + }, extname(path) { return PATH.splitPath(path)[3]; }, join() + { + const paths = Array.prototype.slice.call(arguments, 0); + + return PATH.normalize(paths.join('/')); + }, join2(l, r) { return PATH.normalize(`${l}/${r}`); } }; var SYSCALLS = { mappings: {}, buffers: [null, [], []], printChar(stream, curr) + { + const buffer = SYSCALLS.buffers[stream]; + + if (curr === 0 || curr === 10) { (stream === 1 ? out : err)(UTF8ArrayToString(buffer, 0)); buffer.length = 0; } + else { buffer.push(curr); } + }, varargs: undefined, get() + { + SYSCALLS.varargs += 4; const ret = HEAP32[SYSCALLS.varargs - 4 >> 2]; + + return ret; + }, getStr(ptr) + { + const ret = UTF8ToString(ptr); + + return ret; + }, get64(low, high) { return low; } }; + + function _fd_close(fd) { return 0; } function _fd_seek(fd, offset_low, offset_high, whence, newOffset) {} function _fd_write(fd, iov, iovcnt, pnum) + { + let num = 0; + + for (let i = 0; i < iovcnt; i++) + { + const ptr = HEAP32[iov + i * 8 >> 2]; const len = HEAP32[iov + (i * 8 + 4) >> 2]; + + for (let j = 0; j < len; j++) { SYSCALLS.printChar(fd, HEAPU8[ptr + j]); }num += len; + }HEAP32[pnum >> 2] = num; + + return 0; + } function _roundf(d) + { + d = Number(d); + + return d >= +0 ? Number(Math_floor(d + +0.5)) : Number(Math_ceil(d - +0.5)); + } function _setTempRet0($i) { setTempRet0($i | 0); }embind_init_charCodes(); BindingError = Module.BindingError = extendError(Error, 'BindingError'); InternalError = Module.InternalError = extendError(Error, 'InternalError'); init_ClassHandle(); init_RegisteredPointer(); init_embind(); UnboundTypeError = Module.UnboundTypeError = extendError(Error, 'UnboundTypeError'); init_emval(); var asmLibraryArg = { G: ___cxa_allocate_exception, D: ___cxa_throw, A: __embind_register_bool, t: __embind_register_class, s: __embind_register_class_constructor, c: __embind_register_class_function, z: __embind_register_emval, j: __embind_register_float, x: __embind_register_function, d: __embind_register_integer, b: __embind_register_memory_view, k: __embind_register_std_string, i: __embind_register_std_wstring, B: __embind_register_void, r: __emval_as, m: __emval_call_void_method, a: __emval_decref, F: __emval_get_global, n: __emval_get_method_caller, p: __emval_get_module_property, f: __emval_get_property, h: __emval_incref, o: __emval_new, g: __emval_new_cstring, q: __emval_run_destructors, E: _abort, w: _emscripten_memcpy_big, y: _emscripten_resize_heap, C: _fd_close, u: _fd_seek, l: _fd_write, memory: wasmMemory, e: _roundf, v: _setTempRet0, table: wasmTable }; const asm = createWasm(); + + Module.asm = asm; var ___wasm_call_ctors = Module.___wasm_call_ctors = function () { return (___wasm_call_ctors = Module.___wasm_call_ctors = Module.asm.H).apply(null, arguments); }; var _malloc = Module._malloc = function () { return (_malloc = Module._malloc = Module.asm.I).apply(null, arguments); }; var _free = Module._free = function () { return (_free = Module._free = Module.asm.J).apply(null, arguments); }; var ___getTypeName = Module.___getTypeName = function () { return (___getTypeName = Module.___getTypeName = Module.asm.K).apply(null, arguments); }; var ___embind_register_native_and_builtin_types = Module.___embind_register_native_and_builtin_types = function () { return (___embind_register_native_and_builtin_types = Module.___embind_register_native_and_builtin_types = Module.asm.L).apply(null, arguments); }; var dynCall_viii = Module.dynCall_viii = function () { return (dynCall_viii = Module.dynCall_viii = Module.asm.M).apply(null, arguments); }; var dynCall_ii = Module.dynCall_ii = function () { return (dynCall_ii = Module.dynCall_ii = Module.asm.N).apply(null, arguments); }; var dynCall_vi = Module.dynCall_vi = function () { return (dynCall_vi = Module.dynCall_vi = Module.asm.O).apply(null, arguments); }; var dynCall_v = Module.dynCall_v = function () { return (dynCall_v = Module.dynCall_v = Module.asm.P).apply(null, arguments); }; var dynCall_iii = Module.dynCall_iii = function () { return (dynCall_iii = Module.dynCall_iii = Module.asm.Q).apply(null, arguments); }; var dynCall_vii = Module.dynCall_vii = function () { return (dynCall_vii = Module.dynCall_vii = Module.asm.R).apply(null, arguments); }; var dynCall_iiii = Module.dynCall_iiii = function () { return (dynCall_iiii = Module.dynCall_iiii = Module.asm.S).apply(null, arguments); }; var dynCall_iiiii = Module.dynCall_iiiii = function () { return (dynCall_iiiii = Module.dynCall_iiiii = Module.asm.T).apply(null, arguments); }; var dynCall_iiiiii = Module.dynCall_iiiiii = function () { return (dynCall_iiiiii = Module.dynCall_iiiiii = Module.asm.U).apply(null, arguments); }; var dynCall_iiiiiiii = Module.dynCall_iiiiiiii = function () { return (dynCall_iiiiiiii = Module.dynCall_iiiiiiii = Module.asm.V).apply(null, arguments); }; var dynCall_iiiiiiiii = Module.dynCall_iiiiiiiii = function () { return (dynCall_iiiiiiiii = Module.dynCall_iiiiiiiii = Module.asm.W).apply(null, arguments); }; var dynCall_iidiiii = Module.dynCall_iidiiii = function () { return (dynCall_iidiiii = Module.dynCall_iidiiii = Module.asm.X).apply(null, arguments); }; var dynCall_jiji = Module.dynCall_jiji = function () { return (dynCall_jiji = Module.dynCall_jiji = Module.asm.Y).apply(null, arguments); }; var dynCall_viiiiii = Module.dynCall_viiiiii = function () { return (dynCall_viiiiii = Module.dynCall_viiiiii = Module.asm.Z).apply(null, arguments); }; var dynCall_viiiii = Module.dynCall_viiiii = function () { return (dynCall_viiiii = Module.dynCall_viiiii = Module.asm._).apply(null, arguments); }; var dynCall_viiii = Module.dynCall_viiii = function () { return (dynCall_viiii = Module.dynCall_viiii = Module.asm.$).apply(null, arguments); }; + + Module.asm = asm; let calledRun; + + Module.then = function (func) + { + if (calledRun) { func(Module); } + else + { + const old = Module.onRuntimeInitialized; + + Module.onRuntimeInitialized = function () { if (old)old(); func(Module); }; + } + + return Module; + }; function ExitStatus(status) { this.name = 'ExitStatus'; this.message = `Program terminated with exit(${status})`; this.status = status; }dependenciesFulfilled = function runCaller() { if (!calledRun)run(); if (!calledRun)dependenciesFulfilled = runCaller; }; function run(args) + { + args = args || arguments_; if (runDependencies > 0) { return; }preRun(); if (runDependencies > 0) return; function doRun() { if (calledRun) return; calledRun = true; Module.calledRun = true; if (ABORT) return; initRuntime(); preMain(); if (Module.onRuntimeInitialized)Module.onRuntimeInitialized(); postRun(); } if (Module.setStatus) { Module.setStatus('Running...'); setTimeout(function () { setTimeout(function () { Module.setStatus(''); }, 1); doRun(); }, 1); } + else { doRun(); } + }Module.run = run; if (Module.preInit) { if (typeof Module.preInit === 'function')Module.preInit = [Module.preInit]; while (Module.preInit.length > 0) { Module.preInit.pop()(); } }noExitRuntime = true; run(); + + return BASIS; + } + ); +})(); + +if (typeof exports === 'object' && typeof module === 'object') +{ module.exports = BASIS; } +else if (typeof define === 'function' && define.amd) +{ define([], function () { return BASIS; }); } +else if (typeof exports === 'object') +{ exports.BASIS = BASIS; } diff --git a/apps/blueprints/public/basis_transcoder.wasm b/apps/blueprints/public/basis_transcoder.wasm new file mode 100644 index 0000000000000000000000000000000000000000..08e026b3484b78f6ee992385385eba5c7eda532e GIT binary patch literal 447033 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

1>V|E?! zSA9&I4BvFjWNF828I;U3{$|)NDLuust9a}G@*|KvHV_YNVNZ34|GNHx9oYi30WCfs z)$8D|^nK!)&Pk6j0_8ad!KDrMm6l8s-$iiOFCSDcJm9?V8GpUW(UX}$Q_@BwL zUc%XtEx?v7-JeGF_@biIFVbE!d`p^Y;&wj8L7uJXtV?KNMJK4ApP z_v2-kHU;8KS~6!SYZRQzl8d0aDh!Y>tvC7N4E~%0CQUwAi<|-w1^znXulkrag<{L% zz9>Dy36u|svC;=4-p~&+ROkbf$ z3wu_?r)UPA`Xk2Y)3Cr4h&;r_c{PiaXXe;0v8Y^)3zKt5Av zLb1BZ6w7CupoC_zi-xjB0q0kYpt@qhSO{wCO;CZrW}#P5o-{#qEt2P9&f^Kn>xjSVW7?D|byF%A z0F%kcCgX3ZJmK^d&o1M(WKbP}>{YlIIa}D1-}tZVAJ~yCKpSWg-%-7e?qTS+iDyue z9$^H^hdKU6+F)O4$$Bw9mbv#3(?9I!U&Y_7x)`#gMFnXOZdA8QJIqRnR0}3W4$TY(i&D zA12G#kRD+K%J(^hL1}}1r6p_ly9iO4lJc2ygnDN^$Ir{3bHTK!x7Q*$LcSTJjPr^A z*_5}Qb5-i5(d4TOP0m1T@`VuM8|hV>^k4jythc8YK&qL zon~ZfjcIhwAm1g;^|VOy_j+sEG~0D_7>6iZGUVN<(eCg&c8F=n#t6wqM>ggmdu^SO zBU|z>i7oQf+rW-&0os82t86(?5Bi(xBh0h-yCr?X2$b*RuhOPPd`U|-=)a55X7N-6 z)fJnsg=TL(pFNqupL4*ZX?E8l>5s4^&GtItulkratq%KC+KfXia+K^6&sKZF=_#gN z`n_bcI|AA3@GRkMVNX8ezpj5^N45ZMpvM?Is@K6^>4!!9?MRPs0_DR7erJaWgFh^K>`a=XdU=^}fK z)6H(r={3*~@mI3d8-eU~d6satu*c`fD5iA z%V!C?B@@8+k){N=vr!cM({8+KwQfsWYM5zru9-XPa)1?~Jo?qZ6J% zzDt_x>5=B|?cOwcb#!RQlr0%@@9y+F{Ei)B8qyXdJE3gML-zWtt9Q2KUlLp7skeb0 z*#gvoAX^U9gUchsW*Hsn6GotXzgu=`(<8p5B|G%rMc^xXod~Kc4nGlk;T5JE&fw2E zV3PC&Ncv-+%?f=EQVOYu{xo`Z)9cfY`y4rq4C&jw{)E$0Jo`O#^?$Mz!P&zXXA67s z8~=6v13R(>XamBiUZ^@iKV(UKH1j>g!{zlqhUunrM@m++dOi6Z@M!xsMx0`;r z1%J)~)K_>Tatd&WM7VC?KiA)P;JJ#j`yu|~Uq761dL8sb>PB*4N45s`dSTn?ID38K z#&WY>pHHMXJF*4(v}gPqlu5bh>2H!@pLlYpXPcNkc;j0sk4Et$e#ayXb*Sf=YIko zF5TZH`}n&EVL&+%1$4S*@+QFu8f#Kak~AJovX9^KcS8Ss3H7b$!S2S{3BinC+$`2hE04ZS!hA=FVK2#b%a))TkKKTT zL53k3f+u|E--upP{-U42H=Bf&Rq**;`K=L=ef)%~LJu~|zJlIn^yJHx%yi-}(o1b$Kzt{w z81YTEgcy$i@r$_5CFsCtM~K6s5?|RG*lQ6f)e}cX(H=ZlEU}yVP5FZAz?FN6OPly5 zbP&oNL1fEG9l56V0AktwFnrr!1NVW;jh8)z{fl8P#fai>>NGy@MsGWMRai#8-k#)p zMYP{Y&m?v*6GnSR#?qH8Ai2$WX&6)3HwWs@CKI<^F6P}H*(y}nq-D}#>KeJ|E7FJbwJ)Ex4X1toY;;cvgM@O4Yq_t{s3<8 zgbCaWcA0qo6!y2kTylZ|b>L-A6UW`?ZAA}uH{C)HHY)xKdYjQBCaE2~Nx$M`f_5-O z3VX1p&X(-K_Iogs9`%)gAsT`iVzpn{8rTzuD?Lu5#kWKjR+ih1ep9{+k;7LcW$^6RiAMifw2aTwHirh*Pj zaU*2;pcDQ@dU2@Drs9pvGn%Ggu?DOv{*v$FqjU}ZMrp|ueRmX*Ehp7(uqC962VnSi z!UWz3@T+(V`_M0wj zMvu7Vb}+mCijx`I!4Ns@F$?Q#$sTNf5@s?1cESek1-ne9bPD@hU@rNBL4FVI z_%!j}hTc~63b2fPlUuXdjK3LwGkV01Hr&Bq$!w8lfCzc&u?RaZTSAW24KSeU7g-ph zA)qn?;wxJNdz@sec+=j?^w%sbmY7ccrhFKq4oDlyQ(7{MzoUq3IjOcvpAd58{V;sn zU<3Do%T2a?3i}tsT#60dLpwfA9CxF)9XM9L`nl4n(2^Qd2VRyxZ5A@Q7EVIqT8_Cv5^kDAhe^b7hrVhv(`i|0)Ir{G? zB3n+X-C#?|R}R4N?Su)u5#U$l6!tg6T#60eLpwfA9CxF)6+PJ9VjDd^+DiY8^fLYq zSXQ-*9q4RdfWOP+N-(CdZw@|vp$O~kSI~i>jsOEtV*HKtGCp55z+cH4@zlpr#ailj zllvXQ2!$%V{P0P5C}PDsAXDN=p{-cNCE=C)HN5CHS=iFnl{<0{4Pl zrcgVD{Vgz;9FZ98p&g$lj@!`Nie3ShkzMS}*w+|;3+2t|QSY?j5Pv28%Ju~W)MEv9 zT(*QFs~bwhk$&OB5DgJ9OHY55t${uIZ%TRrtm*~mi3O$E^1Je3hB_c^R4!>rAAd&? z*>X~Cl|CU9>-%B&w!sGO1D6}WehT{+!(56D-9tM*O&oWlw;etDS-FiK-&d#qMtb=Y z{g>x%$zt`A1(d0$>N;$}Dht$A9tJfJbyutg3n=q}P~scuwAy^1{#u5` z61%D2ln;y40ck^dN=ugUcNCE=C)HNz6GElEABJxmY~Vg{xhc0#VgF*7OR=GQXve3C z<8JhL_i9#Q8QbVFn@<0Y^nx1wm*+CcO7oHh)TyWDI&ATrAW&BU3~ErTpc5>h&Id{v zegyxqz(N>X~_!xcNCE=C)IASDO5WLVEA^z1l|bn zt8)tbn_(`+2JfLApC*pG(c6k1>~5otUWMnH1-(+8{>yWjWR=fr3{l@@DlHgO*f)nd zeW3yCU1$7;AsPZktH<~o>6Pk?zxXTJFhm1;uqe)!?7{YzVJ6GeR}F?}2pBCrU&z+L9{sm0J^Ut~H5juxM+fRR<@@-k zw4v`PEm_0gQADY&~`O&oW_bX|oW>~6P( z9{soZ3fHk2J?g!KpWRoSY|##e=wJ`_)Y+0fDB3#AWS#nI!4M50hKu;h*1#V97k}#= z`Y-Wp!I-h2!2PCtzfB#WYv?yhOSbTL6p<|_)mE`3w8N8NCrsd8u#5Ehw$m>)4DQ^-lZk;ICvm+`fP=^%%mA%a+h#bps5j z`b8UtYltrWm;NeS1AFva`nlSB*th^av7j_tepf#1PzR(9>%gE`ceflrYVUb?5NB`x%F4+mM zTtI&tI+tP#W?7)Fny`e;UIja?Av%5fFL96bnmzh0dC9PS5#^Gfx1oH$cahUI^c$rm zJM`aCM7Eq%yTO*T8}7B;@JsXl>_UDR|KH0sixIt&>unJ4%U}&Z3B+J>ogwY7^EC2m zr`PIV1pE0k@z%AeUgpu?#qaaBoIUzN2 z`Le|*??iVspifi(A@=~ufgRb3?EUV7EwTMD$pd?0R0rs({_sz>B76Nl@pg7IFq&d_ z2MllMnBhU1mqGV;$sYcW!nFzhf6z8)tE7cK_ve22e}VUdU0^@hO}Q5WvHRD#{|Sjj zgubqi)eC)B5Asp$DeS(JvJ*k}eu=-!R%DM@$dCVEPfWS4C$cBs#Tx(T%&z_}RyUG; z{2j%Bkr%rz@P#Gp3MTbUCbD_?h=Uk?A@LO^&>7rfAA_Ge7xLgA!Ot=&w^+}!i}ezQ zy!0J!$-P9<@p7{eUD$RIBfA2y)Zj<-_}u#Kz-TksA-* zmSiV#mS5O|WfEg}goV^WrunaD`uPC=ag3|`K2z`9u75-?X76647xTzVUo2Gwcg440 zXX60gHC*8r!Mhf8q>G-li}hlLJo*V;IoD_7OkZ$)%4hXAU2E*vAdTF3+vk(He>}7B zZ%oQ=fCst?kIrY_`3WXkmod5gdj8`eUfmco@j1`t4#RtKLQ-;^`kKS)V!f>L(ueC9 zf}NixNv*(1I>avJ3ck%%!tugS48hLIm|3isR381L{U+sdG(-Y#XhX^uH!FLs)y z#^Dj?;2sz2_g%I$-f3fn2jRWA)btoU;wr*~L5X#vuLc~SgFX7EjV@ihGxC|^;0l}{cUq>-L^bP;Td<5(iZ znV5{z)<7)yw2kGTg>&0vW9j4g{~T@i1pd=*Q**S>UyK1C2Z~hQC9kkFt>DkkgT#h37V@?{J+ZI4@!vfwrAUutoq*N>FTy@)w!I zw>Ue%68yhxC|?JIa*w&RNgbm-gA`uglF>)qldrgf1q6YFEU;$F26~+d?}g#mks4x_&X@~QI|I9N8zcDEkY~< z_a8yN>W&K%B_C_x5?tul)cF&iEE<#oEP^`z|qfO zllJW6SN6C`l^%rm60bD|k2p)YN4%JS1U*jK%pRlMBc5b3cx(Z=$4oppL|s-L;u*%m zJST?1p*mZ#C&0a{zjEk@gW}wrk9R?1B|2&NF~?-2Q;CQ&-%bflMn=k^Nt%g3tH@DoGOwmAw3J%$4i=l;~e zU&#{wq}c(M;s0er`9Ak(r48jNEt$gKQ6%97hfuqQ#}v}F12!GtkH5jD3oqgS^Io!e z68~wp`PJ47o^ z#5an!VjRxLyF&c3>;TL8oLCQ(@6)E0HibuBS~7#bqe!teZV2@!%5>#&tYfzFG-YqH zS>l?hKj)>(C*bI3usO#vIQ;UDn_TTdcrWo+KkuR*Su-PB5#Zhf#@`H_w4gY5$xGIVr}Xkc)m^{xoiy>)RzJ#9 zS~5#}9z~`YU~3*)1E-$Q{}tdeXmgA9u+czq;oMh4ukks2!*54Yp9m-_G-%i#NL$bEVZbReO?0 znP-jPJPhx}PSeUbJmQ=iZ?mT|eq&%g0Tz^&q^Lc&#yb#97Kc;^pc`&}-rY z?J9S~lk}U9EuccYn}?{&szbiiHks;O)FW&CWGe#PyT;oBoV1`gH}ivdx41V+FMuD@ z^(!Cdi7#nGc}h$AwC7P2Dgn0Up>-atdk~7%wn)47JI{HA#tHnV-B#vo zrg7BERgRmWeHh*=312i$*>k4D_?vG$j2`W@!hOR(LO(cWiugN3^{6Sd4mlm^72vtE zHT*66a9-S#Bhao}#FulF9rE0tI`}KuBc1^}z)JkTY$)INi8*OQc}hzb@plwHyxejg$CKyRELa+2)h3eV00i;k`Ibvpx=wI7hipc!lP} z=&9Y%fBh%Wd&~r_rxs9q2Hy`k9qIY-+`0N)?!H%opBRF6t>+7U5nCw0L-+C5N&0Jv z9bjetUpD&czeQqB+EnSkq$LB|^C*fnxc>-c))aEj6H5I9w$wUK*&A%Bj=$mao{M*5 z2L07G*Lu>+*Pb=y?qPT@cA7TE;SuNDcyk|q2d zMX^c!L{NXCOjmBW-5yFkDE&GL3l6mT4V5t zvy^+pE4GiI*Te_fRq2Q)S?)fzfClmI9-=O*4neJL3eCHy$LzqC>VWCL~9!8IL+TgxXK0-g>{TqLW zXdX4C-XW(Wy%IdP-@@Oz59bB98G*LlWBld3cL%=53^$^9BN<<->;S9r|FWTcA0L%A zl&7?01%F3Th8G+{?HV3asD?-RHaq^bH`r?HCH#NED|b%fKkc@;+WOrmUHh(uhvB{W zGFE#W9ua>TZ%f^W(Nnvj|5l$s?=e&DJ+*+=Gx&bU=}4~(&s}WaA&>Xa_?d4iFKbX#^2^q z^d2*{{!dnNZ;Dm>C*bI3usLUgK7O^2 zqZe4t$%HQ&gGZ$QGX7NhN6>5H1MRAD#FMOtM;FkM|6isqs}9vx+myO@QID*7ldTAF z@9M8LIB7vKZnEY_vPb-+*MuL_^(!AXi7#nGc}h#xY0smmby)8mLF+tN`yez!FV+b0 zr?<&AXxEMKk7Bj(1pd=*`LKH_JnB_C$Kh<2*=Cr8FB+$8+B5g3YWOgEw9^jvjrI}x z!7={-9~RJ+?_YL0(yPI9mwWiz_TjwXHY3osd!+;D!HWXU$%ngDyoodYv&oLF7XL3B z%JfO~={aNk1 z9bRQyVF$iw93ByW>96&Wa(Zev^xyUq=+UmjA1A-J^C+c$rk>OqCp)Eq5i}@Pw0eSh{4}_?eIPL^BDO){-41$v(BP_KmYUhUcLW5 zc%n<;{65L=t3d$wIKlrsgMak7{`GKk-1m?JJF+#f2Y2giIeWb}?fZ+=BWn$u9oYhK z@7?YJXG``JXXPcs?)7k0+Cd8UEAESY-<89>EmCR8Htl&7Ev|70t?}q_dI9K$IsBdT zI^jV$+kYUxBi4q`Y=;-oc3IC5{*2cMH&Es=aI^dd#G|tXefiH?8?HI*ZLyLAJF+#f z2Y2gi4eYhC_Z{v({=6O88rbXg4mew~*W~^b;;)l%+5^syI*`9EFa8*RDNnmXB|G># ziZ*{ALhTw}Pw0hz>UG05I7a;1;7)w+aJ>iS^}o%1O1nHi1H@78!lK(@l^+C%182VMPl=!r{whO^Zz%Fa*DdYr#KKC#2xT@_7xq^;d;giA(ceb>?cwhzy0p&-@WE7N7sN8-N=)%h;CH(dG=J-)cGNH1f^OJDR(1h@6{X^Q321n*bDtKjz*bfk-( zXBO+ll}A5m2iM1^aNPANUywVxR_Ili7R|cxw!as98{Ey54~NR7;D_0PXL2W@9-f7& zfc}i1Bm#FsaqVLIZ=k20rP52-#dP51}2*$xA8v?OY0oeGPn)YiHN$kLbnB zV!fpD=%;n*%=+?WY|6dVdA`S#{vz1V%p}*H z*$z|pNv?Gd%-&@wlbGWhYgT`AE;GUPk_+pCMe9nctXe602RlA|KPMv3bzCG;(y8vC>dq3mDmH zY^(b`3)|ymKL~66U1qLcWNI4vDMRy3aXNMSM9L)3iN}I_I38RK+Zk@xaoR4{D;e_W z+ak%oaqxKN<1o^74oH1pEMC3a#*03T3_EGrsh3IMpMM8>)C=vuG2gyprGqdi z^T^W9g3Fwa^kBca#%t&+Uo>%Mu7_X;v)V6TAu@tV>2z8AMf&&_XV#Z5xVzt!?*gZn zIq1>`88eIF%2SzwTMcm)?f)thZ(JRV2amv5-|EHlFIlhtLc;SOVpTy5mh$6F;lGCu zbbrB1)b6&4z=r|j4xiVqqLT@$b^%kxl%dy_zsPv`J{XjF3++ zH^PdrQ!)ZOn6va>*>d(^A8Ya#StOnbW`0vJLLN{)#9yTi^{KRE+}yheku4`-|6PBl z&nKE!aJ2e^HsRmyB?^z*SmVV+toR74Ex0GWFKFVn3*By%j&O@9tZLArlR)E z>UaD}GMk*H566J=eUCOy+T`waX~_if9fkV95W3f4OGvh^h$Slz!dTx9tM#~zH(yA^ zgNImc!Qf9DHvu2o%RgjOjeBg08F}q2P5JBsBA&6*?dVZ=^!Mg`e@<2p!l2BfK)qKk zb2`$4{f3dd&W(R5W;lm{i7pUdzJOr_ja41_i!2jQzRm`7H26*VFh(1f9`&iTWDd6Fp5o=dYy_2+c+Zkw+7Ff#0< zWv5<=@i$(+13hdN?&0%uv}a_hc5necbzZ&9=|~Uu8)l0B%sItrX0C@|2ea-^3D_P1 z8VdH7{*0^=&or~X+4j_UM6&#lO>!=4!pGmr_g#O^wC=W%vZ`6l z=bHD}EHm;s&T7@J<0}0(S-suqdH5A3=+DSZb$-U9T-`mFl)ThHrgUPZ((MJ zpf3lEzmZ;?9iv_Hk`3aSWi~laA5H<~`)S%ZX+D(d(vlhCI|}uIA-K26mXPgT5z96n zgt5LIR_k$_?!J&nS82ax9<6BOUhP%apL3miY>pXu?JUie@t1g}YPX|D-35niH+_=( z*CE)Gg9~6>N;fWZI?{vvHoAXlT+1=TIRs2}iSakhH3}N1Livkq5>LK133D{~P5CfG z8z*n5Po*WZ_&W+$p2`$p|23uwx&9TgT;m}a>;14=kK0V|g+!+Ikj+$hv?_hvi`8Fs z{W;&gn@`jFFf#0R7({2#ocuUcUO0&GuhNWa|%EzEBTK`Ef7a_`d7Uh2Gt^(DY$s*fCkvu7s0`Oydsp zsJk-#H>>;CA=s1q7Erm*W?PpzTe6ph)z|$iS>hy#COah~u!Ffyf0ZpE4f`0Th&QrB zJPXYF7GZ?4K>09F8z*h3Po*XE^xsiLww&ail~n%(h45XmLi<5msNc?QS?KTz7J+do*WQK> zjI2EM_6S>yy=uvmoL$(>5>XS{ zojUJc=5(Y7`)zdp%5aEoz|8d!>|oaOMFF-)$iPJR@mDhBSt?-Gw>nb7*5_Q-LjB`jy7PV4pUdHW zw$$YdH|#(vHMcYIb23rr+<_i-SEv8tuVm1_Zvl<_tlzuL*^)gUR$uq8Y>n?Cba_^c zpmThQuWSi<*vGIyyd`;_C^73>ff3^C$1We1Y2%~~^{KREK>r;@WXnnJSy}Z@P!5m9 zOZ^9JseQXwYCUd)@Q;(l&Lg%6L+m#`;bpq7y8c`VAF<`07`8LquH!KFV#4poFVE-}`YnMJPB zhl@b@ew8*(+BE3Dq$NwlcNFRaLvU}CEuj*wOq9b1VXSY5)q0$3U6~5H580p{gQeW> zWqYqC)Ss*2_id#whK=)t+w|Z3$waYtJ9^Yzlku1LX2~+`{{Ls}&7&==s{7xyyL0wA z`}BRY&z^N})vdZ!b*sDgRtHuG1))_yAQT1+ND)wQ{Ah|u5&1z01Zf-r0V4*J5Y(~( zLL0${d4S~r6r-pp82tr=46xKZKusWlywBX{?o;P5;(Pq@9doUF=AC=Zz1qFznsW`n z+*D$hQF&ru)z|S$=d~(3oC9Eq?lJ$CD5FB>DN%iuGT&6$DXY)@rg^E;#>pGrr>2!w z(03SvXX>--v>E0!MNPi$Rpnb)tZ&Au^)%L=KTVf=-?GYG2P@^(b`br})Bap%*SsbL zEHZe~;;Glm|H3OpUxbfO+U2l(hln?8-(eW!!oZ=cgvIA%wU+TBa zhNdEqB|56mpP|C|TVvO^G54G1qb6;fyy1OnT4@!1hY>$dpQ&KX(m730mvd7!so1sf zv*6dr{&l(%eaotZ4pz#m?VP;fX@73YRd!u^Sita@4C%krZ&|(wAMdV1|83~_b+`Wi zK6JlMU4JH)rSd9R^>zFzwCg;VHAVtFn03BYS&EW++*YY?rHn@n-Py+?R8gxCd1=wc zNgLj$rj^#{zr#pm#gs9tp#2jx_lr=doHpO+9|i*S=cCLR{%yYZqiD?$0gx z8CH=kSWs4DJwBRKEx)2&^!W zto=3NE8#KPYH9nXJ<~s%SUXzu;VRI4)S-=&HeLEJX{B}QcNp3S24HMcS&F7~{HEOM zH01MGwVp=yyE8ScU$uyPrD@|jerbPh%kfw}Z^t4-JmHA`+xms4deyMN7DDFV@E43< zcT*QTuyW3Uxv4IDE#-;PSz>hj(s`{#TS=gvn!WNd@G&j{ou|60FH~r+ZM@6cbH8a` zy0mffhWDvyr495Q#^9OyY^?t}rzu);pWl+5Zd2}}{(gvM<|`Ra9#BW{^*(4Z49%zlhUHo9H`?_<8zF z1!I=ZX^OUdD&3L~VzITTzptauTIzcPb+m+byMy-lxL1jOffeXFtd~9X-p2pnx!0WJ zf4+o%z9~iD!`e6LD(%ZrS$%m;xv?)x3sGJ1!-%zc*c&Wznn19LF@Eldo(|6*D+NOSop?!V; z#x|9u=*oAzu6)4l$}h0msulO&ytW){w`Bs$`v>`-16-YldU7gOIvYHK?$f;IH_=_| z{hWASk=~oM1(o*;tigS#ypDVl-6zmR zCu#?Mhta|+JV1}W$(*JL<#soeUs1*zW2<#254oIBpqvL&Mos|8>5OG1-tjBwd_U-W z980(u-9OF$Z{wX{&5Rb)9vLcQIV!6!uPZ6uMBbb9Y1&6DM`g{)i#?aO4dkik zvdT*=m;VzTwq|zGcNiVnMStm|&6uUn>_7LfolxGyTKy1s6CIAEtT*tkyOdEqbdThe zg~moc1*o@izkNw`0qFxN?<72Gy}cl&eK{&?AaBn4-Iv#vUGx=|r*aaE({7K8WhL?? zIxd#?Kk1qLZCKxszB>%Hjwet(^qC4%zJMQr`T?fQ4SdLdmQ9ed z&!#-bv`6_oGs>6Myz(bD8>R7Gr?)}3_F-cqv>(DMduiXUlkn<&sAiPU(LDTVGx}W3 z7xZshR&QrN4aIu<=`_~cGC$>3v%QXUU>ciKu#Sj}XHcwj+2i;mUTN$Rdhbe`xACRS z>^CbgB<@+@ir=QOtLFJrsvHkS0Ge2y9AOKBc{-|atF{ZX}i zny(rDre#ge{ z->P4LArcq202?`cz8U2!X*ZKoI8n{PO0~vPNpRg=8Y6nQuo~=>7 zj3Ezy#-r$L`Z-zD$=-kw?Odm+>X0`6W&JeNm<6m3h7cQMd1Xpt!!-YoImBwc=vZZ3 ziE|qTP&N+`vGWat~<(?Q+?sj)ADRC`Ep}py&BQZC(t;pF*p&K zJNs$qJ9Q?X0Uz>|yKo-9fz)^AWO~!F-0%1)-)Zh}99$Tj{C0HS zgHd>tuc3MPt=hOXKz4$aAmz?t#8Ra0qn;T#QW$#K<_g+bk} zbd=D1PxaLiBfGPohFWHfTHJ@h`Hi`=8OGtr7qG+QJiGb^2H%a2onOOwLCRg?{AZrF zk^L55uv_tey4ZJH7dS4l)!f21blyYn8s%%NzVO@i=dA&P7x}`X+;LecZ~8{s;AgP{ zyk)s;)DDov{;T>8@l`Yre~Gs1u&I`!{j*CO=UdukNtX9#juGcB$LjqXw`%QX zY~rY6Zk*l4=dhgqD4pu;a8gVxsnT|Iz6aNE>a%(od>oLWzl+u{)M;Pl3{c?r#wTp6 z$OYrT5H=dC6k{PqFgEW8pkB4VTDavYOm>pRIr>7YwB1yVi3`JrMd(@0M}%Y0w8`&` z(@Gt~bBAE@m;v-)$DCiM$7Yh-yw~x{;}~)7bnNKg0;{&0F@lTM^XOapanaGF1T-h)vX{puIRV~NRs#*I{esN3OSLV_Z{H$TCFiwp)J!tw{`n}083VVURv zG}i>Q)jaj<=r|16m1gr4eW5k_YZ?~@b-S{G=Ec)7OzV4RoL1_ZQP{Md0W#>Dp)Y}y z9Fg`~_d2P{I7Xa19Y_8xu<2{=3h(sF(})xH;l^f*SGI~`YYIj6Ck zv8l+rM&If>cIrRnW_lMm8IIUzs@u@{s~Cx23hX9zS)rd7Be&(#pP{MnBJOaXLz&;( z*Ky#2i^zeKN8i%1j5S?cGHKQcXzL~F*JaaMVKBCd_Gf6F`POICFQEJ`(7d3prcLRx zIIT2=zQb@aYz&}t8E&o$U%r!0cOJtaJ&qCQE+-`?KB^sUA7OE%N(!s3EQi3!8mXU8*M7T<}g+Z zmsZx%322)o=3fuDJcZ4;6p~lkroU!egcN3s_6R+z`6zon&!zvC>A$3vrs=!G@Mt>& zK$RetY&!d4!IS47|HJvKfuxU|we6VNux%)edqSFcR+#JjNv*OHB34j%3gmnvsk4 zp~mmwHMa67QYG4R{TjwE+}qfw9iYMmd-T_&KkGUqN}(?_Wd04#_NCXE$S0k#~*0ouxUe_H`#O zfFt(#<~DTxD&cxx3Q~+seuMs7yTu7}^j~OJF5U;mZ@+h)?Q@Z$B3(Y-SPdP&D!61a zCMTe+H|VcEo7M^!W1FPu&(I$8ZH`U9BIWmi=DX;qX;WkVRehmZ^c{weVPgR1vSjSa z%kpdxJ%&Mg93#$MwA+8o``z7)O&koOPn$5Gv+H*_Mftf?!1z>XZAa&O2<@;pNHZ>F z2raAglH{mgXdt)jL*p_h6Me$YG+93ZpRmz(^J;EkY2ng}aVi0AQ|H?ZZh49nV^NEB zw^E_M7D7S^Ge&0!J*)YsbUx3eUDfHoq?HEr-(h5EKLc>#o32?D1^G=jC-*w}_BckI zJ88FD3z={?V+05A=+mb6%fM;e;goQZDE4q~Yi~#AJs5@e27d3Ncr4L*DJt~mr<{Bl z8FOI#&dMij9d8twD%X`TKc#S^F0#o#0By5P{RTP?1MS0I^i?X(`A!iR26em20?i9w z(wa66`mcUfLvz&cFtW6r0oYGS#;&4V6BOk8PN6f75$8_YtyRqSb~8qB0FORxMZXMm zJyMpBuo=qwwX+SK_h2O68)O)pbS%+%Ns4>p`6-sA@<5*PJCM)X%A?5Ejwiwt`Vv;T z#76A^oS)S7Mbe*j9TKU&&@gu{ZA-%$^DcnqLq4@NZJNx#`q>T5qwg>RF6l8YZgUSzEdd6WnQ^A?v=tjX}7193-Tai1XmEyr*%F~ zckaMl?`e!z7h_P`j?Q~93h$*K+#io6Ixj`F{`^#Cqd7r|@w+IqF^`Tp`6kzuFh6B+ zrLJn7C7^Bgn172p4g>AOg1#{=p3l2JDt5anpo5T?rjB9MZ-@R%T4{;;9Y%q+GXR(B zCSzAkUMg1Pv#Clnj?Q;FRXL?nlu5=Wt{|XK`_g5+zLyQ+k6_fSu_3<=ozXYg8}!F8 z=2i5P`rdec!Vv8yC^LSSspMdcp8N2GTuw0cNrK>WI5$8_c<<@FR(iobH zyldtt`AI$#ejWGB|423Ddl-?nVKkus(qAib8)F#Zrozjeu*G}~t;$<&f(qkzSzdEW zT%@QdwvRWN=o-ea3Pz^Y`#@XQ`L@KSwIYYHO{(-~Xs?ZalE=-J@eOFci;kK$A@i^5 z3$38N-s;+m@wojm?faV;UU7Jc#xc&moKmWC5~#eoTu8h5 zG-DI;!sA)ruvHdv?E-QVv?AIw^{cWJx(G>29uI2`eTOc6s4;eRnoeGk3! z=uG*VCsW_!wC__*Av%|Goa`x8ISEu=gTo3cE0)(g9%HnQUlj~D`B>IK9{p8iDM}dI zq)mTTifidRaW!qA?=WgY82bdwWy#ou%WJMJzrg_iAV%pAP=~X*rcB{JoyXXE4gYh4 zU*esIvKyn+6SS?PDd!g2m5-6{G1~V7=rBRKeCFK=>R#m}_y7iLZ3lS_(kkx=+Sob{ zW3_mHN5`@fd0}`ZMzaU_{|8Kku}Jeu-|3~OP5SRJ8gd)Px<2Y5V+Z|Cfq^;b$anm< z{Aao?KS76l(2~PBeDD?8*CG7RkJ1%wzp@5{+-eIo6WaB;lu_NSTPf`aTn3E$s0B3qGZ(#v-=MrN z@V-9IJ5l58H|V?S-mG#GTugiU3GMz|>aH)Z!5XD6@2AM@BbLV@vBVf3%j1xZ(!?lDFP-fFzX{NgJS&Z;A=zACCJr0BUMe6!a`}zm^@<%bG zeg#}d89xdpsm~unFN}4M4?RRbhF6WzDkp);dlH>5!kFKeM_7E?jmj7X^1|C4+l zi>J+aeBHpQz)`-GHOiMaVx0Yyi<^z$UN!BUVaOId6>~|x4Y>Hq%+RXX*(ei1&p?}k| zrlI^DO5^$l)~rOqkL&Y9{!xx4&}4Bh)&C=`L?Q~W%Vcf zX(-0oXH=bVJY_hEZiruNf@3+pwvuD{UA`oL%qs39xF(&~H0l2?nmIlzzcc1bdrL?7 ziZ*%W$HqB8?EQHOujNVJByjhzbA*M|-N=UDD4%PM@?{Kp_zPNe%4g%vq~+6mM^)6a zW+wY-sM&JKPtw7aYpmWW7!VI9o-q&4ug4fkxeDwK=Z?db;TU!pP9yNz^+l^U24BF& zEG-khz>M-WG!MU3-C_pFZlT&KS7wZ715fSa=ddgLE8D_&GXO^dTz8Z&r~1I3_b5AF z0S?|uCjSy~QRk&ZbtG-F)BQ9QPi`}ex5q3`;+k9XXv%8bh~f8f%PL&R>_xdtOZifq z!dUd7oC)5~MRwCgI~q&bbvEefi59W0bJi$dTlIzCYH(+Bg5YMFCgl$3S&Gzi)Z>4$ zEBl;nb2@ndjE0^!%2!l<;V+|`MVu>Fja`LXFdEHEMK=19HoSX|rMI zVLa1OPxIoSua1DZ$$lDY8=gA^MpZ_~Ie0oq?~38bs*K&*j}2MJwM$R1T14OK*V3l+ zDDoC#fcoEDWcQw;E0Zag6X{-gCr0tZt)l8T#MjmS3BTPLw+ASUV|}6Ag=y*rXq@EC z=CtuQIxe0U1K{T~ouS_lU!?lN?{qPOCMa@kwZ{^@YDq zeY$uBr14hLVOH~9AANO7C`|X$&|$-?rbmWv?%p*i&fNf4jx9LdNzbj_kajAEuo-xD z!!#c!z}^J%?q}CkB2zfAn3fNuQf(&7>JDN(ucw`%-w>ZTjl*|LCerx_>hke5KzU8dM3?cE+{5qyayqu(!%lF`O}BY`0*o{| zJ|*L|$(@7o6@8&C>NCZLVFu$FN1EfjWYCecDbas54Ry`*2(VhR`9FtvrL&qrVzr%? z7s_7mtW>IjzO}!itjD&j_E{;bz7S*96c?L)y2qW7`HcKa%I8FSroI!S_~BMn_3Nxp z*){HYFMZpW6nUs8Yf=ML)}$=C%(d!06C;nl#fSOQ|C;UNc`-nl)85pt&E~ek-*m|81>>2)xUcyrKu6N1O#jt1)I;B4SZt&YpvFkN-xa<*TS-M{rP9rnnN6C)a#qT3ZOx<`*QCfW?u&=;DPGmtTd+7#{OHrHv6 zn;1p(tzr`{dRCUx$pf(VC^P>i<2Ac#Y>uKYv`2krBAPY^0G*dK9~Js@l&R8xNh?jG z?=W;s9{>+v-f@hqOxJz+Yp(O&n(>=oNMU^KXn%HF=v&>2HT(9qss6K{mx>>-p_yy# z#3;U=Q^!l|PH!cA^xxWb=_o*7s4q7mV-9s~+xNR}t7l@AXwS6+Xnz;8!N&BSfHti2 zPcmMkJjPe_RZ9QOvQd`Dc&6poycGL$l&R5wNh|ef&%KPtNqz)FT|il{dV@YO#PSXg6#HloF>k0EuGj9F7-jTr+`|Esg>0}f2PI(b(V)Mk*xXha4p2xMeU&ob26*rk zFrK*>_cb4tb&jIW>hxdIN;Bv?43CY}0d$_z`3B_VhGrnIq=W9tOtyUuvj02O{+#M8 z#Gr+~;ZK{UK~MuZFq7wmdx5+2a_#j*qF7q@gnrYZJvSbqU7;^DOFti=xr(;Ezn4Z| zMXEx3Zf?Pf!F%I_dH~iQI^U*so&`4TyT!U&X^-)@pc{sGE9tzX`EIR0N0|omFKMM& z+Ve0{jBx{S2+_pjI|dq=Zs+8m{am<}>)x+P<>bG5+MmkYgQ@TiBWvLCCtCRJOCg4mw7lU zqc1ckd(#87*HGX8%E76giBY3HcW-lTjZsX@umNbpy1q!pYX>7_guY6J`33_b8}IqJ z{F;|~e~vOO`Y&mvIok6ud^XSrV69?txIj^oSGxtdIw(Zw8~zn-=db2v>v#=i{H;nIZ=O8mr~i_VnmR{OXKnf~ zX{CAe9R>>^3`KLm7-?g`QJ_PwC`aXsvNBWXU6U%wb7O&A?PsHf7__D`j=Zm>^Knfk zb5(hj4cQ%RMpM7cw>indM|bwX5G972*Ed zIh0v@=zJUKJPT5^@36%91?^FPHMy6KclNZHmozV}{v2gG%)g|S7HH4I$TG$aKs!$6 zCJcvCk^_q+Ii5}YYiK)1%x4_V2C@)?)>I}XpK0rS+>p(A42T#xb`a|seVKoX@=HI! zNMgD(v@7(5mgJaBf?_yDd%2AMJkC4-nmdgpSGyh_pj8YM2`a2Tdd$Dcc&%f!sJ=?+ zpA9)0ZypSa%uAY&I{i7yu-?(M(jxi}BOtEg0JLKr&lOd9x>uHeE|z6)rW9R7KRt7- zAQv+hPY`qe2G$QRHQjI$FS>gJ>KL!2+we$y5aZILm6AN4)-l!!Uv#^zM=MHIPJ&Wz z4fXv?cqSMZnG0Gwj3d{(DIy@KoCH!FgE{P zJr&-95$gwd7~U1f#H~fAVdVZX|ML;_@r{e|Q<^_6DpffN%F!C?`?^?GEU(SCm3+@l z69GYE>n5nN?$G&GWhs0PP)JqBYbeI^ww#M`iscsXR`b$5A0sy3Jo;SHO3Uawi~?Rb z3Gyu++nJw0UH-gXllK&>vKZs>D*DQS-ICnIeETRKpg-eq%XBr}n`YztO^gy7F+Qn> zBkR2S@957MPs>%C{HTenU zJOe}8e(eh0!6n&2#08>}$S2Ew?|p2PKa7WAg?hfZZ)B)GoUO^h^yhOJH;=*i`Y^_3 z^@jTi?Y<9{SCxaA$97=UL|&J*sC>)Igv9JcP69Pr^vajSvQ(aq(OuP7+j(aLMh^8D zSkj*inxtLQrno=1D=qewf}@mxWS*9JzcVqNafQBKB&KW|oLAqJ|G zF$Ug2q>2Mdndmb-?{Pc~$1v)=PC2RH_H!6)ug94D2;(O4V8iEpr79L&M{*xhoO$fDDxzSyJZ+) z&!lbBf1Ag{yN33?%F0CtV5~bntyJYCPC4*JwN>3|3bDkniKkN&E% z`ts1Tt>ZPc*N>OlqyMVTnonY;nrKU$R$52jVN_TfB`9Nz%(9+Sv}C_pOa8mql#dh| z@@WinN7gvV!C{IYV>HAdE`MLp?}Sh`V|dz#0df!J{4K^;LXS#|`hJo&KsiFg+@l8Y zk6^6tL*+GPEA!ZosXOFFtX1T1;_nWXlR)K#;U$d2Pg3W7d76*qYMuTb3>&K&wC7>e zYyM_cey1}XweRvtRGskp^Vov^>QEmX+Oq@wYdVu$WRO(mYXra8p`=4 z`q32i-NNXG2ReF2y(x^%j5Ekdpz@lsAW&I}Jmz`6wPJa(tbx4NIODK-1JB6|$Kx^h z_vxyCAJ(^tzQd@?=NMP}sM3!0nTn27is+1i{k<5OKZB9@eCp?29E3T6I>9ARLLF}~ z9=?jP^%Ago&e;5A^gbSA^AC6@+RnZl8;4a+0+rX2k7ra?BCjIzn4@-Rdx>Qw@@Ox# zn;%e~Ie8(UNh!m%yr~nvmF`FQcjG{W7N+VSYNE8 zPHObWKk+N_UG$xf4b44_{gjdRtGfT+^y`npqsG!p;&EH$Bv5&PI$npqeR(xm$Du%# z_rL(LyeQNFSvul&g#x6;_AF^0|P$#}2ZI7eetI0X~mb-Lj^ zvLEiSUp~y2(mecmGx}W3xAkvYR{zp|8jA7tI$zCuXR?O+0b4hGPUMc^+&K;s`71bh zx{PgpX06Prp-F$8!wjQ*8EcfU8ar0NU!<4`(in`>M>-~j8VW~?co$YkR7!Z1!spnB zj_{={^6=-}{&Ow$-J*P&4-J3QvSu#rr=b{MKdI^nKh<%=D{f(Vi8Zl)F2P72W+*xj zx5}q#CVTok-o}@;M)~T7yz*BlUV_;CeHU8}&$Cqw+!y#%Tf?@{NmwgK`CMz1 zj~IHc^5?yN`D}H~pnRGaRY%L3y|kZ(Vtlc=cvIdv-(@>1BpYnspEQ`UxwE6fhAB36T;2F7R z!jw;`n!+K>ko7jlb(fgzue-K96ZHAKm@j9I^0f_l|XLbdB;45hPhxj_GAN*E(vl$@2 znKDqWU^nj)q(4W~dox2gXpfi_@Xdi&?|GwqMb!uXn${1Ca!);_$~SWY@XTz>=WnD< z{?dLLY7EaB24^8SE6|6{MiRq{!jU73R(L5!g3E2IqF*=YTl)n!3jK^7}p$v8w0T#Hm_n>US4S<$AnZiF8xCcA3e4tAmGR-eE({t-VE~c@|?M?`4QD zvdP15_cmJztP+z*opKjXp^XEKj3#pc9?o}p4tq)iFhXXnQNFtB3xAXPwE6f{PcBpa zEyg$cpXy866zPAOhFWH`HH^2Pv9IJRt9WSUHF)m?bt{sPy7 zXO^47Cpu|)F7I;U%&U8rQ`?KNk@_6s6Nfzfwyd%TC}T`+QSS1Sv_+78mUjK_oa*a_ zhL7+$aMmR5k3)Pd)fax9$Q(XCeKn-jzJzBS{WC+KByCFcPfbII4au5*`{bESoSr<` za^&NV+q|E{4~M&s{BY8=ZzAT^Iar8r&8~c5r73>DAuR*Dh>;j znZ0Xkr%mbkPDVCjKxYVPdY0EfU)67jPg3OJcVq`L=1_gmH4){m(RUO%-g|xnH*B7o zN=0<91Wc9j_%y^9slM>HnGW^2S-cZWgRnn3J*tkRO@;c^G?cL67?bzm?bENBo1)XQ zYs{5X@jU-d)@d$HyYf43yI7qw&6APGJX*hh22b@)R>n(dHe~(QTWm%?i?NaZI>Z&RojNud>)| zHrAL*r5niWC7%nsGHuUFxAtOeq&|oEBtss4Pp;1`K5|sm%PF%*QBiiRudt z8Gi#dQ1Tel4A6Y5MxAQD&it!ssAoo@bM^qb@(qa74l>eMk(TGn>9A4qI(CqjE7n@_ zd|-9aw~lj8`#fAi?rs(2jY=TgW8L+vOy^mQje90+`6hhm!MxNhpf40z`2?vJ?M(J& zl_y3SeXF+XHTuPH5+du^Mlg!7a`~b#P^o8~^XJ+$!h!*fl(DG}(t2(Ma4d!1> zLsRHG44tzFh?mAaJj8o!WpZ&Uv$*8Y0`gHUuYVAhoN)!0C={V z!bh23Kgwq2!kMhx)W}2!m#AaB`_A6qmGOepYh%3eh=277;*WhF?;^Wi;FNj3=UG9x z7h~g|iIiNMcX~9&=FWl?sb6SDri%&u&MwB*<8n@qOX?NXx8R-6++M)L@;Wx-`{3Sp zx*Pp(Zay~E4`N(JU#J9Uvw3j|8<9j#(9J;dQa_tDh|NFIe@QF#(RUaQhNuDX^fcvr z=}Y%odAVtIAosPha&XD-*&O?>S`5<*nD96aNa=m9U zHtv~7%UuPR3#|A(AC=J;nw8%c6J)x(7+ZgsQ=S+#>bGU*O${e|KI9YRSx2|2-()^E z_01Sp(H9z0e-+ulMx>S>&oT00>rB=l=u7+2w9*Xv4nybc0d(zMndac&G#htI*5%}6 z#@}6R;@WsK-oH`%vnNH2H?(J|t}yM_+1x*-S(3kHQ=eNsBJ^ec&B`l9j}UUEeH>>e z&=<<)Z7D%EXDsCU!~PuY?`0L=5T+$*1WX)yt;PNw9){5 zhmpegH2|Kirg3(Rl3cN>An)tu<+w^tZf0zFVhzS*4y&Ea?(KJ&PflE9x~H<)dt#+3 zPho8NE@6~!!=v`*UQQ~x3>!_Rdudu~H}{mPoCLXO7jwx6Vp%FL-K78aPNcuBVpILQ zgsknOM8DPfR%ONV=+9vZJ)lzG#zy3|crS2Pkvi49bhcrX*ZJnsIIT2?zQgd@s7;W@ z(^H?>e{Oa~QJ(J<<(O(7udtH*!A!trZ$@6^Km%(`Ic0(A-i^20no?Cx#n>`tm+|%# z;w%*8Wb|R381C?-?sb%^oCGQ_Cx?|(mcnmQzw%=a5UG(<4N85KSxfhre^r)3=V3wL zm^SWWll%F2BT$WzLO$x=6&ofAR~o04=FxW;84T44;wS|?Q=eOrr>08see|u=3i3Jh z{r43)IfilP?<~K2KZmjYbqoVPMyMrt%oQ-UT!o>9epTMX_+@j*i|+tDJiDzu4W%k4 zfy&F{8LYAtx;9gNt=PzU6$auyDlFx6eW9`xIuA#DH!GFqk!*6GfQy%4e@f*nv8DNJRjJBJpz?}x75!uv^WH97*Jd_-#*U4g z9){XJVk08+t;$m9JgogRrti?$SVZ4p1Q-|+WH}U(tUYS-%A$&#)2+xUjgs7o!Etg4 zQ3G;$dD_YLP9l=XZ9Thp5Jra9sfs3sme*9 z@=9_W{p4xp+oy>D@)l$4=K|d~P&o-yp7vLjrOX4GkesrxDyL&WpJpt0meF?@d5k;>G)h6T z_NdFuL{0W|YqF(Pk?Sy&)fZx5?g12r}#`SCbyc%Fu=Ra!ycVH7b$CCIb(PSzexd1ZcGt`F<7t6h~x3U&GR z0?Js34>d#wu^zdhlVa}fO2+TVL8-Q!if7-0gv~x7z?+fweGburwB4P+w+8Ee;o10_bsWGaGzQbTVV=U>Tpa&y(rlKk5NJDOF zH)w~nWejhROI2>jRmA3y((M>SZ*TYeH7Vu(`PF1 zgbWFv-JqT^B43wp%7wJ;OBuJ$V=c9XIpEeRbwc|&2V?R{7?WSXC`fzmZNZql1!MB_ z^b_q@dT>pR$*RS`b-4}6k3c!l+mg-Hn2vC<;AiF^5*8*L|!t-zEgc0 z=sOJ7`^=kts2=)EMO$VXc&1lctb3cX9ep3EG0$e}c)V6a8nG`Qawv-`1M^gNK{o zru`gwY0)rW&K>0o4SD4+v#w2$;hQ{jG&Yn6G2a0fn~M7#%yMHGaYy-FYm_fz$irVZ z^A-$0SMyPdziC+ub7`pA^7l`wy$gM&jBFr;#8&p-mK02M#o?xQ;3`x3e$(V`TW<&KYfHfdhg>a+TR=Di!AcW&)&)a0rtpX4|Ywqb`{=3c*$Llk>PaS-zZa; zq3CUVY3q^^K3ubN%HO5GIC4_j#ulpO(|nXueKLWm%%!2&SAWpg=d?}S(Gr;OODuwC z`F=icyJ_3&P2y`7ML-{U^W?{La`l+QP#d?n4pAJSi3xs`7b{U)Bp--i0hQ-0E>I+uo; zE&uYgAADijmCFvY<${9M!-KHBp2OB({*dYZ@qVUxaNCq$Kg3keKhKnII4Uhw#)MPy zR_{A3eAj1c<|Ahe^R;~P%Flt90f;DODhIG1|2H_#0{;w76rNBu{t>k6LpYe+hk-9+ zM)@k5hd-h|Qu1a-ze!Acbw=}%_J7hi*7eg+EOorRA<#@PsP-}RcWeiT+48%x72U*M z)K}OK=ziGrf_0|-GR|AnM=ir?>m%Re%TpU&xd$g?^o6f(q2CZ+SM`OTQ|O!_m_wB| zUZ>op%LwxUvgZ>rz-H6qzQAU!kig=wf7Tl1tE;~73-#s8Ie~tYn9d=-=DXVdNSpe2 zKMl3aR@B=EoYYZ&4r~P)ER%|~Jam*JH#cn7YF2lz@5-5Y4*r}|VYgOH#W~2-pSi$P zPJ4GoX0~|pG9i$jWUu|pe$!lZ#xP&xlZW5tT7d*s?LpcY<*sbUu?J+Y!bVuYDf- zb08+AaSn}zN6^ZsGJZjL^z~vYLPF`ff7t^MG!;ESF z#|KTVu$hRIYw5$~v|MSqz0Y|aYx0C)J_*RfuW}MN&AT1L;ZXKrIoAXV6F3U%I^rb0 zHLtW1cpUaGY5flIiRR&#>@3bZ&tX%fetR$2nwQ#aSJS4oUq20X%onkb?*jtWDBFh* zO!qjP9GdMy;& z>{lFvU*N4r4f9EkJp3vrfzv+Pvt$7W1F@SbiZ?QDeWPs(pTn;8BG2w4g)O+`qTdi- zsCoD$Slukjp_zbhH5{37Qd!-U`s${pO>0X(4Ry>>-Y^IO&iZo>SXYg|fHmU+J0mYM z*Zl7>PkzS!%@5GmInBtIXfK@iXdJoFbWZghX9&+fHQ6n@NNIaqthbHarac* z=(P-OmXH5)dM2U~G_5hyeeQki<+G=~WJyk*C}ib_w%_VGW-+mg(;Lq30K5!6*-{+9yU1j+e05~rlgUxeMTE5nBqwmwsuK#1|t!w0H z<`Qm#={@>~rt#6GCAoHCPO^nSRukFzHtdPFG9Q1oo$yKV){V-qauRr<&O3+E_Lzqi zmB$#Tw@0S@a!%zW$aFC+X@4E!leFsl7!g{>*hBgf`~HkM`khK%nqvh`o6cMs>X{R{ zGs7~eo3m%o>D4NKEvg`TX!4)K59PrY%_K=u7v!}N}OFLu#IW%MDUZ?yjCxI7@7hKuim!WAQbav6>@9EJs&m)0S?M|A0&7^jtbMs?nY_CzK5~=#EQyEpz=I0gj1n>Q`mO z^5E;LzEG)Vak{#Xy$ziF&{6Z!&f;{3zTJLWY0A7(8b;jSwaqKa=$yZux$t(J3wtMI zrMx;L-&~lI18RZ13w^KZ*m5s-FkMZ%`LiQU`;B>3c|9!28lvj{23!7C&LLD+_;NGn zcNmA@>(;QdLRC%zm507~DBa7N3we!YoKM}lz|^-DRZfB&YbRY_BzBNAZ^4d-4&fK$w9>TMuR9D| zxLITlhM*FhIpf^kec6I+IxQ!zC5Plk^Z3h|rhdwQ4a1RGVk z0>`Zl?CbK`7wlpDdIP)TgB(hD9Q)}Wj0BH!PUrUh5~w_1PG6<6VtE~w^}VG_Im|({ z)(z|*_M!56%)crtmIt4xzDnEMW9K7{EUJ-{HQ$Z4vp0*ry))yqQgv$?h9jKKn?t;J zQ#mJRKvCXzMozxP_dxG}jQq!GO6SNL8CIe#vnKg@Km?KI?qS`B@x@c?=7w9bEgZyk);GuFS3xes16u8; zH#1i+!A`pWK?zhI!A15{S+TtENjl(;Dbv|rQ8@`>dCa#eE0!02k#QJ(m3Gw`=TNo( zFir698^WYq09~SmRQ|DX_D9P#D87JSvS)xA(_H#Les+%i_HSgWTyNN`e-)?BdxIiTvQ6|WBKCfjLn*(~ zGf97tK;;FpY=g>*<>}stT(QJ-@4C3@wJ1VgM>!Pn)zy-~EtE|4f4cJf7H`;)+mpeeD`p)GwO(%%+N&|Eq zMoO+^j_$+3zGm7_a_-{EOhrz8e@XuI$fEqq!JJh<-^>4q^B(lOU$-4>>fDsG#YA`G z2zDM0f8WWrWP1kN0ukb;=+7U^^{in~5mjea!zi+P(IdOAR@l|Mv*kg}Cs` zC8a7Sfy&FvBkNUGBG1T8*cV>K$?v`aR37$XoLD`gCimrGFV3mFcdBn5eTU&ok8goK zydL`Y2{?|ced3+P+Ql`ps1!LD$^ZE8`rLapeH?5`9U^_i4!}X>(=S^^) zi0d%JF`RBc!+DoC9gnu9d8H~RfyyIL3FrMj&pM_r&z4umRG!L7pz@^h4A&pOiH)c) zFKR!-S!Qj&zh7rv8|&{%3$*89WaJFKIr~sOOjM)a)hO?&M^P`TGj#E=zpuQk9Rl|!XvxeID5w@5ONZz zyrS$kt+En%jyx?YPvs|_nfaqC*B!_?oOyYd0hzlR)3=7jbauTS#vOGkaKCG3%2PQB zR9+Y!O}lvz`*>fT=3}}4A36`W=Q8>ZBQM*E2~-b#W(*fU1nxP*TMh6X;Vgi%5yJG$ zwUb~mV58t|e3muJ=NR(JAIni$fGNYUOKR{WiZQg$|NqCwX=nafuX7zOpXOOvBA>G2 zoffB|TmJsznczqJTRt)H@T#}mRt)3MvMmX_ZoLx<+qg$UCyk9Kx<&Lko8ZNki~F7# z$5~?$V>E`%r>y3o95_H8%JIf|Xq?9= zAEynW_Tw~^d!k1GqcZnlql--jI9Xz(`E|p=qZoD;*UEGS{dk5)+0v`IKeTRKzX2b| ze26gUphFt{5aFR&j6ym84rI`VrljhP7GXozNOLAyt0RGSA5PB>tE;H?e|8>%R zIVvj#8;3Zr7>^4cWAH92nulVOL>@cC+Dw4v8$i7Gm)1N0@0u%GW2B1< zOgdNPQe}LqDQl`YYf?c2{kXC>6B-Boy-e5md8~E;tq#W@A4iG2H3MIr|G_HG?_Km& z8p~37vCJwLdSW$(KSl;#4yAj15&JmA4M0A}2TYp3DfIWY>I*GcM4ZmyUdP{4K=Vb~ zpQcTQ_*|rwrg;a$NCogGK#oT|PerCg46On_>*ootOkRH_H-nIEnn-2bv!TnkG0@oK{NE(GmE0_!A%}O?+cTP$8yNsftxD1oZzZ zv2ltGlP#ptk2){SnhX~o=1PRxEn?9sC5npmUZBBeU?w z;C*EZSUf35j>}O8AYbG%@^mpOfJf-T+9$@xR-Yn4kB+xX+HsZ8WZRf+t7U55T zoJ^j&1$kn!<}0}Vm%5;8a`jo0D?_=2FINmH@2m+pe_yB&dbW(mEYHq!p>YF!b9#Xs zaaQ&BW$3FkU*T^FR2~-|#VU@3m9(iJY>Q&h} zp!wxM(*y{N(@OKoH-uc7ca#7*0r77YMPhaqYlM|04q_3VijB3VSZ$K#BBXL;^3`=F zUk**FUNxnvgGZ=>@Ra2l_=t_5Whr;ib|$99dd&=gw`sA;shbL6NI?M?^gLUEdEQ%z zIF18wp13X~Ja#h7-qzp|aCy!tH7uSPFT8=k9arPyXiG55^=bBT?~GZf|a z0#j~OO}T~@gQ)eT_AI*L^;{#obTy>x>nL+*D$S~?)Cq!6QxHBAeM@!1X_GJ1I%d7< z3yo!|yjUjh2p5bJ{4sc6MJ|vmLMy~I9H7dM9{QH~o1#d5E&3|$ptU3LBRBwZRFXVVYO0M8&^x-b=*EcOV6>~FZ)=??*Sm!J#Zwj| zTdkqMl8nBUCgEAh>+hS;S7|Iu<;602M{PzD_+#+C$_;isDNBtwe*>8fedL|T^dW2!JaN(a-I$GxS4tOBm&tQg zhUS+s2WZ+LU(-sP^xqN8Ju`W(zB5I8Y#~QTTc+I`Gi~&2&s%F+T*T96i=#!Ddt5bMh#vn{cdR!g=hRv-K5nym$(IJM*|uIzkWh-k9&}-yP#` z3HW;#*E;1<=)2QE1g2W?mV_fc&^IO{Cf1&G}{qz zS}7yUDCVA-Jh#m=6upUsrZ7W9&dvmd-rp!ItVz47vGSf|P*w(Zdqko5v0`h|4^W@V=Bi8l$)g$WNeeZyviy zK;Oeg;v*|vfqv?dqR-W5X?_#>YTEETO)Kr8?+E6enLIbHC!Qmde63G}X5RcsBjfC( zEL?45ew}n0L?&E-Uc8Ta6E!}VE%;nBZ=9&)=o>Al!js~flDgSgor$R|#G0F69IH5+ z+`=s>F~%tKIPsyO^X5~`1n8slE%$!Kh{i0lk@l^0g`pDHoAE_8Gro{^ zH^CJ=3q0oe8Te}OQCIxFv7!3ck;UHURY2D*wLcqCd}>zjV^fU)(bD7mb1>V0yCGS|(5#Wk~F(lQGcxn{va&#Xh=@yQx|=z-oF+kO4#!#4nbpFf$4 zd6ZAz)x1TSm@ZgEF%zJVt}hr$V(5F=*y8!nm8@Bl=c)|NZ|qcJnMR*WTIqcB9Ra+` zpFDSrXDB9?O`3_NEit^B7npucNf8k>0gh`Ke z%?x}s_|OBrH!^Q2oq%ru%`eHtJj$oTzhQ5c59NADhgMP_# zRfgs_a&euejXsyOQer2Jg5Q-VdG36kp_p7gWhSS(W^!q07AaQDnnhC$(hkoF&4Q`b zl$j`*%fXZlpJOJMWX(p_8w;nZ@Y(#%7$P$(F-zRI!+HZXEMtx`_y^F&{D}m!U8D zjm#CA*4w8vt#mQ^j)316Cs4hStC*UeGE*x%W@<%fmMW%KL%TrB6q?DEGnBasA6N-L zf1g^8zQIiV4wkM!m*wcYO!+E(St?I~?n_r@kY)FwdanrLcNWW1c?$I2AAOZ7mQv1* zjF(C`0m zv++BNWvM*HO51Ei-(}Dklyl=E^3Y9uOA`RbtXS#tn-}LdE@n+h+N`Ail2*D5eMhj$ zLXSD9-n>`E$~9AFC8sM_&V**=^n9~o?TlG5TQ@6a9J6A&f&R0Uxe6bcwc&H%qkfzF z_?8hJZPU^j_$u&p_5rLW) zSU%IwZ=(Hb+URphD_x1c!&t%Z1FSNXjc0@DbyH?~P1j7X4$UgX`dPDTO@lOg&4y;h znpyO(!Uxva@Hu9hlmDA~Gx0lEwHjS!dG2!6zXDHZAJBaj5onYrhU$&}`p%};@azQW zy@~O78md^OdM)$&R8%H^N5;z4{GI%!73fFW=yORcU4_0Q;P+JtRCnYmX7`&iv+KHM zc5P^86#LJbnRN})S|;jz-D=8Qg%7N=;d9LF8uXn%6TgF*wdk^j=dPNG>Fl}=d~-ne znRNlO>^@X)BK7Dyn_b7V6QIu~#-~}RVuo_ASm(!d{mM$84;j;IEu;C3)TgEm&;5TH zd-o{EuKM0{pL6tnt5i}+RVuwzQavP9sU($3Rnoo&+pFDnx9zr_3CX}Lp!2}kVbQjU z3E;&A#$ycJfCG$i9CB^98{7%3ArKOWWqWYAi603A?j~-S>zjd)nNAzHi*yqn3Ayw6 z9hFY0GM8EW@m;^YyMOiD`+N4|9PRJf`$$?WPqPQX|8GtpyooF5?XIcbU_te^v#Ki? zc2sweA}w{ws`h{T(T8E6S6!SoRkj1pnWiKzI{Z z(AP_;GtVHcy1QMcij0woB$E}`P;$BZO4&VHb!H9yCdo&;5z7C z-`Eak@bLph9Qcygw1=emab%~(?!tE(PMLPOQpYhy^yiT-f<=%9Wsm{F(ExMQnezXC zFp_%k|6<2+B-SL}yd7&lUgWuY8}>BzH~&9=mOAL?k-Yd5(g90qwoEKyroiAC z!QkC$1EKHV__2yV_Sy4ewb=G|se|>CyifkkMP04EH1@L3{3n0#Z+0R#@S-}0Z+KV= z;%s~syojpy8>pfs{^EVuw4q!ll@a1=ov2C%->)%vLUkJl{ep_T_}d5CBE5-q0}oe4 ztbh;eD(e;0x~L2v>f;11P9$c1VA{_kdHlW9+(5+=#Z<1kcz1`7Ap!q;XCCQ zl|24NpUErLihomBw(;(R zYs*)y@S`1p^0E>xe6eo$xx-xYz5kQ^JbZ0G|6x0=uoi7T4ZA!kQ^569D9Qp)@_yxs z9Yck^mGW;?uH;3&YI;<;P^Vl$_(uL4oR9E@#zV>*MKR>xy?lh%6Tiq;SE);gIKit} z34<@z6T9AlJ9Hg~61RzkQZMl1i&|{3na9i7e-7B}5;EEje~WD*oNBJb#*A^fKK|a# zCK1UO;VWqs9H+&))pZBJ=}45h2gZXz_ZRr)?pMBGa0TR2ef677A2uK*oV!32sSN@p;} zz7P0Hn~R^c^D=zJ24=6{M-=YKHa-jqL72BPP>bEvH8>;6@*b#H)VuHJr7iQ!{$f+` zm2yK;A7V(p0Y^zI%9FHMKYXX*V}peQ#)F$lUl3ZjpYynnp~9Y^e0VQhq`p_H0P12O zb~A_nUZU?_%NOkqsc@2e0$&je&#*55zS8F6=Z+s{wOQKxFtIr6V1oE{9P--6hxQS0 z=%Z(bbw(8Z@T@4yd!YTI;e9_pZJB3Y7n^~flpB%y5JU1UQ_6*}luKG{5WdskBpHTq;Ul;u6perfu1c$TgS zf~de7^k=cNj2ZEZ@x@9hOY+;asiYPCOVVQH9yN_nias#`s;-~wC5Ywk=L3+}qr%>* zVyRzLk-{bFd##GFRU?wTmBV2#sbKON6<<7r5{zQVM$9;0#mvDsoVgnHo3WULuUFdp zD!%G+-9D1n^Hn&$h=J;7gY7N>4vG(=_QttAIN&9$1^DukgpDwV2X4Vv>>T{0+!?+~ zDP>7s!%@Hpy~!ug9S6i`_)YLdQ{k3RXly8iWM(X-=nD7Y%ra> zg|A~>QsKF4c&U+n_zNh8{Ck4Um<9TCbm40LhJ#t=;2V(kzDmt3Ugsd5rVfjoos8ON zg9EBVsO4eQ-UN>~4mijn2j4h#6h!eG!dGmG{ww9q5+lwg0?BKOYakm6m{TMzHV)ru z#JHXgWE`Rf3ueprt69FBGrMprBKVDJrhJk59!1sWy{*hGoUeLGMKjlMKI9>kU=&0C zJ;_%S%kY&pPoR8;Gw=;ddtb%NkJmX!%)_0pJI*Zdwv>QF<01TE>;39tT1^0qo|N?Lbbe6rRtZc^R*mWB}(jZ6)#>Q zHv7Ytu0jdsEw8+s107K-@J$x4#*a5G7AcqKZn5d|6mtB3xoi7~Uy4lt(%!Rt@hVdk zWqA+OJwMY%Nk@T|I>LG67e7{C;U|9cTpuN|Y}V`)ajNXG05H`gsRkEfgZ$_bzhIE!Uwy zKcGL1BGTSG-&LnjxLT#FU1IS8aKR$yP!~HW4C0 zBOjo>JM>Qvu|!$k1MOFZ??Q>L3Fc6bM^V}vyTN!BzZ{C8lqLD*0@r}FDvr})v+$jU z>_c;qr{6Fp1i9vYDz|(Dh4-zfmDj7q#t*6Q5tXf?I+uSZsm}2P@%5%9tt`9K(@r23RTt#Ma3nSgYx)(yU6}{ z!8~m7Exp;kiH?Y1cmkcRAJ>>Rj9oQ z)$&G_Z~f5bpF@?*Rew#*FaJm_RIgFR=2fb=!uNh^K~%$t>cKa+e3i=8+;$&sY?MU*iIaOrUW$uDsoK$f-{@f<3)50Bys{k=xp z)W-P{^Rc8AV@J|r3$*Vv@+h(sNZ*iHf>QfFRa(0i74l7}l{czF`x5o#Z&5W1wc{$g z`XjYiyGE7QuTteT3*|P5Y8c_U<|2Mq;m6)T`f$4-?R{948dvY54tG}B#m7c9pt7ve z=HOID8FK&^dA=ytQD8w16?T+v+ja-OWmLxs*C!7oKg!bPq!r~!T5Jiv(dW7*iV}NV7zDiY_maSG+Id^LpzNN-h z_*t~`VbzDP*h=f_eXPK})wO-ZuT2p9|keGs{-hFCm;|MC`oocB8ukH`2?@{XF<{BJV z`Spv$zFyVaM^z0)s@_0#ZLsRc^G2n07(d!%^*W{DD|V@UXdi3Tb-icDvg4un6dLe{ zQ@u&73Anc1Slf;z@yaW#vgL$7*3EA|)IU)!D~)l!#T+4NMR}4IyTo;vMzz7S$prLO zDbp^uf1j#v9zlh?Q`KA7sM^*K$NXEoG1fS)N*g~?<;L}DrE^p*w_T`=sID#e^1QsX zaTV$}^=rVF=Q6SN&Y^uYscXB3kK4x58gC%b-W9I>3fIm7_3Fb{VhO5itR@!WkJbE^ zUuLO8l*^^oINxf(jkKaXNsFz+cN(>pi&%T$dPl)Y20rlE}?=otqpw@(M1^(Er!Xe5<-Q7UVMh%pFlem&rlq+em zEAXAhGHR#;uBVh~m%DqPTH88;3i(#bzh15G{LtpVvgubV8^5NOx<692jcZi1e^fPk zE>uPjsv&$67xBAFt!&Z{HV&f}NqZkwYyCs}pl`4CdMM;vBd~(9y|jty52q&A&cOyN z$?#omqyB>WI^(z2w(S6ZjUIwE%Hhf;E8^rkaFn#7JV}d{=dfw4w%x?q1J_ex3Yz*p z)!e=o74kOK?80gI1Jw}zD0OR_Z&0;9yf%-i^_^?f`j#J+5!Dq1YNvRS>vR}DLoIJ! zr?wd9Vw*cW^GwjWS~a#&eTikqLls``qI$PQRpw2a2{!qC!2L&J30CR9dPVqS`AyP7 zbrj`t4M<)yP9&`;PtszW%vaNx#Ih}YLCUnt)%U~Y2rA^A@VQ2{^bb^P`v|HwZP0y# zS{}fwdrY;5*QgCttM(SE>lQ2Z@NI7MoUujyy4R^8e8sNs9@+Opd32jdPmt|2#(=txc<+o@c03enY47#E zsLI5eKvYe}tHcs)^x?Y$f2?jDqFgBP?`;%L$?Gk+kycVJX|WynPGb}0&;i#|$`thV zz}V8ap=#cydi2?zzQyS3Yf-gPvv+P$>-t}4qia#^Zo@Z#(i#LPaI|MvAH|Qp%6THA zZTMn)`t|!D-_=*xKH}FMc+|!a)gRkOX>+i{+v*!_{J8#L6V+Vz;4ikzvkdB=sIT&W zlGlU7c3SO@(_(v!-)Y$8Ntpta@HS-#;9+d*&+hTL8vAbezfEmvl=|T>(@r^Kb95!@ z;(aKeJ0Jj*H6=4L6pNQ@m&G)KyA- zmK~3`lo&g`k!LTC#M+AoKZzyS8WDdN{$f#rN2rvdfQrI9&Wk!sf2Q3>DC}Yf@SVms zb#egD9(5KB^~2zQ0e4aMFJT|Rz5+=3JfG`Z?Y|r81hFF^V3(msacl_q@Zo+*n~Rk= z6G*&W`hdim#2e_*UOb620dGwW!*;AmJUtTb^k3olGcc|0?!xx~bcr&@5FQimD)O9& z3@k=7zk3doejIU%g&z0+jQBFbzJxgUKd`uY(9f+7`UNB}{$8&81Qs!^Wx!&;!2Ws@ z555Mks84*v;wLLp(|(rZ@%O5OH@1?PqeTI*v{Dm?53`^>iDvW$YhK7jWbnEeEK;D;>j9Q5<5gMJaoi+`BfO<*gsA0iI7NrCk$@DO;zzK{6gXQ_jJ z9?9cx#>VBEC|XiK$Zk)zm_8;FJ2%g_I(%)1D+uV%M4ax{^vZ8yIJ$I`p z7tG+kkE2Gtk^P643^VmCp*#qk^Z1q70(|CxU&JDhzrhN)13#B2^e}PcQUN#bf4I+q z*D5nggG_*!=}`y$LXyYdP4x|g9~XiZYJr`f7doVs|2Y<%NMl*HI{?&l{(cYANlc#& zGrMh=iMJrSJ&%a@E>^qX8~YBI7ojz9gQ0@w*pK%w?96`F{#vSw&k9-LGA#tZDZhw^ zJpLwMEOZb&!3r+*mTi^-ZwcP4hI?-#7JYXD1XjQBoAR5HJpM8GScn*&Fm*;emV7}t zl2*az#%ZjnD0d2|%l!Wyq#L>GHeC7p4Oi+MqTA50qURVFXG|l3mDAQj++CyRQEmQ| zcNL!DYnvh(Eh=}kLb>ouaE;`vWudxJu-m(CxaPj997MjNjJbztAGW6p*!ru2OZ1&r zA#ySjCZNlPjE9}}R%~C+2w!Z%7?fw1Mk?&=M$ zb%T%H-fwu)=Mde7hCBW>WfjhtR`ML<9#K02-UfbcU? zl!G6`+gK95SWo7wY65qRI%FQkhv6q+>#vG_8**#`PBH^bAYvwbCw>ZXH*dGMh?(PZ z1C%5GFZqVFIcXIgr^UMAI}K}w(LI6P&Ro=BSozBL8@~B-$~QYSyos;zj>#F*J$FvI z6O5S{zvxpHR{y`vi4dF$L01g2Z7`7FqjB)F(v*Xriv1lwq~MG7Eqv91cZNDFJd6)> zw1BO@YUXp)lQSCUXyys1d(^w{XGY*_(cah${G{9vOLHj0LW#AW*&E2xQNxKx%0ClV4Nb${Ev}Ij6iy#>@ue9JB6!XW`)(qjGaorV{o(1Fa06fFqVK5T??XH_^oGD34N zDu3;)>0daj{A^|P&GL&cdzSwFf{K)%SCOm;Mk$0zwhS3um+bSj5sTKzXDJuH*ihlQ zeWa*I{!wDFt=@0MO6OE8+vhg?k_xY$HN$)%Bb-H?Pqz(M;Vk|81vOK9M$I4|CD`s5U#PH9 zd&UeF;D^ZQ%D^{x#uOVXe{~=8Us2)mBgEpPlY&%4d9o*Y!G*25c{oe}M@~j17E>Px z@KxR+e8pDbC*{s&*}6?xlGh&ikye>;T5OE|JdN-oV{Za@`gpNGFw?l-n5mpoGr7JI zUp%Lxjk9L7_=1Y&5a;LHhNmR``vo<-%wr2;LNb>|?5nU1=ZqOH!H+LIc^2RsIb({Q zseW}I*{`T*^$}vR zul?{Nt++=@T5KG?(~y%A9l$e?8DqBfVPkgbtV$L}#%%sY4)#B5#>;0_yueoT#g5^t zNdJC8rPiKhsusa0g*aKJ+%smh@@4$^K>gx#luQ4{&eo?ue~;H5#fL4|f_aWoD4bN` z1w>muEQW6 zdD@5#i zlvo_dE662Oq;ite#}M!kCLGWfrTD|dLbwHT3h#*a7P~?J6~8Ro5~VE3H|f8UR+J}c zv1#~DBZ=VS0G<*{FyH;KF~4?JEi8?U`Ra>mu6x#;Tc*92IB37rHXfJ}+Q9O{p#BqDzvfx-cGm;3EJBA*}${}KILY@hy{ z%hn@e@$h#&Y26% z7uCXwUoF(yMxuF+{{4a~^qy4(wz(Bo5(txJwFTdK#`MC9TP12d=M?DQ*xV-do1p%z z%C4V6z@$CF0wVY9$|Gv7Y9ew@0gfH`W|z7CV2-{xNrx%7rtT(ohi`YbL~?Im~YQ9KcbYFLDT!f((6elzw<@;URvNHO3Nx)kygAEH7zAd6E`epg&I|x5|N|dsw9Z zNK8R#be~b`oK>afe8rY}Q&@YRkB^_ihi&A7I)@84AK}1a#AhB=9l&t_-vWZAU||_v z{LT=oUC-ElOZ104f|cY)rDyE4qC829Ex~shc?3lVYzdZFf{MQ1sPxVuvJQ+&>+A4; z(JXdeR7HfTLZf4(yR>8D>#8>RGQt<)Alnv~S{2GYV-`Bk;>S2?e1&r9-`L7F^_!qY zpMY<1-8Tl?l;_tU;V@!EO9USW%nRMv!>WuZCCII^z?PHt#s;6ET!m1DSWP=izSVff zPAkfjwAc#mK8+H59U$IHnRdDQPmQJiIYichv9$3u_@6V&y%$xPEte(s!p(2dj$DW3 z-7l*;i|otoBtqh%(t$H(i7{P9K+Cq^Tjjc7mv*S%1oZbx{}ckI$3_{EJKKJQLl_ar zxONWU*oSXrgLVf6=BH6n+M5OA!ZVbs5ULnU^a;r~*PpS|it;2ab_u@Is35XBkhzgE z?Q-?EjQZdlBJ04YZ+=bH^pDJH|3y{p_*HeIZDhC4(7#_)tD`Tgm2DS7Y7(&zzOgfA zg)v?2@DdC6s!{!nDYibOeiP8&mj*azR#8FPs-UF$JUHsQONf%Xy}o-&)w>=WHAL=0?-5m|4I5lL2lVX`eCu6=TTtF${MP8-*dhGZ5PF(y8?7N$ zNqzudNvqB0?6lYw_)eqV<=J}z87IUNH1!E{P5&3l-Z9qtXVjYh6>E9-Yib3-bh*1? z6o#~8_v?s2mk@V2nu6_#&8-sUo-ymYl*5uwsrwbmrGI1B^f&ggCHx<;W7+XGGpgKw zL{&Et$abdyN6r05VhNU5Ce>BgcG$yfZ3r{Ii zu+DgG>F*(??HJ9$8TdbDt&YB?))1Ojw^odjrX9DwuG)w|>xdE?gIR<`<}2o>l@VnO znDe$6zZ+Z^Y)fBo(A<6=?tg5@vg36#sycW?)w(<<4v94ZeOoghODsX1`AIjVy|Mf* z<9l!jUyK1DdEI%&PAkfjwAdzmr!k3TTX;&Dg0_C0wV{W`#;|X!)34Wc+SSzmr)nZJ zHMUobCH)<c6&Q z+3~hAsgwuPsZDd=j`gkX00eWqV1->+H8$PJpBgc zz6~7aZ(;fDB>;R;~wmIn-ANu zB;Gpw^)~G-b~l4q7(l4wUL<_Uk0?jd{8+HlVteqNMhB790pe{7c}TFM|Ipml^WYnZ z*7M*r+!qn7{{YTx^XC4%!L{1e9|Layui|g2@cSZVz7g;mA9c~gFWPn-M`Ahg>{yd{ z9i7^X_bNM<6L0%Nb}T2}?uW*4h2zh_w3yk4?=*V!2?ty^;V|ZL8nOB}!3~Ji{|uMk zr>@V@hWFA|B5v1cAK7NR3S=8E_ad&h9`>*c)H#kHd`CUoN}LJC@s@~p?^L``a~&mK z$$=ejciE0Li8mTaUnlO*;41$<&36FbX>8m5Q2L_0%)ko?lqpcNkFpTlW>Jve&;H+I zf$;ZOC_chso)3ZN2^KNG%XzHdVpqmNKd(CI7m>X92dKvcNK49n6C!YF3^q_G^VNX2 zW+pyj@iUEser`n`|A29@T*=QW{!QxY-AiLpZ=VPR|I(NzIfHa!Z$dhbobg@Oo1|K- z33*?|v9x@Y)q9$k#}E4X)j_`*$%{WSlmj1W-%F^ouNuSk4ru)o_~^cm_~YkN2mO4K z$3HA|sGn)?T|92*=Y>v?y80hA>@-$g_Rv#-;QzB-_%usyY&DKv2_=yFF8fu!!9E#- zEAVBOxj(~xtead$?v!D$6~~P72##OS;Jctxeo+^B@lT-&P9Wc{4ILxS%@hsXe+=$H z2KqWjTC-hp0@O^8I_MXYJpM7MIx3qBB}j#bcD^A0Mp^|QHS9E&0=O~Rg6ESgsN9(R{vV=oV)b9~9mPs;yu6P5I489{&W~%rpZ7B?yVa&MygH z(klEYs-kdz6h@Rgg`c_AxORtWEudn~-fEaL-(}^BdZ&Iu7fCY`zlVHq#>>IBE_eA+ z!_A7bC(*FCpvHyolwVnq$KT3+RZU=`W~vPJj&t1wvP~z*V|(EH_6~K~rEUY&Eo2<@ z%LrfmQ*>9?Jk(Kw~aURJq%$%efJbyoOJ`7H}y{9T0)qM+7@0 z4gVrdGuN=Upw0>3>}mYux*suH!WZkVJZ3mZ^8baK@Im^zr(mKCJCHXQLa(*q-8gFb ziccH9%tuXc`U%6;c-d{`p5$!{-Yl7gZ{{^#l{jq%mmf9wJ{YQ6!`^m04__lsUqhi` zsov}gU#xfOF~h;!X~R{z2_KY1L2L!zON_md3c|rb5^CXN_%Sa573UYR2fkwA7eMWb zP>u^lQ}P*blo3YJh%7W2&a&0!g4-&dvi(%*`$kjdD{P?l*gn#y4NvtLK8$-o zg8rO-0GWcV#zm%?322Kn{n^V&5dwoPs2lWWv1Pc0N?alo4L6XywrEe%YHpks8-VXL zJXwb81dJC&EJ0}Vs1;gz!U*T?HA7k2dE>ioZ|OU00y340*Kb3jbXa?Ym4J|*mkNMMvuXYR{#=Rg3--VkEgT5JM<=O#lu>fDr zou`lU)&%#xE%=I+`8R^vHG`tz1(Meu+LN@(jMHL6@STPab=U#p#bBHWBHg1_r2d2v zEqug`i30Aphiw!tm&w;-e-2NJU95qudo-!IS_+q22&+H@r86&iMj9By| z0jj=Hyuom@T{i&-2aBTK9wQcyIl!9{^_KpPU4!3Dokxzn7?Rf^+LOFm9H+%b73EGL z#8`2_c;Q38Hf9D#t(mnaj6~&LbEfpP5$V6|j?|wrB5YL*=i$5ZvfG`1!bo;b8A%k0 zRJqCLwGXqhb-^84K7}9iTK+L(6uiLqk{&Z=T2m;THX_X%Y#;H9ER>b2e3RkhpyDJe z*A8g=JkMcK9+Cw<=I#;mmDm>ik}HgF`hOTmeiVDukhGF=NsFDKeWxK~zyae$`oCay z_oy}7gwN8w=4|C@BR06;jxB%Dh*eS33vV&awU^!A;^W3#@02lzB9X2(*>=np3HU}< zPuYI1B6WydaEqPYcx)e~(?+ayBR)K~2o_7qQ@zOu^@a#2;UvP^} zZ9cY-%4uU};}|}SdqKXWe6^d5AY&lI>a_#fsuVwFB&eStgz`S3y~TFnmq7)|qTIxR zP@Oy7bCO8h8#%n;j$-#jWvj{ctjk{>Z2OIk^}q{XJ;JB?Yn z)lZP;QM<(40Os`xYrgZ8v9NZxIluCxF*o`rcWV79BZV@Stle$;+Aq7qwJ#XC!DGfE z+p%(M4YnO$!O92MW#bfnywy}YZM5{t>nRW9@5>@g$8w%FV{ zu_i!`lKbr(^MfG9*c;Km#qPk5-S(1tU;8uV}37E3G#sH`3MW~ifJ zhPiu`6hACH@*TxCQ06RtVo83)bDg9W_j*Z-&GPTlNHg{vFkYnp3-bC~R<8e)kzfC9 zGuM35$m*I$+It>#EVFvI8S1_4j;}sp6!mGN$WNP6tD%ZbUbTmBx_b&g-fCJsZS>(Q zHn;oeJ{nx}!3}mSi8o&>t5}QvjiO&()d(Fc7(?(AJsz=&8%g^40#@)Q& z`m#IGc*3aYKQhWFB$bUO+l~*j@N>aEzjX>f-gIN$8o^g=VK{{r?Y(=0?IV6!RQ;Ka zn~c;7&xx#DJ7|b{d(2o|=avdm+P(kOTCHcRa%X~$1{a{VWa{3eeNt-H+l;AMBJ^|VpbUo)x$ zp6@yhwjE!=R@4h_nZxoZ4GEqxG{2k0mh`E8@Qjil{(>D#;^kH=O6IRLeRiqOcF76o zBi-0BJC?-D$QIO`^lvP`^{N9_b-`lb>PeMQr%<5Jbku4;7zv)P&51REuvTo_(_6# zEBzaO{1&L~qL9%43*B*EGcQP5aj%!O*b027QDE#jkT)C{4}!Y>GxriJy|w<`=2GuT z)SmZwOS?}Qr7gzT=G|s;^s+m%`2|#wZF3n_W2N6v%RTreF1QOr+7hK9wFzI=3B)ex zzu8BZzNlYs$C7xZR#Bz5ju~0*Yb(2KHJ*UB*nw}EItsEV@uQ0Pv0Bcv;_?WEg#OPr z7wo)l(w3wZ_j*Z-mERH5C^7aNFkYnp3s&{(Jj=RdE)VWD>-{HCbb9MDHb@U2ouK@KH;#P2Gxn)zsrmF_0WO-0lo@*~EHq!ssiNsFz+ zcN!JcNe8^0v&eW5H1uKbs{V|*x_hs=vhx(}_%YuSW3{&9QPr)x%thVv! z)^*B9+gXj#y{KAG(T>~xWj!>PQD|!0cbNs|ufq1zD0Ww%dj2Vj*#=7Um25@5;1*uX zL;4EOBDyW}*JDOQ|Ef8`+RiEXpEs5{z*bQ2R(N~o2BSouT}K&pAZjM_@$!&cDJZj; zuDMU!mfxY9`n4!WjCr8RYx<3(m6S_bto&}8#xlyV1I9~{@gQjHr+n-BCRa;8VKzsP zb1fhBuj#MQM$~cV)n-+PyrrFoP{KZJZR!qXbI>%~OZDn!-A#Qneq6Vm4;s4rS+`h; zGeMK_-OxQdmc(1xs;Gj#$*9n0CC&tGQ8SsJB$l8mTT%Pczv11z2leRpP%@aafaLYy z9z)Vf$|Wtf3Eyd~q6|A=yp$Oaf=zv^x2=E4wV~q{T;bE8y+^dsl3Lq6PJjH8yTaQE zsJCWMyHJ8|;&0e`+p6<7JV$Ciz_2T-aor_W;!Gg%*7Zm1Sa!T^-g-vuTViZUoC!L# zg=V};EJ2N})U6%*H&*wbLBYAsR)R#Om;7jVtk^5cleE}%_)epNGVFjkwaPdV^z?6d zI{JS?v3-lxW^V23Z+g~s#9U{~VROha0{UrJZN&4Vej1hX2bB9E{)T?F`GVQeC9Y3f zEsZWieSEpg5RS4#gEZ0k?C`aDDT^kOYoO%wXfou@ccJiqCd*@yUUI>iPzI%OJYspt?M5! zrX}8o9N6*ft;?@+;>p%!iTCrWnLYSUqoeOYtsY~Oxl+m$4D|0=+xn-d)lYz*qO=~d zw)7{s)(z^&?-u$7LGQNL)zVf?x8a?K?3517~DNu_icy0W47LHiI4*xqIhTq6G zizkshnecrdK=X6?l<)gIOds?Ms9!(e7qQ5Te}w0N3GD5)53}HimM5@|gU}Wi?Dr1TSf)z%TUgis=Dv^k;^*e)&$M4a z^7zM%as3Q7G)es=Ulux2*U;_bG#2&tpM}mc|CL3(Ow}K>=Y|<=YuNs z2+GtqS)RO|4KF9dD*O?jx%w9Te5}l01^16}VDCY{q9TvKvB)QqC*U)pYUUo)tH&rC z_^zM{{*~ol)Tjm2sR`)mes$1qM)LU22_IHd-AVW)-lZhp5@;?IAF-sJeZ)cj&I8;m(*djd4wqG#F zaxj~J;V_&Z;IpU){WhgP293%@D9 zyhR@W0{z!prTrJE^L)n6Hv@1aty1unG}fgkcM5!C5p{15A^z6?MH}wntseKvg5}M9 z%;m}sEVWI&%YSC6ML+S5qfosvu96?|1vc+Mk>(KS#lvuZfCGCE`fUqe{N2qTn+`HR zK`nuA7OsN$O^m_IQ0W_HphBBXKwpi9?=cNH3B)h&fiJcUUq7oukwyNUI!V46hNILk z4PQxP-HLLjz{%tI?;*AKsK`;=wwekW)wJ!qME=J+(SV*amU zD*aJ!sCU8&)%g@};c_@Xqzb~X_AdN9`28bCQjo`b*XainWEoeD_nT&(&#nWO+PQ}R z%m(*Ij8KhL{t4)-Y5KE;awkx;4OWZci>=Y0c{zatjZyFO{CXun@||Grgv0zeE!L}U zKLE499@q)uTu)}21pFt76*cJGNS@oM?&N7Sa5fHw?6PBb^cAOULhwn68C9Xq4uuEqG<+AIrT=m0G%KMF7Fl6|ub1&G zP<$$OD15OE_(fUun`O>&v2RcEqX^fTw91XsVuSFVhKId;4wCRq9kvnCcY4F^2dzl0 z?haQzY58?DWcP0l8ujGhTbqlh{Ciw8ySG_0?Dt7<$Ys3z0IKl$psRVp@^R3p$_HH| zxj$jUy*n%ir8_L&=KD=wg$G99oriDnsKrU1Y6eBl0e!UyUq9nnKx3oM!WY{zPgpTl zwo}Ymo+`gu$&YyAle8+_Zl}eD;X4f*2 z?%y@9@)wX%S8oZc;>*_T=yq$CJvvF0tVH!8RpEZ*SwCR~5a(6#1xttFi;Zs69urjf z|K58|@e%m5L%yZ>P19KPsaaO<9ne?vp?gd@_CjDXH;tID#BS1_30D2m%vmyTNxmih zm$WL4(_*9252g^PbNilvx4KkrjD$Ywi}xP1W>$voSp8F0M879w_wQw1dMm-V`E9-f z`3F`?|CW_%^C{ky!>C*jsTzEJZRRlc+{yosM{nL*S#mN6~vs zvAgigY@u{8XUV)J`96Flt?J{n*d%nuU&z;;qP1NjWzdN>l5_b zXTx^?ZUt0)nfa=J$)2xs`eiG-&Hl;tSE_9D5|s6#41FydcQxzX@dY?_2YmYwpbYN&4+;BX<8ry-TdZcjr4n znXe1F?aHx2o^QVr75TKcBP z!J3aft=xkqpzn3yn`9mqgn14bB^l3H&GYdh`)*3iSu$@)Uh`90(n`vepVd+>e5Wys za^Qfy%K_#EL0*48nALw`WxH$ch4x8{_Kw>9d(*3ujg;FQekUmNbxHr0t1$GdV&||b zv>#LQJThm~UAox4f7`SU@sS^aqj3(Vhh`Vmun1j+hPc{kr@hL?S+!2UA_ygeb$ z7jvkKf+)`+qcr0gt9f3`k5Dd{vt-_qyk@*gT1mO2#meufX{1mX9PlPfhc^qjS3tTIsG=&9zc)m;O#Lxc-1u)z7&~tPYlYhf%p6;sD?C!P(Ir z_<5Avms%_1`%_N;oi)KC^LIvn(G(xS+{#e-yYDljs~n)qRPBJiI)HDc!_RyWV_q69 z++&K>i4#_lmF*?wESa|?uUT7=w4z)|ix{-{;gSGcRJkXQRhRHgTEwaf2?G%JM*TYNaD&2_Gx z4~i}5l52uI&stgi6LX#eS#7KhRj_}r8Rt{56;_xX(D%Brd(12`w6n z*LqRaQF7;5)t3Ag{3NX?Pts!Z%vaNxN9}SzyT(wo1XcafNJ;;uyS%gIE^dE)#TIGbX=E8M4&+&mc|lOupO04cn>^Lw7Mwr9wcMD=>mhR!2l96p z-7`99&({t8de4eZ7|XjyP?6y~cRpCqv#vY`kA{2jT|FNZThX6&O;Be3F6!U0ayx!y zWBoD}MI}sbu-wI-r3vcvy&d=#;2@aeIb>8}JY#kBgteysBgzYJ+lUH8UNcT4t)yJi zVr2<#8uDo4fcZg=Q4*}^P`s}H(p%G8?&|Op^xNe`NqbS611i6@=uYat3(I`XzDw^K z>g4L^2xjh2yhUlt( z(zmMro_gMavhm~ClK!%*iUM33gc*N738r_xhdOh!d!2pO>-t@)IclJ`JLOzgzU1}xH&GSgyE9IUU54*8s*INjDzxi7_j_$*Nj-l{9hvM@^{)WA3tN-9>>OV7AP&+ca0o2)l@Q9T- z6G*&Ou9L(PEcJ)HeHLVnoCzdeL#LVN>L`14&Kwvrrru`d zclZ=8aVD_iFpt!^D-W|p>R`!Ud>h!kHC0620 zAo14qGqm>%T;$Aw5q)grDvtc9+sEx#lX%08dr-|DM{#;wRYaZcF`mV82=mYLS=5%2 zwfB9j>5rg{j=?cBTxXu=Ku>=u(9zHOHuYKR`HZWpF9z22<<#?Y=Gth$9Qv2uvW}sw z^~`O3lD;MNd$$=fOdn4EJz5DS7H`?)j7T15f*K`xU(~x`E1Wo1#DO0cw z*Dbx_+0uWC3O|c7eFomgP|R#kjyn)VR`*ZZu_p0GyC=tSe@5H>TfSZRPJ{Ber;H&y zq)dUT@hW)sY1S%PZ;l;i(q82&l5h2?7)$nnZ~Il~-$hj513dg4^mE4!`pqly;y=T@ zIf0+FpG6ekt^9}wu9M(078;(|_Yq(GT*g5^KT3l5CyayTO1`G}H>oRIIqbA->A37O ze;h>4Y>>>~%vuq2MDokMGpZ6OtusZ=II9Fz5EE4E+MwR*rWXOb6xS>2z2 zJ(U!Rx;12}40z9iw{p@lKPM+XV)64D2mPXoJpLJ>L;Yl5j?_=`Et7wfy2eZ6G*(^q zp~r)QRQB)D!=HLR+B2jx^n6fR%fn`sQ5ePROF?oa{LhW@JpzJeoK-U{|eQc z!0vSKh$ zs>|N_g<$ZWo-w@2V=S+-;QAA`@bYV~LA|m+;#9T{dl@#uD*5`fnt5~7+$nm@Wkl@7 zci^{3s~_~^(K{*rMtwy&NYa!U>Xl%XN)Y5}C5QkPc-b_USfHF>mLLDdLBEXf!GBIp zZsfC@nufeC;lSc=St=En`p-QkUrw{~j~hnzgrVAN zNma~nDjO?U$q$9p+%*}MNJd@5qQ|w0*qna{TYVSl7Vw+$YnkNnmsk$w?qlJfdZ&1O zLlAzBcKkMsie@#;=zzA)p_bSIO^3Ji6%dut4f7 zzD>Dvi}V}#P5HIlso|WJqm>w>tgEV}-@SF0> zTjcSt!q3HzN7+`Ra&P8fR5*IzOIl_2(pXef#O8glC!7g?4}SRicwGi~^oHNH(PlyR zdzMvro?n6Rtv%*dg-4W zL(OS$@-o+B4PUcGS?#?#xuH+Z@*{sUUMuYlt zPk`YZs@~44Jr(*H{HFZ0MIL|mHp1@&d0tA{pxz=_3X(6;uURQeywM7>#l=CEcNe5T zPx);~f5v}}vFhW;V-&GXl?!%$BsV+Ke2&m#r?GBs_S0a`Fk@*CF>K`3jHOo_e%*_B zSw!&FKJ4{WZgN}tjVaamJaZo7d+`N+sb0sa&AZWvKJE!^hE=3?y9$*n^fUNP`DqV% z{5`{OyBrk%-levvHwXRMNIlFoN99buWQAD}bdcj4;2Yq_W1NL* zwG^}S%`|*Tt9;30r?DPIxl>S8+IE5je;d2NSh`>Y_4$}@`xZ}Nx$pPZ?(}%{Q*&zL z7LUQ9fUKtYRmGcExt~O0`eU9*H>_gI|DJQ%EA%t?ZTvcZObYo;zxI>I`gGkhfwxlk z7(4HA88z-_KxKY|Ip+`f^x==KD6eBXD6mihUkgqGmAM)56~5RF`fo@U3|XjFb+%}c zZ_nyetJG`g}aFbBiam+V}gH@1(BB)8^(a9&07eHdYs( z*7{!;RUsZu@Ct2g3xQ+x9V%9*Hw)iRA3t~$KjYIO^4I_m!V~zH>K<$O9+$No=3^I} z4zd8>{39q{Uoc}V2s&VF7UAoLlRzyD5nthp?Z8jYznATzyvuIqn>p@3r0LThNsINv zcN!L3;2enfntFiw_W>iSzcCXUo$y4OoBrVH+dVHk9$@2 zlSYEqu^lir^PzXTymFrfD#t-NGGAf)^yfI!ylm&OfaFIqACp#9#xH5HA$1UL=5z-c zd^0Xq(s`FppHD>e?Vjj*&mV5Q-4oHFc~Ach9&ax=^uHTKChB2Ry#ll z&(FNm<(K;`P=x^ED}1p#@JsOHQMU8Af#gTof=AM-24B)*Bk-MumpR?R0={y;2DAG7 zY+V1LXJ(`CkG9_KiRzc;eSQiwO{joVeKnK3%>b?wrR z*6Gjn+q}&je6cb8kjKH=GJX4Tm&6kIink%CUBZ&&H{s<8!M&!~VOe7P^R3h>3s zIG-Titkbu@>5^E2KpDP`$9MrHr!p*7J6K@~hi@1T0;2-osLaP_ziv+HI0OUWJX z@V+OId$(HO-~|+f657lGV^Qw6QA8Ypi~c>Le~Z=ZlU~qO4%Fot8xE3h@yk)ts!_Mo zVrS{k(+D%CJ3v&o=X3f|R+ln!`ak>9{Y`(e`*yD7rA2!@_aZ9XfbXy}r&=HJl=NTt z7de-6Z+j>9!3clDmeVccJRJ-hn>)YJXURVj_-mNyj?lPIH z7g;2Cz*y|SH!k;C;GtflAn?(@N9lLE#17zB(vNYVENu@Y-+`~B)keuqi%r9K8ZxIl;McOnPd`Ckx3i1- zmSA>w)1TRXyJt~fUYOPYqc<^#s`!S>Z|TOIx%sOsm|YVr=_icR&Rwd|&lozenoR0# z@9Y4+n^$^9Rrq4F`j~Hm`Cgg!ex)Zdh$z9#Dtrg;ad{fNU&Mlu1GbP4;G2~DEC{T@ zcj28bu|xPR=^1-FPn?$uBtL+!q}680PK%v~?=)micYyfnM(7ii^uvpJ{f=;M)b(d~ z-b3H{=i(f5Q*t-SqD#o{)z_t6-Pf^Ty%VbH7Z6z9fyj|EwwRynIeV9tpY9s{3clE! z{=a+^WVt_Q^b4NkF7JB^8gEv{@Leu{i=X`*5H~@YvDuBi(>1q)pbUc4OXrxc#qun{ z)<3rMuq72pUT+jUlIBGgJ1sV=3I~v6k_@yTqf?v~a(g z1uW;GI}KDfeKlE{mO=QER#^q#OlX}x118+~nS7vVGSR9!b5~xi`I)~azKHv@Ay#P) z`pZ~ORy?>hJJ0-~*gsUkGP>&mZ6=4H&P~!Vb|1l|`wME!vFvh!Dz4$99@Bn*flBq` zpk{V0_lJ+Rn+>ahw%yt0!=BvUAcNjF&7g^UaTLDlOA+S!j@Mt}QEA$L&%pa%So=WxOpf+Bc z6*ITlzHEQA-2wBkC$B%qKP4>p<(g0yUnH5w!M`g%~M`f;HCYRzSS^`)rn-y?aZ z+nYZaB4{wI%TjH$5ePT5Kk7>nAz!AI`dVdgjHOJ^*ulsq<%@2H^*Hd={GV>q#;n{Hp%5Pwa zVHxN7Dy}V#+jMV^1}z&|3YRx~nBeQZIV#nU1NGNndbn2G2sYHDErMfSYqfR$o>-7 z7U#F^8Q&}dF)ijkiHu#tlGSH?D%Fnz^+z2SP+y7|fkh_2WfhKw2vod8P%{nNAN7;^ zQfM9BIh3xi&2W0dRNeU2-hdU|OmCVhdR)>fo8g;@S`8XbBgWF=2=$~SM{aPI=XW- zU0<8o&W5SFOp)`A9_Kik7Nn+Cw!$|P4QxW}ppGTQh1e^4Oi#4S{3Wl;Oolq_p!4!* zn|VIF#k}Teh+jbf@Bf8L=?e{;anB&jC?Jqu5 z!$czdz6aNL2j@EAn~7F)n1Fs7O-#7aV=DU1D<=X?_Omt8`I#3>ZOojAr%dy`yQpWgj z(F1O&eVaFLT^*9br-%b|T2(dajVpE?jY^s^jNoKt)SDs zfzJB@I*$DA06PXfPOuBAj(wS&m_OBf^*haL{&X5i@bzU4?+ue|dWfN9h9OFN+&pTR zN$LCZ*g=$d?NbF(u)jjWACJnr>>}2Qc1`R*Y1>zmO$T|<$y>ln5TT*SehGY;C?wa9 zW1|u~pPXoyr#kkPnsxGLRq(h&{!|~#It~keszotm?UpV%|mcVt=Jn zd@d}daW+J~J}QxAH4^?}k<8dJ41!%=?w%9usOw8p+bw*8+hDEsHx#IteDnKEWxP zVlG;HOsb#Am-3t8b1PTgr|YHQfNKT0NCGKLEn-lEe$z5-pQZ6B#Zp1ZrpsQc`cq!BZ z!tPF@jpRSWuG5Q-z13eMGbpd&Rw7?Thnaf`azDtm_Z+*l-sE-lGC9FPIXz|NlVMk_ ze6VjJ{}v-CIgA8K>?)=J!Y2nlq@^4_nnqH{M3dhE)r-u)P1;5E0J6-IJlF80;%?sL zvg%)^+J=uK68E0L$o5R*|OYhgjlV7GweEj=-9i4FX3r( z8daBauU*bMix(N51>v{YP4Rs>61v{&VX4UsD&dM0Jyv7Qpr(eo!|>J3r4m%hi`XC#o@A$c`nySv?6EL zKN!_#<1szI8FnTM9ea=IcFmxUo2r|9*FMFFJScpe>za8zk!!s^ILv^CtVFNp47+Z< zp0V$NUp6CKVK$eOmg`uu1z)ZHNlOgAnnq?uk~KZkayqT-bPF3WkCtSaE8W?hS7&)z zmwK|yfozsq?hJ06Yp+bohCSF?x@H%H+%hESNpPNUG2>>4QfYnNe$Z#q{{KTuD%KGG|7|5X+>FXu7R!AO;5<+k5rbtvBqJClcw zz2AHUA8BN_uFtZ}mwdu#t_?Osmg@a^QhFs3I!5CiF!~x(z8QALg^v9w{PGwHE@H%+ zceW9IgKq^KNlO!aHI2-sz0JhC+h?Z@&of(^0%mtG(0^^NuRG=snD!otU(MX=5Z7QO zyV<lVeYX zr6Q7@PY>Ban5Mlt2tTLI#V)S(l}c+{PL!$JC5!|LkuTLvH5~0I*v@pibtf-)zucFJ z8DG=wx6{Vwn|o#jO=mbb*dF%xzQ(ol$9^8A0#+XtTg#fT^lTrLrhgLAIFcVVyq0m` zAB^hXL$ncoW&k@Xzn0bEjw*Cy(5%UI;P2d><2LWhv50Ibq~?G!Wg?!dLZK@YOWZFDHWcVlw(W4ek0C zz08&jFSAtdiHyrgWKGL9emqTdQXxr~$3Cjqh z7imO^n$+fB=5yL(srwGmRrn%JU|UWZOD`%0*h&DXZW^}bXj(epOIl?BzL{__NHzoQ z8<)n|u_wmT&YbRi^H3x_S`^M5d@U#66b)yY?*_d?1!A@TnOTQd^~x-(hz(sMWv13$ zGV%{b_3yDp;G1od*ul3wE3aSqBDEfOklVW}$8YuqyhNfDo_hGUj?%WT@f4f&jEtpG zL{y>yzD|2A4Id=B3SXq*NveuhEmg5p%mY+6&D(M`EuH)Aw8~ugX2QdW+6=0x>ne6r zSMGKdn}xkmv#_XOtSp>2{5S5Ee~b_{4P}!pcjxPQGI}*T|9z3=MLC6)<{D4gY|AQU zL&!M&jiC8RZZ_Qq>0B6!SHl;n^|*s@|9%Y43J9&dm&ttPq(U!z_$&M#?|d9wcmWD~uafjw*L ztJED|waU!O{$lfDNz{~u^GAQ=jxbr>FXl=7^-k%&Bfs9vEvhontctj0 zm5$s)wDEz4Jac2nKL+3KJ96W-@I^+=kMkVl5AEXqI2QC1u~PV&;oI|CP+DGP6qQ$@ zPNR&C3H#ui0|$k)wi8{2FVa+QBO1`hNF)!}Ky}lxEl1PR2Vc@E^Etnn@Dsh6fo=y; z-^|RxW{!J!u-IHh{rfRSagTGad?TJ`-pmh}Jn{9y*F-w0tHTXuPjRhzfKmOBRX!WO zIS({w8x=6{?d!;mH^3KJY_17Ah>Yyw{4DQZ0 zEr%;rsvid>W4m&S%t70i`U`cwLPTYK4l^W(tp11%d(((93#LDOnNNM${<`5+1z(k| z>lle-Q&poQ(v0+?$NSeY3xj8Xp>$eh34Ak=$4KoAnCU8A%{FSyeI3dWkUB+@ZE6k`q(UwYAZG1jadv95#*_cyk=5XA(-o7qx znM(EJK>Zb)U19ZQ`|E~p{2{+?!lr&4)G-rg2)^n|;UWqek7;`h-}YM>IednZK!#hC zFS;4HmB=J~htp}5W$?{JKG7%#VWRNDa!UnE!DhuwM|rg=jaHb?Q5QbnS!`D37Mf35 z`9qgx`OU9lGJGXbH{Qo#8i}?Xa@BLKnDPgTYRv0IPA}uQS1_sIfg+Xa$AS7QGfVT; zm!hDD>)AZ%cl9%`4nGbWSRyqFU-hN%5Cx6bYkLget_6&8udtUs#*{C5d}sk9-S8br zr&U(KHxp5ol{hG1%LN@XP&Am<)>?DCtd{4(D)V+uy%}gPGYq~d@7<+{Wws6m1ZgZlwGuYyIj$}*TrKF z=XjXpseT-&zc_r=mm-UPQJni!<-Z$ktb%VQip+P!K_S~R=$L_`**xCV!2MfqIyhgq z5-F=_tu)sK%ZMBoj;>}ak((+#vl}SiALVoqfoo@ZXA859Ox+tS3H=Ep@mnp|?3iV` z-w3NzKMvGiwRxEPNi$h2yEjGP|j9^ic1 zqvq(&NVm*Rr&ZR#Hxs4iEpbrHj43beoTAO_Y-~1{5kViOy-89J|GKHhgmWv6-&-=e z#1%Ee71?8#5rw$i&oU}T_3IhczmR(JewKvJ;(mV9${M?rXxaTCmFmZV`l~hHi>fc% z-|#EcnRf?$qf}Y=abWwSK2~3f9QsD4UE5s>kV7}2Re1XZdZ2kNiEyiusWY=5J#P=|OKH=s*| z9|yKS>L>N32=W-!Ii&3|d}r6l7#pb0hO2T`Jsz*I(}L8r%6j-_qLTW;K{>Nc{Ir{j z4s&~5o0(hDX0|bF;A!fli|dIdvmL<}UwOQcGTK)bXU$a@ub+g5%s2F>N`gbqm1`MI%$ARr{x}A0WIc@B}8=Yx{ zZzgJtk4>@DsART@9#hd_uCMMeyU3%rxWyC_dAq8*!F-LGOn=C(ieJj?j2nu=JjV=~ za+Wk+NrdrDyS_Bt2YlUTlyl8i0)}!QIzW5EqY{1`sJ~`&AgaF7{&*GH;i6n5T<6%p*jRw-fokifelx_0|`& zYvRLFW3G#6z0PuJxL!aWUm%*y_1vrHI>u~?XSfF7J3NP3lRTo~$AS7|X+QmxFTz*- zwa|uMA5eel$ARr{x}BZzH{HhmyL?;Wn~4VV6zzK&F~-WAwyDSDm3Eoyh@j_2h(_kJ z0X*mDvurES%MxCV(!EB1_!0QVh$e3$np{9WZ{mL4#M0$aqRA`h7s7XB6VYUip65m! zsK0j8LqDZA+woUrhUtSm!u3*M`-3=f9-E$iFpHk?gsPaP&tv`Q4?Y5@-;+MR}clIeja>+Xz~uC z$0qbS{k&L8zB(Xfzg@((bt75kSW~85 zH2*}qVL?~>I{G~h^6As(uONoPv!}vGOvQIE52pX%4Gt&T`Q=2reATh9&9AA?Jg(~T zAm3?TE1J`3q|Eu&*Mr2nyry;*>x#Y7Nk6yoty~#<{~~E^ro;XSe6|it#hw+&u`JWv znrT;MooF{E=xX0WJ{?5i6MccLFc%QN136c)JLxsNxRnl^W1|wg9P328sGwutpnNj& zr+Pe3`HW&O6e=( ze)9&r-?6K9|Mv-Y#zI$neW8tmV)zu_%br#iaS#w-JUMWUPjWU=eka-mw8S%*gjYQ`$o;S-kO3&X1r1gOk zsruPmiT!*F+o&!Gnj45+R{E@g9^0-u*tQ|lE}n(1_VmGKU@tJfBq*gX66*uGpJ21^ zCzz^#yKlxu?XhER_6c@Xs$)MWHT79$L$;gkS~P#E$4lTqn(>iz8cBThJIcpzE;DYP z6Re?+FwSG;c+B1{(o;Sx?fs=vvv@-4BRi$)mBm5h8YUK-;~KiqwrjL5*_>(D9!6Jt zVj44uk=Ixa*gDZJCg|9Ykbl3q&gW%27R{gP@pAZ( zmPYt!8Yy#rcSkVr+vR?UErHUcOXZ#_CxRUYR4|lOhrh1YK<6@4%{K zrCavg6YQ$p=-7{u|6KEyKU>HBdPe-J$E)B#TAJabX(Z8DF31dEPCzvcid8KB13`1v zLXUYp-#t5NN#EU!2bAxU(ZG=OJk08??@_nA_e*TuvV8MD@oe)btB~P~-7MvsVHeLu z$KGXp%ppj_YV2dI4!*H1Y(WbOwy-zp-y>3RW57cn#etjEjd{87%do4?LdV{?YU=aN zg#ka$LejU6VXm6`jutqQrk+lxkz}6u_&Z>}3Nh1ZXfe2>HiBl`@+@<>$YXZ9tf3=5 zzge|g;$Q8T{?8P!dTXAv|Mh^>A6ObSf1-}Ot00Ru-Ws~Y*A#|dhFx5B>^)`)@zXS1 zEq8K_k?;Bi9vg+*i21)1W#N7xi$0D6FY%@l>qNV5LC1bHTvH!4eT)&3>A{`Zs>kc$ zOIq4%(`lqj?&Ng71KxzqiqvUjBfSY5#G6+6&3$EF^E0<=_}jjK`8)gI+|wh27v@RJ z{d1^G4@l$e#YJXdPS8w6{q#pXLo0pV*2mAvwCgBG$6oz7aJTJYIScu2+Rd~iP;xC> z)gNV5_JV-=agfbR1Iv|fhTWj@#h&hKU9s^oj!2$I)@7;Q(OFQZY3V3Sr;%>iO@s3e z*vXxCa~jN!5Z?!FC8!|ksjH`YU_6(WpH(n3*W#o8~JAU z3csnX^wFkxM!yZ;wcEvPY?6`tvZeKNz0&iW?b7lIQ)bo<=9{17hnO+#AGyri8ERge zX%{a>$6oz7@OItcw#=FN(&=Y!Cr~lY%Ef;A5!-myyvlMA;6+$5<(pw=T)fZB49WG@BazOn!$Yr*Fbr60Tc5$t*us6m1#Z_h{t3}~EcDbdx zY3nc6v~&-r)5t7Y?#%>yfD^}=Mufi&GX(}P+a11_#RBHBQ15}fckNe*8|@I_+{9|{pi@6vX>Y~bTQVcd>JQ4kGH=R(X{luoK7Rzk{~-1 z?1{|)*))py+sJ*aw!RO(e_WntTI+-6f&$;zoBn+B$4%__S1DsY24QZmk)i)Q4IZ7< z=B(CYb4Mu3c4pz(D_yf?$-FGHy~42@s#!8m?bVM1-%yzLoG`)YWn7D(jv#N-;R@Qf zp!#u;-^*61`S8oIi|hHu-c%k9*O>=cWka5M-d5doFu#hl^uCZzBbn^v&xBBhGbmNQ z%ufPQ6IhvNE^G>!$BO*%TPgP)lWsFrF7bu5B|k2Q@2S$crY&Y3Z!9x^CZ5#e&L8_2 z@x&YAese>qV;8T!A+Gl7$3f1>a@w7R#ljX^HrPsAS{GJH-D`{w_plNrjR<|c2IZS! z7tce--qciv8qJN~8s)3cspw-}l_5<_Uo4$Q`ek__6YS+n++Z3N$fE5mpW05`_S#d3 zfwkqCqvbhfnDh7e8JxE=G0gYq-d!Z4t51>6U{kHRx0aQDxn<@tcXaG`#1FnY6f_SN zS!{!)cJbI(hg7N`2Z1s2!FZYNOZ~N!xutzx4ehk;M|~*@neDIbt@^V4VHely8)@ni zffjSQrw)GE$`{>qCjy$5{^fRBCHsnpGGUj8+9+z^TY3e3)+@a5U7c?#yYfwGENET~ zGfo2Ew@O{6mF~)J0(+IqrTc-p2J@@xO7o*&h1upQ)^XFU+j{fNRnaV7sHArBy4!kH zsvigH&u@NFslIG~t=cZt*Gkj2kos{@%<1ogulln6VHYoiFVZyn7^}F>-Zm{)`J%^r zeSS^LK-f;J49W}POz;Lh$}SDIgdskD9c|%ttVZ3vHflcEmv63Z%r)K7s41MxGFMTs zSF%L*(vZZ*me3~Eu=1j!#_VKef$p%+qgx=-SzxYW{>}?z_R>&iJ8@Q|`f;HCg62mt z^=12OrxV;$S zz->OtSWg;k38T+p>>XOeD#eS=C^psOv`bu{C6&ddZnNLqQJH0qX3OB)*liP-fE8D?SwM9&cpY&(IE-9xr&Z=jUwJ0n#$qmI z8f*!}bK0Fe@7_uL>qDDau{Tjb-?nnL24+>% z&5Y~%vun&8;-?SPmNN%a+Z46y>w2J8rTTH8{_@PqZuMpR>tn+A5IbUaKf{==pYg*q z)ZY+%o%Ttvi^t%LG(B7F@nYQ`uR+f*dVF{bW3zA=-Dam%h9##u6JGNLj{|$`rhY+? zXBO_qwykC6_~K&o_c;aT>83Js%hsUzT%F%MkS8NIy2X5Xp$xT^b(pbevpLL4yMv^UA5mWlYl!E=crSg_(E|13K>fwxtG;Z1LpKmVg)h-y#vy?A-eD>{jTE_0Q(<%$3wmuU+^POx5md<5s&1KGPZf>pl)Rs!~tz{Kv z)5*o=;H*mX!87yC2OEQCW07n2E^e3~Ovvb&j6ttr71)cc+`8W1Y!>K2kNibtQ}Kd3is&UWcdB9GPH`-lGoGDq+$D`{ZU`GztJ;^pTbw= zXdkh)sIcv&%~^FbrmMv`zwvZhWmKB$GofQV4m`xgrF|#!Oml@zeLw zk6J~1JGj7s`YSe{G3ra<9aFw%wc?LB598_6u>DaVt1sK%7`ykh!&fEG`9|aC@Qv&F zMR#5V$yOkCT4fP@GZ8eaSs9;3miDuH9%JX0$NUZEu8ppX338pLl*k*M(=Y?U&*0yMiDPb;EZkCR%b&Rz!DZ)=3`sRcK z^~VkaW9lpIZ#xt*|XX!PF_R;hj*s6TewplvTHP5YydZ$3qQ;diX^du#^kZ?O9k zog+p3dD>ssB|+P-`hE}C{b_zvSq9%s7c}Oh@CF*_nLfG=jF4-x6d`!9pjq(IIFYYatAa&1F>9{ z>c@flt29$Quzs0-OxmB@{5dA^w}=(z6OT+o{h5YeaoxPdYW=joc+anx%lzJ4wG1-( zR#IPOB5GQB21`Tdp-cQlwqSUX@;q+|I|j^YFdv>>V-~kHn70#UW^QenNtT36m^n|M zCqB^5wzBKkPWLAA`3&c@flt2Wzv)R*Hg%REu7 z{?v~H+h6m&Yz<$@YUXKwz4x;75q|#<&Y66x;hTvfGbh)9@~~qf9JkGUE75FT8f!2= z8K%F}+HCITx_+vr%*0Fb*`Xuf+(&$8%sXUmf%7mih5G!WRcb- z!_Q=^R6h>XU#%JLR9}ui){|7KKlS6l_Sg1;SAEU+>wkg1%fHXJhU+;K#b$2Ef%4E} zD%#9nPHHw^A89s!8fY-LwltfM#B0p_no3ht5;6A?S6(=aMm=lTXU#+>4Yr2T})@gr?cUP!C_2aG-uZ>P5;l(2jS zlTr}!NqsK+qZTEsaM`4k6|qF2sMFh0ov=#lCZ(>LDzK{4+uf9~Vr`Ss#w%gQ8auti zoe8U@cT#$Jjn4dzPVbz-gw;JdDWklWW9eY0cj0)#8ksjK^TvI$#&mjDCKA@%#gnp_ zC4L)E?)0u-p0F0Knv_+`eR9^aPVdy(gthYYNjZJ3PtIN2>D{p@VV$;RQnqaJ$@!C= z-o4ur*5;j)vXkNN)YeY#MY|K$j{TFef45IQa9*ePeHSFGy@w{{5IZ1$^ny+-87GXc-aKie; z=O*QIhkbJE;ZE<@znHMD`^uzzg^lv=yrI*3`z;CU#&1r_H*fLDy*GDy@4hWzef_(W z^4;5f^5bu_a_{>I>-HZ^$`8Kplb?OR)BEU;64pHrPRfHn^2t;8cY2@rNy0kv*rYu6 z6QBJ4;ZE<B-|VBFg?$Mt-b^*ltF+Dt zAN8CvmatClj>*Zq*5d4vqn^{|C#+?|FCBUdsz&|G|0!a8q#OwK!t^E>CL=ki?%>)=#O4({Uo zE;#D>@PUMN$@Z9Ba=<6ouRQAcWGZ1@xi=|AX_p{ix^bpH5iUe<&u`f7&Pa?LF$b;|mGv=1;`r<}di#i@whiO-D6V}h~j>*q|%=!J&QP1=Lov{ArftdWyfBWRS$2Yr=|0-eq;gOj9 z;a5KS#}nP&H-4Y6{`5pl{`7mFJpI?n(2IW^5B>G&nEdrcpFH=!lc87scRcjJ&&A|_ zU-8MG-{SngWlKw?zjDCkuk3O$@hNkB5=Kkkz!mL2un zmpmrl_+U)F@mb3M)T5q<-hWK)_-IV-V5!%0XB_qX?CN83&u3zC&(|pTvyXb7`qVKw z@`acj`40Etc}G2e`1~>X=}j^D>D@m0=fR_%KYrzy{PNbA{PF>xeC*ZD?pMEgOn!T3 zOn&=_Prmp3ROsQqhuzQL8vG=KlIo8-AS#zSxXEGBO} z$MyDS&i9{fX{r4E>*%lB(o&h*I^fD}?P8@a(+4=;J+i>+k%U!jm$zbILI$W0woqSe z^LKgU)Fg50gU!})+3Y?h*2z;cL4B};`s1A7G09mzCCmDKvNv*E_C=3L!P+S~mHObK z^5b%G#W5+HoRTxB58hXITrRIaCbe6qhP3YOMP(nhU0S2#$$5&4O4PG^}z#Mj?0m=j>(xfPsvTx2aoPLE|5>H(ys^6^*DsRxjj%7WPgu7cTJt^&??0q47H-hiuYUYDy3y$ro}@qnv#ahIzWy%ycO z^+?W?H{orSVQHm*a60wF25ZR5>z$BZ>I3(dBDZ@>*e#=LWwe<3Vn>lXurutgK50Tu zqJI$CU*wML54)QdO~|4q`WML}cSSPnKE)f8Rn!NU%WL_XOorcwELlA9n9+jLClLgRfK`m-$}_yD#pD$)R;V z`DVj$S@O-W`|^R9T(ODzv;DZN{%+X);W+pEHlO@(;J9r3Vc7l2lVkF!JwACbeq7Fa zFzmi=Sxi26p-�I4-*$3%hSTH6~xa%qLGSJuU~H47VfUk#aKGQ; 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 literal 0 HcmV?d00001 diff --git a/apps/blueprints/src/BookChildTree.tsx b/apps/blueprints/src/components/BookChildTree.tsx similarity index 86% rename from apps/blueprints/src/BookChildTree.tsx rename to apps/blueprints/src/components/BookChildTree.tsx index b258a9a..80817d0 100644 --- a/apps/blueprints/src/BookChildTree.tsx +++ b/apps/blueprints/src/components/BookChildTree.tsx @@ -1,9 +1,7 @@ -/** @jsx jsx */ -/* eslint-disable jsx-a11y/anchor-is-valid */ -import { jsx, css } from "@emotion/react"; +import { css } from "@emotion/react"; import Link from "next/link"; import BBCode from "bbcode-to-react"; -import { BlueprintBookEntry } from "@factorio-sites/database"; +import { ChildTree } from "@factorio-sites/database"; const componentStyles = css` .blueprint, @@ -22,7 +20,7 @@ const componentStyles = css` `; interface BookChildTreeProps { - child_tree: BlueprintBookEntry["child_tree"]; + child_tree: ChildTree; base_url: string; selected_id: string; } diff --git a/apps/blueprints/src/CopyButton.tsx b/apps/blueprints/src/components/CopyButton.tsx similarity index 100% rename from apps/blueprints/src/CopyButton.tsx rename to apps/blueprints/src/components/CopyButton.tsx diff --git a/apps/blueprints/src/FullscreenImage.tsx b/apps/blueprints/src/components/FullscreenImage.tsx similarity index 91% rename from apps/blueprints/src/FullscreenImage.tsx rename to apps/blueprints/src/components/FullscreenImage.tsx index a36f189..9e0797a 100644 --- a/apps/blueprints/src/FullscreenImage.tsx +++ b/apps/blueprints/src/components/FullscreenImage.tsx @@ -1,7 +1,5 @@ -/** @jsx jsx */ -/* eslint-disable jsx-a11y/anchor-is-valid */ import React, { useState } from "react"; -import { jsx, css } from "@emotion/react"; +import { css } from "@emotion/react"; import { MapInteractionCSS } from "react-map-interaction"; const elementStyle = css` diff --git a/apps/blueprints/src/Header.tsx b/apps/blueprints/src/components/Header.tsx similarity index 100% rename from apps/blueprints/src/Header.tsx rename to apps/blueprints/src/components/Header.tsx diff --git a/apps/blueprints/src/components/ImageEditor.tsx b/apps/blueprints/src/components/ImageEditor.tsx new file mode 100644 index 0000000..4ef6dd6 --- /dev/null +++ b/apps/blueprints/src/components/ImageEditor.tsx @@ -0,0 +1,72 @@ +import { useEffect, useRef, useState } from "react"; + +type FBE = typeof import("@fbe/editor"); +type Editor = InstanceType; + +export const ImageEditor: React.FC<{ string: string }> = ({ string }) => { + const canvasRef = useRef(null); + // const [image, setImage] = useState(); + const FbeRef = useRef(); + const editorRef = useRef(); + const [editorLoaded, setEditorLoaded] = useState(false); + + // Load editor async, it does not work server side + useEffect(() => { + (async () => { + const FBE = await import("@fbe/editor"); + const editor = new FBE.Editor(); + const canvas = canvasRef.current; + if (!canvas) return; + await editor.init(canvas); + canvas.style.width = "100%"; + canvas.style.height = "auto"; + editor.setRendererSize(canvas.offsetWidth, canvas.offsetHeight); + FbeRef.current = FBE; + editorRef.current = editor; + setEditorLoaded(true); + })(); + }, []); + + useEffect(() => { + (async () => { + const FBE = FbeRef.current; + const editor = editorRef.current; + if (!editorLoaded || !FBE || !editor) return; + + const bpOrBook = await FBE.getBlueprintOrBookFromSource(string); + const blueprint = bpOrBook instanceof FBE.Book ? bpOrBook.getBlueprint() : bpOrBook; + + console.log({ blueprint }); + + await editor.loadBlueprint(blueprint); + // await FBE.default.waitForLoader(); + + // Wait a little extra, sometimes even after textures are loaded it neeeds a moment to render + // await new Promise((resolve) => setTimeout(resolve, 10)); + + // const picture = await editor.getPicture(); + // setImage(URL.createObjectURL(picture)); + })(); + }, [string, editorLoaded]); + + window.addEventListener( + "resize", + () => { + if (!canvasRef.current || !editorRef.current) return; + canvasRef.current.style.width = "100%"; + canvasRef.current.style.height = "auto"; + editorRef.current.setRendererSize( + canvasRef.current.offsetWidth, + canvasRef.current.offsetHeight + ); + }, + false + ); + + return ( +

+ ); +}; diff --git a/apps/blueprints/src/Markdown.tsx b/apps/blueprints/src/components/Markdown.tsx similarity index 81% rename from apps/blueprints/src/Markdown.tsx rename to apps/blueprints/src/components/Markdown.tsx index d67cc54..0d5bdcb 100644 --- a/apps/blueprints/src/Markdown.tsx +++ b/apps/blueprints/src/components/Markdown.tsx @@ -1,6 +1,4 @@ -/** @jsx jsx */ -/* eslint-disable jsx-a11y/anchor-is-valid */ -import { jsx, css } from "@emotion/react"; +import { css } from "@emotion/react"; import ReactMarkdown from "react-markdown"; const markdownStyle = css` diff --git a/apps/blueprints/src/Pagination.tsx b/apps/blueprints/src/components/Pagination.tsx similarity index 94% rename from apps/blueprints/src/Pagination.tsx rename to apps/blueprints/src/components/Pagination.tsx index 903bc55..315802d 100644 --- a/apps/blueprints/src/Pagination.tsx +++ b/apps/blueprints/src/components/Pagination.tsx @@ -1,5 +1,3 @@ -/** @jsx jsx */ -import { jsx } from "@emotion/react"; import React from "react"; import Link from "next/link"; import { useRouter } from "next/router"; diff --git a/apps/blueprints/src/Panel.tsx b/apps/blueprints/src/components/Panel.tsx similarity index 94% rename from apps/blueprints/src/Panel.tsx rename to apps/blueprints/src/components/Panel.tsx index 531f8a1..9de7066 100644 --- a/apps/blueprints/src/Panel.tsx +++ b/apps/blueprints/src/components/Panel.tsx @@ -1,5 +1,4 @@ -/** @jsx jsx */ -import { jsx, css, SerializedStyles } from "@emotion/react"; +import { css, SerializedStyles } from "@emotion/react"; import { Box, BoxProps } from "@chakra-ui/react"; import { ReactNode } from "react"; diff --git a/apps/blueprints/pages/_app.tsx b/apps/blueprints/src/pages/_app.tsx similarity index 97% rename from apps/blueprints/pages/_app.tsx rename to apps/blueprints/src/pages/_app.tsx index a1e28d7..6767f00 100644 --- a/apps/blueprints/pages/_app.tsx +++ b/apps/blueprints/src/pages/_app.tsx @@ -1,11 +1,10 @@ -/** @jsx jsx */ import { AppProps, NextWebVitalsMetric } from "next/app"; import Head from "next/head"; import Router from "next/router"; -import { jsx, css, Global } from "@emotion/react"; +import { css, Global } from "@emotion/react"; import { ChakraProvider } from "@chakra-ui/react"; import NProgress from "nprogress"; -import { Header } from "../src/Header"; +import { Header } from "../components/Header"; const globalStyles = css` html { @@ -60,7 +59,7 @@ const BlueprintsApp = ({ Component, pageProps }: AppProps) => { }; export function reportWebVitals(metric: NextWebVitalsMetric) { - console.log(metric); + // console.log(metric); } export default BlueprintsApp; diff --git a/apps/blueprints/src/pages/api/db.ts b/apps/blueprints/src/pages/api/db.ts new file mode 100644 index 0000000..b92196d --- /dev/null +++ b/apps/blueprints/src/pages/api/db.ts @@ -0,0 +1,15 @@ +import { NextApiHandler } from "next"; +// eslint-disable-next-line @typescript-eslint/no-unused-vars +import { init, BlueprintModel } from "@factorio-sites/database"; + +const handler: NextApiHandler = async (_, res) => { + await init(); + + // eslint-disable-next-line @typescript-eslint/no-empty-function + const bp = await BlueprintModel.findByPk("uuid").catch(() => {}); + console.log({ bp }); + + res.status(200).end("db sync"); +}; + +export default handler; diff --git a/apps/blueprints/src/pages/api/fbe-proxy/[...proxy].ts b/apps/blueprints/src/pages/api/fbe-proxy/[...proxy].ts new file mode 100644 index 0000000..e78921f --- /dev/null +++ b/apps/blueprints/src/pages/api/fbe-proxy/[...proxy].ts @@ -0,0 +1,32 @@ +import { NextApiHandler } from "next"; + +const handler: NextApiHandler = async (req, res) => { + const path = req.query.proxy ? (req.query.proxy as string[]).join("/") : ""; + + console.log("[fbe-proxy]", path); + + const result = await fetch( + "https://static-fbe.teoxoy.com/file/factorio-blueprint-editor/" + path + ); + + res.setHeader("Access-Control-Allow-Origin", "*"); + + result.headers.forEach((val, key) => { + if ( + !res.hasHeader(key) && + !["content-encoding", "connection", "server", "transfer-encoding", "vary"].includes(key) + ) { + res.setHeader(key, val); + } + }); + + if (result.headers.get("content-type") === "application/octet-stream") { + const output = Buffer.from(await result.arrayBuffer()); + res.end(output); + } else { + const text = await result.text(); + res.end(text); + } +}; + +export default handler; diff --git a/apps/blueprints/pages/api/image-to-gen.ts b/apps/blueprints/src/pages/api/image-to-gen.ts similarity index 100% rename from apps/blueprints/pages/api/image-to-gen.ts rename to apps/blueprints/src/pages/api/image-to-gen.ts diff --git a/apps/blueprints/pages/api/string/[hash].ts b/apps/blueprints/src/pages/api/string/[hash].ts similarity index 100% rename from apps/blueprints/pages/api/string/[hash].ts rename to apps/blueprints/src/pages/api/string/[hash].ts diff --git a/apps/blueprints/pages/[blueprint]/[blueprintId].tsx b/apps/blueprints/src/pages/blueprint/[blueprintId].tsx similarity index 90% rename from apps/blueprints/pages/[blueprint]/[blueprintId].tsx rename to apps/blueprints/src/pages/blueprint/[blueprintId].tsx index 7380fb5..f403880 100644 --- a/apps/blueprints/pages/[blueprint]/[blueprintId].tsx +++ b/apps/blueprints/src/pages/blueprint/[blueprintId].tsx @@ -1,25 +1,25 @@ -/** @jsx jsx */ import React, { ReactNode, useEffect, useState } from "react"; -import { jsx, css } from "@emotion/react"; +import { css } from "@emotion/react"; import { NextPage, NextPageContext } from "next"; import BBCode from "bbcode-to-react"; import { Button, Grid, Image } from "@chakra-ui/react"; import { - BlueprintBookEntry, - BlueprintEntry, - BlueprintPageEntry, + BlueprintBook, + Blueprint, + BlueprintPage, getBlueprintBookById, getBlueprintById, getBlueprintPageById, hasBlueprintImage, } from "@factorio-sites/database"; -import { BlueprintData, timeLogger } from "@factorio-sites/common-utils"; +import { BlueprintStringData, timeLogger } from "@factorio-sites/common-utils"; import { chakraResponsive, parseBlueprintStringClient } from "@factorio-sites/web-utils"; -import { Panel } from "../../src/Panel"; -import { Markdown } from "../../src/Markdown"; -import { FullscreenImage } from "../../src/FullscreenImage"; -import { BookChildTree } from "../../src/BookChildTree"; -import { CopyButton } from "../../src/CopyButton"; +import { Panel } from "../../components/Panel"; +import { Markdown } from "../../components/Markdown"; +import { FullscreenImage } from "../../components/FullscreenImage"; +import { BookChildTree } from "../../components/BookChildTree"; +import { CopyButton } from "../../components/CopyButton"; +import { ImageEditor } from "../../components/ImageEditor"; const imageStyle = css` display: flex; @@ -30,15 +30,15 @@ const imageStyle = css` `; type Selected = - | { type: "blueprint"; data: Pick } - | { type: "blueprint_book"; data: Pick }; + | { type: "blueprint"; data: Pick } + | { type: "blueprint_book"; data: Pick }; interface IndexProps { image_exists: boolean; selected: Selected; - blueprint: BlueprintEntry | null; - blueprint_book: BlueprintBookEntry | null; - blueprint_page: BlueprintPageEntry; + blueprint: Blueprint | null; + blueprint_book: BlueprintBook | null; + blueprint_page: BlueprintPage; } export const Index: NextPage = ({ @@ -50,7 +50,7 @@ export const Index: NextPage = ({ }) => { const [imageZoom, setImageZoom] = useState(false); const [blueprintString, setBlueprintString] = useState(null); - const [data, setData] = useState(null); + const [data, setData] = useState(null); const [showJson, setShowJson] = useState(false); const selectedHash = selected.data.blueprint_hash; @@ -145,7 +145,8 @@ export const Index: NextPage = ({ gridColumn={chakraResponsive({ mobile: "1", desktop: "2" })} gridRow={chakraResponsive({ mobile: "1", desktop: null })} > - {renderImage()} + {/* {renderImage()} */} + {blueprintString && } = ({ blueprint }) => ( +const BlueprintComponent: React.FC<{ blueprint: BlueprintPage }> = ({ blueprint }) => (
{blueprint.title} @@ -33,7 +31,7 @@ const BlueprintComponent: React.FC<{ blueprint: BlueprintPageEntry }> = ({ bluep interface IndexProps { page: number; - blueprints: BlueprintPageEntry[]; + blueprints: BlueprintPage[]; } export const Index: NextPage = ({ page, blueprints }) => { diff --git a/apps/blueprints/tsconfig.json b/apps/blueprints/tsconfig.json index 05e636e..2f806bd 100644 --- a/apps/blueprints/tsconfig.json +++ b/apps/blueprints/tsconfig.json @@ -9,7 +9,9 @@ "forceConsistentCasingInFileNames": true, "noEmit": true, "resolveJsonModule": true, - "isolatedModules": true + "isolatedModules": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true }, "include": ["**/*.ts", "**/*.tsx", "next-env.d.ts"], "exclude": ["node_modules"] diff --git a/apps/factorioprints-scraper/src/app/populate-db.ts b/apps/factorioprints-scraper/src/app/populate-db.ts index 7a632d5..1ec26a4 100644 --- a/apps/factorioprints-scraper/src/app/populate-db.ts +++ b/apps/factorioprints-scraper/src/app/populate-db.ts @@ -10,7 +10,7 @@ const fsReadFile = promisify(fs.readFile); const CACHE_DIR = path.join(__dirname, "../../../.cache/factorioprints-data"); export async function writeToDatastore() { - const filecontent = await fsReadFile(path.join(CACHE_DIR, `most-fav-json/page2.json`), "utf8"); + const filecontent = await fsReadFile(path.join(CACHE_DIR, `most-fav-json/page1.json`), "utf8"); const data = JSON.parse(filecontent); for (let i = 0; i < data.length; i++) { diff --git a/apps/factorioprints-scraper/src/environments/environment.ts b/apps/factorioprints-scraper/src/environments/environment.ts index a20cfe5..387d8fa 100644 --- a/apps/factorioprints-scraper/src/environments/environment.ts +++ b/apps/factorioprints-scraper/src/environments/environment.ts @@ -1,3 +1,11 @@ export const environment = { production: false, }; + +process.env.GOOGLE_APPLICATION_CREDENTIALS = + "D:\\git\\factorio-sites\\credentials\\factorio-sites.json"; +process.env.POSTGRES_HOST = "127.0.0.1"; +process.env.POSTGRES_DB = "factorio-blueprints"; +process.env.POSTGRES_USER = "factorio-blueprints"; +process.env.POSTGRES_PASSWORD = "local"; +process.env.SYNCHRONIZE_DB = "true"; diff --git a/apps/factorioprints-scraper/src/main.ts b/apps/factorioprints-scraper/src/main.ts index 575f58a..67055da 100644 --- a/apps/factorioprints-scraper/src/main.ts +++ b/apps/factorioprints-scraper/src/main.ts @@ -1,5 +1,12 @@ +import "./environments/environment"; +if (process.env.NODE_ENV === "development") { + console.log(process.env.GOOGLE_APPLICATION_CREDENTIALS); +} + +// import { saveBlueprintFromFactorioprints } from "@factorio-sites/database"; +// import { parseBlueprintString } from "@factorio-sites/node-utils"; +// import { scanFactorioPrints } from "./app/scan"; import { writeToDatastore } from "./app/populate-db"; -import { scanFactorioPrints } from "./app/scan"; // async function writeTestBP() { // const source = @@ -11,12 +18,10 @@ import { scanFactorioPrints } from "./app/scan"; // // use createBlueprint // saveBlueprintFromFactorioprints( // { -// factorioprints_id: null, +// factorioprints_id: "-id", // title: "my blueprint", // description_markdown: "", -// tags: [], -// updated_at: Date.now() / 1000, -// created_at: Date.now() / 1000, +// tags: ["tag1", "tag2"], // }, // string // ); @@ -24,8 +29,8 @@ import { scanFactorioPrints } from "./app/scan"; async function main() { // scanFactorioPrints(1, 3); - writeToDatastore(); // writeTestBP(); + writeToDatastore(); } main().catch((reason) => { diff --git a/docker/factorio-blueprints/docker-compose.yml b/docker/factorio-blueprints/docker-compose.yml new file mode 100644 index 0000000..ef63280 --- /dev/null +++ b/docker/factorio-blueprints/docker-compose.yml @@ -0,0 +1,26 @@ +version: "3.8" +services: + postgres: + image: postgres:13 + container_name: factorio-blueprints-database + restart: always + volumes: + - postgres-data:/var/lib/postgresql/data/ + env_file: + - postgres.env + ports: + - 5432:5432 + adminer: + image: dpage/pgadmin4:4 + container_name: factorio-blueprints-database-admin + restart: always + volumes: + - pgadmin-data:/var/lib/pgadmin + env_file: + - pgadmin.env + ports: + - 8080:80 + +volumes: + postgres-data: + pgadmin-data: diff --git a/docker/factorio-blueprints/pgadmin.env b/docker/factorio-blueprints/pgadmin.env new file mode 100644 index 0000000..4cf6bce --- /dev/null +++ b/docker/factorio-blueprints/pgadmin.env @@ -0,0 +1,3 @@ +PGADMIN_DEFAULT_EMAIL=me@barrykun.com +PGADMIN_DEFAULT_PASSWORD=local +PGADMIN_LISTEN_PORT=80 \ No newline at end of file diff --git a/docker/factorio-blueprints/postgres.env b/docker/factorio-blueprints/postgres.env new file mode 100644 index 0000000..a77dafd --- /dev/null +++ b/docker/factorio-blueprints/postgres.env @@ -0,0 +1,3 @@ +POSTGRES_DB=factorio-blueprints +POSTGRES_USER=factorio-blueprints +POSTGRES_PASSWORD=local diff --git a/libs/common-utils/src/lib/common-utils.ts b/libs/common-utils/src/lib/common-utils.ts index a13354b..4db67a1 100644 --- a/libs/common-utils/src/lib/common-utils.ts +++ b/libs/common-utils/src/lib/common-utils.ts @@ -4,7 +4,7 @@ interface Entity { position: { x: number; y: number }; } -export interface Blueprint { +export interface BlueprintData { entities: Entity[]; tiles?: { name: string; position: { x: number; y: number } }[]; icons: { signal: { type: "item" | "fluid"; name: string } }[]; @@ -14,33 +14,44 @@ export interface Blueprint { version: number; } -export interface BlueprintBook { +export interface BlueprintBookData { active_index: number; - blueprints: Array<{ index: number } & BlueprintData>; + blueprints: Array<{ index: number } & BlueprintStringData>; item: string; label: string; description?: string; version: number; } -export interface BlueprintData { - blueprint_book?: BlueprintBook; - blueprint?: Blueprint; +export interface BlueprintPageData { + id: string; + blueprint_id?: string; + blueprint_book_id?: string; + title: string; + description_markdown: string; + created_at: number; + updated_at: number; + factorioprints_id?: string; } -export const getBlueprintContentForImageHash = (blueprint: Blueprint): string => { +export interface BlueprintStringData { + blueprint_book?: BlueprintBookData; + blueprint?: BlueprintData; +} + +export const getBlueprintContentForImageHash = (blueprint: BlueprintData): string => { return JSON.stringify({ entities: blueprint.entities, tiles: blueprint.tiles, }); }; -export const flattenBlueprintData = (data: BlueprintData) => { - const blueprints: Blueprint[] = []; - const books: BlueprintBook[] = []; +export const flattenBlueprintData = (data: BlueprintStringData) => { + const blueprints: BlueprintData[] = []; + const books: BlueprintBookData[] = []; // Recursively go through the string to find all blueprints - const findAndPushBlueprints = (data: BlueprintData) => { + const findAndPushBlueprints = (data: BlueprintStringData) => { if (data.blueprint) { blueprints.push(data.blueprint); } else if (data.blueprint_book) { @@ -59,25 +70,28 @@ export const flattenBlueprintData = (data: BlueprintData) => { }; }; -export const findBlueprintByPath = (data: BlueprintData, path: number[]): Blueprint | null => { +export const findBlueprintByPath = ( + data: BlueprintStringData, + path: number[] +): BlueprintStringData | null => { if (path.length === 0) { - return (data.blueprint || data.blueprint_book?.blueprints[0]) as Blueprint; + return (data.blueprint || data.blueprint_book?.blueprints[0]) as BlueprintStringData; } else if (data.blueprint_book && path.length === 1) { - return data.blueprint_book.blueprints[path[0]].blueprint as Blueprint; + return data.blueprint_book.blueprints[path[0]].blueprint as BlueprintStringData; } return null; }; export const findActiveBlueprint = ( - data: BlueprintData -): { blueprint: Blueprint; path: number[] } => { + data: BlueprintStringData +): { blueprint: BlueprintData; path: number[] } => { if (data.blueprint) { return { blueprint: data.blueprint, path: [0] }; } else if (data.blueprint_book) { const findActive = ( - book: BlueprintBook, + book: BlueprintBookData, _path: number[] = [] - ): { blueprint: Blueprint; path: number[] } => { + ): { blueprint: BlueprintData; path: number[] } => { const active = book.blueprints.find((bp) => bp.index === book.active_index); if (active && active.blueprint) { diff --git a/libs/database/jest.config.js b/libs/database/jest.config.js index a44f0d7..075089f 100644 --- a/libs/database/jest.config.js +++ b/libs/database/jest.config.js @@ -1,3 +1,4 @@ +/* eslint-disable no-undef */ module.exports = { displayName: "database", preset: "../../jest.preset.js", diff --git a/libs/database/src/index.ts b/libs/database/src/index.ts index 25c6e67..c1fa836 100644 --- a/libs/database/src/index.ts +++ b/libs/database/src/index.ts @@ -1,4 +1,6 @@ -export * from "./lib/gcp-datastore"; +export * from "./lib/data"; export * from "./lib/gcp-pubsub"; export * from "./lib/gcp-storage"; export * from "./lib/types"; +export * from "./lib/postgres/database"; +export * from "./lib/postgres/models"; diff --git a/libs/database/src/lib/data/blueprint.ts b/libs/database/src/lib/data/blueprint.ts new file mode 100644 index 0000000..47bbc74 --- /dev/null +++ b/libs/database/src/lib/data/blueprint.ts @@ -0,0 +1,85 @@ +import { BlueprintData, getBlueprintContentForImageHash } from "@factorio-sites/common-utils"; +import { encodeBlueprint, hashString } from "@factorio-sites/node-utils"; +import { getBlueprintImageRequestTopic } from "../gcp-pubsub"; +import { saveBlueprintString } from "../gcp-storage"; +import { BlueprintInstance, BlueprintModel, BlueprintStringModel } from "../postgres/models"; +import { Blueprint } from "../types"; + +const blueprintImageRequestTopic = getBlueprintImageRequestTopic(); + +const mapBlueprintInstanceToEntry = (entity: BlueprintInstance): Blueprint => ({ + id: entity.id, + blueprint_hash: entity.blueprint_hash, + image_hash: entity.image_hash, + label: entity.label || "", + description: entity.description || "", + tags: entity.tags, + created_at: entity.created_at && entity.created_at.getTime() / 1000, + updated_at: entity.updated_at && entity.updated_at.getTime() / 1000, + factorioprints_id: entity.factorioprints_id || undefined, + game_version: entity.game_version || null, +}); + +export async function getBlueprintById(id: string): Promise { + const result = await BlueprintModel.findByPk(id).catch(() => null); + return result ? mapBlueprintInstanceToEntry(result) : null; +} + +export async function getBlueprintByHash(hash: string): Promise { + const result = await BlueprintModel.findOne({ + where: { blueprint_hash: hash }, + }).catch(() => null); + return result ? mapBlueprintInstanceToEntry(result) : null; +} + +export async function createBlueprint( + blueprint: BlueprintData, + extraInfo: { + tags: string[]; + created_at?: number; + updated_at?: number; + factorioprints_id?: string; + } +) { + const string = await encodeBlueprint({ blueprint }); + const blueprint_hash = hashString(string); + const image_hash = hashString(getBlueprintContentForImageHash(blueprint)); + + const exists = await getBlueprintByHash(blueprint_hash); + if (exists) { + return { insertedId: exists.id }; + } + + // Write string to google storage + await saveBlueprintString(blueprint_hash, string); + + // Write blueprint details to datastore + const result = await BlueprintModel.create({ + label: blueprint.label, + description: blueprint.description, + blueprint_hash: blueprint_hash, + image_hash: image_hash, + tags: extraInfo.tags, + game_version: `${blueprint.version}`, + image_version: 1, + factorioprints_id: extraInfo.factorioprints_id, + updated_at: extraInfo.updated_at ? new Date(extraInfo.updated_at * 1000) : undefined, + created_at: extraInfo.created_at ? new Date(extraInfo.created_at * 1000) : undefined, + }); + + console.log(`Created Blueprint ${result.id}`); + + blueprintImageRequestTopic.publishJSON({ + blueprintId: result.id, + }); + + await BlueprintStringModel.create({ + blueprint_id: result.id, + blueprint_hash: blueprint_hash, + image_hash: image_hash, + version: 1, + changes_markdown: null, + }); + + return { insertedId: result.id }; +} diff --git a/libs/database/src/lib/data/blueprint_book.ts b/libs/database/src/lib/data/blueprint_book.ts new file mode 100644 index 0000000..49d5d41 --- /dev/null +++ b/libs/database/src/lib/data/blueprint_book.ts @@ -0,0 +1,97 @@ +import { BlueprintBookData } from "@factorio-sites/common-utils"; +import { encodeBlueprint, hashString } from "@factorio-sites/node-utils"; +import { saveBlueprintString } from "../gcp-storage"; +import { BlueprintBookModel, BlueprintBookInstance } from "../postgres/models"; +import { BlueprintBook, ChildTree } from "../types"; +import { createBlueprint } from "./blueprint"; + +const mapBlueprintBookEntityToObject = (entity: BlueprintBookInstance): BlueprintBook => ({ + id: entity.id, + // blueprint_ids: entity.blueprint_ids.map((key: any) => key.id), + // blueprint_book_ids: entity.blueprint_book_ids.map((key: any) => key.id), + child_tree: entity.child_tree ? entity.child_tree : [], + blueprint_hash: entity.blueprint_hash, + label: entity.label, + description: entity.description, + created_at: entity.created_at && entity.created_at.getTime() / 1000, + updated_at: entity.updated_at && entity.updated_at.getTime() / 1000, + is_modded: entity.is_modded || false, + factorioprints_id: entity.factorioprints_id, +}); + +export async function getBlueprintBookById(id: string): Promise { + const result = await BlueprintBookModel.findByPk(id).catch(() => null); + return result ? mapBlueprintBookEntityToObject(result) : null; +} + +export async function getBlueprintBookByHash(hash: string): Promise { + const result = await BlueprintBookModel.findOne({ + where: { blueprint_hash: hash }, + }).catch(() => null); + return result ? mapBlueprintBookEntityToObject(result) : null; +} + +export async function createBlueprintBook( + blueprintBook: BlueprintBookData, + extraInfo: { + tags: string[]; + created_at?: number; + updated_at?: number; + factorioprints_id?: string; + } +): Promise<{ insertedId: string; child_tree: ChildTree }> { + const string = await encodeBlueprint({ blueprint_book: blueprintBook }); + const blueprint_hash = hashString(string); + + const exists = await getBlueprintBookByHash(blueprint_hash); + if (exists) { + const book = await getBlueprintBookById(exists.id); + if (!book) throw Error("this is impossible, just pleasing typescript"); + return { insertedId: exists.id, child_tree: book.child_tree }; + } + + // Write string to google storage + await saveBlueprintString(blueprint_hash, string); + + const blueprint_ids = []; + const blueprint_book_ids = []; + const child_tree: ChildTree = []; + + // Create the book's child objects + for (let i = 0; i < blueprintBook.blueprints.length; i++) { + const blueprint = blueprintBook.blueprints[i]; + if (blueprint.blueprint) { + const result = await createBlueprint(blueprint.blueprint, extraInfo); + child_tree.push({ + type: "blueprint", + id: result.insertedId, + name: blueprint.blueprint.label, + }); + blueprint_ids.push(result.insertedId); + } else if (blueprint.blueprint_book) { + const result = await createBlueprintBook(blueprint.blueprint_book, extraInfo); + child_tree.push({ + type: "blueprint_book", + id: result.insertedId, + name: blueprint.blueprint_book.label, + children: result.child_tree, + }); + blueprint_book_ids.push(result.insertedId); + } + } + + const result = await BlueprintBookModel.create({ + label: blueprintBook.label, + description: blueprintBook.description, + blueprint_hash: blueprint_hash, + factorioprints_id: extraInfo.factorioprints_id, + is_modded: false, + child_tree, + updated_at: extraInfo.updated_at ? new Date(extraInfo.updated_at * 1000) : undefined, + created_at: extraInfo.created_at ? new Date(extraInfo.created_at * 1000) : undefined, + }); + + console.log(`Created Blueprint book ${result.id}`); + + return { insertedId: result.id, child_tree }; +} diff --git a/libs/database/src/lib/data/blueprint_page.ts b/libs/database/src/lib/data/blueprint_page.ts new file mode 100644 index 0000000..a03eefc --- /dev/null +++ b/libs/database/src/lib/data/blueprint_page.ts @@ -0,0 +1,63 @@ +import { BlueprintPageModel, BlueprintPageInstance } from "../postgres/models"; +import { BlueprintPage } from "../types"; + +const mapBlueprintPageEntityToObject = (entity: BlueprintPageInstance): BlueprintPage => ({ + id: entity.id, + blueprint_id: entity.blueprint_id ?? null, + blueprint_book_id: entity.blueprint_book_id ?? null, + title: entity.title, + description_markdown: entity.description_markdown, + created_at: entity.created_at && entity.created_at.getTime() / 1000, + updated_at: entity.updated_at && entity.updated_at.getTime() / 1000, + factorioprints_id: entity.factorioprints_id ?? null, +}); + +export async function getBlueprintPageById(id: string): Promise { + const result = await BlueprintPageModel.findByPk(id).catch(() => null); + return result ? mapBlueprintPageEntityToObject(result) : null; +} + +export async function getBlueprintPageByFactorioprintsId( + id: string +): Promise { + const result = await BlueprintPageModel.findOne({ + where: { factorioprints_id: id }, + }).catch(() => null); + return result ? mapBlueprintPageEntityToObject(result) : null; +} + +export async function getMostRecentBlueprintPages(page = 1): Promise { + const perPage = 10; + const result = + (await BlueprintPageModel.findAll({ + order: [["updated_at", "DESC"]], + limit: perPage, + offset: (page - 1) * perPage, + raw: true, + }).catch(() => null)) || []; + return result.map(mapBlueprintPageEntityToObject); +} + +export async function createBlueprintPage( + type: "blueprint" | "blueprint_book", + targetId: string, + extraInfo: { + title: string; + description_markdown: string; + created_at?: number; + updated_at?: number; + factorioprints_id?: string; + } +) { + await BlueprintPageModel.create({ + title: extraInfo.title, + description_markdown: extraInfo.description_markdown, + factorioprints_id: extraInfo.factorioprints_id, + blueprint_id: type === "blueprint" ? targetId : undefined, + blueprint_book_id: type === "blueprint_book" ? targetId : undefined, + updated_at: extraInfo.updated_at ? new Date(extraInfo.updated_at * 1000) : undefined, + created_at: extraInfo.created_at ? new Date(extraInfo.created_at * 1000) : undefined, + }); + + console.log(`Created Blueprint Page`); +} diff --git a/libs/database/src/lib/data/factorioprints.ts b/libs/database/src/lib/data/factorioprints.ts new file mode 100644 index 0000000..bc7ae92 --- /dev/null +++ b/libs/database/src/lib/data/factorioprints.ts @@ -0,0 +1,50 @@ +import { parseBlueprintString } from "@factorio-sites/node-utils"; +import { createBlueprint } from "./blueprint"; +import { createBlueprintBook } from "./blueprint_book"; +import { createBlueprintPage } from "./blueprint_page"; + +interface BlueprintDataFromFactorioprints { + description_markdown: string; + title: string; + updated_at?: number; + created_at?: number; + tags: string[]; + factorioprints_id: string; +} +export async function saveBlueprintFromFactorioprints( + factorioprintData: BlueprintDataFromFactorioprints, + blueprintString: string +) { + const parsed = await parseBlueprintString(blueprintString); + + // not needed for inserting, just printing + // const { blueprints, books } = flattenBlueprintData(parsed.data); + // console.log(`string has ${books.length} books with ${blueprints.length} blueprints`); + + const extraInfo = { + created_at: factorioprintData.created_at, + updated_at: factorioprintData.updated_at, + tags: factorioprintData.tags, + factorioprints_id: factorioprintData.factorioprints_id, + }; + + const extraInfoPage = { + title: factorioprintData.title, + description_markdown: factorioprintData.description_markdown, + created_at: factorioprintData.created_at, + updated_at: factorioprintData.updated_at, + factorioprints_id: factorioprintData.factorioprints_id, + }; + + if (parsed.data.blueprint) { + console.log("string has one blueprint..."); + const { insertedId } = await createBlueprint(parsed.data.blueprint, extraInfo); + await createBlueprintPage("blueprint", insertedId, extraInfoPage); + } else if (parsed.data.blueprint_book) { + console.log("string has a blueprint book..."); + const { insertedId } = await createBlueprintBook(parsed.data.blueprint_book, extraInfo); + await createBlueprintPage("blueprint_book", insertedId, extraInfoPage); + } + + return true; +} diff --git a/libs/database/src/lib/data/index.ts b/libs/database/src/lib/data/index.ts new file mode 100644 index 0000000..0dc20e1 --- /dev/null +++ b/libs/database/src/lib/data/index.ts @@ -0,0 +1,4 @@ +export * from "./blueprint"; +export * from "./blueprint_book"; +export * from "./blueprint_page"; +export * from "./factorioprints"; diff --git a/libs/database/src/lib/datastore/gcp-datastore.ts b/libs/database/src/lib/datastore/gcp-datastore.ts new file mode 100644 index 0000000..e876e10 --- /dev/null +++ b/libs/database/src/lib/datastore/gcp-datastore.ts @@ -0,0 +1,438 @@ +// import { Datastore } from "@google-cloud/datastore"; +// import { encodeBlueprint, hashString, parseBlueprintString } from "@factorio-sites/node-utils"; +// import { +// BlueprintStringData, +// BlueprintBookData, +// getBlueprintContentForImageHash, +// } from "@factorio-sites/common-utils"; +// import { getBlueprintImageRequestTopic } from "./gcp-pubsub"; +// import { saveBlueprintString } from "./gcp-storage"; +// import { BlueprintBook, Blueprint, BlueprintPage } from "./types"; + +// const datastore = new Datastore(); +// const BlueprintEntity = "Blueprint"; +// const BlueprintBookEntity = "BlueprintBook"; +// const BlueprintPageEntity = "BlueprintPage"; +// const BlueprintStringEntity = "BlueprintString"; +// const blueprintImageRequestTopic = getBlueprintImageRequestTopic(); + +// class DatastoreExistsError extends Error { +// constructor(public existingId: string, message: string) { +// super(message); +// this.name = this.constructor.name; +// Error.captureStackTrace(this, this.constructor); +// } +// } + +// /* +// * BlueprintBook +// */ + +// const mapBlueprintBookEntityToObject = (entity: any): BlueprintBook => ({ +// id: entity[datastore.KEY].id, +// // blueprint_ids: entity.blueprint_ids.map((key: any) => key.id), +// // blueprint_book_ids: entity.blueprint_book_ids.map((key: any) => key.id), +// child_tree: entity.child_tree ? entity.child_tree : [], +// blueprint_hash: entity.blueprint_hash, +// label: entity.label, +// description: entity.description, +// created_at: entity.created_at && entity.created_at.getTime() / 1000, +// updated_at: entity.updated_at && entity.updated_at.getTime() / 1000, +// is_modded: entity.is_modded || false, +// factorioprints_id: entity.factorioprints_id || null, +// }); + +// export async function getBlueprintBookById(id: string): Promise { +// const result = await datastore.get(datastore.key([BlueprintBookEntity, Number(id)])); +// return result[0] ? mapBlueprintBookEntityToObject(result[0]) : null; +// } + +// export async function getBlueprintBookByHash(hash: string): Promise { +// const query = datastore +// .createQuery(BlueprintBookEntity) +// .filter("blueprint_hash", "=", hash) +// .limit(1); +// const [result] = await datastore.runQuery(query); +// return result[0] ? mapBlueprintBookEntityToObject(result[0]) : null; +// } + +// export async function createBlueprintBook( +// blueprintBook: BlueprintBookData, +// extraInfo: { tags: string[]; created_at: number; updated_at: number; factorioprints_id: string } +// ): Promise<{ insertedId: string; child_tree: BlueprintBook["child_tree"] }> { +// const string = await encodeBlueprint({ blueprint_book: blueprintBook }); +// const blueprint_hash = hashString(string); + +// const exists = await getBlueprintBookByHash(blueprint_hash); +// if (exists) { +// const book = await getBlueprintBookById(exists.id); +// if (!book) throw Error("this is impossible, just pleasing typescript"); +// return { insertedId: exists.id, child_tree: book.child_tree }; +// } + +// // Write string to google storage +// await saveBlueprintString(blueprint_hash, string); + +// const blueprint_ids = []; +// const blueprint_book_ids = []; +// const child_tree: BlueprintBook["child_tree"] = []; + +// // Create the book's child objects +// for (let i = 0; i < blueprintBook.blueprints.length; i++) { +// const blueprint = blueprintBook.blueprints[i]; +// if (blueprint.blueprint) { +// const result = await createBlueprint(blueprint.blueprint, extraInfo); +// child_tree.push({ +// type: "blueprint", +// id: result.insertedId, +// name: blueprint.blueprint.label, +// }); +// blueprint_ids.push(result.insertedId); +// } else if (blueprint.blueprint_book) { +// const result = await createBlueprintBook(blueprint.blueprint_book, extraInfo); +// child_tree.push({ +// type: "blueprint_book", +// id: result.insertedId, +// name: blueprint.blueprint_book.label, +// children: result.child_tree, +// }); +// blueprint_book_ids.push(result.insertedId); +// } +// } + +// // Write blueprint details to datastore +// const [result] = await datastore.insert({ +// key: datastore.key([BlueprintBookEntity]), +// data: [ +// { +// name: "blueprint_ids", +// value: blueprint_ids.map((id) => datastore.key([BlueprintEntity, datastore.int(id)])), +// }, +// { +// name: "blueprint_book_ids", +// value: blueprint_book_ids.map((id) => +// datastore.key([BlueprintBookEntity, datastore.int(id)]) +// ), +// }, +// { name: "child_tree", value: child_tree, excludeFromIndexes: true }, +// { name: "label", value: blueprintBook.label }, +// { +// name: "description", +// value: blueprintBook.description || null, +// excludeFromIndexes: true, +// }, +// { name: "blueprint_hash", value: blueprint_hash }, +// { +// name: "created_at", +// value: extraInfo.created_at ? new Date(extraInfo.created_at * 1000) : null, +// excludeFromIndexes: true, +// }, +// { +// name: "updated_at", +// value: extraInfo.updated_at ? new Date(extraInfo.updated_at * 1000) : null, +// excludeFromIndexes: true, +// }, +// { name: "factorioprints_id", value: extraInfo.factorioprints_id || null }, +// ], +// }); + +// const insertedId = String(result.mutationResults?.[0]?.key?.path?.[0]?.id) as string; +// if (!insertedId) throw Error("Something went wrong inserting entity"); + +// console.log(`Created Blueprint book ${insertedId}`); + +// return { insertedId, child_tree }; +// } + +// /* +// * Blueprint +// */ + +// const mapBlueprintEntityToObject = (entity: any): Blueprint => ({ +// id: entity[datastore.KEY].id, +// blueprint_hash: entity.blueprint_hash, +// image_hash: entity.image_hash, +// label: entity.label, +// description: entity.description, +// tags: entity.tags, +// created_at: entity.created_at && entity.created_at.getTime() / 1000, +// updated_at: entity.updated_at && entity.updated_at.getTime() / 1000, +// factorioprints_id: entity.factorioprints_id || null, +// game_version: entity.game_version, +// }); + +// const mapBlueprintObjectToEntity = (object: Omit & { id?: string }): any => ({ +// key: datastore.key(object.id ? [BlueprintEntity, datastore.int(object.id)] : [BlueprintEntity]), +// data: [ +// { name: "label", value: object.label }, +// { +// name: "description", +// value: object.description || null, +// excludeFromIndexes: true, +// }, +// { name: "blueprint_hash", value: object.blueprint_hash }, +// { name: "image_hash", value: object.image_hash }, +// { name: "tags", value: object.tags || [] }, +// { +// name: "created_at", +// value: object.created_at ? new Date(object.created_at * 1000) : new Date(), +// excludeFromIndexes: true, +// }, +// { +// name: "updated_at", +// value: object.updated_at ? new Date(object.updated_at * 1000) : new Date(), +// excludeFromIndexes: true, +// }, +// { name: "game_version", value: object.game_version, excludeFromIndexes: true }, +// { name: "factorioprints_id", value: object.factorioprints_id || null }, +// ], +// }); + +// export async function getBlueprintById(id: string): Promise { +// const result = await datastore.get(datastore.key([BlueprintEntity, datastore.int(id)])); +// return result[0] ? mapBlueprintEntityToObject(result[0]) : null; +// } + +// export async function getBlueprintByHash(hash: string): Promise { +// const query = datastore.createQuery(BlueprintEntity).filter("blueprint_hash", "=", hash).limit(1); +// const [result] = await datastore.runQuery(query); +// return result[0] ? mapBlueprintEntityToObject(result[0]) : null; +// } + +// export async function getBlueprintByImageHash(hash: string): Promise { +// const query = datastore.createQuery(BlueprintEntity).filter("image_hash", "=", hash).limit(1); +// const [result] = await datastore.runQuery(query); +// return result[0] ? mapBlueprintEntityToObject(result[0]) : null; +// } + +// export async function createBlueprint( +// blueprint: BlueprintStringData, +// extraInfo: { tags: string[]; created_at: number; updated_at: number; factorioprints_id: string } +// ) { +// const string = await encodeBlueprint({ blueprint }); +// const blueprint_hash = hashString(string); +// const image_hash = hashString(getBlueprintContentForImageHash(blueprint)); + +// const exists = await getBlueprintByHash(blueprint_hash); +// if (exists) { +// return { insertedId: exists.id }; +// } + +// // Write string to google storage +// await saveBlueprintString(blueprint_hash, string); + +// // Write blueprint details to datastore +// const [result] = await datastore.insert({ +// key: datastore.key([BlueprintEntity]), +// data: [ +// { name: "label", value: blueprint.label }, +// { +// name: "description", +// value: blueprint.description || null, +// excludeFromIndexes: true, +// }, +// { name: "blueprint_hash", value: blueprint_hash }, +// { name: "image_hash", value: image_hash }, +// { name: "tags", value: extraInfo.tags ? extraInfo.tags : [] }, +// { +// name: "created_at", +// value: extraInfo.created_at ? new Date(extraInfo.created_at * 1000) : new Date(), +// excludeFromIndexes: true, +// }, +// { +// name: "updated_at", +// value: extraInfo.updated_at ? new Date(extraInfo.updated_at * 1000) : new Date(), +// excludeFromIndexes: true, +// }, +// { name: "game_version", value: blueprint.version, excludeFromIndexes: true }, +// { name: "factorioprints_id", value: extraInfo.factorioprints_id || null }, +// ], +// }); + +// const insertedId = String(result.mutationResults?.[0]?.key?.path?.[0]?.id); +// if (!insertedId) throw Error("Something went wrong inserting entity"); + +// console.log(`Created Blueprint ${insertedId}`); + +// blueprintImageRequestTopic.publishJSON({ +// blueprintId: insertedId, +// }); + +// await datastore.insert({ +// key: datastore.key([BlueprintEntity, datastore.int(insertedId), BlueprintStringEntity]), +// data: [ +// { name: "blueprint_hash", value: blueprint_hash }, +// { name: "image_hash", value: image_hash }, +// { name: "version", value: 1 }, +// { name: "changes_markdown", value: null }, +// { +// name: "created_at", +// value: extraInfo.created_at ? new Date(extraInfo.created_at * 1000) : new Date(), +// excludeFromIndexes: true, +// }, +// ], +// }); + +// return { insertedId }; +// } + +// export async function updateBlueprint(blueprint: Blueprint) { +// datastore.save(mapBlueprintObjectToEntity(blueprint)); +// } + +// /* +// * BlueprintPage +// */ +// const mapBlueprintPageEntityToObject = (entity: any): BlueprintPage => ({ +// id: entity[datastore.KEY].id, +// blueprint_id: entity.blueprint_id ? entity.blueprint_id.id : null, +// blueprint_book_id: entity.blueprint_book_id ? entity.blueprint_book_id.id : null, +// title: entity.title, +// description_markdown: entity.description_markdown, +// created_at: entity.created_at && entity.created_at.getTime() / 1000, +// updated_at: entity.updated_at && entity.updated_at.getTime() / 1000, +// factorioprints_id: entity.factorioprints_id || null, +// }); + +// export async function getBlueprintPageById(id: string): Promise { +// const result = await datastore.get(datastore.key([BlueprintPageEntity, datastore.int(id)])); +// return result[0] ? mapBlueprintPageEntityToObject(result[0]) : null; +// } + +// export async function getBlueprintPageByFactorioprintsId( +// id: string +// ): Promise { +// const query = datastore +// .createQuery(BlueprintPageEntity) +// .filter("factorioprints_id", "=", id) +// .limit(1); +// const [result] = await datastore.runQuery(query); +// return result[0] ? mapBlueprintPageEntityToObject(result[0]) : null; +// } + +// async function createBlueprintPage( +// type: "blueprint" | "blueprint_book", +// targetId: string, +// extraInfo: { +// title: string; +// description_markdown: string; +// created_at: number; +// updated_at: number; +// factorioprints_id?: string; +// } +// ) { +// const insertData: any = [ +// { name: "title", value: extraInfo.title }, +// { +// name: "description_markdown", +// value: extraInfo.description_markdown, +// excludeFromIndexes: true, +// }, +// { +// name: "created_at", +// value: extraInfo.created_at ? new Date(extraInfo.created_at * 1000) : new Date(), +// excludeFromIndexes: true, +// }, +// { +// name: "updated_at", +// value: extraInfo.updated_at ? new Date(extraInfo.updated_at * 1000) : new Date(), +// }, +// { name: "factorioprints_id", value: extraInfo.factorioprints_id || null }, +// ]; + +// if (type === "blueprint") { +// insertData.push({ +// name: "blueprint_id", +// value: datastore.key([BlueprintEntity, datastore.int(targetId)]), +// }); +// } else if (type === "blueprint_book") { +// insertData.push({ +// name: "blueprint_book_id", +// value: datastore.key([BlueprintBookEntity, datastore.int(targetId)]), +// }); +// } else { +// throw Error("Invalid type given"); +// } + +// await datastore.insert({ +// key: datastore.key([BlueprintPageEntity]), +// data: insertData, +// }); + +// console.log(`Created Blueprint Page`); +// } + +// /* +// * Other +// */ + +// interface BlueprintDataFromFactorioprints { +// description_markdown: string; +// title: string; +// updated_at: number; +// created_at: number; +// tags: string[]; +// factorioprints_id: string; +// } +// export async function saveBlueprintFromFactorioprints( +// factorioprintData: BlueprintDataFromFactorioprints, +// blueprintString: string +// ) { +// const parsed = await parseBlueprintString(blueprintString); + +// // not needed for inserting, just printing +// // const { blueprints, books } = flattenBlueprintData(parsed.data); +// // console.log(`string has ${books.length} books with ${blueprints.length} blueprints`); + +// const extraInfo = { +// created_at: factorioprintData.created_at, +// updated_at: factorioprintData.updated_at, +// tags: factorioprintData.tags, +// factorioprints_id: factorioprintData.factorioprints_id, +// }; + +// const extraInfoPage = { +// title: factorioprintData.title, +// description_markdown: factorioprintData.description_markdown, +// created_at: factorioprintData.created_at, +// updated_at: factorioprintData.updated_at, +// factorioprints_id: factorioprintData.factorioprints_id, +// }; + +// if (parsed.data.blueprint) { +// console.log("string has one blueprint..."); +// const { insertedId } = await createBlueprint(parsed.data.blueprint, extraInfo).catch( +// (error) => { +// if (error instanceof DatastoreExistsError) { +// console.log(`Blueprint already exists with id ${error.existingId}`); +// return { insertedId: error.existingId }; +// } else throw error; +// } +// ); +// await createBlueprintPage("blueprint", insertedId, extraInfoPage); +// } else if (parsed.data.blueprint_book) { +// console.log("string has a blueprint book..."); +// const { insertedId } = await createBlueprintBook(parsed.data.blueprint_book, extraInfo); +// await createBlueprintPage("blueprint_book", insertedId, extraInfoPage); +// } +// return true; +// } + +// export async function getMostRecentBlueprintPages(page = 1): Promise { +// const perPage = 10; +// const query = datastore +// .createQuery(BlueprintPageEntity) +// .limit(perPage) +// .offset((page - 1) * perPage); +// const [result] = await datastore.runQuery(query); +// return result.map(mapBlueprintPageEntityToObject); +// } + +// export async function getPaginatedBlueprints(page = 1, perPage = 10): Promise { +// const query = datastore +// .createQuery(BlueprintEntity) +// .limit(perPage) +// .offset((page - 1) * perPage); +// const [result] = await datastore.runQuery(query); +// return result.map(mapBlueprintEntityToObject); +// } diff --git a/libs/database/src/lib/gcp-datastore.ts b/libs/database/src/lib/gcp-datastore.ts deleted file mode 100644 index 8e14d19..0000000 --- a/libs/database/src/lib/gcp-datastore.ts +++ /dev/null @@ -1,438 +0,0 @@ -import { Datastore } from "@google-cloud/datastore"; -import { encodeBlueprint, hashString, parseBlueprintString } from "@factorio-sites/node-utils"; -import { - Blueprint, - BlueprintBook, - getBlueprintContentForImageHash, -} from "@factorio-sites/common-utils"; -import { getBlueprintImageRequestTopic } from "./gcp-pubsub"; -import { saveBlueprintString } from "./gcp-storage"; -import { BlueprintBookEntry, BlueprintEntry, BlueprintPageEntry } from "./types"; - -const datastore = new Datastore(); -const BlueprintEntity = "Blueprint"; -const BlueprintBookEntity = "BlueprintBook"; -const BlueprintPageEntity = "BlueprintPage"; -const BlueprintStringEntity = "BlueprintString"; -const blueprintImageRequestTopic = getBlueprintImageRequestTopic(); - -class DatastoreExistsError extends Error { - constructor(public existingId: string, message: string) { - super(message); - this.name = this.constructor.name; - Error.captureStackTrace(this, this.constructor); - } -} - -/* - * BlueprintBook - */ - -const mapBlueprintBookEntityToObject = (entity: any): BlueprintBookEntry => ({ - id: entity[datastore.KEY].id, - blueprint_ids: entity.blueprint_ids.map((key: any) => key.id), - blueprint_book_ids: entity.blueprint_book_ids.map((key: any) => key.id), - child_tree: entity.child_tree ? entity.child_tree : [], - blueprint_hash: entity.blueprint_hash, - label: entity.label, - description: entity.description, - created_at: entity.created_at && entity.created_at.getTime() / 1000, - updated_at: entity.updated_at && entity.updated_at.getTime() / 1000, - is_modded: entity.is_modded || false, - factorioprints_id: entity.factorioprints_id || null, -}); - -export async function getBlueprintBookById(id: string): Promise { - const result = await datastore.get(datastore.key([BlueprintBookEntity, Number(id)])); - return result[0] ? mapBlueprintBookEntityToObject(result[0]) : null; -} - -export async function getBlueprintBookByHash(hash: string): Promise { - const query = datastore - .createQuery(BlueprintBookEntity) - .filter("blueprint_hash", "=", hash) - .limit(1); - const [result] = await datastore.runQuery(query); - return result[0] ? mapBlueprintBookEntityToObject(result[0]) : null; -} - -export async function createBlueprintBook( - blueprintBook: BlueprintBook, - extraInfo: { tags: string[]; created_at: number; updated_at: number; factorioprints_id: string } -): Promise<{ insertedId: string; child_tree: BlueprintBookEntry["child_tree"] }> { - const string = await encodeBlueprint({ blueprint_book: blueprintBook }); - const blueprint_hash = hashString(string); - - const exists = await getBlueprintBookByHash(blueprint_hash); - if (exists) { - const book = await getBlueprintBookById(exists.id); - if (!book) throw Error("this is impossible, just pleasing typescript"); - return { insertedId: exists.id, child_tree: book.child_tree }; - } - - // Write string to google storage - await saveBlueprintString(blueprint_hash, string); - - const blueprint_ids = []; - const blueprint_book_ids = []; - const child_tree: BlueprintBookEntry["child_tree"] = []; - - // Create the book's child objects - for (let i = 0; i < blueprintBook.blueprints.length; i++) { - const blueprint = blueprintBook.blueprints[i]; - if (blueprint.blueprint) { - const result = await createBlueprint(blueprint.blueprint, extraInfo); - child_tree.push({ - type: "blueprint", - id: result.insertedId, - name: blueprint.blueprint.label, - }); - blueprint_ids.push(result.insertedId); - } else if (blueprint.blueprint_book) { - const result = await createBlueprintBook(blueprint.blueprint_book, extraInfo); - child_tree.push({ - type: "blueprint_book", - id: result.insertedId, - name: blueprint.blueprint_book.label, - children: result.child_tree, - }); - blueprint_book_ids.push(result.insertedId); - } - } - - // Write blueprint details to datastore - const [result] = await datastore.insert({ - key: datastore.key([BlueprintBookEntity]), - data: [ - { - name: "blueprint_ids", - value: blueprint_ids.map((id) => datastore.key([BlueprintEntity, datastore.int(id)])), - }, - { - name: "blueprint_book_ids", - value: blueprint_book_ids.map((id) => - datastore.key([BlueprintBookEntity, datastore.int(id)]) - ), - }, - { name: "child_tree", value: child_tree, excludeFromIndexes: true }, - { name: "label", value: blueprintBook.label }, - { - name: "description", - value: blueprintBook.description || null, - excludeFromIndexes: true, - }, - { name: "blueprint_hash", value: blueprint_hash }, - { - name: "created_at", - value: extraInfo.created_at ? new Date(extraInfo.created_at * 1000) : null, - excludeFromIndexes: true, - }, - { - name: "updated_at", - value: extraInfo.updated_at ? new Date(extraInfo.updated_at * 1000) : null, - excludeFromIndexes: true, - }, - { name: "factorioprints_id", value: extraInfo.factorioprints_id || null }, - ], - }); - - const insertedId = String(result.mutationResults?.[0]?.key?.path?.[0]?.id) as string; - if (!insertedId) throw Error("Something went wrong inserting entity"); - - console.log(`Created Blueprint book ${insertedId}`); - - return { insertedId, child_tree }; -} - -/* - * Blueprint - */ - -const mapBlueprintEntityToObject = (entity: any): BlueprintEntry => ({ - id: entity[datastore.KEY].id, - blueprint_hash: entity.blueprint_hash, - image_hash: entity.image_hash, - label: entity.label, - description: entity.description, - tags: entity.tags, - created_at: entity.created_at && entity.created_at.getTime() / 1000, - updated_at: entity.updated_at && entity.updated_at.getTime() / 1000, - factorioprints_id: entity.factorioprints_id || null, - game_version: entity.game_version, -}); - -const mapBlueprintObjectToEntity = (object: Omit & { id?: string }): any => ({ - key: datastore.key(object.id ? [BlueprintEntity, datastore.int(object.id)] : [BlueprintEntity]), - data: [ - { name: "label", value: object.label }, - { - name: "description", - value: object.description || null, - excludeFromIndexes: true, - }, - { name: "blueprint_hash", value: object.blueprint_hash }, - { name: "image_hash", value: object.image_hash }, - { name: "tags", value: object.tags || [] }, - { - name: "created_at", - value: object.created_at ? new Date(object.created_at * 1000) : new Date(), - excludeFromIndexes: true, - }, - { - name: "updated_at", - value: object.updated_at ? new Date(object.updated_at * 1000) : new Date(), - excludeFromIndexes: true, - }, - { name: "game_version", value: object.game_version, excludeFromIndexes: true }, - { name: "factorioprints_id", value: object.factorioprints_id || null }, - ], -}); - -export async function getBlueprintById(id: string): Promise { - const result = await datastore.get(datastore.key([BlueprintEntity, datastore.int(id)])); - return result[0] ? mapBlueprintEntityToObject(result[0]) : null; -} - -export async function getBlueprintByHash(hash: string): Promise { - const query = datastore.createQuery(BlueprintEntity).filter("blueprint_hash", "=", hash).limit(1); - const [result] = await datastore.runQuery(query); - return result[0] ? mapBlueprintEntityToObject(result[0]) : null; -} - -export async function getBlueprintByImageHash(hash: string): Promise { - const query = datastore.createQuery(BlueprintEntity).filter("image_hash", "=", hash).limit(1); - const [result] = await datastore.runQuery(query); - return result[0] ? mapBlueprintEntityToObject(result[0]) : null; -} - -export async function createBlueprint( - blueprint: Blueprint, - extraInfo: { tags: string[]; created_at: number; updated_at: number; factorioprints_id: string } -) { - const string = await encodeBlueprint({ blueprint }); - const blueprint_hash = hashString(string); - const image_hash = hashString(getBlueprintContentForImageHash(blueprint)); - - const exists = await getBlueprintByHash(blueprint_hash); - if (exists) { - return { insertedId: exists.id }; - } - - // Write string to google storage - await saveBlueprintString(blueprint_hash, string); - - // Write blueprint details to datastore - const [result] = await datastore.insert({ - key: datastore.key([BlueprintEntity]), - data: [ - { name: "label", value: blueprint.label }, - { - name: "description", - value: blueprint.description || null, - excludeFromIndexes: true, - }, - { name: "blueprint_hash", value: blueprint_hash }, - { name: "image_hash", value: image_hash }, - { name: "tags", value: extraInfo.tags ? extraInfo.tags : [] }, - { - name: "created_at", - value: extraInfo.created_at ? new Date(extraInfo.created_at * 1000) : new Date(), - excludeFromIndexes: true, - }, - { - name: "updated_at", - value: extraInfo.updated_at ? new Date(extraInfo.updated_at * 1000) : new Date(), - excludeFromIndexes: true, - }, - { name: "game_version", value: blueprint.version, excludeFromIndexes: true }, - { name: "factorioprints_id", value: extraInfo.factorioprints_id || null }, - ], - }); - - const insertedId = String(result.mutationResults?.[0]?.key?.path?.[0]?.id); - if (!insertedId) throw Error("Something went wrong inserting entity"); - - console.log(`Created Blueprint ${insertedId}`); - - blueprintImageRequestTopic.publishJSON({ - blueprintId: insertedId, - }); - - await datastore.insert({ - key: datastore.key([BlueprintEntity, datastore.int(insertedId), BlueprintStringEntity]), - data: [ - { name: "blueprint_hash", value: blueprint_hash }, - { name: "image_hash", value: image_hash }, - { name: "version", value: 1 }, - { name: "changes_markdown", value: null }, - { - name: "created_at", - value: extraInfo.created_at ? new Date(extraInfo.created_at * 1000) : new Date(), - excludeFromIndexes: true, - }, - ], - }); - - return { insertedId }; -} - -export async function updateBlueprint(blueprint: BlueprintEntry) { - datastore.save(mapBlueprintObjectToEntity(blueprint)); -} - -/* - * BlueprintPage - */ -const mapBlueprintPageEntityToObject = (entity: any): BlueprintPageEntry => ({ - id: entity[datastore.KEY].id, - blueprint_id: entity.blueprint_id ? entity.blueprint_id.id : null, - blueprint_book_id: entity.blueprint_book_id ? entity.blueprint_book_id.id : null, - title: entity.title, - description_markdown: entity.description_markdown, - created_at: entity.created_at && entity.created_at.getTime() / 1000, - updated_at: entity.updated_at && entity.updated_at.getTime() / 1000, - factorioprints_id: entity.factorioprints_id || null, -}); - -export async function getBlueprintPageById(id: string): Promise { - const result = await datastore.get(datastore.key([BlueprintPageEntity, datastore.int(id)])); - return result[0] ? mapBlueprintPageEntityToObject(result[0]) : null; -} - -export async function getBlueprintPageByFactorioprintsId( - id: string -): Promise { - const query = datastore - .createQuery(BlueprintPageEntity) - .filter("factorioprints_id", "=", id) - .limit(1); - const [result] = await datastore.runQuery(query); - return result[0] ? mapBlueprintPageEntityToObject(result[0]) : null; -} - -async function createBlueprintPage( - type: "blueprint" | "blueprint_book", - targetId: string, - extraInfo: { - title: string; - description_markdown: string; - created_at: number; - updated_at: number; - factorioprints_id?: string; - } -) { - const insertData: any = [ - { name: "title", value: extraInfo.title }, - { - name: "description_markdown", - value: extraInfo.description_markdown, - excludeFromIndexes: true, - }, - { - name: "created_at", - value: extraInfo.created_at ? new Date(extraInfo.created_at * 1000) : new Date(), - excludeFromIndexes: true, - }, - { - name: "updated_at", - value: extraInfo.updated_at ? new Date(extraInfo.updated_at * 1000) : new Date(), - }, - { name: "factorioprints_id", value: extraInfo.factorioprints_id || null }, - ]; - - if (type === "blueprint") { - insertData.push({ - name: "blueprint_id", - value: datastore.key([BlueprintEntity, datastore.int(targetId)]), - }); - } else if (type === "blueprint_book") { - insertData.push({ - name: "blueprint_book_id", - value: datastore.key([BlueprintBookEntity, datastore.int(targetId)]), - }); - } else { - throw Error("Invalid type given"); - } - - await datastore.insert({ - key: datastore.key([BlueprintPageEntity]), - data: insertData, - }); - - console.log(`Created Blueprint Page`); -} - -/* - * Other - */ - -interface BlueprintDataFromFactorioprints { - description_markdown: string; - title: string; - updated_at: number; - created_at: number; - tags: string[]; - factorioprints_id: string; -} -export async function saveBlueprintFromFactorioprints( - factorioprintData: BlueprintDataFromFactorioprints, - blueprintString: string -) { - const parsed = await parseBlueprintString(blueprintString); - - // not needed for inserting, just printing - // const { blueprints, books } = flattenBlueprintData(parsed.data); - // console.log(`string has ${books.length} books with ${blueprints.length} blueprints`); - - const extraInfo = { - created_at: factorioprintData.created_at, - updated_at: factorioprintData.updated_at, - tags: factorioprintData.tags, - factorioprints_id: factorioprintData.factorioprints_id, - }; - - const extraInfoPage = { - title: factorioprintData.title, - description_markdown: factorioprintData.description_markdown, - created_at: factorioprintData.created_at, - updated_at: factorioprintData.updated_at, - factorioprints_id: factorioprintData.factorioprints_id, - }; - - if (parsed.data.blueprint) { - console.log("string has one blueprint..."); - const { insertedId } = await createBlueprint(parsed.data.blueprint, extraInfo).catch( - (error) => { - if (error instanceof DatastoreExistsError) { - console.log(`Blueprint already exists with id ${error.existingId}`); - return { insertedId: error.existingId }; - } else throw error; - } - ); - await createBlueprintPage("blueprint", insertedId, extraInfoPage); - } else if (parsed.data.blueprint_book) { - console.log("string has a blueprint book..."); - const { insertedId } = await createBlueprintBook(parsed.data.blueprint_book, extraInfo); - await createBlueprintPage("blueprint_book", insertedId, extraInfoPage); - } - return true; -} - -export async function getMostRecentBlueprintPages(page = 1): Promise { - const perPage = 10; - const query = datastore - .createQuery(BlueprintPageEntity) - .limit(perPage) - .offset((page - 1) * perPage); - const [result] = await datastore.runQuery(query); - return result.map(mapBlueprintPageEntityToObject); -} - -export async function getPaginatedBlueprints(page = 1, perPage = 10): Promise { - const query = datastore - .createQuery(BlueprintEntity) - .limit(perPage) - .offset((page - 1) * perPage); - const [result] = await datastore.runQuery(query); - return result.map(mapBlueprintEntityToObject); -} diff --git a/libs/database/src/lib/postgres/connection.ts b/libs/database/src/lib/postgres/connection.ts deleted file mode 100644 index e4a9faf..0000000 --- a/libs/database/src/lib/postgres/connection.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { createConnection } from "typeorm"; -import { Blueprint } from "./entities"; - -export async function init() { - await createConnection({ - type: "postgres", - host: "127.0.0.1", - port: 5432, - username: "postgres", - password: "local", - database: "factorio-blueprints", - entities: [Blueprint], - }); -} - -init(); diff --git a/libs/database/src/lib/postgres/database.ts b/libs/database/src/lib/postgres/database.ts new file mode 100644 index 0000000..84bc22e --- /dev/null +++ b/libs/database/src/lib/postgres/database.ts @@ -0,0 +1,61 @@ +import { sequelize } from "./sequelize"; +import { BlueprintModel } from "./models/Blueprint"; +import { BlueprintStringModel } from "./models/BlueprintString"; +import { BlueprintBookModel } from "./models/BlueprintBook"; +import { BlueprintPageModel } from "./models/BlueprintPage"; + +export const init = async () => { + BlueprintModel.hasOne(BlueprintStringModel, { foreignKey: "blueprint_id" }); + BlueprintModel.hasMany(BlueprintPageModel, { foreignKey: "blueprint_id" }); + + BlueprintStringModel.belongsTo(BlueprintModel, { foreignKey: "blueprint_id" }); + + BlueprintPageModel.belongsTo(BlueprintModel, { foreignKey: "blueprint_id" }); + BlueprintPageModel.belongsTo(BlueprintBookModel, { foreignKey: "blueprint_book_id" }); + + BlueprintBookModel.hasMany(BlueprintPageModel, { foreignKey: "blueprint_book_id" }); + BlueprintBookModel.belongsToMany(BlueprintBookModel, { + through: "blueprint_book_books", + as: "blueprint_books", + foreignKey: "blueprint_book_1_id", + otherKey: "blueprint_book_2_id", + timestamps: false, + }); + BlueprintBookModel.belongsToMany(BlueprintModel, { + through: "blueprint_book_blueprints", + as: "blueprints", + foreignKey: "blueprint_book_id", + otherKey: "blueprint_id", + timestamps: false, + }); + + if (process.env.SYNCHRONIZE_DB) { + console.log(`[SYNCHRONIZE_DB] syncing database ${process.env.POSTGRES_DB}`); + await BlueprintModel.sync({ force: true }); + await BlueprintStringModel.sync({ force: true }); + await BlueprintBookModel.sync({ force: true }); + await BlueprintPageModel.sync({ force: true }); + await sequelize.models["blueprint_book_books"].sync({ force: true }); + await sequelize.models["blueprint_book_blueprints"].sync({ force: true }); + + // SEED + { + const bp = await BlueprintModel.create({ + blueprint_hash: "blueprint_hash", + label: "label", + image_hash: "image-hash", + image_version: 1, + tags: ["tag1"], + }); + await BlueprintStringModel.create({ + blueprint_hash: "blueprint_hash", + blueprint_id: bp.id, + changes_markdown: "markdown", + image_hash: "image-hash", + version: 1, + }); + } + } + + return sequelize; +}; diff --git a/libs/database/src/lib/postgres/entities.ts b/libs/database/src/lib/postgres/entities.ts deleted file mode 100644 index 1f536da..0000000 --- a/libs/database/src/lib/postgres/entities.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Entity, PrimaryGeneratedColumn, Column } from "typeorm"; - -@Entity() -export class Blueprint { - @PrimaryGeneratedColumn("uuid") - id!: number; - - @Column("text") - label?: string; - - @Column("text", { nullable: true }) - description?: string; - - @Column("text") - game_version?: string; - - @Column("text", { unique: true }) - blueprint_hash?: string; - - @Column("varchar", { length: 40 }) - image_hash?: string; - - @Column("text") - image_version?: string; - - @Column("time without time zone") - created_at?: number; - - @Column("time without time zone") - updated_at?: number; - - @Column("text", { array: true }) - tags?: string; - - @Column("text", { nullable: true }) - factorioprints_id?: number; -} diff --git a/libs/database/src/lib/postgres/models/Blueprint.ts b/libs/database/src/lib/postgres/models/Blueprint.ts new file mode 100644 index 0000000..63f1985 --- /dev/null +++ b/libs/database/src/lib/postgres/models/Blueprint.ts @@ -0,0 +1,67 @@ +import { DataTypes, UUIDV4, Optional, Model } from "sequelize"; +import { sequelize } from "../sequelize"; + +interface BlueprintAttributes { + id: string; + label?: string; + description?: string; + game_version?: string; + blueprint_hash: string; + image_hash: string; + image_version: number; + tags: string[]; + factorioprints_id?: string; + created_at: Date; + updated_at: Date; +} + +export interface BlueprintInstance + extends Model< + Omit, + Optional + >, + BlueprintAttributes {} + +export const BlueprintModel = sequelize.define( + "blueprint", + { + id: { + primaryKey: true, + type: DataTypes.UUID, + defaultValue: UUIDV4, + }, + label: { + type: DataTypes.STRING, + }, + description: { + type: DataTypes.TEXT, + }, + game_version: { + type: DataTypes.STRING, + }, + blueprint_hash: { + type: DataTypes.STRING(40), + unique: true, + allowNull: false, + }, + image_hash: { + type: DataTypes.STRING(40), + allowNull: false, + }, + image_version: { + type: DataTypes.INTEGER, + allowNull: false, + defaultValue: 1, + }, + tags: { + type: DataTypes.ARRAY(DataTypes.STRING), + set(value: string[]) { + this.setDataValue("tags", Array.isArray(value) ? value : []); + }, + }, + factorioprints_id: { + type: DataTypes.STRING, + }, + }, + {} +); diff --git a/libs/database/src/lib/postgres/models/BlueprintBook.ts b/libs/database/src/lib/postgres/models/BlueprintBook.ts new file mode 100644 index 0000000..c1f84ac --- /dev/null +++ b/libs/database/src/lib/postgres/models/BlueprintBook.ts @@ -0,0 +1,55 @@ +import { DataTypes, UUIDV4, Optional, Model } from "sequelize"; +import { ChildTree } from "../../types"; +import { sequelize } from "../sequelize"; + +interface BlueprintBookAttributes { + id: string; + label: string; + description?: string; + child_tree: ChildTree; + blueprint_hash: string; + is_modded: boolean; + factorioprints_id?: string; + created_at: Date; + updated_at: Date; +} + +export interface BlueprintBookInstance + extends Model< + Omit, + Optional + >, + BlueprintBookAttributes {} + +export const BlueprintBookModel = sequelize.define( + "blueprint_book", + { + id: { + primaryKey: true, + type: DataTypes.UUID, + defaultValue: UUIDV4, + }, + label: { + type: DataTypes.STRING, + }, + description: { + type: DataTypes.TEXT, + }, + child_tree: { + type: DataTypes.JSON, + allowNull: false, + }, + blueprint_hash: { + type: DataTypes.STRING(40), + allowNull: false, + }, + is_modded: { + type: DataTypes.BOOLEAN, + allowNull: false, + }, + factorioprints_id: { + type: DataTypes.STRING, + }, + }, + {} +); diff --git a/libs/database/src/lib/postgres/models/BlueprintPage.ts b/libs/database/src/lib/postgres/models/BlueprintPage.ts new file mode 100644 index 0000000..ee9cbdb --- /dev/null +++ b/libs/database/src/lib/postgres/models/BlueprintPage.ts @@ -0,0 +1,48 @@ +import { DataTypes, UUIDV4, Optional, Model } from "sequelize"; +import { sequelize } from "../sequelize"; + +interface BlueprintPageAttributes { + id: string; + blueprint_id?: string; + blueprint_book_id?: string; + title: string; + description_markdown: string; + factorioprints_id?: string; + created_at: Date; + updated_at: Date; +} + +export interface BlueprintPageInstance + extends Model< + Omit, + Optional + >, + BlueprintPageAttributes {} + +export const BlueprintPageModel = sequelize.define( + "blueprint_page", + { + id: { + primaryKey: true, + type: DataTypes.UUID, + defaultValue: UUIDV4, + }, + blueprint_id: { + type: DataTypes.UUID, + }, + blueprint_book_id: { + type: DataTypes.UUID, + }, + title: { + type: DataTypes.STRING, + allowNull: false, + }, + description_markdown: { + type: DataTypes.TEXT, + }, + factorioprints_id: { + type: DataTypes.STRING, + }, + }, + {} +); diff --git a/libs/database/src/lib/postgres/models/BlueprintString.ts b/libs/database/src/lib/postgres/models/BlueprintString.ts new file mode 100644 index 0000000..7a6efd8 --- /dev/null +++ b/libs/database/src/lib/postgres/models/BlueprintString.ts @@ -0,0 +1,52 @@ +import { DataTypes, UUIDV4, Optional, Model } from "sequelize"; +import { sequelize } from "../sequelize"; + +interface BlueprintStringAttributes { + id: string; + blueprint_id: string; + blueprint_hash: string; + image_hash: string; + version: number; + changes_markdown: string | null; + created_at: Date; + updated_at: Date; +} + +interface BlueprintStringInstance + extends Model< + Omit, + Optional + >, + BlueprintStringAttributes {} + +export const BlueprintStringModel = sequelize.define( + "blueprint_string", + { + id: { + primaryKey: true, + type: DataTypes.UUID, + defaultValue: UUIDV4, + }, + blueprint_id: { + type: DataTypes.UUID, + allowNull: false, + }, + blueprint_hash: { + type: DataTypes.STRING(40), + allowNull: false, + unique: true, + }, + image_hash: { + type: DataTypes.STRING(40), + allowNull: false, + }, + version: { + type: DataTypes.INTEGER, + allowNull: false, + }, + changes_markdown: { + type: DataTypes.STRING(40), + }, + }, + {} +); diff --git a/libs/database/src/lib/postgres/models/index.ts b/libs/database/src/lib/postgres/models/index.ts new file mode 100644 index 0000000..ddb52fe --- /dev/null +++ b/libs/database/src/lib/postgres/models/index.ts @@ -0,0 +1,4 @@ +export * from "./Blueprint"; +export * from "./BlueprintString"; +export * from "./BlueprintBook"; +export * from "./BlueprintPage"; diff --git a/libs/database/src/lib/postgres/sequelize.ts b/libs/database/src/lib/postgres/sequelize.ts new file mode 100644 index 0000000..3073def --- /dev/null +++ b/libs/database/src/lib/postgres/sequelize.ts @@ -0,0 +1,16 @@ +import { Sequelize } from "sequelize"; + +export const sequelize = new Sequelize({ + dialect: "postgres", + host: process.env.POSTGRES_HOST, + port: 5432, + database: process.env.POSTGRES_DB, + username: process.env.POSTGRES_USER, + password: process.env.POSTGRES_PASSWORD, + define: { + underscored: true, + freezeTableName: true, + updatedAt: "updated_at", + createdAt: "created_at", + }, +}); diff --git a/libs/database/src/lib/types.ts b/libs/database/src/lib/types.ts index 8c5db18..dfb8989 100644 --- a/libs/database/src/lib/types.ts +++ b/libs/database/src/lib/types.ts @@ -3,19 +3,21 @@ interface BlueprintChild { id: string; name: string; } + interface BlueprintBookChild { type: "blueprint_book"; id: string; name: string; children: ChildTree; } -type ChildTree = Array; -export interface BlueprintEntry { +export type ChildTree = Array; + +export interface Blueprint { id: string; label: string; // from source description: string | null; // from source - game_version: number; // from source + game_version: string | null; // from source blueprint_hash: string; image_hash: string; created_at: number; @@ -26,14 +28,14 @@ export interface BlueprintEntry { // BlueprintEntry->BlueprintPageEntry n:m } -export interface BlueprintBookEntry { +export interface BlueprintBook { id: string; label: string; description?: string; /** strings as keys of BlueprintEntry */ - blueprint_ids: string[]; + // blueprint_ids: string[]; /** strings as keys of BlueprintBookEntry (currently unsupported) */ - blueprint_book_ids: string[]; + // blueprint_book_ids: string[]; child_tree: ChildTree; blueprint_hash: string; created_at: number; @@ -44,20 +46,24 @@ export interface BlueprintBookEntry { // BlueprintBook:BlueprintEntry 1:m } -export interface BlueprintPageEntry { +/** + * Blueprint page data object for app use + * must be JSON serializable + */ +export interface BlueprintPage { id: string; - blueprint_id?: string; - blueprint_book_id?: string; + blueprint_id: string | null; + blueprint_book_id: string | null; title: string; description_markdown: string; created_at: number; updated_at: number; - factorioprints_id?: string; + factorioprints_id: string | null; // BlueprintPageEntry->BlueprintEntry 1:m // BlueprintPageEntry->BlueprintBook 1:m } -export interface BlueprintStringEntry { +export interface BlueprintString { blueprint_id: string; blueprint_hash: string; image_hash: string; diff --git a/libs/node-utils/src/lib/node-utils.ts b/libs/node-utils/src/lib/node-utils.ts index 9dd47a7..9afd045 100644 --- a/libs/node-utils/src/lib/node-utils.ts +++ b/libs/node-utils/src/lib/node-utils.ts @@ -1,11 +1,11 @@ import * as crypto from "crypto"; import * as pako from "pako"; // import * as phin from "phin"; -import { BlueprintData } from "@factorio-sites/common-utils"; +import { BlueprintStringData } from "@factorio-sites/common-utils"; export const parseBlueprintString = async ( string: string -): Promise<{ hash: string; data: BlueprintData; string: string }> => { +): Promise<{ hash: string; data: BlueprintStringData; string: string }> => { // if (string.startsWith("http:") || string.startsWith("https:")) { // const result = await phin(string); // string = result.body.toString(); @@ -24,7 +24,7 @@ export const parseBlueprintString = async ( }; }; -export const encodeBlueprint = async (data: BlueprintData): Promise => { +export const encodeBlueprint = async (data: BlueprintStringData): Promise => { const json = JSON.stringify(data); const encoded = new TextEncoder().encode(json); const compressed = pako.deflate(encoded); diff --git a/libs/web-utils/src/lib/web-utils.ts b/libs/web-utils/src/lib/web-utils.ts index 3d5e982..34d78d1 100644 --- a/libs/web-utils/src/lib/web-utils.ts +++ b/libs/web-utils/src/lib/web-utils.ts @@ -1,7 +1,7 @@ import * as pako from "pako"; -import { BlueprintData } from "@factorio-sites/common-utils"; +import { BlueprintStringData } from "@factorio-sites/common-utils"; -export function parseBlueprintStringClient(source: string): { data: BlueprintData } { +export function parseBlueprintStringClient(source: string): { data: BlueprintStringData } { const encoded = atob(source.substring(1)); const decoded = pako.inflate(encoded); const string = new TextDecoder("utf-8").decode(decoded); @@ -9,7 +9,7 @@ export function parseBlueprintStringClient(source: string): { data: BlueprintDat return { data: jsonObject }; } -export function encodeBlueprintStringClient(data: BlueprintData): string { +export function encodeBlueprintStringClient(data: BlueprintStringData): string { const json = JSON.stringify(data); const encoded = new TextEncoder().encode(json); const compressed = pako.deflate(encoded, { to: "string" }); diff --git a/package.json b/package.json index 88bdfc5..7ecaa43 100644 --- a/package.json +++ b/package.json @@ -27,74 +27,75 @@ "help": "nx help" }, "dependencies": { - "@chakra-ui/react": "1.0.4", - "@emotion/react": "11.1.3", + "@chakra-ui/react": "1.1.2", + "@emotion/react": "11.1.4", "@emotion/server": "11.0.0", "@emotion/styled": "11.0.0", - "@google-cloud/datastore": "6.2.0", - "@google-cloud/pubsub": "2.6.0", - "@google-cloud/storage": "5.3.0", + "@fbe/editor": "file:.yalc/@fbe/editor", + "@google-cloud/datastore": "6.3.1", + "@google-cloud/pubsub": "2.7.0", + "@google-cloud/storage": "5.7.0", "bbcode-to-react": "0.2.9", "document-register-element": "1.14.10", - "framer-motion": "3.1.1", - "next": "10.0.3", + "framer-motion": "3.1.4", + "next": "10.0.5", "nprogress": "0.2.0", "pako": "1.0.11", - "pg": "8.4.1", - "phin": "3.5.0", - "puppeteer": "5.3.1", - "react": "16.13.1", - "react-dom": "16.13.1", + "pg": "8.5.1", + "phin": "3.5.1", + "puppeteer": "5.5.0", + "react": "17.0.1", + "react-dom": "17.0.1", "react-icons": "4.1.0", "react-map-interaction": "2.0.0", - "react-markdown": "5.0.1", - "sharp": "0.26.2", - "typeorm": "0.2.28", - "ws": "7.3.1" + "react-markdown": "5.0.3", + "sequelize": "6.3.5", + "sharp": "0.27.0", + "ws": "7.4.2" }, "devDependencies": { - "@babel/core": "7.9.6", - "@babel/preset-env": "7.9.6", - "@babel/preset-react": "7.9.4", - "@babel/preset-typescript": "7.9.0", - "@emotion/babel-preset-css-prop": "11.0.0", - "@nrwl/cli": "10.3.1", - "@nrwl/cypress": "11.0.16", - "@nrwl/eslint-plugin-nx": "11.0.16", - "@nrwl/jest": "11.0.16", - "@nrwl/next": "11.0.16", - "@nrwl/node": "11.0.16", - "@nrwl/react": "11.0.16", - "@nrwl/web": "11.0.16", - "@nrwl/workspace": "11.0.16", - "@testing-library/react": "10.4.1", + "@babel/core": "7.12.10", + "@babel/preset-env": "7.12.11", + "@babel/preset-react": "7.12.10", + "@babel/preset-typescript": "7.12.7", + "@nrwl/cli": "11.0.20", + "@nrwl/cypress": "11.0.20", + "@nrwl/eslint-plugin-nx": "11.0.20", + "@nrwl/jest": "11.0.20", + "@nrwl/next": "11.0.20", + "@nrwl/node": "11.0.20", + "@nrwl/react": "11.0.20", + "@nrwl/web": "11.0.20", + "@nrwl/workspace": "11.0.20", + "@testing-library/react": "11.2.2", "@types/bbcode-to-react": "0.2.0", - "@types/jest": "26.0.8", + "@types/jest": "26.0.20", "@types/node": "14.14.14", "@types/nprogress": "0.2.0", "@types/pako": "1.0.1", - "@types/puppeteer": "3.0.2", - "@types/react": "16.9.53", - "@types/react-dom": "16.9.8", - "@types/sharp": "0.26.0", - "@types/ws": "7.2.7", - "@typescript-eslint/eslint-plugin": "4.3.0", - "@typescript-eslint/parser": "4.3.0", - "babel-jest": "26.2.2", - "cypress": "4.1.0", - "dotenv": "6.2.0", - "eslint": "7.10.0", - "eslint-config-prettier": "6.0.0", - "eslint-plugin-cypress": "2.10.3", - "eslint-plugin-import": "2.21.2", - "eslint-plugin-jsx-a11y": "6.3.1", - "eslint-plugin-react": "7.20.0", - "eslint-plugin-react-hooks": "4.0.4", - "jest": "26.2.2", - "prettier": "2.1.2", - "ts-jest": "26.4.0", + "@types/puppeteer": "5.4.2", + "@types/react": "17.0.0", + "@types/react-dom": "17.0.0", + "@types/sharp": "0.27.1", + "@types/ws": "7.4.0", + "@typescript-eslint/eslint-plugin": "4.12.0", + "@typescript-eslint/parser": "4.12.0", + "babel-jest": "26.6.3", + "cypress": "6.2.1", + "dotenv": "8.2.0", + "eslint": "7.17.0", + "eslint-config-prettier": "7.1.0", + "eslint-plugin-cypress": "2.11.2", + "eslint-plugin-import": "2.22.1", + "eslint-plugin-jsx-a11y": "6.4.1", + "eslint-plugin-react": "7.22.0", + "eslint-plugin-react-hooks": "4.2.0", + "jest": "26.6.3", + "prettier": "2.2.1", + "ts-jest": "26.4.4", "ts-node": "9.1.1", "tslint": "6.1.3", - "typescript": "4.1.3" + "typescript": "4.1.3", + "wasm-loader": "1.3.0" } } diff --git a/yalc.lock b/yalc.lock new file mode 100644 index 0000000..55506a5 --- /dev/null +++ b/yalc.lock @@ -0,0 +1,9 @@ +{ + "version": "v1", + "packages": { + "@fbe/editor": { + "signature": "fcd9eadabd31e2c2000a5ea3e4b000f8", + "file": true + } + } +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 77bd7fe..ef15ec9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,64 +2,56 @@ # yarn lockfile v1 -"@ampproject/toolbox-core@^2.6.0": - version "2.6.1" - resolved "https://registry.yarnpkg.com/@ampproject/toolbox-core/-/toolbox-core-2.6.1.tgz#af97ec253bf39e5fe5121b8ec28f1f35d1878446" - integrity sha512-hTsd9J2yy3JPMClG8BuUhUfMDtd3oDhCuRe/SyZJYQfNMN8hQHt7LNXtdOzZr0Kw7nTepHmn7GODS68fZN4OQQ== +"@ampproject/toolbox-core@2.7.4", "@ampproject/toolbox-core@^2.7.1-alpha.0": + version "2.7.4" + resolved "https://registry.yarnpkg.com/@ampproject/toolbox-core/-/toolbox-core-2.7.4.tgz#8355136f16301458ce942acf6c55952c9a415627" + integrity sha512-qpBhcS4urB7IKc+jx2kksN7BuvvwCo7Y3IstapWo+EW+COY5EYAUwb2pil37v3TsaqHKgX//NloFP1SKzGZAnw== dependencies: cross-fetch "3.0.6" lru-cache "6.0.0" -"@ampproject/toolbox-core@^2.7.2": - version "2.7.2" - resolved "https://registry.yarnpkg.com/@ampproject/toolbox-core/-/toolbox-core-2.7.2.tgz#43acd7c1d0331be1db611d781d7dc2184c0aadb5" - integrity sha512-deQiuOghOShoEBoTIDNsSER5gMC6qZfVqYKvlQYcQ+OxKR7J3FtA5XDz98UQsuWx1EB2x2hivrpC6G9BQaXMHw== +"@ampproject/toolbox-optimizer@2.7.1-alpha.0": + version "2.7.1-alpha.0" + resolved "https://registry.yarnpkg.com/@ampproject/toolbox-optimizer/-/toolbox-optimizer-2.7.1-alpha.0.tgz#1571dcd02608223ff68f6b7223102a123e381197" + integrity sha512-WGPZKVQvHgNYJk1XVJCCmY+NVGTGJtvn0OALDyiegN4FJWOcilQUhCIcjMkZN59u1flz/u+sEKccM5qsROqVyg== dependencies: - lru-cache "6.0.0" - node-fetch "2.6.1" - -"@ampproject/toolbox-optimizer@2.7.0-alpha.1": - version "2.7.0-alpha.1" - resolved "https://registry.yarnpkg.com/@ampproject/toolbox-optimizer/-/toolbox-optimizer-2.7.0-alpha.1.tgz#ab4c386645f991e5da5a9d2967ed2bb734a9f6c4" - integrity sha512-2wTvOyM6GP6FrYQzxSQCg43STo1jMRGeDKa6YUkYXYH9fm9Wbt2wTRx+ajjb48JQ6WwUnGwga1MhQhVFzRQ+wQ== - dependencies: - "@ampproject/toolbox-core" "^2.6.0" - "@ampproject/toolbox-runtime-version" "^2.7.0-alpha.1" + "@ampproject/toolbox-core" "^2.7.1-alpha.0" + "@ampproject/toolbox-runtime-version" "^2.7.1-alpha.0" "@ampproject/toolbox-script-csp" "^2.5.4" - "@ampproject/toolbox-validator-rules" "^2.5.4" + "@ampproject/toolbox-validator-rules" "^2.7.1-alpha.0" abort-controller "3.0.0" - cross-fetch "3.0.5" - cssnano-simple "1.2.0" - dom-serializer "1.0.1" - domhandler "3.0.0" - domutils "2.1.0" - htmlparser2 "4.1.0" + cross-fetch "3.0.6" + cssnano-simple "1.2.1" + dom-serializer "1.1.0" + domhandler "3.3.0" + domutils "2.4.2" + htmlparser2 "5.0.1" https-proxy-agent "5.0.0" lru-cache "6.0.0" - node-fetch "2.6.0" + node-fetch "2.6.1" normalize-html-whitespace "1.0.0" postcss "7.0.32" postcss-safe-parser "4.0.2" - terser "5.1.0" + terser "5.5.1" -"@ampproject/toolbox-runtime-version@^2.7.0-alpha.1": - version "2.7.2" - resolved "https://registry.yarnpkg.com/@ampproject/toolbox-runtime-version/-/toolbox-runtime-version-2.7.2.tgz#32d0867c4a0625b7fe0f2114df6669d9d2e63863" - integrity sha512-BKDl29i/cvC0xtrUHnF2YR25gMfyVnXCaV1ZaMDNcPNRJGbBSNQtW6eZt9+rPoV/hKpFxyJia30ECw42FVhh9g== +"@ampproject/toolbox-runtime-version@^2.7.1-alpha.0": + version "2.7.4" + resolved "https://registry.yarnpkg.com/@ampproject/toolbox-runtime-version/-/toolbox-runtime-version-2.7.4.tgz#f49da0dab122101ef75ed3caed3a0142487b73e1" + integrity sha512-SAdOUOERp42thVNWaBJlnFvFVvnacMVnz5z9LyUZHSnoL1EqrAW5Sz5jv+Ly+gkA8NYsEaUxAdSCBAzE9Uzb4Q== dependencies: - "@ampproject/toolbox-core" "^2.7.2" + "@ampproject/toolbox-core" "2.7.4" "@ampproject/toolbox-script-csp@^2.5.4": version "2.5.4" resolved "https://registry.yarnpkg.com/@ampproject/toolbox-script-csp/-/toolbox-script-csp-2.5.4.tgz#d8b7b91a678ae8f263cb36d9b74e441b7d633aad" integrity sha512-+knTYetI5nWllRZ9wFcj7mYxelkiiFVRAAW/hl0ad8EnKHMH82tRlk40CapEnUHhp6Er5sCYkumQ8dngs3Q4zQ== -"@ampproject/toolbox-validator-rules@^2.5.4": - version "2.5.4" - resolved "https://registry.yarnpkg.com/@ampproject/toolbox-validator-rules/-/toolbox-validator-rules-2.5.4.tgz#7dee3a3edceefea459d060571db8cc6e7bbf0dd6" - integrity sha512-bS7uF+h0s5aiklc/iRaujiSsiladOsZBLrJ6QImJDXvubCAQtvE7om7ShlGSXixkMAO0OVMDWyuwLlEy8V1Ing== +"@ampproject/toolbox-validator-rules@^2.7.1-alpha.0": + version "2.7.4" + resolved "https://registry.yarnpkg.com/@ampproject/toolbox-validator-rules/-/toolbox-validator-rules-2.7.4.tgz#a58b5eca723f6c3557ac83b696de0247f5f03ce4" + integrity sha512-z3JRcpIZLLdVC9XVe7YTZuB3a/eR9s2SjElYB9AWRdyJyL5Jt7+pGNv4Uwh1uHVoBXsWEVQzNOWSNtrO3mSwZA== dependencies: - cross-fetch "3.0.5" + cross-fetch "3.0.6" "@angular-devkit/architect@0.1100.5", "@angular-devkit/architect@~0.1100.1": version "0.1100.5" @@ -69,14 +61,6 @@ "@angular-devkit/core" "11.0.5" rxjs "6.6.3" -"@angular-devkit/architect@~0.1001.3": - version "0.1001.7" - resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.1001.7.tgz#b3d75cddf5c5a2677cebba1d7b7eaffe73748d37" - integrity sha512-uFYIvMdewU44GbIyRfsUHNMLkx+C0kokpnj7eH5NbJfbyFpCfd3ijBHh+voPdPsDRWs9lLgjbxfHpswSPj4D8w== - dependencies: - "@angular-devkit/core" "10.1.7" - rxjs "6.6.2" - "@angular-devkit/build-optimizer@~0.1100.1": version "0.1100.5" resolved "https://registry.yarnpkg.com/@angular-devkit/build-optimizer/-/build-optimizer-0.1100.5.tgz#25de00e9cbea1444f911aa0a7a53a05800c90d62" @@ -97,17 +81,6 @@ "@angular-devkit/core" "11.0.5" rxjs "6.6.3" -"@angular-devkit/core@10.1.7", "@angular-devkit/core@~10.1.3": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-10.1.7.tgz#c4c4332d738075bf1346aa040c78756e3144ba4b" - integrity sha512-RRyDkN2FByA+nlnRx/MzUMK1FXwj7+SsrzJcvZfWx4yA5rfKmJiJryXQEzL44GL1aoaXSuvOYu3H72wxZADN8Q== - dependencies: - ajv "6.12.4" - fast-json-stable-stringify "2.1.0" - magic-string "0.25.7" - rxjs "6.6.2" - source-map "0.7.3" - "@angular-devkit/core@11.0.5", "@angular-devkit/core@~11.0.1": version "11.0.5" resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-11.0.5.tgz#8239486d2de6c08fc55d2a64f12a7f5d518c8beb" @@ -119,15 +92,6 @@ rxjs "6.6.3" source-map "0.7.3" -"@angular-devkit/schematics@~10.1.3": - version "10.1.7" - resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-10.1.7.tgz#b98d2c41b34ea94bf11d187f2206bdc020bd3860" - integrity sha512-nk9RXA09b+7uq59HS/gyztNzUGHH/eQAUQhWHdDYSCG6v1lhJVCKx1HgDPELVxmeq9f+HArkAW7Y7c+ccdNQ7A== - dependencies: - "@angular-devkit/core" "10.1.7" - ora "5.0.0" - rxjs "6.6.2" - "@angular-devkit/schematics@~11.0.1": version "11.0.5" resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-11.0.5.tgz#e5d89451daa644eccce93970709f7cdf44c11982" @@ -137,7 +101,14 @@ ora "5.1.0" rxjs "6.6.3" -"@babel/code-frame@7.10.4", "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.8.3": +"@babel/code-frame@7.12.11", "@babel/code-frame@^7.0.0-beta.36", "@babel/code-frame@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" + integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== @@ -149,6 +120,32 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.12.1.tgz#d7386a689aa0ddf06255005b4b991988021101a0" integrity sha512-725AQupWJZ8ba0jbKceeFblZTY90McUBWMwHhkFQ9q1zKPJ95GUktljFcgcsIVwRnTnRKlcYzfiNImg5G9m6ZQ== +"@babel/compat-data@^7.12.5", "@babel/compat-data@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.12.7.tgz#9329b4782a7d6bbd7eef57e11addf91ee3ef1e41" + integrity sha512-YaxPMGs/XIWtYqrdEOZOCPsVWfEoriXopnsz3/i7apYPXQ3698UFhS6dVT1KN5qOsWmVgw/FOrmQgpRaZayGsw== + +"@babel/core@7.12.10", "@babel/core@^7.0.0-beta.39": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.10.tgz#b79a2e1b9f70ed3d84bbfb6d8c4ef825f606bccd" + integrity sha512-eTAlQKq65zHfkHZV0sIVODCPGVgoo1HdBlbSLi9CqOzuZanMv2ihzY+4paiKr1mH+XmYESMAmJ/dpZ68eN6d8w== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.10" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helpers" "^7.12.5" + "@babel/parser" "^7.12.10" + "@babel/template" "^7.12.7" + "@babel/traverse" "^7.12.10" + "@babel/types" "^7.12.10" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + semver "^5.4.1" + source-map "^0.5.0" + "@babel/core@7.9.6": version "7.9.6" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.9.6.tgz#d9aa1f580abf3b2286ef40b6904d390904c63376" @@ -202,6 +199,15 @@ jsesc "^2.5.1" source-map "^0.5.0" +"@babel/generator@^7.12.10", "@babel/generator@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.11.tgz#98a7df7b8c358c9a37ab07a24056853016aba3af" + integrity sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA== + dependencies: + "@babel/types" "^7.12.11" + jsesc "^2.5.1" + source-map "^0.5.0" + "@babel/helper-annotate-as-pure@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3" @@ -209,6 +215,13 @@ dependencies: "@babel/types" "^7.10.4" +"@babel/helper-annotate-as-pure@^7.12.10": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.10.tgz#54ab9b000e60a93644ce17b3f37d313aaf1d115d" + integrity sha512-XplmVbC1n+KY6jL8/fgLVXXUauDIB+lD5+GsQEh6F6GBF1dq1qy4DP4yXWzDKcoqXB3X58t61e85Fitoww4JVQ== + dependencies: + "@babel/types" "^7.12.10" + "@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz#bb0b75f31bf98cbf9ff143c1ae578b87274ae1a3" @@ -244,6 +257,16 @@ browserslist "^4.12.0" semver "^5.5.0" +"@babel/helper-compilation-targets@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz#cb470c76198db6a24e9dbc8987275631e5d29831" + integrity sha512-+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw== + dependencies: + "@babel/compat-data" "^7.12.5" + "@babel/helper-validator-option" "^7.12.1" + browserslist "^4.14.5" + semver "^5.5.0" + "@babel/helper-create-class-features-plugin@^7.12.1", "@babel/helper-create-class-features-plugin@^7.8.3": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz#3c45998f431edd4a9214c5f1d3ad1448a6137f6e" @@ -289,6 +312,15 @@ "@babel/template" "^7.10.4" "@babel/types" "^7.10.4" +"@babel/helper-function-name@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz#1fd7738aee5dcf53c3ecff24f1da9c511ec47b42" + integrity sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA== + dependencies: + "@babel/helper-get-function-arity" "^7.12.10" + "@babel/template" "^7.12.7" + "@babel/types" "^7.12.11" + "@babel/helper-get-function-arity@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" @@ -296,6 +328,13 @@ dependencies: "@babel/types" "^7.10.4" +"@babel/helper-get-function-arity@^7.12.10": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz#b158817a3165b5faa2047825dfa61970ddcc16cf" + integrity sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag== + dependencies: + "@babel/types" "^7.12.10" + "@babel/helper-hoist-variables@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz#d49b001d1d5a68ca5e6604dda01a6297f7c9381e" @@ -317,7 +356,7 @@ dependencies: "@babel/types" "^7.12.1" -"@babel/helper-module-imports@^7.7.0": +"@babel/helper-module-imports@^7.12.5", "@babel/helper-module-imports@^7.7.0": version "7.12.5" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz#1bfc0229f794988f76ed0a4d4e90860850b54dfb" integrity sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA== @@ -398,6 +437,13 @@ dependencies: "@babel/types" "^7.11.0" +"@babel/helper-split-export-declaration@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz#1b4cc424458643c47d37022223da33d76ea4603a" + integrity sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g== + dependencies: + "@babel/types" "^7.12.11" + "@babel/helper-validator-identifier@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" @@ -413,6 +459,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz#175567380c3e77d60ff98a54bb015fe78f2178d9" integrity sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A== +"@babel/helper-validator-option@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.11.tgz#d66cb8b7a3e7fe4c6962b32020a131ecf0847f4f" + integrity sha512-TBFCyj939mFSdeX7U7DDj32WtzYY7fDcalgq8v3fBZMNOJQNn7nOYzMaUCiPxPYfCup69mtIpqlKgMZLvQ8Xhw== + "@babel/helper-wrap-function@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz#8a6f701eab0ff39f765b5a1cfef409990e624b87" @@ -432,6 +483,15 @@ "@babel/traverse" "^7.12.1" "@babel/types" "^7.12.1" +"@babel/helpers@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.5.tgz#1a1ba4a768d9b58310eda516c449913fe647116e" + integrity sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA== + dependencies: + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.5" + "@babel/types" "^7.12.5" + "@babel/highlight@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" @@ -446,6 +506,11 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.2.tgz#9d2fcf24cafe85333ab0aff9f26b81bba356004d" integrity sha512-LMN+SqTiZEonUw4hQA0A3zG8DnN0E1F4K107LbDDUnC+0chML1rvWgsHloC9weB4RmZweE0uhFq0eGX7Nr/PBQ== +"@babel/parser@^7.12.10", "@babel/parser@^7.12.11", "@babel/parser@^7.12.7": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.11.tgz#9ce3595bcd74bc5c466905e86c535b8b25011e79" + integrity sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg== + "@babel/plugin-proposal-async-generator-functions@^7.12.1", "@babel/plugin-proposal-async-generator-functions@^7.8.3": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz#dc6c1170e27d8aca99ff65f4925bd06b1c90550e" @@ -528,6 +593,14 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-numeric-separator" "^7.10.4" +"@babel/plugin-proposal-numeric-separator@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.7.tgz#8bf253de8139099fea193b297d23a9d406ef056b" + integrity sha512-8c+uy0qmnRTeukiGsjLGy6uVs/TFjJchGXUeBqlG4VWYOdJWkhhVPdQ3uHwbmalfJwv2JsV0qffXP4asRfL2SQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-proposal-object-rest-spread@^7.12.1", "@babel/plugin-proposal-object-rest-spread@^7.9.6": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz#def9bd03cea0f9b72283dac0ec22d289c7691069" @@ -554,6 +627,15 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" "@babel/plugin-syntax-optional-chaining" "^7.8.0" +"@babel/plugin-proposal-optional-chaining@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.7.tgz#e02f0ea1b5dc59d401ec16fb824679f683d3303c" + integrity sha512-4ovylXZ0PWmwoOvhU2vhnzVNnm88/Sm9nx7V8BPgMvAzn5zDou3/Awy0EjglyubVHasJj+XCEkr/r1X3P5elCA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/plugin-proposal-private-methods@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz#86814f6e7a21374c980c10d38b4493e703f4a389" @@ -626,7 +708,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.12.1", "@babel/plugin-syntax-jsx@^7.2.0": +"@babel/plugin-syntax-jsx@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz#9d9d357cc818aa7ae7935917c1257f67677a0926" integrity sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg== @@ -719,6 +801,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-block-scoping@^7.12.11": + version "7.12.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.12.tgz#d93a567a152c22aea3b1929bb118d1d0a175cdca" + integrity sha512-VOEPQ/ExOVqbukuP7BYJtI5ZxxsmegTwzZ04j1aF0dkSypGo9XpDHuOrABsJu+ie+penpSJheDJ11x1BEZNiyQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-classes@^7.12.1", "@babel/plugin-transform-classes@^7.9.5": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz#65e650fcaddd3d88ddce67c0f834a3d436a32db6" @@ -896,6 +985,13 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-jsx" "^7.12.1" +"@babel/plugin-transform-react-jsx-development@^7.12.7": + version "7.12.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.12.tgz#bccca33108fe99d95d7f9e82046bfe762e71f4e7" + integrity sha512-i1AxnKxHeMxUaWVXQOSIco4tvVvvCxMSfeBMnMM06mpaJt3g+MpxYQQrDfojUQldP1xxraPSJYSMEljoWM/dCg== + dependencies: + "@babel/plugin-transform-react-jsx" "^7.12.12" + "@babel/plugin-transform-react-jsx-self@^7.12.1", "@babel/plugin-transform-react-jsx-self@^7.9.0": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.12.1.tgz#ef43cbca2a14f1bd17807dbe4376ff89d714cf28" @@ -920,6 +1016,17 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-jsx" "^7.12.1" +"@babel/plugin-transform-react-jsx@^7.12.10", "@babel/plugin-transform-react-jsx@^7.12.12": + version "7.12.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.12.tgz#b0da51ffe5f34b9a900e9f1f5fb814f9e512d25e" + integrity sha512-JDWGuzGNWscYcq8oJVCtSE61a5+XAOos+V0HrxnDieUus4UMnBEosDnY1VJqU5iZ4pA04QY7l0+JvHL1hZEfsw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.12.10" + "@babel/helper-module-imports" "^7.12.5" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-jsx" "^7.12.1" + "@babel/types" "^7.12.12" + "@babel/plugin-transform-react-pure-annotations@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.12.1.tgz#05d46f0ab4d1339ac59adf20a1462c91b37a1a42" @@ -972,6 +1079,13 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-regex" "^7.10.4" +"@babel/plugin-transform-sticky-regex@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz#560224613ab23987453948ed21d0b0b193fa7fad" + integrity sha512-VEiqZL5N/QvDbdjfYQBhruN0HYjSPjC4XkeqW4ny/jNtH9gcbgaqBIXYEZCNnESMAGs0/K/R7oFGMhOyu/eIxg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-template-literals@^7.12.1", "@babel/plugin-transform-template-literals@^7.8.3": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz#b43ece6ed9a79c0c71119f576d299ef09d942843" @@ -986,7 +1100,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-typescript@^7.10.4", "@babel/plugin-transform-typescript@^7.9.0": +"@babel/plugin-transform-typeof-symbol@^7.12.10": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.10.tgz#de01c4c8f96580bd00f183072b0d0ecdcf0dec4b" + integrity sha512-JQ6H8Rnsogh//ijxspCjc21YPd3VLVoYtAwv3zQmqAt8YGYUtdo5usNhdl4b9/Vir2kPFZl6n1h0PfUz4hJhaA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-typescript@^7.10.4", "@babel/plugin-transform-typescript@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.12.1.tgz#d92cc0af504d510e26a754a7dbc2e5c8cd9c7ab4" integrity sha512-VrsBByqAIntM+EYMqSm59SiMEf7qkmI9dqMt6RbD/wlwueWmYcI0FFK5Fj47pP6DRZm+3teXjosKlwcZJ5lIMw== @@ -1010,6 +1131,78 @@ "@babel/helper-create-regexp-features-plugin" "^7.12.1" "@babel/helper-plugin-utils" "^7.10.4" +"@babel/preset-env@7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.11.tgz#55d5f7981487365c93dbbc84507b1c7215e857f9" + integrity sha512-j8Tb+KKIXKYlDBQyIOy4BLxzv1NUOwlHfZ74rvW+Z0Gp4/cI2IMDPBWAgWceGcE7aep9oL/0K9mlzlMGxA8yNw== + dependencies: + "@babel/compat-data" "^7.12.7" + "@babel/helper-compilation-targets" "^7.12.5" + "@babel/helper-module-imports" "^7.12.5" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-validator-option" "^7.12.11" + "@babel/plugin-proposal-async-generator-functions" "^7.12.1" + "@babel/plugin-proposal-class-properties" "^7.12.1" + "@babel/plugin-proposal-dynamic-import" "^7.12.1" + "@babel/plugin-proposal-export-namespace-from" "^7.12.1" + "@babel/plugin-proposal-json-strings" "^7.12.1" + "@babel/plugin-proposal-logical-assignment-operators" "^7.12.1" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.12.1" + "@babel/plugin-proposal-numeric-separator" "^7.12.7" + "@babel/plugin-proposal-object-rest-spread" "^7.12.1" + "@babel/plugin-proposal-optional-catch-binding" "^7.12.1" + "@babel/plugin-proposal-optional-chaining" "^7.12.7" + "@babel/plugin-proposal-private-methods" "^7.12.1" + "@babel/plugin-proposal-unicode-property-regex" "^7.12.1" + "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-class-properties" "^7.12.1" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/plugin-syntax-top-level-await" "^7.12.1" + "@babel/plugin-transform-arrow-functions" "^7.12.1" + "@babel/plugin-transform-async-to-generator" "^7.12.1" + "@babel/plugin-transform-block-scoped-functions" "^7.12.1" + "@babel/plugin-transform-block-scoping" "^7.12.11" + "@babel/plugin-transform-classes" "^7.12.1" + "@babel/plugin-transform-computed-properties" "^7.12.1" + "@babel/plugin-transform-destructuring" "^7.12.1" + "@babel/plugin-transform-dotall-regex" "^7.12.1" + "@babel/plugin-transform-duplicate-keys" "^7.12.1" + "@babel/plugin-transform-exponentiation-operator" "^7.12.1" + "@babel/plugin-transform-for-of" "^7.12.1" + "@babel/plugin-transform-function-name" "^7.12.1" + "@babel/plugin-transform-literals" "^7.12.1" + "@babel/plugin-transform-member-expression-literals" "^7.12.1" + "@babel/plugin-transform-modules-amd" "^7.12.1" + "@babel/plugin-transform-modules-commonjs" "^7.12.1" + "@babel/plugin-transform-modules-systemjs" "^7.12.1" + "@babel/plugin-transform-modules-umd" "^7.12.1" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.1" + "@babel/plugin-transform-new-target" "^7.12.1" + "@babel/plugin-transform-object-super" "^7.12.1" + "@babel/plugin-transform-parameters" "^7.12.1" + "@babel/plugin-transform-property-literals" "^7.12.1" + "@babel/plugin-transform-regenerator" "^7.12.1" + "@babel/plugin-transform-reserved-words" "^7.12.1" + "@babel/plugin-transform-shorthand-properties" "^7.12.1" + "@babel/plugin-transform-spread" "^7.12.1" + "@babel/plugin-transform-sticky-regex" "^7.12.7" + "@babel/plugin-transform-template-literals" "^7.12.1" + "@babel/plugin-transform-typeof-symbol" "^7.12.10" + "@babel/plugin-transform-unicode-escapes" "^7.12.1" + "@babel/plugin-transform-unicode-regex" "^7.12.1" + "@babel/preset-modules" "^0.1.3" + "@babel/types" "^7.12.11" + core-js-compat "^3.8.0" + semver "^5.5.0" + "@babel/preset-env@7.9.6": version "7.9.6" resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.9.6.tgz#df063b276c6455ec6fcfc6e53aacc38da9b0aea6" @@ -1159,6 +1352,17 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" +"@babel/preset-react@7.12.10": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.12.10.tgz#4fed65f296cbb0f5fb09de6be8cddc85cc909be9" + integrity sha512-vtQNjaHRl4DUpp+t+g4wvTHsLQuye+n0H/wsXIZRn69oz/fvNC7gQ4IK73zGJBaxvHoxElDvnYCthMcT7uzFoQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-react-display-name" "^7.12.1" + "@babel/plugin-transform-react-jsx" "^7.12.10" + "@babel/plugin-transform-react-jsx-development" "^7.12.7" + "@babel/plugin-transform-react-pure-annotations" "^7.12.1" + "@babel/preset-react@7.9.4": version "7.9.4" resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.9.4.tgz#c6c97693ac65b6b9c0b4f25b948a8f665463014d" @@ -1192,15 +1396,16 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-transform-typescript" "^7.10.4" -"@babel/preset-typescript@7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.9.0.tgz#87705a72b1f0d59df21c179f7c3d2ef4b16ce192" - integrity sha512-S4cueFnGrIbvYJgwsVFKdvOmpiL0XGw9MFW9D0vgRys5g36PBhZRL8NX8Gr2akz8XRtzq6HuDXPD/1nniagNUg== +"@babel/preset-typescript@7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.12.7.tgz#fc7df8199d6aae747896f1e6c61fc872056632a3" + integrity sha512-nOoIqIqBmHBSEgBXWR4Dv/XBehtIFcw9PqZw6rFYuKrzsZmOQm3PR5siLBnKZFEsDb03IegG8nSjU/iXXXYRmw== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-transform-typescript" "^7.9.0" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-validator-option" "^7.12.1" + "@babel/plugin-transform-typescript" "^7.12.1" -"@babel/runtime-corejs3@^7.10.2", "@babel/runtime-corejs3@^7.8.3": +"@babel/runtime-corejs3@^7.10.2": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.12.1.tgz#51b9092befbeeed938335a109dbe0df51451e9dc" integrity sha512-umhPIcMrlBZ2aTWlWjUseW9LjQKxi1dpFlQS8DzsxB//5K+u6GLTC/JliPKHsd5kJVPIU6X/Hy0YvWOYPcMxBw== @@ -1208,7 +1413,7 @@ core-js-pure "^3.0.0" regenerator-runtime "^0.13.4" -"@babel/runtime@7.12.5": +"@babel/runtime@7.12.5", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5": version "7.12.5" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e" integrity sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg== @@ -1231,6 +1436,30 @@ "@babel/parser" "^7.10.4" "@babel/types" "^7.10.4" +"@babel/template@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.7.tgz#c817233696018e39fbb6c491d2fb684e05ed43bc" + integrity sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/parser" "^7.12.7" + "@babel/types" "^7.12.7" + +"@babel/traverse@^7.0.0-beta.39", "@babel/traverse@^7.12.10", "@babel/traverse@^7.12.5": + version "7.12.12" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.12.tgz#d0cd87892704edd8da002d674bc811ce64743376" + integrity sha512-s88i0X0lPy45RrLM8b9mz8RPH5FqO9G9p7ti59cToE44xFm1Q+Pjh5Gq4SXBbtb88X7Uy7pexeqRIQDDMNkL0w== + dependencies: + "@babel/code-frame" "^7.12.11" + "@babel/generator" "^7.12.11" + "@babel/helper-function-name" "^7.12.11" + "@babel/helper-split-export-declaration" "^7.12.11" + "@babel/parser" "^7.12.11" + "@babel/types" "^7.12.12" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.19" + "@babel/traverse@^7.1.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.12.1", "@babel/traverse@^7.9.6": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.1.tgz#941395e0c5cc86d5d3e75caa095d3924526f0c1e" @@ -1264,6 +1493,15 @@ lodash "^4.17.19" to-fast-properties "^2.0.0" +"@babel/types@^7.0.0-beta.39", "@babel/types@^7.12.10", "@babel/types@^7.12.11", "@babel/types@^7.12.12", "@babel/types@^7.12.7": + version "7.12.12" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.12.tgz#4608a6ec313abbd87afa55004d373ad04a96c299" + integrity sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ== + dependencies: + "@babel/helper-validator-identifier" "^7.12.11" + lodash "^4.17.19" + to-fast-properties "^2.0.0" + "@babel/types@^7.12.5": version "7.12.11" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.11.tgz#a86e4d71e30a9b6ee102590446c98662589283ce" @@ -1312,18 +1550,18 @@ dependencies: "@chakra-ui/utils" "1.0.2" -"@chakra-ui/button@1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@chakra-ui/button/-/button-1.0.2.tgz#ed310c9eb018be50b3c2717fcc452535f6f14e49" - integrity sha512-ZDY/Vhzo3AiMQ+5oqxdtl+WGHx1Sp4Pq+ekpkHDilPvfz2Slxc2RT7bWwPHtTtaJ802j3tzCo5WbjNMgJuOR8g== +"@chakra-ui/button@1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@chakra-ui/button/-/button-1.0.3.tgz#2fccdaad9406b6d9de06fcc18c3a2aee7291ccbb" + integrity sha512-LEylUfAPEBlt2coLfxYjaJ9U1D9LN8LKvz0jnfXxrWIVyWpiWU0a6Kqm0rLUHzZv15abwNz23btfP52vTF3mvw== dependencies: "@chakra-ui/spinner" "1.0.2" "@chakra-ui/utils" "1.0.2" -"@chakra-ui/checkbox@1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@chakra-ui/checkbox/-/checkbox-1.0.2.tgz#00254ae395be60d5a383779f048fef1b409870b2" - integrity sha512-y79GpxulcjiyjV388eqOOUIaWdu927OWkcuj1INpOC24yiY1km9gWxjHZPRVUVHw9volO7/GWibqj3h9sOr5rw== +"@chakra-ui/checkbox@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/checkbox/-/checkbox-1.1.0.tgz#b0a71bf509108b5cb6fbbb54e38eefda4a539f54" + integrity sha512-MGsdny0rMdww4fh3xS3iyXx+FVQzMda4lpYnmjm6prlUv7Jv6vEkumDRkAJTWulJzkHl+fvD5jC4jNKh+3zGNg== dependencies: "@chakra-ui/hooks" "1.0.2" "@chakra-ui/utils" "1.0.2" @@ -1437,10 +1675,10 @@ "@chakra-ui/form-control" "1.1.0" "@chakra-ui/utils" "1.0.2" -"@chakra-ui/layout@1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@chakra-ui/layout/-/layout-1.1.1.tgz#8831ff9289c8e207e308e16770503e605ba81975" - integrity sha512-BHhIwzKRVpUSayQkKaB4/AtMtMiB4V2gCd0WlgCs8d6GTl0yk01oXgUzA99DbTa1mLs5zpmg84qtcuRZnkvjLw== +"@chakra-ui/layout@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@chakra-ui/layout/-/layout-1.1.2.tgz#bdd33c568bdc38ac81164a7feab190120ff53198" + integrity sha512-wVc6miUkriXeamFw3Ru4+i+PC7kFMhZxQjzvvoQ0f+KVkvyDbqM1tui8/B6ISAmwtbMy08wbqxQ8Y/sYHDUIIA== dependencies: "@chakra-ui/icon" "1.0.2" "@chakra-ui/utils" "1.0.2" @@ -1471,10 +1709,10 @@ "@chakra-ui/transition" "1.0.3" "@chakra-ui/utils" "1.0.2" -"@chakra-ui/modal@1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@chakra-ui/modal/-/modal-1.3.0.tgz#e959055579d6c181b66632f2dbf509f2d9b082bd" - integrity sha512-ZjcnLV37RjSO2JNX9KplhhpyLxsqO4sa+ONefE5+LCTdb8YPzR4/C4TC4sK8qMoyrz9CYnhgy1ra9EnGC25yEg== +"@chakra-ui/modal@1.4.1": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@chakra-ui/modal/-/modal-1.4.1.tgz#de30f2ebd0722ed14d128ac126c87143fe88a88a" + integrity sha512-uAECraFrjGPCP68Qzb+mf9FkI0WTeThMHvtvudwrf8y2lipYxkNONdvbphAkLIkOuoEUW7oIjoAsQd6ERWJ8Lw== dependencies: "@chakra-ui/close-button" "1.0.3" "@chakra-ui/focus-lock" "1.0.2" @@ -1496,10 +1734,10 @@ "@chakra-ui/icon" "1.0.2" "@chakra-ui/utils" "1.0.2" -"@chakra-ui/pin-input@1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@chakra-ui/pin-input/-/pin-input-1.1.1.tgz#e52e4df7cafa7db271676bff4ddabad569031a14" - integrity sha512-AeFBTKKSOq3938+MSEpSKjo7/sBkMqjAXBbyhABb6glzDGRg3I8GVZOWG8KBt4A/TLMA8YltfoCKARQp+Z5g/Q== +"@chakra-ui/pin-input@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@chakra-ui/pin-input/-/pin-input-1.1.2.tgz#efc6a9a76a42b568a714caf373d9e70e74281da4" + integrity sha512-Pr0uIWo0aVN/N4AlU5+6ky6EzQGb8im41LqG90JqC7HA7rpwraaUQGvpD79Zm/uODGML1yYbTJ4URjFt5FsYHw== dependencies: "@chakra-ui/descendant" "1.0.2" "@chakra-ui/hooks" "1.0.2" @@ -1535,35 +1773,35 @@ "@chakra-ui/hooks" "1.0.2" "@chakra-ui/utils" "1.0.2" -"@chakra-ui/progress@1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@chakra-ui/progress/-/progress-1.0.2.tgz#931d5f833fa2e975d79623d70ce9284e0ebe5f9a" - integrity sha512-A5Iuk5mc5ARXjyfvy98xfHg2Mzmh3UTNq9YQEbtLlGt1MCybzZP2cvROyk7gmTdqAiKmuZInCUeO7kcXCCQK/Q== +"@chakra-ui/progress@1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@chakra-ui/progress/-/progress-1.0.3.tgz#1d1fe8a879c12ed38d92fe80803eab1829b156da" + integrity sha512-7Qu8pIMNHQf8iH8zMg94LXP/UfGtoN/HBredyVSHSosIYeV/DDzKFgjuF+MdJ3DLLkKjyOtL9lgoxcL2l5lyRg== dependencies: "@chakra-ui/theme-tools" "1.0.2" "@chakra-ui/utils" "1.0.2" -"@chakra-ui/radio@1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@chakra-ui/radio/-/radio-1.0.3.tgz#2ba8432021116988ae113455214aabaccfe25b5a" - integrity sha512-Y648m7oa+O3IoVOKT+kTTtHsSanuxd7HKJflbi9oJeHHZMN6rClGpjjTTV+XOpJQxcCaDpMCGjB2vyU39nRrUQ== +"@chakra-ui/radio@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/radio/-/radio-1.1.0.tgz#d375c22cb880d878dea29230a3c6cc68bc4ef3d8" + integrity sha512-fZr3QytRC1yeRnI4cOT/LAGguc3Yw0AYuCsofW4pqjIkOx23lSc7JXHOtCB4fZy2fULl7n/1mcyopSDPh+y61Q== dependencies: "@chakra-ui/form-control" "1.1.0" "@chakra-ui/hooks" "1.0.2" "@chakra-ui/utils" "1.0.2" "@chakra-ui/visually-hidden" "1.0.2" -"@chakra-ui/react@1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@chakra-ui/react/-/react-1.0.4.tgz#924dc808940e54923fdc2481d16e0bbf4f33ce13" - integrity sha512-ZRGrSsuXa8fr7ldTnTCm6JfRSo7dYzsdQvSHLBfBDQu4f8+9IF6pwNkmM8hX/pcVndjpVnvc/oETE9iCiqFrQg== +"@chakra-ui/react@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@chakra-ui/react/-/react-1.1.2.tgz#51ba641f9856a75c184930bbacc4a9049ca432ed" + integrity sha512-swcDv8OCXauTO7tOrCtrb5YJq0drDNb6eB7pygchO+TBwWGdfBGNw4ipD2xG8nrTxuyv9DCH3jY2GblOKf/faw== dependencies: "@chakra-ui/accordion" "1.0.3" "@chakra-ui/alert" "1.0.3" "@chakra-ui/avatar" "1.0.2" "@chakra-ui/breadcrumb" "1.0.2" - "@chakra-ui/button" "1.0.2" - "@chakra-ui/checkbox" "1.0.2" + "@chakra-ui/button" "1.0.3" + "@chakra-ui/checkbox" "1.1.0" "@chakra-ui/close-button" "1.0.3" "@chakra-ui/control-box" "1.0.2" "@chakra-ui/counter" "1.0.2" @@ -1574,31 +1812,31 @@ "@chakra-ui/icon" "1.0.2" "@chakra-ui/image" "1.0.2" "@chakra-ui/input" "1.0.3" - "@chakra-ui/layout" "1.1.1" + "@chakra-ui/layout" "1.1.2" "@chakra-ui/live-region" "1.0.2" "@chakra-ui/media-query" "1.0.2" "@chakra-ui/menu" "1.0.3" - "@chakra-ui/modal" "1.3.0" + "@chakra-ui/modal" "1.4.1" "@chakra-ui/number-input" "1.0.3" - "@chakra-ui/pin-input" "1.1.1" + "@chakra-ui/pin-input" "1.1.2" "@chakra-ui/popover" "1.0.4" "@chakra-ui/popper" "1.0.2" "@chakra-ui/portal" "1.0.2" - "@chakra-ui/progress" "1.0.2" - "@chakra-ui/radio" "1.0.3" + "@chakra-ui/progress" "1.0.3" + "@chakra-ui/radio" "1.1.0" "@chakra-ui/select" "1.0.3" - "@chakra-ui/skeleton" "1.0.3" + "@chakra-ui/skeleton" "1.0.6" "@chakra-ui/slider" "1.0.2" "@chakra-ui/spinner" "1.0.2" "@chakra-ui/stat" "1.0.2" - "@chakra-ui/switch" "1.0.2" - "@chakra-ui/system" "1.1.0" + "@chakra-ui/switch" "1.0.3" + "@chakra-ui/system" "1.1.3" "@chakra-ui/table" "1.0.2" - "@chakra-ui/tabs" "1.0.2" - "@chakra-ui/tag" "1.0.2" + "@chakra-ui/tabs" "1.0.3" + "@chakra-ui/tag" "1.0.3" "@chakra-ui/textarea" "1.0.3" - "@chakra-ui/theme" "1.2.2" - "@chakra-ui/toast" "1.1.2" + "@chakra-ui/theme" "1.3.0" + "@chakra-ui/toast" "1.1.3" "@chakra-ui/tooltip" "1.0.2" "@chakra-ui/transition" "1.0.3" "@chakra-ui/utils" "1.0.2" @@ -1612,14 +1850,14 @@ "@chakra-ui/form-control" "1.1.0" "@chakra-ui/utils" "1.0.2" -"@chakra-ui/skeleton@1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@chakra-ui/skeleton/-/skeleton-1.0.3.tgz#d0b44d2ae4d6c5dac8469a3ee1284311386cf060" - integrity sha512-JLdGzV+9FxRlre1ai8ResA2PUZd08VvAGJL5fY6NPm1wefcNpWJamUV/tCCuYJNLx/1Lzk767JCtJyxOp/RpFw== +"@chakra-ui/skeleton@1.0.6": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@chakra-ui/skeleton/-/skeleton-1.0.6.tgz#022d055fc4e794c6560c6a34c62c322c9933b70f" + integrity sha512-x2fczl833U1zXJV+wiIwtIWBk/29t2RCnPevRewwZO3sDybf45vNnS2fT6KKttBBWnUD+phA9cjkNZwBJRDTEw== dependencies: "@chakra-ui/hooks" "1.0.2" "@chakra-ui/media-query" "1.0.2" - "@chakra-ui/system" "1.1.0" + "@chakra-ui/system" "1.1.3" "@chakra-ui/utils" "1.0.2" "@chakra-ui/slider@1.0.2": @@ -1647,31 +1885,30 @@ "@chakra-ui/utils" "1.0.2" "@chakra-ui/visually-hidden" "1.0.2" -"@chakra-ui/styled-system@1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@chakra-ui/styled-system/-/styled-system-1.2.0.tgz#b20e5a756e7570b504e9576f93dbe0714d7b9961" - integrity sha512-Fpvs/XZWYHWsP0Zwa+ZrhWFiTDp8zKRXKPKbnOcqmlN1sxJdfQFkv1HbKVfHJAxB4QeOO/RzfNlF09A8U5wUnA== +"@chakra-ui/styled-system@1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@chakra-ui/styled-system/-/styled-system-1.3.1.tgz#f0f769d08dbf23c5671482f1bb1751d1abf61d1a" + integrity sha512-h9r478zCfVlkhbtIUubrPvNAmisCBsAlx9S+trZD8pgyBwC2uIsRHemU+IYFbojBH5tIZAyD/5yPUbe4bl4P+A== dependencies: "@chakra-ui/utils" "1.0.2" - "@styled-system/core" "5.1.2" css-get-unit "1.0.1" csstype "3.0.3" -"@chakra-ui/switch@1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@chakra-ui/switch/-/switch-1.0.2.tgz#66265a7f28e330303ca453d2ded03492fda857c9" - integrity sha512-ri6oCFBkFdF1FcQcCcUQhAcwWUqCT29eCFSrD/ewCqy3j7l6bZuoItuuG+YmZe6ORoXjkS2tpIdgZiDTCHl9Ew== +"@chakra-ui/switch@1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@chakra-ui/switch/-/switch-1.0.3.tgz#104b6a013aeb0e019d2a7a7794e9786c7b58fc45" + integrity sha512-Mi/5Y9IuAXooN5UsvpIzGOQAwSCbJdHFJeh/LMnO3suGCT8ClJTw/28YLM3Oyl7euvKzFylcqec6m2ZT6rITyw== dependencies: - "@chakra-ui/checkbox" "1.0.2" + "@chakra-ui/checkbox" "1.1.0" "@chakra-ui/utils" "1.0.2" -"@chakra-ui/system@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@chakra-ui/system/-/system-1.1.0.tgz#3b2e1bd440b3fd0779bda191b708dcaab1a51834" - integrity sha512-R+rEtcAekS9BtgL+aQHPKZLUU449xsBeP3SLVc4kYuA/sPUDkFjrfZ8o7C4dnBvL2oXjufJ6dllZBrZw7zurcQ== +"@chakra-ui/system@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@chakra-ui/system/-/system-1.1.3.tgz#8d8770899402a27ee47c852dd803ed849ba41324" + integrity sha512-U6/Iuyi4KStCghB/czpCfPZTRzeaHvREivlWLOPy4UbnuqT19SEaDl4mV7jz664LpiNUSo9RQCWCtCLvQGv7iQ== dependencies: "@chakra-ui/color-mode" "1.0.2" - "@chakra-ui/styled-system" "1.2.0" + "@chakra-ui/styled-system" "1.3.1" "@chakra-ui/utils" "1.0.2" react-fast-compare "3.2.0" @@ -1682,20 +1919,20 @@ dependencies: "@chakra-ui/utils" "1.0.2" -"@chakra-ui/tabs@1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@chakra-ui/tabs/-/tabs-1.0.2.tgz#d03f4be1ca1fe5ac19f8818e5a2df87a706fb4d4" - integrity sha512-jB/CVPUt6+B+SLiFG7Eshs0RfGZtTHSogSeG/r+IZKId5mj1syG0KGEfT4gv2lD+zLsN8QyXKbeNbDgffC4Wew== +"@chakra-ui/tabs@1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@chakra-ui/tabs/-/tabs-1.0.3.tgz#34049c955aaf79d78d3856352d53427377f035fc" + integrity sha512-DLfY52ieDdmddoB8nCt7OPtBp40d8GnZvaF3hzsu+y6TKEM1SYO/mWd2HR+1CWKQhLsiHnOIB3UsTnCOeT2Bqg== dependencies: "@chakra-ui/clickable" "1.0.2" "@chakra-ui/descendant" "1.0.2" "@chakra-ui/hooks" "1.0.2" "@chakra-ui/utils" "1.0.2" -"@chakra-ui/tag@1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@chakra-ui/tag/-/tag-1.0.2.tgz#3ea7dd598c06742959ceb9bf4fc05938934884bf" - integrity sha512-orB94q4TtaassYU6dbGdY4eK8qJl6J5XplgvshBg2j+67iz/62Cbt6bLCs42mIOmgd/4VtcGcCcG9ZSt7VR9Yw== +"@chakra-ui/tag@1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@chakra-ui/tag/-/tag-1.0.3.tgz#c0000ba06293a80b54e74d07bcd2f04dc192eefc" + integrity sha512-csnitXXOwg/cLF5pHHe0zzB8TLEZhHASAnYMXzrBOGxlrxPPbPnoIGY4VTNiQwxDXTBIdrMRdVHy9emboi8GDA== dependencies: "@chakra-ui/icon" "1.0.2" "@chakra-ui/utils" "1.0.2" @@ -1717,22 +1954,23 @@ "@types/tinycolor2" "1.4.2" tinycolor2 "1.4.2" -"@chakra-ui/theme@1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@chakra-ui/theme/-/theme-1.2.2.tgz#03ad6bcfdd7a2c51bbb08ddc3d83cfcbf456601a" - integrity sha512-Wkas+mSduUGOCEAcIshNPGmlqbYMEVULH3bsXaq1fx2bQaYdFKC73Ckxo0cg6qQ/Z1VCgU5CZI47VpfdUsDjZA== +"@chakra-ui/theme@1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/theme/-/theme-1.3.0.tgz#5318f60cff2a5a3ae63f3fb4ed8b180f8205cf7b" + integrity sha512-e0p+TlUFlvsuvXiwFj8DqfHalf5h2jyXRNh1rTVJkDoGMG1z+JNH/Dtwyr8KA9Ju4n+anZg+qQflKvfVf5nHSQ== dependencies: "@chakra-ui/theme-tools" "1.0.2" + "@chakra-ui/utils" "1.0.2" -"@chakra-ui/toast@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@chakra-ui/toast/-/toast-1.1.2.tgz#4c20420837fd5a50c4745bf9339bb9346554bcf8" - integrity sha512-bSlqIu34NEgCuOMb31YuYGASvpgdxHg/HqgxJULW9PmGTjIg68fFej2RF3VId5ZFI/8Kpz5lCAV9Ty1XpCRjIQ== +"@chakra-ui/toast@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@chakra-ui/toast/-/toast-1.1.3.tgz#5de6dd48d8e0b239b1c512be0b65fe715addc6a3" + integrity sha512-6GWdGG4O8Qd9diC0pBJzvep1z5P6Hu0b307Q0w+IY+sp/0HnY813j7UHh2DbZfVXstBmt8O+2E0YlDPQyYMZjA== dependencies: "@chakra-ui/alert" "1.0.3" "@chakra-ui/close-button" "1.0.3" "@chakra-ui/hooks" "1.0.2" - "@chakra-ui/theme" "1.2.2" + "@chakra-ui/theme" "1.3.0" "@chakra-ui/transition" "1.0.3" "@chakra-ui/utils" "1.0.2" "@reach/alert" "0.11.0" @@ -1782,7 +2020,7 @@ exec-sh "^0.3.2" minimist "^1.2.0" -"@cypress/listr-verbose-renderer@0.4.1": +"@cypress/listr-verbose-renderer@^0.4.1": version "0.4.1" resolved "https://registry.yarnpkg.com/@cypress/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz#a77492f4b11dcc7c446a34b3e28721afd33c642a" integrity sha1-p3SS9LEdzHxEajSz4ochr9M8ZCo= @@ -1792,6 +2030,32 @@ date-fns "^1.27.2" figures "^1.7.0" +"@cypress/request@^2.88.5": + version "2.88.5" + resolved "https://registry.yarnpkg.com/@cypress/request/-/request-2.88.5.tgz#8d7ecd17b53a849cfd5ab06d5abe7d84976375d7" + integrity sha512-TzEC1XMi1hJkywWpRfD2clreTa/Z+lOrXDCxxBTBPEcY5azdPi56A6Xw+O4tWJnaJH3iIE7G5aDXZC6JgRZLcA== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + "@cypress/webpack-preprocessor@~4.1.2": version "4.1.5" resolved "https://registry.yarnpkg.com/@cypress/webpack-preprocessor/-/webpack-preprocessor-4.1.5.tgz#b47d515d2540af977ee8b69d7c4eed64e3027668" @@ -1804,7 +2068,7 @@ "@babel/preset-env" "^7.0.0" babel-loader "^8.0.2" -"@cypress/xvfb@1.2.4": +"@cypress/xvfb@^1.2.4": version "1.2.4" resolved "https://registry.yarnpkg.com/@cypress/xvfb/-/xvfb-1.2.4.tgz#2daf42e8275b39f4aa53c14214e557bd14e7748a" integrity sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q== @@ -1812,13 +2076,6 @@ debug "^3.1.0" lodash.once "^4.1.1" -"@emotion/babel-plugin-jsx-pragmatic@^0.1.5": - version "0.1.5" - resolved "https://registry.yarnpkg.com/@emotion/babel-plugin-jsx-pragmatic/-/babel-plugin-jsx-pragmatic-0.1.5.tgz#27debfe9c27c4d83574d509787ae553bf8a34d7e" - integrity sha512-y+3AJ0SItMDaAgGPVkQBC/S/BaqaPACkQ6MyCI2CUlrjTxKttTVfD3TMtcs7vLEcLxqzZ1xiG0vzwCXjhopawQ== - dependencies: - "@babel/plugin-syntax-jsx" "^7.2.0" - "@emotion/babel-plugin@^11.0.0": version "11.1.2" resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.1.2.tgz#68fe1aa3130099161036858c64ee92056c6730b7" @@ -1837,16 +2094,6 @@ source-map "^0.5.7" stylis "^4.0.3" -"@emotion/babel-preset-css-prop@11.0.0": - version "11.0.0" - resolved "https://registry.yarnpkg.com/@emotion/babel-preset-css-prop/-/babel-preset-css-prop-11.0.0.tgz#25b868affa620b9e97024b67f67ad32c03a0510e" - integrity sha512-E7z3jMf1OyThGpp3ngYGxOSGX5AdoSQTuqM9QgJNAHFh3Fi8N5CbWx6g+IdySJ8bjPiMgFQsIeEhkyy+4mDpCQ== - dependencies: - "@babel/plugin-transform-react-jsx" "^7.12.1" - "@babel/runtime" "^7.7.2" - "@emotion/babel-plugin" "^11.0.0" - "@emotion/babel-plugin-jsx-pragmatic" "^0.1.5" - "@emotion/cache@^11.1.3": version "11.1.3" resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.1.3.tgz#c7683a9484bcd38d5562f2b9947873cf66829afd" @@ -1887,10 +2134,10 @@ resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.5.tgz#2c40f81449a4e554e9fc6396910ed4843ec2be50" integrity sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ== -"@emotion/react@11.1.3": - version "11.1.3" - resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.1.3.tgz#4a33f9bfdbcbe2d5449f5d44e48fca045b86dcc0" - integrity sha512-4kTKUm321key/capzff/AEIm8ow9IrcYltqaMQVdKlqMTUQpoO9GozDnDG1YXLYzgFnxYTZUbok3Z0vudylxiA== +"@emotion/react@11.1.4": + version "11.1.4" + resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.1.4.tgz#ddee4247627ff7dd7d0c6ae52f1cfd6b420357d2" + integrity sha512-9gkhrW8UjV4IGRnEe4/aGPkUxoGS23aD9Vu6JCGfEDyBYL+nGkkRBoMFGAzCT9qFdyUvQp4UUtErbKWxq/JS4A== dependencies: "@babel/runtime" "^7.7.2" "@emotion/cache" "^11.1.3" @@ -1952,10 +2199,10 @@ resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46" integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA== -"@eslint/eslintrc@^0.1.3": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.1.3.tgz#7d1a2b2358552cc04834c0979bd4275362e37085" - integrity sha512-4YVwPkANLeNtRjMekzux1ci8hIaH5eGKktGqR0d3LWsKNn5B2X/1Z6Trxy7jQXl9EBGE6Yj02O+t09FMeRllaA== +"@eslint/eslintrc@^0.2.2": + version "0.2.2" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.2.2.tgz#d01fc791e2fc33e88a29d6f3dc7e93d0cd784b76" + integrity sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ== dependencies: ajv "^6.12.4" debug "^4.1.1" @@ -1968,10 +2215,23 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" -"@google-cloud/common@^3.3.0": - version "3.4.1" - resolved "https://registry.yarnpkg.com/@google-cloud/common/-/common-3.4.1.tgz#a1920d73c38437923b4b134e245c392d36c442e9" - integrity sha512-e5z0CwsM0RXky+PnyPtQ3QK46ksqm+kE7kX8pm8X+ddBwZJipHchKeazMM5fLlGCS+AALalzXb+uYmH72TRnpQ== +"@fbe/editor@file:.yalc/@fbe/editor": + version "1.0.0" + dependencies: + "@pixi/basis" "^6.0.0-rc" + ajv "^6.12.2" + delaunator "^4.0.1" + eventemitter3 "^4.0.4" + keyboardjs "^2.5.1" + maxrects-packer "^2.6.0" + pako "^1.0.11" + pathfinding "^0.4.18" + pixi.js "^6.0.0-rc" + +"@google-cloud/common@^3.5.0": + version "3.5.0" + resolved "https://registry.yarnpkg.com/@google-cloud/common/-/common-3.5.0.tgz#0959e769e8075a06eb0823cc567eef00fd0c2d02" + integrity sha512-10d7ZAvKhq47L271AqvHEd8KzJqGU45TY+rwM2Z3JHuB070FeTi7oJJd7elfrnKaEvaktw3hH2wKnRWxk/3oWQ== dependencies: "@google-cloud/projectify" "^2.0.0" "@google-cloud/promisify" "^2.0.0" @@ -1983,16 +2243,16 @@ retry-request "^4.1.1" teeny-request "^7.0.0" -"@google-cloud/datastore@6.2.0": - version "6.2.0" - resolved "https://registry.yarnpkg.com/@google-cloud/datastore/-/datastore-6.2.0.tgz#44f05b6e7d29a347afb224051e9ac18e074a3a47" - integrity sha512-S/u6A8qj92NpUfuJPgwqFGMwwyVNy6eBoGCMrxaArkaooJp8uXhBfLz9giu0iCp0cOl4attNX/xYHsUrT4YoIQ== +"@google-cloud/datastore@6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@google-cloud/datastore/-/datastore-6.3.1.tgz#1fd78528fdabdb4aa128b8d81b98d0952daa6c00" + integrity sha512-p6W3g0Y7cEuMlwDUNzjAn/n6UFPZJJtcftl20MOAi2XUa5aL+RW5ydhIdrNPtvDQGx9wex6io8ifzqLxORgtMw== dependencies: "@google-cloud/promisify" "^2.0.0" arrify "^2.0.1" concat-stream "^2.0.0" extend "^3.0.2" - google-gax "^2.2.0" + google-gax "^2.9.2" is "^3.3.0" pumpify "^2.0.1" split-array-stream "^2.0.0" @@ -2021,10 +2281,10 @@ resolved "https://registry.yarnpkg.com/@google-cloud/promisify/-/promisify-2.0.3.tgz#f934b5cdc939e3c7039ff62b9caaf59a9d89e3a8" integrity sha512-d4VSA86eL/AFTe5xtyZX+ePUjE8dIFu2T8zmdeNBSa5/kNgXPCx/o/wbFNHAGLJdGnk1vddRuMESD9HbOC8irw== -"@google-cloud/pubsub@2.6.0": - version "2.6.0" - resolved "https://registry.yarnpkg.com/@google-cloud/pubsub/-/pubsub-2.6.0.tgz#e281c2c11744ee4593bad485127299c0db4f1543" - integrity sha512-NfF35l8Hi9k2BqrjweR4HWmfL4U3jL3HrX+rp46vEqjFgD+l7JXw4k4KpEzDYvFhHu3SxjH5e18+yW1b4/6hsA== +"@google-cloud/pubsub@2.7.0": + version "2.7.0" + resolved "https://registry.yarnpkg.com/@google-cloud/pubsub/-/pubsub-2.7.0.tgz#b5c9cf776cbccb5a2c6594318934c14eab7de405" + integrity sha512-wc/XOo5Ibo3GWmuaLu80EBIhXSdu2vf99HUqBbdsSSkmRNIka2HqoIhLlOFnnncQn0lZnGL7wtKGIDLoH9LiBg== dependencies: "@google-cloud/paginator" "^3.0.0" "@google-cloud/precise-date" "^2.0.0" @@ -2037,27 +2297,27 @@ arrify "^2.0.0" extend "^3.0.2" google-auth-library "^6.1.2" - google-gax "^2.7.0" + google-gax "^2.9.2" is-stream-ended "^0.1.4" lodash.snakecase "^4.1.1" p-defer "^3.0.0" -"@google-cloud/storage@5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@google-cloud/storage/-/storage-5.3.0.tgz#cf86683911cce68829e46de544abb41947d29da2" - integrity sha512-3t5UF3SZ14Bw2kcBHubCai6EIugU2GnQOstYWVSFuoO8IJ94RAaIOPq/dtexvQbUTpBTAGpd5smVR9WPL1mJVw== +"@google-cloud/storage@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@google-cloud/storage/-/storage-5.7.0.tgz#1cdbeeaab21f78b69de060c11b765c2b5591de91" + integrity sha512-6nPTylNaYWsVo5yHDdjQfUSh9qP/DFwahhyvOAf9CSDKfeoOys8+PAyHsoKyL29uyYoC6ymws7uJDO48y/SzBA== dependencies: - "@google-cloud/common" "^3.3.0" + "@google-cloud/common" "^3.5.0" "@google-cloud/paginator" "^3.0.0" "@google-cloud/promisify" "^2.0.0" arrify "^2.0.0" compressible "^2.0.12" - concat-stream "^2.0.0" date-and-time "^0.14.0" - duplexify "^3.5.0" + duplexify "^4.0.0" extend "^3.0.2" - gaxios "^3.0.0" + gaxios "^4.0.0" gcs-resumable-upload "^3.1.0" + get-stream "^6.0.0" hash-stream-validation "^0.2.2" mime "^2.2.0" mime-types "^2.0.8" @@ -2068,14 +2328,13 @@ stream-events "^1.0.1" xdg-basedir "^4.0.0" -"@grpc/grpc-js@~1.1.1": - version "1.1.7" - resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.1.7.tgz#d3d71c6da95397e2d63895ccc4a05e7572f7b7e6" - integrity sha512-EuxMstI0u778dp0nk6Fe3gHXYPeV6FYsWOe0/QFwxv1NQ6bc5Wl/0Yxa4xl9uBlKElL6AIxuASmSfu7KEJhqiw== +"@grpc/grpc-js@~1.2.0": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.2.2.tgz#ee4a7417fe15a686a8e369c36ec4c80678445c67" + integrity sha512-iK/T984Ni6VnmlQK/LJdUk+VsXSaYIWkgzJ0LyOcxN2SowAmoRjG28kS7B1ui/q/MAv42iM3051WBt5QorFxmg== dependencies: - "@grpc/proto-loader" "^0.6.0-pre14" "@types/node" "^12.12.47" - google-auth-library "^6.0.0" + google-auth-library "^6.1.1" semver "^6.2.0" "@grpc/proto-loader@^0.5.1": @@ -2086,17 +2345,6 @@ lodash.camelcase "^4.3.0" protobufjs "^6.8.6" -"@grpc/proto-loader@^0.6.0-pre14": - version "0.6.0-pre9" - resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.6.0-pre9.tgz#0c6fe42f6c5ef9ce1b3cef7be64d5b09d6fe4d6d" - integrity sha512-oM+LjpEjNzW5pNJjt4/hq1HYayNeQT+eGrOPABJnYHv7TyNPDNzkQ76rDYZF86X5swJOa4EujEMzQ9iiTdPgww== - dependencies: - "@types/long" "^4.0.1" - lodash.camelcase "^4.3.0" - long "^4.0.0" - protobufjs "^6.9.0" - yargs "^15.3.1" - "@hapi/accept@5.0.1": version "5.0.1" resolved "https://registry.yarnpkg.com/@hapi/accept/-/accept-5.0.1.tgz#068553e867f0f63225a506ed74e899441af53e10" @@ -2133,93 +2381,93 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== -"@jest/console@^26.5.2": - version "26.5.2" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.5.2.tgz#94fc4865b1abed7c352b5e21e6c57be4b95604a6" - integrity sha512-lJELzKINpF1v74DXHbCRIkQ/+nUV1M+ntj+X1J8LxCgpmJZjfLmhFejiMSbjjD66fayxl5Z06tbs3HMyuik6rw== +"@jest/console@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.6.2.tgz#4e04bc464014358b03ab4937805ee36a0aeb98f2" + integrity sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g== dependencies: - "@jest/types" "^26.5.2" + "@jest/types" "^26.6.2" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^26.5.2" - jest-util "^26.5.2" + jest-message-util "^26.6.2" + jest-util "^26.6.2" slash "^3.0.0" -"@jest/core@^26.2.2", "@jest/core@^26.5.3": - version "26.5.3" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.5.3.tgz#712ed4adb64c3bda256a3f400ff1d3eb2a031f13" - integrity sha512-CiU0UKFF1V7KzYTVEtFbFmGLdb2g4aTtY0WlyUfLgj/RtoTnJFhh50xKKr7OYkdmBUlGFSa2mD1TU3UZ6OLd4g== +"@jest/core@^26.6.3": + version "26.6.3" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.6.3.tgz#7639fcb3833d748a4656ada54bde193051e45fad" + integrity sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw== dependencies: - "@jest/console" "^26.5.2" - "@jest/reporters" "^26.5.3" - "@jest/test-result" "^26.5.2" - "@jest/transform" "^26.5.2" - "@jest/types" "^26.5.2" + "@jest/console" "^26.6.2" + "@jest/reporters" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" exit "^0.1.2" graceful-fs "^4.2.4" - jest-changed-files "^26.5.2" - jest-config "^26.5.3" - jest-haste-map "^26.5.2" - jest-message-util "^26.5.2" + jest-changed-files "^26.6.2" + jest-config "^26.6.3" + jest-haste-map "^26.6.2" + jest-message-util "^26.6.2" jest-regex-util "^26.0.0" - jest-resolve "^26.5.2" - jest-resolve-dependencies "^26.5.3" - jest-runner "^26.5.3" - jest-runtime "^26.5.3" - jest-snapshot "^26.5.3" - jest-util "^26.5.2" - jest-validate "^26.5.3" - jest-watcher "^26.5.2" + jest-resolve "^26.6.2" + jest-resolve-dependencies "^26.6.3" + jest-runner "^26.6.3" + jest-runtime "^26.6.3" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" + jest-watcher "^26.6.2" micromatch "^4.0.2" p-each-series "^2.1.0" rimraf "^3.0.0" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^26.5.2": - version "26.5.2" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.5.2.tgz#eba3cfc698f6e03739628f699c28e8a07f5e65fe" - integrity sha512-YjhCD/Zhkz0/1vdlS/QN6QmuUdDkpgBdK4SdiVg4Y19e29g4VQYN5Xg8+YuHjdoWGY7wJHMxc79uDTeTOy9Ngw== +"@jest/environment@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.6.2.tgz#ba364cc72e221e79cc8f0a99555bf5d7577cf92c" + integrity sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA== dependencies: - "@jest/fake-timers" "^26.5.2" - "@jest/types" "^26.5.2" + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" "@types/node" "*" - jest-mock "^26.5.2" + jest-mock "^26.6.2" -"@jest/fake-timers@^26.5.2": - version "26.5.2" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.5.2.tgz#1291ac81680ceb0dc7daa1f92c059307eea6400a" - integrity sha512-09Hn5Oraqt36V1akxQeWMVL0fR9c6PnEhpgLaYvREXZJAh2H2Y+QLCsl0g7uMoJeoWJAuz4tozk1prbR1Fc1sw== +"@jest/fake-timers@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.6.2.tgz#459c329bcf70cee4af4d7e3f3e67848123535aad" + integrity sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA== dependencies: - "@jest/types" "^26.5.2" + "@jest/types" "^26.6.2" "@sinonjs/fake-timers" "^6.0.1" "@types/node" "*" - jest-message-util "^26.5.2" - jest-mock "^26.5.2" - jest-util "^26.5.2" + jest-message-util "^26.6.2" + jest-mock "^26.6.2" + jest-util "^26.6.2" -"@jest/globals@^26.5.3": - version "26.5.3" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.5.3.tgz#90769b40e0af3fa0b28f6d8c5bbe3712467243fd" - integrity sha512-7QztI0JC2CuB+Wx1VdnOUNeIGm8+PIaqngYsZXQCkH2QV0GFqzAYc9BZfU0nuqA6cbYrWh5wkuMzyii3P7deug== +"@jest/globals@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.6.2.tgz#5b613b78a1aa2655ae908eba638cc96a20df720a" + integrity sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA== dependencies: - "@jest/environment" "^26.5.2" - "@jest/types" "^26.5.2" - expect "^26.5.3" + "@jest/environment" "^26.6.2" + "@jest/types" "^26.6.2" + expect "^26.6.2" -"@jest/reporters@^26.5.3": - version "26.5.3" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.5.3.tgz#e810e9c2b670f33f1c09e9975749260ca12f1c17" - integrity sha512-X+vR0CpfMQzYcYmMFKNY9n4jklcb14Kffffp7+H/MqitWnb0440bW2L76NGWKAa+bnXhNoZr+lCVtdtPmfJVOQ== +"@jest/reporters@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.6.2.tgz#1f518b99637a5f18307bd3ecf9275f6882a667f6" + integrity sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^26.5.2" - "@jest/test-result" "^26.5.2" - "@jest/transform" "^26.5.2" - "@jest/types" "^26.5.2" + "@jest/console" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" chalk "^4.0.0" collect-v8-coverage "^1.0.0" exit "^0.1.2" @@ -2230,63 +2478,63 @@ istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.0.2" - jest-haste-map "^26.5.2" - jest-resolve "^26.5.2" - jest-util "^26.5.2" - jest-worker "^26.5.0" + jest-haste-map "^26.6.2" + jest-resolve "^26.6.2" + jest-util "^26.6.2" + jest-worker "^26.6.2" slash "^3.0.0" source-map "^0.6.0" string-length "^4.0.1" terminal-link "^2.0.0" - v8-to-istanbul "^6.0.1" + v8-to-istanbul "^7.0.0" optionalDependencies: node-notifier "^8.0.0" -"@jest/source-map@^26.5.0": - version "26.5.0" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.5.0.tgz#98792457c85bdd902365cd2847b58fff05d96367" - integrity sha512-jWAw9ZwYHJMe9eZq/WrsHlwF8E3hM9gynlcDpOyCb9bR8wEd9ZNBZCi7/jZyzHxC7t3thZ10gO2IDhu0bPKS5g== +"@jest/source-map@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.6.2.tgz#29af5e1e2e324cafccc936f218309f54ab69d535" + integrity sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA== dependencies: callsites "^3.0.0" graceful-fs "^4.2.4" source-map "^0.6.0" -"@jest/test-result@^26.5.2": - version "26.5.2" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.5.2.tgz#cc1a44cfd4db2ecee3fb0bc4e9fe087aa54b5230" - integrity sha512-E/Zp6LURJEGSCWpoMGmCFuuEI1OWuI3hmZwmULV0GsgJBh7u0rwqioxhRU95euUuviqBDN8ruX/vP/4bwYolXw== +"@jest/test-result@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.6.2.tgz#55da58b62df134576cc95476efa5f7949e3f5f18" + integrity sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ== dependencies: - "@jest/console" "^26.5.2" - "@jest/types" "^26.5.2" + "@jest/console" "^26.6.2" + "@jest/types" "^26.6.2" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^26.5.3": - version "26.5.3" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.5.3.tgz#9ae0ab9bc37d5171b28424029192e50229814f8d" - integrity sha512-Wqzb7aQ13L3T47xHdpUqYMOpiqz6Dx2QDDghp5AV/eUDXR7JieY+E1s233TQlNyl+PqtqgjVokmyjzX/HA51BA== +"@jest/test-sequencer@^26.6.3": + version "26.6.3" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz#98e8a45100863886d074205e8ffdc5a7eb582b17" + integrity sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw== dependencies: - "@jest/test-result" "^26.5.2" + "@jest/test-result" "^26.6.2" graceful-fs "^4.2.4" - jest-haste-map "^26.5.2" - jest-runner "^26.5.3" - jest-runtime "^26.5.3" + jest-haste-map "^26.6.2" + jest-runner "^26.6.3" + jest-runtime "^26.6.3" -"@jest/transform@^26.2.2", "@jest/transform@^26.5.2": - version "26.5.2" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.5.2.tgz#6a0033a1d24316a1c75184d010d864f2c681bef5" - integrity sha512-AUNjvexh+APhhmS8S+KboPz+D3pCxPvEAGduffaAJYxIFxGi/ytZQkrqcKDUU0ERBAo5R7087fyOYr2oms1seg== +"@jest/transform@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b" + integrity sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA== dependencies: "@babel/core" "^7.1.0" - "@jest/types" "^26.5.2" + "@jest/types" "^26.6.2" babel-plugin-istanbul "^6.0.0" chalk "^4.0.0" convert-source-map "^1.4.0" fast-json-stable-stringify "^2.0.0" graceful-fs "^4.2.4" - jest-haste-map "^26.5.2" + jest-haste-map "^26.6.2" jest-regex-util "^26.0.0" - jest-util "^26.5.2" + jest-util "^26.6.2" micromatch "^4.0.2" pirates "^4.0.1" slash "^3.0.0" @@ -2303,7 +2551,7 @@ "@types/yargs" "^15.0.0" chalk "^3.0.0" -"@jest/types@^26.2.0", "@jest/types@^26.5.2": +"@jest/types@^26.5.2": version "26.5.2" resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.5.2.tgz#44c24f30c8ee6c7f492ead9ec3f3c62a5289756d" integrity sha512-QDs5d0gYiyetI8q+2xWdkixVQMklReZr4ltw7GFDtb4fuJIBCE6mzj2LnitGqCuAlLap6wPyb8fpoHgwZz5fdg== @@ -2325,36 +2573,37 @@ "@types/yargs" "^15.0.0" chalk "^4.0.0" -"@next/env@10.0.3": - version "10.0.3" - resolved "https://registry.yarnpkg.com/@next/env/-/env-10.0.3.tgz#ef1077d78bf500855576f83090d6fb1ec96272f8" - integrity sha512-xjJt2VXoSxAydskmt77nJuEtRL782E4ltaj5JtMzJ8YkNUMMu3d5ktpCR+Q3INKHF/RY6zHJ9QzyE3/s1ikbNg== +"@next/env@10.0.5": + version "10.0.5" + resolved "https://registry.yarnpkg.com/@next/env/-/env-10.0.5.tgz#446e59ee7a8d05061be784b24732c369653038ab" + integrity sha512-dw6Q7PALIo7nTFfaB4OnRDte3EikrApGtjX/4cRmYXLh+uudDI50aS39MaGeKKZ2mxPKoNiFcY6Slv1f6KIPOw== -"@next/polyfill-module@10.0.3": - version "10.0.3" - resolved "https://registry.yarnpkg.com/@next/polyfill-module/-/polyfill-module-10.0.3.tgz#507e99f6dd351dc4a6e45b63dbd397087ece459a" - integrity sha512-JaiycQZZbqViaMZgRGYcPIdCPDz+qRnqEGxbhQlrxyPaBaOtsrAEkGf1SS2wJZKa/ncxqWHMfSvizDcGcz/ygQ== +"@next/polyfill-module@10.0.5": + version "10.0.5" + resolved "https://registry.yarnpkg.com/@next/polyfill-module/-/polyfill-module-10.0.5.tgz#f2de3deee8694cc75094fea4e91225724b3a21e1" + integrity sha512-R6ySTTIl6yqyO3Xft7h+QR9Z4e6epEw+AGO125CrwPmCDQ8ASLGltsHYvSHBP7Eae7xaorkXHW0jeI8NewLpew== -"@next/react-dev-overlay@10.0.3": - version "10.0.3" - resolved "https://registry.yarnpkg.com/@next/react-dev-overlay/-/react-dev-overlay-10.0.3.tgz#99f3151677747d8be08a9314fa7ab3611e8161b8" - integrity sha512-ykiKeUhTsMRoyyYnx4jM8xeOPfKGqQ7xgx2dNXOu4tbPpdivzjJp2+K6+xnqhTmZ7uxfFBV+b1OE1ZzA8qyX5Q== +"@next/react-dev-overlay@10.0.5": + version "10.0.5" + resolved "https://registry.yarnpkg.com/@next/react-dev-overlay/-/react-dev-overlay-10.0.5.tgz#f0006e56d8c8b4269f341ff22233e4a7e1176b52" + integrity sha512-olqIaaRvFezzi02V/AYwvmrGbShUNrJDvyZTGNahxXEkiYsuu67llY5IKFM5Oya93/eRqaCCKMn89vpvYtvDcw== dependencies: - "@babel/code-frame" "7.10.4" - ally.js "1.4.1" + "@babel/code-frame" "7.12.11" anser "1.4.9" chalk "4.0.0" classnames "2.2.6" - data-uri-to-buffer "3.0.0" + css.escape "1.5.1" + data-uri-to-buffer "3.0.1" + platform "1.3.6" shell-quote "1.7.2" source-map "0.8.0-beta.0" stacktrace-parser "0.1.10" strip-ansi "6.0.0" -"@next/react-refresh-utils@10.0.3": - version "10.0.3" - resolved "https://registry.yarnpkg.com/@next/react-refresh-utils/-/react-refresh-utils-10.0.3.tgz#276bec60eae18768f96baf8a52f668f657f50ab4" - integrity sha512-XtzzPX2R4+MIyu1waEQUo2tiNwWVEkmObA6pboRCDTPOs4Ri8ckaIE08lN5A5opyF6GVN+IEq/J8KQrgsePsZQ== +"@next/react-refresh-utils@10.0.5": + version "10.0.5" + resolved "https://registry.yarnpkg.com/@next/react-refresh-utils/-/react-refresh-utils-10.0.5.tgz#c1ca664c4ffe2f79d14383323d783368833d503b" + integrity sha512-Eo+nvW1ZhdkuxBWSsKHGDLNspUaJJQClld9R+H+EtiIuAQtTa8f2rhcQeyUOtvUNQoPyq7Em2PwUqOQD6LOOMA== "@nodelib/fs.scandir@2.1.3": version "2.1.3" @@ -2437,38 +2686,27 @@ node-gyp "^7.1.0" read-package-json-fast "^1.1.3" -"@nrwl/cli@10.3.1": - version "10.3.1" - resolved "https://registry.yarnpkg.com/@nrwl/cli/-/cli-10.3.1.tgz#9a43e5c28cff1c4995249410079b39ea50190561" - integrity sha512-w3Qr6C0J0YeiewXfc5ccnRIS2JL1FblJJO6b6kb1w8tqyv7HPGJ1UVTfSEA7yjAbcCUEiNuW6EJuLr7IZ6vQvQ== +"@nrwl/cli@11.0.20": + version "11.0.20" + resolved "https://registry.yarnpkg.com/@nrwl/cli/-/cli-11.0.20.tgz#b9b53124d9735c889ea9321d60bcd2d45966481d" + integrity sha512-ss4eHruXeFWtbTUAV0AjwOLJHi/p23QN9LXTrX45wkT0qM+B1ysL/is3V1pItHkSNJr6Ab/m00lATGORqi0b7Q== dependencies: - "@nrwl/tao" "10.3.1" - chalk "2.4.2" - tmp "0.0.33" - yargs "15.4.1" - yargs-parser "20.0.0" - -"@nrwl/cli@11.0.16": - version "11.0.16" - resolved "https://registry.yarnpkg.com/@nrwl/cli/-/cli-11.0.16.tgz#adccd9685244cef03da286832e7b7b831f6809ad" - integrity sha512-Y60iokPwc8s2gUIquQScP1OdEj4fwo/GIvFi3YWAi7mBEXrFs2KnZucv2BNymyJrP3bQ7997fX6pRRPf37ZF7Q== - dependencies: - "@nrwl/tao" "11.0.16" + "@nrwl/tao" "11.0.20" chalk "4.1.0" tmp "0.0.33" yargs "15.4.1" yargs-parser "20.0.0" -"@nrwl/cypress@11.0.16": - version "11.0.16" - resolved "https://registry.yarnpkg.com/@nrwl/cypress/-/cypress-11.0.16.tgz#25a8f79e9a4971b85bedb2dffefda9f93f96bc81" - integrity sha512-PDZV9NUty7EjFpO1X2VdMoCZV0tM9OdIvBdQ5RUByJy+aWODvtmZGTdz1AVPIPmuCDkQr2KXfwDIrayuQwOwdw== +"@nrwl/cypress@11.0.20": + version "11.0.20" + resolved "https://registry.yarnpkg.com/@nrwl/cypress/-/cypress-11.0.20.tgz#2fdba30238ef5d140604e1e5394edb6858e47312" + integrity sha512-m9ou+4NVCr+zLwUuAFlF5sq4zfUkAvTO1zAASTx0wJgzEZJMosrQ13vKph6U4AUS7mGSgtPV+53MabwUppXqdQ== dependencies: "@angular-devkit/architect" "~0.1100.1" "@angular-devkit/core" "~11.0.1" "@angular-devkit/schematics" "~11.0.1" "@cypress/webpack-preprocessor" "~4.1.2" - "@nrwl/devkit" "11.0.16" + "@nrwl/devkit" "11.0.20" fork-ts-checker-webpack-plugin "^3.1.1" fs-extra "7.0.1" rxjs "^6.5.4" @@ -2479,74 +2717,76 @@ webpack-node-externals "1.7.2" yargs-parser "20.0.0" -"@nrwl/devkit@11.0.16": - version "11.0.16" - resolved "https://registry.yarnpkg.com/@nrwl/devkit/-/devkit-11.0.16.tgz#c982322a358cb41141884e08433eb6442b0e9101" - integrity sha512-bHrI4oS6TQS7yw346e0XyDl7Pejcb95/eosNGsRqfiZy472Z8YxUmripUK9FrIq9uvSh2W8YNcDirzmwYxI+uA== +"@nrwl/devkit@11.0.20": + version "11.0.20" + resolved "https://registry.yarnpkg.com/@nrwl/devkit/-/devkit-11.0.20.tgz#8793d2279680e049aa209810914a6eb3670f7625" + integrity sha512-enhdAZeC96ZQad9lciNtm7CGNjI8PUNme4J5/y2ZlGMShrqDaijag9yktVVkErfdizaXL4o2Rny7UFXSXdElEw== dependencies: - "@nrwl/tao" "11.0.16" + "@nrwl/tao" "11.0.20" ejs "^3.1.5" strip-json-comments "2.0.1" tslib "^2.0.0" -"@nrwl/eslint-plugin-nx@11.0.16": - version "11.0.16" - resolved "https://registry.yarnpkg.com/@nrwl/eslint-plugin-nx/-/eslint-plugin-nx-11.0.16.tgz#5c67ed8a2e1ff2495d4a071072137d957da34e17" - integrity sha512-HUsSB1cGNRnILnO7vGenVQqSQE45COuJHLOmUAOo0MIunyzXG68tmfgNtZMjJflMGXhuaGPZ2Qivf0VSx9govw== +"@nrwl/eslint-plugin-nx@11.0.20": + version "11.0.20" + resolved "https://registry.yarnpkg.com/@nrwl/eslint-plugin-nx/-/eslint-plugin-nx-11.0.20.tgz#d0103a780673cc87b94a6ae9c7fad150d4334a60" + integrity sha512-A7EZTJQE8h1OZ15dxp8bPZkGDfTCuHoSlT2nGjPDM3rDfks4cI8bzlfWHQq8kYXAlLLCOs+tBb2+MNchX7rMGQ== dependencies: "@angular-devkit/core" "~11.0.1" "@typescript-eslint/experimental-utils" "^4.3.0" confusing-browser-globals "^1.0.9" -"@nrwl/jest@11.0.16": - version "11.0.16" - resolved "https://registry.yarnpkg.com/@nrwl/jest/-/jest-11.0.16.tgz#1fad61e96d45ea5db9e4c2703931703e2c6def24" - integrity sha512-XgOQ/n3DzpIbtGtKTEK00rf40q6JvaxcojRVcQQbVYXg3jeil5GfOump1SEVXh6DY8kScTOyI6nhaMjb41dj9g== +"@nrwl/jest@11.0.20": + version "11.0.20" + resolved "https://registry.yarnpkg.com/@nrwl/jest/-/jest-11.0.20.tgz#d20936e21d9401edea7dbfb67571f76ef55787e8" + integrity sha512-K2a/tOLnYrLFZtbUhoMD51DZTPp+qfjYKBAd5hOCgErx1+Asw+LlIqEXxOZ3nj6vBBphH1OONEp9QCoVZKRA8w== dependencies: "@angular-devkit/architect" "~0.1100.1" "@angular-devkit/core" "~11.0.1" "@angular-devkit/schematics" "~11.0.1" - "@nrwl/devkit" "11.0.16" + "@nrwl/devkit" "11.0.20" jest-resolve "^26.6.2" rxjs "^6.5.4" strip-json-comments "2.0.1" tslib "^2.0.0" -"@nrwl/linter@11.0.16": - version "11.0.16" - resolved "https://registry.yarnpkg.com/@nrwl/linter/-/linter-11.0.16.tgz#ddd0658cd4aed4624430be5f5b6684ea17e3868a" - integrity sha512-DcGJv0gLy51/spzP0AqiP9GEX8PQCTFhJ/uGMSFzTxPGPyd1btq9GXt5Nchmyarvy630pZFvT7vmaarxXOAe/Q== +"@nrwl/linter@11.0.20": + version "11.0.20" + resolved "https://registry.yarnpkg.com/@nrwl/linter/-/linter-11.0.20.tgz#4ece0201a235972507d03830441133192823be00" + integrity sha512-euIIT36EuwIu2baNGK+xB4rXxpluvADtMWbY8iv5hkjdHgK0tvx/rNuHPxrrtiDxGQCAijqrzkR3PggtIJrbeg== dependencies: "@angular-devkit/architect" "~0.1100.1" glob "7.1.4" minimatch "3.0.4" tslib "^2.0.0" -"@nrwl/next@11.0.16": - version "11.0.16" - resolved "https://registry.yarnpkg.com/@nrwl/next/-/next-11.0.16.tgz#34c9664667421caba4da57a8e949fc2a15a1b7bd" - integrity sha512-xZGSxzhHG0oI1uqpSfpN50B7U3oRnsaF0760ggPt6GB9+37rK8PwiR9AdjwInzmrSyZnujEjTXHSdEN49sgvqQ== +"@nrwl/next@11.0.20": + version "11.0.20" + resolved "https://registry.yarnpkg.com/@nrwl/next/-/next-11.0.20.tgz#128aca63e0947c7af5e27ac2f4f6237b0e3f27e3" + integrity sha512-BUj8Xfm+4bIbpGkh/fhpwkXViMN2SFFp8Mj2CldGjRxjoxqNpM2pnxU/nZcROrtBMR9jN1MsE6FdGzK3wLJYug== dependencies: "@angular-devkit/core" "~11.0.1" "@angular-devkit/schematics" "~11.0.1" - "@nrwl/react" "11.0.16" - "@nrwl/web" "11.0.16" + "@nrwl/react" "11.0.20" + "@nrwl/web" "11.0.20" "@svgr/webpack" "^5.4.0" chalk "4.1.0" + copy-webpack-plugin "6.0.3" + fs-extra "7.0.1" url-loader "^3.0.0" -"@nrwl/node@11.0.16": - version "11.0.16" - resolved "https://registry.yarnpkg.com/@nrwl/node/-/node-11.0.16.tgz#9f3872e1a82661db8c6287c6e730b54242f2e579" - integrity sha512-WHZn9dGmTO7o/XsOft6231HJNQQ3X4AOMjSVu/tkrLlg3+LIjNU2QONUwrQiSz6Tgnytprtwk2akPzVg2uMcpA== +"@nrwl/node@11.0.20": + version "11.0.20" + resolved "https://registry.yarnpkg.com/@nrwl/node/-/node-11.0.20.tgz#a50c08db3a1b3a688e8b423135bed8c743008fca" + integrity sha512-abUYhn+AYXYhW2Is51e1cgwjDX7pU53UT0quAMvYLjemPjle0SMIStD5+ibQip+gJ9lZqpgo8wm307rOQSNO3g== dependencies: "@angular-devkit/architect" "~0.1100.1" "@angular-devkit/build-webpack" "~0.1100.1" "@angular-devkit/core" "~11.0.1" "@angular-devkit/schematics" "~11.0.1" - "@nrwl/devkit" "11.0.16" - "@nrwl/jest" "11.0.16" - "@nrwl/linter" "11.0.16" + "@nrwl/devkit" "11.0.20" + "@nrwl/jest" "11.0.20" + "@nrwl/linter" "11.0.20" circular-dependency-plugin "5.2.0" copy-webpack-plugin "6.0.3" fork-ts-checker-webpack-plugin "^3.1.1" @@ -2564,19 +2804,19 @@ webpack-merge "4.2.1" webpack-node-externals "1.7.2" -"@nrwl/react@11.0.16": - version "11.0.16" - resolved "https://registry.yarnpkg.com/@nrwl/react/-/react-11.0.16.tgz#c5a33bf315e7fdd76a27717a4d47217de532351e" - integrity sha512-aGHTBC/GnZgK9/o90+9q8ohVAisckIOrR5KhF4NzdLWArLT75nDEOu5TYbPLPUEsfSudoadB/ZEPP58ZtPZHIg== +"@nrwl/react@11.0.20": + version "11.0.20" + resolved "https://registry.yarnpkg.com/@nrwl/react/-/react-11.0.20.tgz#e4262b3fb4062c62b7bba0a8ca14749a7b31af0d" + integrity sha512-07yQHUEnOaBrq9KHLA2qMGKSLreWLljeAK9/M16eyBcTpkxoRkqFB/kdTcAsNwN6JbxVbnnVQN0GUF9b87tM+w== dependencies: "@angular-devkit/core" "~11.0.1" "@angular-devkit/schematics" "~11.0.1" "@babel/core" "7.9.6" "@babel/preset-react" "7.9.4" - "@nrwl/cypress" "11.0.16" - "@nrwl/devkit" "11.0.16" - "@nrwl/jest" "11.0.16" - "@nrwl/web" "11.0.16" + "@nrwl/cypress" "11.0.20" + "@nrwl/devkit" "11.0.20" + "@nrwl/jest" "11.0.20" + "@nrwl/web" "11.0.20" "@svgr/webpack" "^5.4.0" eslint-plugin-import "^2.20.1" eslint-plugin-jsx-a11y "^6.2.3" @@ -2584,26 +2824,10 @@ eslint-plugin-react-hooks "^2.4.0" url-loader "^3.0.0" -"@nrwl/tao@10.3.1": - version "10.3.1" - resolved "https://registry.yarnpkg.com/@nrwl/tao/-/tao-10.3.1.tgz#9f0522da4406ed696f2545f116d01af32b480b4e" - integrity sha512-kXJ/3l4yX7QBrfDTL4PDnQNOGrAnrt17j6xCvAvPdCp5fCHjFQLr5fOTalEt+7CuUQHslH1mOh44g7L8iw/UXw== - dependencies: - "@angular-devkit/architect" "~0.1001.3" - "@angular-devkit/core" "~10.1.3" - "@angular-devkit/schematics" "~10.1.3" - inquirer "^6.3.1" - minimist "^1.2.0" - semver "6.3.0" - strip-json-comments "2.0.1" - tmp "0.0.33" - tslib "^1.9.3" - yargs-parser "20.0.0" - -"@nrwl/tao@11.0.16": - version "11.0.16" - resolved "https://registry.yarnpkg.com/@nrwl/tao/-/tao-11.0.16.tgz#dd3d4bd070909b927bf9253cb4da36668d341f61" - integrity sha512-1Y4XWLNOoWfjYHBwYruSFxuyE4ZNvrXBOr/nerTmDgOmAXcVectMyR3ld/Jc1u0rc4iLOQ0ngbwf8thAcTjUeQ== +"@nrwl/tao@11.0.20": + version "11.0.20" + resolved "https://registry.yarnpkg.com/@nrwl/tao/-/tao-11.0.20.tgz#dfca062d81bcb1ddff03cfe9f99ba05786cc101d" + integrity sha512-S/jaeenZ0ueQZgz54AGhMtK1Obs6KTwsojfHdB+FiEve2ipBbKKeBZXXfeXlH2priH5ej5FhosCEV1DKqXLlUg== dependencies: "@angular-devkit/architect" "~0.1100.1" "@angular-devkit/core" "~11.0.1" @@ -2619,10 +2843,10 @@ tslib "^2.0.0" yargs-parser "20.0.0" -"@nrwl/web@11.0.16": - version "11.0.16" - resolved "https://registry.yarnpkg.com/@nrwl/web/-/web-11.0.16.tgz#4b5d2a3fdb4add94375aab29ea28714cf32339c5" - integrity sha512-45u0UkVxpx9yW4eOzdZPAer1jgLr3gmcOsmmy0TvHakWtmvnE6IM6qDCe5HegooKuukb+kNkvJyZ0NIS/VpfIQ== +"@nrwl/web@11.0.20": + version "11.0.20" + resolved "https://registry.yarnpkg.com/@nrwl/web/-/web-11.0.20.tgz#3a160e48d20dbce2a573884ca640e6f615e335a7" + integrity sha512-XYmF+m+4MRRdtCrpKrplm7NV9iYa3nweLINuLcwKTtFF5fCLwc1avmXdjHfffRnysZ+GWdH6Lv/aTl7ohq6vNQ== dependencies: "@angular-devkit/architect" "~0.1100.1" "@angular-devkit/build-optimizer" "~0.1100.1" @@ -2635,10 +2859,10 @@ "@babel/plugin-transform-regenerator" "7.8.7" "@babel/preset-env" "7.9.6" "@babel/preset-typescript" "7.10.4" - "@nrwl/cypress" "11.0.16" - "@nrwl/devkit" "11.0.16" - "@nrwl/jest" "11.0.16" - "@nrwl/linter" "11.0.16" + "@nrwl/cypress" "11.0.20" + "@nrwl/devkit" "11.0.20" + "@nrwl/jest" "11.0.20" + "@nrwl/linter" "11.0.20" "@rollup/plugin-babel" "5.0.2" "@rollup/plugin-commonjs" "11.0.2" "@rollup/plugin-image" "2.0.4" @@ -2718,16 +2942,16 @@ webpack-subresource-integrity "^1.5.1" worker-plugin "3.2.0" -"@nrwl/workspace@11.0.16": - version "11.0.16" - resolved "https://registry.yarnpkg.com/@nrwl/workspace/-/workspace-11.0.16.tgz#c8cb53385098d0b8399648193ef04f715981526a" - integrity sha512-tcP5FgzRo/JrHN38cawDo+ufFqi9L9D7qnCSuPZe3GMxdhuO4qdc23jwigBCFxTcGzq4GUyrIvJaMymoxwjXkQ== +"@nrwl/workspace@11.0.20": + version "11.0.20" + resolved "https://registry.yarnpkg.com/@nrwl/workspace/-/workspace-11.0.20.tgz#d36532e8041f018662e6e3eced17867c775b972f" + integrity sha512-tpT7mgKkLNh2ZCcmseyflcyxAA96/FCZHnPFrl65n79GVdy/ScyZ/cVArTR8QYloICg++41SB+jfEtJiOxMyeA== dependencies: "@angular-devkit/architect" "~0.1100.1" "@angular-devkit/core" "~11.0.1" "@angular-devkit/schematics" "~11.0.1" - "@nrwl/cli" "11.0.16" - "@nrwl/devkit" "11.0.16" + "@nrwl/cli" "11.0.20" + "@nrwl/devkit" "11.0.20" axios "0.19.2" chalk "4.1.0" cosmiconfig "^4.0.0" @@ -2749,6 +2973,13 @@ yargs "15.4.1" yargs-parser "20.0.0" +"@opentelemetry/api@0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-0.14.0.tgz#4e17d8d2f1da72b19374efa7b6526aa001267cae" + integrity sha512-L7RMuZr5LzMmZiQSQDy9O1jo0q+DaLy6XpYJfIGfYSfoJA5qzYwUP3sP1uMIQ549DvxAgM3ng85EaPTM/hUHwQ== + dependencies: + "@opentelemetry/context-base" "^0.14.0" + "@opentelemetry/api@^0.11.0": version "0.11.0" resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-0.11.0.tgz#e0f6d96b3754306e55fe6154d81ee048c7529fd6" @@ -2761,6 +2992,11 @@ resolved "https://registry.yarnpkg.com/@opentelemetry/context-base/-/context-base-0.11.0.tgz#60bb6daf0800b6a8aa9f48403a84825f3bb0b1d1" integrity sha512-ESRk+572bftles7CVlugAj5Azrz61VO0MO0TS2pE9MLVL/zGmWuUBQryART6/nsrFqo+v9HPt37GPNcECTZR1w== +"@opentelemetry/context-base@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/context-base/-/context-base-0.14.0.tgz#c67fc20a4d891447ca1a855d7d70fa79a3533001" + integrity sha512-sDOAZcYwynHFTbLo6n8kIbLiVF3a3BLkrmehJUyEbT9F+Smbi47kLGS2gG2g0fjBLR/Lr1InPD7kXL7FaTqEkw== + "@opentelemetry/core@^0.11.0": version "0.11.0" resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-0.11.0.tgz#4f1aacc825fa25bc1b0977a9983713f814e27f98" @@ -2794,6 +3030,341 @@ "@opentelemetry/resources" "^0.11.0" "@opentelemetry/semantic-conventions" "^0.11.0" +"@pixi/accessibility@6.0.0-rc": + version "6.0.0-rc" + resolved "https://registry.yarnpkg.com/@pixi/accessibility/-/accessibility-6.0.0-rc.tgz#d1e183802d87ca814acfeb43bb4697cb7958ed80" + integrity sha512-QnL3FF+Tyt2wuGC/iP4FbUtKkXk37FCAHENZY4cH3EdOJusZXuEuM1OJeqGCDkpqciMFUwZgryasfOgTvmZ9mQ== + dependencies: + "@pixi/core" "6.0.0-rc" + "@pixi/display" "6.0.0-rc" + "@pixi/utils" "6.0.0-rc" + +"@pixi/app@6.0.0-rc": + version "6.0.0-rc" + resolved "https://registry.yarnpkg.com/@pixi/app/-/app-6.0.0-rc.tgz#464afd7207e590325f6874106f14ad22e48406f2" + integrity sha512-em/R5rMEIfdUrr+DPIwd7yPfJXZnqZ3DtCWZCQaMC/vjIDnEvRa4kCoIe2ph6tJ6aNLXVi6kl+tc0lxiVAOQVw== + dependencies: + "@pixi/core" "6.0.0-rc" + "@pixi/display" "6.0.0-rc" + +"@pixi/basis@^6.0.0-rc": + version "6.0.0-rc" + resolved "https://registry.yarnpkg.com/@pixi/basis/-/basis-6.0.0-rc.tgz#b7fc4078127f481bb38f77ea70465d605b153a0f" + integrity sha512-hRTOtQIa3TaQb8uQUmIROkKcdR9V1+094DaMM1cQbcgUhM8PAG0d8YAyf27UeNVZ8RlrtJLm+PNnpJju5ROznw== + dependencies: + "@pixi/compressed-textures" "6.0.0-rc" + "@pixi/constants" "6.0.0-rc" + "@pixi/core" "6.0.0-rc" + "@pixi/loaders" "6.0.0-rc" + "@pixi/runner" "6.0.0-rc" + +"@pixi/compressed-textures@6.0.0-rc": + version "6.0.0-rc" + resolved "https://registry.yarnpkg.com/@pixi/compressed-textures/-/compressed-textures-6.0.0-rc.tgz#f9f54dec4e8e2ad6c697b1b0feada8a0174c17fe" + integrity sha512-v7MYb0wD9i2Awh8ZvVtiTXfbW2Ec3eD8MGnk26TWlsDm2LMuuu8+odbO7o4qL9le6JnyJumC8QtMIUgy36FbnA== + dependencies: + "@pixi/constants" "6.0.0-rc" + "@pixi/core" "6.0.0-rc" + "@pixi/loaders" "6.0.0-rc" + +"@pixi/constants@6.0.0-rc": + version "6.0.0-rc" + resolved "https://registry.yarnpkg.com/@pixi/constants/-/constants-6.0.0-rc.tgz#e631afdd3bff6d5948ba78c7b430a872e27f7e7e" + integrity sha512-3k4Q8ENLnSbPusqfWdhZIniBmRJ2MVDUhFY9xCIK5wYrxcG62y1sMVcK1ecSmrRV60glh7BJTT+k7TJBX/gVVA== + +"@pixi/core@6.0.0-rc": + version "6.0.0-rc" + resolved "https://registry.yarnpkg.com/@pixi/core/-/core-6.0.0-rc.tgz#46312b17bb79ae06525ce410979e0143b53172d4" + integrity sha512-aLjerTc649p0f4c2h5sJMMjyTOMZRqSLfa3PooKdSIqaHpqQ9aIv7rXfw1Msm4fykCSEXwGRXjrFiWNBKdYN5Q== + dependencies: + "@pixi/constants" "6.0.0-rc" + "@pixi/math" "6.0.0-rc" + "@pixi/runner" "6.0.0-rc" + "@pixi/settings" "6.0.0-rc" + "@pixi/ticker" "6.0.0-rc" + "@pixi/utils" "6.0.0-rc" + +"@pixi/display@6.0.0-rc": + version "6.0.0-rc" + resolved "https://registry.yarnpkg.com/@pixi/display/-/display-6.0.0-rc.tgz#4a78d8304477db3cf29205c7d66a9dc7e3d24bc8" + integrity sha512-yetJE+eUCIGdO70MCrg/wt0CNBUCL6YyywjV1p2TVmzDNihytdIlHb1F3iroZZIrbgwxaJWjXuPonTKz7anLpg== + dependencies: + "@pixi/math" "6.0.0-rc" + "@pixi/settings" "6.0.0-rc" + "@pixi/utils" "6.0.0-rc" + +"@pixi/extract@6.0.0-rc": + version "6.0.0-rc" + resolved "https://registry.yarnpkg.com/@pixi/extract/-/extract-6.0.0-rc.tgz#89138f5dbe993f67da6ca5f20fdfb5e83b17f5de" + integrity sha512-P7684qqJmFHwO4ZVcRXLpRY0skPNDj1KspDS50IlNeQZaPfSy1Dg9BPdayHvpy7SsQbSjgB7J/o8Fw3U+FwIOA== + dependencies: + "@pixi/core" "6.0.0-rc" + "@pixi/math" "6.0.0-rc" + "@pixi/utils" "6.0.0-rc" + +"@pixi/filter-alpha@6.0.0-rc": + version "6.0.0-rc" + resolved "https://registry.yarnpkg.com/@pixi/filter-alpha/-/filter-alpha-6.0.0-rc.tgz#0e0679132a8afa7a6e121082359638fd439664dd" + integrity sha512-WwmqGmYaZoUqmzxOzgWQtsOVLvNa25nNMrh7hiQQkL3hxKf+B2ckP648RIqMssa6KWKY8owQONwpTlafuH3dHA== + dependencies: + "@pixi/core" "6.0.0-rc" + +"@pixi/filter-blur@6.0.0-rc": + version "6.0.0-rc" + resolved "https://registry.yarnpkg.com/@pixi/filter-blur/-/filter-blur-6.0.0-rc.tgz#af4e5506dbbb644430902a8012f6ec085a97aaaf" + integrity sha512-PdLtShg+Vu9uorUW+MnKLQCHGw9B4t5drPkS+xFyBBI/m02vMSrHAquNaVUX7+rL4oBctBeU8azi5b7KrzXOZA== + dependencies: + "@pixi/core" "6.0.0-rc" + "@pixi/settings" "6.0.0-rc" + +"@pixi/filter-color-matrix@6.0.0-rc": + version "6.0.0-rc" + resolved "https://registry.yarnpkg.com/@pixi/filter-color-matrix/-/filter-color-matrix-6.0.0-rc.tgz#6d6af2f902def4c0334dd29da58a9e6e63a7d217" + integrity sha512-MC4LIhWThPua0753c2YeqZhAV+Nf8tUUCeBw6PSxB2IF54mf+q5bMexxvfVWBIo/FujOJxeOt/AXR+5BFkTZjw== + dependencies: + "@pixi/core" "6.0.0-rc" + +"@pixi/filter-displacement@6.0.0-rc": + version "6.0.0-rc" + resolved "https://registry.yarnpkg.com/@pixi/filter-displacement/-/filter-displacement-6.0.0-rc.tgz#0a4451708d1165f52a5f16f6565cbe56bea524c0" + integrity sha512-Y7dHhTeN0CkbgpZ5jmkuXjLZn2CMlsqA+Z175HroQdXlqLbR9qz7oDh2lqeELZ+eFhI7SiH3Xg2SA6JUJa/LQg== + dependencies: + "@pixi/core" "6.0.0-rc" + "@pixi/math" "6.0.0-rc" + +"@pixi/filter-fxaa@6.0.0-rc": + version "6.0.0-rc" + resolved "https://registry.yarnpkg.com/@pixi/filter-fxaa/-/filter-fxaa-6.0.0-rc.tgz#433ec862ae660c4955b63a146a29b6b8f11246ca" + integrity sha512-QBo7n/nddL8e8FyCo2evxYbUW142v3LxUZKX7HQv0iHKJpfNCMQwYLpjmMsDRnqzWO1PsQWABhxQRnex4ZEABQ== + dependencies: + "@pixi/core" "6.0.0-rc" + +"@pixi/filter-noise@6.0.0-rc": + version "6.0.0-rc" + resolved "https://registry.yarnpkg.com/@pixi/filter-noise/-/filter-noise-6.0.0-rc.tgz#d3a57c4082227eada595f172f99ca4a4fd1da527" + integrity sha512-7FrwUObMjaMQj35q44U9Y+AiB+mjYxyOEJ4s+11qFTlit+z4Ep8b8ooRi43/nJL1MSYDO19idhbEYs6oth3fvw== + dependencies: + "@pixi/core" "6.0.0-rc" + +"@pixi/graphics@6.0.0-rc": + version "6.0.0-rc" + resolved "https://registry.yarnpkg.com/@pixi/graphics/-/graphics-6.0.0-rc.tgz#3bad066cd47f21aacd396d7e6e7e20b1a81818d2" + integrity sha512-5rFCfGLIGstSSDVbM8GaoLk20g/CCwL2+ziaP7M7DWDQvAH61jVqYJTavVzV7IqkDEwVmMiAPN2fdWrVrinCdg== + dependencies: + "@pixi/constants" "6.0.0-rc" + "@pixi/core" "6.0.0-rc" + "@pixi/display" "6.0.0-rc" + "@pixi/math" "6.0.0-rc" + "@pixi/sprite" "6.0.0-rc" + "@pixi/utils" "6.0.0-rc" + +"@pixi/interaction@6.0.0-rc": + version "6.0.0-rc" + resolved "https://registry.yarnpkg.com/@pixi/interaction/-/interaction-6.0.0-rc.tgz#abe4d94d0e7e2e826c0764bb2274980d8b71deb4" + integrity sha512-3W2r9RLNSZK5yyEp4ZEIArjZ2ZIggT4SPOYaGxtjO8cxe/j5BsFREENZUsQTyH8+cnZvqtorIh8LfhVwkRUZ4A== + dependencies: + "@pixi/core" "6.0.0-rc" + "@pixi/display" "6.0.0-rc" + "@pixi/math" "6.0.0-rc" + "@pixi/ticker" "6.0.0-rc" + "@pixi/utils" "6.0.0-rc" + +"@pixi/loaders@6.0.0-rc": + version "6.0.0-rc" + resolved "https://registry.yarnpkg.com/@pixi/loaders/-/loaders-6.0.0-rc.tgz#d5bc3ed0922e65faf26973a6584f78ca824f47ec" + integrity sha512-qbcipAn2yEtNiLaHlPfLLvVpdhbctnykwR6ksNYAAXfgPz4yEj5Dppx4pVozOHrrxGb6m1kMW4+xCrNpDr7yEA== + dependencies: + "@pixi/constants" "6.0.0-rc" + "@pixi/core" "6.0.0-rc" + "@pixi/utils" "6.0.0-rc" + resource-loader "^3.0.1" + +"@pixi/math@6.0.0-rc": + version "6.0.0-rc" + resolved "https://registry.yarnpkg.com/@pixi/math/-/math-6.0.0-rc.tgz#6c29cfedb87309730d8a5afe18bd4d9a1135f5e2" + integrity sha512-krcpCTpvReoIPGfvQ0poVmqy17OLvzhEXBx06zH5HJDHGTISoD6nEZoR5sgAAwNDAuFL10Ec5iYIgwxPwj4WdA== + +"@pixi/mesh-extras@6.0.0-rc": + version "6.0.0-rc" + resolved "https://registry.yarnpkg.com/@pixi/mesh-extras/-/mesh-extras-6.0.0-rc.tgz#3fffb4ba102d33e3442c10d2e078da6923f6238c" + integrity sha512-QQt4rYmIhaO1iwZYPi3ae4QRZHiwi9d5rcBsIOWtRvNUIkEN3zp84CpT9sLoWmaniWh6EazrQwdeUXEsA18UzA== + dependencies: + "@pixi/constants" "6.0.0-rc" + "@pixi/core" "6.0.0-rc" + "@pixi/math" "6.0.0-rc" + "@pixi/mesh" "6.0.0-rc" + "@pixi/utils" "6.0.0-rc" + +"@pixi/mesh@6.0.0-rc": + version "6.0.0-rc" + resolved "https://registry.yarnpkg.com/@pixi/mesh/-/mesh-6.0.0-rc.tgz#64623104356035608d6a7abdd235d27cd66dda05" + integrity sha512-0RD2ZAMthmHwuA12vZVyLgePmvztjZnMcEMGWCPg/kXnA8DzlX4yMYYlLCV/LPkkN6PbbYW2+1ubpkm8v946Ew== + dependencies: + "@pixi/constants" "6.0.0-rc" + "@pixi/core" "6.0.0-rc" + "@pixi/display" "6.0.0-rc" + "@pixi/math" "6.0.0-rc" + "@pixi/settings" "6.0.0-rc" + "@pixi/utils" "6.0.0-rc" + +"@pixi/mixin-cache-as-bitmap@6.0.0-rc": + version "6.0.0-rc" + resolved "https://registry.yarnpkg.com/@pixi/mixin-cache-as-bitmap/-/mixin-cache-as-bitmap-6.0.0-rc.tgz#c754e3874e92ab2371057ea9b19ed808b0a24d6c" + integrity sha512-jDHgvcPNB+5oBlUM6oRopQXfUtHzJxq7xKSkqpTE7LQ8sWAim8O3tsCJCvUoRK8z6yyP/57TQKLJqhENDSjOpw== + dependencies: + "@pixi/core" "6.0.0-rc" + "@pixi/display" "6.0.0-rc" + "@pixi/math" "6.0.0-rc" + "@pixi/settings" "6.0.0-rc" + "@pixi/sprite" "6.0.0-rc" + "@pixi/utils" "6.0.0-rc" + +"@pixi/mixin-get-child-by-name@6.0.0-rc": + version "6.0.0-rc" + resolved "https://registry.yarnpkg.com/@pixi/mixin-get-child-by-name/-/mixin-get-child-by-name-6.0.0-rc.tgz#0a9f294b028af37dd9270db10ceda54cf22833e9" + integrity sha512-IRNcUfvnbbZyOGD9p31j1Y/W3mjG4zfPiRGKzP01swovHB9BD9yFAp3t8K/G27tZ1zrbyfOCrsLZ/CeYVigLWg== + dependencies: + "@pixi/display" "6.0.0-rc" + +"@pixi/mixin-get-global-position@6.0.0-rc": + version "6.0.0-rc" + resolved "https://registry.yarnpkg.com/@pixi/mixin-get-global-position/-/mixin-get-global-position-6.0.0-rc.tgz#86f4ccc509cd1bad05dd211446dc3ec577be5a94" + integrity sha512-xkRmH8qY/33h7+Qu0REFmVEiyabL2kMozarnv4763w6mM3eveaPAcA7sRzg7tZ0Tuqu+TpU3liuRt8icOCdt8w== + dependencies: + "@pixi/display" "6.0.0-rc" + "@pixi/math" "6.0.0-rc" + +"@pixi/particles@6.0.0-rc": + version "6.0.0-rc" + resolved "https://registry.yarnpkg.com/@pixi/particles/-/particles-6.0.0-rc.tgz#a1b900122bc991f710db1f1225897967cfb585ac" + integrity sha512-CaY+y/eihZPCf4mPg8UALfwr0Kpmwtf6YVODDCBqgvCJcx97VsLYvueHd7B9sDPEo2bfNc2emlmWjsy+yYShZw== + dependencies: + "@pixi/constants" "6.0.0-rc" + "@pixi/core" "6.0.0-rc" + "@pixi/display" "6.0.0-rc" + "@pixi/math" "6.0.0-rc" + "@pixi/utils" "6.0.0-rc" + +"@pixi/polyfill@6.0.0-rc": + version "6.0.0-rc" + resolved "https://registry.yarnpkg.com/@pixi/polyfill/-/polyfill-6.0.0-rc.tgz#ef96bafed2e7933c08aa820f9294675ce9b07999" + integrity sha512-i+hSqyS4WkOBfpgofXby5I2qXmn1FHF31ecasEdyqL3w5JTOKAFPBzLek3msikGfoyDSFiAlIUd9roqJGOKUYA== + dependencies: + object-assign "^4.1.1" + promise-polyfill "^8.2.0" + +"@pixi/prepare@6.0.0-rc": + version "6.0.0-rc" + resolved "https://registry.yarnpkg.com/@pixi/prepare/-/prepare-6.0.0-rc.tgz#cc15f2186f9b275615dac42d675f51a2ad1621fb" + integrity sha512-yvM2cOGOY6/8WB516tV2TXunMGnKcH2gqWoIdrcByN+eK/dVhUzfUXGU0Zpbza3BZTPUpXpZmC9w46OBfWfyYg== + dependencies: + "@pixi/core" "6.0.0-rc" + "@pixi/display" "6.0.0-rc" + "@pixi/graphics" "6.0.0-rc" + "@pixi/settings" "6.0.0-rc" + "@pixi/text" "6.0.0-rc" + "@pixi/ticker" "6.0.0-rc" + +"@pixi/runner@6.0.0-rc": + version "6.0.0-rc" + resolved "https://registry.yarnpkg.com/@pixi/runner/-/runner-6.0.0-rc.tgz#f10a07fcff5d8c84a33f51924c119fcfd959c5bf" + integrity sha512-oYLI0H0jY5py7fMBa6VcG6vr4OJ4vcKL6zy0dtYdpEt27PeMax5vboB5utWJTzFHhZEd4JjckU8P/KPhzESOZQ== + +"@pixi/settings@6.0.0-rc": + version "6.0.0-rc" + resolved "https://registry.yarnpkg.com/@pixi/settings/-/settings-6.0.0-rc.tgz#3b4433a5d52db3f9650a5a91d5c26cf8ea07d469" + integrity sha512-H2KOLSB+W8qpoiNWQ2u4urFev1du/Rc7twDRAEhKML8nn5lnMAf04N2DpyIiUgcv+aL7go7AMvln/CdNmVb5cQ== + dependencies: + ismobilejs "^1.1.0" + +"@pixi/sprite-animated@6.0.0-rc": + version "6.0.0-rc" + resolved "https://registry.yarnpkg.com/@pixi/sprite-animated/-/sprite-animated-6.0.0-rc.tgz#d21b4b18dcf716547ef16d896cade168bf1cc695" + integrity sha512-sVgM7lYn6pPDB7S4XGRfzBO+GeMsmczJtUxUkjg4hGvL3aBaAq+WfZKGIsOPz/VueASEht16+LdFbcpMQil0Zg== + dependencies: + "@pixi/core" "6.0.0-rc" + "@pixi/sprite" "6.0.0-rc" + "@pixi/ticker" "6.0.0-rc" + +"@pixi/sprite-tiling@6.0.0-rc": + version "6.0.0-rc" + resolved "https://registry.yarnpkg.com/@pixi/sprite-tiling/-/sprite-tiling-6.0.0-rc.tgz#e1e7ef14b98af669d311253c1fd265d97abd49f3" + integrity sha512-rlxXLwUlvPTabfKC32sCQ+xSOl1dqKNsy5GXF0FtKb5MotIWa1N70dQzdMix8Fcp3mUMuqstgyPu8Umd2DKbDw== + dependencies: + "@pixi/constants" "6.0.0-rc" + "@pixi/core" "6.0.0-rc" + "@pixi/display" "6.0.0-rc" + "@pixi/math" "6.0.0-rc" + "@pixi/sprite" "6.0.0-rc" + "@pixi/utils" "6.0.0-rc" + +"@pixi/sprite@6.0.0-rc": + version "6.0.0-rc" + resolved "https://registry.yarnpkg.com/@pixi/sprite/-/sprite-6.0.0-rc.tgz#42b1b6073ca8c52f8b3d1acb20609d020b9c30c8" + integrity sha512-+pC+5/+5p4TqOg1W+qAXep5X4zKT2vsM8eqiWCEIP4YTJG9jxYtKUqCBICmq/6irBuesaCcz6hPg4qz24a8B3A== + dependencies: + "@pixi/constants" "6.0.0-rc" + "@pixi/core" "6.0.0-rc" + "@pixi/display" "6.0.0-rc" + "@pixi/math" "6.0.0-rc" + "@pixi/settings" "6.0.0-rc" + "@pixi/utils" "6.0.0-rc" + +"@pixi/spritesheet@6.0.0-rc": + version "6.0.0-rc" + resolved "https://registry.yarnpkg.com/@pixi/spritesheet/-/spritesheet-6.0.0-rc.tgz#89ad9e19c85b5fd9163a208d9dc298c0bed54275" + integrity sha512-GaqbYsJda940QRorWsVgSNar/P0yQ/HtLwdQMIUZJknOA/9EG9maN0/Fbfr9BWORId59xr5mTB0BB9pM2FbItA== + dependencies: + "@pixi/core" "6.0.0-rc" + "@pixi/loaders" "6.0.0-rc" + "@pixi/math" "6.0.0-rc" + "@pixi/utils" "6.0.0-rc" + +"@pixi/text-bitmap@6.0.0-rc": + version "6.0.0-rc" + resolved "https://registry.yarnpkg.com/@pixi/text-bitmap/-/text-bitmap-6.0.0-rc.tgz#d77c33f1137050921be61cad86798207cf17777f" + integrity sha512-gARTclSk34VNvOehg9RXcRSqq5gCRND/ly2ehIaCeDMJXZvl9tmgsKr4rx3/DyHYt9yg+W9ti1La/ovv7Et6ew== + dependencies: + "@pixi/core" "6.0.0-rc" + "@pixi/display" "6.0.0-rc" + "@pixi/loaders" "6.0.0-rc" + "@pixi/math" "6.0.0-rc" + "@pixi/mesh" "6.0.0-rc" + "@pixi/settings" "6.0.0-rc" + "@pixi/text" "6.0.0-rc" + "@pixi/utils" "6.0.0-rc" + +"@pixi/text@6.0.0-rc": + version "6.0.0-rc" + resolved "https://registry.yarnpkg.com/@pixi/text/-/text-6.0.0-rc.tgz#9da493b6dfb48726630ca6819e83f97aa46cf957" + integrity sha512-AwUJLkXkoN6ncHx1nyU8yV4TLqj4Xr7z+gEDXJ75Fbn4noo01om5rCKmtEkUoqiqwtzmX6zHeMc+KOp1fBIAOQ== + dependencies: + "@pixi/core" "6.0.0-rc" + "@pixi/math" "6.0.0-rc" + "@pixi/settings" "6.0.0-rc" + "@pixi/sprite" "6.0.0-rc" + "@pixi/utils" "6.0.0-rc" + +"@pixi/ticker@6.0.0-rc": + version "6.0.0-rc" + resolved "https://registry.yarnpkg.com/@pixi/ticker/-/ticker-6.0.0-rc.tgz#4b7d5b60fcf1f92a3965da5338f7a2fc27c6fa4c" + integrity sha512-t1Yc8TYpGFgMZC0D7y1APnEYgNiVHbppXa4hftDRGbQ3tJzNhJRG3dMP4dbdr9w+/uPogIT3o/ezGVSRtHlM+A== + dependencies: + "@pixi/settings" "6.0.0-rc" + +"@pixi/utils@6.0.0-rc": + version "6.0.0-rc" + resolved "https://registry.yarnpkg.com/@pixi/utils/-/utils-6.0.0-rc.tgz#13fac1f1d4c3c0da22580da6bdc7fbebca3b9280" + integrity sha512-QPagDgToe3nA0k7GLF86KL74G5iKFU0ggi5QtLY34Y36CdA5GteTdlgs3WqUECnOnOw6sUlFXxb4VYTaFKZ8Fw== + dependencies: + "@pixi/constants" "6.0.0-rc" + "@pixi/settings" "6.0.0-rc" + "@types/earcut" "^2.1.0" + "@types/node" "^12.0.0" + earcut "^2.2.2" + eventemitter3 "^3.1.0" + url "^0.11.0" + "@popperjs/core@2.4.4": version "2.4.4" resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.4.4.tgz#11d5db19bd178936ec89cd84519c4de439574398" @@ -2961,18 +3532,6 @@ dependencies: "@sinonjs/commons" "^1.7.0" -"@sqltools/formatter@1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@sqltools/formatter/-/formatter-1.2.2.tgz#9390a8127c0dcba61ebd7fdcc748655e191bdd68" - integrity sha512-/5O7Fq6Vnv8L6ucmPjaWbVG1XkP4FO+w5glqfkIsq3Xw4oyNAdJddbnYodNDAfjVUvo/rrSCTom4kAND7T1o5Q== - -"@styled-system/core@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@styled-system/core/-/core-5.1.2.tgz#b8b7b86455d5a0514f071c4fa8e434b987f6a772" - integrity sha512-XclBDdNIy7OPOsN4HBsawG2eiWfCcuFt6gxKn1x4QfMIgeO6TOlA2pZZ5GWZtIhCUqEPTgIBta6JXsGyCkLBYw== - dependencies: - object-assign "^4.1.1" - "@svgr/babel-plugin-add-jsx-attribute@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz#81ef61947bb268eb9d50523446f9c638fb355906" @@ -3076,27 +3635,27 @@ "@svgr/plugin-svgo" "^5.4.0" loader-utils "^2.0.0" -"@testing-library/dom@^7.17.1": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.26.0.tgz#da4d052dc426a4ccc916303369c6e7552126f680" - integrity sha512-fyKFrBbS1IigaE3FV21LyeC7kSGF84lqTlSYdKmGaHuK2eYQ/bXVPM5vAa2wx/AU1iPD6oQHsxy2QQ17q9AMCg== +"@testing-library/dom@^7.28.1": + version "7.29.2" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.29.2.tgz#6cba65d961d8b36d621a98caa8537444075fb42e" + integrity sha512-CBMELfyY1jKdtLcSRmEnZWRzRkCRVSNPTzhzrn8wY8OnzUo7Pe/W+HgLzt4TDnWIPYeusHBodf9wUjJF48kPmA== dependencies: "@babel/code-frame" "^7.10.4" - "@babel/runtime" "^7.10.3" + "@babel/runtime" "^7.12.5" "@types/aria-query" "^4.2.0" aria-query "^4.2.2" chalk "^4.1.0" - dom-accessibility-api "^0.5.1" + dom-accessibility-api "^0.5.4" lz-string "^1.4.4" - pretty-format "^26.4.2" + pretty-format "^26.6.2" -"@testing-library/react@10.4.1": - version "10.4.1" - resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-10.4.1.tgz#d38dee4abab172c06f6cf8894c51190e6c503f61" - integrity sha512-QX31fRDGLnOdBYoQ95VEOYgRahaPfsI+toOaYhlvuGNFQrcagZv/KLWCIctRGB0h1PTsQt3JpLBbbLGM63yy5Q== +"@testing-library/react@11.2.2": + version "11.2.2" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-11.2.2.tgz#099c6c195140ff069211143cb31c0f8337bdb7b7" + integrity sha512-jaxm0hwUjv+hzC+UFEywic7buDC9JQ1q3cDsrWVSDAPmLotfA6E6kUHlYm/zOeGCac6g48DR36tFHxl7Zb+N5A== dependencies: - "@babel/runtime" "^7.10.3" - "@testing-library/dom" "^7.17.1" + "@babel/runtime" "^7.12.5" + "@testing-library/dom" "^7.28.1" "@tootallnate/once@1": version "1.1.2" @@ -3155,6 +3714,11 @@ dependencies: "@types/node" "*" +"@types/earcut@^2.1.0": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@types/earcut/-/earcut-2.1.1.tgz#573a0af609f17005c751f6f4ffec49cfe358ea51" + integrity sha512-w8oigUCDjElRHRRrMvn/spybSMyX8MTkKA5Dv+tS1IE/TgmNZPqUYtvYBXGY8cieSE66gm+szeK+bnbxC2xHTQ== + "@types/estree@*": version "0.0.45" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.45.tgz#e9387572998e5ecdac221950dab3e8c3b16af884" @@ -3214,13 +3778,13 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/jest@26.0.8": - version "26.0.8" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.8.tgz#f5c5559cf25911ce227f7ce30f1f160f24966369" - integrity sha512-eo3VX9jGASSuv680D4VQ89UmuLZneNxv2MCZjfwlInav05zXVJTzfc//lavdV0GPwSxsXJTy2jALscB7Acqg0g== +"@types/jest@26.0.20": + version "26.0.20" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.20.tgz#cd2f2702ecf69e86b586e1f5223a60e454056307" + integrity sha512-9zi2Y+5USJRxd0FsahERhBwlcvFh6D2GLQnY2FH2BzK8J9s9omvNHIbvABwIluXa0fD8XVKMLTO0aOEuUfACAA== dependencies: - jest-diff "^25.2.1" - pretty-format "^25.2.1" + jest-diff "^26.0.0" + pretty-format "^26.0.0" "@types/jest@26.x": version "26.0.14" @@ -3279,6 +3843,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.14.tgz#f7fd5f3cc8521301119f63910f0fb965c7d761ae" integrity sha512-UHnOPWVWV1z+VV8k6L1HhG7UbGBgIdghqF3l9Ny9ApPghbjICXkUJSd/b9gOgQfjM1r+37cipdw/HJ3F6ICEnQ== +"@types/node@^12.0.0": + version "12.19.12" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.19.12.tgz#04793c2afa4ce833a9972e4c476432e30f9df47b" + integrity sha512-UwfL2uIU9arX/+/PRcIkT08/iBadGN2z6ExOROA2Dh5mAuWTBj6iJbQX4nekiV5H8cTrEG569LeX+HRco9Cbxw== + "@types/node@^12.12.47": version "12.12.68" resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.68.tgz#dd5acf4a52a458ff1d9ef4fd66406fba0afbbb33" @@ -3324,10 +3893,10 @@ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== -"@types/puppeteer@3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/puppeteer/-/puppeteer-3.0.2.tgz#20085220593b560c7332b6d46aecaf81ae263540" - integrity sha512-JRuHPSbHZBadOxxFwpyZPeRlpPTTeMbQneMdpFd8LXdyNfFSiX950CGewdm69g/ipzEAXAmMyFF1WOWJOL/nKw== +"@types/puppeteer@5.4.2": + version "5.4.2" + resolved "https://registry.yarnpkg.com/@types/puppeteer/-/puppeteer-5.4.2.tgz#80f3a1f54dedbbf750779716de81401549062072" + integrity sha512-yjbHoKjZFOGqA6bIEI2dfBE5UPqU0YGWzP+ipDVP1iGzmlhksVKTBVZfT3Aj3wnvmcJ2PQ9zcncwOwyavmafBw== dependencies: "@types/node" "*" @@ -3336,10 +3905,10 @@ resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24" integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug== -"@types/react-dom@16.9.8": - version "16.9.8" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.9.8.tgz#fe4c1e11dfc67155733dfa6aa65108b4971cb423" - integrity sha512-ykkPQ+5nFknnlU6lDd947WbQ6TE3NNzbQAkInC2EKY1qeYdTKp7onFusmYZb+ityzx2YviqT6BXSu+LyWWJwcA== +"@types/react-dom@17.0.0": + version "17.0.0" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.0.tgz#b3b691eb956c4b3401777ee67b900cb28415d95a" + integrity sha512-lUqY7OlkF/RbNtD5nIq7ot8NquXrdFrjSOR6+w9a9RFQevGi1oZO1dcJbXMeONAPKtZ2UrZOEJ5UOCVsxbLk/g== dependencies: "@types/react" "*" @@ -3351,10 +3920,10 @@ "@types/prop-types" "*" csstype "^3.0.2" -"@types/react@16.9.53": - version "16.9.53" - resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.53.tgz#40cd4f8b8d6b9528aedd1fff8fcffe7a112a3d23" - integrity sha512-4nW60Sd4L7+WMXH1D6jCdVftuW7j4Za6zdp6tJ33Rqv0nk1ZAmQKML9ZLD4H0dehA3FZxXR/GM8gXplf82oNGw== +"@types/react@17.0.0": + version "17.0.0" + resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.0.tgz#5af3eb7fad2807092f0046a1302b7823e27919b8" + integrity sha512-aj/L7RIMsRlWML3YB6KZiXB3fV2t41+5RBGYF8z+tAKU43Px8C3cYUZsDvf1/+Bm4FK21QWBrDutu8ZJ/70qOw== dependencies: "@types/prop-types" "*" csstype "^3.0.2" @@ -3366,14 +3935,19 @@ dependencies: "@types/node" "*" -"@types/sharp@0.26.0": - version "0.26.0" - resolved "https://registry.yarnpkg.com/@types/sharp/-/sharp-0.26.0.tgz#2fa8419dbdaca8dd38f73888b27b207f188a8669" - integrity sha512-oJrR8eiwpL7qykn2IeFRduXM4za7z+7yOUEbKVtuDQ/F6htDLHYO6IbzhaJQHV5n6O3adIh4tJvtgPyLyyydqg== +"@types/sharp@0.27.1": + version "0.27.1" + resolved "https://registry.yarnpkg.com/@types/sharp/-/sharp-0.27.1.tgz#26212ceb191b3de654a898a06577869afc200c57" + integrity sha512-RbYmyPjDUzi3lI9Qm68I+82I+DNOe/jW5w+EC1FvpT/f2TYXDG6mmPZQQohy98ufq+u6OB6pQkqpcNMDxzVclg== dependencies: "@types/node" "*" -"@types/sizzle@2.3.2": +"@types/sinonjs__fake-timers@^6.0.1": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-6.0.2.tgz#3a84cf5ec3249439015e14049bd3161419bf9eae" + integrity sha512-dIPoZ3g5gcx9zZEszaxLSVTvMReD3xxyyDnQUjA6IYDG9Ba2AV0otMPs+77sG9ojB4Qr2N2Vk5RnKeuA0X/0bg== + +"@types/sizzle@^2.3.2": version "2.3.2" resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.2.tgz#a811b8c18e2babab7d542b3365887ae2e4d9de47" integrity sha512-7EJYyKTL7tFR8+gDbB6Wwz/arpGa0Mywk1TJbNzKzHtzbwVmY4HR9WqS5VV7dsBUKQmPNr192jHr/VpBluj/hg== @@ -3412,10 +3986,10 @@ "@types/source-list-map" "*" source-map "^0.6.1" -"@types/ws@7.2.7": - version "7.2.7" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.2.7.tgz#362ad1a1d62721bdb725e72c8cccf357078cf5a3" - integrity sha512-UUFC/xxqFLP17hTva8/lVT0SybLUrfSD9c+iapKb0fEiC8uoDbA+xuZ3pAN603eW+bY8ebSMLm9jXdIPnD0ZgA== +"@types/ws@7.4.0": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.0.tgz#499690ea08736e05a8186113dac37769ab251a0e" + integrity sha512-Y29uQ3Uy+58bZrFLhX36hcI3Np37nqWE7ky5tjiDoy1GDZnIwVxS0CgF+s+1bXMzjKBFy+fqaRfb708iNzdinw== dependencies: "@types/node" "*" @@ -3438,28 +4012,28 @@ dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@4.3.0": - version "4.3.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.3.0.tgz#1a23d904bf8ea248d09dc3761af530d90f39c8fa" - integrity sha512-RqEcaHuEKnn3oPFislZ6TNzsBLqpZjN93G69SS+laav/I8w/iGMuMq97P0D2/2/kW4SCebHggqhbcCfbDaaX+g== +"@typescript-eslint/eslint-plugin@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.12.0.tgz#00d1b23b40b58031e6d7c04a5bc6c1a30a2e834a" + integrity sha512-wHKj6q8s70sO5i39H2g1gtpCXCvjVszzj6FFygneNFyIAxRvNSVz9GML7XpqrB9t7hNutXw+MHnLN/Ih6uyB8Q== dependencies: - "@typescript-eslint/experimental-utils" "4.3.0" - "@typescript-eslint/scope-manager" "4.3.0" + "@typescript-eslint/experimental-utils" "4.12.0" + "@typescript-eslint/scope-manager" "4.12.0" debug "^4.1.1" functional-red-black-tree "^1.0.1" regexpp "^3.0.0" semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/experimental-utils@4.3.0": - version "4.3.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.3.0.tgz#3f3c6c508e01b8050d51b016e7f7da0e3aefcb87" - integrity sha512-cmmIK8shn3mxmhpKfzMMywqiEheyfXLV/+yPDnOTvQX/ztngx7Lg/OD26J8gTZfkLKUmaEBxO2jYP3keV7h2OQ== +"@typescript-eslint/experimental-utils@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.12.0.tgz#372838e76db76c9a56959217b768a19f7129546b" + integrity sha512-MpXZXUAvHt99c9ScXijx7i061o5HEjXltO+sbYfZAAHxv3XankQkPaNi5myy0Yh0Tyea3Hdq1pi7Vsh0GJb0fA== dependencies: "@types/json-schema" "^7.0.3" - "@typescript-eslint/scope-manager" "4.3.0" - "@typescript-eslint/types" "4.3.0" - "@typescript-eslint/typescript-estree" "4.3.0" + "@typescript-eslint/scope-manager" "4.12.0" + "@typescript-eslint/types" "4.12.0" + "@typescript-eslint/typescript-estree" "4.12.0" eslint-scope "^5.0.0" eslint-utils "^2.0.0" @@ -3475,23 +4049,23 @@ eslint-scope "^5.0.0" eslint-utils "^2.0.0" -"@typescript-eslint/parser@4.3.0": - version "4.3.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.3.0.tgz#684fc0be6551a2bfcb253991eec3c786a8c063a3" - integrity sha512-JyfRnd72qRuUwItDZ00JNowsSlpQGeKfl9jxwO0FHK1qQ7FbYdoy5S7P+5wh1ISkT2QyAvr2pc9dAemDxzt75g== +"@typescript-eslint/parser@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.12.0.tgz#e1cf30436e4f916c31fcc962158917bd9e9d460a" + integrity sha512-9XxVADAo9vlfjfoxnjboBTxYOiNY93/QuvcPgsiKvHxW6tOZx1W4TvkIQ2jB3k5M0pbFP5FlXihLK49TjZXhuQ== dependencies: - "@typescript-eslint/scope-manager" "4.3.0" - "@typescript-eslint/types" "4.3.0" - "@typescript-eslint/typescript-estree" "4.3.0" + "@typescript-eslint/scope-manager" "4.12.0" + "@typescript-eslint/types" "4.12.0" + "@typescript-eslint/typescript-estree" "4.12.0" debug "^4.1.1" -"@typescript-eslint/scope-manager@4.3.0": - version "4.3.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.3.0.tgz#c743227e087545968080d2362cfb1273842cb6a7" - integrity sha512-cTeyP5SCNE8QBRfc+Lgh4Xpzje46kNUhXYfc3pQWmJif92sjrFuHT9hH4rtOkDTo/si9Klw53yIr+djqGZS1ig== +"@typescript-eslint/scope-manager@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.12.0.tgz#beeb8beca895a07b10c593185a5612f1085ef279" + integrity sha512-QVf9oCSVLte/8jvOsxmgBdOaoe2J0wtEmBr13Yz0rkBNkl5D8bfnf6G4Vhox9qqMIoG7QQoVwd2eG9DM/ge4Qg== dependencies: - "@typescript-eslint/types" "4.3.0" - "@typescript-eslint/visitor-keys" "4.3.0" + "@typescript-eslint/types" "4.12.0" + "@typescript-eslint/visitor-keys" "4.12.0" "@typescript-eslint/scope-manager@4.4.1": version "4.4.1" @@ -3501,23 +4075,23 @@ "@typescript-eslint/types" "4.4.1" "@typescript-eslint/visitor-keys" "4.4.1" -"@typescript-eslint/types@4.3.0": - version "4.3.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.3.0.tgz#1f0b2d5e140543e2614f06d48fb3ae95193c6ddf" - integrity sha512-Cx9TpRvlRjOppGsU6Y6KcJnUDOelja2NNCX6AZwtVHRzaJkdytJWMuYiqi8mS35MRNA3cJSwDzXePfmhU6TANw== +"@typescript-eslint/types@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.12.0.tgz#fb891fe7ccc9ea8b2bbd2780e36da45d0dc055e5" + integrity sha512-N2RhGeheVLGtyy+CxRmxdsniB7sMSCfsnbh8K/+RUIXYYq3Ub5+sukRCjVE80QerrUBvuEvs4fDhz5AW/pcL6g== "@typescript-eslint/types@4.4.1": version "4.4.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.4.1.tgz#c507b35cf523bc7ba00aae5f75ee9b810cdabbc1" integrity sha512-KNDfH2bCyax5db+KKIZT4rfA8rEk5N0EJ8P0T5AJjo5xrV26UAzaiqoJCxeaibqc0c/IvZxp7v2g3difn2Pn3w== -"@typescript-eslint/typescript-estree@4.3.0": - version "4.3.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.3.0.tgz#0edc1068e6b2e4c7fdc54d61e329fce76241cee8" - integrity sha512-ZAI7xjkl+oFdLV/COEz2tAbQbR3XfgqHEGy0rlUXzfGQic6EBCR4s2+WS3cmTPG69aaZckEucBoTxW9PhzHxxw== +"@typescript-eslint/typescript-estree@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.12.0.tgz#3963418c850f564bdab3882ae23795d115d6d32e" + integrity sha512-gZkFcmmp/CnzqD2RKMich2/FjBTsYopjiwJCroxqHZIY11IIoN0l5lKqcgoAPKHt33H2mAkSfvzj8i44Jm7F4w== dependencies: - "@typescript-eslint/types" "4.3.0" - "@typescript-eslint/visitor-keys" "4.3.0" + "@typescript-eslint/types" "4.12.0" + "@typescript-eslint/visitor-keys" "4.12.0" debug "^4.1.1" globby "^11.0.1" is-glob "^4.0.1" @@ -3539,12 +4113,12 @@ semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/visitor-keys@4.3.0": - version "4.3.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.3.0.tgz#0e5ab0a09552903edeae205982e8521e17635ae0" - integrity sha512-xZxkuR7XLM6RhvLkgv9yYlTcBHnTULzfnw4i6+z2TGBLy9yljAypQaZl9c3zFvy7PNI7fYWyvKYtohyF8au3cw== +"@typescript-eslint/visitor-keys@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.12.0.tgz#a470a79be6958075fa91c725371a83baf428a67a" + integrity sha512-hVpsLARbDh4B9TKYz5cLbcdMIOAoBYgFPCSP9FFS/liSF+b33gVNq8JHY3QGhHNVz85hObvL7BEYLlgx553WCw== dependencies: - "@typescript-eslint/types" "4.3.0" + "@typescript-eslint/types" "4.12.0" eslint-visitor-keys "^2.0.0" "@typescript-eslint/visitor-keys@4.4.1": @@ -3889,7 +4463,7 @@ acorn-globals@^6.0.0: acorn "^7.1.1" acorn-walk "^7.1.1" -acorn-jsx@^5.2.0: +acorn-jsx@^5.2.0, acorn-jsx@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== @@ -3966,17 +4540,7 @@ ajv@6.10.2: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@6.12.4: - version "6.12.4" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.4.tgz#0614facc4522127fa713445c6bfd3ebd376e2234" - integrity sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@6.12.6, ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: +ajv@6.12.6, ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -3986,13 +4550,15 @@ ajv@6.12.6, ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@ json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ally.js@1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/ally.js/-/ally.js-1.4.1.tgz#9fb7e6ba58efac4ee9131cb29aa9ee3b540bcf1e" - integrity sha1-n7fmuljvrE7pExyymqnuO1QLzx4= +ajv@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-7.0.3.tgz#13ae747eff125cafb230ac504b2406cf371eece2" + integrity sha512-R50QRlXSxqXcQP5SvKUrw8VZeypvo12i2IX0EeR5PiZ7bEKeHWgzgo264LDadUsCU42lTJVhFikTqJwNeH34gQ== dependencies: - css.escape "^1.5.0" - platform "1.3.3" + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" alphanum-sort@^1.0.0: version "1.0.2" @@ -4087,7 +4653,7 @@ any-observable@^0.3.0: resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" integrity sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog== -any-promise@^1.0.0: +any-promise@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= @@ -4108,20 +4674,15 @@ anymatch@^3.0.3, anymatch@~3.1.1: normalize-path "^3.0.0" picomatch "^2.0.4" -app-root-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-3.0.0.tgz#210b6f43873227e18a4b810a032283311555d5ad" - integrity sha512-qMcx+Gy2UZynHjOHOIXPNvpf+9cjvk3cWrBBK7zg4gH9+clobJRb9NGzcT7mQTcV/6Gm/1WelUtqxVXnNlrwcw== - aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== -arch@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/arch/-/arch-2.1.1.tgz#8f5c2731aa35a30929221bb0640eed65175ec84e" - integrity sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg== +arch@^2.1.2: + version "2.2.0" + resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11" + integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== are-we-there-yet@~1.1.2: version "1.1.5" @@ -4188,6 +4749,11 @@ array-flatten@^2.1.0: resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== +array-flatten@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-3.0.0.tgz#6428ca2ee52c7b823192ec600fa3ed2f157cd541" + integrity sha512-zPMVc3ZYlGLNk4mpK1NzP2wg0ml9t7fUgDsayR5Y5rSzxQilzR9FGu/EH2jQOcKSAeAfWeylyW8juy3OkWRvNA== + array-includes@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348" @@ -4197,6 +4763,17 @@ array-includes@^3.1.1: es-abstract "^1.17.0" is-string "^1.0.5" +array-includes@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.2.tgz#a8db03e0b88c8c6aeddc49cb132f9bcab4ebf9c8" + integrity sha512-w2GspexNQpx+PutG3QpT437/BenZBj0M/MZGn5mzv/MofYqo0xmRHzn4lFsoDlWJ+THYsGJmFlW68WlDFx7VRw== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + get-intrinsic "^1.0.1" + is-string "^1.0.5" + array-union@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" @@ -4291,10 +4868,10 @@ ast-types@0.13.2: resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.2.tgz#df39b677a911a83f3a049644fb74fdded23cea48" integrity sha512-uWMHxJxtfj/1oZClOxDEV1sQ1HCDkA4MG8Gr69KKeBjEVH0R84WlejZ0y2DcwyBlpAEMltmVYkVgqfLFb2oyiA== -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== async-each@^1.0.1: version "1.0.3" @@ -4318,7 +4895,7 @@ async@^2.5.0, async@^2.6.2: dependencies: lodash "^4.17.14" -async@^3.1.0: +async@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720" integrity sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw== @@ -4328,6 +4905,11 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + atob@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" @@ -4361,6 +4943,11 @@ axe-core@^3.5.4: resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-3.5.5.tgz#84315073b53fa3c0c51676c588d59da09a192227" integrity sha512-5P0QZ6J5xGikH780pghEdbEKijCTrruK9KxtPZCFWUpef0f6GipO+xEZ5GKCb020mmqgbiNO6TcA55CriL784Q== +axe-core@^4.0.2: + version "4.1.1" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.1.1.tgz#70a7855888e287f7add66002211a423937063eaf" + integrity sha512-5Kgy8Cz6LPC9DJcNb3yjAXTu3XihQgEdnIg50c//zOC/MyLP0Clg+Y8Sh9ZjjnvBrDZU4DgXS9C3T9r4/scGZQ== + axios@0.19.2: version "0.19.2" resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27" @@ -4368,7 +4955,7 @@ axios@0.19.2: dependencies: follow-redirects "1.5.10" -axobject-query@^2.1.2: +axobject-query@^2.1.2, axobject-query@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== @@ -4382,30 +4969,16 @@ babel-code-frame@^6.22.0: esutils "^2.0.2" js-tokens "^3.0.2" -babel-jest@26.2.2: - version "26.2.2" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.2.2.tgz#70f618f2d7016ed71b232241199308985462f812" - integrity sha512-JmLuePHgA+DSOdOL8lPxCgD2LhPPm+rdw1vnxR73PpIrnmKCS2/aBhtkAcxQWuUcW2hBrH8MJ3LKXE7aWpNZyA== +babel-jest@26.6.3, babel-jest@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056" + integrity sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA== dependencies: - "@jest/transform" "^26.2.2" - "@jest/types" "^26.2.0" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" "@types/babel__core" "^7.1.7" babel-plugin-istanbul "^6.0.0" - babel-preset-jest "^26.2.0" - chalk "^4.0.0" - graceful-fs "^4.2.4" - slash "^3.0.0" - -babel-jest@^26.5.2: - version "26.5.2" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.5.2.tgz#164f367a35946c6cf54eaccde8762dec50422250" - integrity sha512-U3KvymF3SczA3vOL/cgiUFOznfMET+XDIXiWnoJV45siAp2pLMG8i2+/MGZlAC3f/F6Q40LR4M4qDrWZ9wkK8A== - dependencies: - "@jest/transform" "^26.5.2" - "@jest/types" "^26.5.2" - "@types/babel__core" "^7.1.7" - babel-plugin-istanbul "^6.0.0" - babel-preset-jest "^26.5.0" + babel-preset-jest "^26.6.2" chalk "^4.0.0" graceful-fs "^4.2.4" slash "^3.0.0" @@ -4447,10 +5020,10 @@ babel-plugin-istanbul@^6.0.0: istanbul-lib-instrument "^4.0.0" test-exclude "^6.0.0" -babel-plugin-jest-hoist@^26.5.0: - version "26.5.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.5.0.tgz#3916b3a28129c29528de91e5784a44680db46385" - integrity sha512-ck17uZFD3CDfuwCLATWZxkkuGGFhMij8quP8CNhwj8ek1mqFgbFzRJ30xwC04LLscj/aKsVFfRST+b5PT7rSuw== +babel-plugin-jest-hoist@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz#8185bd030348d254c6d7dd974355e6a28b21e62d" + integrity sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw== dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" @@ -4489,10 +5062,10 @@ babel-plugin-transform-react-remove-prop-types@0.4.24: resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz#f2edaf9b4c6a5fbe5c1d678bfb531078c1555f3a" integrity sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA== -babel-preset-current-node-syntax@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.4.tgz#826f1f8e7245ad534714ba001f84f7e906c3b615" - integrity sha512-5/INNCYhUGqw7VbVjT/hb3ucjgkVHKXY7lX3ZjlN4gm565VyFmJUrJ/h+h16ECVB38R/9SF6aACydpKMLZ/c9w== +babel-preset-current-node-syntax@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" + integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== dependencies: "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-bigint" "^7.8.3" @@ -4505,14 +5078,20 @@ babel-preset-current-node-syntax@^0.1.3: "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-jest@^26.2.0, babel-preset-jest@^26.5.0: - version "26.5.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.5.0.tgz#f1b166045cd21437d1188d29f7fba470d5bdb0e7" - integrity sha512-F2vTluljhqkiGSJGBg/jOruA8vIIIL11YrxRcO7nviNTMbbofPSHwnm8mgP7d/wS7wRSexRoI6X1A6T74d4LQA== +babel-preset-jest@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee" + integrity sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ== dependencies: - babel-plugin-jest-hoist "^26.5.0" - babel-preset-current-node-syntax "^0.1.3" + babel-plugin-jest-hoist "^26.6.2" + babel-preset-current-node-syntax "^1.0.0" + +babylon@^7.0.0-beta.39: + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.47.tgz#6d1fa44f0abec41ab7c780481e62fd9aafbdea80" + integrity sha512-+rq2cr4GDhtToEzKFD6KZZMDBXhjFAr9JjPw9pAppZACeEWqNM294j+NdBzkSHYXwzzBmVjZ3nEVJlOhbR2gOQ== bail@^1.0.0: version "1.0.5" @@ -4600,12 +5179,17 @@ bl@^4.0.3: inherits "^2.0.4" readable-stream "^3.4.0" +blob-util@2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/blob-util/-/blob-util-2.0.2.tgz#3b4e3c281111bb7f11128518006cdc60b403a1eb" + integrity sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ== + bluebird@3.7.1: version "3.7.1" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.1.tgz#df70e302b471d7473489acf26a93d63b53f874de" integrity sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg== -bluebird@3.7.2, bluebird@^3.5.5: +bluebird@^3.5.5, bluebird@^3.7.2: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== @@ -4796,6 +5380,17 @@ browserslist@^4.0.0, browserslist@^4.11.1, browserslist@^4.12.0, browserslist@^4 escalade "^3.1.0" node-releases "^1.1.61" +browserslist@^4.14.5, browserslist@^4.16.0: + version "4.16.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.1.tgz#bf757a2da376b3447b800a16f0f1c96358138766" + integrity sha512-UXhDrwqsNcpTYJBTZsbGATDxZbiVDsx6UjpmRUmtnP10pr8wAYr5LgFoEFw9ixriQH2mv/NX2SfGzE/o8GndLA== + dependencies: + caniuse-lite "^1.0.30001173" + colorette "^1.2.1" + electron-to-chromium "^1.3.634" + escalade "^3.1.1" + node-releases "^1.1.69" + browserslist@^4.14.6: version "4.16.0" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.0.tgz#410277627500be3cb28a1bfe037586fbedf9488b" @@ -4831,7 +5426,7 @@ buffer-equal-constant-time@1.0.1: resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= -buffer-from@1.x, buffer-from@^1.0.0, buffer-from@^1.1.1: +buffer-from@1.x, buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== @@ -5007,11 +5602,19 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" -cachedir@2.3.0: +cachedir@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8" integrity sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw== +call-bind@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.0.tgz#24127054bb3f9bdcb4b1fb82418186072f77b8ce" + integrity sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.0" + caller-callsite@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" @@ -5071,6 +5674,11 @@ caniuse-lite@^1.0.30001154, caniuse-lite@^1.0.30001165: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001170.tgz#0088bfecc6a14694969e391cc29d7eb6362ca6a7" integrity sha512-Dd4d/+0tsK0UNLrZs3CvNukqalnVTRrxb5mcQm8rHL49t7V5ZaTygwXkrq+FB+dVDf++4ri8eJnFEJAB8332PA== +caniuse-lite@^1.0.30001173: + version "1.0.30001173" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001173.tgz#3c47bbe3cd6d7a9eda7f50ac016d158005569f56" + integrity sha512-R3aqmjrICdGCTAnSXtNyvWYMK3YtV5jwudbq0T7nN9k4kmE4CBuwPqyJ+KBzepSTh0huivV2gLbSMEzTTmfeYw== + capture-exit@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" @@ -5113,7 +5721,7 @@ chalk@4.1.0, chalk@^4.0.0, chalk@^4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: +chalk@^1.0.0, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= @@ -5157,12 +5765,12 @@ chardet@^0.7.0: resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== -check-more-types@2.24.0: +check-more-types@^2.24.0: version "2.24.0" resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600" integrity sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA= -chokidar@3.4.3, "chokidar@>=2.0.0 <4.0.0", chokidar@^3.3.0, chokidar@^3.4.1: +chokidar@3.4.3, "chokidar@>=2.0.0 <4.0.0", chokidar@^3.3.0: version "3.4.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.3.tgz#c1df38231448e45ca4ac588e6c79573ba6a57d5b" integrity sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ== @@ -5196,6 +5804,21 @@ chokidar@^2.1.8: optionalDependencies: fsevents "^1.2.7" +chokidar@^3.4.1: + version "3.5.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.0.tgz#458a4816a415e9d3b3caa4faec2b96a6935a9e65" + integrity sha512-JgQM9JS92ZbFR4P90EvmzNpSGhpPBGBSj10PILeDyYFwp4h2/D9OM03wsJ4zW1fEp4ka2DGrnUeD7FuvQ2aZ2Q== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.5.0" + optionalDependencies: + fsevents "~2.3.1" + chownr@^1.1.1, chownr@^1.1.2: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" @@ -5231,6 +5854,11 @@ circular-dependency-plugin@5.2.0: resolved "https://registry.yarnpkg.com/circular-dependency-plugin/-/circular-dependency-plugin-5.2.0.tgz#e09dbc2dd3e2928442403e2d45b41cea06bc0a93" integrity sha512-7p4Kn/gffhQaavNfyDFg7LS5S/UT1JAjyGd4UqR2+jzoYF02eDkj0Ec3+48TsIa4zghjLY87nQHIh/ecK9qLdw== +cjs-module-lexer@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f" + integrity sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw== + class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" @@ -5284,23 +5912,21 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" -cli-highlight@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.4.tgz#098cb642cf17f42adc1c1145e07f960ec4d7522b" - integrity sha512-s7Zofobm20qriqDoU9sXptQx0t2R9PEgac92mENNm7xaEe1hn71IIMsXMK+6encA6WRCWWxIGQbipr3q998tlQ== - dependencies: - chalk "^3.0.0" - highlight.js "^9.6.0" - mz "^2.4.0" - parse5 "^5.1.1" - parse5-htmlparser2-tree-adapter "^5.1.1" - yargs "^15.0.0" - cli-spinners@^2.4.0: version "2.5.0" resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.5.0.tgz#12763e47251bf951cb75c201dfa58ff1bcb2d047" integrity sha512-PC+AmIuK04E6aeSs/pUccSujsTzBhu4HzC2dL+CfJB/Jcc2qTRbEwZQDfIUpt2Xl8BodYBEq8w4fc0kU2I9DjQ== +cli-table3@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.0.tgz#b7b1bc65ca8e7b5cef9124e13dc2b21e2ce4faee" + integrity sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ== + dependencies: + object-assign "^4.1.0" + string-width "^4.2.0" + optionalDependencies: + colors "^1.1.2" + cli-truncate@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" @@ -5332,15 +5958,6 @@ cliui@^6.0.0: strip-ansi "^6.0.0" wrap-ansi "^6.2.0" -cliui@^7.0.2: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.3.tgz#ef180f26c8d9bff3927ee52428bfec2090427981" - integrity sha512-Gj3QHTkVMPKqwP3f7B4KPkBZRMR9r4rfi5bXFpg1a+Svvj8l7q5CnkBkVQzfxT5DFSsGk2+PascOgL0JYkL2kw== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - clone-deep@^0.2.4: version "0.2.4" resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-0.2.4.tgz#4e73dd09e9fb971cc38670c5dced9c1896481cc6" @@ -5435,7 +6052,7 @@ color-string@^1.5.4: color-name "^1.0.0" simple-swizzle "^0.2.2" -color@^3.0.0, color@^3.1.2: +color@^3.0.0, color@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/color/-/color-3.1.3.tgz#ca67fb4e7b97d611dcde39eceed422067d91596e" integrity sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ== @@ -5448,7 +6065,7 @@ colorette@^1.1.0, colorette@^1.2.1: resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== -colors@^1.4.0: +colors@^1.1.2, colors@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== @@ -5460,17 +6077,17 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.0.tgz#545983a0603fe425bc672d66c9e3c89c42121a83" - integrity sha512-NIQrwvv9V39FHgGFm36+U9SMQzbiHvU79k+iADraJTpmrFFfx7Ds0IvDoAdZsDrknlkRk14OYoWXb57uTh7/sw== - commander@^2.12.1, commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -common-tags@1.8.0: +commander@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" + integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== + +common-tags@^1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" integrity sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw== @@ -5522,7 +6139,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -concat-stream@1.6.2, concat-stream@^1.5.0: +concat-stream@^1.5.0, concat-stream@^1.6.2: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== @@ -5674,6 +6291,14 @@ core-js-compat@^3.6.2: browserslist "^4.8.5" semver "7.0.0" +core-js-compat@^3.8.0: + version "3.8.2" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.8.2.tgz#3717f51f6c3d2ebba8cbf27619b57160029d1d4c" + integrity sha512-LO8uL9lOIyRRrQmZxHZFl1RV+ZbcsAkFWTktn5SmH40WgLtSNYN4m4W2v9ONT147PxBY/XrRhrWq8TlvObyUjQ== + dependencies: + browserslist "^4.16.0" + semver "7.0.0" + core-js-pure@^3.0.0: version "3.6.5" resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.5.tgz#c79e75f5e38dbc85a662d91eea52b8256d53b813" @@ -5761,13 +6386,6 @@ create-require@^1.1.0: resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== -cross-fetch@3.0.5: - version "3.0.5" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.0.5.tgz#2739d2981892e7ab488a7ad03b92df2816e03f4c" - integrity sha512-FFLcLtraisj5eteosnX1gf01qYDCOc4fDy0+euOt8Kn9YBY2NtXL/pCoYPavw24NIQkQqm5ZOLsGD5Zzj0gyew== - dependencies: - node-fetch "2.6.0" - cross-fetch@3.0.6: version "3.0.6" resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.0.6.tgz#3a4040bc8941e653e0e9cf17f29ebcd177d3365c" @@ -5939,7 +6557,7 @@ css-what@^3.2.1: resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== -css.escape@^1.5.0: +css.escape@1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" integrity sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s= @@ -5995,14 +6613,6 @@ cssnano-preset-default@^4.0.7: postcss-svgo "^4.0.2" postcss-unique-selectors "^4.0.1" -cssnano-preset-simple@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/cssnano-preset-simple/-/cssnano-preset-simple-1.2.0.tgz#afcf13eb076e8ebd91c4f311cd449781c14c7371" - integrity sha512-zojGlY+KasFeQT/SnD/WqYXHcKddz2XHRDtIwxrWpGqGHp5IyLWsWFS3UW7pOf3AWvfkpYSRdxOSlYuJPz8j8g== - dependencies: - caniuse-lite "^1.0.30001093" - postcss "^7.0.32" - cssnano-preset-simple@1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/cssnano-preset-simple/-/cssnano-preset-simple-1.2.1.tgz#8976013114b1fc4718253d30f21aaed1780fb80e" @@ -6011,14 +6621,6 @@ cssnano-preset-simple@1.2.1: caniuse-lite "^1.0.30001093" postcss "^7.0.32" -cssnano-simple@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/cssnano-simple/-/cssnano-simple-1.2.0.tgz#b8cc5f52c2a52e6513b4636d0da165ec9d48d327" - integrity sha512-pton9cZ70/wOCWMAbEGHO1ACsW1KggTB6Ikj7k71uOEsz6SfByH++86+WAmXjRSc9q/g9gxkpFP9bDX9vRotdA== - dependencies: - cssnano-preset-simple "1.2.0" - postcss "^7.0.32" - cssnano-simple@1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/cssnano-simple/-/cssnano-simple-1.2.1.tgz#6de5d9dd75774bc8f31767573410a952c7dd8a12" @@ -6093,46 +6695,49 @@ cyclist@^1.0.1: resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= -cypress@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/cypress/-/cypress-4.1.0.tgz#295f115d2e8a08fff2760ab49d94d876f5877aee" - integrity sha512-FFV8pS9iuriSX4M9rna6awJUhiqozZD1D5z5BprCUJoho1ctbcgpkEUIUnqxli2OwjQqVz07egO+iqoGL+tw7g== +cypress@6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/cypress/-/cypress-6.2.1.tgz#27d5fbcf008c698c390fdb0c03441804176d06c4" + integrity sha512-OYkSgzA4J4Q7eMjZvNf5qWpBLR4RXrkqjL3UZ1UzGGLAskO0nFTi/RomNTG6TKvL3Zp4tw4zFY1gp5MtmkCZrA== dependencies: - "@cypress/listr-verbose-renderer" "0.4.1" - "@cypress/xvfb" "1.2.4" - "@types/sizzle" "2.3.2" - arch "2.1.1" - bluebird "3.7.2" - cachedir "2.3.0" - chalk "2.4.2" - check-more-types "2.24.0" - commander "4.1.0" - common-tags "1.8.0" - debug "4.1.1" - eventemitter2 "4.1.2" - execa "1.0.0" - executable "4.1.1" - extract-zip "1.6.7" - fs-extra "8.1.0" - getos "3.1.4" - is-ci "2.0.0" - is-installed-globally "0.1.0" - lazy-ass "1.6.0" - listr "0.14.3" - lodash "4.17.15" - log-symbols "3.0.0" - minimist "1.2.0" - moment "2.24.0" - ospath "1.2.2" - pretty-bytes "5.3.0" - ramda "0.26.1" - request "2.88.0" - request-progress "3.0.0" - supports-color "7.1.0" - tmp "0.1.0" - untildify "4.0.0" - url "0.11.0" - yauzl "2.10.0" + "@cypress/listr-verbose-renderer" "^0.4.1" + "@cypress/request" "^2.88.5" + "@cypress/xvfb" "^1.2.4" + "@types/sinonjs__fake-timers" "^6.0.1" + "@types/sizzle" "^2.3.2" + arch "^2.1.2" + blob-util "2.0.2" + bluebird "^3.7.2" + cachedir "^2.3.0" + chalk "^4.1.0" + check-more-types "^2.24.0" + cli-table3 "~0.6.0" + commander "^5.1.0" + common-tags "^1.8.0" + debug "^4.1.1" + eventemitter2 "^6.4.2" + execa "^4.0.2" + executable "^4.1.1" + extract-zip "^1.7.0" + fs-extra "^9.0.1" + getos "^3.2.1" + is-ci "^2.0.0" + is-installed-globally "^0.3.2" + lazy-ass "^1.6.0" + listr "^0.14.3" + lodash "^4.17.19" + log-symbols "^4.0.0" + minimist "^1.2.5" + moment "^2.27.0" + ospath "^1.2.2" + pretty-bytes "^5.4.1" + ramda "~0.26.1" + request-progress "^3.0.0" + supports-color "^7.2.0" + tmp "~0.2.1" + untildify "^4.0.0" + url "^0.11.0" + yauzl "^2.10.0" d@1, d@^1.0.1: version "1.0.1" @@ -6154,12 +6759,10 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -data-uri-to-buffer@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.0.tgz#8a3088a5efd3f53c3682343313c6895d498eb8d7" - integrity sha512-MJ6mFTZ+nPQO+39ua/ltwNePXrfdF3Ww0wP1Od7EePySXN1cP9XNqRQOG3FxTfipp8jx898LUCgBCEP11Qw/ZQ== - dependencies: - buffer-from "^1.1.1" +data-uri-to-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636" + integrity sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og== data-urls@^2.0.0: version "2.0.0" @@ -6333,6 +6936,11 @@ del@^4.1.1: pify "^4.0.1" rimraf "^2.6.3" +delaunator@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/delaunator/-/delaunator-4.0.1.tgz#3d779687f57919a7a418f8ab947d3bddb6846957" + integrity sha512-WNPWi1IRKZfCt/qIDMfERkDp93+iZEmOxN2yy4Jg+Xhv8SLk2UTqqbe1sfiipn0and9QrE914/ihdx82Y/Giag== + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -6386,10 +6994,10 @@ detect-node@^2.0.4: resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== -devtools-protocol@0.0.799653: - version "0.0.799653" - resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.799653.tgz#86fc95ce5bf4fdf4b77a58047ba9d2301078f119" - integrity sha512-t1CcaZbvm8pOlikqrsIM9GOa7Ipp07+4h/q9u0JXBWjPCjHdBl9KkddX87Vv9vBHoBGtwV79sYQNGnQM6iS5gg== +devtools-protocol@0.0.818844: + version "0.0.818844" + resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.818844.tgz#d1947278ec85b53e4c8ca598f607a28fa785ba9e" + integrity sha512-AD1hi7iVJ8OD0aMLQU5VK0XH9LDlA1+BcPIgrAxPfaibx2DbWucuyOhc4oyQCbnvDDO68nN6/LcKfqTP343Jjg== dezalgo@^1.0.0: version "1.0.3" @@ -6404,10 +7012,10 @@ diff-sequences@^25.2.6: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd" integrity sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg== -diff-sequences@^26.5.0: - version "26.5.0" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.5.0.tgz#ef766cf09d43ed40406611f11c6d8d9dd8b2fefd" - integrity sha512-ZXx86srb/iYy6jG71k++wBN9P9J05UNQ5hQHQd9MtMPvcqXPx/vKU69jfHV637D00Q2gSgPk2D+jSx3l1lDW/Q== +diff-sequences@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" + integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== diff@^4.0.1: version "4.0.2" @@ -6477,12 +7085,12 @@ document-register-element@1.14.10: resolved "https://registry.yarnpkg.com/document-register-element/-/document-register-element-1.14.10.tgz#a7bd025e6b73bd827fec2d8e90aba755e99387f5" integrity sha512-w5UA37hEIrs+9pruo2yR5UD13c4UHDlkqqjt4qurnp7QsBI9b1IOi8WXUim+aCqKBsENX3Z/cso7XMOuwJH1Yw== -dom-accessibility-api@^0.5.1: +dom-accessibility-api@^0.5.4: version "0.5.4" resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.4.tgz#b06d059cdd4a4ad9a79275f9d414a5c126241166" integrity sha512-TvrjBckDy2c6v6RLxPv5QXOnU+SmF9nBII5621Ve5fu6Z/BDrENurBEvlC1f44lKEUVqOpK4w9E5Idc5/EgkLQ== -dom-serializer@0, dom-serializer@^0.2.1: +dom-serializer@0: version "0.2.2" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== @@ -6490,16 +7098,7 @@ dom-serializer@0, dom-serializer@^0.2.1: domelementtype "^2.0.1" entities "^2.0.0" -dom-serializer@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.0.1.tgz#79695eb49af3cd8abc8d93a73da382deb1ca0795" - integrity sha512-1Aj1Qy3YLbdslkI75QEOfdp9TkQ3o8LRISAzxOibjBs/xWwr1WxZFOQphFkZuepHFGo+kB8e5FVJSS0faAJ4Rw== - dependencies: - domelementtype "^2.0.1" - domhandler "^3.0.0" - entities "^2.0.0" - -dom-serializer@^1.0.1: +dom-serializer@1.1.0, dom-serializer@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.1.0.tgz#5f7c828f1bfc44887dc2a315ab5c45691d544b58" integrity sha512-ox7bvGXt2n+uLWtCRLybYx60IrOlWL/aCebWJk1T0d4m3y2tzf4U3ij9wBMUb6YJZpz06HCCYuyCDveE2xXmzQ== @@ -6530,28 +7129,21 @@ domexception@^2.0.1: dependencies: webidl-conversions "^5.0.0" -domhandler@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.0.0.tgz#51cd13efca31da95bbb0c5bee3a48300e333b3e9" - integrity sha512-eKLdI5v9m67kbXQbJSNn1zjh0SDzvzWVWtX+qEI3eMjZw8daH9k8rlj1FZY9memPwjiskQFbe7vHVVJIAqoEhw== - dependencies: - domelementtype "^2.0.1" - -domhandler@^3.0.0, domhandler@^3.3.0: +domhandler@3.3.0, domhandler@^3.0.0, domhandler@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.3.0.tgz#6db7ea46e4617eb15cf875df68b2b8524ce0037a" integrity sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA== dependencies: domelementtype "^2.0.1" -domutils@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.1.0.tgz#7ade3201af43703fde154952e3a868eb4b635f16" - integrity sha512-CD9M0Dm1iaHfQ1R/TI+z3/JWp/pgub0j4jIQKH89ARR4ATAV2nbaOQS5XxU9maJP5jHaPdDDQSEHuE2UmpUTKg== +domutils@2.4.2, domutils@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.4.2.tgz#7ee5be261944e1ad487d9aa0616720010123922b" + integrity sha512-NKbgaM8ZJOecTZsIzW5gSuplsX2IWW2mIK7xVr8hTQF2v1CJWTmLZ1HOCh5sH+IzVPAGE5IucooOkvwBRAdowA== dependencies: - dom-serializer "^0.2.1" + dom-serializer "^1.0.1" domelementtype "^2.0.1" - domhandler "^3.0.0" + domhandler "^3.3.0" domutils@^1.7.0: version "1.7.0" @@ -6561,15 +7153,6 @@ domutils@^1.7.0: dom-serializer "0" domelementtype "1" -domutils@^2.0.0, domutils@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.4.2.tgz#7ee5be261944e1ad487d9aa0616720010123922b" - integrity sha512-NKbgaM8ZJOecTZsIzW5gSuplsX2IWW2mIK7xVr8hTQF2v1CJWTmLZ1HOCh5sH+IzVPAGE5IucooOkvwBRAdowA== - dependencies: - dom-serializer "^1.0.1" - domelementtype "^2.0.1" - domhandler "^3.3.0" - dot-prop@^5.2.0: version "5.3.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" @@ -6582,11 +7165,16 @@ dotenv@6.2.0: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-6.2.0.tgz#941c0410535d942c8becf28d3f357dbd9d476064" integrity sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w== -dotenv@^8.2.0: +dotenv@8.2.0: version "8.2.0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== +dottie@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/dottie/-/dottie-2.0.2.tgz#cc91c0726ce3a054ebf11c55fbc92a7f266dd154" + integrity sha512-fmrwR04lsniq/uSr8yikThDTrM7epXHBAAjH9TbeH3rEA8tdCO7mRzB9hdmdGyJCxF8KERo9CITcm3kGuoyMhg== + duplexer2@^0.1.2: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" @@ -6604,7 +7192,7 @@ duplexer@^0.1.1: resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== -duplexify@^3.4.2, duplexify@^3.5.0, duplexify@^3.6.0: +duplexify@^3.4.2, duplexify@^3.6.0: version "3.7.1" resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== @@ -6624,6 +7212,11 @@ duplexify@^4.0.0, duplexify@^4.1.1: readable-stream "^3.1.1" stream-shift "^1.0.0" +earcut@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/earcut/-/earcut-2.2.2.tgz#41b0bc35f63e0fe80da7cddff28511e7e2e80d11" + integrity sha512-eZoZPPJcUHnfRZ0PjLvx2qBordSiO8ofC3vt+qACLM95u+4DovnbYNpQtJh0DNsWj8RnxrQytD4WA8gj5cRIaQ== + ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" @@ -6671,6 +7264,11 @@ electron-to-chromium@^1.3.585, electron-to-chromium@^1.3.621: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.630.tgz#102e930466e53ab7fde6009c2d50b8a4574b543e" integrity sha512-HSTsvqOrR3kWsoekKu0EOQXR/YOncKs3HAys9lysvIS2ec/mlfV1ZoLHSx00semK+PscVJwqcvBN4ayGPs++fA== +electron-to-chromium@^1.3.634: + version "1.3.634" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.634.tgz#82ea400f520f739c4f6ff00c1f7524827a917d25" + integrity sha512-QPrWNYeE/A0xRvl/QP3E0nkaEvYUvH3gM04ZWYtIa6QlSpEetRlRI1xvQ7hiMIySHHEV+mwDSX8Kj4YZY6ZQAw== + elegant-spinner@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" @@ -6774,13 +7372,20 @@ err-code@^1.0.0: resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= -errno@^0.1.1, errno@^0.1.3, errno@~0.1.7: +errno@^0.1.1, errno@^0.1.3: version "0.1.7" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== dependencies: prr "~1.0.1" +errno@~0.1.7: + version "0.1.8" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== + dependencies: + prr "~1.0.1" + error-ex@^1.2.0, error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -6895,14 +7500,12 @@ escodegen@^1.14.1: optionalDependencies: source-map "~0.6.1" -eslint-config-prettier@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.0.0.tgz#f429a53bde9fc7660e6353910fd996d6284d3c25" - integrity sha512-vDrcCFE3+2ixNT5H83g28bO/uYAwibJxerXPj+E7op4qzBCsAV36QfvdAyVOoNxKAH2Os/e01T/2x++V0LPukA== - dependencies: - get-stdin "^6.0.0" +eslint-config-prettier@7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-7.1.0.tgz#5402eb559aa94b894effd6bddfa0b1ca051c858f" + integrity sha512-9sm5/PxaFG7qNJvJzTROMM1Bk1ozXVTKI0buKOyb0Bsr1hrwi0H/TzxF/COtf1uxikIK8SwhX7K6zg78jAzbeA== -eslint-import-resolver-node@^0.3.3, eslint-import-resolver-node@^0.3.4: +eslint-import-resolver-node@^0.3.4: version "0.3.4" resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717" integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== @@ -6918,33 +7521,14 @@ eslint-module-utils@^2.6.0: debug "^2.6.9" pkg-dir "^2.0.0" -eslint-plugin-cypress@2.10.3: - version "2.10.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-cypress/-/eslint-plugin-cypress-2.10.3.tgz#82eba7e014954149d590402eecd0d4e147cc7f14" - integrity sha512-CvFeoCquShfO8gHNIKA1VpUTz78WtknMebLemBd1lRbcmJNjwpqCqpQYUG/XVja8GjdX/e2TJXYa+EUBxehtUg== +eslint-plugin-cypress@2.11.2: + version "2.11.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-cypress/-/eslint-plugin-cypress-2.11.2.tgz#a8f3fe7ec840f55e4cea37671f93293e6c3e76a0" + integrity sha512-1SergF1sGbVhsf7MYfOLiBhdOg6wqyeV9pXUAIDIffYTGMN3dTBQS9nFAzhLsHhO+Bn0GaVM1Ecm71XUidQ7VA== dependencies: globals "^11.12.0" -eslint-plugin-import@2.21.2: - version "2.21.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.21.2.tgz#8fef77475cc5510801bedc95f84b932f7f334a7c" - integrity sha512-FEmxeGI6yaz+SnEB6YgNHlQK1Bs2DKLM+YF+vuTk5H8J9CLbJLtlPvRFgZZ2+sXiKAlN5dpdlrWOjK8ZoZJpQA== - dependencies: - array-includes "^3.1.1" - array.prototype.flat "^1.2.3" - contains-path "^0.1.0" - debug "^2.6.9" - doctrine "1.5.0" - eslint-import-resolver-node "^0.3.3" - eslint-module-utils "^2.6.0" - has "^1.0.3" - minimatch "^3.0.4" - object.values "^1.1.1" - read-pkg-up "^2.0.0" - resolve "^1.17.0" - tsconfig-paths "^3.9.0" - -eslint-plugin-import@^2.20.1: +eslint-plugin-import@2.22.1, eslint-plugin-import@^2.20.1: version "2.22.1" resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz#0896c7e6a0cf44109a2d97b95903c2bb689d7702" integrity sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw== @@ -6963,7 +7547,24 @@ eslint-plugin-import@^2.20.1: resolve "^1.17.0" tsconfig-paths "^3.9.0" -eslint-plugin-jsx-a11y@6.3.1, eslint-plugin-jsx-a11y@^6.2.3: +eslint-plugin-jsx-a11y@6.4.1: + version "6.4.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.4.1.tgz#a2d84caa49756942f42f1ffab9002436391718fd" + integrity sha512-0rGPJBbwHoGNPU73/QCLP/vveMlM1b1Z9PponxO87jfr6tuH5ligXbDT6nHSSzBC8ovX2Z+BQu7Bk5D/Xgq9zg== + dependencies: + "@babel/runtime" "^7.11.2" + aria-query "^4.2.2" + array-includes "^3.1.1" + ast-types-flow "^0.0.7" + axe-core "^4.0.2" + axobject-query "^2.2.0" + damerau-levenshtein "^1.0.6" + emoji-regex "^9.0.0" + has "^1.0.3" + jsx-ast-utils "^3.1.0" + language-tags "^1.0.5" + +eslint-plugin-jsx-a11y@^6.2.3: version "6.3.1" resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.3.1.tgz#99ef7e97f567cc6a5b8dd5ab95a94a67058a2660" integrity sha512-i1S+P+c3HOlBJzMFORRbC58tHa65Kbo8b52/TwCwSKLohwvpfT5rm2GjGWzOHTEuq4xxf2aRlHHTtmExDQOP+g== @@ -6980,32 +7581,32 @@ eslint-plugin-jsx-a11y@6.3.1, eslint-plugin-jsx-a11y@^6.2.3: jsx-ast-utils "^2.4.1" language-tags "^1.0.5" -eslint-plugin-react-hooks@4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.0.4.tgz#aed33b4254a41b045818cacb047b81e6df27fa58" - integrity sha512-equAdEIsUETLFNCmmCkiCGq6rkSK5MoJhXFPFYeUebcjKgBmWWcgVOqZyQC8Bv1BwVCnTq9tBxgJFgAJTWoJtA== +eslint-plugin-react-hooks@4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz#8c229c268d468956334c943bb45fc860280f5556" + integrity sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ== eslint-plugin-react-hooks@^2.4.0: version "2.5.1" resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-2.5.1.tgz#4ef5930592588ce171abeb26f400c7fbcbc23cd0" integrity sha512-Y2c4b55R+6ZzwtTppKwSmK/Kar8AdLiC2f9NADCuxbcTgPPg41Gyqa6b9GppgXSvCtkRw43ZE86CT5sejKC6/g== -eslint-plugin-react@7.20.0: - version "7.20.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.20.0.tgz#f98712f0a5e57dfd3e5542ef0604b8739cd47be3" - integrity sha512-rqe1abd0vxMjmbPngo4NaYxTcR3Y4Hrmc/jg4T+sYz63yqlmJRknpEQfmWY+eDWPuMmix6iUIK+mv0zExjeLgA== +eslint-plugin-react@7.22.0: + version "7.22.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.22.0.tgz#3d1c542d1d3169c45421c1215d9470e341707269" + integrity sha512-p30tuX3VS+NWv9nQot9xIGAHBXR0+xJVaZriEsHoJrASGCJZDJ8JLNM0YqKqI0AKm6Uxaa1VUHoNEibxRCMQHA== dependencies: array-includes "^3.1.1" + array.prototype.flatmap "^1.2.3" doctrine "^2.1.0" has "^1.0.3" - jsx-ast-utils "^2.2.3" - object.entries "^1.1.1" + jsx-ast-utils "^2.4.1 || ^3.0.0" + object.entries "^1.1.2" object.fromentries "^2.0.2" object.values "^1.1.1" prop-types "^15.7.2" - resolve "^1.15.1" + resolve "^1.18.1" string.prototype.matchall "^4.0.2" - xregexp "^4.3.0" eslint-plugin-react@^7.18.3: version "7.21.4" @@ -7057,13 +7658,13 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== -eslint@7.10.0: - version "7.10.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.10.0.tgz#494edb3e4750fb791133ca379e786a8f648c72b9" - integrity sha512-BDVffmqWl7JJXqCjAK6lWtcQThZB/aP1HXSH1JKwGwv0LQEdvpR7qzNrUT487RM39B5goWuboFad5ovMBmD8yA== +eslint@7.17.0: + version "7.17.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.17.0.tgz#4ccda5bf12572ad3bf760e6f195886f50569adb0" + integrity sha512-zJk08MiBgwuGoxes5sSQhOtibZ75pz0J35XTRlZOk9xMffhpA9BTbQZxoXZzOl5zMbleShbGwtw+1kGferfFwQ== dependencies: "@babel/code-frame" "^7.0.0" - "@eslint/eslintrc" "^0.1.3" + "@eslint/eslintrc" "^0.2.2" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" @@ -7072,11 +7673,11 @@ eslint@7.10.0: enquirer "^2.3.5" eslint-scope "^5.1.1" eslint-utils "^2.1.0" - eslint-visitor-keys "^1.3.0" - espree "^7.3.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.1" esquery "^1.2.0" esutils "^2.0.2" - file-entry-cache "^5.0.1" + file-entry-cache "^6.0.0" functional-red-black-tree "^1.0.1" glob-parent "^5.0.0" globals "^12.1.0" @@ -7096,7 +7697,7 @@ eslint@7.10.0: semver "^7.2.1" strip-ansi "^6.0.0" strip-json-comments "^3.1.0" - table "^5.2.3" + table "^6.0.4" text-table "^0.2.0" v8-compile-cache "^2.0.3" @@ -7109,6 +7710,15 @@ espree@^7.3.0: acorn-jsx "^5.2.0" eslint-visitor-keys "^1.3.0" +espree@^7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" + integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== + dependencies: + acorn "^7.4.0" + acorn-jsx "^5.3.1" + eslint-visitor-keys "^1.3.0" + esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" @@ -7163,10 +7773,15 @@ event-target-shim@^5.0.0: resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== -eventemitter2@4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-4.1.2.tgz#0e1a8477af821a6ef3995b311bf74c23a5247f15" - integrity sha1-DhqEd6+CGm7zmVsxG/dMI6UkfxU= +eventemitter2@^6.4.2: + version "6.4.3" + resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.3.tgz#35c563619b13f3681e7eb05cbdaf50f56ba58820" + integrity sha512-t0A2msp6BzOf+QAcI6z9XMktLj52OjGQg+8SJH6v5+3uxNpWYRR3wQmfA+6xtMU9kOC59qk9licus5dYcrYkMQ== + +eventemitter3@^3.1.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" + integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== eventemitter3@^4.0.0, eventemitter3@^4.0.4: version "4.0.7" @@ -7198,7 +7813,7 @@ exec-sh@^0.3.2: resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5" integrity sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A== -execa@1.0.0, execa@^1.0.0: +execa@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== @@ -7226,7 +7841,22 @@ execa@^4.0.0: signal-exit "^3.0.2" strip-final-newline "^2.0.0" -executable@4.1.1: +execa@^4.0.2: + version "4.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +executable@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c" integrity sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg== @@ -7261,16 +7891,16 @@ expand-template@^2.0.3: resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== -expect@^26.5.3: - version "26.5.3" - resolved "https://registry.yarnpkg.com/expect/-/expect-26.5.3.tgz#89d9795036f7358b0a9a5243238eb8086482d741" - integrity sha512-kkpOhGRWGOr+TEFUnYAjfGvv35bfP+OlPtqPIJpOCR9DVtv8QV+p8zG0Edqafh80fsjeE+7RBcVUq1xApnYglw== +expect@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417" + integrity sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA== dependencies: - "@jest/types" "^26.5.2" + "@jest/types" "^26.6.2" ansi-styles "^4.0.0" jest-get-type "^26.3.0" - jest-matcher-utils "^26.5.2" - jest-message-util "^26.5.2" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" jest-regex-util "^26.0.0" express@^4.17.1: @@ -7359,15 +7989,15 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" -extract-zip@1.6.7: - version "1.6.7" - resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.7.tgz#a840b4b8af6403264c8db57f4f1a74333ef81fe9" - integrity sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k= +extract-zip@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.7.0.tgz#556cc3ae9df7f452c493a0cfb51cc30277940927" + integrity sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA== dependencies: - concat-stream "1.6.2" - debug "2.6.9" - mkdirp "0.5.1" - yauzl "2.4.1" + concat-stream "^1.6.2" + debug "^2.6.9" + mkdirp "^0.5.4" + yauzl "^2.10.0" extract-zip@^2.0.0: version "2.0.1" @@ -7422,7 +8052,7 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= -fast-text-encoding@^1.0.0: +fast-text-encoding@^1.0.0, fast-text-encoding@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz#ec02ac8e01ab8a319af182dae2681213cfe9ce53" integrity sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig== @@ -7460,13 +8090,6 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" -fd-slicer@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65" - integrity sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU= - dependencies: - pend "~1.2.0" - fd-slicer@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" @@ -7479,11 +8102,6 @@ figgy-pudding@^3.5.1: resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== -figlet@^1.1.1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/figlet/-/figlet-1.5.0.tgz#2db4d00a584e5155a96080632db919213c3e003c" - integrity sha512-ZQJM4aifMpz6H19AW1VqvZ7l4pOE9p7i/3LyxgO2kp+PO/VcDYNqIHEMtkccqIhTXMKci4kjueJr/iCQEaT/Ww== - figures@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" @@ -7499,12 +8117,12 @@ figures@^2.0.0: dependencies: escape-string-regexp "^1.0.5" -file-entry-cache@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" - integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== +file-entry-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.0.tgz#7921a89c391c6d93efec2169ac6bf300c527ea0a" + integrity sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA== dependencies: - flat-cache "^2.0.1" + flat-cache "^3.0.4" file-loader@4.2.0: version "4.2.0" @@ -7615,24 +8233,23 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" -flat-cache@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" - integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== dependencies: - flatted "^2.0.0" - rimraf "2.6.3" - write "1.0.3" + flatted "^3.1.0" + rimraf "^3.0.2" flat@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== -flatted@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" - integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== +flatted@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.0.tgz#a5d06b4a8b01e3a63771daa5cb7a1903e2e57067" + integrity sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA== flush-write-stream@^1.0.0: version "1.1.1" @@ -7716,10 +8333,10 @@ fragment-cache@^0.2.1: dependencies: map-cache "^0.2.2" -framer-motion@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/framer-motion/-/framer-motion-3.1.1.tgz#a8a779501213b7ce02cc35beb27621d73cc2f1e7" - integrity sha512-Gm1QSb0xUxuhcPar5FIs5Ws+STrhLZ6XZf2Io8dVwFofe1OzwkL9asGFVu7z3y6WqC4Hvnxm7wsW5SBHlxZDYw== +framer-motion@3.1.4: + version "3.1.4" + resolved "https://registry.yarnpkg.com/framer-motion/-/framer-motion-3.1.4.tgz#05b6c6c9028e8e7b1d396fcf4701d339d152a632" + integrity sha512-dVxlWwmqGwI/5k57XsjBJMOyk5jvgk/hW/VGvHsgZrETc39cmjYFYRwWXkrdqqCDobhbmFaQcZwXCy8N5yDqIw== dependencies: framesync "^5.0.0" hey-listen "^1.0.8" @@ -7770,6 +8387,16 @@ fs-extra@8.1.0, fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" +fs-extra@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" + integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^1.0.0" + fs-minipass@^2.0.0, fs-minipass@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" @@ -7805,6 +8432,11 @@ fsevents@^2.1.2, fsevents@~2.1.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== +fsevents@~2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.1.tgz#b209ab14c61012636c8863507edf7fb68cc54e9f" + integrity sha512-YR47Eg4hChJGAB1O3yEAOkGO+rlzutoICGqGo9EZ4lKWokzZRSyIW1QmTzqjtw8MJdj9srP869CuWw/hyzSiBw== + function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -7840,6 +8472,17 @@ gaxios@^3.0.0: is-stream "^2.0.0" node-fetch "^2.3.0" +gaxios@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-4.1.0.tgz#e8ad466db5a4383c70b9d63bfd14dfaa87eb0099" + integrity sha512-vb0to8xzGnA2qcgywAjtshOKKVDf2eQhJoiL6fHhgW5tVN7wNk7egnYIO9zotfn3lQ3De1VPdf7V5/BWfCtCmg== + dependencies: + abort-controller "^3.0.0" + extend "^3.0.2" + https-proxy-agent "^5.0.0" + is-stream "^2.0.0" + node-fetch "^2.3.0" + gcp-metadata@^4.1.0, gcp-metadata@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-4.2.0.tgz#3b424355ccdc240ee07c5791e2fd6a60a283d89a" @@ -7873,11 +8516,20 @@ gensync@^1.0.0-beta.1: resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== -get-caller-file@^2.0.1, get-caller-file@^2.0.5: +get-caller-file@^2.0.1: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== +get-intrinsic@^1.0.0, get-intrinsic@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.0.2.tgz#6820da226e50b24894e08859469dc68361545d49" + integrity sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + get-nonce@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/get-nonce/-/get-nonce-1.0.1.tgz#fdf3f0278073820d2ce9426c18f07481b1e0cdf3" @@ -7888,11 +8540,6 @@ get-package-type@^0.1.0: resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== -get-stdin@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" - integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== - get-stream@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -7907,17 +8554,22 @@ get-stream@^5.0.0, get-stream@^5.1.0: dependencies: pump "^3.0.0" +get-stream@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.0.tgz#3e0012cb6827319da2706e601a1583e8629a6718" + integrity sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg== + get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= -getos@3.1.4: - version "3.1.4" - resolved "https://registry.yarnpkg.com/getos/-/getos-3.1.4.tgz#29cdf240ed10a70c049add7b6f8cb08c81876faf" - integrity sha512-UORPzguEB/7UG5hqiZai8f0vQ7hzynMQyJLxStoQ8dPGAcmgsfXOPA4iE/fGtweHYkK+z4zc9V0g+CIFRf5HYw== +getos@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/getos/-/getos-3.2.1.tgz#0134d1f4e00eb46144c5a9c0ac4dc087cbb27dc5" + integrity sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q== dependencies: - async "^3.1.0" + async "^3.2.0" getpass@^0.1.1: version "0.1.7" @@ -7987,12 +8639,12 @@ glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" -global-dirs@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" - integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= +global-dirs@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.1.0.tgz#e9046a49c806ff04d6c1825e196c8f0091e8df4d" + integrity sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ== dependencies: - ini "^1.3.4" + ini "1.3.7" globals@^11.1.0, globals@^11.12.0: version "11.12.0" @@ -8073,20 +8725,36 @@ google-auth-library@^6.1.2: jws "^4.0.0" lru-cache "^6.0.0" -google-gax@^2.2.0, google-gax@^2.7.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/google-gax/-/google-gax-2.9.0.tgz#84edef8715d82c0f91a6e5485b8f2803d2690f00" - integrity sha512-MFMwA7Fb8PEwjnYwfGXjZMidCNyMl3gSnvS/+kS8TQioJZQDpzK+W3dmwyNyig/U13+kbABqDnbkkAXJ5NiUkw== +google-auth-library@^6.1.3: + version "6.1.3" + resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-6.1.3.tgz#39d868140b70d0c4b32c6f6d8f4ccc1400d84dca" + integrity sha512-m9mwvY3GWbr7ZYEbl61isWmk+fvTmOt0YNUfPOUY2VH8K5pZlAIWJjxEi0PqR3OjMretyiQLI6GURMrPSwHQ2g== dependencies: - "@grpc/grpc-js" "~1.1.1" + arrify "^2.0.0" + base64-js "^1.3.0" + ecdsa-sig-formatter "^1.0.11" + fast-text-encoding "^1.0.0" + gaxios "^4.0.0" + gcp-metadata "^4.2.0" + gtoken "^5.0.4" + jws "^4.0.0" + lru-cache "^6.0.0" + +google-gax@^2.9.2: + version "2.10.0" + resolved "https://registry.yarnpkg.com/google-gax/-/google-gax-2.10.0.tgz#7918e5194fe3c5f4330cccb3a3b66e368ac70d8f" + integrity sha512-K+1JK5ofNl5k30LsI8UQb/DeLMEbhL/SWirCx0L9pnMcApSfAjRAO7yajXT5X1vicxDBnNSwKs+cu4elxpYraw== + dependencies: + "@grpc/grpc-js" "~1.2.0" "@grpc/proto-loader" "^0.5.1" "@types/long" "^4.0.0" abort-controller "^3.0.0" duplexify "^4.0.0" - google-auth-library "^6.0.0" + fast-text-encoding "^1.0.3" + google-auth-library "^6.1.3" is-stream-ended "^0.1.4" node-fetch "^2.6.1" - protobufjs "^6.9.0" + protobufjs "^6.10.2" retry-request "^4.0.0" google-p12-pem@^3.0.3: @@ -8134,7 +8802,7 @@ har-schema@^2.0.0: resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= -har-validator@~5.1.0, har-validator@~5.1.3: +har-validator@~5.1.3: version "5.1.5" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== @@ -8244,6 +8912,11 @@ he@1.2.0, he@^1.1.1: resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== +heap@0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.5.tgz#713b65590ebcc40fcbeeaf55e851694092b39af1" + integrity sha1-cTtlWQ68xA/L7q9V6FFpQJKzmvE= + hex-color-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" @@ -8254,11 +8927,6 @@ hey-listen@^1.0.8: resolved "https://registry.yarnpkg.com/hey-listen/-/hey-listen-1.0.8.tgz#8e59561ff724908de1aa924ed6ecc84a56a9aa68" integrity sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q== -highlight.js@^9.6.0: - version "9.18.3" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.18.3.tgz#a1a0a2028d5e3149e2380f8a865ee8516703d634" - integrity sha512-zBZAmhSupHIl5sITeMqIJnYCDfAEc3Gdkqj65wC1lpI468MMQeeQkhcIAvk+RylAkxrCcI9xy9piHiXeQ1BdzQ== - hmac-drbg@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" @@ -8350,14 +9018,14 @@ html-tokenize@^2.0.0: readable-stream "~1.0.27-1" through2 "~0.4.1" -htmlparser2@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-4.1.0.tgz#9a4ef161f2e4625ebf7dfbe6c0a2f52d18a59e78" - integrity sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q== +htmlparser2@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-5.0.1.tgz#7daa6fc3e35d6107ac95a4fc08781f091664f6e7" + integrity sha512-vKZZra6CSe9qsJzh0BjBGXo8dvzNsq/oGvsjfRdOrrryfeD9UOBEEQdeoqCRmKZchF5h2zOBMQ6YuQ0uRUmdbQ== dependencies: domelementtype "^2.0.1" - domhandler "^3.0.0" - domutils "^2.0.0" + domhandler "^3.3.0" + domutils "^2.4.2" entities "^2.0.0" htmlparser2@^5.0: @@ -8653,6 +9321,11 @@ infer-owner@^1.0.3, infer-owner@^1.0.4: resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== +inflection@1.12.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.12.0.tgz#a200935656d6f5f6bc4dc7502e1aecb703228416" + integrity sha1-ogCTVlbW9fa8TcdQLhrstwMihBY= + inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -8676,7 +9349,12 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -ini@^1.3.4, ini@~1.3.0: +ini@1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84" + integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ== + +ini@~1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== @@ -8820,7 +9498,7 @@ is-callable@^1.1.4, is-callable@^1.2.2: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9" integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA== -is-ci@2.0.0, is-ci@^2.0.0: +is-ci@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== @@ -8956,13 +9634,13 @@ is-hexadecimal@^1.0.0: resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== -is-installed-globally@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" - integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA= +is-installed-globally@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.3.2.tgz#fd3efa79ee670d1187233182d5b0a1dd00313141" + integrity sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g== dependencies: - global-dirs "^0.1.0" - is-path-inside "^1.0.0" + global-dirs "^2.0.1" + is-path-inside "^3.0.1" is-interactive@^1.0.0: version "1.0.0" @@ -9020,13 +9698,6 @@ is-path-in-cwd@^2.0.0: dependencies: is-path-inside "^2.1.0" -is-path-inside@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" - integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= - dependencies: - path-is-inside "^1.0.1" - is-path-inside@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" @@ -9034,6 +9705,11 @@ is-path-inside@^2.1.0: dependencies: path-is-inside "^1.0.2" +is-path-inside@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017" + integrity sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg== + is-plain-obj@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" @@ -9161,6 +9837,11 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= +ismobilejs@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ismobilejs/-/ismobilejs-1.1.1.tgz#c56ca0ae8e52b24ca0f22ba5ef3215a2ddbbaa0e" + integrity sha512-VaFW53yt8QO61k2WJui0dHf4SlL8lxBofUuUmwBo0ljPk0Drz2TiuDW4jo3wDcv41qy/SxrJ+VAzJ/qYqsmzRw== + isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" @@ -9229,57 +9910,57 @@ jake@^10.6.1: filelist "^1.0.1" minimatch "^3.0.4" -jest-changed-files@^26.5.2: - version "26.5.2" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.5.2.tgz#330232c6a5c09a7f040a5870e8f0a9c6abcdbed5" - integrity sha512-qSmssmiIdvM5BWVtyK/nqVpN3spR5YyvkvPqz1x3BR1bwIxsWmU/MGwLoCrPNLbkG2ASAKfvmJpOduEApBPh2w== +jest-changed-files@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.6.2.tgz#f6198479e1cc66f22f9ae1e22acaa0b429c042d0" + integrity sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ== dependencies: - "@jest/types" "^26.5.2" + "@jest/types" "^26.6.2" execa "^4.0.0" throat "^5.0.0" -jest-cli@^26.2.2: - version "26.5.3" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.5.3.tgz#f936b98f247b76b7bc89c7af50af82c88e356a80" - integrity sha512-HkbSvtugpSXBf2660v9FrNVUgxvPkssN8CRGj9gPM8PLhnaa6zziFiCEKQAkQS4uRzseww45o0TR+l6KeRYV9A== +jest-cli@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.6.3.tgz#43117cfef24bc4cd691a174a8796a532e135e92a" + integrity sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg== dependencies: - "@jest/core" "^26.5.3" - "@jest/test-result" "^26.5.2" - "@jest/types" "^26.5.2" + "@jest/core" "^26.6.3" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" chalk "^4.0.0" exit "^0.1.2" graceful-fs "^4.2.4" import-local "^3.0.2" is-ci "^2.0.0" - jest-config "^26.5.3" - jest-util "^26.5.2" - jest-validate "^26.5.3" + jest-config "^26.6.3" + jest-util "^26.6.2" + jest-validate "^26.6.2" prompts "^2.0.1" yargs "^15.4.1" -jest-config@^26.5.3: - version "26.5.3" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.5.3.tgz#baf51c9be078c2c755c8f8a51ec0f06c762c1d3f" - integrity sha512-NVhZiIuN0GQM6b6as4CI5FSCyXKxdrx5ACMCcv/7Pf+TeCajJhJc+6dwgdAVPyerUFB9pRBIz3bE7clSrRge/w== +jest-config@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.6.3.tgz#64f41444eef9eb03dc51d5c53b75c8c71f645349" + integrity sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg== dependencies: "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^26.5.3" - "@jest/types" "^26.5.2" - babel-jest "^26.5.2" + "@jest/test-sequencer" "^26.6.3" + "@jest/types" "^26.6.2" + babel-jest "^26.6.3" chalk "^4.0.0" deepmerge "^4.2.2" glob "^7.1.1" graceful-fs "^4.2.4" - jest-environment-jsdom "^26.5.2" - jest-environment-node "^26.5.2" + jest-environment-jsdom "^26.6.2" + jest-environment-node "^26.6.2" jest-get-type "^26.3.0" - jest-jasmine2 "^26.5.3" + jest-jasmine2 "^26.6.3" jest-regex-util "^26.0.0" - jest-resolve "^26.5.2" - jest-util "^26.5.2" - jest-validate "^26.5.3" + jest-resolve "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" micromatch "^4.0.2" - pretty-format "^26.5.2" + pretty-format "^26.6.2" jest-diff@^25.2.1: version "25.5.0" @@ -9291,15 +9972,15 @@ jest-diff@^25.2.1: jest-get-type "^25.2.6" pretty-format "^25.5.0" -jest-diff@^26.5.2: - version "26.5.2" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.5.2.tgz#8e26cb32dc598e8b8a1b9deff55316f8313c8053" - integrity sha512-HCSWDUGwsov5oTlGzrRM+UPJI/Dpqi9jzeV0fdRNi3Ch5bnoXhnyJMmVg2juv9081zLIy3HGPI5mcuGgXM2xRA== +jest-diff@^26.0.0, jest-diff@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" + integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== dependencies: chalk "^4.0.0" - diff-sequences "^26.5.0" + diff-sequences "^26.6.2" jest-get-type "^26.3.0" - pretty-format "^26.5.2" + pretty-format "^26.6.2" jest-docblock@^26.0.0: version "26.0.0" @@ -9308,41 +9989,41 @@ jest-docblock@^26.0.0: dependencies: detect-newline "^3.0.0" -jest-each@^26.5.2: - version "26.5.2" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.5.2.tgz#35e68d6906a7f826d3ca5803cfe91d17a5a34c31" - integrity sha512-w7D9FNe0m2D3yZ0Drj9CLkyF/mGhmBSULMQTypzAKR746xXnjUrK8GUJdlLTWUF6dd0ks3MtvGP7/xNFr9Aphg== +jest-each@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.6.2.tgz#02526438a77a67401c8a6382dfe5999952c167cb" + integrity sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A== dependencies: - "@jest/types" "^26.5.2" + "@jest/types" "^26.6.2" chalk "^4.0.0" jest-get-type "^26.3.0" - jest-util "^26.5.2" - pretty-format "^26.5.2" + jest-util "^26.6.2" + pretty-format "^26.6.2" -jest-environment-jsdom@^26.5.2: - version "26.5.2" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.5.2.tgz#5feab05b828fd3e4b96bee5e0493464ddd2bb4bc" - integrity sha512-fWZPx0bluJaTQ36+PmRpvUtUlUFlGGBNyGX1SN3dLUHHMcQ4WseNEzcGGKOw4U5towXgxI4qDoI3vwR18H0RTw== +jest-environment-jsdom@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz#78d09fe9cf019a357009b9b7e1f101d23bd1da3e" + integrity sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q== dependencies: - "@jest/environment" "^26.5.2" - "@jest/fake-timers" "^26.5.2" - "@jest/types" "^26.5.2" + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" "@types/node" "*" - jest-mock "^26.5.2" - jest-util "^26.5.2" + jest-mock "^26.6.2" + jest-util "^26.6.2" jsdom "^16.4.0" -jest-environment-node@^26.5.2: - version "26.5.2" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.5.2.tgz#275a0f01b5e47447056f1541a15ed4da14acca03" - integrity sha512-YHjnDsf/GKFCYMGF1V+6HF7jhY1fcLfLNBDjhAOvFGvt6d8vXvNdJGVM7uTZ2VO/TuIyEFhPGaXMX5j3h7fsrA== +jest-environment-node@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.6.2.tgz#824e4c7fb4944646356f11ac75b229b0035f2b0c" + integrity sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag== dependencies: - "@jest/environment" "^26.5.2" - "@jest/fake-timers" "^26.5.2" - "@jest/types" "^26.5.2" + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" "@types/node" "*" - jest-mock "^26.5.2" - jest-util "^26.5.2" + jest-mock "^26.6.2" + jest-util "^26.6.2" jest-get-type@^25.2.6: version "25.2.6" @@ -9354,89 +10035,90 @@ jest-get-type@^26.3.0: resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== -jest-haste-map@^26.5.2: - version "26.5.2" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.5.2.tgz#a15008abfc502c18aa56e4919ed8c96304ceb23d" - integrity sha512-lJIAVJN3gtO3k4xy+7i2Xjtwh8CfPcH08WYjZpe9xzveDaqGw9fVNCpkYu6M525wKFVkLmyi7ku+DxCAP1lyMA== +jest-haste-map@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" + integrity sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w== dependencies: - "@jest/types" "^26.5.2" + "@jest/types" "^26.6.2" "@types/graceful-fs" "^4.1.2" "@types/node" "*" anymatch "^3.0.3" fb-watchman "^2.0.0" graceful-fs "^4.2.4" jest-regex-util "^26.0.0" - jest-serializer "^26.5.0" - jest-util "^26.5.2" - jest-worker "^26.5.0" + jest-serializer "^26.6.2" + jest-util "^26.6.2" + jest-worker "^26.6.2" micromatch "^4.0.2" sane "^4.0.3" walker "^1.0.7" optionalDependencies: fsevents "^2.1.2" -jest-jasmine2@^26.5.3: - version "26.5.3" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.5.3.tgz#baad2114ce32d16aff25aeb877d18bb4e332dc4c" - integrity sha512-nFlZOpnGlNc7y/+UkkeHnvbOM+rLz4wB1AimgI9QhtnqSZte0wYjbAm8hf7TCwXlXgDwZxAXo6z0a2Wzn9FoOg== +jest-jasmine2@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz#adc3cf915deacb5212c93b9f3547cd12958f2edd" + integrity sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg== dependencies: "@babel/traverse" "^7.1.0" - "@jest/environment" "^26.5.2" - "@jest/source-map" "^26.5.0" - "@jest/test-result" "^26.5.2" - "@jest/types" "^26.5.2" + "@jest/environment" "^26.6.2" + "@jest/source-map" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" - expect "^26.5.3" + expect "^26.6.2" is-generator-fn "^2.0.0" - jest-each "^26.5.2" - jest-matcher-utils "^26.5.2" - jest-message-util "^26.5.2" - jest-runtime "^26.5.3" - jest-snapshot "^26.5.3" - jest-util "^26.5.2" - pretty-format "^26.5.2" + jest-each "^26.6.2" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-runtime "^26.6.3" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + pretty-format "^26.6.2" throat "^5.0.0" -jest-leak-detector@^26.5.2: - version "26.5.2" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.5.2.tgz#83fcf9a4a6ef157549552cb4f32ca1d6221eea69" - integrity sha512-h7ia3dLzBFItmYERaLPEtEKxy3YlcbcRSjj0XRNJgBEyODuu+3DM2o62kvIFvs3PsaYoIIv+e+nLRI61Dj1CNw== +jest-leak-detector@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz#7717cf118b92238f2eba65054c8a0c9c653a91af" + integrity sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg== dependencies: jest-get-type "^26.3.0" - pretty-format "^26.5.2" + pretty-format "^26.6.2" -jest-matcher-utils@^26.5.2: - version "26.5.2" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.5.2.tgz#6aa2c76ce8b9c33e66f8856ff3a52bab59e6c85a" - integrity sha512-W9GO9KBIC4gIArsNqDUKsLnhivaqf8MSs6ujO/JDcPIQrmY+aasewweXVET8KdrJ6ADQaUne5UzysvF/RR7JYA== +jest-matcher-utils@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz#8e6fd6e863c8b2d31ac6472eeb237bc595e53e7a" + integrity sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw== dependencies: chalk "^4.0.0" - jest-diff "^26.5.2" + jest-diff "^26.6.2" jest-get-type "^26.3.0" - pretty-format "^26.5.2" + pretty-format "^26.6.2" -jest-message-util@^26.5.2: - version "26.5.2" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.5.2.tgz#6c4c4c46dcfbabb47cd1ba2f6351559729bc11bb" - integrity sha512-Ocp9UYZ5Jl15C5PNsoDiGEk14A4NG0zZKknpWdZGoMzJuGAkVt10e97tnEVMYpk7LnQHZOfuK2j/izLBMcuCZw== +jest-message-util@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.6.2.tgz#58173744ad6fc0506b5d21150b9be56ef001ca07" + integrity sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA== dependencies: "@babel/code-frame" "^7.0.0" - "@jest/types" "^26.5.2" + "@jest/types" "^26.6.2" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" graceful-fs "^4.2.4" micromatch "^4.0.2" + pretty-format "^26.6.2" slash "^3.0.0" stack-utils "^2.0.2" -jest-mock@^26.5.2: - version "26.5.2" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.5.2.tgz#c9302e8ef807f2bfc749ee52e65ad11166a1b6a1" - integrity sha512-9SiU4b5PtO51v0MtJwVRqeGEroH66Bnwtq4ARdNP7jNXbpT7+ByeWNAk4NeT/uHfNSVDXEXgQo1XRuwEqS6Rdw== +jest-mock@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.6.2.tgz#d6cb712b041ed47fe0d9b6fc3474bc6543feb302" + integrity sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew== dependencies: - "@jest/types" "^26.5.2" + "@jest/types" "^26.6.2" "@types/node" "*" jest-pnp-resolver@^1.2.2: @@ -9449,28 +10131,14 @@ jest-regex-util@^26.0.0: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== -jest-resolve-dependencies@^26.5.3: - version "26.5.3" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.5.3.tgz#11483f91e534bdcd257ab21e8622799e59701aba" - integrity sha512-+KMDeke/BFK+mIQ2IYSyBz010h7zQaVt4Xie6cLqUGChorx66vVeQVv4ErNoMwInnyYHi1Ud73tDS01UbXbfLQ== +jest-resolve-dependencies@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz#6680859ee5d22ee5dcd961fe4871f59f4c784fb6" + integrity sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg== dependencies: - "@jest/types" "^26.5.2" + "@jest/types" "^26.6.2" jest-regex-util "^26.0.0" - jest-snapshot "^26.5.3" - -jest-resolve@^26.5.2: - version "26.5.2" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.5.2.tgz#0d719144f61944a428657b755a0e5c6af4fc8602" - integrity sha512-XsPxojXGRA0CoDD7Vis59ucz2p3cQFU5C+19tz3tLEAlhYKkK77IL0cjYjikY9wXnOaBeEdm1rOgSJjbZWpcZg== - dependencies: - "@jest/types" "^26.5.2" - chalk "^4.0.0" - graceful-fs "^4.2.4" - jest-pnp-resolver "^1.2.2" - jest-util "^26.5.2" - read-pkg-up "^7.0.1" - resolve "^1.17.0" - slash "^3.0.0" + jest-snapshot "^26.6.2" jest-resolve@^26.6.2: version "26.6.2" @@ -9486,95 +10154,96 @@ jest-resolve@^26.6.2: resolve "^1.18.1" slash "^3.0.0" -jest-runner@^26.5.3: - version "26.5.3" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.5.3.tgz#800787459ea59c68e7505952933e33981dc3db38" - integrity sha512-qproP0Pq7IIule+263W57k2+8kWCszVJTC9TJWGUz0xJBr+gNiniGXlG8rotd0XxwonD5UiJloYoSO5vbUr5FQ== +jest-runner@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.6.3.tgz#2d1fed3d46e10f233fd1dbd3bfaa3fe8924be159" + integrity sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ== dependencies: - "@jest/console" "^26.5.2" - "@jest/environment" "^26.5.2" - "@jest/test-result" "^26.5.2" - "@jest/types" "^26.5.2" + "@jest/console" "^26.6.2" + "@jest/environment" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" "@types/node" "*" chalk "^4.0.0" emittery "^0.7.1" exit "^0.1.2" graceful-fs "^4.2.4" - jest-config "^26.5.3" + jest-config "^26.6.3" jest-docblock "^26.0.0" - jest-haste-map "^26.5.2" - jest-leak-detector "^26.5.2" - jest-message-util "^26.5.2" - jest-resolve "^26.5.2" - jest-runtime "^26.5.3" - jest-util "^26.5.2" - jest-worker "^26.5.0" + jest-haste-map "^26.6.2" + jest-leak-detector "^26.6.2" + jest-message-util "^26.6.2" + jest-resolve "^26.6.2" + jest-runtime "^26.6.3" + jest-util "^26.6.2" + jest-worker "^26.6.2" source-map-support "^0.5.6" throat "^5.0.0" -jest-runtime@^26.5.3: - version "26.5.3" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.5.3.tgz#5882ae91fd88304310f069549e6bf82f3f198bea" - integrity sha512-IDjalmn2s/Tc4GvUwhPHZ0iaXCdMRq5p6taW9P8RpU+FpG01O3+H8z+p3rDCQ9mbyyyviDgxy/LHPLzrIOKBkQ== +jest-runtime@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.6.3.tgz#4f64efbcfac398331b74b4b3c82d27d401b8fa2b" + integrity sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw== dependencies: - "@jest/console" "^26.5.2" - "@jest/environment" "^26.5.2" - "@jest/fake-timers" "^26.5.2" - "@jest/globals" "^26.5.3" - "@jest/source-map" "^26.5.0" - "@jest/test-result" "^26.5.2" - "@jest/transform" "^26.5.2" - "@jest/types" "^26.5.2" + "@jest/console" "^26.6.2" + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/globals" "^26.6.2" + "@jest/source-map" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" "@types/yargs" "^15.0.0" chalk "^4.0.0" + cjs-module-lexer "^0.6.0" collect-v8-coverage "^1.0.0" exit "^0.1.2" glob "^7.1.3" graceful-fs "^4.2.4" - jest-config "^26.5.3" - jest-haste-map "^26.5.2" - jest-message-util "^26.5.2" - jest-mock "^26.5.2" + jest-config "^26.6.3" + jest-haste-map "^26.6.2" + jest-message-util "^26.6.2" + jest-mock "^26.6.2" jest-regex-util "^26.0.0" - jest-resolve "^26.5.2" - jest-snapshot "^26.5.3" - jest-util "^26.5.2" - jest-validate "^26.5.3" + jest-resolve "^26.6.2" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" slash "^3.0.0" strip-bom "^4.0.0" yargs "^15.4.1" -jest-serializer@^26.5.0: - version "26.5.0" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.5.0.tgz#f5425cc4c5f6b4b355f854b5f0f23ec6b962bc13" - integrity sha512-+h3Gf5CDRlSLdgTv7y0vPIAoLgX/SI7T4v6hy+TEXMgYbv+ztzbg5PSN6mUXAT/hXYHvZRWm+MaObVfqkhCGxA== +jest-serializer@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" + integrity sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g== dependencies: "@types/node" "*" graceful-fs "^4.2.4" -jest-snapshot@^26.5.3: - version "26.5.3" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.5.3.tgz#f6b4b4b845f85d4b0dadd7cf119c55d0c1688601" - integrity sha512-ZgAk0Wm0JJ75WS4lGaeRfa0zIgpL0KD595+XmtwlIEMe8j4FaYHyZhP1LNOO+8fXq7HJ3hll54+sFV9X4+CGVw== +jest-snapshot@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.6.2.tgz#f3b0af1acb223316850bd14e1beea9837fb39c84" + integrity sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og== dependencies: "@babel/types" "^7.0.0" - "@jest/types" "^26.5.2" + "@jest/types" "^26.6.2" "@types/babel__traverse" "^7.0.4" "@types/prettier" "^2.0.0" chalk "^4.0.0" - expect "^26.5.3" + expect "^26.6.2" graceful-fs "^4.2.4" - jest-diff "^26.5.2" + jest-diff "^26.6.2" jest-get-type "^26.3.0" - jest-haste-map "^26.5.2" - jest-matcher-utils "^26.5.2" - jest-message-util "^26.5.2" - jest-resolve "^26.5.2" + jest-haste-map "^26.6.2" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-resolve "^26.6.2" natural-compare "^1.4.0" - pretty-format "^26.5.2" + pretty-format "^26.6.2" semver "^7.3.2" -jest-util@^26.1.0, jest-util@^26.5.2: +jest-util@^26.1.0: version "26.5.2" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.5.2.tgz#8403f75677902cc52a1b2140f568e91f8ed4f4d7" integrity sha512-WTL675bK+GSSAYgS8z9FWdCT2nccO1yTIplNLPlP0OD8tUk/H5IrWKMMRudIQQ0qp8bb4k+1Qa8CxGKq9qnYdg== @@ -9598,29 +10267,29 @@ jest-util@^26.6.2: is-ci "^2.0.0" micromatch "^4.0.2" -jest-validate@^26.5.3: - version "26.5.3" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.5.3.tgz#eefd5a5c87059550548c5ad8d6589746c66929e3" - integrity sha512-LX07qKeAtY+lsU0o3IvfDdN5KH9OulEGOMN1sFo6PnEf5/qjS1LZIwNk9blcBeW94pQUI9dLN9FlDYDWI5tyaA== +jest-validate@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.6.2.tgz#23d380971587150467342911c3d7b4ac57ab20ec" + integrity sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ== dependencies: - "@jest/types" "^26.5.2" + "@jest/types" "^26.6.2" camelcase "^6.0.0" chalk "^4.0.0" jest-get-type "^26.3.0" leven "^3.1.0" - pretty-format "^26.5.2" + pretty-format "^26.6.2" -jest-watcher@^26.5.2: - version "26.5.2" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.5.2.tgz#2957f4461007e0769d74b537379ecf6b7c696916" - integrity sha512-i3m1NtWzF+FXfJ3ljLBB/WQEp4uaNhX7QcQUWMokcifFTUQBDFyUMEwk0JkJ1kopHbx7Een3KX0Q7+9koGM/Pw== +jest-watcher@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.6.2.tgz#a5b683b8f9d68dbcb1d7dae32172d2cca0592975" + integrity sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ== dependencies: - "@jest/test-result" "^26.5.2" - "@jest/types" "^26.5.2" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - jest-util "^26.5.2" + jest-util "^26.6.2" string-length "^4.0.1" jest-worker@24.9.0: @@ -9647,23 +10316,23 @@ jest-worker@^25.4.0: merge-stream "^2.0.0" supports-color "^7.0.0" -jest-worker@^26.5.0: - version "26.5.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.5.0.tgz#87deee86dbbc5f98d9919e0dadf2c40e3152fa30" - integrity sha512-kTw66Dn4ZX7WpjZ7T/SUDgRhapFRKWmisVAF0Rv4Fu8SLFD7eLbqpLvbxVqYhSgaWa7I+bW7pHnbyfNsH6stug== +jest-worker@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" + integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== dependencies: "@types/node" "*" merge-stream "^2.0.0" supports-color "^7.0.0" -jest@26.2.2: - version "26.2.2" - resolved "https://registry.yarnpkg.com/jest/-/jest-26.2.2.tgz#a022303887b145147204c5f66e6a5c832333c7e7" - integrity sha512-EkJNyHiAG1+A8pqSz7cXttoVa34hOEzN/MrnJhYnfp5VHxflVcf2pu3oJSrhiy6LfIutLdWo+n6q63tjcoIeig== +jest@26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest/-/jest-26.6.3.tgz#40e8fdbe48f00dfa1f0ce8121ca74b88ac9148ef" + integrity sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q== dependencies: - "@jest/core" "^26.2.2" + "@jest/core" "^26.6.3" import-local "^3.0.2" - jest-cli "^26.2.2" + jest-cli "^26.6.3" "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" @@ -9675,7 +10344,7 @@ js-tokens@^3.0.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= -js-yaml@^3.13.1, js-yaml@^3.14.0, js-yaml@^3.9.0: +js-yaml@^3.13.1, js-yaml@^3.9.0: version "3.14.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== @@ -9752,6 +10421,11 @@ json-schema-traverse@^0.4.1: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" @@ -9793,6 +10467,15 @@ jsonfile@^4.0.0: optionalDependencies: graceful-fs "^4.1.6" +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + jsonparse@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" @@ -9808,7 +10491,7 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" -jsx-ast-utils@^2.2.3, jsx-ast-utils@^2.4.1: +jsx-ast-utils@^2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz#1114a4c1209481db06c690c2b4f488cc665f657e" integrity sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w== @@ -9824,6 +10507,14 @@ jsx-ast-utils@^2.2.3, jsx-ast-utils@^2.4.1: array-includes "^3.1.1" object.assign "^4.1.1" +jsx-ast-utils@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz#41108d2cec408c3453c1bbe8a4aae9e1e2bd8f82" + integrity sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q== + dependencies: + array-includes "^3.1.2" + object.assign "^4.1.2" + jwa@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/jwa/-/jwa-2.0.0.tgz#a7e9c3f29dae94027ebcaf49975c9345593410fc" @@ -9848,6 +10539,11 @@ karma-source-map-support@1.4.0: dependencies: source-map-support "^0.5.5" +keyboardjs@^2.5.1: + version "2.6.4" + resolved "https://registry.yarnpkg.com/keyboardjs/-/keyboardjs-2.6.4.tgz#28dccd9787c8f37e7c017df2f87294ca21143436" + integrity sha512-xDiNwiwH3KUqap++RFJiLAXzbvRB5Yw08xliuceOgLhM1o7g1puKKR9vWy6wp9H/Bi4VP0+SQMpiWXMWWmR6rA== + killable@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" @@ -9906,7 +10602,7 @@ language-tags@^1.0.5: dependencies: language-subtag-registry "~0.3.2" -lazy-ass@1.6.0: +lazy-ass@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" integrity sha1-eZllXoZGwX8In90YfRUNMyTVRRM= @@ -10023,7 +10719,7 @@ listr-verbose-renderer@^0.5.0: date-fns "^1.27.2" figures "^2.0.0" -listr@0.14.3: +listr@^0.14.3: version "0.14.3" resolved "https://registry.yarnpkg.com/listr/-/listr-0.14.3.tgz#2fea909604e434be464c50bddba0d496928fa586" integrity sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA== @@ -10153,23 +10849,11 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash@4.17.15: - version "4.17.15" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" - integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== - lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.5: version "4.17.20" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== -log-symbols@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" - integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== - dependencies: - chalk "^2.4.2" - log-symbols@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" @@ -10198,6 +10882,11 @@ loglevel@^1.6.8: resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.0.tgz#728166855a740d59d38db01cf46f042caa041bb0" integrity sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ== +long@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/long/-/long-3.2.0.tgz#d821b7138ca1cb581c172990ef14db200b5c474b" + integrity sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s= + long@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" @@ -10301,6 +10990,11 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" +maxrects-packer@^2.6.0: + version "2.7.1" + resolved "https://registry.yarnpkg.com/maxrects-packer/-/maxrects-packer-2.7.1.tgz#08a8dba3a46f9dd86de0b897a9e705a5c5c8e96e" + integrity sha512-RtnNTaV6xznnA9YISSE2i8x7sgTosMDJSZOwouyHtSP+uITNXyV7YCsincIZPg/+jKiS22/zjCQ6iT4iX68UcA== + md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -10502,6 +11196,11 @@ mini-css-extract-plugin@0.8.0: schema-utils "^1.0.0" webpack-sources "^1.1.0" +mini-signals@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mini-signals/-/mini-signals-1.2.0.tgz#45b08013c5fae51a24aa1a935cd317c9ed721d74" + integrity sha1-RbCAE8X65RokqhqTXNMXye1yHXQ= + mini-svg-data-uri@^1.1.3: version "1.2.3" resolved "https://registry.yarnpkg.com/mini-svg-data-uri/-/mini-svg-data-uri-1.2.3.tgz#e16baa92ad55ddaa1c2c135759129f41910bc39f" @@ -10524,16 +11223,6 @@ minimatch@3.0.4, minimatch@^3.0.2, minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= - -minimist@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= - minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, minimist@~1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" @@ -10638,14 +11327,7 @@ mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== -mkdirp@0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= - dependencies: - minimist "0.0.8" - -mkdirp@0.5.x, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1: +mkdirp@0.5.x, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.4, mkdirp@^0.5.5, mkdirp@~0.5.1: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== @@ -10657,10 +11339,17 @@ mkdirp@1.x, mkdirp@^1.0.3, mkdirp@^1.0.4: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -moment@2.24.0: - version "2.24.0" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b" - integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg== +moment-timezone@^0.5.31: + version "0.5.32" + resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.32.tgz#db7677cc3cc680fd30303ebd90b0da1ca0dfecc2" + integrity sha512-Z8QNyuQHQAmWucp8Knmgei8YNo28aLjJq6Ma+jy1ZSpSk5nyfRT8xgUbSQvD2+2UajISfenndwvFuH3NGS+nvA== + dependencies: + moment ">= 2.9.0" + +"moment@>= 2.9.0", moment@^2.26.0, moment@^2.27.0: + version "2.29.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3" + integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ== move-concurrently@^1.0.1: version "1.0.1" @@ -10720,15 +11409,6 @@ mute-stream@0.0.8: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -mz@^2.4.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" - integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - nan@^2.12.1: version "2.14.2" resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" @@ -10793,18 +11473,19 @@ next-tick@~1.0.0: resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= -next@10.0.3: - version "10.0.3" - resolved "https://registry.yarnpkg.com/next/-/next-10.0.3.tgz#2bf9a1625dcd0afc8c31be19fc5516af68d99e80" - integrity sha512-QYCfjZgowjaLUFvyV8959SmkUZU/edFgHeiXNtWDv7kffo/oTm891p0KZAkk5cMIHcsDX3g3UuQdw/zmui783g== +next@10.0.5: + version "10.0.5" + resolved "https://registry.yarnpkg.com/next/-/next-10.0.5.tgz#8071e0aa1883266c91943aa7c6b73deadb064793" + integrity sha512-yr7ap2TLugf0aMHz+3JoKFP9CCkFE+k6jCfdUymORhptjLYZbD3YGlTcUC1CRl+b5Phlbl7m/WUIPde0VcguiA== dependencies: - "@ampproject/toolbox-optimizer" "2.7.0-alpha.1" + "@ampproject/toolbox-optimizer" "2.7.1-alpha.0" "@babel/runtime" "7.12.5" "@hapi/accept" "5.0.1" - "@next/env" "10.0.3" - "@next/polyfill-module" "10.0.3" - "@next/react-dev-overlay" "10.0.3" - "@next/react-refresh-utils" "10.0.3" + "@next/env" "10.0.5" + "@next/polyfill-module" "10.0.5" + "@next/react-dev-overlay" "10.0.5" + "@next/react-refresh-utils" "10.0.5" + "@opentelemetry/api" "0.14.0" ast-types "0.13.2" babel-plugin-transform-define "2.0.0" babel-plugin-transform-react-remove-prop-types "0.4.24" @@ -10823,6 +11504,7 @@ next@10.0.3: native-url "0.3.4" node-fetch "2.6.1" node-html-parser "1.4.9" + p-limit "3.1.0" path-browserify "1.0.1" pnp-webpack-plugin "1.6.4" postcss "8.1.7" @@ -10843,7 +11525,7 @@ next@10.0.3: webpack "4.44.1" webpack-sources "1.4.3" optionalDependencies: - sharp "0.26.2" + sharp "0.26.3" nice-try@^1.0.4: version "1.0.5" @@ -10862,10 +11544,10 @@ node-addon-api@^3.0.2: resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.0.2.tgz#04bc7b83fd845ba785bb6eae25bc857e1ef75681" integrity sha512-+D4s2HCnxPd5PjjI0STKwncjXTUKKqm74MDMz9OPXavjsGmjkvwgLtA5yoxJUdmpj52+2u+RrXgPipahKczMKg== -node-fetch@2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" - integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== +node-addon-api@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.1.0.tgz#98b21931557466c6729e51cb77cd39c965f42239" + integrity sha512-flmrDNB06LIl5lywUz7YlNGZH/5p0M7W28k8hzd9Lshtdh1wshD2Y+U4h9LD6KObOy1f+fEVdgprPrEymjM5uw== node-fetch@2.6.1, node-fetch@^2.3.0, node-fetch@^2.6.1: version "2.6.1" @@ -10961,6 +11643,11 @@ node-releases@^1.1.65, node-releases@^1.1.67: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.67.tgz#28ebfcccd0baa6aad8e8d4d8fe4cbc49ae239c12" integrity sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg== +node-releases@^1.1.69: + version "1.1.69" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.69.tgz#3149dbde53b781610cd8b486d62d86e26c3725f6" + integrity sha512-DGIjo79VDEyAnRlfSqYTsy+yoHd2IOjJiKUozD2MV2D85Vso6Bug56mb9tT/fY5Urt0iqk01H7x+llAruDR2zA== + node-watch@0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/node-watch/-/node-watch-0.7.0.tgz#033c0c04239d9348f3402b6b6f9c1e689a7edbe1" @@ -11211,7 +11898,17 @@ object.assign@^4.1.0, object.assign@^4.1.1: has-symbols "^1.0.1" object-keys "^1.1.1" -object.entries@^1.1.1, object.entries@^1.1.2: +object.assign@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" + +object.entries@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.2.tgz#bc73f00acb6b6bb16c203434b10f9a7e797d3add" integrity sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA== @@ -11341,20 +12038,6 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" -ora@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ora/-/ora-5.0.0.tgz#4f0b34f2994877b49b452a707245ab1e9f6afccb" - integrity sha512-s26qdWqke2kjN/wC4dy+IQPBIMWBJlSU/0JZhk30ZDBLelW25rv66yutUWARMigpGPzcXHb+Nac5pNhN/WsARw== - dependencies: - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-spinners "^2.4.0" - is-interactive "^1.0.0" - log-symbols "^4.0.0" - mute-stream "0.0.8" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - ora@5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/ora/-/ora-5.1.0.tgz#b188cf8cd2d4d9b13fd25383bc3e5cba352c94f8" @@ -11386,7 +12069,7 @@ os-tmpdir@~1.0.2: resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= -ospath@1.2.2: +ospath@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/ospath/-/ospath-1.2.2.tgz#1276639774a3f8ef2572f7fe4280e0ea4550c07b" integrity sha1-EnZjl3Sj+O8lcvf+QoDg6kVQwHs= @@ -11406,6 +12089,13 @@ p-finally@^1.0.0: resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= +p-limit@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" @@ -11529,7 +12219,7 @@ pacote@^11.1.10: ssri "^8.0.0" tar "^6.0.1" -pako@1.0.11, pako@~1.0.5: +pako@1.0.11, pako@^1.0.11, pako@~1.0.5: version "1.0.11" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== @@ -11550,11 +12240,6 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parent-require@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/parent-require/-/parent-require-1.0.0.tgz#746a167638083a860b0eef6732cb27ed46c32977" - integrity sha1-dGoWdjgIOoYLDu9nMssn7UbDKXc= - parse-asn1@^5.0.0, parse-asn1@^5.1.5: version "5.1.6" resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" @@ -11603,19 +12288,17 @@ parse-json@^5.0.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" -parse5-htmlparser2-tree-adapter@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-5.1.1.tgz#e8c743d4e92194d5293ecde2b08be31e67461cbc" - integrity sha512-CF+TKjXqoqyDwHqBhFQ+3l5t83xYi6fVT1tQNg+Ye0JRLnTxWvIroCjEp1A0k4lneHNBGnICUf0cfYVYGEazqw== - dependencies: - parse5 "^5.1.1" +parse-uri@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/parse-uri/-/parse-uri-1.0.3.tgz#f3c24a74907a4e357c1741e96ca9faadecfd6db5" + integrity sha512-upMnGxNcm+45So85HoguwZTVZI9u11i36DdxJfGF2HYWS2eh3TIx7+/tTi7qrEq15qzGkVhsKjesau+kCk48pA== parse5@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA== -parse5@5.1.1, parse5@^5.1.1: +parse5@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== @@ -11660,7 +12343,7 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -path-is-inside@^1.0.1, path-is-inside@^1.0.2: +path-is-inside@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= @@ -11704,6 +12387,13 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== +pathfinding@^0.4.18: + version "0.4.18" + resolved "https://registry.yarnpkg.com/pathfinding/-/pathfinding-0.4.18.tgz#a9990f6fa22b7ef196e5651b049165403a045fe8" + integrity sha1-qZkPb6IrfvGW5WUbBJFlQDoEX+g= + dependencies: + heap "0.2.5" + pbkdf2@^3.0.3: version "3.1.1" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" @@ -11735,15 +12425,15 @@ pg-int8@1.0.1: resolved "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c" integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw== -pg-pool@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.2.1.tgz#5f4afc0f58063659aeefa952d36af49fa28b30e0" - integrity sha512-BQDPWUeKenVrMMDN9opfns/kZo4lxmSWhIqo+cSAF7+lfi9ZclQbr9vfnlNaPr8wYF3UYjm5X0yPAhbcgqNOdA== +pg-pool@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.2.2.tgz#a560e433443ed4ad946b84d774b3f22452694dff" + integrity sha512-ORJoFxAlmmros8igi608iVEbQNNZlp89diFVx6yV5v+ehmpMY9sK6QgpmgoXbmkNaBAx8cOOZh9g80kJv1ooyA== -pg-protocol@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.3.0.tgz#3c8fb7ca34dbbfcc42776ce34ac5f537d6e34770" - integrity sha512-64/bYByMrhWULUaCd+6/72c9PMWhiVFs3EVxl9Ct6a3v/U8+rKgqP2w+kKg/BIGgMJyB+Bk/eNivT32Al+Jghw== +pg-protocol@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.4.0.tgz#43a71a92f6fe3ac559952555aa3335c8cb4908be" + integrity sha512-El+aXWcwG/8wuFICMQjM5ZSAm6OWiJicFdNYo+VY3QP+8vI4SvLIWVe51PppTzMhikUJR+PsyIFKqfdXPz/yxA== pg-types@^2.1.0: version "2.2.0" @@ -11756,16 +12446,16 @@ pg-types@^2.1.0: postgres-date "~1.0.4" postgres-interval "^1.1.0" -pg@8.4.1: - version "8.4.1" - resolved "https://registry.yarnpkg.com/pg/-/pg-8.4.1.tgz#06cfb6208ae787a869b2f0022da11b90d13d933e" - integrity sha512-NRsH0aGMXmX1z8Dd0iaPCxWUw4ffu+lIAmGm+sTCwuDDWkpEgRCAHZYDwqaNhC5hG5DRMOjSUFasMWhvcmLN1A== +pg@8.5.1: + version "8.5.1" + resolved "https://registry.yarnpkg.com/pg/-/pg-8.5.1.tgz#34dcb15f6db4a29c702bf5031ef2e1e25a06a120" + integrity sha512-9wm3yX9lCfjvA98ybCyw2pADUivyNWT/yIP4ZcDVpMN0og70BUWYEGXPCTAQdGTAqnytfRADb7NERrY1qxhIqw== dependencies: buffer-writer "2.0.0" packet-reader "1.0.0" pg-connection-string "^2.4.0" - pg-pool "^3.2.1" - pg-protocol "^1.3.0" + pg-pool "^3.2.2" + pg-protocol "^1.4.0" pg-types "^2.1.0" pgpass "1.x" @@ -11776,10 +12466,10 @@ pgpass@1.x: dependencies: split2 "^3.1.1" -phin@3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/phin/-/phin-3.5.0.tgz#f223aa26b22bb682b3eaf150ccb66c06998037b0" - integrity sha512-BEJYqD07B5uBFPAzNpLuLh0LzHr4MDLe0Vc6gBYi+PSIL57VbiE/UvkCc86x24pKQn2X2Keg7HTJEDr8BrBCCg== +phin@3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/phin/-/phin-3.5.1.tgz#41ce07aa7eb23b1f7ded89fc00a464addddac972" + integrity sha512-jgFO28IaiWAl0xk+zmqVx7neKVokWKU8YTQC5QlB45SZnEE53LH2saqJIcyIV557VX3Gk+TdR4rwWTc3P83DSA== dependencies: centra "^2.4.2" @@ -11832,6 +12522,47 @@ pirates@^4.0.1: dependencies: node-modules-regexp "^1.0.0" +pixi.js@^6.0.0-rc: + version "6.0.0-rc" + resolved "https://registry.yarnpkg.com/pixi.js/-/pixi.js-6.0.0-rc.tgz#e9adb60484e55c564207e7a22dddf5e4edab02b9" + integrity sha512-zWfEtkNWg7X1zwaK+Es+bvmhTlDLnJOZUD5yPlP4NZVrYPv3sAJyjSyFem0t5ZbXmPHGunduZkF8GSQZ++n4wQ== + dependencies: + "@pixi/accessibility" "6.0.0-rc" + "@pixi/app" "6.0.0-rc" + "@pixi/compressed-textures" "6.0.0-rc" + "@pixi/constants" "6.0.0-rc" + "@pixi/core" "6.0.0-rc" + "@pixi/display" "6.0.0-rc" + "@pixi/extract" "6.0.0-rc" + "@pixi/filter-alpha" "6.0.0-rc" + "@pixi/filter-blur" "6.0.0-rc" + "@pixi/filter-color-matrix" "6.0.0-rc" + "@pixi/filter-displacement" "6.0.0-rc" + "@pixi/filter-fxaa" "6.0.0-rc" + "@pixi/filter-noise" "6.0.0-rc" + "@pixi/graphics" "6.0.0-rc" + "@pixi/interaction" "6.0.0-rc" + "@pixi/loaders" "6.0.0-rc" + "@pixi/math" "6.0.0-rc" + "@pixi/mesh" "6.0.0-rc" + "@pixi/mesh-extras" "6.0.0-rc" + "@pixi/mixin-cache-as-bitmap" "6.0.0-rc" + "@pixi/mixin-get-child-by-name" "6.0.0-rc" + "@pixi/mixin-get-global-position" "6.0.0-rc" + "@pixi/particles" "6.0.0-rc" + "@pixi/polyfill" "6.0.0-rc" + "@pixi/prepare" "6.0.0-rc" + "@pixi/runner" "6.0.0-rc" + "@pixi/settings" "6.0.0-rc" + "@pixi/sprite" "6.0.0-rc" + "@pixi/sprite-animated" "6.0.0-rc" + "@pixi/sprite-tiling" "6.0.0-rc" + "@pixi/spritesheet" "6.0.0-rc" + "@pixi/text" "6.0.0-rc" + "@pixi/text-bitmap" "6.0.0-rc" + "@pixi/ticker" "6.0.0-rc" + "@pixi/utils" "6.0.0-rc" + pkg-dir@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" @@ -11853,10 +12584,10 @@ pkg-dir@^4.1.0, pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" -platform@1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.3.tgz#646c77011899870b6a0903e75e997e8e51da7461" - integrity sha1-ZGx3ARiZhwtqCQPnXpl+jlHadGE= +platform@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.6.tgz#48b4ce983164b209c2d45a107adb31f473a6e7a7" + integrity sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg== pnp-webpack-plugin@1.6.4: version "1.6.4" @@ -12361,10 +13092,10 @@ postgres-interval@^1.1.0: dependencies: xtend "^4.0.0" -prebuild-install@^5.3.5: - version "5.3.6" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-5.3.6.tgz#7c225568d864c71d89d07f8796042733a3f54291" - integrity sha512-s8Aai8++QQGi4sSbs/M1Qku62PFK49Jm1CbgXklGz4nmHveDq0wzJkg7Na5QbnO1uNH8K7iqx2EQ/mV0MZEmOg== +prebuild-install@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-6.0.0.tgz#669022bcde57c710a869e39c5ca6bf9cd207f316" + integrity sha512-h2ZJ1PXHKWZpp1caLw0oX9sagVpL2YTk+ZwInQbQ3QqNd4J03O6MpFNmMTJlkfgPENWqe5kP0WjQLqz5OjLfsw== dependencies: detect-libc "^1.0.3" expand-template "^2.0.3" @@ -12397,15 +13128,15 @@ prepend-http@^1.0.0: resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= -prettier@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.1.2.tgz#3050700dae2e4c8b67c4c3f666cdb8af405e1ce5" - integrity sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg== +prettier@2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5" + integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== -pretty-bytes@5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.3.0.tgz#f2849e27db79fb4d6cfe24764fc4134f165989f2" - integrity sha512-hjGrh+P926p4R4WbaB6OckyRtO0F0/lQBiT+0gnxjV+5kjPBrfVBFCsCLbMqVQeydvIoouYTCmmEURiH3R1Bdg== +pretty-bytes@^5.4.1: + version "5.5.0" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.5.0.tgz#0cecda50a74a941589498011cf23275aa82b339e" + integrity sha512-p+T744ZyjjiaFlMUZZv6YPC5JrkNj8maRmPaQCWFJFplUAzpIUTRaTcS+7wmZtUoFXHtESJb23ISliaWyz3SHA== pretty-format@^25.2.1, pretty-format@^25.5.0: version "25.5.0" @@ -12417,15 +13148,15 @@ pretty-format@^25.2.1, pretty-format@^25.5.0: ansi-styles "^4.0.0" react-is "^16.12.0" -pretty-format@^26.4.2, pretty-format@^26.5.2: - version "26.5.2" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.5.2.tgz#5d896acfdaa09210683d34b6dc0e6e21423cd3e1" - integrity sha512-VizyV669eqESlkOikKJI8Ryxl/kPpbdLwNdPs2GrbQs18MpySB5S0Yo0N7zkg2xTRiFq4CFw8ct5Vg4a0xP0og== +pretty-format@^26.0.0, pretty-format@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" + integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== dependencies: - "@jest/types" "^26.5.2" + "@jest/types" "^26.6.2" ansi-regex "^5.0.0" ansi-styles "^4.0.0" - react-is "^16.12.0" + react-is "^17.0.1" process-nextick-args@~2.0.0: version "2.0.1" @@ -12447,6 +13178,11 @@ promise-inflight@^1.0.1: resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= +promise-polyfill@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-8.2.0.tgz#367394726da7561457aba2133c9ceefbd6267da0" + integrity sha512-k/TC0mIcPVF6yHhUvwAp7cvL6I2fFV7TzF1DuGPI8mBh4QQazf36xCKEHKTZKRysEoTQoQdKyP25J8MPJp7j5g== + promise-retry@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" @@ -12477,7 +13213,26 @@ prop-types@15.7.2, prop-types@^15.6.2, prop-types@^15.7.2: object-assign "^4.1.1" react-is "^16.8.1" -protobufjs@^6.8.6, protobufjs@^6.9.0: +protobufjs@^6.10.2: + version "6.10.2" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.10.2.tgz#b9cb6bd8ec8f87514592ba3fdfd28e93f33a469b" + integrity sha512-27yj+04uF6ya9l+qfpH187aqEzfCF4+Uit0I9ZBQVqK09hk/SQzKa2MUqUpXaVa7LOFRg1TSSr3lVxGOk6c0SQ== + dependencies: + "@protobufjs/aspromise" "^1.1.2" + "@protobufjs/base64" "^1.1.2" + "@protobufjs/codegen" "^2.0.4" + "@protobufjs/eventemitter" "^1.1.0" + "@protobufjs/fetch" "^1.1.0" + "@protobufjs/float" "^1.0.2" + "@protobufjs/inquire" "^1.1.0" + "@protobufjs/path" "^1.1.2" + "@protobufjs/pool" "^1.1.0" + "@protobufjs/utf8" "^1.1.0" + "@types/long" "^4.0.1" + "@types/node" "^13.7.0" + long "^4.0.0" + +protobufjs@^6.8.6: version "6.10.1" resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.10.1.tgz#e6a484dd8f04b29629e9053344e3970cccf13cd2" integrity sha512-pb8kTchL+1Ceg4lFd5XUpK8PdWacbvV5SK2ULH2ebrYtl4GjJmS24m6CKME67jzV53tbJxHlnNOSqQHbTsR9JQ== @@ -12514,7 +13269,7 @@ prr@~1.0.1: resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= -psl@^1.1.24, psl@^1.1.28: +psl@^1.1.28: version "1.8.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== @@ -12570,7 +13325,7 @@ punycode@1.3.2: resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= -punycode@^1.2.4, punycode@^1.4.1: +punycode@^1.2.4: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= @@ -12580,15 +13335,16 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -puppeteer@5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-5.3.1.tgz#324e190d89f25ac33dba539f57b82a18553f8646" - integrity sha512-YTM1RaBeYrj6n7IlRXRYLqJHF+GM7tasbvrNFx6w1S16G76NrPq7oYFKLDO+BQsXNtS8kW2GxWCXjIMPvfDyaQ== +puppeteer@5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-5.5.0.tgz#331a7edd212ca06b4a556156435f58cbae08af00" + integrity sha512-OM8ZvTXAhfgFA7wBIIGlPQzvyEETzDjeRa4mZRCRHxYL+GNH5WAuYUQdja3rpWZvkX/JKqmuVgbsxDNsDFjMEg== dependencies: debug "^4.1.0" - devtools-protocol "0.0.799653" + devtools-protocol "0.0.818844" extract-zip "^2.0.0" https-proxy-agent "^4.0.0" + node-fetch "^2.6.1" pkg-dir "^4.2.0" progress "^2.0.1" proxy-from-env "^1.0.0" @@ -12640,16 +13396,16 @@ querystringify@^2.1.1: resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== -ramda@0.26.1: - version "0.26.1" - resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.26.1.tgz#8d41351eb8111c55353617fc3bbffad8e4d35d06" - integrity sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ== - ramda@^0.27.1: version "0.27.1" resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.27.1.tgz#66fc2df3ef873874ffc2da6aa8984658abacf5c9" integrity sha512-PgIdVpn5y5Yns8vqb8FzBUEYn98V3xcPgawAkkgj0YJ0qDsnHCiNmZYfOGMgOvoB0eWFLpYbhxUR3mxfDIMvpw== +ramda@~0.26.1: + version "0.26.1" + resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.26.1.tgz#8d41351eb8111c55353617fc3bbffad8e4d35d06" + integrity sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ== + randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -12715,15 +13471,14 @@ react-clientside-effect@^1.2.2: dependencies: "@babel/runtime" "^7.0.0" -react-dom@16.13.1: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.13.1.tgz#c1bd37331a0486c078ee54c4740720993b2e0e7f" - integrity sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag== +react-dom@17.0.1: + version "17.0.1" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.1.tgz#1de2560474ec9f0e334285662ede52dbc5426fc6" + integrity sha512-6eV150oJZ9U2t9svnsspTMrWNyHc6chX0KzDeAOXftRa8bNeOKTTfCJ7KorIwenkHd2xqVTBTCZd79yk/lx/Ug== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" - prop-types "^15.6.2" - scheduler "^0.19.1" + scheduler "^0.20.1" react-fast-compare@3.2.0: version "3.2.0" @@ -12752,15 +13507,20 @@ react-is@16.13.1, react-is@^16.12.0, react-is@^16.7.0, react-is@^16.8.1, react-i resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== +react-is@^17.0.1: + version "17.0.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.1.tgz#5b3531bd76a645a4c9fb6e693ed36419e3301339" + integrity sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA== + react-map-interaction@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/react-map-interaction/-/react-map-interaction-2.0.0.tgz#093b3843741669b1b306e8cc5ce6725eada24bbc" integrity sha512-9KeyPHd95INODNUsx77/345vxOfN1WOtcjWXdxT92Sw+Y1GldVfmb4HnzNVtWoJg3T0Q1Yt3Sthq9IPN9OYy5w== -react-markdown@5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-5.0.1.tgz#ad0bc952f76fa04a08a91a31f66c47311ad78736" - integrity sha512-+Fu+UeIfuwhCvaIPNJfG12b9LZlBxwbj3wHt3pE+znmG/lisDIYcTjLvLE5uwkv1RB7na7uaWrGFNmpSSVBwgg== +react-markdown@5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-5.0.3.tgz#41040ea7a9324b564b328fb81dd6c04f2a5373ac" + integrity sha512-jDWOc1AvWn0WahpjW6NK64mtx6cwjM4iSsLHJPNBqoAgGOVoIdJMqaKX4++plhOtdd4JksdqzlDibgPx6B/M2w== dependencies: "@types/mdast" "^3.0.3" "@types/unist" "^2.0.3" @@ -12806,14 +13566,13 @@ react-style-singleton@^2.1.0: invariant "^2.2.4" tslib "^1.0.0" -react@16.13.1: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react/-/react-16.13.1.tgz#2e818822f1a9743122c063d6410d85c1e3afe48e" - integrity sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w== +react@17.0.1: + version "17.0.1" + resolved "https://registry.yarnpkg.com/react/-/react-17.0.1.tgz#6e0600416bd57574e3f86d92edba3d9008726127" + integrity sha512-lG9c9UuMHdcAexXtigOZLX8exLWkW0Ku29qPRU8uhF2R9BN96dLCt0psvzPLlHc5OWkgymP3qwTRgbnw5BKx3w== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" - prop-types "^15.6.2" read-cache@^1.0.0: version "1.0.0" @@ -12933,11 +13692,6 @@ readdirp@~3.5.0: dependencies: picomatch "^2.2.1" -reflect-metadata@^0.1.13: - version "0.1.13" - resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" - integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== - regenerate-unicode-properties@^8.2.0: version "8.2.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" @@ -13044,7 +13798,7 @@ replace-ext@1.0.0: resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs= -request-progress@3.0.0: +request-progress@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-3.0.0.tgz#4ca754081c7fec63f505e4faa825aa06cd669dbe" integrity sha1-TKdUCBx/7GP1BeT6qCWqBs1mnb4= @@ -13067,32 +13821,6 @@ request-promise-native@^1.0.8: stealthy-require "^1.1.1" tough-cookie "^2.3.3" -request@2.88.0: - version "2.88.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" - integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.0" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.4.3" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - request@^2.88.2: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" @@ -13124,7 +13852,7 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= -require-from-string@^2.0.1: +require-from-string@^2.0.1, require-from-string@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== @@ -13189,7 +13917,7 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@1.17.0, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.15.1, resolve@^1.16.1, resolve@^1.17.0, resolve@^1.3.2: +resolve@1.17.0, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.16.1, resolve@^1.17.0, resolve@^1.3.2: version "1.17.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== @@ -13204,6 +13932,14 @@ resolve@^1.18.1: is-core-module "^2.1.0" path-parse "^1.0.6" +resource-loader@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/resource-loader/-/resource-loader-3.0.1.tgz#33355bb5421e2994f59454bbc7f6dbff8df06d47" + integrity sha512-fBuCRbEHdLCI1eglzQhUv9Rrdcmqkydr1r6uHE2cYHvRBrcLXeSmbE/qI/urFt8rPr/IGxir3BUwM5kUK8XoyA== + dependencies: + mini-signals "^1.2.0" + parse-uri "^1.0.0" + restore-cursor@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" @@ -13233,6 +13969,13 @@ ret@~0.1.10: resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== +retry-as-promised@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/retry-as-promised/-/retry-as-promised-3.2.0.tgz#769f63d536bec4783549db0777cb56dadd9d8543" + integrity sha512-CybGs60B7oYU/qSQ6kuaFmRd9sTZ6oXSc0toqePvV74Ac6/IFZSI1ReFQmtCN+uvW1Mtqdwpvt/LGOiCBAY2Mg== + dependencies: + any-promise "^1.3.0" + retry-request@^4.0.0, retry-request@^4.1.1: version "4.1.3" resolved "https://registry.yarnpkg.com/retry-request/-/retry-request-4.1.3.tgz#d5f74daf261372cff58d08b0a1979b4d7cab0fde" @@ -13278,13 +14021,6 @@ rgba-regex@^1.0.0: resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= -rimraf@2.6.3: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - rimraf@^2.5.4, rimraf@^2.6.3, rimraf@^2.7.1: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" @@ -13411,13 +14147,6 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" -rxjs@6.6.2: - version "6.6.2" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.2.tgz#8096a7ac03f2cc4fe5860ef6e572810d9e01c0d2" - integrity sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg== - dependencies: - tslib "^1.9.0" - rxjs@6.6.3, rxjs@^6.3.3, rxjs@^6.4.0, rxjs@^6.5.4: version "6.6.3" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" @@ -13501,7 +14230,7 @@ sax@0.5.x: resolved "https://registry.yarnpkg.com/sax/-/sax-0.5.8.tgz#d472db228eb331c2506b0e8c15524adb939d12c1" integrity sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE= -sax@>=0.6.0, sax@~1.2.4: +sax@~1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== @@ -13513,10 +14242,10 @@ saxes@^5.0.0: dependencies: xmlchars "^2.2.0" -scheduler@^0.19.1: - version "0.19.1" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196" - integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA== +scheduler@^0.20.1: + version "0.20.1" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.1.tgz#da0b907e24026b01181ecbc75efdc7f27b5a000c" + integrity sha512-LKTe+2xNJBNxu/QhHvDR14wUXHRQbVY5ZOYpOGWRzhydZUqrLb2JBvLPY7cAqFmqrWuDED0Mjk7013SZiOz6Bw== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" @@ -13585,6 +14314,13 @@ semver@7.x, semver@^7.0.0, semver@^7.1.1, semver@^7.1.3, semver@^7.2.1, semver@^ resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== +semver@^7.3.4: + version "7.3.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" + integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== + dependencies: + lru-cache "^6.0.0" + send@0.17.1: version "0.17.1" resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" @@ -13604,6 +14340,30 @@ send@0.17.1: range-parser "~1.2.1" statuses "~1.5.0" +sequelize-pool@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/sequelize-pool/-/sequelize-pool-6.1.0.tgz#caaa0c1e324d3c2c3a399fed2c7998970925d668" + integrity sha512-4YwEw3ZgK/tY/so+GfnSgXkdwIJJ1I32uZJztIEgZeAO6HMgj64OzySbWLgxj+tXhZCJnzRfkY9gINw8Ft8ZMg== + +sequelize@6.3.5: + version "6.3.5" + resolved "https://registry.yarnpkg.com/sequelize/-/sequelize-6.3.5.tgz#80e3db7ac8b76d98c45ca93334197eb6e2335158" + integrity sha512-MiwiPkYSA8NWttRKAXdU9h0TxP6HAc1fl7qZmMO/VQqQOND83G4nZLXd0kWILtAoT9cxtZgFqeb/MPYgEeXwsw== + dependencies: + debug "^4.1.1" + dottie "^2.0.0" + inflection "1.12.0" + lodash "^4.17.15" + moment "^2.26.0" + moment-timezone "^0.5.31" + retry-as-promised "^3.2.0" + semver "^7.3.2" + sequelize-pool "^6.0.0" + toposort-class "^1.0.1" + uuid "^8.1.0" + validator "^10.11.0" + wkx "^0.5.0" + serialize-javascript@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-3.1.0.tgz#8bf3a9170712664ef2561b44b691eafe399214ea" @@ -13671,7 +14431,7 @@ setprototypeof@1.1.1: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== -sha.js@^2.4.0, sha.js@^2.4.11, sha.js@^2.4.8: +sha.js@^2.4.0, sha.js@^2.4.8: version "2.4.11" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== @@ -13696,19 +14456,36 @@ shallow-clone@^3.0.0: dependencies: kind-of "^6.0.2" -sharp@0.26.2: - version "0.26.2" - resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.26.2.tgz#3d5777d246ae32890afe82a783c1cbb98456a88c" - integrity sha512-bGBPCxRAvdK9bX5HokqEYma4j/Q5+w8Nrmb2/sfgQCLEUx/HblcpmOfp59obL3+knIKnOhyKmDb4tEOhvFlp6Q== +sharp@0.26.3: + version "0.26.3" + resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.26.3.tgz#9de8577a986b22538e6e12ced1f7e8a53f9728de" + integrity sha512-NdEJ9S6AMr8Px0zgtFo1TJjMK/ROMU92MkDtYn2BBrDjIx3YfH9TUyGdzPC+I/L619GeYQc690Vbaxc5FPCCWg== dependencies: - color "^3.1.2" + array-flatten "^3.0.0" + color "^3.1.3" detect-libc "^1.0.3" node-addon-api "^3.0.2" npmlog "^4.1.2" - prebuild-install "^5.3.5" + prebuild-install "^6.0.0" semver "^7.3.2" simple-get "^4.0.0" - tar-fs "^2.1.0" + tar-fs "^2.1.1" + tunnel-agent "^0.6.0" + +sharp@0.27.0: + version "0.27.0" + resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.27.0.tgz#523fba913ba674985dcc688a6a5237384079d80f" + integrity sha512-II+YBCW3JuVWQZdpTEA2IBjJcYXPuoKo3AUqYuW+FK9Um93v2gPE2ihICCsN5nHTUoP8WCjqA83c096e8n//Rw== + dependencies: + array-flatten "^3.0.0" + color "^3.1.3" + detect-libc "^1.0.3" + node-addon-api "^3.1.0" + npmlog "^4.1.2" + prebuild-install "^6.0.0" + semver "^7.3.4" + simple-get "^4.0.0" + tar-fs "^2.1.1" tunnel-agent "^0.6.0" shebang-command@^1.2.0: @@ -13803,14 +14580,14 @@ slice-ansi@0.0.4: resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU= -slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" smart-buffer@^4.1.0: version "4.1.0" @@ -13929,7 +14706,7 @@ source-map-support@0.5.16: buffer-from "^1.0.0" source-map "^0.6.0" -source-map-support@^0.5.17, source-map-support@^0.5.5, source-map-support@^0.5.6, source-map-support@~0.5.12: +source-map-support@^0.5.17, source-map-support@^0.5.5, source-map-support@^0.5.6, source-map-support@~0.5.12, source-map-support@~0.5.19: version "0.5.19" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== @@ -13954,7 +14731,7 @@ source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, sourc resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@0.7.3, source-map@^0.7.3: +source-map@0.7.3, source-map@^0.7.3, source-map@~0.7.2: version "0.7.3" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== @@ -14438,13 +15215,6 @@ stylus@0.54.5: sax "0.5.x" source-map "0.1.x" -supports-color@7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" - integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== - dependencies: - has-flag "^4.0.0" - supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" @@ -14471,7 +15241,7 @@ supports-color@^6.1.0: dependencies: has-flag "^3.0.0" -supports-color@^7.0.0, supports-color@^7.1.0: +supports-color@^7.0.0, supports-color@^7.1.0, supports-color@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== @@ -14520,22 +15290,22 @@ symbol-tree@^3.2.4: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -table@^5.2.3: - version "5.4.6" - resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" - integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== +table@^6.0.4: + version "6.0.7" + resolved "https://registry.yarnpkg.com/table/-/table-6.0.7.tgz#e45897ffbcc1bcf9e8a87bf420f2c9e5a7a52a34" + integrity sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g== dependencies: - ajv "^6.10.2" - lodash "^4.17.14" - slice-ansi "^2.1.0" - string-width "^3.0.0" + ajv "^7.0.2" + lodash "^4.17.20" + slice-ansi "^4.0.0" + string-width "^4.2.0" tapable@^1.0.0, tapable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -tar-fs@^2.0.0, tar-fs@^2.1.0: +tar-fs@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.0.tgz#d1cdd121ab465ee0eb9ccde2d35049d3f3daf0d5" integrity sha512-9uW5iDvrIMCVpvasdFHW0wJPez0K4JnMZtsuIeDI7HyMGJNxmDZDOCQROr7lXyS+iL/QMpj07qcjGYTSdRFXUg== @@ -14545,6 +15315,16 @@ tar-fs@^2.0.0, tar-fs@^2.1.0: pump "^3.0.0" tar-stream "^2.0.0" +tar-fs@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" + integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== + dependencies: + chownr "^1.1.1" + mkdirp-classic "^0.5.2" + pump "^3.0.0" + tar-stream "^2.1.4" + tar-stream@^2.0.0: version "2.1.4" resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.4.tgz#c4fb1a11eb0da29b893a5b25476397ba2d053bfa" @@ -14556,6 +15336,17 @@ tar-stream@^2.0.0: inherits "^2.0.3" readable-stream "^3.1.1" +tar-stream@^2.1.4: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + tar@^6.0.1, tar@^6.0.2: version "6.0.5" resolved "https://registry.yarnpkg.com/tar/-/tar-6.0.5.tgz#bde815086e10b39f1dcd298e89d596e1535e200f" @@ -14631,14 +15422,14 @@ terser@4.3.8: source-map "~0.6.1" source-map-support "~0.5.12" -terser@5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.1.0.tgz#1f4ab81c8619654fdded51f3157b001e1747281d" - integrity sha512-pwC1Jbzahz1ZPU87NQ8B3g5pKbhyJSiHih4gLH6WZiPU8mmS1IlGbB0A2Nuvkj/LCNsgIKctg6GkYwWCeTvXZQ== +terser@5.5.1: + version "5.5.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.5.1.tgz#540caa25139d6f496fdea056e414284886fb2289" + integrity sha512-6VGWZNVP2KTUcltUQJ25TtNjx/XgdDsBDKGt8nN0MpydU36LmbPPcMBd2kmtZNNGVVDLg44k7GKeHHj+4zPIBQ== dependencies: commander "^2.20.0" - source-map "~0.6.1" - source-map-support "~0.5.12" + source-map "~0.7.2" + source-map-support "~0.5.19" terser@^4.1.2, terser@^4.6.12, terser@^4.8.0: version "4.8.0" @@ -14663,20 +15454,6 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= -thenify-all@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" - integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY= - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4": - version "3.3.1" - resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" - integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== - dependencies: - any-promise "^1.0.0" - throat@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" @@ -14714,9 +15491,9 @@ thunky@^1.0.2: integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== timers-browserify@^2.0.4: - version "2.0.11" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" - integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ== + version "2.0.12" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" + integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== dependencies: setimmediate "^1.0.4" @@ -14742,12 +15519,12 @@ tmp@0.0.33, tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" -tmp@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.1.0.tgz#ee434a4e22543082e294ba6201dcc6eafefa2877" - integrity sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw== +tmp@~0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== dependencies: - rimraf "^2.6.3" + rimraf "^3.0.0" tmpl@1.0.x: version "1.0.4" @@ -14806,6 +15583,11 @@ toidentifier@1.0.0: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== +toposort-class@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toposort-class/-/toposort-class-1.0.1.tgz#7ffd1f78c8be28c3ba45cd4e1a3f5ee193bd9988" + integrity sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg= + tough-cookie@^2.3.3, tough-cookie@~2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" @@ -14823,14 +15605,6 @@ tough-cookie@^3.0.1: psl "^1.1.28" punycode "^2.1.1" -tough-cookie@~2.4.3: - version "2.4.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" - integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== - dependencies: - psl "^1.1.24" - punycode "^1.4.1" - tr46@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" @@ -14860,10 +15634,10 @@ trough@^1.0.0: resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== -ts-jest@26.4.0: - version "26.4.0" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.4.0.tgz#903c7827f3d3bc33efc2f91be294b164400c32e3" - integrity sha512-ofBzoCqf6Nv/PoWb/ByV3VNKy2KJSikamOBxvR3E6eVdIw10GwAXoyvMWXXjZJK2s6S27ZE8fI+JBTnGaovl6Q== +ts-jest@26.4.4: + version "26.4.4" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.4.4.tgz#61f13fb21ab400853c532270e52cc0ed7e502c49" + integrity sha512-3lFWKbLxJm34QxyVNNCgXX1u4o/RV0myvA2y2Bxm46iGIjKlaY0own9gIckbjZJPn+WaJEnfPPJ20HHGpoq4yg== dependencies: "@types/jest" "26.x" bs-logger "0.x" @@ -15058,28 +15832,6 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typeorm@0.2.28: - version "0.2.28" - resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.2.28.tgz#828df288d01ca75b38e990fa1628a7cd5a29f39f" - integrity sha512-BTtUBGwsFzODvHY+AlWL9pvJ2uEj8qpHwmo03z43RvZkG8BAryQJQ3lZ7HlGvI9IQU8y1IYGWe97HsVr8kXB9g== - dependencies: - "@sqltools/formatter" "1.2.2" - app-root-path "^3.0.0" - buffer "^5.5.0" - chalk "^4.1.0" - cli-highlight "^2.1.4" - debug "^4.1.1" - dotenv "^8.2.0" - glob "^7.1.6" - js-yaml "^3.14.0" - mkdirp "^1.0.4" - reflect-metadata "^0.1.13" - sha.js "^2.4.11" - tslib "^1.13.0" - xml2js "^0.4.23" - yargonaut "^1.1.2" - yargs "^16.0.3" - typescript@4.0.5: version "4.0.5" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.0.5.tgz#ae9dddfd1069f1cb5beb3ef3b2170dd7c1332389" @@ -15220,6 +15972,16 @@ universalify@^0.1.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== +universalify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" + integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -15238,7 +16000,7 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" -untildify@4.0.0: +untildify@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== @@ -15282,7 +16044,7 @@ url-parse@^1.4.3: querystringify "^2.1.1" requires-port "^1.0.0" -url@0.11.0, url@^0.11.0: +url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= @@ -15359,15 +16121,20 @@ uuid@^8.0.0, uuid@^8.3.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.1.tgz#2ba2e6ca000da60fce5a196954ab241131e05a31" integrity sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg== +uuid@^8.1.0: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + v8-compile-cache@^2.0.3: version "2.1.1" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== -v8-to-istanbul@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-6.0.1.tgz#7ef0e32faa10f841fe4c1b0f8de96ed067c0be1e" - integrity sha512-PzM1WlqquhBvsV+Gco6WSFeg1AGdD53ccMRkFeyHRE/KRZaVacPOmQYP3EeVgDBtKD2BJ8kgynBQ5OtKiHCH+w== +v8-to-istanbul@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.1.0.tgz#5b95cef45c0f83217ec79f8fc7ee1c8b486aee07" + integrity sha512-uXUVqNUCLa0AH1vuVxzi+MI4RfxEOKt9pBgKwHbgH7st8Kv2P1m+jvWNnektzBh5QShF3ODgKmUFCf38LnVz1g== dependencies: "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^1.6.0" @@ -15388,6 +16155,11 @@ validate-npm-package-name@^3.0.0: dependencies: builtins "^1.0.3" +validator@^10.11.0: + version "10.11.0" + resolved "https://registry.yarnpkg.com/validator/-/validator-10.11.0.tgz#003108ea6e9a9874d31ccc9e5006856ccd76b228" + integrity sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw== + vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" @@ -15459,10 +16231,29 @@ warning@^4.0.3: dependencies: loose-envify "^1.0.0" -watchpack-chokidar2@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz#9948a1866cbbd6cb824dea13a7ed691f6c8ddff0" - integrity sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA== +wasm-dce@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wasm-dce/-/wasm-dce-1.0.2.tgz#7e21e566fa17c61e8e257742a377a5bdb8f2e4f5" + integrity sha512-Fq1+nu43ybsjSnBquLrW/cULmKs61qbv9k8ep13QUe0nABBezMoNAA+j6QY66MW0/eoDVDp1rjXDqQ2VKyS/Xg== + dependencies: + "@babel/core" "^7.0.0-beta.39" + "@babel/traverse" "^7.0.0-beta.39" + "@babel/types" "^7.0.0-beta.39" + babylon "^7.0.0-beta.39" + webassembly-interpreter "0.0.30" + +wasm-loader@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/wasm-loader/-/wasm-loader-1.3.0.tgz#a123a6b6c9a9dac60de38449703be3537742e155" + integrity sha512-R4s75XH+o8qM+WaRrAU9S2rbAMDzob18/S3V8R9ZoFpZkPWLAohWWlzWAp1ybeTkOuuku/X1zJtxiV0pBYxZww== + dependencies: + loader-utils "^1.1.0" + wasm-dce "^1.0.0" + +watchpack-chokidar2@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" + integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww== dependencies: chokidar "^2.1.8" @@ -15475,15 +16266,15 @@ watchpack@2.0.0-beta.13: graceful-fs "^4.1.2" watchpack@^1.6.0, watchpack@^1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.4.tgz#6e9da53b3c80bb2d6508188f5b200410866cd30b" - integrity sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg== + version "1.7.5" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" + integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ== dependencies: graceful-fs "^4.1.2" neo-async "^2.5.0" optionalDependencies: chokidar "^3.4.1" - watchpack-chokidar2 "^2.0.0" + watchpack-chokidar2 "^2.0.1" wbuf@^1.1.0, wbuf@^1.7.3: version "1.7.3" @@ -15499,6 +16290,20 @@ wcwidth@^1.0.1: dependencies: defaults "^1.0.3" +webassembly-floating-point-hex-parser@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/webassembly-floating-point-hex-parser/-/webassembly-floating-point-hex-parser-0.1.2.tgz#85bb01f54e68690c2645ea0cfad26c1110fdf988" + integrity sha512-TUf1H++8U10+stJbFydnvrpG5Sznz5Rilez/oZlV5zI0C/e4cSxd8rALAJ8VpTvjVWxLmL3SVSJUK6Ap9AoiNg== + +webassembly-interpreter@0.0.30: + version "0.0.30" + resolved "https://registry.yarnpkg.com/webassembly-interpreter/-/webassembly-interpreter-0.0.30.tgz#f35aaec0fff2e6fd9ca7277eb1a9059dccedcb7f" + integrity sha512-+Jdy2piEvz9T5j751mOE8+rBO12p+nNW6Fg4kJZ+zP1oUfsm+151sbAbM8AFxWTURmWCGP+r8Lxwfv3pzN1bCQ== + dependencies: + "@babel/code-frame" "^7.0.0-beta.36" + long "^3.2.0" + webassembly-floating-point-hex-parser "0.1.2" + webidl-conversions@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" @@ -15769,6 +16574,13 @@ widest-line@^3.1.0: dependencies: string-width "^4.0.0" +wkx@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/wkx/-/wkx-0.5.0.tgz#c6c37019acf40e517cc6b94657a25a3d4aa33e8c" + integrity sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg== + dependencies: + "@types/node" "*" + word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" @@ -15821,15 +16633,6 @@ wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -15845,17 +16648,10 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" -write@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" - integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== - dependencies: - mkdirp "^0.5.1" - -ws@7.3.1, ws@^7.2.3: - version "7.3.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.1.tgz#d0547bf67f7ce4f12a72dfe31262c68d7dc551c8" - integrity sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA== +ws@7.4.2: + version "7.4.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.2.tgz#782100048e54eb36fe9843363ab1c68672b261dd" + integrity sha512-T4tewALS3+qsrpGI/8dqNMLIVdq/g/85U98HPMa6F0m6xTbvhXU6RCQLqPH3+SlomNV/LdY6RXEbBpMH6EOJnA== ws@^6.2.1: version "6.2.1" @@ -15864,6 +16660,11 @@ ws@^6.2.1: dependencies: async-limiter "~1.0.0" +ws@^7.2.3: + version "7.3.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.1.tgz#d0547bf67f7ce4f12a72dfe31262c68d7dc551c8" + integrity sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA== + xdg-basedir@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" @@ -15874,31 +16675,11 @@ xml-name-validator@^3.0.0: resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== -xml2js@^0.4.23: - version "0.4.23" - resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" - integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug== - dependencies: - sax ">=0.6.0" - xmlbuilder "~11.0.0" - -xmlbuilder@~11.0.0: - version "11.0.1" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" - integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== - xmlchars@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== -xregexp@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.3.0.tgz#7e92e73d9174a99a59743f67a4ce879a04b5ae50" - integrity sha512-7jXDIFXh5yJ/orPn4SXjuVrWWoi4Cr8jfV1eHv9CixKSbU+jY4mxfrBwAuDvupPNKpMUY+FeIqsVw/JLT9+B8g== - dependencies: - "@babel/runtime-corejs3" "^7.8.3" - xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" @@ -15916,11 +16697,6 @@ y18n@^4.0.0: resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== -y18n@^5.0.2: - version "5.0.5" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18" - integrity sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg== - yallist@^3.0.2: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" @@ -15936,21 +16712,12 @@ yaml@^1.7.2: resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== -yargonaut@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/yargonaut/-/yargonaut-1.1.4.tgz#c64f56432c7465271221f53f5cc517890c3d6e0c" - integrity sha512-rHgFmbgXAAzl+1nngqOcwEljqHGG9uUZoPjsdZEs1w5JW9RXYzrSvH/u70C1JE5qFi0qjsdhnUX/dJRpWqitSA== - dependencies: - chalk "^1.1.1" - figlet "^1.1.1" - parent-require "^1.0.0" - yargs-parser@20.0.0: version "20.0.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.0.0.tgz#c65a1daaa977ad63cebdd52159147b789a4e19a9" integrity sha512-8eblPHTL7ZWRkyjIZJjnGf+TijiKJSwA24svzLRVvtgoi/RZiKa9fFQTrlx0OKLnyHSdt/enrdadji6WFfESVA== -yargs-parser@20.x, yargs-parser@^20.2.2: +yargs-parser@20.x: version "20.2.3" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.3.tgz#92419ba867b858c868acf8bae9bf74af0dd0ce26" integrity sha512-emOFRT9WVHw03QSvN5qor9QQT9+sw5vwxfYweivSMHTcAXPefwVae2FjO7JJjj8hCE4CzPOPeFM83VwT29HCww== @@ -15971,7 +16738,7 @@ yargs-parser@^18.1.2: camelcase "^5.0.0" decamelize "^1.2.0" -yargs@15.4.1, yargs@^15.0.0, yargs@^15.3.1, yargs@^15.4.1: +yargs@15.4.1, yargs@^15.4.1: version "15.4.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== @@ -16004,20 +16771,7 @@ yargs@^13.3.2: y18n "^4.0.0" yargs-parser "^13.1.2" -yargs@^16.0.3: - version "16.1.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.1.0.tgz#fc333fe4791660eace5a894b39d42f851cd48f2a" - integrity sha512-upWFJOmDdHN0syLuESuvXDmrRcWd1QafJolHskzaw79uZa7/x53gxQKiR07W59GWY1tFhhU/Th9DrtSfpS782g== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.2" - yargs-parser "^20.2.2" - -yauzl@2.10.0, yauzl@^2.10.0: +yauzl@^2.10.0: version "2.10.0" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= @@ -16025,14 +16779,12 @@ yauzl@2.10.0, yauzl@^2.10.0: buffer-crc32 "~0.2.3" fd-slicer "~1.1.0" -yauzl@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005" - integrity sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU= - dependencies: - fd-slicer "~1.0.1" - yn@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==